📑

読書メモ 効果検証入門(回帰分析)

2024/11/24に公開

こんにちは、テックタヌキです。
普段はデータ分析のお仕事をしていて、このブログでは学んだことのアウトプットをしています。本記事は、効果検証入門
の読書メモです。
何か間違っているところがあれば指摘してもらえると喜びます。

はじめに

ビジネスの場において、何か施策を実施した後に、その効果を正しく見積もることは重要です。
本記事では、効果を正しく検証する技術について解説します。

ノーテーション

最初に、本記事で用いるいくつかの記号について定義しておきます。

  • Y:施策によって効果を向上させたい目的変数のこと。例えば、売上など。
  • Z:施策の有無。Z=1のときは施策対象者で、Z=0のときは施策対象者ではないとします。例えば、クーポンの配布など。
    • Y^{(1)}, Y^{(0)} は施策を実行したときの目的変数の値と施策を実行しなかったときの目的変数の値とします。
    • Y=ZY^{(1)}+(1-Z)Y^{(0)}と変形できる。YY^{(1)}, Y^{(0)}いずれかの値しか観測できないことに注意。
  • X:共変量のこと。目的変数以外の変数だと思えばよい。
  • N:データ数

第1章 セレクションバイアスとRCT

施策効果を「施策を受けた場合と施策を受けなかったときの目的変数の差」で測ることを思いつきそうです。目的変数を確率変数だと思えば、以下のように定式化できるでしょう。

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

しかし、これは実際には測れません。なぜかというと、ユーザを固定したとき、施策を受けたときと受けなかったときを同時に観測することができないからです。
一方で実データに対して効果を測ろうと思ったとき、単純には効果を\hat{\tau}_{naive}として、以下のような計算を思いつきそうです。

\hat{\tau}_{naive} = \frac{1}{\sum_{i=1}^N Z_i} \sum_{i=1}^N Z_iY_i - \frac{1}{N - \sum_{i=1}^N Z_i} \sum_{i=1}^N (1-Z_i)Y_i

第1項目は施策を受けた人の中での目的変数の平均値で、第2項目は施策を受けなかった人の中での目的変数の平均です。
しかし、実際にはこれは\tauを推定する量ではなく以下のような条件付き期待値の差を推定する量になっています。

\tau_{naive} = E[Y^{(1)}|Z=1] - E[Y^{(0)}|Z=0]

ただし、Z, Yがたがいに独立であれば、条件付き期待値の条件を外すことができるので\hat{\tau}_{naive}\tauを推定していることになります。
これはどういうときかといえば、目的変数の値とは関係なく施策対象かどうか決まっているということです。例えば、Yが売上だとすると、来店回数が多い人(少ない人)向けに施策を打っている場合には来店回数が多ければ多い人ほど売上が高いと思われるので、\hat{\tau}_{naive}では正しく効果\tauを推定することができません。逆に目的変数の値とは関係なくランダムで施策対象者が決まっている場合には正しく効果を推定することができます。後者の方法で検証する方法を無作為化比較試験(RCT)またはABテストと呼びます。

YについてのZに関する条件付き期待値を考えてみます。

E[Y|Z=1]=E[ZY^{(1)} + (1-Z)Y^{(0)}|Z=1] = E[Y^{(1)}|Z=1]
E[Y|Z=0]=E[ZY^{(1)} + (1-Z)Y^{(0)}|Z=0]=E[Y^{(0)}|Z=0]

つまり、あたりまえですが、Y^{(1)}, YZ=1での期待値とY^{(0)},YZ=0での期待値は一致します。Yの観測はY^{(1)}, Y^{(0)}のいずれかなので、言い換えるとZの値とYの右肩の数値が一致しているものしか観測できません。

そこで、計算はできませんが、E[Y^{(0)}|Z=1]という期待値を考えて、\tau_{naive}の計算を進めると、以下のように分解できます。[1]

