2

我正在尝试实施此处记录的生存分析模型: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. 为什么我没有在任何地方考虑客户 ID?
4

0 回答 0