実務で使える因果推論：傾向スコアからベイズ推論まで徹底解説

# はじめに
本記事では、データサイエンスの実務で重要な「効果検証」や「因果推論」の代表的な手法をまとめて紹介します。
具体的には、僕もこれまで実務で実際に利用してきた「**傾向スコアとIPW法**」「**Meta-Learners**」「**因果フォレスト**」そして「**ベイズ推論**」の４つにフォーカスし、それぞれの特徴や要所となる数式にも触れながら、解説を行います。

多くのデータ分析は、観察データから因果関係を推定し、施策による効果を正しく評価することがゴールとなります。
しかし、実際の実務や研究現場では、「**相関関係**」と「**因果関係**」を混同してしまうケースが多々あります。そこで本記事では、因果推論の概念をしっかりと理解した上で、各手法の特徴や実装へのヒントを学ぶことを目的としています。

アルゴリズムごとの数式と直感的な解説をバランスよく盛り込んだつもりです。
実務で活かしたい方に向けて、ステップバイステップで理解できる構成を目指します。

普段、Xでもデータサイエンスの情報の発信を行なっているので、ぜひこちらもフォローよろしくお願いします。

https://x.com/tarantula_ds_/

それではこれから、各手法の特徴を順に見ていきましょう！

# 因果推論とは
### 相関と因果
「相関」とは簡単にいうと、ある２つの変数が同時に変化する傾向があることを指します。例えば、アイスクリームの売上と熱中症患者の数には相関が見られるかもしれません。しかし、両者は気温の上昇という第三の要因に影響を受けている可能性があり、直接的に「アイスクリームを食べると熱中症になる」といった因果関係があるとは言い切れません。

一方「因果」とは、一方の変数がもう片方の変数を変化させる関係を指します。「AだからBが起こる」と明確に言える場合です。

このように、相関が高いからといって因果関係が成り立つとは限らず、「相関関係」と「因果関係」を混同しないことが、データ分析を行う上で最も重要なポイントの１つになります。

### 因果推論の難しさ・課題
因果関係を正しく推定することは、実務において非常に重要ですが、多くの課題が存在します。今回は３つほど課題を紹介します。

1つ目が「**交絡因子の存在**」です。先ほどアイスクリームの例で説明したように、異なる要因(交絡因子)が、施策(処置)と成果(アウトカム)の両方に影響を与えている場合、単純な統計分析では正しい因果関係を見誤ってしまう可能性があります。

2つ目は、「**実験デザインの制約**」です。因果推定を行うにあたって、ランダム化比較実験(RCT)が理想的です。しかし、倫理的、コスト的、時間的にな理由からRCTを実施することは難しいケースがあります。
観察データしか利用できない場合、そもそもランダム性が保証されていないのでバイアスの影響を受けやすくなります。

3つ目は、「**データの欠損・バイアス**」です。観測データからの因果推定は、そもそもデータがどのように取得されているかに大きく依存します。測定されていない要因や、欠損データが多い場合は、因果推定の精度や信頼性を大きく損なうことになります。

こうした課題を乗り越え、可能な限りバイアスを除去し、施策がどの程度の影響を与えたのかを推定する技術が「因果推論」です。

### 因果推論が必要な場面
因果推論が必要とされる場面として、以下のような場面が挙げられます。
+ **広告やマーケティング施策の効果検証**
広告を打った結果、売上が本当に上がったのかを検証するには、どの程度が広告効果で、どの程度が他の要因によるものかを正確に区別する必要がある。
+ **医療・ヘルスケア分野の治療効果**
新薬や医療技術の効果を示すために、RCTが実施されることが多いですが、実験が難しい場合は観察データから因果関係を推定する技術が求められる。
+ **A/Bテストの補完・外挿**
RCTにより、施策Aと施策Bを比較するA/Bテストは有力ですが、実験では計測できないユースケースが存在することもあり、観察データを活用した因果推論手法が活用されることがあります。

このように、因果推論はあらゆる分野で「施策の真の効果」を把握するために用いられ、ビジネス上の戦略的意思決定や学術的研究において欠かせないアプローチになっています。
今後は、RCTが困難な環境や、ビッグデータを活用した分析シーンでますます重要性を増していくと思います。

# 傾向スコアとIPW法
![傾向スコア_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584936/e29e608a-0fa6-3e03-5754-1a383b17999b.jpeg)

