我是生存分析的新手,并使用 Python 的 Lifeline 快速编写了基线生存函数。但与我根据数据自己绘制的留存曲线相比,我得到的图表过于乐观。
下面是我根据我的数据制作的图表。它显示了来自不同群组的客户停留了多少周。很明显,来自比利时的人(红线)比来自荷兰的人停留的时间更长。20周后,56%的比利时客户还在,而荷兰人只有43%。
但是当我使用 Python 的生命线 CoxPHFitter 绘制生存函数时,我得到了下图:
显示20周后“还活着”的概率,比利时人70%以上,荷兰人50%以上。
为什么这些数字不同?我是否误解了其中一条曲线?
这是我的代码:
cph = CoxPHFitter()
cph.fit(dumies, 'weeks_subscribed', event_col='stopped')
cph.plot_partial_effects_on_outcome('addresses__address__country__name_Nederland',values=[0,1])
如果客户不再订阅,则“已停止”设置为 1。“weeks_subscribed”的平均长度为 18。
编辑:
我手动计算保留图的方式如下:
def add_time_subscribed(rd):
rd['weeks_subscribed'] = 0
for index, row in rd.iterrows():
if (not row['stopped']) and (not row['_paused']):
end_date = datetime.now(tz=pytz.UTC)
else:
end_date = row['paused_at']
rd.loc[index,'weeks_subscribed'] = (end_date - row['subscribed_at']).days/7
def stayers_per_week(rd):
y_axis = np.zeros(int(rd['weeks_subscribed'].max())+1)
for index, row in rd.iterrows():
for i in range(int(row['weeks_subscribed'])+1):
y_axis[i] += 1
x_axis = [i for i in range(len(y_axis))]
return x_axis, y_axis/y_axis[0]