作者简介
Yiwen,携程数据分析师,专注用户增长、因果推断、数据科学等领域。
一、背景
如何科学地推断某个产品策略对观测指标产生的效应非常重要,这能够帮助产品和运营更精准地得到该策略的价值,从而进行后续方向的迭代及调整。
在因果推断框架下,效果评估的黄金准则一定是“AB实验”,因为实验的分流被认为是完全随机且均匀的,在此基础上对比实验组与对照组的指标差异就可以体现某个干预带来的增量值。但是很多场景下,我们较难进行严格的AB实验,例如对于酒店的定价;现金奖励的发放等等,不适宜向不同人群展现不同的内容。对于这些问题,我们会采取因果推断的方法来进行策略的效果评估。
本文主要介绍BSTS模型原理以及CausalImpact对模型的代码实现,旨在面对一些具有特定周期性特点的数据时,更精准科学地进行因果效应值的估计。下文将首先对模型原理进行简要阐释;随后利用模拟数据展示代码逻辑,最后在具体的业务场景中进行实践。
二、现有方法及潜在问题
大部分运营和产品在评估一些全量上线的策略效果时,最常用的方式就是看上线前后的效果差异。但这种方法最大的问题在于其假设前提:假设上线的功能是唯一影响效果的变量(即没有任何其他干预和混淆变量),但这个假设现实中往往很难实现。
于是我们尝试使用更多因果推断的方法,例如PSM(倾向分匹配法),在所有非实验组的用户群中,找到与实验组用户的特征非常相似的一群人,将他们的指标数据(例如下单率,订单收益等等)与实验组的用户进行对比,从而体现出干预带来的影响。但这个方法较为依赖选取的用户特征与最后的匹配效果。
再例如SCM(合成控制方法),利用一些未受干预的地区合成一个“类似的虚拟地区”来与“上线策略的地区”进行整体的对比。但这也需要一个关键假设:可以找到长期变化趋势高度同步的地区来进行对照,而这个条件往往也很难实现。
进而在传统SCM的基础上,我们企图通过类似集成学习的方法,将多个未干预的对照组作为输入值,再结合实验组自身长期的时间序列波动情况,拟合出一个未受干预的虚拟对照组,从而将“对照组与实验组高度同步”的强假设降为弱假设。本文介绍的BSTS模型就是用来刻画某种“长期的时间序列波动”的数据模型,CausalImpact是用来针对这样的数据进行因果效应值的估计。下文中我们将详细介绍这两个工具。
三、模型介绍
BSTS模型 (Bayesian Structured Time Series)称为“贝叶斯结构化时间序列”,正如其名,它的主要特点体现在:
适用于有结构特征的时间序列数据
利用贝叶斯的思想来进行参数估计
结构化的时间序列数据在日常生活中不少见,尤其像携程这样的OTA行业,平台的订单情况其实是有一定时间规律的,例如周末和节假日是订单高峰期;周中是订单平峰期等。另一方面,贝叶斯的思想是指在得到样本数据之前,即对要估计的参数有一些“先天认知”),随后基于这样的认知,结合样本数据再得到后验分布(如下方公式展示)
故BSTS模型主要即对结构化时序数据进行模型拟合及预测,在拟合的过程中使用到了贝叶斯的先验思想。其好处是能够给出预测值的置信区间,使得预测结果更科学可信。下文将对这几种思想逐一进行介绍。
3.1 状态空间模型
结构化的时间序列数据是指某一观测数据的背后其实隐藏着随时间变化而变化的不同状态,其中观测值与状态值之间有对应关系;不同时刻的状态之间也有转换关系。我们一般用以下状态空间模型来刻画这两种映射逻辑:
(1) 称为观测方程,反映观测值与其背后隐藏状态的关系;(2) 称为状态方程,反映随时间推移各个状态之间的转换。;都是不同变量之间的“关系映射矩阵”; 是独立于其他变量且服从正态分布的噪声。所谓数据的“结构化”,主要包括:
Linear Local Trend(局部趋势):一定时间内的单调性(单调上升或下降)
Seasonality(季节性因子):固定长度的变化,类似于一年四季的温度变化
Cyclical(周期性):类似季节性但波动时间不固定,波动频率也不固定的变化
图3-1:观测数据及其结构化元素。第一张图体现原数据的波动情况;第二张体现季节性因子的情况;第三张图体现局部趋势的情况。
如果希望在映射关系中加入协变量X,可以将(1)拓展为:
其中表示协变量X与观测数据之间的关系,如果协变量项表现很好(如有显著影响)的话,那对应的local trend就会相对较弱。上述三个方程中的参数将在后文中展示估计方式。
3.2 贝叶斯及MCMC(马尔可夫蒙特卡洛方法)
假设状态方程(2)中各个时刻的状态序列为