Анализ выживания AFT с помощью Scala - PullRequest
2 голосов
/ 21 марта 2019

Я пытаюсь реализовать модель анализа выживания, как описано здесь: 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)

Но я не понимаю:

  1. Это правильный способ моделирования данных в соответствии с документацией Scala?
  2. Почему я не принимаю во внимание идентификатор клиентав любом месте?
...