俵言

しがない社会人が書く、勉強とかのこと。最近は機械学習や kaggle 関連がメイン。

効果検証入門 1章の個人的最難関だった t 検定の話

はじめに

巷で話題になっているアイツを僕も読み始めてます。(他の本も読まないといけないのに)

効果検証入門〜正しい比較のための因果推論/計量経済学の基礎

効果検証入門〜正しい比較のための因果推論/計量経済学の基礎

初歩的な所から理解したいという気持ちで輪講で1章の担当になり資料を作っていたのですが、有意差検定のあたりで頭がバグったので t 検定の復習をして行間を埋めることになりました。

おそらく1章で一番( 無駄に*1 )頑張ってしまったので、その内容を備忘録がてら書くことにします*2。統計全然わからんので、変なこと言っててもつよつよ勢はどうかヤサシクシテホシイ....

t 検定はいくつか種類があると思うのですが、ここでは本で使われている(と僕が思っている) 対応なし両側 t 検定の話をします。内容に沿って書くので、本を読んで「この t 検定って何なんだろう🤔」ってなった方*3が流れを理解する上で少しでも参考になれば幸いです。

目次

【追記(2020/2/24)】
前提の部分でおかしな部分があったため色々と修正を行いました。これに伴い読みにくくなってしまい、また、数学的な怪しさが生まれた可能性があります。
ただ、1章での介入の平均的な効果の検定において重要な部分(t 検定を行う対象がそもそもセレクションバイアス込みになっていること)はより明確になったと思います。ご了承ください 🙏

準備

記号

以下のように記号を置く*4.

  • 介入が行われた場合の売上:  Y^{(1)} (本の中での記法)
  • 介入が行われ無かった場合の売上:  Y^{(0)} (本の中での記法)
  • 介入の有無:  Z (本の中での記法。介入が行われたとき  Z = 1, そうでないとき  Z = 0)
  • 介入が行われるようなユーザの  Y^{(1)} :  Y^{(1)}_{\mid Z=1}
  • 介入が行われ無いようなユーザの  Y^{(0)} :  Y^{(0)}_{\mid Z=0}
  •  Y^{(1)}_{\mid Z=1} の母平均, 母分散:  \mu_{1 \mid Z=1}, \ \sigma_{1 \mid Z=1}^2
  •  Y^{(0)}_{\mid Z=0} の母平均, 母分散:  \mu_{0 \mid Z=0}, \ \sigma_{0 \mid Z=0}^2
  •  Y^{(1)}_{\mid Z=1} - Y^{(0)}_{\mid Z=0} の母平均:  \mu_s
  • 変数  x の期待値:  E[ x ]

このとき、

  •   \mu_{1 \mid Z=1} = E \left [ Y^{(1)}_{\mid Z=1} \right ] = E \left [ Y^{(1)} | Z = 1 \right ]

  •  \sigma_{1 \mid Z=1}^2 = E \left [  \left( Y^{(1)}_{\mid Z=1} -  \mu_{1 \mid Z=1} \right)^2 \right ] = E \left [ \left( Y^{(1)} \right) ^2 \mid  Z = 1 \right ]  - E \left [ Y^{(1)} \mid  Z = 1 \right ]^2

  •   \mu_{0 \mid Z=0} = E \left [ Y^{(0)}_{\mid Z=0} \right ] = E \left [ Y^{(0)} | Z = 0 \right ]

  •  \sigma_{0 \mid Z=0}^2 = E \left [  \left( Y^{(0)}_{\mid Z=0} -  \mu_{0 \mid Z=0} \right)^2 \right ] = E \left [ \left( Y^{(0)} \right) ^2 \mid  Z = 0 \right ]  - E \left [ Y^{(0)} \mid  Z = 0 \right ]^2

  •   \mu_s = E \left [ Y^{(1)}_{\mid Z=1} - Y^{(0)}_{\mid Z=0} \right ]
= E \left [ Y^{(1)}_{\mid Z=1}  \right ] - E \left [ Y^{(0)}_{\mid Z=0} \right ]
= \mu_{1 \mid Z=1}  - \mu_{0 \mid Z=0}

また、観測データから計算される統計推定量はハット \left( \hat{ } \right) を付けて表現する(e.g.  \mu_{1 \mid Z=1} の統計推定量 \hat{\mu}_{1 \mid Z=1} )。

前提

