Предсказать оценку выживаемости и CLTV для договорных дискретных политик / условий
Я пытаюсь предсказать оценку выживаемости и LTV для договорных и дискретных полисов (в страховании) в Python. Я просмотрел несколько сайтов, но смог найти много примеров только для неконтрактных (в розницу).
Я использовал следующий код:
from lifelines import CoxPHFitter
#After all feature selection and EDA
cph_train, cph_test = train_test_split(features, test_size=0.2)
cph = CoxPHFitter()
cph.fit(cph_train, 'TIME', event_col='EVENT')
cph.print_summary()
Где ВРЕМЯ - количество дней между датой принятия политики и текущей датой для клиентов ACTIVE и между датой принятия политики и датой отказа для неактивных клиентов.
СОБЫТИЕ - это индикатор того, является ли клиент АКТИВНЫМ или АКТИВНЫМ.
После подгонки модели я получил согласие 0,7 (что я чувствую, все в порядке).
С этого момента, как мне продолжить получать оценку выживания для клиентов ACTIVE и пожизненную ценность (CLTV)? По сути, мне нужно предсказать, кто является ценными клиентами, которые останутся с компанией надолго.
Я добавил код, пройдя через несколько постов и предложений Cam.
censored_subjects = features.loc[features['EVENT'] == 1] #Selecting only the ACTIVE ones
unconditioned_sf = cph.predict_survival_function(censored_subjects)
conditioned_sf = unconditioned_sf.apply(lambda c: (c / c.loc[features.loc[c.name, 'TIME']]).clip_upper(1))
predictions_75 = qth_survival_times(.75, conditioned_sf)
predictions_50 = qth_survival_times(.50, conditioned_sf)
values = predictions_75.T.join(data[['PREAMT','TIME']])
values50 = predictions_50.T.join(data[['PREAMT','TIME']])
values['RemainingValue'] = values['PREAMT'] * (values[0.75] - values['TIME'])
Итак, что означает вывод:0.5 PREAMT TIME
--- Число в столбце 0.5 обозначает продолжительность, на которую есть 50% -ный шанс на закрытие?0.75 PREAMT TIME
--- Точно так же 0,75 обозначает продолжительность, в течение которой есть 75% -ный шанс на закрытие?RemainingValue
--- Это оставшаяся сумма, подлежащая оплате?
И каков следующий шаг после этого?
1 ответ
Где ВРЕМЯ - количество дней между датой принятия политики и текущей датой для клиентов ACTIVE и между датой принятия политики и датой отказа для неактивных клиентов. СОБЫТИЕ - это индикатор того, является ли клиент АКТИВНЫМ или АКТИВНЫМ.
Имеет смысл для меня.
После подгонки модели я получил согласие 0,7(что я чувствую, все в порядке).
Это приемлемый показатель для моделей выживания. Но также попробуйте модели AFT, они могут работать лучше (также попробуйте смоделировать все параметры).
Итак, что вам нужно сделать дальше, это предсказать будущее время жизни клиентов, учитывая, что они пережили t периодов. Есть несколько документов именно на это приложение. Обратите внимание, что тот же код применяется и к моделям AFT.
Вы можете предсказать медиану или кривую выживаемости. Если ваша цель - CLV, я думаю, что прогнозирование кривой выживания более уместно, так как вы можете смоделировать различные показатели политики (извините, я не знаю правильной терминологии). Например, используя код в документах:
times = np.arange(1000) # predict far out, since we don't want to truncate the survival curve prematurely.
unconditioned_sf = cph.predict_survival_function(censored_subjects, times=times)
conditioned_sf = unconditioned_sf.apply(lambda c: (c / c.loc[df.loc[c.name, 'T']]).clip_upper(1))
# simple case, users pay $30 a month (and your units of survival function are "months"
CLV = (30 * conditioned_sf).sum(0)
# more complicated: they each have a different "rate"
CLV = conditioned_sf.sum(0) * rate_by_user
# and so on...