パラメータ設定
データ分析や統計検定を学ぶ過程で、多くの人が一度は立ち止まるのが「超幾何分布(Hypergeometric Distribution)」です。二項分布と名前や形が似ているため混同されがちですが、本質的な前提条件を理解すると、その役割と実用性の高さが鮮明に見えてきます。
品質管理での抜取検査、医療統計におけるフィッシャーの正確確率検定、さらにはゲームのガチャやくじ引きの確率計算に至るまで、実社会のあらゆる場面で超幾何分布の考え方が活用されています。基本概念から計算式、期待値・分散の導出、プログラミング言語での実装まで、迷いやすいポイントを体系的に整理しました。
📌 【この記事の重要ポイントまとめ】
- 要点1:超幾何分布は「非復元抽出(引いたものを戻さない)」を扱う離散型確率分布であり、復元抽出を前提とする二項分布と明確に区別される。
- 要点2:期待値は二項分布と同じ形($n \times \frac{M}{N}$)だが、分散には母集団の有限性を補正する「有限母集団修正」係数が掛かる。
- 要点3:母集団サイズがサンプル数に対して十分に大きい場合(抽出比率が小さい場合)は二項近似が可能であり、実務ではPython(scipy)やR言語で手軽に計算・検定が行える。
【直感でつかむ】超幾何分布とは?二項分布との決定的な違い「非復元抽出」
離散型確率分布の一覧を眺めると、ベルヌーイ分布、二項分布、幾何分布、ポアソン分布など様々な分布が並んでいます。その中で超幾何分布を際立たせている特徴は、「非復元抽出(ひふくげんちゅうしゅつ)」を前提としている点です。
二項分布では、コイン投げのように「試行ごとに成功確率が一定(独立試行)」であることを仮定します。箱から玉を引いて色を確認した後に毎回箱へ戻す「復元抽出」を行えば、何回引いても当たりの出る確率は変わりません。
対して超幾何分布は、「一度引いた要素を元に戻さない」サンプリングを扱います。引くたびに母集団の残数が減り、次に当たりを引く確率が刻一刻と変動していく状況を正確にモデル化する確率分布です。日常のくじ引きやカードゲームの手札配分、製品の抜き取り検査などは、まさにこの非復元抽出に該当します。
【具体例で即理解】くじ引きで学ぶ超幾何分布の確率質量関数と計算公式
超幾何分布の確率質量関数(Probability Mass Function: PMF)は、高校数学で習う「場合の数と確率」の組み合わせ記号(Combination)を使って極めてシンプルに表現できます。
母集団全体のサイズを $N$、そのうち特定の属性を持つ当たり(目的の事象)の総数を $M$ とします。この母集団から非復元抽出で $n$ 個のサンプルを取り出したとき、当たりがちょうど $k$ 個含まれる確率 $P(X = k)$ は以下の計算方法で求められます。
$$P(X = k) = \frac{\binom{M}{k} \binom{N - M}{n - k}}{\binom{N}{n}}$$
直感的な意味は次の通りです。分母は「全体 $N$ 個から $n$ 個を選ぶ全組み合わせの数」を表し、分子は「当たり $M$ 個から $k$ 個を選ぶ組み合わせ」と「ハズレ $N-M$ 個から残り $n-k$ 個を選ぶ組み合わせ」の積を示しています。
例えば、全10本のくじの中に当たりが3本あるとします。ここから戻さずに4本のくじを引いたとき、ちょうど当たりが2本含まれる確率は次のように計算します。
分母は $_{10}\mathrm{C}_4 = 210$ 通りです。分子は当たりの組み合わせ $_3\mathrm{C}_2 = 3$ 通りと、ハズレ7本から2本を引く組み合わせ $_7\mathrm{C}_2 = 21$ 通りの積で $3 \times 21 = 63$ 通りとなります。したがって確率は $63 / 210 = 0.30$(30%)と算出されます。
【数学的背景】超幾何分布の期待値・分散の導出プロセスを丁寧に紐解く
超幾何分布に従う確率変数 $X$ の期待値(平均)と分散は、公式として暗記するだけでなく導出の背景を押さえると記憶に定着しやすくなります。
母集団における当たりの割合を $p = \frac{M}{N}$ と置いたとき、期待値 $E[X]$ と分散 $V[X]$ は以下の通りです。
期待値: $E[X] = n \cdot \frac{M}{N} = np$
分散: $V[X] = n \cdot \frac{M}{N} \left(1 - \frac{M}{N}\right) \left(\frac{N - n}{N - 1}\right) = np(1 - p) \left(\frac{N - n}{N - 1}\right)$
期待値の導出には、各抽出における指示変数(Indicator Variable)の和として分解するアプローチが明快です。$i$ 回目に当たりを引く事象を $I_i$(当たりのとき1、ハズレのとき0)とすると、$X = \sum_{i=1}^n I_i$ です。非復元抽出であっても、事前情報がない段階での各回で当たりを引く周辺確率は一律で $P(I_i = 1) = \frac{M}{N}$ となるため、期待値の線形性から $E[X] = \sum_{i=1}^n E[I_i] = n \cdot \frac{M}{N}$ が自然に導かれます。
分散の式に現れる $\frac{N - n}{N - 1}$ は「有限母集団修正(Finite Population Correction: FPC)」と呼ばれる係数です。非復元抽出では、当たりを引けば残りの当たりが減るため、試行間に負の相関(共分散がマイナス)が生じます。その結果、復元抽出である二項分布の分散 $np(1-p)$ よりも値が必ず小さくなります。全数を抽出した場合($n = N$)、結果は確定してブレがゼロになるため、分散も $0$ に収束する性質が式からも確認できます。
【近似の境界線】二項近似が成立する条件とポアソン近似への展開
母集団のサイズ $N$ がサンプル数 $n$ に比べて極めて大きい場合、1回ごとに当たりを引いても母集団全体の比率構成はほとんど変化しません。そのため、非復元抽出であっても実質的に復元抽出とみなして二項分布 $B(n, p)$ で近似計算(二項近似)を行うことが認められています。
実務上の目安として、母集団に対するサンプル抽出比率が5%以下($n/N \le 0.05$)または10%以下($n/N \le 0.10$)の環境であれば、有限母集団修正係数 $\frac{N-n}{N-1}$ はほぼ $1$ に近付き、超幾何分布の計算結果と二項分布の計算結果の差異は無視できるほど小さくなります。
さらに、母集団サイズ $N$ とサンプルサイズ $n$ がともに大きく、当たり確率 $p = M/N$ が極めて小さい(稀な事象である)ケースでは、二項近似を経由してポアソン分布 $\mathrm{Poisson}(\lambda)$(パラメータ $\lambda = np$)へのポアソン近似へと繋がります。大規模な製品ロットからごくわずかに混入する不良品数を推定する現場などでは、計算負荷を抑えるための有力な手法として使い分けられています。
【データ分析の現場】フィッシャーの正確確率検定とA/Bテストへの実務応用
超幾何分布は理論上のトピックにとどまらず、仮説検定の現場で中核的な役割を果たしています。代表例が、分割表(クロス集計表)の独立性を検証する「フィッシャーの正確確率検定(Fisher's Exact Test)」です。
2×2分割表において、周辺度数(行の合計と列の合計)を固定した条件下で「特定のマス目が特定の値をとる確率」を求める数理モデルは、超幾何分布そのものです。サンプルサイズが小さいデータに対して通常のカイ二乗検定を適用すると近似精度が著しく低下しますが、超幾何分布に基づくフィッシャーの検定であれば、小標本であっても正確なp値を算出できます。
現代のデータ分析現場でも、サンプル数が十分に集まらない立ち上げ初期のWebマーケティングにおけるA/Bテストや、臨床試験における希少疾患の治療効果判定など、外れ値や小標本リスクを回避したい局面で欠かせない検定手法として定着しています。
【実践コード】Python(scipy)とR言語(dhyper)による計算実装
大規模な組み合わせ計算を電卓で処理するのは非現実的です。データサイエンスの現場では、PythonやR言語の統計パッケージを活用して瞬時に確率値を導出します。
各言語で引数の指定順序や名称に違いがあるため、定義の対応関係を正確に把握しておく必要があります。
Python(SciPy)による実装例:
SciPyの scipy.stats.hypergeom モジュールを使用します。引数は hypergeom(M, n, N) の形式で、それぞれ「母集団の総数」「母集団内の当たり数」「抽出サンプル数」を指定します。
from scipy.stats import hypergeom # 全体N=50個, うち当たりM=10個, 抽出サンプル数n=5個 M_total = 50 n_success = 10 N_sample = 5 # ちょうど2個の当たりを引く確率(PMF) prob_k2 = hypergeom.pmf(k=2, M=M_total, n=n_success, N=N_sample) print(f"P(X = 2): {prob_k2:.4f}") # 期待値と分散の取得 mean, var = hypergeom.stats(M=M_total, n=n_success, N=N_sample, moments='mv') print(f"期待値: {mean:.2f}, 分散: {var:.4f}") R言語による実装例:
R言語では組み込みの dhyper()(確率質量)、phyper()(累積確率)、rhyper()(乱数生成)関数が用意されています。Rの引数は (x, m, n, k) となっており、m が当たりの数、n がハズレの数(全体 - 当たり)、k が引く数となる点に注意が必要です。
# R言語での計算 # x: 当たり数(2), m: 当たり総数(10), n: ハズレ総数(40), k: 引く数(5) prob <- dhyper(x = 2, m = 10, n = 40, k = 5) cat("P(X = 2):", round(prob, 4), "\n") # 2個以下になる累積確率 cum_prob <- phyper(q = 2, m = 10, n = 40, k = 5) cat("P(X <= 2):", round(cum_prob, 4), "\n") 【超幾何分布】に関するよくある質問(FAQ)
Q1:超幾何分布と二項分布のどちらを使うべきか迷ったときの判断基準は?
A1:標本を抽出する際に「元に戻さない(非復元)」かつ「母集団全体に対する抽出割合が数%〜10%以上ある」場合は超幾何分布を選択します。母集団が何十万人と存在し、抽出するのが数百人程度であれば母集団比率がほぼ変わらないため、計算が平易な二項分布で代用しても実用上の誤差は生じません。
Q2:幾何分布や負の二項分布とは名前以外にも関連はありますか?
A2:名前に「幾何」と付きますが、超幾何分布と幾何分布は直接の派生関係ではありません。幾何分布は「成功するまでに何回失敗するか」という試行回数を扱う分布です。超幾何分布という名称は、級数展開した際の係数が数学の「超幾何級数(Hypergeometric Series)」の係数と一致することに由来しています。
Q3:なぜフィッシャーの正確確率検定ではカイ二乗検定ではなく超幾何分布を使うのですか?
A3:カイ二乗検定はサンプルサイズが大きいことを前提とした「漸近的な近似検定」であり、各セルの期待度数が小さい(一般に5未満)場合にはp値の誤差が大きくなります。超幾何分布を用いるフィッシャーの検定は組み合わせ数からダイレクトに確率を計算するため、標本数が少なくても誤差のない正確な検定結果が得られます。
まとめ:超幾何分布の構造を理解してデータ分析の解像度を引き上げる
超幾何分布は、有限の母集団から元に戻さずにサンプリングを行うという、現実世界でごく当たり前に発生する条件を数式化した確率分布です。
二項分布との相違点である「非復元抽出」の構造や、分散に現れる「有限母集団修正」の数理的意味を押さえておくことで、各種の統計検定やモデル選択の妥当性を自信を持って判断できるようになります。ツールの計算結果を読み解く際にも、背景にある分布の前提を意識して分析の精度を高めていきましょう。 (出典: 超 幾何 分布(Yahoo!ニュース))