読者です 読者をやめる 読者になる 読者になる

仮説検証とサンプルサイズの基礎

パートナーアライアンス部 森田です。有料会員の獲得施策や、それに関わるサービス内動線の最適化を担当しています。

記事の対象

  • 仮説検証を通じてサービス改善をしたいと思っている人
  • 仮説検証はしているものの「どれくらいのデータを集めたら良いか」分からない人

はじめに

仮説検証とは「仮説を立て、それを証明するためのデータを集め、真偽を確かめること」です。今回は仮説検証を行う際のステップと、その検証に必要なサンプルサイズの考え方を説明します。サンプルサイズの話のみ関心があるかたは、前半を飛ばしてください。

仮説検証のつくりかた

1. 仮説をたてる

仮説をたてます。知りたいことを言い切る形にすれば仮説になります。

たとえば「クックパッドの利用者が有料会員になるきっかけは文字ではなく美味しそうな料理の写真である」や「クックパッド利用者は自分の閲覧したレシピを後から見返したい」などです。ただし、後者は仮説としては少し不十分です。その理由は次に説明します。

2. 施策/KPIを考える

仮説は根拠の程度はあれど基本的には思い込みです。その真偽を確かめるために何のデータを集める必要があるか考えます。ここが一番の難所です。

「ユーザは自分の閲覧したレシピを後から見返したい」という仮説をの真偽はどのようにすれば分かるのでしょうか。施策としては単純に閲覧履歴の提供が思いつきます。しかし適切なKPIを設定しようとすると基準がなくて悩みます。

このようなときは「知りたいことを」をもう少し具体的にします。割合を決めたり、何かと比較したりします。例えば「全ユーザの10%がレシピを後から見直したいと思っている」や「閲覧履歴を利用したユーザはそれ以外のユーザに比べて利用時間が20%伸びる」などです。悩んだ場合は次に述べる「仮説検証後のアクションを決める」と合わせて考えることをおすすめします。

3. 仮説検証後のアクションを決める

実際にデータを集める「前」に、データを集めた後のアクションを決めます。このステップにより先の試作/KPIが十分かわかります。「こういう結果ならばこうする」というのが決められないようであれば、施策/KPIは不十分なのでやりなおしです。

サービスの改善のように、指標となるKPIの意味に主観が含まれる場合はとくに意識します。事後の解釈ではサンクコストによるバイアスがかかり、冷静な判断が難しくなります。たとえば「閲覧履歴の利用者は全体の5%」という結果がどのような意味を持つか、検証後に考えるようではいけません。

4. 対象を決める

施策もKPIも決まりました。次にその対象者を決めます。

最終的なサービスへの全体影響を知りたい場合は細かいことを考えず全体を分割してABテストなどでデータを集めます。

一方で、何かしらの価値の有無を確認したい場合、まずは「このユーザの行動が変わらないのであれば、価値自体が無いのだろう」と考える理想的なユーザを施策の対象とすることをおすすめします。なぜならば全体で価値の有無を検証をしてしまうと影響が希釈されて計測が難しくなることが多いためです。

5. サンプルサイズ(計測期間)を計算する

施策もKPIも対象も決まりました。あとは必要なサンプルサイズを計算するだけです。タイムイズマネー、時間は有限で貴重です。PDCAを回すためにも行き当たりばったりの計測期間ではいけません。


サンプルサイズの決め方

ここからはサンプルサイズの決め方を説明します。

私が業務で行う仮説検証はほぼ全て、ABテストと仮説検定*1という考えのもとで行います。そして、その際のKPIとしては「入会する/しない」や「利用する/しない」のような、単純な1,0を好みます。そのためここからは

  • A「CVR10%の現ランディングページ」
  • B「CVR15%を期待する新ランディングページ(以下LP)」

という2つのページを「BはAよりも数値が5%高いだろう」という仮説のもとABテストし、その結果を判断するのに必要なサンプルサイズnを、信頼区間の考えをもとに説明したいと思います。なおCVRとはコンバージョンレートの略で、この場合接触者あたりの入会率を意味します。