### 傾向スコアとは
傾向スコアとは、ある個体$i$が処置$Z_i$を受ける確率を、その個体の特徴量$X_i$に基づいて推定したものです。
```math
e(X_i)=P(Z_i=1|X_i)
```
ここで、$Z_i$は「処置を受けた場合に1、受けなかった場合に0」というニ値変数を表します。観察データでは、もともと処置群と対照群の間で個体の背景(年齢、属性など)が異なりやすいというバイアスが存在することが多々あります。傾向スコアを用いると、「**似た特徴を持つ個体同士を処置の有無で比較する**」ことが可能になり、交絡を緩和できると期待されています。

### 逆確率重み付け(IPW)法とは
傾向スコアは、似た個体をペアリングするマッチングや、傾向スコアを区間に区切るストラダム分割など、様々な手法で使われます。その中でも代表的かつ汎用性の高い手法が、逆確率重み付け(IPW)法です。

IPW法では、処置を受けた個体と受けなかった個体に対して、それぞれが「本来いるべき母集団の構成比」に近づくように重み付けを行います。傾向スコアを用いて各個体の重みを計算し、それを使って平均処置効果を推定します。

それでは、最も基本的な推定量の一つである平均処置効果(ATE)を推定してみます。
```math
\hat{τ}_{IPW}=\frac{1}{n}\sum^{n}_{i=1}{(\frac{Z_iY_i}{\hat{e}(X_i)}-\frac{(1-Z_i)Y_i}{1-\hat{e}(X_i)})}
```
+ $n$はサンプル数
+ $Z_i$は処置の有無(1or0)
+ $Y_i$はアウトカム(効果指標)
+ $\hat{e}(X_i)$はモデル(例えばロジスティック回帰など)で推定された「個体$i$が処置を受ける確率(傾向スコア)」

上式が表現しているのは、
+ 処置群($Z_i=1$)の個体については、$\frac{1}{\hat{e}(X_i)}$を重みとしてアウトカム$Y_i$を評価する
+ 処置群($Z_i=0$)の個体については、$\frac{1}{1-\hat{e}(X_i)}$を重みとしてアウトカム$Y_i$を評価する

こうすることで、実際の観測データにおいて処置が偏って行われたバイアスを緩和し、本来の「ランダムに割り付けられた」状態に近いデータ分布を再現しようとするのがIPW法です。

### 傾向スコアが解決する課題
傾向スコアとIPW法を用いることで、因果推論が抱える課題を解決できます。
例えば、以下のような課題が解決できます。

#### 交絡因子の制御
観察データから因果推定を行う際に最大の障壁となるのが、施策とアウトカム双方に影響する交絡因子の存在です。傾向スコアを推定する過程で、特徴量$X$を考慮するため、**似通った特徴量を持つ個体同士を仮想的に「同条件」とみなす**ことが可能になります。

#### サンプル数の活用
傾向スコアマッチングでは、マッチングに用いられないサンプルは除外されてしまうことがあるため、データが多い場合に無駄が生じることがあります。一方でIPW法なら、重みを掛けることでデータを「間接的に」整合させる手法なので、除外データをなるべく減らし、サンプルを有効に活用できるというメリットがあります。

#### バイアスの軽減(ただし万能ではない)
もちろん、「(未測定の)重要な交絡因子が含まれてない」という前提が必要であり、全ての交絡を取り除ける訳ではありません。しかし、傾向スコアを用いることで、測定できた交絡因子については有効に制御できる可能性が高まります。


# Meta-Lerners
![metalearners_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584936/c6e70517-4854-97e1-79f8-b51845e00f6b.jpeg)

Meta-Learnersとは、観察データから「個々の個体に対する処置効果(ITE)」を推定するために、機械学習モデルを用いて効果推定を行うアプローチの総称です。
傾向スコアやIPW法が「擬似的にランダムかを再現しようとする」発想に基づくのに対し、Meta-Learnersは「アウトカム予測モデルを構築して差分を取る」ことを基本戦略となります。

ここでは、代表的なT-LearnersやS-Learnersといった手法を簡単に紹介しながら、どのような課題を解決できるのか、そして傾向スコアとIPW法との違いについて解説します。

