ABテストを検定する

ABテストを検定する方法メモ。ついでに、検定が必要かどうか判断する方法もメモ。



testify
この画像は学びが見える無料学習サイトShareWis様のサイトから引用させていただきました。


検定とは


利用者にとっての意味だけを割り切って考えるなら、検定とは、「得られた結果が偶然なのか、そうじゃないのか」を判断するためのツールです。


ただ、何でもかんでも検定する必要はなくて、得られた結果に有意差があるかどうか知るだけなら、検定が必要な場合と検定しなくてもなんとかなる場合があります。


この記事では、ABテストを検定する方法と、どうすれば検定が必要かどうかぱっと見で分かるようになるのか、を書いていきます。



標本数が少ないABテストは検定で有意差を判断する


標本数が少ない時は、有意差があるのかを知るために検定が必要です。下記の具体例で計算方法を示します。


WebのABテストを行った結果、Aは15クリック、Bは10クリックだった。本当に差があるのかを検定で確かめたい


この結果に有意差があるかを知るには、χ^2検定を使います。χ^2検定は以下の式で簡単に手計算できます。


χ^2 = ( (期待値 - 実現値)^2 / 期待値 ) の総和、このχ^2の値は、自由度1のχ^2分布に従う


上記のABテストの例でχ^2値を計算してみます。


χ^2 = ( (期待値 - 実現値)^2 / 期待値 ) の総和

= (12.5 - 15)^2 / 12.5 + (12.5 - 10)^2 / 12.5

= 6.25 / 12.5 + 6.25 / 12.5

= 1.0


χ^2分布表を見ると、自由度1の5%点は3.84です。1.0 < 3.84となり、偶然この結果になる確率が5%以上あるので、「今回のABテストの結果に差はない」ということになります。


この検定結果を言い直すと、「今回はAの方が良い結果になりました。けど、もうちょっと期間を長くすると、逆にBの方が良い結果になる可能性も充分にあります」ということです。



標本数が多いABテストは検定しなくても有意差がある、ことが多い


標本数が多い場合は、誤解を恐れずに割り切って言うなら、検定をする必要はないです。得られた数値の差が、そのままAとBの優劣の差になります。


今回の場合も一応計算してみましょう。


WebのABテストを行った結果、Aは15万クリック、Bは10万クリックだった。本当に差があるのかを検定で確かめたい


前回と同じように計算してみます。


χ^2 = ( (期待値 - 実現値)^2 / 期待値 ) の総和

= (125,000 - 150,000)^2 / 125,000 + (125,000 - 100,000)^2 / 125,000

= 625,000,000 / 125,000 + 625,000,000 / 125,000

= 10,000


χ^2分布表を見ると、自由度1の5%点は3.84です。10,000 > 3.84となり、偶然この結果になる確率が5%以下なので、「今回のABテストの結果に差はある」ということになります。


今回は明らかに差がある例を取り上げましたが、標本数の多いABテストはだいたい検定をするまでもなく、得られた数値の差がそのままABテストの優劣の差になります。


ABテスト = 検定するまで結果を鵜呑みにできない…!みたいな恐怖心を持つ方もいるかもですが、標本数が多いならそんなにシビアに考える必要もないのでご安心ください(^^)


今までは、「標本数が多ければ検定しなくても有意差があることが分かる(ことが多い)」と書きましたが、何故そういう判断ができるのか、を次に説明します。



検定が必要なのか不必要なのかを判断する方法


検定とは、ざっくり言うと、「現に起こった出来事が、どれくらい起こりやすいものだったのかを計算し、それが5%以下なら偶然ではないとみなせる」という考えに基づいています。


先ほどでてきた、「Aが15クリック、Bが10クリック」には差がないと判断されました。これを別の言い方で表現すると、「さらにABテストを続けると、逆に、Aが10クリック、Bが15クリックになるかもしれない」ということになります。


要は、「試した回数が少なすぎて、偶然そうなったのかどうか判断できない」というわけです。


逆に言うと、「試した回数が十分多いなら、検定をするまでもなく、得られた数値の差が優劣の差です」と言えることになります。


コイントスを例に挙げると、表と裏の出る確率がそれぞれ50%だったとしても、10回程度試しただけでは、8回表がでることも充分にあり得ます。ABテストで得られた数字に差があるのに、有意差がないという検定結果が出るのは、まさにこういう場合なわけです。


こういう理由により、標本数が多い場合は、検定をするまでもなく得られた数値の優劣に有意差があるとみなせることになります。



上記の説明は、試した回数が少ない場合についての説明でした。試した回数が多いと話が少し変わってきます。試した回数が多くなるほど、理論上の確率と得られた数字がすごく近いものになるためです。(中心極限定理により)


例えばコイントスだと、10万回コインを投げれば、だいたい5万回くらいは表(または裏)がでます。表4万回、裏6万回みたいな偏りが起きる確率は5%どころではなく低いでしょう。


