【发布时间】:2019-11-01 09:50:27
【问题描述】:
我对机器学习和 r 非常陌生,所以我的问题可能看起来不清楚或需要更多信息。我试图尽可能多地解释。如果我使用了错误的术语或短语,请纠正我。对此的任何帮助将不胜感激。
上下文 - 我正在尝试构建一个模型来预测事件“何时”发生。
我有一个具有以下结构的数据集。这不是实际数据。它是为解释场景而创建的虚拟数据。由于机密性,无法共享实际数据。
关于数据 -
- 客户购买了允许使用 x$ 的订阅 提供的服务金额。
- 一个客户可以有多个订阅。订阅可以在时间上重叠,也可以在时间上序列化
- 每个订阅都有一个使用限制,即 x$
- 每个订阅都有一个开始日期和结束日期。
- 结束日期后将不再使用订阅。
- 客户在使用服务时有自己的行为/模式。这由其他派生变量每月利用率、平均每月利用率等来描述。
-
客户可以使用 $x 以上的服务。这由列表示 上表中的“ExceedanceMonth”。价值 1 表示客户 在订阅的第一个月超过 $x,价值 5 说 客户在订阅的第 5 个月超过了 $x。的价值 NULL 表示尚未达到限制 $x。这可能是
要么是因为subscription ended and customer didn't overuse or subscription is yet to end and customer might overuse in future - 上面描述的或条件之后的第二个场景是我想要的 预测。在尚未结束的订阅和客户中 没有过度使用,什么时候会达到限制。即预测 上表中的 ExceedanceMonth 列。
- 在达到此模型之前 - 我使用决策树构建了一个分类模型,该模型可以预测客户是否会超过限制金额,即预测在接下来的 2 个月内 LimitReached = 1 还是 0。我不确定是否应该使用所有数据训练此处讨论的模型(预测事件发生时间),并使用 Limitreached = 1 在客户/订阅上测试/使用模型,或者仅使用将具有 Limitreached 的客户/订阅训练模型= 1
我研究过生存模型。我知道像 Cox 这样的生存模型可用于理解危险函数并了解每个变量如何影响事件发生的时间。我尝试在 cox 中使用 predict 函数,但我不明白是否可以使用传递给“type”参数的任何值来预测实际时间。即我不明白如何预测“何时”会超过限制的实际值
对于这种情况,生存模型可能不是正确的方法。所以,请告诉我解决这个问题的最佳方法是什么。
#define survival object
recsurv <- Surv(time=df$ExceedanceMonth, event=df$LimitReached)
#only for testing the code
train = subset(df,df$SubStartDate>="20150301" & df$SubEndDate<="20180401")
test = subset(df,df$SubStartDate>"20180401") #only for testing the code
fit <- coxph(Surv(df$ExceedanceMonth, df$LimitReached) ~ df$SubDurationInMonths+df$`#subs`+df$LimitAmount+df$Monthlyutitlization+df$AvgMonthlyUtilization, train, model = TRUE)
predicted <- predict(fit, newdata = test)
head(predicted)
1 2 3 4 5 6
0.75347328 0.23516619 -0.05535162 -0.03759123 -0.65658488 -0.54233043
提前感谢您!
【问题讨论】:
标签: r machine-learning prediction cox-regression survival