set.seed(111) # シード値を固定
= readr::read_csv("Public.csv")
Data
= dplyr::mutate(
Data
Data,D = dplyr::if_else(
== 2022,1,0
TradeYear # 2022年に取引されれば1、2021年に取引されていれば0
)
)
= Data$Price
Y = Data$D
D = Data |>
X ::select(
dplyr
District,
Size,
Tenure,
StationDistance )
7 機械学習の活用: AIPW
\(D\)間での\(X\)の分布を近似的にバランスする手法としては、Inverse Probability Weight (IWP) も有力です。 本手法は、(\(X\)内での)\(D\)の分布を推定し、その逆数をウェイトとして使用する方法です。 この\(D\)の分布は、傾向スコア(Propensity Score)と呼ばれています。 特に \(Y\) の推定されたモデルと組みわせるAugmented Inverse Probability Weightは、機械学習などを用いた柔軟な推定と信頼区間の近似計算などの統計的推論と両立できます。
7.1 Inverse probability weight
傾向スコアを活用した代表的な推定手法は、Inverse probability weightです。 この手法は、ベイズルールによるBalancing weightsの書き換えに基づいています。 ただしこの手法は、傾向スコアの推定精度に強く依存します。 また一般に推定精度が悪い傾向があります1。 このため本ノートでは、Section 7.2 で紹介するArgumented inverse probability weight (AIPW)の活用を推奨します。
Balancing Weight \(\omega(d,x)\) は以下のように定義されました。 \[\omega(d,x)=\frac{ターゲット割合}{D=dにおけるX=xの事例割合}\]
ベイズルールを適用すると \(\omega(d,x)\) は以下のように書き換えられます。
\[\omega(d,x)=\underbrace{\frac{1}{X=xにおけるD=dの割合}}_{傾向スコアの逆数}\] \[\times (D=dの割合)\] \[\times \frac{ターゲット割合}{X=xの割合}\]
ターゲット割合を\(X=xの割合\)とするのであれば、以下のように単純化できる。
\[\omega(d,x)=傾向スコアの逆数\times D=dの割合\]
\(D=d\)の割合は、データ内での\(D=d\)の割合などを用いて、容易に推定できます。 よって傾向スコアが推定できれば、Balancing Weightの計算が可能です。 推定された傾向スコアを用いたBalanced comparisonはInverse probability weightと呼ばれ、以下の手順としてまとめられます。
傾向スコアを何らかの手法で推定する
Balancing weights \(\omega(d,x)\)を計算する
Balancing weightsで荷重した平均差を計算する \[D=1における(\omega(x,1)\times Y)の平均値\] \[-D=0における(\omega(x,0)\times Y)の平均値\]
この手法は 傾向スコアの推定には、\(D\)を\(X\)で回帰する標準的な方法を用いることができます。 例えばLogitやProbitなどのパラメトリックな手法やRandom ForestやBoosting、Deep Learningなどの機械学習の手法も活用可能です。
しかしながらどちらの手法を用いたとしても、推定上の問題があります。 IPWによる推定結果は、傾向スコアの推定精度に強く依存します。 このためLogitやProbitを用いた場合、推定モデルの定式化を正しく行う必要がありますが、多くの応用で困難です。 対して機械学習の手法を用いた場合、推定結果の収束の遅さが問題となり、信頼区間の近似計算などが難しくなります。
この問題に対して、\(Y\) の平均値の推定値 \(f_Y(D,X)\) を併用するAugmented Inverse Probability Weightが有力です。
7.2 Augmented Inverse Probability Weight
Augmented Inverse Probability Weightの手順は以下のようにまとめられます。
交差推定を用いて、Y,Dを予測するモデル \(f_Y(D,X)\) と \(f_D(X)\) を推定する
AIPWの推定値を以下のように補正し、AIPWの推定値を計算する \[+ f_{Y}(1,X_i)\frac{D - f_D(X)}{f_D(X)}の平均値\] \[-f_{Y}(0,X_i)\frac{(1 - D) - (1 - f_D(X))}{1-f_D(X)}の平均値\]
7.3 母集団の推定方法
母集団上でのAIPWとデータ上でのAIPWは、残差回帰とよく似た性質を持ちます。 交差推定とStackingなどの柔軟な方法を組み合わせて予測モデルを推定すれば、緩やかな仮定のみで、「母集団上で計算したAugmented Inverse Probability Weight」の結果について、信頼区間の近似計算が可能です。 AIPWは、データ全体での\(X\)の分布をターゲット割合としたバランス後の比較です。 このため「母集団上での\(X\)の分布をターゲットとした、バランス後の比較」について、信頼区間計算ができます。
7.4 残差回帰との比較
残差回帰とAIPWは、よく似た性質を持ち、同じような動機に基づいています2。
大きな違いは、ターゲット割合です。 残差回帰におけるターゲット割合は、Overlap Weightであり (Chapter 6)、その解釈は困難でした。 対してAIPWでは、\(X\) の分布であり、解釈が容易です。 すなわち「もし\(X\)の分布がデータ全体のものと一致していた場合、平均差はどのようなものになるか?」という疑問に答えることができます。 このような解釈が容易さが、AIPWの大きな魅力です。
対してAIPWの弱点は、傾向スコアの値が0や1に近い事例がある場合、推定結果が不安定になりやすい点です。 これは傾向スコアの逆数が推定式に含まれているために生じます。 弊害の具体例としては、計算された信頼区間の拡大や信頼区間の近似計算そのものの信頼性低下、などです。
7.5 Rによる実践例
引き続きddmlパッケージを使用し、AIPW推定は実装できます。
以下のパッケージを使用
readr (tidyverseに同梱): データの読み込み
ddml: AIPWの実施
7.5.1 準備
\(Y\)と\(D\)はベクトル、\(X\)は行列として定義します。
7.5.2 ATE
Stackingを用いたAIPW推定は、ddml_ate関数を用いて、以下のように実装できます。
= ddml::ddml_ate(
Model y = Y,
D = D,
X = data.matrix(X),
learners = list(
list(fun = ddml::ols),
list(fun = ddml::mdl_ranger)
),shortstack = TRUE, # 簡略化したStacking法を利用
silent = TRUE # Messageを非表示
)
|> summary() Model
ATE estimation results:
Estimate Std. Error t value Pr(>|t|)
nnls 3.68 0.339 10.8 2.52e-27
summary関数は、推定値 (Estimate)、標準誤差 (Std. Error)、t値 (t value)、 p値 (Pr(>|t|)) を報告しています。 バランス後の平均差は、nnlsです。
95\(\%\)信頼区間は以下のように計算できます。
= summary(Model)
Sum
= Sum[1,1] # 推定値
Est = Sum[1,2] # 標準誤差
SD
c(Est - 1.96*SD, Est + 1.96*SD) # 信頼区間の下限、上限
[1] 3.010346 4.340967
どちらもEfficient influence functionを用いて、推定式を導出できます (Ichimura and Newey 2022; Fisher and Kennedy 2021; Hines et al. 2022; Renson et al. 2025)。↩︎