こういう理由により、標本数が少ない場合は有意差があるのか知るために検定が必要で、標本数が多い場合は検定しなくても有意差があるかどうかはっきりするわけです。



全く同じ比率の結果であっても、標本数が多くなると違う結果になる


ここまでの説明を踏まえた上で、ABテストの例題をもう一度見てみます。


WebのABテストを行った結果、Aは15クリック、Bは10クリックだった。本当に差があるのかを検定で確かめたい


WebのABテストを行った結果、Aは15万クリック、Bは10万クリックだった。本当に差があるのかを検定で確かめたい


ここで注意してもらいたいのは、両方の例題において、AとBの比率は同じ(3対2)である点です。比率は同じなのに、検定をすると、前者は有意差なし、後者は有意差あり、という結果になります。


つまりこれは、「検定の結果を判断する時、得られた結果が偏っているどうかというよりは、標本数がどれだけ多いかが重要になる」ということです。


「ABテストってどのくらいの期間やればいの?」という疑問を持つ人は多いと思いますが、このことが分かっていると、「得られたサンプル数が一定数たまるまでやればいいんだよ」と答えられることになります。


「一定数ってどれくらいなの?」っていう疑問も浮かんでくるとは思いますが、この答えは誰にも分かりません…(^^) 現実的には、1週間やって差がないならもう打ち切っていいんじゃないかと思います。



Rでχ^2検定してみる


今までは手計算が主でしたが、実際に使うときはRを使うとぱぱっと計算できます。Rに以下の一行を入力するだけでOKです。


> binom.test(15, 25, p = 0.5, alternative = "two.sided", conf.level = 0.95)

#
# 結果は下記の通り。
#
        Exact binomial test

data:  10 and 25
number of successes = 10, number of trials = 25, p-value = 0.4244
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.2112548 0.6133465
sample estimates:
probability of success 
                   0.4 

p-value = 0.4244となっており、0.4244 > 0.05なので、この結果に有意差はないと言えます。


※上記の検定は正確には二項検定なんですが、結局はχ^2検定と同じことをやっていることになります。



エクセルで二項検定してみる


エクセルでは、二項検定を一発で行う方法はないようです…(^^)


今回のABテストの例は、要はコイントスの問題と同じなので、起きる確率を実際に計算して正確確率検定を行えば有意差があるのかどうか分かります。



よくありそうな質問集


よくありそうな質問とその答えも書いてみました。


どれくらいの期間ABテストを行う必要があるの?

期間ではなく標本数によって決まるので、一概には言えないのですが、現実的には一週間やって有意差がでないんならやめてもいい気がします。


どれくらいの標本数があれば検定が不要になるの?

検定が不要になることはないです。明らかに差がありそうに見えても、とりあえず検定してみるのが無難です。Rなら一行書くだけで終わります。


AとBのどっちがいいのかを検定で判断できるの?

検定では、「有意差があるかどうか」しか判断できません。AとBのどっちがよいかは、有意差があると判断できた上で、「数値の大きい方が良い」と判断するしかないです。


曜日ごとに、Aが良い場合とBが良い場合があります。こういう時はどうすればいいの?

ちゃんとやるなら、AとBの曜日合算平均値を計算して、標本平均の差の検定とかをやることになるんですが、現実的にはもっとざっくりやってもいいと思います(^^)


もうちょっと長い期間やると、有意性が上がるの?

有意性(有意差のこと?)は上がった下がったを比較するものではないです。有意差があると検定で判断できたのであれば、後は得られた数値がそのままAとBの良し悪しの差になります。


ABテストではなく、ABCテストになるとどうなるの?

パターンが2パターンより多くなると多変量解析とかを使うことになります。手計算するなら、けっこうややこしい計算が必要になるので、まずは2パターンずつ試していくのがいいと思います。
ちなみに、OptimizelyとかGoogle Analyticsを使えば、こういう多変量解析解析も一緒にやってくれます。(たしか)


複数のABテストを同時にやるとどうなるの?

これまた多変量解析の出番になるのですが、上の質問の答えと同じです。


χ^2検定って二項検定とどう違うの?

微妙に違うんですが、今回のような単純なABテストを行うのであれば同じと思って大丈夫です。



参考リンク


二項検定 binomial test

二項検定とχ^2検定のざっくりした説明が分かりやすかったです。


ABテストのための有意性検定

A/Bテストの結果をどのように解釈するか?

ABテストとその結果の解釈について、私とは違った視点で解説しています。読み比べるとより理解が深まると思います。


Effective A/B Testing

ABテストについての詳しい資料。本記事では全く触れてないですが有用です。



参考書籍


この二冊を読んでこの記事を書きました。必要十分なことしか書いてないのでむっちゃおすすめです!(^^)



著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール