⚖️

基本的な因果推論手法の使い分け

2023/07/30に公開

はじめに

この記事では、場合毎に選択できる因果推論手法をフローチャートとしてまとめた。フローチャートで言及している手法は、「効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」で紹介されていた因果推論の手法に限られる[1]。また、フローチャートの分岐を判断する上で必要となる最低限の事前知識を解説し、個別の分析手法の概要もまとめている。最後に、それぞれの手法を実装する上で利用できるPythonのライブラリについても言及する。

私自身は、業務でRCT(Rndomized Controlled Trial)以外の因果推論を活用した経験は無いが、その様な場面に遭遇した際に、利用できる手法を選択する助けとなるように、フローチャートを作成した。

準備

因果推論とは

統計的因果推論(Causal Inference)とは、観測した結果に対する特定の要因による影響、即ち因果関係を統計的に推定する手法である。因果推論は特定の介入による効果を推定するために用いられる。介入(あるいは措置)とは、クーポンを配布する、薬を投与するなど、何らかの施策や行為のことである。このとき、ある介入を行う対象を介入群、介入を行わない対象を対照群と呼ぶ。ただし、全ユーザにクーポンを配布するなど、施策によっては対照群が得られない場合もある。即ち、因果推論では、介入群(と対照群)の観測された結果から、介入による影響を推定する手法である。

セレクションバイアス(選択バイアス)とは

計量経済学におけるセレクションバイアスは、介入の割り当てによって生じるバイアスである。これは、比較している2群で介入以外の要因によって傾向が異なっていることによって生じるバイアスを意味する。例えば、購買量の多いユーザにクーポンを配布した場合、介入群と対照群では元の購買量に差があるため、単純な平均の比較では、介入効果を過大に評価してしまうバイアスが発生する。購買量のように、セレクションバイアスを発生させている要因を「共変量」と呼ぶ。

A/Bテストの様に、ランダムに介入の割り当てを行わない限り通常はセレクションバイアスが発生することになる。

フローチャート

手法を分類するには様々な観点が考えられるが、この記事では、介入の方法、共変量、介入前のデータ有無、モデル化の容易さ、非介入群の有無という点で手法を分類した。フローチャートにまとめるにあたって、「交絡に対処するための因果推論の手法」の内容を参考にした。

「介入」では、何らかの施策を行うサンプルをどの様に選択するかで場合分けしている。セレクションバイアスの無いRCT(Rndomized Controlled Trial, 無作為化比較試験)を実施するためには「ランダム(一様)」に介入する必要がある。しかし、A/Bテストの様なランダムな介入ができない場合も多い。「ABテストが難しい場合の施策効果の評価・推定方法」では、A/Bテストが実施できない事例を紹介している。例えば、クーポンを配布する場合、期待される効果が高いユーザに対して「一様でない確率的」に介入したい。また実社会では、特定の条件に合致する場合に「決定的」に介入したい場合もある。例えば、ユーザの属性に基づいてクーポンを配信する場合は、そのルールに応じて決定的に介入することになる。これらの3種類の介入ではある集団に対して部分的に介入するため対照群が存在するが、全てのユーザにクーポンを配布する場合等、ある集団の「全て」に介入したデータしか得られない場合がある。

次に「共変量」による場合分けを考える。「一様でない確率的」に介入した場合、セレクションバイアスを発生させている共変量を特定できる必要がある。回帰分析を行う場合、複数の共変量の累乗を含めた組み合わせ検討し「モデル化」する必要があり、考慮に漏れがあると脱落変数バイアスを発生させてしまう。モデル化が困難な場合は傾向スコアが利用できる。

最後に、全てのサンプルに介入している場合は、対照群が存在していないため、介入していない場合の変化を「介入前のデータ」から推測する必要がある。さらに、「非介入群」として、他の地域のデータの様な、異なる母集団のデータが利用できるか否かでも、利用できる手法が異なる。

この様な基準でフローチャートを辿れば、利用可能手法を選択することができる。以降では、個々の手法についての概要を紹介する。

因果推論手法の概要

RCT(Rndomized Controlled Trial, 無作為化比較試験)

ランダムに介入が行われている場合は、セレクションバイアスが含まれていないため、介入した場合の結果Y^{(1)}と介入していない場合の結果Y^{(0)}の期待値の差で介入の効果\hat{\tau}を推定することができる。

\hat{\tau} = E[Y^{(1)}] - E[Y^{0)}]

回帰分析

介入による効果を測定したい変数を目的変数(非説明変数)Y、介入の有無を表す介入変数Z、共変量を表すXの3種類を用いてモデル化を行い、Zの係数を求めることで効果量を推定する。これは、共編量で条件付けた場合に介入変数と目的変数が独立になるという仮定を置いており、CIA(Conditional Independence Assumption)と呼ばれる。
しかし、現在のモデルのバイアスを評価する手段がなく、必要な共変量が与えられたデータセットに含まれていない場合もあるため、バイアスを発生させている共変量を網羅することは容易では無い[2]。考慮から漏れた共変量を脱落変数と呼び、脱落変数がもたらすバイアスはOVB(Omitted Variable Bias)と呼ばれている。OVBは、脱落変数とZとの相関と、脱落変数とYとの相関の積で表されるため、YとZの両方に相関する変数をモデルに含めることで、バイアスを低減することができる。

