Я пытаюсь реализовать модель анализа выживания, как описано здесь: Scala-Docs # Survival-Regression , но я не могу понять, как вы должны выполнять реальную реализацию.
Я пытаюсь смоделировать «живучесть» клиента для бизнеса.Выживаемость клиента - это ярлык, который выдается покупателям в зависимости от того, была ли сделана покупка в прошлом месяце.Если клиент не совершает покупку, он считается умершим / осудившим.Два фактора, которые я принимаю во внимание, - это «количество объявлений» и «количество времени, проведенного на бизнес-сайте».Данные собираются о клиенте ежемесячно.
Вот как выглядят мои данные для двух клиентов (CustA и CustB) за три месяца:
val seqCust = Seq(
//Customer,Period,Censor,# of Ads,Amount of Time on Site
("CustA",1,0,4,2400),
("CustA",2,0,6,1800),
("CustA",3,1,2,600),
("CustB",1,0,2,2800),
("CustB",2,0,4,2100),
("CustB",3,0,3,1200)
)
Я хочу затемчтобы преобразовать его во что-то вроде этого, укажите в документах:
val dfCust = seqCust.map(cr=>(cr._2,cr._3,Vectors.dense(cr._4,cr._5)).toDF("label", "censor", "features")
Чтобы мои данные теперь выглядели так:
[1,0,[4,2400]],
[2,0,[6,1800]],
[3,1,[2,600]],
[1,0,[2,2800]],
[2,0,[4,2100]],
[3,0,[3,1200]]
А затем выполните следующее:
val quantileProbabilities = Array(0.3, 0.6)
val aft = new AFTSurvivalRegression()
.setQuantileProbabilities(quantileProbabilities)
.setQuantilesCol("quantiles")
val model = aft.fit(dfCust)
// Print the coefficients, intercept and scale parameter for AFT survival regression
println(s"Coefficients: ${model.coefficients}")
println(s"Intercept: ${model.intercept}")
println(s"Scale: ${model.scale}")
model.transform(dfCust).show(false)
Но я не понимаю:
- Это правильный способ моделирования данных в соответствии с документацией Scala?
- Почему я не принимаю во внимание идентификатор клиентав любом месте?