答えを先に

この先の説明は少し長くなるため、今回必要なサンプルサイズnとはどのようなものかをまずは文章で示します。ここから先の説明は以下の文章に書かれていることを噛み砕いて説明した上でnを求めるものです。

確率p1と確率p2にX以上の差があるならばn個のサンプルサイズで明確な差がでるだろう。もし差が出ないのであればX以上の差は無いだろう*2

サンプルサイズを決める二つの要素

今回のABテストに必要なサンプルサイズは「二つの平均値」と「必要な確度」できまります。そのためまずは「二つの平均値」と「必要な確度」がそれぞれ何を意味するかを説明します。続いて予備知識として「二項分布」の概念を説明をした後、「必要な確度」を分解して現れる「αとβ」を説明し、最後にサンプルサイズを計算します。

「二つの平均値」とは何か

今回で言えば10%と15%です。サンプルサイズの計算にはこの二つの値が必要です。理由については少し先の「β」の説明で述べます。

「必要な確度」とはなにか

確度とは下記の二つの確からしさ

(1) AとBに差がない

(2) AとBに差がある

その上で、(1)であるにもかかわらず「差がある」とすることを「第1種の誤り」といい、その確率をαといいます*3

そして(2)であるにもかかわらず「差がない」とすることを「第2種の誤り」といい、確率をβといいます。言い換えるとαは偽陽性の確率であり、βは偽陰性の確率です。 つまりサンプルサイズを決める要素の一つの「確度」とはαとβの二つであり、「必要な確度」とはαとβに設定する値のことです。

「AとBに差がない」とは何か

「AとBに差がない」とは、正確には「BはAで無いとは言えない」を意味します。回りくどいのですが、これには意味があります。これはいくらデータを集めても「完全に差がない」と言い切れません。そのため何かの差を判断する際にはまず、「BはAと等しいだろう」という前提をもったうえで、データを集め「Bのデータを見る限り、確率的にAと等しい可能性が十分にある」状態ならば、それをもって「差がない」と結論します。いいかえると、「Bの結果がAであるにしては逸脱している」かどうかで差の有無を結論するわけです。

このような手法を「仮説検定」と言います。ここより先に続く説明は、この「仮説検定」という考えに基づき差の有無を結論します。「仮説検定」についてより詳しく知りたい方は「仮説検定 - Wikipedia」を読んでください。

二項分布

この後に続く「αとβ」の説明のために、予備知識として二項分布という概念を説明をします。二項分布を知っている人は飛ばしてください。

堅苦しい説明をすると、二項分布とは

確率pで成功する行為をn回施行した場合に、成功数がいくつになるかを表した分布

です。

たとえば、裏表がともに50%の確率で出るコインを100回投げた場合、表が出る数はぴったり50になるとは限りません。むしろ出るほうが稀です。では何回が何%の確率で出現するのでしょうか。それを表したものが下の図であり、二項分布です。

f:id:idwtstwof:20160923221813p:plain

縦軸が確率、横軸が表の数になり、面積を合計すると1(=100%)になります。これをみると平均を50として、だいたいが40−60の範囲に収まることがわかります。

同じ考えで、「入会する/しない」 をそれぞれ1と0で表し、入会する確率をpとした場合も、二項分布で表すことができます。下の図は200人(n)が入会率10%(p)のLPに接触したさいに、最終的な入会数がどのようにばらつくかを示しています。実装の都合上曲線になっていますが、実際は上の図のように階段状に分布しています。また、スライドを移動することでnを変更できるようにしてあるので、スライドをさせて分布がどのように変化するか確かめてみてください。iPhoneではスライドが正しく動きません。ただし、tapで移動させる事はできるようです。なお、赤く塗りつぶされた部分の説明は後ほどするため、気にしないでください。

n:

αとβ

