Прогнозирование КОГДА событие произойдет - PullRequest
1 голос
/ 18 июня 2019

Я очень плохо знаком с Машинным обучением и r, поэтому мой вопрос может показаться неясным или потребовать больше информации.Я пытался объяснить как можно больше.Пожалуйста, исправьте меня, если я использовал неправильные термины или фразы.Любая помощь по этому вопросу будет принята с благодарностью.

Контекст - я пытаюсь построить модель, чтобы предсказать, «когда» произойдет событие.

У меня есть набор данных, который имеет структуру ниже.Это не фактические данные.Это фиктивные данные, созданные для объяснения сценария.Фактические данные не могут быть переданы из-за конфиденциальности.

enter image description here

О данных -

  • Клиент покупает подписку, по которой ему разрешено использовать сумму в размере х $услуга предоставляется.
  • У клиента может быть несколько подписок.Подписки могут перекрываться во времени или сериализироваться во времени
  • У каждой подписки есть ограничение на использование, которое составляет x $
  • Каждая подписка имеет дату начала и окончания.
  • Подписка больше не будет использоваться после окончания срока действия.
  • Клиент имеет свое собственное поведение / шаблон, в котором он использует службу.Это описывается другими производными переменными Ежемесячное использование, среднее ежемесячное использование и т. Д.
  • Клиент может использовать услугу свыше $ x.На это указывает столбец «ExceedanceMonth» в таблице выше.Значение 1 означает, что клиент превысил x в первый месяц подписки, значение 5 означает, что покупатель превысил x в 5-м месяце подписки.Значение NULL указывает, что предел $ x еще не достигнут.Это может быть
    либо потому, что

     subscription ended and customer didn't overuse
      or 
     subscription is yet to end and customer might overuse in future
    
  • Второй сценарий после или условие, описанное выше, это то, что я хочу предсказать.Среди подписок, которые еще не закончились, и клиент не злоупотребил, КОГДА будет достигнут пределт. е. прогнозировать столбец ExceedanceMonth в приведенной выше таблице.
  • До достижения этой модели - у меня есть модель классификации, построенная с использованием дерева решений, которая прогнозирует, собирается ли клиент пересечь лимит количества, или нет, т.е. прогнозирует, если LimitReached = 1 или 0 в следующие 2 месяца.Я не уверен, следует ли мне обучать обсуждаемую здесь модель (прогнозировать время до события) со всеми данными и тестировать / использовать модель на клиенте / подписках с Limitreached = 1 или обучать модель только с клиентами / подпиской, для которых будет использоваться Limitreached= 1

Я исследовал модели выживания.Я понимаю, что такая модель выживания, как Кокс, может использоваться для понимания функции опасности и понимания того, как каждая переменная может влиять на время до события.Я пытался использовать функцию предсказания с Коксом, но я не понимал, можно ли использовать какое-либо из значений, переданных параметру «тип», для предсказания фактического времени.то есть я не понимал, как я могу предсказать фактическое значение для «КОГДА» будет превышено ограничение

Может быть, модель выживания не является правильным подходом для этого сценария.Поэтому, пожалуйста, сообщите мне, что может быть лучшим способом решения этой проблемы.

#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

Заранее спасибо!

1 Ответ

1 голос
/ 12 июля 2019

Модели выживания хороши для того, что вы пытаетесь сделать. (Я предполагаю, что вы правильно оценили модель с этого момента.)

Ключ к пониманию того, что выходит из модели. Для Кокса значение по умолчанию из predict() равно линейной комбинации (b0 + b1x1 + b2x2 ..., хотя Кокс не оценивает b0). Это само по себе ничего не скажет о том, когда.

Указав type="expected" для predict(), вы получите, когда через ожидаемую продолжительность - как долго, в среднем, до того, как клиент достигнет своего предела данных, со временем наблюдения (как долго вы наблюдаете за клиентом) ) устанавливается равным фактической продолжительности клиента (полученной из объекта модели coxph).

Пакет coxed также даст вам ожидаемую продолжительность, рассчитанную другим методом, без необходимости беспокоиться о времени наблюдения. Это также немного более простительно, когда дело доходит до ввода аргумента newdata, особенно если вы имеете в виду определенный ковариатный профиль. Смотри виньетка пакета здесь .

См. Также эту ветку , чтобы узнать больше о coxph.predict().

...