ひとことで言うと#
ブートストラップ法は、手元のデータから復元抽出を何千回も繰り返すことで、統計量(平均・中央値・差分など)の分布を近似し、理論式なしで信頼区間を求める手法です。
用語の定義#
押さえておきたい用語
- 復元抽出(Sampling with Replacement):同じデータが複数回選ばれることを許す抽出方法。元データと同じサイズの「擬似標本」を生成する
- ブートストラップ標本(Bootstrap Sample):復元抽出で生成した1回分の擬似データセット。元データのうち約63.2%がユニークに含まれる
- ブートストラップ分布(Bootstrap Distribution):各ブートストラップ標本から算出した統計量を集めた分布。元の母集団の統計量分布を近似する
- パーセンタイル法(Percentile Method):ブートストラップ分布の2.5%点と97.5%点を95%信頼区間として採用する直感的な方法
- BCa法(Bias-Corrected and Accelerated):バイアスと歪みを補正した、パーセンタイル法より精度の高い信頼区間推定法
全体像#
元データ準備
n件の標本
→n件の標本
復元抽出×B回
B=1,000〜10,000
→B=1,000〜10,000
統計量を毎回計算
平均・差分・比率等
→平均・差分・比率等
分布から信頼区間
パーセンタイル or BCa
パーセンタイル or BCa
こんな悩みに効く#
- サンプルサイズが小さすぎて正規分布を仮定した信頼区間の計算に不安がある
- 中央値や90パーセンタイルなど、理論的な信頼区間の公式がない統計量の推定をしたい
- A/Bテストでコンバージョン率の差の信頼区間を出したいが、分布の仮定を置きたくない
基本の使い方#
推定したい統計量を決める
平均値、中央値、コンバージョン率の差、相関係数など、求めたい統計量を明確にします。ブートストラップ法はどんな統計量にも適用できるのが強みです。
復元抽出でブートストラップ標本を生成する
元データからn件を復元抽出し、ブートストラップ標本を1つ作ります。これをB回(通常1,000〜10,000回)繰り返し、B個の標本を生成します。計算コストに余裕があれば10,000回以上が安定します。
各標本から統計量を計算する
B個の各ブートストラップ標本に対して、ステップ1で決めた統計量を計算します。結果としてB個の統計量の値が得られ、これがブートストラップ分布を構成します。
信頼区間を算出する
パーセンタイル法では、ブートストラップ分布の2.5%点と97.5%点を95%信頼区間とします。より正確な推定が必要な場合はBCa法を使います。区間がゼロを含むかどうかで統計的有意性の判断材料にもなります。
具体例#
ECサイトのA/Bテスト結果検証
ECサイトがチェックアウト画面のデザイン変更をA/Bテストし、コントロール群(n=1,800)のCVR 3.2% に対してテスト群(n=1,900)のCVRが 3.9% だった。差の 0.7%ポイントが偶然かどうかを、ブートストラップ法(B=10,000回)で検証。CVR差のブートストラップ分布から95%信頼区間を [0.12%, 1.28%] と算出し、ゼロを含まないことから有意と判断。パーセンタイル法とBCa法の差は0.02ポイント以内で、結論は変わらなかった。この結果を根拠にデザイン変更を全ユーザーに展開し、月間売上が推定で約340万円増加した。
製薬企業の臨床データ分析
治験データ(被験者n=85)で新薬の効果指標の中央値を推定する必要があったが、データの分布が強い右裾を持ち正規分布を仮定できなかった。ブートストラップ法(B=5,000回)で中央値の95%信頼区間を [14.2, 19.8] と算出。正規近似で求めた信頼区間 [12.6, 21.4] と比較して区間幅が約30%狭く、より精度の高い推定となった。この結果は規制当局への申請資料に添付され、「分布の仮定に依存しない頑健な推定」として審査で評価を受けた。
物流企業の配送時間分析
宅配会社が首都圏の配送時間データ(月間45,000件)から、90パーセンタイル配送時間の信頼区間を顧客向けSLAの根拠として算出。90パーセンタイルには閉じた形の標準誤差公式がないため、ブートストラップ法(B=10,000回)を適用。95%信頼区間は [127分, 138分] となり、SLAを「150分以内」に設定すれば十分なマージンがあると判断できた。地域別にも同じ分析を行い、一部のエリアで90パーセンタイルが165分と大きく跳ねていることを特定。該当エリアの配送ルートを見直し、全体の90パーセンタイルが132分から118分に改善された。
やりがちな失敗パターン#
| 失敗 | 原因 | 対策 |
|---|---|---|
| ブートストラップ回数が少なく結果が不安定 | B=100程度で「十分だろう」と判断した | 最低B=1,000、精度が重要な場面ではB=10,000以上に設定する |
| 信頼区間がおかしい値になる | 元データに外れ値が含まれ、復元抽出で外れ値が複数回選ばれるケースが生じる | 外れ値の影響を受けにくい統計量(中央値、トリム平均)を使うか、事前にデータクリーニングする |
| 独立性の仮定を満たしていないデータに適用 | 時系列データにそのままブートストラップを適用した | 時系列にはブロックブートストラップ法を使い、自己相関構造を保持する |
| 標本サイズが極端に小さい | n=10未満のデータでブートストラップを実行しても元のバイアスを解消できない | ブートストラップは元データの代表性が前提。n<20程度では結果の解釈に十分な注意を払う |
まとめ#
ブートストラップ法の最大の利点は「分布の仮定なしに信頼区間を求められる」点です。中央値やパーセンタイルなど理論式のない統計量でも、復元抽出を繰り返すだけで分布を近似できます。実装もシンプルで、Pythonなら数行で書けるため、A/Bテストの結果検証や小標本データの分析で特に威力を発揮します。ただし「元データが母集団を代表している」という前提は外せないため、サンプリングの偏りには注意が必要です。