p値とはなにか

## p値とはなにか

### 概要
一言で言うと、意味のない数字(偶然に起きる)可能性がx% 

### コイン投げの実験結果
* 100回のコインを投げると、81%の確率で、44-56枚になる
* 19%の確率で、7%以上本来の確率(50%)から値が離れる

### 100枚投げて44枚が表になるときのp値は？
* 以下のようにbinom.testを実行する
* ``binom.test(c(44, 56))``
    * 44枚が表、56枚が裏という意味    
    * p値は、0.27。(ざっくり言うと、0.5でない確率が0.27)
    * 95%の信頼区間で、0.34-0.54になる

```
> binom.test(c(44, 56))

	Exact binomial test

data:  c(44, 56)
number of successes = 44, number of trials = 100, p-value = 0.2713
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.3408360 0.5428125
sample estimates:
probability of success 
                  0.44 
```

### binom.testの使い方
* 省略しないと、``binom.test(c(44, 56), p = 0.5, conf.level = 0.95)``となる
* 確率が0.55の時は、p値は3%になり、55%である確率は3%となる。

```
> binom.test(c(44, 56), p = 0.55)

	Exact binomial test

data:  c(44, 56)
number of successes = 44, number of trials = 100, p-value = 0.03427
alternative hypothesis: true probability of success is not equal to 0.55
95 percent confidence interval:
 0.3408360 0.5428125
sample estimates:
probability of success 
                  0.44 
```

* 信頼区間が80%の時は、37%-50.9%になる。

```
> binom.test(c(44, 56), conf.level = 0.8)

	Exact binomial test

data:  c(44, 56)
number of successes = 44, number of trials = 100, p-value = 0.2713
alternative hypothesis: true probability of success is not equal to 0.5
80 percent confidence interval:
 0.3727990 0.5090527
sample estimates:
probability of success 
                  0.44 
```

### A/Bテストの行い方
* A/Bテストを行った結果が偶然かどうかは以下のように``prop.test``を使ってp値を計算する。

```
prop.test(c(5000, 53), c(10000, 100))
=> p値 0.6195

prop.test(c(5000, 58), c(10000, 100))
=> p値 0.1358

prop.test(c(5000, 58), c(10000, 100))
=> p値 0.02216

prop.test(c(5000, 510), c(10000, 1000))
=> p値 0.5688

prop.test(c(5000, 520), c(10000, 1000))
=> p値 0.2408

prop.test(c(5000, 530), c(10000, 1000))
=> p値 0.07574
```
=> 厳密には、このp値は1つをコインを投げたときと、2つのコインをなげて比較すると違うので、実験結果(例えば、100回のコインを投げると、81%の確率で、44-56枚になる)と同じではないですが、だいたい数字は近い。

### 信頼区間をいくつに設定するのか

* 信頼区間をいくつに設定するのかによって判断が変わる
* 結果が改善しているかどうか、偶然改善したか、偶然改善してないか判断する必要がある
* 例)
    * Airbnb 5% http://nerds.airbnb.com/experiments-at-airbnb/ (http://wazanova.jp/items/1308)

=> Wantedlyでは、基本的には90%で見ているが、PVが多く実験しやすいページは95%。

### 練習: A/Bテストの検証をしてみてください


``` A
10万PVの画面で、AとBのボタンのテストをしました。

A 5.1万PV 5.5%
B 5万PV 5.7%

Bにすることで改善しました
```

``` B
AとB二つの画面で、応募ユーザの改善のA/Bテストをしよう
A 2万人 10.5%
B 2万人 10.0%
おお、Aの機能を追加することで、改善しました
```

``` C
10万PVの画面で、AとBのボタンのテストをしました。
Aは、click率は上がるけど、その後のコンバージョンは下がりそう。(応募数は増えるけど、企業からの返信率は下がりそう)
Bは、click率は低いけど、その後のコンバージョンは上がりそう。(募集のハードルは高いけど、いい人が応募してくれそう)

A 5万ユーザ 応募率 3% 返信率 50%
B 5万ユーザ 応募率 2.7% 返信率 55%

```

### 振り返り
* 結果が改善しているかどうか、偶然なのか判断する必要がある
* 信頼区間をいくつに設定するのかによって判断が変わる
* p値は、結論を出す前に、サンプル数を増やすことで、p値を低くすることができる。(待つとp値
は下がる)
* binom.testで信頼区間を調べる。prop.testでA/Bテストを行う

### 施策をする上でのA/Bテストの捉え方
* 対象のPV(人数)が少ない、コンバージョン率が低いときは、検証しにくい
* 実験対象のコンバージョンの影響範囲が分からないときも利用しにくい
* 深いコンバージョンの精度は非常に悪く、期間内に判断できないことも多いが、サービスを続ける上では大切になってくる
* A/Bテストすれば分かるということでもない。
    * 特に初期のリリースでは分からないことのほうが多い
    * A/Bテストで分からない改善に対してA/Bテストを行うことは無意味。よくなったかどうかも分からない。
* 改善するときは、A/Bテストで分かる改善を行うか、分からない場合は別の判断(デザイナー判断)で行う必要がある。
* PVが多い時は、A/Bテストより重要になる
* 10万人のユーザがいるときにできる精度と、1万人のユーザがいるときにできる精度と、1000人のユーザしかいないときの精度は全然違う。

### A/Bテストで重要なことまとめ
* 今取り組む問題はどのくらいの精度(コンバージョン)で改善しないといけないか把握する
    * PVがある画面はA/Bテストをするのがいい
    * PVが少ないのに、数字を見て、改善をしても意味がない。数字をだけでなく、ユーザのフィードバックや自分で改善を見つけることも重要。
    * 深いコンバージョンの判断の場合は、数字で判断できない問題もある。その場合は、数字以外の判断が必要で、判断をしないことがいいわけでもない
* p値を下げることと、判断を早くすることは両立できないときもある
    * 基本的には、正しく改善するのでなく、素早く改善するほうがよいことが多い

=> 施策を行う前にどのくらいのPVが必要か、どのくらいの改善が必要か考えよう


## 関連
* 偶然とはなにか。コインを投げてみよう http://qiita.com/reikubonaga/items/12329122772d8161439d
* p値とはなにか http://qiita.com/reikubonaga/items/c4684fcea0810441a955
* A/Bテストは完全ではない http://qiita.com/reikubonaga/items/6f12543aa2478a6ac3b4
* 乱数(モンテカルロ法)を使って確率を計算しよう http://qiita.com/reikubonaga/items/28ee2c2c8074b98b0b04