\begin{aligned} \tau_{naive} &= E[Y^{(1)}|Z=1] - E[Y^{(0)}|Z=0] \\ &= E[Y^{(1)}|Z=1] - E[Y^{(0)}|Z=1] + E[Y^{(0)}|Z=1]- E[Y^{(0)}|Z=0] \\ &= E[Y^{(1)} - Y^{(0)}|Z=1] + (E[Y^{(0)}|Z=1]- E[Y^{(0)}|Z=0]) \end{aligned}

つまり、\tau_{naive}は、E[Y^{(1)} - Y^{(0)}|Z=1](E[Y^{(0)}|Z=1]- E[Y^{(0)}|Z=0])の和に分解できます。第1項は施策対象者のもとでの効果の期待値です。[2]効果と施策対象者かどうかが独立であれば、これは\tauと同じになります。

第2項は、施策を受けている人の受けなかったときの目的変数[3]の期待値と施策を受けていない人の施策を受けていないときの目的変数の期待値の差です。これはセレクションバイアスと呼ばれる量になっています。
セレクションバイアスは施策を受ける人と受けない人の選択がランダムではなく恣意的に選択された場合に生じるバイアスのことです。

例えば、Yが売上げの場合、過去の売り上げが高いユーザを施策対象に選べば、\tau_{naive}\tauよりも実際の効果を高く見積もってしまいますし、過去の売り上げが低いユーザを選べば、効果を低く見積もってしまいます。[4]

そのため、正しく効果を測るためにはRCTが必要になります。しかし、施策の実行には高いコストがかかるためRCTではなくできるだけ効果が高い対象者に向けて施策を実行したいという、ビジネス上の問題があります。
本書では、そのための方策としては回帰分析と傾向スコアの2種類が紹介されています。

ちなみに、実際に効果があったかなかったかを検定するには、施策対象者と非施策最小者の目的変数に対する平均の差の検定を行えばよいです。ただし、セレクションバイアスの符号と効果量の符号が同じ場合、棄却されやすくなります(すなわち効果があったという結果になってしまいます。)しかし、これは実際に効果があったとは意味しません。なぜなら検定は単に平均に差があるかどうかしか判定できないからです。
そのため、再三になりますが正確に効果を見積もりたい場合には、RCTを行うか、後述の方法を使ってセレクションバイアスを減らす必要があります。

第2章 回帰分析

次の線形回帰モデルを考えます。

Y = \theta_0 + \theta_1 X + \beta Z+ u

数理系のモデルでは、誤差項uは平均0、分散\sigma^2の正規分布を仮定することが多いですが、効果検証などの経済系のモデルでは、Yを決めるもののうちX, Z以外をまとめたものとモデル化します。
ただし、E[u|X, Z]=0という仮定をおきます。

この仮定の下では、

E[Y|X, Z] = \theta_0 + \theta_1 X + \beta Z

のようになることから、

Y = E[Y|X, Z] + \varepsilon = \theta_0 + \theta_1 X + \beta + \varepsilon

と書けることになります。

ここで、E[Y^{(1)}|Z=1]=E[Y|Z=1]を思い出して、\tau_{naive}に回帰分析のため、Xの条件をついたもの

E[Y|X,Z=1]-E[Y|X,Z=0]

を計算してみます。

E[Y|X,Z=1]-E[Y|X,Z=0] = (\theta_0 + \theta_1 X + 1\times\beta 1) - (\theta_0 + \theta_1 X + 0\times \beta)= \beta

きれいに\betaだけ残りました。また、第1章の形に合わせれば以下のように書けます。[5]

\begin{aligned} \tau_{naive} &= E[Y|Z=1] - E[Y|Z=0]\\ &= E[E[Y|Z=1, X] - E[Y|Z=0,X]] = E[\beta] = \beta \end{aligned}

つまり、Zの回帰係数をみれば、効果\tau_{naive}を測れるということです。
しかし、\tau_{naive}にはセレクションバイアスが含まれてしまうので、このままでは、回帰分析を導入した意味がありません。

回帰分析と1章との内容の違いは、共変量Xが使えるということです。