### 基本コンセプトと数式的枠組み
因果推論とは、個体$i$が処置を受けた場合($T_i=1$)の潜在アウトカム$Y_i(1)$と、処置を受けなかった場合($T_i=0$)の潜在アウトカム$Y_i(0)$を考えます。
本来は$Y_i(1)$と$Y_i(0)$の両方を同時に観測することはできませんが、Meta-Learnersでは、観測データ${(X_i, T_i, Y_i)}$を用いて
```math
\displaylines{
\hat{Y}_1(x)\approx{E[Y(1)|X=x]}\\
\hat{Y}_0(x)\approx{E[Y(0)|X=x]}\
}
```
という2種類の関数(もしくは1つの関数で同時に)を推定し、最終的に
```math
\hat{τ}(x)=\hat{Y}_1(x)-\hat{Y}_0(x)
```
とすることで、「特徴量$x$を持つ個体に対する平均処置効果(ITE)」を推定します。これがMeta-Learnersの大枠のアイデアです。

## T-Learner(Two-model Learner)
T-Learnerでは、処置群と対照群それぞれのデータを用いて、別々の予測モデルを学習することが基本です。例えば、回帰モデルを用いるなら次のようになります。
#### 処置群モデル
```math
f_1(x)=E[Y|T=1,X=x]
```
処置群($T=1$)のデータだけを使って、入力$X$からアウトカム$Y$を予測するモデル$f_1$を学習します。

#### 対照群モデル
```math
f_0(x)=E[Y|T=0,X=x]
```
対照群($T=0$)のデータだけを使って、入力$X$からアウトカム$Y$を予測するモデル$f_0$を学習します。
そして、新しい個体が特徴量$x$を持つとき、
```math
\displaylines{
\hat{Y}_1(x)=f_1(x)\\
\hat{Y}_0(x)=f_0(x)
}
```
と推定し、その差
```math
\hat{τ}(x)=\hat{Y}_1(x)-\hat{Y}_0(x)
```
をITE(個人ごとの処置効果)とします。

#### メリット・デメリット
処置群と対照群を全く別々に学習するため、各群の特徴的な関係を捉えやすいです。また、機械学習であればランダムフォレスト、勾配ブースティング、ニューラルネットワークなど自由に選定できるメリットもあります。

一方で、処置群・対照群のサンプルサイズに大きな偏りがあると、どちらか一方のモデルが十分に学習できないことがあります。また、それぞれのモデルを全く別々に学習するため、「共通部分の構造」が共有されず、推定が不安的になることもあります。

## S-Learner(Single-model Learner)
S-Learnerでは、処置の有無$T$を特徴量の一部として含む単一のモデルを学習します。すなわち、下記のような関数を1つだけを学習します。
```math
f(x,T)=E[Y|X=x,T]
```
例えば、回帰モデルの場合を次のように書けます。
```math
\hat{Y}(x,t)=f(x,t)
```
学習時には、処置群($T=1$)と対照群($T=0$)の両データを混ぜて学習し、実際に予測するときは
```math
\displaylines{
\hat{Y}_1(x)=f(x,1)\\
\hat{Y}_0(x)=f(x,0)
}
```
と推定し、差分
```math
\hat{τ}(x)=\hat{Y}_1(x)-\hat{Y}_0(x)
```
をITEとします。

#### メリット・デメリット
S-Leanerのメリットとしては、1つのモデルで済むため実装が比較的シンプルです。
また、「処置が特徴量の一部」になるので、特徴量$X$と$T$の相互作用などが自然に学習される可能性もあります。

デメリットとしては、データが多次元・非線形の場合、モデルが「処置有無による構造の違い」を十分に捉えられない可能性があります。
また、処置変数$T$は二値であり、学習データでは$T$が固定された形になりがちなので、モデルによっては上手く分離されず、バイアスが残るリスクがあります。

## 傾向スコア/IPW法との違い

### 推定アプローチの違い
Meta-Learnerと傾向スコアの大きな違いとしては、「**推定アプローチの違い**」が挙げられます。
傾向スコアは、「処置を受ける確率」をモデル化し、データに重みをかけたり、似た個体をペアにして比較したりすることで、**擬似的にランダム化を再現すること**を重視しています。

それに対し、Meta-Leanersは、「アウトカムの期待値」を直接的にモデル化し、処置有無での予測値の差を取ります。機械学習の回帰的アプローチがメインになってくる点も傾向スコアのアプローチとは異なります。

### 個人レベル(ITE)の推定のしやすさ
傾向スコアは、ATE(平均処置効果)やATT(処置群に対する平均処置効果)などを推定するのには向いていますが、個別効果を推定する場合は追加の工夫が必要になってきます。