今、母集団における介入の平均的な効果  E \left [ Y^{(1)} - Y^{(0)} \right ] = E \left [ Y^{(1)} \right ] -  E \left [ Y^{(0)} \right ] に興味があります。 ただし手元にあるのはその一部である観測データだけです。

  • 介入が行われたグループの観測データ:  \left \{ Y^{(1)}_1, Y^{(1)}_2, \ldots , Y^{(1)}_m \right \} (サンプルサイズ  m )
  • 介入が行われなかったグループの観測データ:  \left \{ Y^{(0)}_1, Y^{(0)}_2, \ldots , Y^{(0)}_n \right \} (サンプルサイズ  n )

更に注意すべきは、本文中で述べられているようにこれらはあくまで介入が行われたとき行われなかったときに観測されるデータであるということです。つまり、これらのデータの平均   \displaystyle \frac{1}{m} \sum_{i=1}^m Y^{(1)}_i ,   \displaystyle \frac{1}{n} \sum_{i=1}^n Y^{(0)}_i で推定できるのは期待値である  E \left [ Y^{(1)} \right ] ,  E \left [Y^{(0)} \right ] ではなく、 条件付き期待値である  E \left [ Y^{(1)} | Z = 1 \right ] \left( = \mu_{1 \mid Z=1} \right) ,  E \left [ Y^{(0)} | Z = 0 \right ] \left( = \mu_{0 \mid Z=0} \right) ということになります。

ここで本文中の 1.3.5 節 ~ 1.3.7 節 での議論を思いだすと、上記の条件付き期待値の差分は真の効果(と仮定できるもの)とセレクションバイアスの項に分解できます。


\mu_s = \mu_{1 \mid Z=1} - \mu_{0 \mid Z=0} \\
\ \ \ \ = E \left [ Y^{(1)} | Z = 1 \right ] - E \left [ Y^{(0)} | Z = 0 \right ] \\
\ \ \ \ = E \left [ Y^{(1)} - Y^{(0)}  \mid Z = 1 \right ] - \left( E \left [Y^{(0)} \mid Z = 1 \right ]
- E \left [ Y^{(0)}  \mid Z = 0 \right ] \right)

RCT 等を行ってセレクションバイアスの項 \left( E \left [Y^{(0)} \mid Z = 1 \right ]
- E \left [ Y^{(0)}  \mid Z = 0 \right ] \right) がゼロになっていると仮定すれば、 \mu_s を今求めたい  E \left [ Y^{(1)} - Y^{(0)} \right ] (介入の平均的な効果) と見なせます。そこで、推定量である

 \hat{\mu}_s =  \hat{\mu}_{1 \mid Z=1} -  \hat{\mu}_{0 \mid Z=0} = \displaystyle \frac{1}{m} \sum_{i=1}^m Y^{(1)}_i - \frac{1}{n} \sum_{i=1}^n Y^{(0)}_i

から、(バイアスが生じる可能性のある)  \mu_s の性質を調べる(検定する)ことにより、本来知りたい  E \left [ Y^{(1)} - Y^{(0)} \right ] を間接的に調べることにします。

※これ以降は簡単のため、強調したいときを除いて  \left \lceil \ \ \mid Z=j \left( j=0, 1 \right) \ \right \rfloor を省いて変数を略記します(e.g.  \mu_{1 \mid Z=1} \mu_1,  \hat{\mu}_{1 \mid Z=1}  \hat{\mu}_1 と略記する)。

本では以下のような仮定を置いた上で t検定を行っています。

  1. サンプルサイズは十分に大きく、観測値の標本平均に中心極限定理を適用できる(本文中でも明示的に言及)
    
\hat{\mu}_1 ~ \displaystyle \sim \mathcal{N} \left(\mu_1, \frac{\sigma_1^2}{m} \right), \ \
\hat{\mu}_0 ~ \displaystyle \sim \mathcal{N} \left(\mu_0, \frac{\sigma_0^2}{n} \right)

  2. 二つのグループは等分散性を持つ \left( \sigma_1^2 = \sigma_0^2 (= \sigma^2 とおく) \right)
    こちらは明言されていないですが、t検定は等分散性を仮定した検定なので必要です*5

このとき正規分布の再生性から、 
\hat{\mu}_s = \hat{\mu}_1 - \hat{\mu}_0 ~ \displaystyle
\sim \mathcal{N} \left(\mu_1 - \mu_0, \  \frac{\sigma_1^2}{m} + \frac{\sigma_0^2}{n} \right)
= \mathcal{N} \left(\mu_1 - \mu_0, \  \sigma^2 \left(\frac{1}{m} +  \frac{1}{n} \right) \right) 

となり、 \hat{\mu}_s は平均  \mu_1 - \mu_0, 分散  \displaystyle \sigma^2 \left(\frac{1}{m} +  \frac{1}{n} \right) 正規分布に従います。

