Re:ゼロから始めるML生活

どちらかといえばエミリア派です

A/Bテストで使用される検定を試してみる

f:id:nogawanogawa:20210822162300p:plain

最近A/Bテストについて勉強してました。*1

この前、こちらの記事を拝見しました。

www.rco.recruit.co.jp

この手の検定の話は結構苦手意識があり、良い機会だったので勉強してみたので今回はそのメモです。

期待値コントロール

この記事で書くことは下記になります。

  • 想定する状況
  • 帰無仮説と対立仮説
  • どういう状況で使用できるか
  • 実例
    • 例題の状況設定
    • サンプルコード
    • 例題の解釈

また、今回勉強の対象にしたのは冒頭で紹介した記事に書いてあった下記の5種類についてです。

  • 二項検定
  • カイ二乗検定
  • フィッシャーの正確確率検定
  • t検定
  • ウィルコクソンの順位和検定

逆に、それぞれの検定の中身に関する数式を用いた説明に関しては今回は割愛しますので、その点が気になる方は参考文献等を確認していただければと思います。

ここから外れたことは基本的に書かないので、その点ご了承ください。

二項検定

調べてみると下記のような定義になっているようです。

二項検定(にこうけんてい、英: binomial test)は、2つのカテゴリに分類されたデータの比率が、理論的に期待される分布から有意に偏っているかどうかを、二項分布を利用して調べる統計学的検定であり、確率を直接求める方法(正確確率検定)の一つである。 二項検定 - Wikipedia

帰無仮説と対立仮説は、

  • 帰無仮説:母比率は基準となる発生率に等しい
  • 対立仮説:母比率は基準となる発生率とは異なる

のようになります。 二項分布を前提にしていて、確率変数が前提通りになっているかどうかを判定するみたいなもんですかね。

A/Bテストの文脈だと、何らかの2つの機能のうち、ユーザーがどちらを選択するかについて均等に発生するかどうかについて検定することが考えられます。

状況設定

上の定義に従うと、カテゴリは2つになる必要があるようなので、例えば

  • コインを1回投げたときの表が出た回数と裏が出た回数が得られたとする。これをn人が試した結果が得られたとき、このときのコインがイカサマだったかを判定したい

みたいな状況でしょうか。

このとき、

  • 帰無仮説:母比率は基準となる発生率に等しい
  • 対立仮説:母比率は基準となる発生率とは異なる

と考えます。 どちらかが大きいといった判定ではなく、どちらかに偏っていることを判定するので、両側検定になります。

サンプルコード

このときの検定は下記のようなコードで実現できます。

docs.scipy.org

p1 = stats.binom_test(num_a, 100, 0.5, alternative='two-sided')
print(p1)

徒然なるままにコードを書いてみるとこんな感じですかね。

例題の解釈

二項検定の帰無仮説は2つのカテゴリが特定の確率(ここではイカサマでない場合を想定して0.5)で発生することだと考えます。

上のコードの例だと、コインを100回投げたとき、裏と表の回数からコインがイカサマだったかを判定することを考えます。

今回は仮想的に表が出る確率を0.4として、100回コインを投げたときの表の回数を算出し、36回という結果が出ています。

このときの二項検定を行ったときのp値は0.006という結果になっています。 有意水準を0.05としたとき「帰無仮説は2つのカテゴリが特定の確率(=0.5)で発生する」という帰無仮説が棄却され、2つのカテゴリが同じ確率で発生したとは言えないということになり、イカサマコインだったということがわかるんですね。

カイ二乗検定

カイ二乗検定は別名「独立性の検定」と言うそうです。*2

調べてみると下記のような定義になっているようです。

カイ二乗検定とは帰無仮説が正しいとしたもとで、検定統計量が(近似的に)カイ二乗分布に従うような仮説検定手法の総称です。代表的なものとして、ピアソンのカイ二乗検定、カイ二乗の尤度非検定、マンテル・ヘンツェルのカイ二乗検定、イェイツのカイ二乗検定などがあります。 カイ二乗検定のわかりやすいまとめ | AVILEN AI Trend

ふむふむ、何もわからん。ということで例題を見ていきます。

状況設定

こちらの資料*3から例を拝借したいと思います。

ワクチンの副反応について調べた結果、男女別で発熱の有無について下記のようなデータがあったとします。

性別 発熱あり 発熱なし
男性 291 120
女性 527 387

このとき、男女で発熱の有無について、

  • 帰無仮説:性別によって、発熱しやすさは変わらない
  • 対立仮説:性別によって、発熱しやすさが変わる

