過去二回にわたって、
と綴ってきた、CTR, CVR の区間推定をするお話の総集編的なエントリです。
今回は commmons-math3 を使って、各区間推定方法における実際のカバレッジを測定するシミュレータを作ってみました。あわせて測定結果より、それぞれの方法の特性を確認していきます。
まずは復習から
「二項比率の区間推定 (英語 Wikipedia)」は、統計的に独立・有限回で、各々の試行において「成功」か「失敗」のどちらかの結果が得られる問題の、「成功が発生する確率 $p$ (二項比率)」の信頼区間を求めることに相当します。
これをクリック率 (CTR) の区間推定に置き換えると、「成功」はすなわちクリックされたこと、「失敗」はクリックされなかったことに相当します。そして「成功が発生する確率」というのは、クリック回数 / インプレッション回数、つまりは CTR となります。
この「二項比率の区間推定」をする方法はいくつかあって、先の英語 Wikipedia にも記載されている方法として
- Wald confidence interval
- Clopper-Pearson (or 'Exact') confidence interval
- Wilson (or 'Score') confidence interval
- Adjusted Wald confidence interval / Agresti-Coull confidence interval
などがあります。ただそれぞれ、論文で指摘されているとおりの特徴(というよりも欠点)があって、サンプルサイズの大きさや $p$ の値次第で実際のカバレッジが想定外の値になってしまう、という状況が起こりえます。
そのため、自身がとりあつかっている CTR や CVR のインプレッション数、クリック数、コンバージョン数に応じて、これらのいずれかをうまく使い分ける必要がある… と考えたのが、今回の一連のエントリを書き始めたきっかけでした。
シミュレーションしてみる
それではそろそろシミュレーションをしてみて、各区間推定方法の特性を実際に確認してみましょう。
シミュレーション内容
シミュレーションの内容は次のとおりです。
- 次のサンプルサイズおよび真の二項比率 $p$ のすべての組み合わせごとに、1,000,000 回 の試行をします
- p : 10% から 1% までの 1 ポイント刻みの値、および 1% から 0.1% までの 0.1 ポイント刻みの値
- サンプルサイズ : 100 から 1,000 までの 100 刻みの値、および 1,000 から 10,000 までの 1,000 刻みの値
- 信頼度を 95% としたときのカバレッジを測定します
- このカバレッジが大きすぎず小さすぎず、 95% の値により近いことが望ましい結果となります
- 1,000,000 回のサンプリングのうち、求められた信頼区間に $p$ の値が含まれている割合がカバレッジとなります
- 精度面の検証以外にも、処理時間の測定をして評価をします
プログラム
シミュレーションのプログラムは次のリンク先になります。
komiya-atsushi/binomial-proportion-confidence-interval
結果と評価
測定結果は Google スプレッドシート Comparison of Binomial proportion confidence interval にまとめました。
なお、以下の精度面の評価では Wald confidence interval の結果を省いています (Wald は評価するまでもなく突出して精度が悪く、グラフに含めると見辛くなってしまうため)。
サンプルサイズを変化させたとき
まずはサンプルサイズの大きさを変化させたときの結果に着目してみます。
- サンプルサイズを大きくすれば、いずれも 95% の信頼度に近いカバレッジが得られる
- カバレッジのぶれもサンプルサイズが増えるごとに落ち着く
- 全体的なカバレッジの傾向は、Clopper-Pearson > Agresti-Coull > Wilson となる
- Clopper-Pearson のカバレッジが一番広く、95% を下回ることはまれ
- Wilson は常に一番狭いカバレッジとなる
- Agresti-Coull は、サンプルサイズが小さいときは Clopper-Pearson のように広いカバレッジをとり、サンプルサイズが増えるに従って Wilson のカバレッジに近づく
p を変化させたとき
次に、二項比率 $p$ を変化させたときの結果を見てみます。
- サンプルサイズがそこそこある状態であれば、 $p$ が大きくなるにつれていずれも 95% の信頼度に近づいていく
- こちらも、カバレッジのぶれは $p$ が大きくなることで落ち着く傾向となる
- 全体的なカバレッジの傾向は、Clopper-Pearson > Agresti-Coull > Wilson となる
- これはサンプルサイズを変化させたときと同じ傾向である
- サンプルサイズあまりない状態で $p$ が小さい場合、Wilson は極端に狭いカバレッジ (90% 前後) となることがある
- wilson score のシートを参照
計算時間
最後に、今回のシミュレーションをするのに要した時間を、計算方法ごとにグラフにしてみます。
- Wilson と Agresti-Coull はどちらも大差なし
- Clopper-Pearson は他に比べて遅くなりがち
- 他より複雑な計算が必要なため
- サンプルサイズに比例して実行時間がかかってしまうのは、利用したライブラリ (commons-math3) の実装に起因している?
- Normal Approximation (Wald) は、区間の幅が 0 になってしまうようなケースの計算時間が含まれていないため、Wilson, Agresti-Coull よりも計算時間が不当に短くなっている
まとめ
計算方法それぞれの特徴
論文を読んだり実際にシミュレーションをしてみて、それぞれの計算方法の特性が明らかになったので表にまとめてみます。
Method | 実装が容易 | 区間の幅 | $p$ の偏り | 区間の上限/下限 |
---|---|---|---|---|
Wald | ◎ | × (*1) | × (*3) | × (*4) |
Clopper-Pearson / exact | × | △ (*2) | - | - |
Winson / score | × | - | × (*3) | - |
Agresti-Coull / Adjusted Wald | ◯ | - | - | × (*4) |
- *1 : 狭くなりがち
- *2 : 広くなりがち
- *3 : 狭くなる
- *4 : 下限が 0 を下回る / 上限が 1 を超える
結論
元々の目的であるクリック率やコンバージョン率の区間推定に立ち返って、今回の調査・シミュレーション結果を見てみると、
- Wald は欠点が多すぎてクリック率などの区間推定には適していない
- クリック率のように、$p$ が極端に小さい値になりうることを考えると、Winson を利用するのは注意が必要
- サンプルサイズが十分でない場合は使わない方がいい
- 適切な幅の区間推定をする上では、Clopper-Pearson もしくは Agresti-Coull がよさそう
- Clopper-Pearson は、意図して信頼区間を保守的に (慎重に) 広くとりたい場合に向いている
- Agresti-Coull は下限が 0 より小さくなったり上限が 1 より大きくなったりする点に注意すれば (計算は楽だし) 使い勝手がいい
と言えることでしょう。