本題

ここからは本の流れ(1.3.8節 "有意差検定の概要と限界" の小項目 "t検定のプロセス" (p.21-22*6 )) に従って t 検定を見ていきます。
やりたいことは、母集団における(バイアス込みの)平均的な効果  \mu_s = \mu_1 - \mu_0 ゼロでは無いと統計的に示すこと。言い換えると、今手元のデータで得られる  \hat{\mu}_s の推定値が偶然の結果ではないと示すことです。

1. 標準誤差の算出

ちゃんと言うと、性質を調べたい  \mu_s の推定量  \hat{\mu}_s の 標準誤差の算出です。 「標準誤差」って言葉にあまりなじみが無かったのですが、形式的な定義は「推定量標準偏差(分散の平方根)」のようです*7*8

まず、本文中に最初に出てくる分散  V *9 は、  Y^{(1)_{ \mid Z=1 }}, Y^{(0)}_{ \mid Z=0 } の母分散  \sigma_1^2 = \sigma_0^2 = \sigma^2 の推定量です(ここでは  \hat{\sigma}^2 と書くことにします)。


V = \displaystyle  \frac{
  \sum_{i=1}^m \left( Y^{(1)}_i - \hat{\mu}_1 \right)^2 +
  \sum_{i=1}^n \left( Y^{(0)}_i - \hat{\mu}_0 \right)^2
}{m + n - 2} = \hat{\sigma}^2

※便宜上、本文中の  \bar{Y}^{(1)}, \  \bar{Y}^{(0)}  \hat{\mu}_1, \  \hat{\mu}_0 に置き換えています。

計算するとわかりますが  E \left [ \hat{\sigma}^2 \right ] = \sigma^2 であり、  \hat{\sigma}^2 は不偏分散です。

そして、  \hat{\mu}_s \sim \mathcal{N} \left(\mu_1 - \mu_0, \  \sigma^2 \left(\frac{1}{m} +  \frac{1}{n} \right) \right) であることを踏まえると  \hat{\mu}_s の分散は  \hat{\sigma}^2 \ (\frac{1}{m} +  \frac{1}{n} ) となります。
ここで本文中で書かれている標準誤差  SE を見てみると、

 SE = \sqrt{ \displaystyle \frac{V}{n} + \frac{V}{m} } =  \sqrt{\hat{\sigma}^2 \left( \displaystyle \frac{1}{m} + \frac{1}{n} \right)}

確かに 推定量  \hat{\mu}_s標準偏差であることがわかります。

2. 効果の推定値と標準誤差を使って t 値を算出

もはや定義的な感じですが(ただし次の step でこの形が非常に重要な意味を持つ)。

 t = \displaystyle
\frac{\hat{\mu}_1 - \hat{\mu}_0}{SE} =
\frac{\hat{\mu}_s}{
    \sqrt{
        \hat{\sigma}^2 \left( \displaystyle \frac{1}{m} + \frac{1}{n} \right)
    }
}

分母は  \hat{\mu}_s の分散の推定量平方根なので、母集団から一部のデータを取り出して  \hat{\mu}_s を計算するのを繰り返したときの値のばらつき具合(の推定量)です。
t 値は、データの取り方による  \hat{\mu}_s のばらつき(分母)に対して今手元にあるデータで計算した  \hat{\mu}_s (分子)がどれくらい大きいか、みたいな解釈が出来ると思います。

お気持ち的には、値の大きさが純粋なものなのか、それともデータの取り方による偶然なのかを測ろうとしてる感じ?これはまさに今検定しようとしていることですね。

3. t 値を使って p 値を算出

事前準備(めんどくさかったら読み飛ばしてください)

t 値を以下のように変形します。

 t  =