ここからはαとβについて詳しく説明します。復習として、ぞれぞれの意味はこのようなものでした。

  • αとは「真実として差がないにも関わらず、差があると結論する」偽陽性の確率
  • βとは「真実として差があるにも関わらず、差がないと結論する」偽陰性の確率
α(偽陽性の確率)

αを入会数に当てはめて考えます。

200人がCVR10%の現LPにが接触した場合の入会数は20人を中心にばらつきます。そして面積の(だいたい)95%が12人から28人の間におさまることが二項分布により示されています。この12−28の領域を「95%信頼区間」と呼びます。これは二つ目の図の赤で塗りつぶされていない部分に相当します。それはつまり赤い部分の面積は5%ということになります。

Bの入会数を計測し、その結果がこの赤い部分に該当する場合は「差がある」と結論すると決めたならば、それは「αを5%に設定した」事を意味します。

もしもBの真実のCVRが期待してたような15%でなくAと同様の10%である場合、Bの計測後の入会数は5%の確率で赤い部分になるため、その時は「真実として差がないにも関わらず、差があると結論する」ことになり、偽陽性の確率=α=5%となります。

なお、決めたと表現したように、αを何%するかは恣意的です。赤い面積を小さく設定すれば偽陽性の確率は減りますが、その分、仮に本当に差がある場合も見逃しやすくなります。一般的にはαを1%、5%、10%することが多いです。

β(偽陰性の確率)

続いてβの説明をします

αは一つの分布で完結する話でした。というのはαは何か具体的なものと比較して考える問題ではないからです。それに対してβは本当は存在する差を見逃してしまう確率であり、二つの分布が必要です。今回でいえばCVR10%(A)とCVR15%(B)の二つです。

まず先ほど図に、CVR15%の分布をオレンジの線で加えます。また、入会数を入会率に置き換えた分布も合わせて示します*4。灰色の部分についてはすぐに説明するので気にしないでください。とはいえ察しの良い方のために言いますと、この灰色の部分がβです。

n:

復習になりますがβとは「真実として差があるにもかかわらず、差がないと結論する」偽陰性の確率です。今回の例にあてはめると「Bの真実のCVRは15%にも関わらず、200人が接触した結果の入会数をみて、Aと差がないと誤って結論する」確率です。この時に、何をもって「Aと差がない」とするかは先に述べたαで決まります。つまりβはαによって変わります*5

成功件数分布の灰色の部分は「CVR10%の時に十分発生しうる人数と、CVR15%における発生割合」を示しています。その割合(=確率)は右の山全体に対して39%となり、この39%がβです。ちなみに、

βが39%とはどういうことかというと「Bの真実のCVRがに15%の場合、200人のサンプルサイズでは39%の確率で『BはA(10%)と差がない』と結論する」事を意味します*6

しかしながら本当に差があるにも関わらず、39%の確率で差がないとしてしまうのであれば「(1) AとBに差がない」を十分な確度で結論出来ているとは言えません。ではこのβを5%にまで減らすにはどのようにしたらいいでしょうか。もしまだ試していなければ最後の図のスライドを動かしてn(サンプルサイズ)の値を増やしてみてください。するとnの増加に伴い、成功確率分布の山が鋭角になり、結果として灰色の面積が減っていくことがわかります。これはつまりβを小さくするにはnを増やせば良いわけです*7

ちなみに、図を見るとわかるように、βは二つの分布の山の距離(平均値の差)により変化します。Bが15%でなく30%であれば山の距離は離れ、βの値も変化します。つまり適切な「サンプルサイズ」を求めるには「二つの平均値」を事前に決める必要があります。

ここまでの話を整理するとこのようになります。

α=恣意的な確率 β=f(α, 二つの平均値, サンプルサイズ)

このことからも、適切なβを求めるには、残された変数であるサンプルサイズを変化させれば良いことがわかります。

サンプルサイズの計算

今までの話を元に、αとβがともに5%となるようなnを計算します。考え方としては、Aの右側2.5%とBの左側5%の数値が一致するようなnを求めます。そうすれば過不足のない、必要十分なサンプルサイズを求めることができます*8

計算には二項分布の正規分布への近似を利用しますが、説明の範囲外のため詳しくは触れません。気になる方は先に紹介した「 二項分布 - Wikipedia」を読んでください。計算のためのPythonコードは以下のようになります。

import sympy as sp
p = 0.1
diff = 0.5
n, p, diff = sp.symbols("n p diff")
a_mean = n * p
a_var = (a_mean(1 - p))
a_sd = sp.sqrt(a_var)
b_p = p + p * diff
b_mean = n * b_p
b_var = (b_mean(1 - b_p))
b_sd = sp.sqrt(b_var)
a_right = (a_mean + 1.96 * a_sd)
b_left = (b_mean - 1.65 * b_sd)
param = [(p, p), (diff, diff)]

print(sp.solve((sp.Eq(a_right.subs(param), b_left.subs(param))), _n)[1]) => 554.289654454896

これにより、555人という結果が得られました。この人数を先程の図に設定し、いい塩梅であることを確認してみてください。

まとめ

前半は仮説検証のつくりかたを、後半はその際に必要なサンプルサイズの考えかたを説明しました。正しいサンプルサイズを伴い計測をすることは大事ですが、その前提となる「何のために何を計測するか」は更に大事で、難しい問題です。しかし、もしそれを決めることが出来たならば、少しでも正しく計測し、判断しなければいけません。確率的にたまたま数字が改善しているからといって満足せず、十分なサンプルサイズを元に結論する必要があります。

なお、私自身の統計や検定に対する理解不足から説明に間違いがあるかもしれません。その際はご指摘いただけたら助かります。

参考書籍

私が仮説検証に取り組み始めた当初、確率と統計に関して全くの無知でした。数学の知識も乏しく、参考書を読んでもなかなか理解できません。そんな時に出会った「入門統計学」と「伝えるための心理統計」の二冊は、混乱しがちな所を一から丁寧に解説しており、非常に助かりました。もし統計を一から学ぼうという方におすすめします。また、今回の説明にない「平均値の検定」などを行う際のサンプルサイズに関しては、永田靖さんの「サンプルサイズの決め方」で学ぶ事ができます。

入門 統計学 −検定から多変量解析・実験計画法まで− - 栗原 伸一

https://www.amazon.co.jp/dp/4274068552/

伝えるための心理統計: 効果量・信頼区間・検定力 - 大久保街亜, 岡田謙介

https://www.amazon.co.jp/dp/4326250720/

サンプルサイズの決め方 - 永田 靖

https://www.amazon.co.jp/dp/4254126654/

*1:紛らわしくて申し訳ありませんが、仮説検証と仮説検定を区別して説明しています

*2:ただしX未満の差の有無については依然として情報不足であり、また差が出たからと言ってXの差がある事を意味しません

*3:今回の説明では触れていませんが、p値を利用した帰無仮説の棄却については基準値の誤りに注意してください。Alex Reinhartさんの「The p value and the base rate fallacy」(西原史暁さんが日本語に翻訳されています)が非常にわかりやすく、混乱するたびに読み返させていただいています。 http://www.statisticsdonewrong.com/p-value.html http://id.fnshr.info/2014/12/17/stats-done-wrong-05/

*4:二項分布における確率の信頼区間の計算方法を詳しく知りたい方は、Wikipediaの「 Binomial proportion confidence interval - Wikipedia, the free encyclopedia」を御覧ください

*5:αが小さいほどβは大きくなります

*6:1-β(1-0.39)=61%を検出力(power)といいます。

*7:鋭角になるということは、サンプル数の増加により、得られる結果が本来の値に近づく確率が増す事を意味しているのですが、これを大数の法則と言います

*8:「なぜAは2.5%でBは5%なのか。Aも5%じゃないのか」と不思議に思うかもしれませんが、これは両側検定という考えをもとにαを設定している事に関係します。今回の説明の範囲外のため、気になる方は「両側検定」や「片側検定」といったキーワードで調べてみてください

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('http://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/