目錄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》。