次の式は、複数の共変量から成る単純な一次関数でモデル化を行っている。目的変数によっては、複数の共変量の組み合わせも考慮してモデル化を行う必要がある。

Y_{i} = \beta_0 + \sum_{k} \beta_{k} X_{i, k} + \tau Z_i

また、脱落変数を排除するために全ての変数をモデルに組み込んだ場合は、多重共線性による標準誤差の変化や、Post Treatment Biasが発生する恐れがある。Post Treatment Biasは、介入によって影響を受けた変数をモデルに組み込むことにより発生するバイアスである。例えば、ECサイトでメール配信をおこなった場合、介入群では購買意欲の高いユーザと低いユーザがサイトにアクセスする一方で、対処群では購買意欲の高いユーザしかアクセスしない。このため、サイトへのアクセスを共変量として加えた場合、サイトへ訪問したユーザにおいては対照群の方が購買量が多く、効果が過小に評価されてしまう。

最後に、回帰モデルの予測能力や説明能力は、効果検証における有効性を意味しない点に注意が必要である。RCTを行ったデータに介入変数のみで回帰分析を行った場合、バイアスの小さい効果量を得ることができる一方で、予測性能に乏しいことがわかる。

傾向スコア

傾向スコアP(X)とは介入が割り当てられる確率であり、傾向スコアが同一になるようなサンプルの中では、介入がYとは独立に割り当てられているという仮説を前提にしている。つまり、回帰分析が共変量で条件付けた際に目的変数Yと介入変数Zが独立であると仮定しているのに対して、共編量から算出される傾向スコアで条件付けた際に独立であると仮定していることになる。

傾向スコアはを実際に観測できる場合は少ないため、ロジスティック回帰モデル等を用いて傾向スコアの推定量を得ることが一般的である。ここでは、傾向スコアを用いた因果推論手法として、傾向スコアマッチングとIPWを紹介する。

傾向スコアマッチング

傾向スコアが近いサンプルは目的変数と介入変数が独立であると仮定しているため、介入群の各サンプルについて、傾向スコアが近い対照群のサンプルを選出し(マッチングし)、目的変数の差の期待値を求めることで介入効果を推定することができる。
このとき、マッチングは母集団における介入効果であるATT(Average Treatment effect on Treated)を推定しており、以下の式で表すことができる。

\hat{\tau} = E\{E[Y|P(X), Z=1] - E[Y|P(X), Z=0] | Z=1\}

IPW(Inverse Probability Weighting, 逆確率重み付き推定)

介入が割り当てられる確率である傾向スコアと目的変数に正の相関がある場合を考える。この介入はランダムではなく正の相関があるため、下図の左に示す様に、介入群が母集団の分布よりも右によった分布になる。この図では縦軸がサンプル数、横軸が傾向スコアを表している。介入の偏りがあるため、介入群の目的変数の期待値が真の期待値よりも大きくなり、介入効果を過大に評価してしまう。


引用図:「効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」より

IPWでは、介入が割り当てられる確率である傾向スコアを重みとして利用して、介入効果の期待値を計算する。先ほどの図の右側に示す様に傾向スコアの逆数倍することで、サンプル数を水増しし、バイアスを補正する。具たち的には、次の式で介入効果の期待値\hat{\tau}を推定する。

\hat{\tau} = \hat{Y^{(1)}} - \hat{Y^{(0)}}
\hat{Y^{(1)}} = \frac{\sum^N_i \frac{Z_i Y_i}{\hat{P}(X_i)}} {\sum^N_i \frac{Z_i}{\hat{P}(X_i)}}
\hat{Y^{(0)}} = \frac{\sum^N_i \frac{(1 - Z_i) Y_i}{1 - \hat{P}(X_i)}} {\sum^N_i \frac{(1 - Z_i)}{1 - \hat{P}(X_i)}}

介入効果の期待値\hat{\tau}は、介入を行なった場合の目的変数の期待値\hat{Y^{(1)}}と介入を行わなかった場合の期待値\hat{Y^{(0)}}の差である。それぞれの期待値は、\hat{P}(X_i)または1 - \hat{P}(X_i)の逆数で重みづけた目的変数の期待値である。

傾向スコアの妥当性

任意の傾向スコアでバイアスを除外できるわけではない。傾向スコアでは、モデルの説明力ではなく共編量のバランスが取れているかが重要になる。共編量のバランスは、介入群と対照群の平均差で確認する。傾向スコアマッチングであればマッチングしたサンプル間の差を、IPWでは傾向スコアで補正した後の平均差を求める。具体的には、ASAM(Average Standardized Absolute Mean distance)と呼ばれる、平均差を標準誤差で割った値を用いる。