\frac{
    \left \{ \displaystyle \frac{ \hat{\mu}_s }{ \sqrt{ \sigma^2 \left( \frac{1}{m} + \frac{1}{n} \right) } } \right \}
}{ \displaystyle
    \sqrt{ \frac{\hat{\sigma}^2 }{ \sigma^2 } }
}
\\
\\
\ \  =
\frac{
    \left \{  \displaystyle \frac{ \hat{\mu}_s }{ \sqrt{\sigma^2 \left( \frac{1}{m} + \frac{1}{n} \right) } } \right \}
}{ \displaystyle
   \sqrt{ \frac{
    \displaystyle   \left \{ \left( m - 1 \right) \frac{\sum_{i=1}^m \left( Y^{(1)}_i - \hat{\mu}_1 \right)^2 }{m - 1} + \left( n - 1 \right) \frac{ \sum_{i=1}^n \left( Y^{(0)}_i - \hat{\mu}_0 \right)^2 }{n - 1} \right \}
}{(m + n - 2)  \sigma^2 } }
}
\\
\\
\ \  =
\frac{
    \left \{  \displaystyle \frac{ \hat{\mu}_s }{ \sqrt{ \sigma^2  \left( \frac{1}{m} + \frac{1}{n} \right) } } \right \}
}{
    \displaystyle \sqrt{ \frac{ \displaystyle \left \{
         \frac{ \left( m - 1 \right) \hat{\sigma_1}^2}{ \sigma_1^2 } +
         \frac{  \left( n - 1 \right) \hat{\sigma_0}^2}{ \sigma_0^2 }
    \right \}  }{m + n - 2} }
}

 \sigma_1^2 = \sigma_0^2 = \sigma^2 であることを使った。また、 
\hat{\sigma}_1^2 =\frac{\sum_{i=1}^m \left( Y^{(1)}_i - \hat{\mu}_1 \right)^2 }{m - 1}
, 
\hat{\sigma}_0^2 = \frac{ \sum_{i=1}^n \left( Y^{(0)}_i - \hat{\mu}_0 \right)^2 }{n - 1}
について  E \left [  \hat{\sigma}_1^2 \right ] = \sigma_1^2 ,  E \left [  \hat{\sigma}_0^2 \right ] = \sigma_0^2 が成り立ち、これらは不偏分散である。

ここで  \displaystyle \frac{ \left( m - 1 \right) \hat{\sigma_1}^2}{ \sigma_1^2 } , \  \frac{ \left( n - 1 \right) \hat{\sigma_0}^2}{ \sigma_0^2 } はそれぞれ自由度  m-1 ,  \ n-1カイ二乗分布に従っており、これらの和 (変形後の t 値の分母の中括弧( \{ \})で括っている部分)は 自由度  m + n - 2カイ二乗分布に従います

帰無仮説の下での計算

話を戻すと、やりたいことは 「(バイアス込みの)平均的な効果  \mu_s = \mu_1 - \mu_0 ゼロでは無い」と統計的に示すことです。
このために 「 \mu_s = \mu_1 - \mu_0 = 0 」という、示したいことと逆のことを帰無仮説とし、この仮説の下で p 値を計算、仮説を棄却(否定)出来るかを検証します。

 \hat{\mu}_s \sim \mathcal{N} \left(\mu_1 - \mu_0, \  \sigma^2 \left(\frac{1}{m} +  \frac{1}{n} \right) \right) であったことから、 \mu_s = \mu_1 - \mu_0 = 0 の仮説の下では、式変形後の t 値の分子は標準正規分布に従います

 \displaystyle
\frac{ \hat{\mu}_s }{ \sqrt{ \sigma^2 \left( \frac{1}{m} + \frac{1}{n} \right) }} \sim \mathcal{N} \left(0, 1 \right)

このとき t値の形を改めて見てみると

 t = \frac{  \displaystyle
\left \{ \mathcal{N} \left(0, 1 \right) に従う \right \}
}{  \displaystyle
\sqrt{ \frac{ \left \{ \chi^2(m + n - 2) に従う \right \} }{ m + n - 2} }
}

となっています。これは帰無仮説の下で t 値が t 分布 に従うということです。

t 値が従う分布が分かったのであとは p 値を計算するだけです。p 値の定義は表現色々あると思うのですが、僕の中では、「帰無仮説の下で、検定統計量(ここでは 𝑡) が手元のデータから算出した値、またはそれもよりも出にくい値を取る確率」という表現で落ち着いています*10

具体的に t 分布で考えると、(両側検定の時) 手元のデータから得られた t値よりも分布において外側、すなわち値を取りにくい範囲の面積の合計が p 値になります。

f:id:Tawara:20200222131215p:plain
自由度100 の t 分布

これでやっと帰無仮説の下での p 値を計算出来ました!

4. p 値を有意水準と比較する

あとは有意水準  \alpha と比較するだけです(本では  \alpha = 0.05 としている )。

 p \lt \alpha であれば、手元のデータから得られた推定量  \hat{\mu}_s帰無仮説 \mu_s = 0」の下で得られた可能性は十分低いと結論付け、 \hat{\mu}_s = \hat{\mu}_1 - \hat{\mu}_0 の値が統計的に有意であると評価します。

一方  p \geq \alpha であれば、帰無仮説 \mu_s = 0」の下で得られた可能性が否定できない、すなわち 母集団における(バイアス込みの)平均的効果 が 0 であることを否定できません。本でも強調していますが、否定できないだけであって断定しているわけではありません。

