Python中的因果影响分析(A/B测试)

2024-06-26 00:11:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python进行因果影响分析。这种分析有助于测量干预后治疗组与对照组相比的影响(a/B测试)。我在这里读了一些文献:https://www.analytics-link.com/post/2017/11/03/causal-impact-analysis-in-r-and-now-python

假设我的数据采用以下格式:

enter image description here

以下代码可以完美地工作:

from causalimpact import CausalImpact
cut_off_point = 12
pre_period = [0,cut_off_point-1]
post_period = [cut_off_point,data.shape[0]-1]
impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

但是,如果我添加一列日期,并尝试根据日期拆分治疗组和对照组,则会出现错误

比如,我现在按日期定义前期和后期,如下所示:

pre_period = ['2020-04-27','2020-06-29']
post_period = ['2020-07-06','2020-07-27']
impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

我得到一个错误:

ConversionError: Failed to convert value(s) to axis units: '2020-06-29'

我已将日期转换为索引,但仍然收到错误

谁能帮忙吗。关于该库及其在A/B测试中的使用的在线文献似乎有限。非常感谢你的帮助


Tags: torundataplot错误postpre文献
3条回答

看起来您的数据是一个数据帧,但是您在pre_periodpost_period对象中提供了日期,这要求您的数据是一个时间序列对象。这在原始的R包文档here中进行了解释

总结:为数据帧提供索引,为时间序列提供日期

将句点传递给CausalImpact之前,请定义句点:

pre_period = [pd.to_datetime(date) for date in  ['2020-04-27','2020-06-29']]
post_period = [pd.to_datetime(date) for date in ['2020-07-06','2020-07-27']]

现在周期是时间序列对象,例如pre_period

[Timestamp('2014-01-01 00:00:00'), Timestamp('2014-03-12 00:00:00')]

Timestamp的列表。 尝试之后:

impact = CausalImpact(data, pre_period, post_period)
impact.run()
impact.plot()

对我来说不起作用,它会引发TypeError:float()参数必须是字符串或数字,而不是相当相等的数据集中的“datetime.date”(一个日期列和控制/测试组列),这似乎不是一个非常通用的解决方案

相关问题 更多 >