ここでも、「効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」より引用した下記の図でASAMの変化を紹介する。


引用図:[効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」より

この図は傾向スコアマッチングを適応した後(Adjusted)と適応前(Unadjusted)を比較している。縦軸に共編量、横軸にASAMを描画している。傾向スコアマッチングにより共編量によるバイアスが低減できていることがわかる。

DID(Difference in Diffference; 差分の差分法)

DIDでは、対照群が得られない場合に、異なる母集団から得られる非介入群のデータを用いて、介入群の介入していない場合の変化を推測する。例えば、特定の地域全体に行なった施策の評価を、別の地域(別の母集団)のデータを用いて行う。この場合、介入群と非介入群で同様の変化があるという平行トレンド(共通トレンド仮定とも呼ばれる)を仮定している。

具体的には名前からもわかる通り、介入群と非介入群の介入前後の差の差を求める。次の式では介入前を0、介入後を1、介入群をtreat、非介入群をotherとした場合に、目的変数Yの差の差を求めることで、効果量\hat{\tau}を推定する。Yの推定には、回帰分析等を利用することもできる。

\hat{\tau} = (Y_{1,treat} - Y_{0,treat}) - (Y_{1, other} - Y_{0, other})

CasualImpact

対照群が得られない場合はDIDが利用できないため、介入群の介入されなかった結果を介入前のデータから推定することで、バイアスを低減するCasualImpactが利用できる。「効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」では理論的背景の説明が割愛されいたため、これ以上の解説はしないが、介入によって影響を受けた変数をモデルに組み込むことにより発生するバイアス等を回避する必要がある。

RDD(Regression Discountinuity Design, 回帰不連続デザイン)

何らかの条件を満たす際に介入を行いたい場合、決定的に割り当てが行われる。この場合、介入する確率である傾向スコアは0または1のみをとり、適切なマッチングやIPWを行うことができない。このとき、条件となる変数をrunning variable、閾値となる値をカットオフと呼ぶ。RDDではカットオフ付近のサンプルに着目し、カットオフ付近のサンプルではデータの性質の差異が小さく、介入群と対照群のバイアスが小さいと仮定する。

次の図は縦軸にサイトの来訪率、横軸に昨年の購買金額の対数をとった図で、log(history_i) >= 5.5のユーザに介入し、メールマーケティングを行なったデータを示している。カットオフであるlog(history_i) = 5.5付近で来訪率に大きな変化があるが、購買量の変化が小さいことがわかる。


引用図:[効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」より

RDDは、回帰分析を用いたパラメトリックRDDと、カットオフ付近のサンプルのみを利用したノンパラメトリックRDDの2種類がある。RDDは、観察可能な変数が閾値として利用されている場合に利用できる実験デザインであり、介入変数で条件付けた際に目的変数が連続していること、介入対象が介入を認識し操作していないことを仮定している。前者は、異なる施策の結果によりカットオフの様な不連続が発生してしまう可能性がある。後者は、ある基準を満たせばクーポンが得られることをユーザが把握している場合に、意図して基準を満たす行動を行い、カットオフ前後でのデータの性質が異なってしまう問題を発生させる。

多重回帰分析と回帰不連続デザイン」ではシミュレーションを用いて、回帰分析とRDDの関係を解説しているため、理解の参考になった。

実装に使えるライブラリ

「効果検証入門〜正しい比較のための因果推論/計量経済学の基礎」に記載されているRの実装は、Githubで公開されている。
https://github.com/ghmagazine/cibook/

Pythonで実装する際は、DoWhyを利用することが良さそうである。ドキュメントのSupported estimation methodsに記載があるが、回帰分析(Linear Regression, Generalized Linear Models)、傾向スコアマッチング(Propensity Score Matching)、IPW(Inverse Propensity Weighting)、RDD(Regression discontinuity)等がサポートされている。DoWhyについてはドキュメントが充実しているが、「統計的因果推論のためのPythonライブラリDoWhyについて解説:なにができて、なにに注意すべきか」も参考になった。

CasualImpactについては、Rの実装をPythonにポートしたパッケージが複数公開されているが(causalimpact, pycausalimpact, tfcausalimpact) 、pycausalimpactはメンテされていない[3]ので、それ以外の実装を選択した方が良いと思う。

おわりに

因果推論に関する書籍を初めて読み、基本的な手法の使い分けを把握することができた。その一方で、回帰分析ひとつをとっても、どのようにデータを収集し、共編量を検討し、モデル化を行うのかは、より深い専門的な知見が必要になると感じた。冒頭でも述べたが、私自身はA/Bテストで評価できる場合しか扱った経験がないので、今後、個別の手法について知見が得られたら記事にしたいと思う。

脚注
  1. 因果の問題を欠損値の問題として捉えたDonald Rubinのアプローチに準ずる手法 ↩︎

  2. データに含まれない変数によるバイアスを評価するSensitivity Analysisと呼ばれる手法もある ↩︎

  3. Is this the replacement for pycausalimpact? #22 ↩︎

Discussion