t 検定の話自体はこれで終わりなのですが、気を付けるべきなのは、本文の 1.3.8 節の終わり(p.23) でも述べられているように今回検定したのはセレクションバイアス込みの平均的効果だということです。なので、いくら有意差検定で有意性が出たとしても、そもそも介入の仕方に問題があると全く意味のない結果ということになります
本文のメールマーケティングの例で出て来たような、RCTをせず見込みのあるユーザにだけ介入したデータに対して有意差検定を行って有意性が出ても、介入の本当の効果を調べるという観点では何の意味もないということです。

終わりに

思った以上に書くのに時間がかかってしまいました*11。今回の勉強会資料作成と言い何故過ちを繰り返すのか... いい勉強にはなったのですがやっぱ疲れます。

本当のところを言うと、この本での t-検定の部分はサラッと流すべきところなんですよね。わかってる人なら「あーあれね」って行間を補完するし、統計ほとんど知らない人は「ふーん、何かあるんやな」って読み飛ばす部分です。

問題は中途半端にしか知識が無いのに詳細が気になってしまった人(僕です)で、自力で行間を埋めることも素直に流すことも出来ず無限に時間がかかってしまう...

まあ本とかでよくわからんなって思ったところをちゃんと調べてまとめるのは絶対自分のためになるので、そういう意味では良かったと思います。

1章全体の感想としては、セレクションバイアスがどういったものであるか・如何にして起こるか、防ぐためにどうすればよいか(e.g. RCT)、が非常にわかりやすく書かれていて勉強になりました。
よく行われる単純な引き算、 "介入ありグループの平均" ー "介入なしグループの平均" が実は条件付き期待値の差分になっていて、変形すると


\ \ \ \  E \left [ Y^{(1)}  \mid Z = 1 \right ] - E \left [ Y^{(0)}  \mid Z = 0 \right ]
\\
= E \left [ Y^{(1)} - Y^{(0)}  \mid Z = 1 \right ] - \left( E \left [Y^{(0)} \mid Z = 1 \right ] - E \left [ Y^{(0)}  \mid Z = 0 \right ] \right)

"求めたい効果(と見なせるもの)" - "セレクションバイアス" と表せるところが個人的には一番重要な学びポイントです。
1章はこの式(+ 著者の実務経験からくる分析現場の現実、有意差検定がツールに過ぎないこと)が理解できればOKな気がする。

あと著者のちくちくコメントがちょくちょくあるのが面白いですね。

  • 残念ながらABテストと呼びつつもこのようなプロセスにのっとっていない分析は企業においては多数存在します。
  • ビジネスの現場においては、しばしば分析のバイアスがサンプルサイズが大きくなることによって解決されるという謎の議論が行われるので注意が必要です。
  • 乱雑な集計による分析を行なったあと手当たり次第に検定を行い、その質が担保されていると主張することはビジネスの現場でしばしば目撃される行為です。


今回変に沼に嵌ってしまいましたが、2章以降も良い学びが得られるのは間違いないです。引き続き読んでいこうと思います。(そしてまた中途半端な知識で新たな沼に嵌るのだ...)

参考リンク

qiita.com

1.3 節で時間かかり過ぎたため 1.4節やるときに非常に助かりました。ありがとうございます。

qiita.com

1章では使わないですが、等分散性を検定する F検定や等分散性を仮定しない Welchの t検定、(あと順位和検定) が python で書かれています。こちらも大変参考になりました。ありがとうございます。



効果検証入門〜正しい比較のための因果推論/計量経済学の基礎

効果検証入門〜正しい比較のための因果推論/計量経済学の基礎

*1:本来はさらっと流すべき箇所だったとは思う

*2:あくまでメモ的なやつなので色々ご容赦ください

*3:Twitterに生息するつよつよなDS・MLエンジニアは行間を補完できるので無問題なんだろうな...:;(∩´﹏`∩);:

*4:色々事情があって非常に見にくいことになってますがどうかお許しを...

*5:上のサンプルサイズの話もなのですが、web のような大規模データであればここらへんは前提条件として織り込まれている感じなのでしょうか?

*6:僕は物理本で勉強しているので、ページ番号はこれに準拠します

*7:https://bellcurve.jp/statistics/course/8616.html

*8:https://best-biostatistics.com/summary/sd-se-chigai.html#i-3

*9:読んでるとき「何の分散や?」ってなった

*10:もっと良い表現あったら教えて欲しい

*11:しかも後から後から修正項目を思いついて更に時間がかかりました