目录git
近期普遍阅读券商关于宏观高频数据的研报,发现了两点不足:github
- 就研究手段而言,比较粗放,广泛停留在仅仅比较数据相关系数的层面;
- 就理论高度而言,不多探讨数据背后的因果关联。
不过有些理念先进的券商团队已经开始从产业链传导的角度试图细致的描述数据间的关联,这正好契合了下面这篇文章的核心概念——有向无环图(DAG)。算法
本文翻译自《"Correlation is not causation". So what is?》机器学习
连接:https://iyarlin.github.io/2019/02/08/correlation-is-not-causation-so-what-is/post
在过去几年中,机器学习应用的数量和范围都在迅速增加。什么是因果推断,它与传统的 ML 有什么不一样?何时应该考虑使用它?在本报告中,我尝试经过一个例子给出一个简短而具体的答案。学习
想象一下,营销团队的任务是找到提升营销支出对销售的影响。咱们拥有营销支出(mkt)、网站访问(visits)、销售(sales)和竞争指数(comp)的记录。网站
咱们将使用一组方程(也称为结构方程)来模拟数据集:this
\[ sales = \beta_1vists + \beta_2comp + \epsilon_1 \\ vists = \beta_3mkt + \epsilon_2\\ mkt = \beta_4comp + \epsilon_3\\ comp = \epsilon_4 \]spa
其中 \(\{\beta_1, \beta_2, \beta_3\, \beta_4\} = \{0.3, -0.9, 0.5, 0.6\}\).翻译
下面图片中展现以及拟合模型用到的全部数据均由上面的等式模拟获得。
如下是数据集的前几行:
mkt | visits | sales | comp |
---|---|---|---|
282.5 | 2977 | 379 | 3.635 |
338.8 | 3149 | 308 | 4.515 |
303.9 | 2485 | 369 | 3.092 |
558.8 | 3117 | 191 | 5.22 |
334.4 | 4038 | 286 | 4.281 |
297.7 | 2854 | 441 | 3.592 |
咱们的目标是,获得预测营销支出对销售额的影响是 0.15 的结论(根据上面的方程组,对分项目作乘积,咱们获得 \(\beta_1 \cdot \beta_3 = 0.3 \cdot 0.5 = 0.15\))。
咱们一般从画出 sales 和 mkt 之间的散点图开始:
咱们能够看到图中看到的关系实际上与咱们预期的相反!看起来增长营销实际上会下降销售额。实际上,不只相关性不是因果关系,有时它可能表现出与真实因果关系相反的关系。
拟合一个简单的线性模型 \(sales = r_0 + r_1mkt + \epsilon\) 将会产生下面的系数:(注意,\(r\) 泛指回归系数,而 \(\beta\) 泛指结构方程中真实的参数)
(Intercept) | mkt |
---|---|
513.5 | -0.3976 |
确认咱们获得的效果与咱们想要的效果大相径庭(0.15)。
有人可能会假设,查看双变量关系至关于仅使用 1 个预测变量,但若是咱们要使用全部可用的特征,咱们可能可以找到更准确的估计。
运行回归模型 \(sales = r_0 + r_1mkt + r_2visits + r_3comp + \epsilon\),获得下面的系数:
(Intercept) | mkt | visits | comp |
---|---|---|---|
596.7 | 0.009642 | 0.02849 | -90.06 |
如今看来营销支出几乎没有任何影响!咱们从线性方程模拟数据,而且咱们知道即便使用更复杂的模型(例如 XGBoost、GAM)也没法产生更好的结果(我建议有疑虑的读者经过从新运行 Rmd 脚本来尝试一下生成报告)。
到目前为止咱们得到的结果至关使人困惑,咱们进而咨询营销团队,咱们了解到,在竞争激烈的市场中,团队一般会增长营销支出(这反映在系数 \(\beta_4 = 0.6\) 以上)。所以,竞争多是一个“混杂”因子:当咱们观察到高营销支出时,竞争也会很激烈,从而致使销售额降低。
此外,咱们注意到营销可能会影响网站的访问,而这些访问又会影响销售。
咱们可使用有向无环图(DAG)可视化这些特征的相互依赖性:
所以,经过将混杂竞争加到咱们的回归是有意义的。而在咱们的模型中添加访问可能会“屏蔽”或“消解”营销对销售的影响,因此咱们应该从咱们的模型中省略它。
运行回归模型 \(sales = r_0 + r_1mkt + r_2comp + \epsilon\),获得下面的系数:
(Intercept) | mkt | comp |
---|---|---|
654.8 | 0.1494 | -89.8 |
如今咱们终于获得了正确的效果估计!
咱们解决问题的方式有点不稳健。咱们提出了诸如特征的“混杂”和“屏蔽”等通常概念。试图将这些应用于由数十个具备复杂关系的变量组成的数据集可能会很是困难。
到目前为止,咱们已经看到,试图经过检查双变量图来估计营销支出对销售的影响可能会失败。咱们还看到,将全部可用特征抛入咱们的标准 ML 模型也会失败。看起来咱们须要仔细构建模型中包含的协变量集,以得到真实的效果。
在因果推断中,该协变量集合也称为“调整集”。给定模型的 DAG,咱们能够利用各类算法,这些算法很是相似于上面提到的规则,例如“混杂”和“屏蔽”,以找到正确的调整集。
能够得到正确调整集的最基本算法之一是由 J. Pearl 开发的“Backdoor-criteria”。简而言之,它寻求调整集,屏蔽“暴露”变量(例如营销)和“结果”变量(例如销售)之间的每个“虚假”路径,同时保持影响路径存在。
考虑下面的 DAG,咱们试图找到 x5
对 x10
的影响:
使用 backdoor-criterion 算法(由 R 包 dagitty
实现),咱们找到正确的调整集:
诚然,找到模型的 DAG 很是有挑战性。能够综合考虑下列几种方法:
mgm
或 bnlearn
)我会在后面的文章中展开这些主题。
想要进一步了解上述问题的朋友,我推荐阅读 Pearl 写的一篇轻量级的技术报告——《The Seven Tools of Causal Inference with Reflections on Machine Learning》。
想要深刻了解因果推断与 DAG 机制的话,我推荐 Pearl 的小册子——《Causal Inference in Statistics - A Primer》。