私が理解した限りでは、回帰分析の目的は、\tau(=E[Y^{(1)}-Y^{(0)}])は、求められないがE[Y^{(1)}-Y^{(0)}|X]を求められるようにすることです。
Xを与えたときにはZ, Yが条件付き独立になるように、共変量Xをできるだけ集めてくるのがポイントのようです。
このようにすることで、共変量Xが同じものの中では、施策対象者を決めるZは目的変数Yとは関係なく決まっているようにみなすことができるようになります。[6]

ここで、2章の冒頭でE[u|X, Z]=0という仮定を置きました。この仮定をおくと、E[u|X]=E[E[u|X,Z]]=0なので、u, ZXの条件付き独立っぽいものが得られます。
しかも、Cov[u, X] = Cov[u, Z]=0が導かれます。

証明は同様なので、Cov[u, X]=0だけ示します。条件付き期待値の性質を使うだけで解けます。

Cov(u, X) = E[(u - E[u])(X - E[X])]\\ =E[uX] -E[u]E[X] = E[uX] = E[E[uX|X]] = E[XE[u|X]] = 0

整理すると、E[u|X, Z]=0ならば、Cov[u, X] = Cov[u, Z]=0です。対偶をとると、Cov[u, X]\not = 0 \ or \ Cov[u, Z]\not = 0ならば、E[u|X, Z]\not =0です。

すなわち、Y\theta_0 + \theta_1 X+\beta Zで説明できない量uにXやZと相関があれば、回帰分析の仮定を満たさないことになります。
この仮定は、回帰係数が不偏推定量になるための条件でもあるので、この仮定が満たされない場合には、回帰係数\betaにバイアスが生じます。

そのため、uX,Zが相関しないように、共変量を選定してモデルに組み込む必要があります。

回帰分析の問題

回帰分析の問題を箇条書きで簡単にまとめておきます。

  • バイアスの評価ができない
    • 共変量の組み合わせをいろいろと試してみて、セレクションバイアスが最も小さいモデルを求めたいですが、そもそもセレクションバイアスが効果を過剰に見積もっているのか、過少に見積もっているかわからないので、単純に効果が最も小さいもの・最も大きいものという風に決定することができません。
    • そのため、分析者はどのようにして発生し、どのような共変量を加えることでバイアスを除けるかを考慮する必要があります。
  • バイアスを軽減するのに必要なデータが手に入らない場合

共変量についても以下にまとめておきます。

  • セレクションバイアスを除く共変量には、介入に相関のある変数をモデルに組み込むべきです[7]
    • テキストに詳しい説明がなかったので、記事内で説明しなかったですが、介入後に影響がある変数はいれるべきではないそうです。Post Treatment Biasというバイアスを産みます。
      -Post Treatment Biasは変数の選択以外にも生じることがあります。例えば、何らかの施策で特定の選択をしたユーザのみのデータしか得られていない場合です。

最後に

本記事では、効果検証入門の1章から2章までの理論的な部分に絞ってまとめました。
実際の書籍内では、具体例にて実際に実データを用いてバイアスを取り除いた例も載っているので、気になった方は読んでみてください。

脚注
  1. E[Y^{(1)}|Z=0]を考えることもできますが、良い解釈は生まれませんでした。 ↩︎

  2. 計算できないものが含まれているので、求めることはできません。 ↩︎

  3. もちろん計算できません。あくまでも仮想的な話です。 ↩︎

  4. テキストでは、\tauと比較していましたが、実際の効果として評価したいのは\tauではなく、E[Y^{(1)}-Y^{(0)}|Z=1]かと思います。間違っていたら教えてください。 ↩︎

  5. テキストには書いてなかったですが、おそらくあっていると思います。 ↩︎

  6. この部分以降は計算をいろいろしてみた私の考察です。間違いが含まれているかもしれません。 ↩︎

  7. 目的変数と相関がある変数もモデルに組み込むべきですが、それがセレクションバイアスを除く効果があるのかどうかはわかりませんでした。 ↩︎

Discussion