【问题标题】:Predicting WHEN an event is going to occur预测事件何时发生
【发布时间】: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


    【解决方案1】:

    生存模型非常适合您尝试做的事情。 (我假设你从现在开始正确地估计了模型。)

    关键是了解模型的结果。对于 Cox,predict() 中的默认数量是线性组合(b0 + b1x1 + b2x2...,尽管 Cox 不估计 b0)。仅凭这一点不会告诉你什么时候。

    predict() 指定 type="expected" 将通过预期持续时间为您提供时间 - 平均多长时间,直到客户达到他/她的数据限制,以及后续时间(您观察客户的时间) 设置为等于客户的实际持续时间(从coxph 模型对象中检索)。

    coxed 包还将为您提供预期的持续时间,使用不同的方法计算,无需担心后续时间。在输入newdata 参数时,它也更宽容一些,特别是如果您有一个特定的协变量配置文件。请参阅包小插曲here

    有关coxph.predict() 的更多信息,另请参阅this 线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2016-09-07
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-28
      相关资源
      最近更新 更多