について検定したいとします。

カイ二乗検定は、カテゴリごとに事象の発生確率が同じであるかどうかを確認する際などに使用できるようですね。

サンプルコード

上の例を書き下すとこんな感じでしょうか。

例題の解釈

結果の出力を見てみると、

  • カイ二乗統計量
  • p値
  • 自由度
  • 期待度数の表

のような出力が出ています。

このとき、p値は5.27e-06となっており、「性別によって、発熱しやすさは変わらない」が棄却され、「性別によって、発熱しやすさが変わる」ということが考えられるとなるわけです。

フィッシャーの正確確率検定

フィッシャーの正確確率検定は

フィッシャーの正確確率検定(フィッシャーのせいかくかくりつけんてい、英: Fisher's exact test)は、標本の大きさが小さい場合に、2つのカテゴリーに分類されたデータの分析に用いられる統計学的検定法である。 フィッシャーの正確確率検定 - Wikipedia

と紹介されています。

フィッシャーの正解確率検定は、カイ二乗検定と同様、カテゴリに対する事象の発生確率が独立であるということを確認する際に使用するようです。

ただ、カイ二乗検定と違う部分は、カイ二乗検定はある程度サンプル数が多いときにある程度正しいp値を算出することができるのに対し、フィッシャーの正解確率検定は特定のサンプル数が5未満のような少ない場合にも使用することが可能になります。

実際の例を見ていきます。

状況設定

基本的な問題設定はカイ二乗検定と同じで良いと思います。 計算式だけ異なるので、そこだけ確認します。

サンプルコード

カイ二乗検定と大体同じ感じで関数だけ変更します。

例題の解釈

先程と同様に、p値が4.51e-06になっているので、帰無仮説が棄却され、性別によって、発熱しやすさが変わるという結論になります。

t検定

t検定は、「母平均に対する検定」とも呼ばれます。 t検定の考え方 | Logics of Blue

らしいです。

標本が得られたときに、それが平均が何らかの値と等しいかを判断するときに使用したりするようです。

使われ方によって

  • 1群のt検定
  • 対応のあるt検定
  • 平均値の差の検定
  • 分散が異なるかの検定

など、いろいろできるようです。 特に平均値の差について検定するときには、帰無仮説と対立仮説は下記の様になるかと思います。

  • 帰無仮説:2つの標本の平均に差はない
  • 対立仮説:2つの標本の平均は異なる

状況設定

2つのクラスでテストを行って、両クラスの間で平均値に差があるかを検定するとする。

サンプルコード

今回はわざと平均点をずらした標本を作成し、それを検定してみたいと思います。

例題の解釈

結果として、p_value=8.39e-12と非常に小さい値になったので、帰無仮説が棄却され、2つの標本の平均は異なると考えられます。

ウィルコクソンの順位和検定

t検定とは異なり、ウィルコクソンの順位和検定は中央値に差があるかどうかを検定します。

ウィルコクソンの順位和検定は得られた2つのデータ間の代表値 (中央値) に差があるかどうかを検定する. ウィルコクソンの順位和検定

帰無仮説と対立仮説は

  • 帰無仮説:2つの標本の中央値に差はない
  • 対立仮説:2つの標本の中央値は異なる

のようになります。

状況設定

2クラスのテストの得点の中央値に差があったかを確認することを考えます。

サンプルコード

こんな感じになるかと思います。

例題の解釈

このときはp値は7.8e-12なので、2つの標本の中央値に差はないという帰無仮説が棄却されて、中央値は異なるということがわかります。

こんな感じで使い方を確認しました。

参考文献

下記の文献を参考にさせていただきました。

www.rco.recruit.co.jp

bellcurve.jp

logics-of-blue.com

https://www.hosp-shizuoka.juntendo.ac.jp/pdf/covid-19/questionnaire_02.pdf

qiita.com

logics-of-blue.com

www.geisya.or.jp

www.haya-programming.com

qiita.com

感想

A/Bテストについて色々調べてた関係で、検定の手法とかあんまり良く分かってないと感じたので、ひとまずA/Bテストで使用しそうな部分だけ勉強してみた感じです。

A/Bテストがどういう内容のもので、どういったことを検定したいのかによって使用する検定の手法が異なるということくらいは理解できたので、今回は満足です。

この辺をうまく使い分ければ、めっちゃ変なケースじゃないければA/Bテストはなんとかやっていけそうだなと思いました。