我正在尝试实施此处记录的生存分析模型: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)
但是我不明白: