機器學習 vs 經濟學 Part 2 — Machine Learning 一次不夠,就用兩次

經濟學家如何用一個由X預測Y的工具估計β?

陳家威
11 min readMar 31, 2024

Part 1 Part 2 Part 3

在 Part 1 我介紹了利用機器學習估算 Propensity score ,藉此估計平均處理效果。在這裡我將介紹一個更趨勢的計量方法。

Powered by Bing

想像兩個立法院質詢台上面的施政報告。在第一份,內政部長報告「我們現在有一個很好的模型來預測未來生育率,因此將來我們一定有辦法應到少子化。」第二份裡,內政部長報告「我們發現房價每增加 1%,該區域生育率平均而言降低 3%」。

哪一個比較能說服委員,內政部有做足準備去面對一個社會議題?我相信大家聽起來都覺得第二份報告比較具有說服力(先不管正確性)。第一份中,我們看到一個預測非常精準的模型,但預測精準又如何?就算能完美預測未來生育率逐年下降,官員也只能像電影2012一樣坐以待斃。然而第二份報告點出了一個大家的疑惑「原來是因為房價,所以導致生育率過低!」

以上例子純屬虛構,但重點在於:經濟學家在意的是如何評估因果,而非單純預測。因果推斷比起單純預測問題更能帶給政策制定者或企業決策者一個穩健的決策方向,但相對來說也比單純的預測問題更難處理

其中一個問題是我們通常不確定正確的函數形式是什麼。當然,大部分情況下用線性回歸(OLS)就可以得到頗有見解的結果,但如果面對的是成千個變數的問題,線性模型有它的限制。當變數很多時,機器學習就是很好用的預測工具,但好的預測隨之而來的其實是不正確的因果推論。文獻上叫 bias-variance trade off

這一篇要介紹的情況是,我們想要仰賴機器學習的特性來尋找變數與變數的關係,包含變數篩選,但同時又希望能夠正確估計某個策略的效果時,該怎麼辦。

開始前,讓我來先複習一下預測估計的差異,以及一些統計上的術語。

計量複習 — 預測結果 vs 估計參數

應用個體經濟學的日常就是在估計模型中的參數。所謂因果性來自於在假設一個正確的模型之後,看看某些在意的影響管道是不是真的有顯著的正向/負向影響。

比方說,如果經過經濟理論推論,房價對生育率有直接影響,但是想要從資料中驗證,經濟學家大概會想對於各個區域跑這樣的實證模型:

絕大多數的情況下,在不考慮內生性的模型中,這樣的線性回歸模型就可以估計出 β。但這種方法可能遇到兩個問題

  1. 變數選擇:假如今天蒐集到 1000個(或許)可以用的參數,全部放進去可能會導致 OLS沒辦法估計。
  2. 函數形式:單純的線性相加可能不是最佳的設定,因為生育率對其他變數可能有邊際效果遞減的問題。

如果今天是一個單純預測問題,我們可以把所有變數都丟到一個機器學習模型 ML,比方說 gradient boosting 裡面,讓模型自己找出最好的變數關係來預測生育率。

但今天要找的是 β,我們就不能只單純預測生育率。

一個可能的作法是把房價獨立出來,剩下的跑機器學習:

原則上可以用遞迴的方式來找到 β,作法這邊不詳述,因為是錯的。直覺上,如果其他 X 能夠很好的預測出房價,在這樣的設定之下很有可能 ML(X) 會把房價的影響完全預測走,而造成 β 嚴重低估。

那我們該用什麼方法來同時利用機器學習的優點,又同時得到不偏的β 估計呢?

Robinson Decomposition

我們回到這個情境:

為了簡化敘述,生育率我用 Y 代替,房價用 D 代替,其他變數維持用 X:

這個的意思是,房價 D 跟一大堆 X 有關,而生育率 Y 與房價以及那一大堆 X 有關。至於 X 如何影響 Y 還有D就交給機器學習去學習 g(X) 與 m(X)。這樣的設定因為只有一點點線性關係,存在於我們的變數 D,所以稱作部分線性模型(partial linear model)。

現在,把第一式取期望值,並且與第一式相減:

我們就得到了一個很有用的公式。這個式子有多厲害?觀察一下可以發現上面的 𝔼[Y ∣ X]與𝔼[D ∣ X],也就是生育率與房價的條件期望值,並沒有特定的函數形式。這在無母數回歸的文獻中稱作 Robinson decomposition或是 partialling-out,而如果 𝔼[Y ∣ X] 與 𝔼[D ∣ X]都是線性回歸模型,這就是大家計量所學到的 Frisch-Waugh-Lowell theorem。

換句話說,我們可以用任何方法去估計我們對 Y 與 D 的期望值,這時候就是機器學習出場的時候了!

Double Machine Learning

回顧一下 Robinson decomposition 之後的結果

其中𝔼[Y ∣ X] 是模型的預測值,Y是實際觀察值,因此 Y-𝔼[Y ∣ X] 就是預測 Y 之後的殘差(residual),也就是模型沒辦法解釋的部分

這時要估計 β 很簡單:

  1. 用 X 預測 Y 得到模型ℓ(X),並計算殘差 𝒴 = Y-𝔼[Y ∣ X] = Y- ℓ(X)
  2. 用 X 預測 D 得到模型m(X),並計算殘差 𝒟 = D-𝔼[D ∣ X] = D-m(X)
  3. 將兩個殘差拿去估計線性回歸 𝒴 ~ 𝒟,取得 β

因為進行了兩次機器學習,所以這個做法稱作 double machine learning (DML)。又因為這樣估計出來的 β 就不會有前面所說的偏誤問題,因此也叫做 debiased machine learning(但反正最後都叫DML)。

舉例來說,回到房價與生育率的問題。如果今天政府想要評估房價會不會影響生育率,可以的做法是先用機器學習模型預測各地房價,取出殘差(跟預測值的差異);在用機器學習預測各地生育率,一樣計算出殘差。最後將這兩個殘差進行回歸,得到的就會是模型中的 β。

直覺上,因為預測生育率時,沒有將房價因素放進變數裡面,所以如果真的房價有影響,這個影響就會被涵蓋在「無法解釋」的殘差項裡面。而預測房價時,因為涵蓋了所有其他的變數 X,所以剩下無法解釋的部分就是與 X 無關的部分,這樣就把共同影響因子給剔除了。這樣將殘差之間進行回歸,就可以得到單純房價對生育率的影響。

交叉驗證 (cross-validation)

機器學習中很重要的步驟就是交叉驗證,也就是要把樣本切成訓練集(training set)還有測式集(test set)。這麼做的目的在避免過度擬合(overfitting)。

在 DML中也不例外,但是這裡的理由比overfitting 的問題還要重要。

回顧 DML 三步驟:

  1. 用 X 預測 Y 並計算殘差 𝒴
  2. 用 X 預測 D 並計算殘差 𝒟
  3. 將兩個殘差拿去估計線性回歸 𝒴 ~ 𝒟,取得 β

DML 的論文建議要將樣本隨機分成兩個或兩個以上的子樣本(sample splitting)。假設我們分成 A與B,正確做法應該是先用 A 樣本訓練步驟 1,2 的函數,再用 B 樣本估計步驟 3 中的 β;接著反過來用B 樣本訓練步驟 1,2 的函數,再用 A 樣本估計步驟 3 中的 β。最後取這兩個 β 的平均。要切成很多份也沒問題,只是樣本數太少不太利於訓練。

補充 — 要分樣本的原因

要這麼做的原因在於如果第一步 overfit 了,𝔼[Y ∣ X]可能會包含了 D 的誤差項 μ 的資訊,所以會讓 β 高估或低估。傳統模型會要求𝔼[Y ∣ X]的估計函數符合Donsker condition,但這樣就沒辦法用「任何機器學習」。DML作者群的解決方法就是拿另外一份訓練時沒看過的資料來估計 β,這樣這一項偏誤就很有把握可以在機率上趨近於0。

Python 實作

Microsoft ALICE團隊所開發的 EconML 套件,有現成可以估計 Double Machine Learning 的函式。

我們只要選擇三個步驟的三種模型,剩下的 EconML 套件會自動進行訓練與估計。

舉理來說,如果我希望第一步用 gradient boosting 預測 Y,再用 random forest 預測 D,最後用 OLS 估計 β,我可以這樣設定:

from econml.dml import DML
from sklearn.linear_model import ElasticNetCV
from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor
est = LinearDML(
model_y=GradientBoostingRegressor(),
model_t=RandomForestRegressor())

設定好模型之後,用法跟 sklearn 一樣:

est.fit(y, D, X=X)
est.summary()

EconML 會自動執行樣本分組與訓練,甚至可以計算條件平均處理效果(CATE)。我會在下一篇介紹這個商業因果的利器。

補充 — 為什麼這樣可以?root N condition

大部分網路上敘述 DML 都將它講的很簡單,因此會讓人有種「怎麼現在才有人想到」的感覺。如果有實際上把論文讀過一次,會發現他們不只是介紹這一種方法而已,而是很嚴謹的說明「為什麼」這樣可以。

更重要的是,為什麼之前那樣做不行?

在有嚴謹的證明計量方法的可行性(或是更重要的:一致性)之前,現在的經濟學家基本上不敢擅自發明做法。一個例子就是將TWFE用在不同時間受處理的panel data上面,大家都以為沒問題,結果證明出來有問題,幾千篇論文的結果都出問題了。

那過去的做法出了什麼問題?接下來是數學時間。

Double machine learning 是由 7 位計量大老:V. Chernozhukov, Chetverikov, Demirer, Duflo, Hansen, 以及Newey,簡稱CCDDHNR。這篇文章並沒有上面敘述這麼白話,而是充滿統計。CCDDHNR 最大的貢獻在於他們解決了高維度無母數估計中,參數漸進無法收斂的狀況。

容我直接將論文中的式子取出來講解。
還記得一開始的設定中,我們假設的模型是

如果先估計 ML 再套入直接估計 β,這樣的估計出來的參數,在 n → ∞ 之下的漸進分布為:

根據中央極限定理,a 會漸進分布為常態分佈,平均在 0;然而第二項有一個致命的重點。因為大部分的機器學習都有 regularazation,像是 lasso 與 ridge都有 shrinkage,所以 g(X) 的收斂速度一定會比普通 OLS 實的收斂速度 √n 來的慢。用白話就是說,b 項 1/ √n 的地方開始,在 n → ∞ 的時候會越來越大。在 OLS 中,這一項不隨 n 變大而變大 (數學上寫作 o(1)),所以沒這問題,但是在機器學習演算法中,這一個部分註定會無法收斂,導致 β 出現偏誤。

然而在 DML 之下,這一項變成了兩個殘差之間的相乘:

如果一個機器學習的殘差之下沒辦法收斂,那兩個相乘之後,收斂速率就會小於 √n 了,因此這一項就不會再造成估計的不一致性。這一點與 doubly robust estimator 有點類似。

至於分樣本做splitting 的部分,其實是從 DML漸進分布的第三項得出的靈感,有興趣可以自行參閱 CCDDHNR。

補充 — Neyman Orthogonality Condition

在線性代數中,預測值相當於在 X 所在的空間中的投影,而殘差就是沒辦法被捕捉在這個空間中的部分,因此他會「垂直」於 X,或是更專業一點叫做「正交 (orthogonal)」。DML 便是將兩個變數 Y 與 D 相對於 X 正交的部分進行回歸,所以 double machine learning 又叫做 orthogonal machine learning。

事實上,在原始 DML的論文中,他們的切入點其實是從正交性來的。作者們證明出如果找出一個合理的分數,使得他符合所謂的 Neyman orthogonality condition,那這樣的估計式在使用任何 ML 模型預測一些多餘參數(nuisance parameter)時就會不偏。

我個人認為 CCDDHNR 最厲害的地方在於,只要給定模型,或是一個估計式(比方說 ATE/ATT/LATE 等)就可以有條路找出一個符合Neyman orthogonality condition 的分數。

舉例來說,在評估 ATE 時,他們放寬了模型設定,使得它不再一定要是 parial linear model,也因此沒有辦法利用 robinson decomposition 的方式來估計,如下:

此時的 ATE 以及 ATT 則定義為

他們推倒出來符合 Neyman orthogonality condition 的 ATE 分數為

至於這個分數 ψ 該怎麼得到,請參閱 CCDDHNR。

參考資料

Chernozhukov, V., Chetverikov, D., Demirer, M., Duflo, E., Hansen, C., Newey, W., & Robins, J. (2018). Double/debiased machine learning for treatment and structural parameters.

Hansen, B. (2022) Econometrics.

Causal Inference for The Brave and True — 22 — Debiased/Orthogonal Machine Learning

Yang, J. C., Chuang, H. C., & Kuan, C. M. (2020). Double machine learning with gradient boosting and its application to the Big N audit quality effect. Journal of Econometrics, 216(1), 268–283.

--

--

陳家威
陳家威

Written by 陳家威

Graduate student in Economics. Aficionado of data science & causal inference

No responses yet