それに対して、Meta-Learnersは、最初から「個別レベルでのアウトカム予測モデル」を構築するため、ITEの推定が自然な枠組みになっています。

### 交絡因子への対処方法
傾向スコアは、交絡因子を含めて「処置割り当て確率」を推定し、重み付けで補正します。そのため、観測されている交絡因子が適切にモデル化されていれば、処置割り当てのバイアスを緩和できます。

一方Meta-Learnersは、明示的に傾向スコアを使用しません。しかし、交絡の影響を小さくするために、あらかじめ傾向スコアで重み付けしたり、R-Learnerのように傾向スコアを取り入れたりするハイブリッドな手法も開発されてきています。

# 因果フォレスト
![因果フォレスト_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584936/75e66853-0655-e3ae-3e5e-156efbd4f01a.jpeg)

因果フォレストは、ランダムフォレストをベースとした機械学習手法で、観測データから個別の処置効果を推定することを目的としたアルゴリズムです。
ランダムフォレストは決定木を多数アンサンブルして汎化性能を高める手法として有名ですが、因果フォレストでは「処置効果の推定」を念頭に置いた独自の木の構築・分割基準を採用している点が特徴です。

### 理論的な仕組み
因果フォレストの理論的な仕組みについて簡単に解説します。
まず、各サンプル(個体)$i$には、特徴量ベクトル$X_i$、処置の有無を示す二値変数$T_i$があるとします。実際に観測できない理想的な状態として、処置を受けた場合の潜在アウトカム$Y_i(1)$と、受けなかった場合の潜在アウトカム$Y_i(0)$を考えます。

個別処置効果(ITE)は、
```math
τ(x)=E[Y(1)-Y(0)|X=x]
```
で定義され、これは「特徴$x$を持つ個体が処置を受けると、受けなかった場合に比べてどれだけアウトカムが変化するのか」を表します。

### 因果フォレストの処置効果推定
因果フォレストは、ランダムフォレストと同様に複数の決定木を学習し、最終的にそれらをアンサンブルすることで推定結果を得ます。ポイントは、「どのように木を分割するか」を処置効果の推定を念頭に置いて設計していることです。

詳しい解説は、因果フォレストに関する論文も出ているのでそちらを参照していただければと思います。

参考リンク

https://ies.keio.ac.jp/upload/20201201econo_nakamura_Slide.pdf\

https://qiita.com/ssugasawa/items/15ca8ae09477c5023c1e

因果フォレストの特徴としては、「データ内の異質性」を自動的に捉えやすい設計にあります。
例えば、ある特徴量$X_j$の値が高い集団は処置効果が大きく、一方で値が低い集団は処置効果が小さい、というパターンがあれば、木の分割過程で自然とその特徴量を使った分割が選ばれ、異なるはノードに振り分けられます。
結果として、処置効果が似通ったサンプル同士がまとまるので、葉ノード内の処置群と対照群の「差」を推定するときにバラツキが減り、より頑健な効果推定に繋がります。

### 因果フォレストならではの特徴
傾向スコアや、Meta-Learnersにはない、因果フォレストならではの特徴をまとめます。
以下の3点が特徴として考えられます。
+ **一貫して「処置効果」そのものを木の分割基準に組み込む**
通常のstatsmodelは、「アウトカムの予測誤差」を基準に分割するため、処置効果自体がうまく分割されるとは限りません。因果フォレストは、「処置効果の推定精度」を直接改善する目的関数を導入し、葉ノードがちょし効果の推定にとってより均質になるように分割します。
+ **高次元・複雑な異質性にも対応可能**
処置効果が複数の特徴量の複雑な組み合わせによって変わる場合でも、木構造とアンサンブルにより柔軟に対応できます。従来の線形モデルと比べても、どのような特徴量が処置効果に影響しているかを自動的に探索しやすいという利点が挙げられます。
+ **推定誤差の推定や信頼区間の評価**
因果フォレストの推定誤差や信頼区間を評価するための漸近理論が示されています。通常のランダムフォレストより理論面での裏付けが整備されてきており、統計的信頼性を担保しながら、「個別の処置効果」を推定できる点が大きな強みです。

参考リンク：

https://arxiv.org/abs/1510.04342

