そのABテスト正しいですか?

2013-05-13
推計統計学 ABテスト

A社において、広告出稿時のランディングページの効果測定のために、実施することにしました。
Aliceさんは、Aパターン、Bパターンの2種類のデザインを用意しました。
ユーザが行なってほしいアクションを実行した場合を達成とし、それ以外の場合を未達成として集計しました。
その集計結果が以下の表です。

達成 未達成
Aパターン 60 490 550
Bパターン 90 580 670
150 1070 1220

Aliceさんは、さらに、上記の結果を割合に変更したものを作成し、上司に以下のコメントを添えて提出しました。
『Bパターンのほうが Aパターンに比べて2.52%も達成した割合が高いため、ランディングページはBパターンでいくこととします。』

達成 未達成
Aパターン 10.91% 89.09%
Bパターン 13.43% 86.57%

Aliceさんの報告は正しいのでしょうか?
今回の結果について、Aliceさんは単純に割合で結果を報告しました。 しかし、『偶然』という点を考慮するとどうでしょう?
上記の表のみでは、『偶然』このような結果になったと否定することはできません。
『偶然』を否定するためには、推計統計学のカイ二乗検定を利用します。

カイ二乗検定

計測時の誤差や偶然に左右されず、計測結果が理論値と同じであるかを検証するための手法です。
よくサイコロや血液型を例にして、カイ二乗検定の計算方法が例に出されます。
次のリンク([統計]カイ二乗検定)が非常に参考になるので、一度目を通してみると良いでしょう。

参考例題

サイコロを100回振った。それぞれの目は次の回数出現しました。
出現回数 1: 17, 2: 15, 3: 16, 4: 17, 5: 18, 6: 17
『サイコロに重心のズレなどの歪みがない』と仮定すると、それぞれの目は1/6の確率で出現すると推計されます。
このサイコロには重心のズレ等の歪みがないといえるでしょうか?
なお、この結果は『サイコロに重心のズレなどの歪みがない』という仮定は正しいという結果が計算で導けます。
また出現回数が仮に 1: 17, 2: 15, 3: 16, 4: 7, 5: 18, 6: 27となった場合は、
この仮定は正しくないという結果(= サイコロに重心のズレ等の歪みがある)が計算によって導けます。

カイ二乗値の算出
以下は計算過程を示したものですので、興味が無い方は読み飛ばし推奨

カイ二乗値は次のように定義されます。

χ^2 = (観測値1 - 期待度1) ^ 2 / 期待度1 + (観測値2 - 期待度2) ^ 2 / 期待度2 + ... (観測値n - 期待度n) ^ 2 / 期待度n

参考例題のサイコロの例の場合では
χ^2 = (17 - 16.67) ^ 2 / 16.67 + (15 - 16.67) ^ 2 / 16.67 ...
を計算すれば良いことになります。

カイ二条検定において、観測値のほかに、期待度という値が必要になります。
サイコロの例の場合『どの目も1/6の確率で出現する』という推定ができるので、この期待度の算出は簡単です。
今回のA/Bテストのような場合はどのように期待度を算出すればよいのでしょうか?
</div> </div> </div> </div>

期待度の算出

この例の場合は、以下のように期待度を算出します。
まず、Aliceさんが立証したいのは、『AパターンとBパターンでは、Bパターンのほうが達成率が高くなる』という仮説です。
この仮説では、期待度は算出できません。
(Bパターンのほうが達成率が高くなる。その期待度はいくつであるというのがいえないため。)
そこで、『AパターンでもBパターンでもどちらを見せても、『達成』、『未達成』は変わらない』という仮定をしてみることにします。
カイ二乗検定で仮設を否定し、前述の『AパターンとBパターンでは、Bパターンのほうが達成率が高くなる』という仮定を立証するというアプローチをとります。
期待度 達成 未達成
Aパターン 67.62 482.38
Bパターン 82.38 587.52
Aパターンの達成の期待度は、達成の合計 * Aパターンの合計 / 合計 で算出されている。(150 * 550 / 1220)
Bパターンの達成の期待度は、達成の合計 * Bパターンの合計 / 合計 で算出されている。(150 * 670 / 1220)
Aパターンの未達成の期待度は、未達成の合計 * Aパターンの合計 / 合計 で算出されている。(1070 * 550 / 1220)
Bパターンの未達成の期待度は、未達成の合計 * Bパターンの合計 / 合計 で算出されている。(1070 * 670 / 1220)

カイ二乗値の計算

期待度が算出できたら、カイ二乗値は簡単に算出できます。
実測値と期待度の表において、各項目につき以下を計算します。
(観測値 - 期待度)^2 / 期待度
各項目の上記計算結果の合計が 『カイ二乗値』となります。

達成 未達成
Aパターン (60 - 67.62)^2 / 67.62 = 0.8587 (490 - 482.38)^2 / 482.38 = 0.1204
Bパターン (90 - 82.38)^2 / 82.38 = 0.7048 (580 - 587.52)^2 / 587.52 = 0.0963

合計すると 『1.7802』となります。
これがカイ二乗値です。

推定の検証

今回の推定は、『AパターンでもBパターンでもどちらを見せても、『達成』、『未達成』は変わらない』という推定でした。
自由度(df)が 1 (達成,未達成の2パターンのみであるから。仮にA, B, Cの3パターンの結果がある場合は自由度は2となる。)
有意水準 5%
のおけるカイ二乗値をカイ二乗分布表(pdf)より算出すると、 『3.841』という値が得られます。 カイ二乗値は, 『1.7802』であるため、カイ二乗分布表の値より小さくなり、
今回のA/Bテストの結果は、『AパターンでもBパターンでもどちらを見せても、『達成』、『未達成』は変わらない』という仮設を否定することができないことになります。
(仮に3.841より大きい場合は、上記仮設を否定でき、『Bパターンのほうが、『達成』が多くなる』となります。)

まとめ

  • A/Bテストの結果を比率に直した表を信頼してはいけない。
  • 各種統計学的な手法を用いて、必ず有意差があることを立証すること。
  • 有意差の立証方法は、様々な手法があるが、手法とその概要は覚える。
  • 手法の計算式は、様々なツールがあるので覚えなくて良い。

おまけ: 簡単にカイ二乗値等を簡単に計算する

  • Excelを使う
    いっぱい落ちているのでそれを使う(ここでは解説しない)
  • R言語を使う(後述)

R言語を使う方法

インストールの仕方については、解説しません。
http://cse.niaes.affrc.go.jp/miwa/ja/R/setupR/index.html などを参考にするとよいかもしれない。

インストールができたものとして、Rコンソール上で以下のように入力すると、カイ二乗値、p値それぞれが簡単に計算できます。
matrix(c(490, 60, 580, 90))のところの数値を変化させることで、2 x 2の集計結果についてはカイ二乗値が計算できます。
なお、 2 x 3についてはmatrix(c(a1, a2, a3, b1, b2, b3))としてください。

> chisq.test(matrix(c(490, 60, 580, 90), ncol=2, byrow=T))

  Pearson's Chi-squared test with Yates' continuity correction

data:  matrix(c(490, 60, 580, 90), ncol = 2, byrow = T)
X-squared = 1.5577, df = 1, p-value = 0.212

なお、この結果について p-value = 0.212 となっている点から、
このA/Bテストの結果は 『A, Bは達成、未達成に差がない状況で、21.2%の確率でこのような誤差、偶然が生じる』ということがいえます。
通常統計学的に認められる範囲は、Rでのchisq.testの結果の値が0.05未満であれば、この仮説を否定出来ます。

また、もし今回の結果がそれぞれについて2倍のサンプル数が取得できた場合は以下のような結果となります。
p値が約7%であるので、微妙なラインだが、この程度でれば、Bパターンを採用しても良いと考えられます。
(ようするに今回カイ二乗検定を実施したが、サンプル数が少なかったのでカイ二乗検定では有意性を認めることができなかったといえます。)

> chisq.test(matrix(c(980, 120, 1160, 180), ncol=2, byrow=T))

  Pearson's Chi-squared test with Yates' continuity correction

data:  matrix(c(980, 120, 1160, 180), ncol = 2, byrow = T)
X-squared = 3.3379, df = 1, p-value = 0.0677

参考URL, 書籍