Scala生存分析

Scala生存分析,scala,apache-spark,survival-analysis,survival,Scala,Apache Spark,Survival Analysis,Survival,我正试图实现本文所述的生存分析模型:但我无法确定您应该如何进行实际实现 我试图为一家企业的客户建立“生存能力”模型。客户的生存能力是基于上个月是否进行了购买而给客户的标签。如果客户未能购买,他们将被视为死亡/受到谴责。我考虑的两个因素是“广告发布的次数”和“在商业网站上花费的时间”。每月收集有关客户的数据 以下是我在三个月的时间段内两个客户(CustA和CustB)的数据: val seqCust = Seq( //Customer,Period,Censor,# of Ads,Amount o

我正试图实现本文所述的生存分析模型:但我无法确定您应该如何进行实际实现

我试图为一家企业的客户建立“生存能力”模型。客户的生存能力是基于上个月是否进行了购买而给客户的标签。如果客户未能购买,他们将被视为死亡/受到谴责。我考虑的两个因素是“广告发布的次数”和“在商业网站上花费的时间”。每月收集有关客户的数据

以下是我在三个月的时间段内两个客户(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文档对数据建模的正确方法吗
  • 为什么我在任何地方都不考虑客户ID
    我不确定你的第一个问题,我不清楚。根据您的第二个问题,默认标签、审查和功能列分别为“标签”、“审查”和“功能”。这就是为什么你不需要明确指出。