# ベイズ推論
![A_Bテスト_page-0001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3584936/97db89f9-d0bf-98a6-a72e-86cf88c63823.jpeg)

ベイズ推論は、「観測データ」をもとにして事前分布から事後分布を更新し、道パラメータを推定する方法論です。因果推論においてもこのベイズ的視点を取り入れることで、効果推定の不確実性をより直接的に評価し、A/Bテストなどの場面で柔軟に活用できます。本章では、A/Bテストの結果をベイズ推論で効果検証する方法を例に解説し、ベイズ推論のメリットや特徴をまとめます。

### A/Bテスト結果をベイズ推論で効果検証する方法
A/Bテストでは、例えばWebサイトの2種類のデザイン(AとB)のどちらがコンバージョン率を高めるか検証するシーンが典型的です。ここでは、AとBのコンバージョン率をベイズ推論で比べる簡単な方法を説明します。

#### 1. データ
+ Aグループ：サンプル数$n_A$、コンバージョンした数$k_A$
+ Bグループ：サンプル数$n_B$、コンバージョンした数$k_B$
+ 各サンプルは「成功(1)or失敗(0)」というベルヌーイ試行とみなせる

#### 2. モデル設定
+ Aのコンバージョン率を$θ_A$、Bのコンバージョン率を$θ_B$とする
+ $θ_A$, $θ_B$には事前分布としてベータ分布を与えることが多い。

#### 3. 事後分布の計算
+ Aの事後分布
```math
p(θ_A|data A)=Beta(α_A+k_A,β_A+n_A-k_A)
```
※$α_A$,$β_A$はAに対するベータ分布の事前パラメータ
+ Bの事後分布
```math
p(θ_B|data B)=Beta(α_B+k_B,β_B+n_B-k_B)
```

#### 4. 効果(差分)の評価
+ A/Bテストで「Bの方がAよりもコンバージョン率が高いか？」を評価したい場合、ベイズ推論では「$θ_B>θ_A$である確率」を事後分布のサンプリングから直接計算できます
+ 例えば、事後分布からサンプリングした多くの$(θ^{(s)}_A,θ^{(s)}_B)$について「$θ^{(s)}_B>θ^{(s)}_A$」となる比率を計算すれば、$P(θ_B>θ_A|data)$を数値的に計算できる
+ あるいは、、$P(θ_B-θ_A>0|data)$を求めるのも同様

#### 5. 信頼区間の算出
+ 差分$δ=θ_B-θ_A$の事後分布をサンプリングで得て、その95%範囲を信用区間としてレポートできます
+ 「$θ_B$が$θ_A$より大きい確率は◯%」という直接的な解釈も可能です


### ベイズ推論ならではの特徴
+ **不確実性の自然な取り扱い**
ベイズ推論では、全ての未知パラメータが「分布」として表現されます。これにより、推定値だけでなく、その不確実性を定量的に示すことができ、意思決定を行う際に役立ちます。
+ 事前知識の取り込み
「同種の過去の実験やドメイン知識」を事前分布に反映することで、小規模のデータやバイアスがかかったデータでも、推定の安定性を高められます。逆に事前知識がなければ一様分布などを設定することでフラットな推定が可能です。
+ 複雑なモデルや階層構造への拡張性
回帰モデルやマルチレベルモデルなど、より複雑な構造を含むモデルを柔軟に組み立てることができます。階層ベイズモデルを使えば、「ユーザ単位」「セグメント単位」「全体」という多層の確率構造を一貫して扱うことができ、効果推定や将来予測に対して統合的な視点を与えてくれます。

# おわりに
最後まで読んでいただきありがとうございました！
今回は、「傾向スコアとIPW法」「Meta-Learners」「因果フォレスト」「ベイズ推論」の4つを取り上げましたが、実際のところ、因果推論手法はここで紹介したもの以外にも数多く提案されています。それぞれに得意な状況や前提条件が異なりますし、運用時の計算コストや実装の難易度も異なります。

大切なのは、各手法の特徴や強み・弱みをしっかり理解し、自分の課題に合った手法を選択し使いこなすことです。今回の記事をきっかけに、より実践的なスキルを身につけていただければ幸いです。

もしこの記事が参考になったと感じていただけたら「いいね」を押してもらえると励みになります！

また、データサイエンス関連の情報発信をXでも行なっていますので、興味のある方はぜひフォローしていただけると嬉しいです！

https://x.com/tarantula_ds_/