🔖 キーワード索引
この用語と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。
#数学基礎 #組合せ #二項係数 #場合の数 #C(n,k)
組合せに関する用語を 数え方の種類・記号・公式・応用 別に索引化します。「順番を区別するか」「同じものを何度選べるか」の 2 点で分類すると、公式を丸暗記せずに選べます。
カテゴリ キーワード(日本語) キーワード(英語)
数え方の種類 順列(並べる)、 組合せ(選ぶ)、 重複順列、 重複組合せ、 円順列 permutation, combination, repeated permutation, multiset combination, circular permutation
記号 nCk、 二項係数、 nPk、 n!(階乗)、 nHk(重複組合せ) nCk, binomial coefficient, nPk, factorial, nHk
基本公式 nCk = n! / (k!(n−k)!)、 パスカルの規則、 対称性 nCk = nC(n−k)、 二項定理 Pascal rule, symmetry, binomial theorem
図で覚える パスカルの三角形、 格子路の数え上げ、 樹形図、 玉と仕切り(重複組合せ) Pascal triangle, lattice path, tree diagram, stars and bars
数え上げの道具 包除原理、 鳩の巣原理、 母関数、 漸化式、 全単射による証明 inclusion-exclusion, pigeonhole, generating function, recurrence, bijective proof
統計での出番 二項分布、 超幾何分布、 組合せ爆発、 標本の取り方(何通りあるか) binomial distribution, hypergeometric, combinatorial explosion, sampling
実装 math.comb、 math.perm、 itertools.combinations、 scipy.special.comb math.comb, math.perm, itertools.combinations, scipy.special.comb
💡 30秒で分かる結論
🍰 まずはやさしく
組合せは、グループからメンバーを選ぶ方法です。
選ぶ順番を気にせず、数えたいときに使います。
部活の代表者を数人で選ぶときなどに便利です。
ここでは、組合せの基本と計算方法を読みます。
組合せ は、 n 個から k 個を順序を区別せず 選ぶ方法の数。 確率・統計の根幹。
記号 :C(n, k) または ₙCₖ または $\binom{n}{k}$計算 :n! / (k! (n-k)!)順列との違い :順序を区別しない応用 :二項分布、 仮説検定、 サンプリング数注意 :n が大きいと階乗が爆発 → Stirling 近似
ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた 階乗オーバーフロー/組合せと順列の混同/0!=1 を忘れる には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたとき です。
💡 30 秒で分かる結論(拡張版)
組合せとは何か :n 個から k 個を順序を考慮せずに選ぶ場合の数 C(n,k)。
属する分野 :数学・最適化。 統計データ解析コンペでは特に多次元データの要約や予測の場面で頻出。
SSDSE-B-2026 での位置づけ :47 都道府県 × 約 110 指標 × 複数年のパネルデータ。 組合せ は、 これら指標群を要約/予測/生成/最適化する際の基本道具。
最低限の実装 :本ページ「🐍 Python 実装(拡張)」のコードをそのまま data/raw/SSDSE-B-2026.csv に対して実行すれば再現可能。
典型的なつまずき :定義の混同・スケーリング忘れ・適用条件無視・外挿・データリーク。 詳細は「⚠️ 落とし穴(拡張)」へ。
次に読むべきページ :順列・確率・確率分布。 本ページ末尾の「🔗 関連用語」リンクから移動できます。
時間が限られている方はこのブロックだけで OK。 ただし、 実務投入前には必ず「⚠️ 落とし穴」と「✅ 実務チェックリスト」 を一読してください。 『知っていたが対処を忘れた』が分析事故の最大原因です。
📍 文脈:「組合せ」はどんな場面で出てくる?
🍰 まずはやさしく
組合せは、統計のあちこちで使われる道具です。
データの選び方や確率を考えるために使います。
スマホのアプリで、おすすめの商品を選ぶときなどです。
この道具がどんな問いに答えるのかを読みます。
確率分布(二項・超幾何)、 検定(Fisher の正確検定)、 機械学習(特徴量サブセット選択)など至る所で登場する基礎概念。
この用語は一見すると単独で理解できそう に見えますが、 実際には前提となる概念(測定・尺度・サンプリングなど)と組合せて初めて意味を持ちます。 「定義を覚える」より「どんな問いに答える道具なのか 」を捉えるのが効率的です。
📍 文脈ボックス — あなたが今見ているもの(拡張版)
本ページは『2026 統計・データ解析コンペティション』向けジャストインタイム用語集の 組合せ 解説です。 想定読者は、 SSDSE-B-2026 を使った分析レポートを書こうとしている学部・修士・実務初学者層。 数式は最低限に抑え、 公的統計を題材に手を動かしながら習得できるよう設計しています。
観点 本ページの立ち位置
対象用語 組合せ(Combination)
カテゴリ 数学・最適化
前提知識 高校〜大学初年級の数学、 Python の基本(pandas/numpy)
学習目標 定義・直感・実装・落とし穴の 4 点を 30 分以内で押さえる
扱うデータ SSDSE-B-2026.csv(47 都道府県 × 約 110 指標 × 複数年)
推定所要時間 通読 25-35 分、 ハンズオン込みで 60-90 分
難易度 ★★☆☆☆〜★★★★☆(節により異なる)
この用語は単独で完結する概念ではなく、 上位概念・並列概念・派生概念のネットワークの一節点です。 ページ末尾の「🔗 関連用語(前提・並列・発展)」と「🌐 関連手法・派生」を併読することを強くおすすめします。
🎨 直感で掴む
🍰 まずはやさしく
組合せは、選んだあとの並び順を気にしないことです。
誰が先に選ばれたかではなく、誰が選ばれたかを見ます。
買い物で、好きな商品をいくつかカゴに入れるときです。
具体的にどういうことか、例を挙げて読みます。
「組合せ」は SSDSE-B-2026(47 都道府県 × 複数年 × 100 超列)に当てはめると、 47 都道府県から 2 県を選ぶ C(47,2)=1081 通り で具体化できます。 以下は実データを使った直感的理解の入口です。
抽選で 5 人選ぶ (順序関係なし)= 組合せ。 1 位〜5 位を決める = 順列。$\binom{n}{k} = \binom{n}{n-k}$(対称性)。 5 人から 3 人選ぶ = 5 人から 2 人を残す。 二項展開 $(a+b)^n = \sum \binom{n}{k} a^k b^{n-k}$ のように、 代数とも深く結びつく。
💡 学習のコツ :上の比喩は厳密ではない点に注意。 組合せ の定義は次の「📐 数式」で押さえ、 「🧮 実値で計算」で 47 都道府県から 2 県を選ぶ C(47,2)=1081 通り を使って実感を伴う理解に到達するのが効率的です。
🎨 直感で掴む(拡張版)
47 都道府県から 2 県を選ぶ場合 — 「北海道と青森」と「青森と北海道」は同じ。 これが『組合せ』の核となる定義。
組合せ を直感的に把握する 3 つの視点を以下に並べます。 自分の理解スタイルに合うものを選んでください。
① 比喩で掴む
組合せ は、 日常の○○に喩えると分かりやすい。 例えば「47 都道府県を、 一定のルールで並べたり要約したりする道具」と考えると、 細部は違っても本質的な働きが見えてくる。
② 図形で掴む
組合せ は、 47 都道府県の散布図・ヒートマップ・ネットワーク図のいずれかで可視化できる。 数式を見るより、 グラフを 1 枚描いた方が早く納得できる場合が多い。
③ アルゴリズムで掴む
組合せ は、 入力 → 変換 → 出力の手続きとしても理解できる。 後述の「🐍 Python 実装(拡張)」のコードを写経し、 入出力の形を変えて挙動を観察するのが最も速い。
💡 学習のコツ :上の直感を、 次の「📐 数式」で 組合せ の正確な定義に対応付け、 「🧮 実値で計算」で 47 都道府県から 2 県を選ぶ C(47,2)=1081 通り を実際に動かして確認しましょう。 数式と実データを並べて読むのが最短です。
🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳
数式を眺めるだけでは身につかないので、 各記号がどんな役割 を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。
n 選ぶ全体数 k 選ぶ個数 n! n の階乗 = 1×2×...×n C(n, k) 組合せ数(二項係数) Pascal パスカルの三角形の各成分
📚 補足 :同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表 を確認しましょう。
📝 演習問題(記号の読み取り)
問 1 :$\binom{6}{2}$ の n と k をそれぞれ答えよ。
問 2 :$\binom{n}{0}$ の値は何か、 理由とともに答えよ。
問 3 :$\binom{5}{5}$ の値を求めよ。
▶ 解答を表示
答 1 :n = 6、 k = 2(6 個から 2 個を選ぶ)
答 2 :$\binom{n}{0} = 1$。 0 個選ぶ方法は「何も選ばない」という 1 通りのみ。 定義式では $0! = 1$ なので $n!/(0! \cdot n!) = 1$。
答 3 :$\binom{5}{5} = 1$。 5 個から 5 個全部選ぶ方法は 1 通りだけ。 $\binom{n}{n} = 1$ は一般公式。
🔬 数式を言葉で読み解く(拡張版)
数式は「言葉の圧縮」。 ここでは上式の各記号を日本語に翻訳します。
記号 意味 SSDSE-B-2026 での具体例
$n$ 対象の要素数(サンプルサイズ) 47 都道府県
$k$ または $p$ 選ぶ・残す要素数、 次元数、 もしくはパラメータ数 総人口(人)を含む 5-10 指標の小集合
$\mathbf{x}_i$ i 番目の観測ベクトル 都道府県 i の指標ベクトル
$y$ または $\hat{y}$ 目的変数(実測値/予測値) A1101(総人口(人))
$\theta, w, \beta$ モデルパラメータ(係数・重み) 線形モデルで言えば回帰係数
$\sigma, \Sigma$ 標準偏差/分散共分散行列 47 県の総人口(人)のばらつき
$\lambda$ 固有値・正則化係数など、 文脈で意味が変わる 主成分の寄与率や Ridge の λ
同じ記号でも分野により意味が異なる点に注意。 学習の習熟度が上がると、 文脈から自然に解釈できるようになります。
🔬 深堀り — 組合せ の発展的論点
組合せの中心的応用として、 47 都道府県から任意の k 県を選ぶ場合の数を考えます。 C(47, 2) = 1081 通り、 C(47, 3) = 16215 通りといった具合に急増します。 この性質は、 ペア検定における多重比較や、 サンプリング戦略の設計、 ベイズ的事前分布の超パラメータ列挙などで現れます。
組合せ論は、 2026 年現在も組合せ最適化、 暗号、 グラフ理論、 統計力学などの基盤として活発に研究が進められている領域です。 SSDSE-B-2026 のような実データ分析の文脈では、 「都道府県の組合せ」「指標の組合せ」「年度の組合せ」という 3 種類の組合せが頻繁に出現します。
本セクションでは、 組合せ を理解した方が次に踏み込むべき発展的論点を 5 つ取り上げます。 いずれも 2026 年現在の研究と実務の最前線で問題になっているテーマです。
論点 なぜ重要か 主な研究の方向
① スケーラビリティ 大規模データへの適用と計算効率 分散並列化、 GPU 化、 近似アルゴリズム
② 解釈可能性 結果の説明責任、 規制対応 SHAP, LIME, 反事実説明
③ 頑健性 分布シフト・外れ値・敵対的入力 頑健統計、 OOD 検出、 ドメイン適応
④ 不確実性定量化 予測の信頼度を伝える Conformal Prediction, ベイズ深層学習
⑤ 公平性・倫理 差別の検知・是正、 説明責任 Fairness 指標、 偏り除去、 監査
これら 5 論点は、 組合せ 単独の話題ではなく統計学・機械学習全般を横断するメタテーマです。 2026 年現在、 各論点について多数の研究と実装ツールが公開されており、 用語ページから関連ページへ辿ることで体系的に学べます。
🧮 実値で計算してみる
SSDSE-B-2026 の 47 都道府県から 3 県を選ぶ組合せ数 $C(47, 3)$ を、 定義式に実数値を代入して 3 ステップで手計算します。 まず対象となる数値ベクトルを示します:
入力値ベクトル (n, k): [47, 3]
分子の積成分: [47, 46, 45] ← 47 から降順に k=3 個
分母の積成分: [3, 2, 1] ← k! = 3! の各因数
分子 / 分母: [97290, 6] → 97290 ÷ 6 = 16215
Step 1: 階乗を求める
47! / (44!) = 47 × 46 × 45 (分子の約分後の 3 項)
3! = 3 × 2 × 1 = 6 (分母)
Step 2: 数値代入
定義式 $\binom{47}{3} = \dfrac{47!}{3!\,(47-3)!} = \dfrac{47 \times 46 \times 45}{3!}$ に実数値を代入:
47 × 46 = 2,162
2,162 × 45 = 97,290
97,290 ÷ 6 = 16,215
Step 3: パスカルの三角形で検算
C(47,3) = C(46,2) + C(46,3)
= 1,035 + 15,180 = 16,215 ✓
手計算の結果 $C(47,3) = 16{,}215$ を Python で確認します(下の「🐍 Python 実装」セクションの comb(47, 3) が同じ値を返すことを確認してください)。
場面 数式展開 結果
5 人から 2 人 5×4 / 2! 10
47 都道府県から 3 県 47×46×45 / 3! 16,215
50 から 5 50×49×48×47×46 / 5! 2,118,760
100 から 10 Stirling 近似で推計 ≈ 1.73×10¹³
💬 手計算 C(47,3)=16,215 は後述の Python の math.comb(47,3) 出力と完全一致します。 「数式とコードの対応関係」がクリアに見えるようになります。
🧮 実値で計算してみる — SSDSE-B-2026(拡張版)
SSDSE-B-2026(公的統計の社会・教育系データセット)を用いて、 組合せ を体感します。 ファイルは data/raw/SSDSE-B-2026.csv。 読み込みコードは下記です。
🎯 このコードでやること :SSDSE-B-2026 を読み込み、 最新年度の 47 都道府県データを抽出する。
📥 入力:data/raw/SSDSE-B-2026.csv(564行 × 112列、 cp932 エンコード)
📋 コピー import pandas as pd
import numpy as np
# SSDSE-B-2026 を読み込む(cp932 / Shift_JIS)。最初の行は英文ヘッダー、2 行目は日本語ヘッダー
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ], encoding = 'cp932' )
print ( 'shape:' , df . shape ) # (564, 112)
print ( 'years:' , sorted ( df [ 'SSDSE-B-2026' ] . unique ())[: 5 ])
latest = df [ df [ 'SSDSE-B-2026' ] == df [ 'SSDSE-B-2026' ] . max ()] . copy ()
print ( latest [[ 'Prefecture' , 'A1101' ]] . head ())
📤 実行結果例: shape: (564, 112) years: [2012, 2013, 2014, 2015, 2016] Prefecture A1101 0 北海道 5092000 12 青森県 1184000
💬 最新年度 (2023) の 47 行が latest に格納される。 以降の計算はこの 47 行を対象とする。
使用列 A1101(総人口(人))を中心に、 47 都道府県の最新値で 組合せ を計算します。
🎯 このコードでやること :A1101(総人口)の基本統計量(平均・標準偏差・分位)を計算し、 上位5・下位5県を表示する。
📥 入力:latest['A1101'](47行 × 1列)、 x = latest['A1101'].astype(float).values
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 # 基本統計:平均・標準偏差・四分位範囲
x = latest [ 'A1101' ] . astype ( float ) . values
print ( f 'n = { len ( x ) } ' )
print ( f 'mean = { np . mean ( x ) : ,.1f } ' )
print ( f 'std = { np . std ( x , ddof = 1 ) : ,.1f } ' )
print ( f 'min = { np . min ( x ) : ,.1f } max = { np . max ( x ) : ,.1f } ' )
print ( f 'Q1 = { np . quantile ( x , 0.25 ) : ,.1f } Q3 = { np . quantile ( x , 0.75 ) : ,.1f } ' )
# 上位 5 県・下位 5 県
top5 = latest . nlargest ( 5 , 'A1101' )[[ 'Prefecture' , 'A1101' ]]
bot5 = latest . nsmallest ( 5 , 'A1101' )[[ 'Prefecture' , 'A1101' ]]
print ( 'TOP5 \n ' , top5 . to_string ( index = False ))
print ( 'BOTTOM5 \n ' , bot5 . to_string ( index = False ))
📤 実行例(実測)
n = 47
mean = 2,645,808.5
std = 2,797,551.4
min = 537,000.0 max = 14,086,000.0
Q1 = 1,034,000.0 Q3 = 2,636,500.0
TOP5
Prefecture A1101
東京都 14086000
神奈川県 9229000
大阪府 8763000
愛知県 7477000
埼玉県 7331000
BOTTOM5
Prefecture A1101
鳥取県 537000
島根県 650000
高知県 666000
徳島県 695000
福井県 744000
上記の結果から、 47 都道府県の 総人口(人) の散らばり方が一目で分かります。 続いて 組合せ の本来の演算を当てはめましょう。
🎯 このコードでやること :A1101(総人口)をzスコア化し、 四分位グループに分けて各群の平均・標準偏差・件数を確認する。
📥 入力:latest['A1101'](47行・総人口(人))
📋 コピー # 標準化(zスコア化)
z = ( x - x . mean ()) / x . std ( ddof = 1 )
print ( 'z (head 5) =' , np . round ( z [: 5 ], 3 ))
# 上位 10 / 下位 10 / 中位 27 の 3 グループに分けて平均差を確認
import pandas as pd
g = pd . qcut ( latest [ 'A1101' ], q = [ 0 , 0.25 , 0.75 , 1.0 ], labels = [ 'low' , 'mid' , 'high' ])
grp = latest . assign ( group = g ) . groupby ( 'group' , observed = True )[ 'A1101' ] . agg ([ 'mean' , 'std' , 'count' ])
print ( grp )
📤 実行結果例: z (head 5) = [ 0.874 -0.523 -0.53 -0.136 -0.619] mean std count low 804000 152224.7 12 mid 1603435 414420.4 23 high 6485500 3210209.0 12
💬 low/mid/high の 3 群に分割。 组合せ論的には C(47,k) で何組選べるかが組合せ計算の土台となる。
グループ 構成県数 総人口(人)平均 総人口(人)標準偏差
low(下位 25%) 12 県 小さい 中程度
mid(中位 50%) 23 県 中 小さい
high(上位 25%) 12 県 大きい 大きい
組合せ は、 こうした実データの集計・要約・予測・最適化 を支える基盤的な道具です。 SSDSE-B-2026 の他の列(B 系:労働、 E 系:教育、 H 系:医療、 L 系:消費)にも同様に適用できます。
🧮 数式に値を入れて手で計算する: 組合せ C(n,k)
n=5, k=2 で C(5,2) を定義通り計算する。
Step 1: 階乗
5! = 120
2! = 2
3! = 6
Step 2: 組合せ
C(5,2) = 5!/(2!·3!) = 120/(2·6) = 120/12 = 10
Step 3: パスカル三角形検算
C(4,1)=4, C(4,2)=6, C(5,2)=C(4,1)+C(4,2)=4+6=10 ✓
🐍 Python で再現
🎯 このコードでやること :上の手計算 (n=5,k=2) を math.comb と factorial で再現し、 手計算との一致を確認する。
📥 入力:n=5, k=2(スカラー)
📋 コピー from math import comb , factorial
print ( f "5! = { factorial ( 5 ) } " )
print ( f "C(5,2) = { comb ( 5 , 2 ) } " )
print ( f "パスカル: C(4,1)+C(4,2) = { comb ( 4 , 1 ) + comb ( 4 , 2 ) } " )
📤 実行結果
5! = 120
C(5,2) = 10
パスカル: C(4,1)+C(4,2) = 10
💬 手計算 (Step 2,3) C(5,2)=10 と Python 出力が完全一致。
🎮 触って理解する
スライダーで n (全体の数)と k (選ぶ数)を動かすと、 組合せ $C(n,k)$ と順列 $P(n,k)$ がリアルタイムで更新されます。 n が小さいとき(n ≤ 8)は実際の選び方をすべて列挙 し、 パスカルの三角形での位置と対称性 $C(n,k)=C(n,n-k)$ が光ります。 三角形のマスをタップ/クリックすると、 その (n, k) にジャンプします。
n(全体)
5
k(選ぶ)
2
🔢 実際の選び方(列挙)
🔺 パスカルの三角形(緑=C(n,k)/橙=C(n,n-k))
🧭 何が起きている?
直感 :組合せ $C(n,k)$ は「n 個から k 個を順序を無視して 選ぶ方法の数」。 一方 順列 $P(n,k)$ は順序も区別するので、 選んだ k 個を並べ替える $k!$ 通りだけ多くなります($P(n,k)=C(n,k)\times k!$)。 スライダーを動かして、 $P$ が常に $C$ の $k!$ 倍になっていることを確かめてください。
対称性 :$C(n,k)=C(n,n-k)$。 「k 個を選ぶ 」ことは「残す $n-k$ 個を選ばない 」ことと同じなので、 三角形は左右対称になります(緑と橙のマスが鏡像)。
パスカルの関係 :三角形の各マスは、 真上の左右 2 マスの和 $C(n,k)=C(n-1,k-1)+C(n-1,k)$。 これは「新しい 1 個を選ぶ/選ばない」で場合分けした結果です。
⚠️ よくある落とし穴
順列と混同する :「3 人選ぶ」なら組合せ、 「1〜3 位を決める」なら順列。 順序に意味があるかで使い分けます。 くじ引きの当選者は組合せ、 リレーの走順は順列。
重複を数える/数え忘れる :同じものを戻して 複数回選べる場合は「重複組合せ $H(n,k)=C(n+k-1,k)$」で、 通常の $C(n,k)$ とは別物です。 本節の列挙は戻さない (同じ要素は 1 回だけ)ケースです。
階乗のオーバーフロー :$n!$ を素朴に計算すると n が大きいだけで桁あふれします。 $C(n,k)$ を求めるなら $n!$ を経由せず、 $\prod_{i=0}^{k-1}\frac{n-i}{i+1}$ と掛けながら割る のが安全(本節の計算も内部で多倍長整数を使い正確に算出しています)。
🚀 発展:二項定理と確率へ
二項定理 :$(a+b)^n=\sum_{k=0}^{n}\binom{n}{k}a^k b^{n-k}$。 展開の各係数がまさにパスカルの三角形の行。 $a=b=1$ とすると $\sum_k \binom{n}{k}=2^n$(= n 個の要素の部分集合の総数)。
二項分布 :成功確率 $p$ の試行を n 回行い k 回成功する確率は $\binom{n}{k}p^k(1-p)^{n-k}$。 組合せは「どの k 回が成功か」の場合の数を与えます。
統計への応用 :Fisher の正確検定・超幾何分布・多重比較の数え上げなど、 「順序を無視した選び方の総数」が根幹に現れます。 詳しくは関連ページ(下記リンク)を参照。
🔗 関連ページ:
順列
確率
確率分布
分布
集合論
🐍 Python 実装
公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。
🎯 解説: SSDSE-B-2026 の 47 都道府県から 3 つを選ぶ組合せ数 C(47,3) を計算し、 重複なく順序を区別しない選び方の総数を求める。
📥 入力例: n = 47 (都道府県数)
k = 3 (選ぶ数)
📋 コピー from math import comb
from scipy.special import comb as sp_comb
print ( comb ( 5 , 2 )) # 10
print ( comb ( 47 , 3 )) # 16215
print ( sp_comb ( 100 , 10 )) # 1.7310...e+13
📤 実行例:
C(47, 3) = 47! / (3! × 44!)
= (47 × 46 × 45) / (3 × 2 × 1)
= 16215 通り
💬 読み方: C(n, k) = nCk = 二項係数。 順列 P(n,k) と異なり順序を区別しない。 パスカルの三角形で C(n,k) = C(n-1,k-1) + C(n-1,k)。 確率(超幾何分布)、 圏論、 量子論で頻出。
▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib numpy pandas scikit-learn scipy が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。
本サイトの全コードは 論文一覧ページ から実例として確認できます。 自分のデータで試したい場合は、 列名・欠損記号・単位の違いだけ調整すれば、 ほぼそのまま流用できます。
👣 ステップバイステップ実例
「組合せ」を初めて使う方向けに、 ハンズオン的な実行手順を整理します。 上の Python 実装と組み合わせて、 1 度自分の手でなぞってみることを強く推奨します。
環境準備 :このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
データ取得 :本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
探索的に観察 :df.head()、 df.describe()、 df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
前提検証 :組合せ をこのデータに当てはめてよいか(このページの「⚠️ よくある落とし穴」で挙げた 階乗オーバーフロー・組合せと順列の混同 など)を確認。 NG なら別手法を検討。
本処理 :上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
結果可視化 :散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
解釈・記録 :「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手 を明記。
共有 :Notebook を GitHub や Drive に置き、 関係者にレビュー依頼。 ピアレビューで穴が見つかることが多いので大事。
この 8 ステップを 1 度回すと、 「用語を読んで分かった気になる 」段階から「実際に使える 」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。
🐍 Python 実装(拡張版)
pandas + numpy + scipy + scikit-learn を組み合わせた 組合せ の標準実装を 4 段階で示します。
① データ読み込みと前処理
🎯 このコードでやること :SSDSE-B-2026 を読み込み欠損確認と数値列抽出を行う前処理。
📥 入力:data/raw/SSDSE-B-2026.csv
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 import pandas as pd
import numpy as np
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ], encoding = 'cp932' )
latest = df [ df [ 'SSDSE-B-2026' ] == df [ 'SSDSE-B-2026' ] . max ()] . copy ()
# 欠損確認
print ( 'NA per col (top 5):' )
print ( latest . isna () . sum () . sort_values ( ascending = False ) . head ())
# 数値列のみ抽出
num = latest . select_dtypes ( include = 'number' ) . drop ( columns = [ 'SSDSE-B-2026' ])
print ( 'numeric cols:' , num . shape [ 1 ])
📤 実行結果例: NA per col (top 5): ... numeric cols: 109
💬 数値列が 109 列あることを確認。 欠損の多い列は除外または補完する。
② 基本的な 組合せ 適用
🎯 このコードでやること :A1101 を標準化し、 単一標本 t 検定で平均が 0 と有意に異なるかを確認する。
📥 入力:num[['A1101']].dropna()(47行)
📋 コピー from sklearn.preprocessing import StandardScaler
from scipy import stats
# 標準化(組合せ の前処理として必須)
scaler = StandardScaler ()
X = scaler . fit_transform ( num [[ 'A1101' ]] . dropna ())
print ( 'X shape:' , X . shape , 'mean:' , X . mean () . round ( 6 ), 'std:' , X . std () . round ( 6 ))
# 基本統計検定の例:単一標本平均が 0 と異なるか
t , p = stats . ttest_1samp ( X . flatten (), 0 )
print ( f 't = { t : .3f } , p = { p : .4f } ' )
📤 実行結果例: X shape: (47, 1) mean: 0.0 std: 1.0 t = 0.000, p = 1.0000
💬 標準化後は mean=0・std=1。 t=0 / p=1 は定義通りで正常(「平均 0 からの乖離なし」)。
③ 可視化
🎯 このコードでやること :A1101(総人口)のヒストグラムと箱ひげ図を 1 枚の figure に並べて分布を可視化する。
📥 入力:latest['A1101'].dropna()(47行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import os
import matplotlib.pyplot as plt
os . makedirs ( 'figs' , exist_ok = True ) # 保存先が無いと savefig は失敗する
fig , ax = plt . subplots ( 1 , 2 , figsize = ( 12 , 4 ))
ax [ 0 ] . hist ( latest [ 'A1101' ] . dropna (), bins = 20 , color = '#4DB6AC' , edgecolor = 'white' )
ax [ 0 ] . set_title ( '総人口(人) 分布(47 都道府県・最新年度)' )
ax [ 0 ] . set_xlabel ( '総人口(人)' )
ax [ 0 ] . set_ylabel ( '県数' )
ax [ 1 ] . boxplot ( latest [ 'A1101' ] . dropna (), vert = False )
ax [ 1 ] . set_title ( '総人口(人) 箱ひげ図' )
ax [ 1 ] . set_xlabel ( '総人口(人)' )
plt . tight_layout ()
plt . savefig ( 'figs/combination_dist.png' , dpi = 140 )
print ( 'saved figs/combination_dist.png' )
📤 実行結果: saved figs/combination_dist.png
💬 ヒストグラムは右裾長(東京・神奈川が突出)。 箱ひげ図で外れ値を視覚的に確認できる。
④ 応用:他指標との結合分析
🎯 このコードでやること :A1101(総人口)と他指標の相関ランキングと、 高相関ペア数(|r|>0.95)を調べる。
📥 入力:num(47行 × 109数値列)
📋 コピー # 主要指標との相関ランキング
target = 'A1101'
corr_with_target = num . corr ()[ target ] . drop ( target ) . sort_values ( key = abs , ascending = False )
print ( '|r| 上位 10:' )
print ( corr_with_target . head ( 10 ) . round ( 3 ))
# 共線性チェック
high_corr = ( num . corr () . abs () > 0.95 ) & ( num . corr () . abs () < 1.0 )
print ( '|r|>0.95 の組:' , high_corr . sum () . sum () // 2 )
📤 実行結果例: |r| 上位 10: A1102 1.000 A110201 1.000 ... |r|>0.95 の組: 1564
💬 |r|>0.95 の組が 1,564 組もある。 組合せ C(109,2)=5,886 ペア中の 約 27% が高相関。 特徴選択時に注意が必要。
これら 4 段階を踏めば、 SSDSE-B-2026 の任意の列に 組合せ を適用してレポートに使える結果を再現できます。 コードは引数や変数名を最小限にし、 初学者でも読み下せる構成にしました。
🐍 発展的コード例 — 組合せ を SSDSE-B-2026 で複合的に使う
本ページの基礎コードを踏まえ、 組合せ を複数の指標と組み合わせた発展的な分析例を示します。 すべて data/raw/SSDSE-B-2026.csv をそのまま使えます。
A. パネル構造の活用
🎯 このコードでやること :SSDSE-B-2026 を都道府県 × 年度のパネル形式に整形し、 各都道府県の総人口年率変化を算出する。
📥 入力:data/raw/SSDSE-B-2026.csv(A1101 列使用)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import pandas as pd
import numpy as np
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ], encoding = 'cp932' )
# 都道府県 × 年度のパネル化
panel = df . pivot_table ( index = 'Prefecture' , columns = 'SSDSE-B-2026' , values = 'A1101' )
print ( 'panel shape:' , panel . shape )
print ( panel . iloc [: 5 , : 5 ])
# 各都道府県の 総人口(人) の年率変化
growth = panel . pct_change ( axis = 1 ) . mean ( axis = 1 ) . sort_values ()
print ( ' \n 増加率(下位 5 県):' )
print ( growth . head ())
print ( ' \n 増加率(上位 5 県):' )
print ( growth . tail ())
📤 実行結果例: panel shape: (47, 12) 増加率(下位 5 県): 秋田県 -0.014 青森県 -0.012 ... 増加率(上位 5 県): 沖縄県 0.004 東京都 0.006 ...
💬 沖縄・東京は増加、 東北は減少。 C(47,2)=1,081 ペア全比較を組合せ論的に正当化できる。
B. 多指標の同時分析
🎯 このコードでやること :47 都道府県の全数値指標に PCA を適用し、 第 1 主成分への寄与上位 10 指標を表示する。
📥 入力:latest(47行)の数値列全体(欠損列除外)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
latest = df [ df [ 'SSDSE-B-2026' ] == df [ 'SSDSE-B-2026' ] . max ()] . copy ()
features = latest . select_dtypes ( include = 'number' ) . drop ( columns = [ 'SSDSE-B-2026' ]) . dropna ( axis = 1 )
X = StandardScaler () . fit_transform ( features . values )
pca = PCA ( n_components = 5 )
Z = pca . fit_transform ( X )
print ( '説明率:' , pca . explained_variance_ratio_ . round ( 3 ))
print ( '累積:' , pca . explained_variance_ratio_ . cumsum () . round ( 3 ))
# 第 1 主成分の寄与上位 10 指標
load = pd . Series ( pca . components_ [ 0 ], index = features . columns ) . sort_values ( key = abs , ascending = False )
print ( ' \n PC1 上位 10:' )
print ( load . head ( 10 ) . round ( 3 ))
📤 実行結果例: 説明率: [0.773 0.049 0.035 0.029 0.018] 累積: [0.773 0.822 0.857 0.887 0.905] PC1 上位 10: A130202 0.109 A1302 0.108 A9101 0.108 A1101 0.108 ...
💬 PC1 だけで 77% の分散を説明。 総人口・世帯数など人口規模系の指標が主に寄与している。
C. クラスタリングへの応用
🎯 このコードでやること :PCA 結果 Z(47×5)に k-means(k=4)を適用し、 都道府県をクラスターに分類する。
📥 入力:Z(PCA 変換後 47行 × 5列)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12 from sklearn.cluster import KMeans
km = KMeans ( n_clusters = 4 , n_init = 10 , random_state = 0 ) . fit ( Z )
clusters = pd . Series ( km . labels_ , index = latest [ 'Prefecture' ] . values , name = 'cluster' )
print ( 'クラスター別 都道府県数:' )
print ( clusters . value_counts () . sort_index ())
print ( ' \n クラスター 0 の都道府県:' )
print ( clusters [ clusters == 0 ] . index . tolist ())
print ( ' \n クラスター 1 の都道府県:' )
print ( clusters [ clusters == 1 ] . index . tolist ())
📤 実行結果例: クラスター別 都道府県数: 0→20 1→1 2→8 3→18 クラスター 0: ['青森県', '秋田県', '富山県', ...] クラスター 1: ['東京都']
💬 東京のみ孤立クラスター(組合せ論的に外れ値)。 北海道・埼玉・千葉・神奈川・愛知・大阪など大都市圏 8 道府県が別の 1 群を作り、 残りは 2 群に分かれる。
D. 結果のレポート用整形
🎯 このコードでやること :A1101 の基本統計量(n・mean・std・min・max・p1・p99)をMarkdown 形式で整形し、 レポートにそのまま貼り付け可能な表を出力する。
📥 入力:latest['A1101'](47行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12 # Markdown 形式のサマリー表を出力
summary = pd . DataFrame ({
'metric' : [ 'n' , 'mean' , 'std' , 'min' , 'max' , 'p1' , 'p99' ],
'value' : [ len ( latest [ 'A1101' ] . dropna ()),
float ( latest [ 'A1101' ] . mean ()),
float ( latest [ 'A1101' ] . std ()),
float ( latest [ 'A1101' ] . min ()),
float ( latest [ 'A1101' ] . max ()),
float ( latest [ 'A1101' ] . quantile ( 0.01 )),
float ( latest [ 'A1101' ] . quantile ( 0.99 ))],
})
print ( summary . to_string ( index = False ))
📤 実行結果例: | metric | value | | n | 47.0 | | mean | 2645809 | | std | 2797551 | | min | 537000 | | max | 14086000 |
💬 平均 265 万・最大 1,409 万(東京)。 std/mean≈106% で非常に散らばっている。 組合せペアの比較には標準化が必須。
A-D の 4 段階を踏むことで、 SSDSE-B-2026 を素材とした 組合せ の応用分析が一通り完成します。 コードはそのまま貼り付けて実行可能、 引数や変数は最小限にして可読性を優先しました。
📊 比較表 — 組合せ と類似手法の使い分け
組合せ は単独で完結する手法ではなく、 周辺手法と比較して使い分ける必要があります。 以下に主要な類似・代替手法との比較を表でまとめます。
観点 組合せ 類似手法 A 類似手法 B
目的 本ページのテーマ 関連する別の目的 さらに別の目的
適用条件 本ページ「📐 数式」直下 類似だが厳しい/緩い 大きく異なる
解釈性 中-高(理論的根拠あり) 中 低(ブラックボックス)
計算コスト 低-中 中 高
必要サンプル数 少-中(n=47 でも適用可) 中 大(数千以上推奨)
Python 実装 scikit-learn / scipy / pandas 同上 PyTorch / TensorFlow
レポート記述 標準的、 査読も通りやすい 慣習に従う 説明責任の追加負荷
表の「類似手法 A / B」は、 本ページの「🌐 関連手法・派生」セクションでリンクされている具体手法に対応します。 状況に応じて最適なものを選んでください。
🔭 多角的視点 — 組合せ を 5 つのレンズで眺める
同じ概念でも、 学問分野によって呼び名・記法・強調する側面が異なります。 組合せ を 5 つの分野視点から眺めることで、 各教科書・論文を読む際の翻訳力が身につきます。
📊 統計学者の視点
組合せ は確率モデルとして定式化され、 不偏推定量・一致性・最良性などの理論的性質が問われる。 仮定の明示と頑健性の議論を重視。
💻 機械学習エンジニアの視点
組合せ は学習可能なモデルとして実装され、 訓練/検証/テスト分割とハイパーパラメータ調整が中心の関心事。 性能指標(精度・F1・AUC 等)で評価する。
💼 ビジネスアナリストの視点
組合せ は意思決定支援の道具。 結果が経営層に伝わるかどうか、 行動に結びつくかどうかが評価軸。 派手な精度より、 解釈可能性と再現性が大事。
🔬 研究者の視点
組合せ は既存手法との比較対象。 新規性・優位性・汎用性が問われる。 ベンチマーク、 アブレーションスタディ、 統計検定が論文の必須要素。
🎓 教育者の視点
組合せ を学習者にどう伝えるか。 比喩・図解・実例の組み合わせで段階的に。 数式は『最後の総まとめ』として導入するのが効果的。
同じ 組合せ でも、 立場により注目する論点が異なります。 自分の関心がどの視点に近いかを意識すると、 学習効率が大きく向上します。
⚠️ よくある落とし穴
この用語を使うときに初学者が踏みやすい 失敗パターン。 1 度経験してしまえば次から避けられますが、 先に知っておくに越したことはありません。
❌ 階乗オーバーフロー
n=100 でも 100! は 158 桁。 Python 標準 int は OK だが、 浮動小数では破綻。
❌ 組合せと順列の混同
順序が重要なら nPk = n!/(n-k)!。
❌ 0!=1 を忘れる
計算で 0! が出る場面は多い。
❌ 負の値・非整数
n < k では 0、 非整数では一般化二項係数を使う。
🛡 組合せ固有の防御策 :「順序が結果に影響するかを口頭で確認 (例: 47 都道府県から 3 県の "1 位/2 位/3 位" は順列 nPk、 "上位 3 県の集合" は組合せ nCk) 」「計算前に math.comb(n, k) で桁数を見積もる (C(47,5)=1,533,939 / 47!≈2.6×1059 ) 」「確率計算では分母・分子それぞれ math.comb で書き、 約分前に値を確認 」の 3 点を守れば、 順列との取り違え・浮動小数オーバーフロー・確率計算ミスを防げます。
⚠️ よくある落とし穴(拡張版)
組合せ を実務で扱う際にハマりやすい 8 件を、 症状・原因・対策の 3 点セットで整理します。
定義の混同 :似た概念(順列/組合せ、 行列/配列、 SVM/SVR など)と取り違える。 対策:用語ページのリンクを順に辿り、 似て非なる定義を 1 文で書き出す。
適用条件の見落とし :仮定(独立性、 正規性、 線形性、 IID など)が崩れている場面で使い、 結果が解釈不能になる。 対策:本ページ「📐 数式」直下の仮定を必ずチェック。
スケールの不一致 :総人口(人)(数百万単位)と人口比指標(数十単位)を同じスケールで扱い、 結果が偏る。 対策:StandardScaler や MinMaxScaler を前処理に挟む。
欠損の暗黙除去 :pandas が黙って NA を落とすケース。 対策:df.isna().sum() を毎回確認し、 補完/除外の方針を明示。
多重共線性 :強相関の説明変数を複数投入し、 係数が不安定になる。 対策:VIF を確認、 PCA や正則化で対処。
外挿の危険 :観測範囲外で予測を信じる。 対策:訓練データの分布を超えた点では予測値に幅広い信頼区間を添える。
データリーク :未来情報や目的変数の関数を特徴量に混入させる。 対策:時系列なら時間順分割、 群構造があれば GroupKFold を使う。
解釈の過信 :組合せ の出力を因果関係と読み替える。 対策:『相関は因果ではない』を毎回唱える。 必要なら因果推論手法(DID, IV, RDD)を併用。
🚨 警告 :上記のうち 3 件以上に該当しないことを確認できないまま、 組合せ の結果をレポートに載せると、 査読・上長レビューで指摘される確率が極めて高くなります。 必ず実行前に「✅ 実務チェックリスト」を確認してください。
🌐 関連手法・派生
この用語の周辺にある、 セットで覚えておきたい関連手法を整理しました。 状況によって使い分けが必要なので、 「強みと弱み 」を 1 行で言えるようにしておくと、 場面に応じた選択が可能になります。
二項分布 C(n,k) p^k (1-p)^(n-k) 超幾何分布 非復元抽出の確率 Stirling 近似 n! ≈ √(2πn) (n/e)^n 動的計画法 パスカル三角形で計算
上の表に並べた 二項分布・超幾何分布・Stirling 近似・動的計画法 は、 いずれもこの用語と隣り合う選択肢です。 右列に書いたのは「どこが違うか」なので、 違いがぴんと来ない行から先に読むと、 差分だけを追えて手戻りがありません。 リンクの無いものは本サイトに個別ページを設けていないため、 関連グループ教材か外部資料を当たってください。
⚖️ 似た用語との使い分け
「組合せ」と隣接する手法を、 ざっと俯瞰できる比較表として再整理します。 場面に応じてどれを採用するか、 まずは「適用条件 」「仮定 」「強み・弱み 」の 3 軸で見比べてください。
手法 特徴・選択基準
二項分布 C(n,k) p^k (1-p)^(n-k) 超幾何分布 非復元抽出の確率 Stirling 近似 n! ≈ √(2πn) (n/e)^n 動的計画法 パスカル三角形で計算
「とりあえずデフォルト」で進めてしまうと、 適用条件外でも気付かず使い続ける事故になりがちです。 1 度「なぜこれを選んだか」 を 1 文で書く習慣をつけると、 後の説明・査読でも強力な武器になります。
🛠 現場でのワークフロー例
「組合せ」を実際の分析プロジェクトに組み込むときの典型的な作業順序を示します。 教科書の例題と違って、 実データ・実業務では準備と検証 に多くの時間を使うことに注意。
フェーズ 具体的な作業 所要時間目安
① 問いの設定 「組合せ で何を確かめたいのか」を 1 文に書く。 関係者と合意 30 分〜数時間
② データ調達 SSDSE や社内 DB から必要なテーブルを抽出。 メタ情報(出典・期間・単位)を控える 数時間〜数日
③ 前提検証 本用語の適用条件(独立性・尺度・分布など)を確認。 必要なら別手法に切替 数時間
④ 適用・計算 本ページの「🐍 Python 実装」を雛形に実行。 中間出力を逐次確認 30 分〜数時間
⑤ 解釈・可視化 数値を図表で示し、 ドメイン知識と結びつけて意味付け 数時間
⑥ 報告 推定値・不確実性・限界を 5 点セット(後述)で記述 数時間〜1 日
数学基礎 カテゴリのほかの用語と組合せて使う場面が多いため、 上記④までで終わらせず、 ⑤⑥まで丁寧に進めることが「結果が伝わる分析 」の鍵です。
🔭 立場で変わる「組合せ」の見方
同じ 組合せ でも、 どの立場から読むかで「まず気にすること」が入れ替わります 。 下の表は、 立場ごとにこのページのどこから読むと近道かを整理したものです。
立場 組合せ をどう読むか 学生・初学者 まず「🎨 直感で掴む」で 組合せ が何をする道具かを掴み、 「🧮 実値で計算してみる」で数字を追う 実務データ分析者 このページの落とし穴 階乗オーバーフロー・組合せと順列の混同 を先に確認し、 「🐍 Python 実装」をそのまま流用する 研究者・論文執筆者 このページが掲げる定義 組合せの定義 の前提が自分のデータで成り立つかを確認する 意思決定者 組合せ の結果が何を保証し何を保証しないかを、 「⚠️ よくある落とし穴」で線引きする 教育担当 関連用語 順列・確率 と並べて教えると、 違いから理解が進む
本ページはすべての立場を意識して構成されていますが、 自分の関心に応じてセクションを取捨選択 して読むのが現実的です。
📜 歴史と背景
組合せ は、 統計学と計算機科学の流れの中から生まれました。 下の年表はこの分野全体の流れ で、 組合せ 固有の年表ではありません。 この用語がどの時代の産物かを掴むために置いています。
時代 関連する出来事
古典期 統計学・確率論・最適化など、 この分野の数学的基礎 が整備された時代
情報化期 計算機の普及で、 古典手法が大規模データに適用可能 になった時代
機械学習期 2000 年代以降、 アルゴリズムとデータ量の両面で進展。 オープンソースとクラウドが後押し
深層学習・LLM 期 2012 以降の深層学習革命と、 2022 以降の生成 AI で、 多くの用語が再定義・再評価 された
現代 本用語は 数学基礎 領域における標準ツールボックス の一部として、 学術・実務の両面で日常的に使われる
歴史を知っておくと、 「なぜこの用語がこの定義になっているのか」「なぜ似た用語が複数あるのか」が腑に落ちやすくなります。 用語が生まれた動機 を理解することが、 応用する力を養う近道です。
📔 ミニ用語集
「組合せ」を読み解く上で出てきた周辺の小用語を、 すぐに引けるよう 1 か所に集めました。 各説明は本ページの記述と整合しています。
n 選ぶ全体数 k 選ぶ個数 n! n の階乗 = 1×2×...×n C(n, k) 組合せ数(二項係数) Pascal パスカルの三角形の各成分
🌐 関連手法・派生(拡張版)
組合せ の周辺で、 一緒に学ぶと理解が深まる手法を 4 件挙げます。
どれも本リポジトリ内に専用ページがあります。 リンクから辿って、 概念マップを自分の頭の中に少しずつ構築してください。
🌐 R638-6:派生概念と恒等式の早見表
組合せ $\binom{n}{k}$ には多くの恒等式・派生形があります。 ここでは「47 都道府県分析を進めるうえで知っておくと得な 8 つ」をまとめます。
名称 恒等式 使い所
対称性 $\binom{n}{k}=\binom{n}{n-k}$ 大きな k は補集合で考える
パスカルの公式 $\binom{n}{k}=\binom{n-1}{k-1}+\binom{n-1}{k}$ 動的計画法の漸化式
二項定理 $(1+x)^n=\sum_k \binom{n}{k}x^k$ 確率分布・母関数
全部の和 $\sum_{k=0}^n \binom{n}{k}=2^n$ 部分集合の総数(47 県なら $2^{47}\approx1.4\times10^{14}$)
交代和 $\sum_{k=0}^n (-1)^k \binom{n}{k}=0$ (n≥1) 包含排除の原理
バンデルモンドの恒等式 $\binom{m+n}{k}=\sum_j \binom{m}{j}\binom{n}{k-j}$ 層化サンプリングの数え上げ
中心二項係数 $\binom{2n}{n}\sim 4^n/\sqrt{\pi n}$ ランダムウォークの中央値
超幾何分布 $P(X=k)=\binom{K}{k}\binom{N-K}{n-k}/\binom{N}{n}$ 非復元抽出(無作為抽出の理論)
部分集合の総数 $2^{47}\approx 1.4 \times 10^{14}$ は、 47 県の特徴選択を「全パターン試す」で扱うのが絶望的なことを示しています。 そこで前進選択・後退削除・Lasso 正則化・ベイズ事前分布などの近似が必要になる、 という構図です。
🐍 確認コード R638-6A:パスカルの公式と二項定理の合計を検証
このコードでやること :47 都道府県の規模を題材に、 (1) パスカルの公式 $\binom{47}{3}=\binom{46}{2}+\binom{46}{3}$ が成り立つこと、 (2) $\sum_{k=0}^{47}\binom{47}{k}=2^{47}$ が成り立つことを確認します。
📥 入力データ(n=47 のみ):
df_2023 = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
n = 47 # df_2023 の県数から取得
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12 import math
n = 47
# パスカルの公式
lhs = math . comb ( n , 3 )
rhs = math . comb ( n - 1 , 2 ) + math . comb ( n - 1 , 3 )
print ( f 'Pascal: C(47,3)={lhs:>6,} ?= C(46,2)+C(46,3)={rhs:>6,} -> match={lhs==rhs}' )
# 部分集合の総数
total = sum ( math . comb ( n , k ) for k in range ( n + 1 ))
print ( f 'Sum : sum_k C(47,k)={total:>18,} ?= 2^47={2**n:>18,} -> match={total==2**n}' )
📤 実行例(実際の出力):
Pascal: C(47,3)=16,215 ?= C(46,2)+C(46,3)=16,215 -> match=True
Sum : sum_k C(47,k)=140,737,488,355,328 ?= 2^47=140,737,488,355,328 -> match=True
💬 結果の読み方:2 つの恒等式が完全一致で成立しました。 $2^{47} \approx 1.4 \times 10^{14}$ は 140 兆通り、 これが「47 県を含む/含まない」二択を 47 回繰り返した総数。 特徴選択や部分集合最適化の議論で「指数的な候補数」と呼ばれるのはこのスケールです。
📚 関連グループ教材
本ページは初学者向けの導入 に重きを置いています。 もう一段深く学びたい方向けの参考方向性を以下にまとめました。 具体的な書誌情報は出典を確認の上で各自で取得してください。
大学教科書レベル :基礎統計・線形代数・確率論の教科書から該当章を確認すると、 本用語の理論的裏付けが押さえられます。
専門書・モノグラフ :本用語の名前で和書・英書を検索すると、 数百ページの体系的解説に出会えます。 1 度通読する価値あり。
論文・サーベイ :Google Scholar や arXiv で本用語を検索し、 引用数の多いサーベイ論文を読むと、 最新の派生・発展が見渡せます。
公的統計 :本サイトの題材である SSDSE(教育用標準データセット)や e-Stat を使うと、 実データで手を動かしながら学べます。
OSS ドキュメント :scikit-learn・statsmodels・PyTorch などの公式ドキュメントは、 アルゴリズム解説と実装例が揃った優良教材です。
本サイトの再現論文 :用語がどう実問題に使われるかは、 論文一覧 から該当ジャンルを選ぶと具体例が確認できます。
🎯 このページの要点(最終確認)
「組合せ」を 1 行で言える ように整理:
カテゴリ :数学基礎
何をする道具か :組合せ は、 n 個から k 個を順序を区別せず 選ぶ方法の数。 確率・統計の根幹。
使う前に必ず確認 :適用条件、 サンプル数、 前提仮定
結果と一緒に必ず示す :不確実性(標準誤差・信頼区間)、 解釈、 限界
関連グループ教材 :このページ末尾のリンクから全体像へ
🧭 次に読むなら :土台が怪しいと感じたら 平均・分散 へ戻り、 もう一段進みたければ t 検定・ANOVA へ進んでください。 この用語集は必要になった時に開く前提で作っているので、 今すぐ全部読む必要はありません。
📚 関連グループ教材
この用語の全体像 を学ぶには、 横断的な教材から入るのが効率的:
📚 関連グループ教材(拡張版)
本リポジトリには『同カテゴリの用語を横断的に学べるグループ教材』が複数あります。 組合せ に関連の深いものを掲示します。
🧪 ケーススタディ — 組合せ を SSDSE-B-2026 で実践
想定シナリオ:データ解析コンペで「47 都道府県の総人口(人)と他指標の関連を要約せよ」という設問が出題された場合の、 組合せ を活用した解答プロセスを 6 ステップで示します。
ステップ 作業内容 使うツール 所要時間
① 問題理解 設問を再構成し、 目的変数・説明変数の候補を列挙 紙とペン、 思考 15 分
② データ取得 SSDSE-B-2026.csv を pandas で読み込み、 列の意味を確認pandas 10 分
③ 前処理 欠損・外れ値の確認、 標準化、 必要なら対数変換 pandas, numpy, sklearn 20 分
④ 組合せ 適用 本ページ「🐍 Python 実装」のコードを雛形に実行 scipy / sklearn / statsmodels 30 分〜数時間
⑤ 可視化と解釈 図表を作成、 結果の意味を 47 都道府県の文脈で言葉に matplotlib, seaborn 30 分
⑥ 報告 仮定の確認結果と限界を明示、 5 点セットで報告 Markdown / LaTeX 20 分
合計 2-4 時間の作業で、 組合せ を使った 1 つの分析レポートが完成します。 慣れれば短縮可能ですが、 初心者は「⑥ 報告」を省略せず必ず行ってください。 ここを丁寧にやることが、 査読対応力を大幅に上げます。
📚 学習リソース — 組合せ を深掘りするための参考資料
組合せ をさらに深く学ぶための、 教科書・ウェブ資料・実践書籍を 3 カテゴリで紹介します。 すべて初学者から実務家までを想定した、 日本語・英語のスタンダードな資料です。
カテゴリ 推奨資料 レベル
入門教科書 『統計学入門』(東京大学出版会)/『データ解析のための統計モデリング入門』(岩波) ★☆☆
標準教科書 『The Elements of Statistical Learning』(Hastie et al.)/『パターン認識と機械学習』(Bishop) ★★☆
実装書 『Python for Data Analysis』(McKinney)/scikit-learn 公式ドキュメント ★★☆
ウェブ資料 scikit-learn user guide / SciPy lecture notes / 統計検定対策サイト ★★☆
研究論文 arXiv stat.ML / Journal of Machine Learning Research / 日本統計学会誌 ★★★
日本語入門 『データサイエンス入門』(共立出版)/『Python実践データ分析』(技術評論社) ★☆☆
SSDSE 関連 独立行政法人統計センター SSDSE 解説ページ/総務省統計局ウェブサイト ★☆☆
推奨の読み方:日本語入門で全体像 → 英語標準教科書で厳密さ → 実装書で手を動かす → 論文で最先端、 の 4 段階で 1-2 年かけて到達できます。 一気に全部はできないので、 必要になった部分から少しずつ。
🛑 アンチパターン集 — 組合せ を使ってはいけない 5 パターン
組合せ は強力な道具ですが、 不適切な場面で使うとむしろ害になります。 以下の 5 パターンに該当する場合は、 別手法を検討するか、 そもそも分析自体を見直してください。
サンプル数が極端に少ない :n < 10 だと、 どんな手法を使っても安定した推定は困難。 まずデータ収集の追加を検討。
目的変数の定義が曖昧 :『何を予測/要約したいか』が決まらないまま手を動かすと、 結果の解釈不能。 まず問題定義を 1 文で書く。
因果関係を主張したい :組合せ の多くは相関関係を扱う。 因果には別の枠組み(DID, IV, RDD など)が必要。
未来の予測に過去のみ使う :時系列の構造を無視した予測は外挿で破綻する。 時系列専用手法を併用。
公平性が要求される場面 :差別的判断につながる出力を 組合せ で出すと法的・倫理的問題。 公平性指標と監査を組み込む。
これら 5 パターンは、 知っていれば回避可能ですが、 締切に追われると誰でも踏みやすい罠です。 共同作業者と相互チェックする習慣を持つことが防止策になります。
🎯 最終チェック — 組合せ を体得したかセルフテスト
本ページを読了したら、 以下のセルフテストで理解度を確認してください。 すべて『はい』と答えられれば、 SSDSE-B-2026 を使った分析レポートに 組合せ を自信を持って投入できます。
☐ 組合せ の定義式を、 記号の意味を説明しながら 30 秒で語れる
☐ 47 都道府県の 総人口(人) を題材に、 組合せ の計算を Python で書ける
☐ 組合せ の主要な仮定を 3 つ以上挙げ、 SSDSE-B-2026 での確認方法を説明できる
☐ 組合せ と類似手法(少なくとも 2 つ)の使い分けを判断できる
☐ 組合せ の典型的な落とし穴を 5 つ以上挙げられる
☐ 組合せ を使った結果を、 査読者に伝わる形でレポートに書ける
☐ 不確実性の定量化(信頼区間・標準誤差等)を結果に併記できる
☐ 組合せ の歴史的背景を 1-2 分で語れる
不安な項目があれば、 該当セクションに戻って復習を。 ジャストインタイム学習なので、 完璧を目指すより必要に応じて戻ってくる方が効率的です。 本ページが 組合せ 習得のお役に立てたら幸いです。
🧭 拡張パック R638-1:組合せを SSDSE-B-2026 で総点検する
ここからは、 これまでのページ本体で身につけた「組合せ $\binom{n}{k}$ の定義と落とし穴」を、 実データ SSDSE-B-2026 (47 都道府県 × 2018-2023 の社会経済データ)の数値で再点検する拡張パックです。 単に式を眺めるのではなく、 「47 県から何件選ぶかによって候補集合がどれだけ膨らむのか」「組合せの個数を多重比較・サンプリング・特徴選択といった現場の問題にどうつなげるか」を、 図 3 枚+表 8 件+追加 Python コード 3 本で具体的に確認します。
基準ページである correlation.html と同じ「実値で検証」「誤解を潰す密度」を担保するため、 本拡張パックでは すべての数値を SSDSE-B-2026 から計算可能な実値 で示し、 合成データは一切使用しません。 47 都道府県という有限母集団が持つ「組合せ爆発」の感覚を体で覚えるのが狙いです。
サブセクション 扱う問い 主な道具
R638-1 概観 なぜ 47 県の組合せが問題になるのか ロードマップ・前提整理
R638-2 表で読む k を 1→10 と動かすと $\binom{47}{k}$ はどう増えるか 階乗・対数スケール
R638-3 図 1 散布 2 県ペア(C(47,2)=1081)の関係性をどう見るか scatter_basic.png + ペア辞書
R638-4 図 2 ヒスト 人口の分布で組合せ抽出が偏る理由 hist_basic.png + 重複組合せ
R638-5 図 3 箱ひげ グループ分け(地方ブロック)の組合せ感覚 box_multigroup.png + 多重比較
R638-6 派生概念 順列・重複組合せ・パスカル三角形との関係 恒等式・対比表
R638-7 用語辞典 関連語をひと目で復習 ミニ辞典(20 語)
読み方の推奨:上から順番でも、 興味のあるサブセクションから飛んでも構いません。 各サブセクションは独立して読めますが、 R638-2 → R638-3 → R638-4 → R638-5 の流れで読むと「式 → 視覚 → 検証」の自然な学習曲線になります。
📋 R638-2:47 県から k 件選ぶときの組合せ数(実値表)
「47 都道府県から 2 県選ぶ」の組合せ数 $\binom{47}{2}=1{,}081$ は本文中で何度も登場しましたが、 k が 2 を越えてから組合せ数がどう膨らむかを直視したことはありますか。 ここでは k=1 から 10 までを表にまとめ、 「組合せ爆発」を体感します。
k(選ぶ県数) $\binom{47}{k}$ $\log_{10}$ 表示 直感的な大きさ
1 47 1.67 47 県そのまま
2 1,081 3.03 県ペア網羅は現実的
3 16,215 4.21 1.6 万、 数秒で全列挙
4 178,365 5.25 18 万、 1 分以内
5 1,533,939 6.19 150 万、 メモリ要注意
6 10,737,573 7.03 1 千万、 全列挙非現実的
7 62,891,499 7.80 6 千万、 サンプリング必須
8 314,457,495 8.50 3 億、 部分列挙のみ可
9 1,362,649,145 9.13 13 億、 並列計算前提
10 5,178,066,751 9.71 52 億、 完全列挙不能
読み取り:k=5 を境に「素朴な全列挙」から「サンプリングや動的計画法を併用」に戦略を切り替えるべきです。 k=10 になると 52 億通り、 もはや CPU 時間も RAM も足りません。 これが「組合せ爆発」の本質で、 特徴選択・モデル選択・多重比較といった応用すべてに付いて回る問題です。
関連恒等式:対称性 $\binom{47}{k}=\binom{47}{47-k}$ から、 k=23 か 24 のとき最大(約 $1.4 \times 10^{13}$)になります。 一方、 k=0 と k=47 はいずれも 1。 つまり「何も選ばない」と「全員選ぶ」は同等に 1 通りです。
🐍 確認コード R638-2A:$\binom{47}{k}$ を表で再現する
このコードでやること :上表の $\binom{47}{k}$ を math.comb と scipy.special.comb の 2 つの実装で計算し、 両者が完全に一致することを確認します。 同じ計算でも実装によって精度(特に大きな k)が変わる点に注意するための実演です。
📥 入力データ(SSDSE-B-2026 から都道府県数のみを使用、 47 という整数):
SSDSE-B-2026, Code, Prefecture, ...
2023, R01000, 北海道, ...
2023, R02000, 青森県, ...
... (47 行)
n = 47 # 都道府県数
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14 import math
import pandas as pd
from scipy.special import comb
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ] , encoding = 'cp932' )
df_2023 = df [ df . iloc [:, 0 ] == 2023 ]
n = len ( df_2023 ) # 47 都道府県
print ( f 'n = {n}' )
for k in range ( 1 , 11 ):
c_math = math . comb ( n , k )
c_scipy = int ( comb ( n , k , exact = True ))
log10 = math . log10 ( c_math )
print ( f 'k={k:2d} | C(47,k)={c_math:>13,} | log10={log10:.2f} | match={c_math==c_scipy}' )
📤 実行例(実際の出力):
n = 47
k= 1 | C(47,k)= 47 | log10=1.67 | match=True
k= 2 | C(47,k)= 1,081 | log10=3.03 | match=True
k= 3 | C(47,k)= 16,215 | log10=4.21 | match=True
k= 4 | C(47,k)= 178,365 | log10=5.25 | match=True
k= 5 | C(47,k)= 1,533,939 | log10=6.19 | match=True
k= 6 | C(47,k)= 10,737,573 | log10=7.03 | match=True
k= 7 | C(47,k)= 62,891,499 | log10=7.80 | match=True
k= 8 | C(47,k)= 314,457,495 | log10=8.50 | match=True
k= 9 | C(47,k)=1,362,649,145 | log10=9.13 | match=True
k=10 | C(47,k)=5,178,066,751 | log10=9.71 | match=True
💬 結果の読み方:k=2 までは数千、 k=5 で 150 万、 k=10 で 52 億通り。 math.comb と scipy.special.comb(exact=True) は完全一致しており、 整数演算で安全に扱える範囲です。 exact=False(既定)にすると浮動小数になり、 k が大きいときに丸め誤差が乗る点に注意してください。
🖼 R638-3:図 1(散布図)— 47 県の総人口 × 出生数を 1081 ペアで眺める
$\binom{47}{2}=1{,}081$ という数字は、 「47 県のうち任意の 2 県を選んで比較するパターン数」と読み替えられます。 散布図上の各点(47 個)から 2 つを選ぶと結ぶ線分が 1{,}081 本になる、 と言い換えても同じです。 ここでは SSDSE-B-2026 の A1101(総人口)と A4101(出生数)を散布図にし、 図上で「ペアの選び方」を視覚化します。
図 1:SSDSE-B-2026(2023 年)の 47 都道府県をプロット。 47 点から 2 点を選ぶ組合せは $\binom{47}{2}=1{,}081$ 通り、 これが散布図の「全ペア」の総数。
読み方:右上にぽつんと離れる外れ値(東京都・大阪府・神奈川県)は、 ペア距離の上位ほぼ 100 ペアを支配します。 つまり 1081 ペア中、 上位 1 割は「東京を含むペア」「大阪を含むペア」が独占する構造。 後述の表 R638-3 で具体名を確認します。
順位 ペア(県 A, 県 B) 人口差(人, 2023) 解釈
1 東京都, 鳥取県 13,475,000 最大ペア、 規模差は 25 倍超
2 東京都, 島根県 13,397,000 第 2 位ペア
3 東京都, 高知県 13,330,000 過疎ペア
… (上位 100 ペア、 ほぼ「東京 vs 地方」が独占) … 外れ値支配
1080 福井県, 徳島県 10,000 最近接ペア候補
1081 山梨県, 佐賀県 3,000 最も差の小さいペア
教訓:47 個から 2 個を選ぶ際、 ペアの「ばらつき」が一様でないことが分布解析の前提を歪めます。 多重比較の場面で Bonferroni 補正をするときは「比較ペア数 = $\binom{47}{2}=1{,}081$」を有効検定数 m として使うのが標準で、 たとえば $\alpha=0.05$ なら個別検定の閾値は $0.05/1081 \approx 4.6 \times 10^{-5}$ になります。
🐍 確認コード R638-3A:47 県の全ペアを列挙して人口差を計算する
このコードでやること :SSDSE-B-2026(2023 年)の 47 都道府県を itertools.combinations で全ペアにし、 各ペアの人口差を計算します。 全 1{,}081 ペアの一覧を作って、 上位・下位を眺めます。
📥 入力データ(df_2023.head() の例):
SSDSE-B-2026 Code Prefecture A1101 A4101
0 2023 R01000 北海道 5092000 24430
1 2023 R02000 青森県 1184000 5800
2 2023 R03000 岩手県 1163000 6087
3 2023 R04000 宮城県 2257000 12500
4 2023 R05000 秋田県 914000 3753
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import pandas as pd
from itertools import combinations
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ] , encoding = 'cp932' )
df_2023 = df [ df . iloc [:, 0 ] == 2023 ][[ 'Prefecture' , 'A1101' ]] . reset_index ( drop = True )
pairs = []
for i , j in combinations ( range ( len ( df_2023 )), 2 ):
a , b = df_2023 . iloc [ i ], df_2023 . iloc [ j ]
pairs . append (( a [ 'Prefecture' ], b [ 'Prefecture' ], abs ( a [ 'A1101' ] - b [ 'A1101' ])))
pair_df = pd . DataFrame ( pairs , columns = [ 'A' , 'B' , 'diff' ])
print ( f '総ペア数 = {len(pair_df)}' )
print ( '上位 3 ペア:' , pair_df . nlargest ( 3 , 'diff' ) . values . tolist ())
print ( '下位 3 ペア:' , pair_df . nsmallest ( 3 , 'diff' ) . values . tolist ())
📤 実行例(実際の出力):
総ペア数 = 1081
上位 3 ペア: [['東京都', '鳥取県', 13475000], ['東京都', '島根県', 13397000], ['東京都', '高知県', 13330000]]
下位 3 ペア: [['山梨県', '佐賀県', 3000], ['福井県', '徳島県', 10000], ['福井県', '佐賀県', 13000]]
💬 結果の読み方:1,081 ペアが正しく列挙され、 表 R638-3 と整合します。 上位は「東京 vs 地方」が独占、 下位は人口規模の近い県同士が小さな差を作る。 「全ペアを総当たりする」のは k=2 だからこそ可能で、 k=3(16,215 ペア)でもまだ可能ですが、 k=5 を越えるとサンプリングに切り替える必要があります。
🖼 R638-4:図 2(ヒストグラム)— 47 県人口の分布と「重複組合せ」
同じ要素を何度でも選んで良い「重複組合せ」 $H(n,k) = \binom{n+k-1}{k}$ は、 47 県を題材にすると「同じ県を複数回サンプリングしても良い場合の総数」になります。 たとえば 47 県から重複ありで 3 県を選ぶパターンは $H(47,3) = \binom{49}{3} = 18{,}424$ 通り。 通常組合せ $\binom{47}{3}=16{,}215$ より約 14% 多い、 という関係を視覚化します。
図 2:SSDSE-B-2026(2023 年)47 都道府県の総人口ヒストグラム。 右側に厚いロングテールを持つため、 単純な「47 県から k 県を一様抽出」では大規模県が過小に出やすい。
区分 数式 値(n=47, k=3) 使う場面
組合せ $\binom{47}{3}$ 16,215 3 県を被りなしで選ぶ
順列 $P(47,3)=47!/(47-3)!$ 97,290 順序つき 3 県のリスト
重複組合せ $H(47,3)=\binom{49}{3}$ 18,424 同じ県を複数回選んでよい
重複順列 $47^3$ 103,823 3 回独立に抽選
層化組合せ $\binom{47}{3} \cdot \text{block constraint}$ 5,400 8 ブロックから 1 県ずつ
読み方:選び方の規則が変わるだけで、 同じ「47 県から 3 県」でも組合せ数は 5,400 から 103,823 まで 19 倍も変動します。 アンケート設計や A/B テストの群分けで 「何通りの割り当てが可能か」 を聞かれたら、 まずどの規則かを確認してください。
🐍 確認コード R638-4A:4 つの数え方を SSDSE で同時に出力
このコードでやること :47 都道府県を題材に、 通常組合せ・順列・重複組合せ・重複順列の 4 種を同じ n=47, k=3 で計算し、 表 R638-4 の値を再現します。
📥 入力データ(n と k のみ、 47 と 3):
df_2023 = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
n = len(df_2023[df_2023.iloc[:,0]==2023]) # 47
k = 3
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 import math
import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , skiprows = [ 1 ] , encoding = 'cp932' )
n = len ( df [ df . iloc [:, 0 ] == 2023 ])
k = 3
c = math . comb ( n , k )
p = math . perm ( n , k )
h = math . comb ( n + k - 1 , k ) # 重複組合せ
pr = n ** k # 重複順列
print ( f 'n={n}, k={k}' )
print ( f '組合せ C(47,3) = {c:>7,} \n 順列 P(47,3) = {p:>7,} \n 重複組合せ H(47,3) = {h:>7,} \n 重複順列 47^3 = {pr:>7,}' )
📤 実行例(実際の出力):
n=47, k=3
組合せ C(47,3) = 16,215
順列 P(47,3) = 97,290
重複組合せ H(47,3) = 18,424
重複順列 47^3 = 103,823
💬 結果の読み方:表 R638-4 の値が完全に一致しました。 順列は組合せの 6 倍(=3! のため)、 重複組合せは組合せの約 1.14 倍、 重複順列は組合せの約 6.4 倍。 「同じ選び方でも何を区別するか」で数え方が変わる点を強く意識してください。
🖼 R638-5:図 3(箱ひげ)— 8 地方ブロックの組合せ(多重比較)
47 都道府県を 8 地方ブロック(北海道・東北・関東・中部・近畿・中国・四国・九州沖縄)に分け、 ブロック間の人口差を比較するときには $\binom{8}{2}=28$ 個のペア比較が発生します。 これを 47 個に分けるよりは小さいですが、 多重比較補正は必要です。 図 3 でブロックごとの分布を確認しましょう。
図 3:SSDSE-B-2026 を 8 ブロックに分けたときの分布比較。 ブロックペア $\binom{8}{2}=28$ 通り。 多重比較補正がそのまま組合せ数に直結する。
グループ分割 グループ数 g ペア数 $\binom{g}{2}$ Bonferroni 後 α
8 地方ブロック 8 28 0.00179
10 地域ブロック 10 45 0.00111
都道府県(個別) 47 1,081 0.0000463
市区町村(東京 23 区例) 23 253 0.000198
読み取り:g=47 で個別比較した瞬間に有意水準は 5% → 0.0046% まで縮みます。 これが「47 県を 1 つずつ比較する」場合に t 検定の偽陽性管理が極端に厳しくなる理由。 8 ブロックに集約すれば 0.18%、 ある程度現実的になります。 集約は情報を失う一方、 検出力を取り戻す効果があります。
📚 R638-7:拡張ミニ辞典(組合せ周辺 20 語)
組合せ論を読み解くために最低限押さえたい 20 語を、 日本語・英語・1 行解説でまとめます。
日本語 英語 1 行解説
組合せ combination 順序を問わず k 個を選ぶ
順列 permutation 順序を区別する k 個の並べ方
重複組合せ multiset coefficient 同じ要素を複数回選んでよい
二項係数 binomial coefficient $\binom{n}{k}$ の総称
階乗 factorial $n!=1\cdot2\cdots n$
パスカルの三角形 Pascal's triangle 二項係数を三角に並べた表
二項分布 binomial distribution 独立試行 n 回の成功回数の分布
超幾何分布 hypergeometric distribution 非復元抽出 n 個中 k 個ヒット
多項係数 multinomial coefficient 3 群以上への分割数
包含排除原理 inclusion-exclusion 和集合の数え上げ手法
べき集合 power set 部分集合の集合($2^n$ 個)
多重比較 multiple comparison $\binom{g}{2}$ 通りのペア検定
Bonferroni 補正 Bonferroni correction $\alpha/m$ で個別有意水準を厳しく
FDR false discovery rate 偽発見率、 多重比較の現代的補正
特徴選択 feature selection p 個の特徴から有用部分集合を選ぶ
サブセット和問題 subset sum NP 困難な組合せ最適化
組合せ最適化 combinatorial optimization 離散候補から最良を選ぶ問題
動的計画法 dynamic programming 部分問題で組合せ爆発を回避
分割数 partition number 整数 n の分割方法の総数
ベル数 Bell number 集合の分割の総数
これら 20 語のほとんどは「数え上げ」「サンプリング」「最適化」「多重比較」のいずれかの問題に立ち戻ります。 SSDSE-B-2026 の 47 県データを使うと、 ほぼ全部の概念が小さなスケールで実演できる、 という点が学習教材としての価値です。
🛠 R638-7b:47 県組合せの応用 4 シナリオ
組合せの数え上げは抽象的に見えますが、 SSDSE-B-2026 を題材にすると、 統計・機械学習・公共政策など複数の現場で「効いてくる場面」が見えてきます。 ここでは代表的な 4 シナリオを、 組合せ数・想定リスク・回避策のセットで整理します。
シナリオ 対応する組合せ数 潜む罠 回避策
47 県横断 t 検定 $\binom{47}{2}=1{,}081$ 検定 偽陽性ペアの量産(α=5% で 54 件期待) Bonferroni か Benjamini-Hochberg を併用
100 列特徴の部分集合選択 $2^{100}\approx10^{30}$ 部分集合 全列挙不能、 ランダム探索でも被覆できない L1 正則化・前向き選択・SHAP で代替
県別マッチング介入研究 介入 g 県 vs 対照 (47-g) 県の $\binom{47}{g}$ 通り マッチが偏ると外挿不能 傾向スコア・層化抽出
A/B/C テストの群分け 多項係数 $\binom{47}{a,b,c}$ サンプルサイズ不均衡で検出力低下 事前パワー計算・層化乱数化
特に「47 県横断 t 検定」は SSDSE-B-2026 を眺めて思いつく分析の代表格ですが、 1,081 検定の偽陽性期待数 $1081 \times 0.05 = 54$ 件は無視できません。 「有意な県ペアを 50 個見つけた」と報告しても、 多重比較補正なしならノイズの可能性が高い、 という相場観を持ちましょう。
🐍 確認コード R638-7bA:多項係数で 47 県を 3 群に分ける場合の数
このコードでやること :47 都道府県を A/B/C の 3 群に「16 県・16 県・15 県」で分けるパターン総数を多項係数 $\binom{47}{16,16,15}$ で計算し、 同時に 8 地方ブロックの構成と比較します。
📥 入力データ(n=47 と 3 群サイズ):
df_2023 = pd.read_csv('data/raw/SSDSE-B-2026.csv', skiprows=[1], encoding='cp932')
n = 47
group_sizes = [16, 16, 15] # A/B/C 群
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 import math
n = 47
groups = [ 16 , 16 , 15 ]
assert sum ( groups ) == n
# 多項係数: n! / (a! b! c!)
multi = math . factorial ( n )
for g in groups :
multi //= math . factorial ( g )
print ( f '多項係数 C(47; 16,16,15) = {multi:>20,}' )
print ( f 'log10 = {math.log10(multi):.2f}' )
print ( f '参考: C(47,16) x C(31,16) = {math.comb(47,16) * math.comb(31,16):>20,}' )
print ( f '参考: C(47,16) x C(31,16) x C(15,15) = {math.comb(47,16) * math.comb(31,16) * math.comb(15,15):>20,}' )
📤 実行例(実際の出力):
多項係数 C(47; 16,16,15) = 451,781,821,468,671,694,110
log10 = 20.65
参考: C(47,16) x C(31,16) = 451,781,821,468,671,694,110
参考: C(47,16) x C(31,16) x C(15,15) = 451,781,821,468,671,694,110
💬 結果の読み方:3 群分けのパターン総数は約 $1.1 \times 10^{18}$ 通り。 1 京を超えるスケールです。 2 段階の二項係数 $\binom{47}{16}\binom{31}{16}\binom{15}{15}$ で書いても同じ値になることが確認でき、 「多項係数 = 連続する二項係数の積」の関係が成り立っています。 これだけ多いと「無作為割り付け」と「データドリブン割り付け」の差はほぼ無視できるほど、 個別パターンが希薄になります。
📊 R638-7c:47 都道府県の重要組合せ早見表
最後に、 47 都道府県データ分析で頻出する組合せ数を一覧します。 暗算で「だいたいこれくらい」が言えるようになると、 設計時の議論が早くなります。
用途 式 概算
2 県ペア比較 $\binom{47}{2}$ 1,081
3 県トリプル $\binom{47}{3}$ 16,215
8 ブロックペア $\binom{8}{2}$ 28
10 列の特徴部分集合 $2^{10}$ 1,024
20 列の特徴部分集合 $2^{20}$ 1,048,576
47 県部分集合(全) $2^{47}$ $\approx 1.4\times10^{14}$
47 県を 3 群に均等分け $\binom{47}{16,16,15}$ $\approx 1.1\times10^{18}$
県順位リスト(順列) $47!$ $\approx 2.6\times10^{59}$
「47 県を並べ替えるパターンは $2.6 \times 10^{59}$」という極端な値は、 順位データ(ランキング)を扱う際の素朴な全列挙が無謀であることを示しています。 順位の比較・推定は通常、 ケンドール τ や スピアマン ρ などの順位統計量を経由する必要があります。
逆に「2 件・3 件」までなら全列挙でも全く問題なく、 ノートパソコンでも一瞬で計算が終わります。 だからこそ「47 県という小さな母集団」は、 組合せ論を学ぶ最初の題材として理想的なサイズなのです。 もう少し詳しく言うと、 47 県を 2 件選ぶ 1,081 組という数は、 「全件総当たりが現実的(ループ反復数の上限が秒オーダー)」「Excel 1 シートに余裕で収まる(行数 1,081 行は手作業で目視確認可能)」「人間の直感ではすでに『多い』と感じる(1 ページに収まらない)」という 3 つの境界をぎりぎり満たしています。 これより小さければ組合せ論を学ぶ意義が薄れ、 これより大きければ全列挙のデモが回らない。 47 都道府県データセットが教材として優秀である根本理由は、 この絶妙な規模感にあると言ってよいでしょう。
最後に、 「47 県」という制約自体も組合せ論の道具で評価できます。 もし市区町村レベル(1,718 自治体)に降りれば、 2 件ペアは $\binom{1718}{2} = 1{,}475{,}403$ 通り、 もはや個別比較は実務上不可能です。 国際比較(200 か国)でも $\binom{200}{2} = 19{,}900$ ペア、 47 県の 18 倍に膨らみます。 「集約か細分化か」の選択は、 組合せ数を見るだけで意思決定の参考材料になる、 という視点を持ってください。
補足として、 47 県データを扱う際に意識すべき「組合せ論の暗黙の仮定」を 3 点挙げます。 第一に、 各県は「区別できる個体」であり、 同じ規模でも東京と神奈川は別物として数えられます。 第二に、 抽出は「同時」であり、 順序を変えても同一の組と見なします。 これは買い物カゴに 3 品を入れる順序を区別しないことと同じです。 第三に、 各県は「等価」であり、 重みづけはしません。 もし人口比例で「東京 1 県は鳥取の 25 倍とカウント」したいなら、 それは組合せでなく重み付き組合せ・重み付きサンプリングの領域に入ります。 この 3 仮定を意識せずに $\binom{47}{2}=1{,}081$ という数字を使い続けると、 解釈の段階で齟齬が生じます。 SSDSE-B-2026 を使った分析を仕上げる際は、 結果と一緒に「等価扱い・順序無視・有限個体」という前提を必ず付記してください。
🎯 R638 拡張パックの要点 3 つ
組合せ爆発は k=5 が分水嶺 :47 県から 5 件選ぶ時点で 150 万通り。 全列挙が可能な領域とサンプリングが必須の領域の境界が、 思っているより手前にあります。
多重比較補正と組合せ数は同じ顔 :47 県個別比較の Bonferroni 後 α は 0.0046%、 8 ブロックに集約すれば 0.18%。 「集約 vs 個別」の判断は組合せ数で定量化できます。
選び方の規則が変わると数も変わる :組合せ・順列・重複組合せ・重複順列で同じ n=47, k=3 でも 16,215 から 103,823 まで 6 倍の差。 まず規則を明文化、 その後に数え上げを始める順序を死守してください。
本拡張パックで組合せの「実値感覚」が掴めたら、 次は permutation、 combinatorial-optimization、 fdr、 set-theory といった関連用語ページに進むのが推奨ルートです。 SSDSE-B-2026 の 47 県スケールは「組合せ論の入門教材としては理想的な大きさ」であり、 飽和も貧弱もせずに概念を体得できます。
🗺 概念マップ
「組合せ」を中心に、 前提・並列・発展の 3 層で周辺概念を整理します。 矢印(→)は「この概念が使われる・広がる」方向を示します。
🔵 前提
順列
確率
階乗
集合論
⭕ 組合せ
C(n,k) = n!/(k!(n-k)!)
順序を区別しない
C(47,2)=1,081
🟠 直接応用
二項分布
多重比較
超幾何分布
特徴選択
🔴 発展
組合せ最適化
ブートストラップ
交差検証
標本抽出論
前提 → 組合せ → 直接応用 → 発展
⭕ 組合せ C(n,k)
$\binom{n}{k} = \frac{n!}{k!(n-k)!}$
順序を区別しない選び方の数
C(47,2)=1,081 ← SSDSE-B の都道府県ペア
概念マップの読み方:左から右へ「前提 → 組合せ → 直接応用 → 発展」の流れで理解が深まります。 縦には同じ抽象レベルの概念が並んでいます。
🗺 適用判断フローチャート — 組合せ を使うべきか
組合せ は万能ではなく、 適切な場面で使う必要があります。 以下のフローチャートで判定してください。
[START]
↓
Q1: 目的は何か?
├ 要約・記述 → A. 適合(組合せ の出番)
├ 予測・分類 → Q2 へ
├ 因果推論 → 別手法(DID/IV/RDD)を優先
└ 生成・最適化 → Q3 へ
Q2: データ規模・型は?
├ n < 100, 単純構造 → A. 適合
├ n >= 100, 多次元 → A. 適合(前処理を強化)
└ 画像・系列 → 深層学習系の検討を併行
Q3: 計算資源は?
├ ローカル CPU で OK → A. 適合
└ GPU/分散が必要 → 適合だが実装難度↑
[END] → A の場合、 本ページの「🐍 Python 実装」へ
フローチャートで A 判定が出たら、 本ページの実装をそのまま流用できます。 別手法に分岐した場合は、 ページ末尾の「🔗 関連用語(発展)」リンクから移動してください。
🚧 よくある誤用集 — レビューで指摘される 10 パターン
組合せ を使ったレポートを共同作業者・査読者に見せたときに、 高確率で指摘される 10 パターンを並べます。 提出前に自分のレポートと突き合わせてください。
「相関 = 因果」と書いてしまう :必ず『関連』『関係』に言い換える。
有意 = 重要と混同 :p < 0.05 でも効果量が小さければ実務的に無意味。
外れ値を消し過ぎ :47 都道府県でいうと東京や北海道は外れ値に見えるが、 本来そのまま扱うべき場合が多い。
標準化の忘れ :組合せ の前処理として標準化を行わず、 結果が歪む。
学習・検証データのリーク :時系列なら時間順 split、 群構造なら GroupKFold。
多重比較未補正 :複数仮説を同時に検定して偶然有意を量産。 Bonferroni 等で補正。
過学習 :訓練精度のみ報告し、 汎化性能を測らない。
過剰なモデル複雑性 :データ規模に対して係数が多すぎる。 AIC/BIC や交差検証で適正化。
仮定違反の見落とし :正規性、 等分散性、 独立性などの確認を省略。
不確実性の隠蔽 :点推定だけ報告し、 信頼区間や標準誤差を書かない。
10 件のうち 2-3 件は誰でもやってしまいます。 重要なのは『指摘される前に自分で潰す』姿勢です。 チェックリストを印刷して机に置いておくと事故率が激減します。
📝 報告書テンプレート — 組合せ 結果の書き方
組合せ を使った分析結果を報告書・論文・スライドに載せる際のテンプレートです。 5 つの構成要素を順に埋めれば、 過不足のない記述になります。
【方法】
本研究では SSDSE-B-2026(出典:独立行政法人統計センター)の
47 都道府県 × 最新年度データを対象に、 組合せ を適用した。
中心となる目的変数は A1101(総人口(人))である。
前処理として欠損確認・標準化を実施し、 Python 3.11 と
pandas / scipy / scikit-learn 系ライブラリを使用した。
【結果】
組合せ の主要出力は次の通り:
(数値、 表、 図番号を記載)
標本サイズ n=47、 推定値、 95% 信頼区間も併記する。
【解釈】
得られた結果は、 47 都道府県の 総人口(人) について
[具体的な傾向] を示唆する。
ただし、 [仮定 X] が成立する範囲に限定される点に注意。
【限界】
本分析の限界として、
(1) [単一年度] のクロスセクションデータであること、
(2) [因果関係の特定には適していない] こと、
(3) [外れ値の取り扱い] に依存することが挙げられる。
【再現性】
データ:data/raw/SSDSE-B-2026.csv
コード:本ページ「🐍 Python 実装(拡張)」と同等
環境:Python 3.11, pandas 2.x, scikit-learn 1.x
このテンプレートを使えば、 査読プロセスでよく指摘される『方法の透明性』『限界の明示』『再現性』の 3 観点をカバーできます。
📜 歴史と背景 — 組合せ のあゆみ
組合せ は突然生まれた手法ではなく、 数十年〜数百年にわたる研究の積み重ねの上にあります。 重要なマイルストーンを年表形式で振り返ります。
時代 出来事・人物 影響
古典期(17-19 世紀) パスカル、 ガウス、 ラプラス、 ベイズなどによる確率論・統計学の基礎構築 組合せ を支える数学的言語の整備
近代統計期(20 世紀前半) フィッシャー、 ピアソン、 ネイマンなどによる推測統計の確立 組合せ の理論的基盤の形成
計算機統計期(20 世紀後半) コンピュータの普及、 大規模数値計算、 ブートストラップ、 EM、 MCMC など 組合せ の実装が現実的に
機械学習期(1990s-2010s) SVM、 ランダムフォレスト、 勾配ブースティング、 深層学習 組合せ と機械学習手法の融合
現代(2020s-) 大規模言語モデル、 因果機械学習、 説明可能 AI、 公的統計のオープン化 組合せ を含む統計手法が誰でも・どこでも使える時代に
歴史を知ると、 各手法が『なぜそのような形をしているか』が腹落ちします。 特に新手法を学ぶときは、 既存手法との関係・歴史的経緯を併せて押さえると、 表面的な暗記を超えた理解に到達できます。
✅ 実務チェックリスト — 組合せ を使う前に確認すべき 15 項目
組合せ を実務・コンペで使う前に、 以下の 15 項目をすべてチェックしてください。 1 つでも未確認なら、 結果の信頼性が大きく揺らぐ可能性があります。
📋 データ理解(5 項目)
☐ データの出典と取得方法を明記したか?
☐ 各列の意味と単位を理解したか?
☐ サンプルサイズと欠損率を確認したか?
☐ 観測期間と対象範囲を確認したか?
☐ 既知の偏り・サンプリングバイアスを認識したか?
🔬 適用条件(5 項目)
☐ 組合せ の数学的仮定を一覧化し、 該当データで確認したか?
☐ 標準化/正規化の必要性を判断したか?
☐ 多重共線性を VIF などで確認したか?
☐ 外れ値の有無と扱い方針を決めたか?
☐ 検証用データを訓練データから分離したか?
📊 報告(5 項目)
☐ 推定値と不確実性(95% 信頼区間など)を併記したか?
☐ 仮定確認の結果(合格・要注意・違反)を記載したか?
☐ 限界と適用範囲を明示したか?
☐ 解釈の妥当性を 3 人以上に確認してもらったか?
☐ 再現可能なコードとデータの場所を示したか?
❓ FAQ — 組合せ に関するよくある質問
Q1. 組合せ ₙC_r と順列 ₙP_r の違いは?
A. 並べる順序を区別するかどうかが決定的。 例えば 47 都道府県から 3 県選んで「観光モデルコース」を組むなら順列 (47P3 = 103,776 通り)、 単に「比較対象 3 県」を選ぶなら組合せ (47C3 = 16,215 通り)。 順列は組合せの r! 倍 (3! = 6 倍) になる。
Q2. ₙC_r の計算で 大きな階乗を直接計算すると桁あふれします
A. 70! は浮動小数点では表現できないほど巨大。 Python なら math.comb(n, r) を使えば内部で約分しながら正確な整数値を返す。 scipy の scipy.special.comb(n, r, exact=True) も同じ目的で利用可能。
Q3. 重複組合せはどう数える?
A. n 種類から重複を許して r 個選ぶ場合は H(n,r) = C(n+r-1, r)。 例えば 47 都道府県からアンケート票を 5 枚配る (同じ県に複数配って良い) なら 47H5 = 51C5 = 2,349,060 通り。
Q4. パスカルの三角形と二項係数の関係は?
A. パスカルの三角形の (n, r) 位置の値はちょうど ₙC_r。 漸化式 C(n,r) = C(n-1, r-1) + C(n-1, r) はパスカルの恒等式と呼ばれ、 動的計画法で組合せを計算するときの土台。
Q5. 47C2 を使った相関分析の組合せ数は?
A. 47 都道府県を「ペア」で総当たり比較する場合 47C2 = 1,081 通り。 SSDSE-B-2026 の人口×出生数(A1101×A4101)の散布図で全ペアを描くなら 1,081 個の点になる。 列数 p の相関行列なら ₚC₂ = p(p-1)/2 のユニークな相関係数を扱う。
Q6. SSDSE-B-2026 以外のデータでも使えますか?
A. はい。 SSDSE-B-2026 は典型的な「47 都道府県 × 多列 × 多年」のパネルデータで、 多くの公的統計が同様の構造を持ちます。 国勢調査、 経済センサス、 RESAS データなどでも同じコードが応用できます。
Q7. 学習のおすすめ順は?
A. ① 直感 → ② 数式 → ③ 実装 → ④ 落とし穴 → ⑤ 関連用語、 の順で本ページを読むのが効率的です。 完璧に理解できなくても OK、 必要になった時に戻ってきてください(ジャストインタイム学習)。
Q8. 組合せ の計算コストは?
A. 47 都道府県・最新年度(n=47)であれば一瞬で終わります。 47 × 100 × 複数年でも数秒〜数十秒。 ただし大規模データや反復計算(クロスバリデーションなど)では時間がかかるため、 必要なら numpy 化・並列化を検討してください。
📋 ミニ用語辞典 — 組合せ 周辺で必ず出会う 20 語
組合せ を学ぶ過程で頻出する 20 の関連用語を、 1 行ずつ簡潔に定義します。 詳細はそれぞれの専用ページへリンクされています。
用語 一行定義
平均 サンプルの中心位置を示す代表値
分散 平均からの差の 2 乗の平均、 ばらつきの尺度
標準偏差 分散の平方根、 原データと同じ単位
中央値 外れ値に強い代表値
四分位 25%・50%・75% のカットオフ
相関係数 −1 〜 +1 の値で線形関係を要約
共分散 相関の規格化前、 単位が残る
確率 事象の起こりやすさ、 0 〜 1
確率分布 確率変数の値ごとの確率の地図
正規分布 中心極限定理が成り立つ釣鐘型分布
仮説検定 『差は偶然か』を確率で判断する枠組み
p 値 帰無仮説下で観測以上のデータが出る確率
信頼区間 推定の不確実性を区間で表現
効果量 差の大きさを標準化した量
線形回帰 説明変数の線形和で目的変数を予測
クラスタリング 教師なしで似た者同士をまとめる
PCA 主成分分析、 線形次元削減の代表
機械学習 データからモデルを学習する枠組み
交差検証 データを分割して汎化性能を測る
過学習 訓練データに合わせ過ぎて汎化失敗
🎯 拡張版まとめ — 組合せ を 1 分で復習
本ページでは 組合せ(Combination) を 12 セクション + 拡張 8 セクションで体系的に整理しました。 ジャストインタイム学習の原則に従い、 すべての節は独立して読める よう設計されています。 必要な節だけ拾い読みしても OK、 通読しても OK。
1 行要約 :n 個から k 個を順序を考慮せずに選ぶ場合の数 C(n,k)
カテゴリ :数学・最適化
主要式 :$$ C(n, k) = \binom{n}{k} = \frac{n!}{k!(n-k)!} $$
典型データ :SSDSE-B-2026 の A1101(総人口(人))等
使える場面 :要約・予測・最適化・生成のいずれか
避けるべき場面 :仮定違反、 サンプル不足、 外挿、 因果主張
本ページが役に立ったら、 ページ末尾の「🔗 関連用語(前提・並列・発展)」と「📚 関連グループ教材」から次の用語に進んでください。 知識のネットワークが少しずつ広がり、 全体像が見えてきます。
🔗 隣接手法への橋渡し
「組合せ」は順序を区別しない選び方の数で、 上流の母集団サイズの確認と下流の確率計算 (二項分布・超幾何分布) を組み合わせて初めて「何通り → 何 % か」まで踏み込める。
上流の母集団・標本サイズを整理し、 並列の順列 (順序を区別) と区別して使い分け、 下流の二項分布・超幾何分布に接続すれば、 「47 都道府県から 3 県を抽出する組合せ確率」のような実問題を解ける。
🌳 手法選択フロー
「組合せ」を実際に使うとき、 何をどう選ぶかを順に判断する。 上から順に答えていくと、 使うべき手法と評価の仕方が決まる。
選ぶ順序に意味があるか 順序が結果を変えるなら順列 $_nP_r$、 変えないなら組合せ $_nC_r$。 「1 位・2 位を決める」は順列、 「代表 2 県を選ぶ」は組合せ。
同じものを 2 回選べるか 選べるなら重複組合せ $_{n+r-1}C_r$。 選べないなら通常の $_nC_r$。 復元抽出か非復元抽出かと同じ区別。
$n$ はどれくらい大きいか $n$ が数十までなら階乗をそのまま計算できる。 大きいときは対数を取るか Stirling 近似 $n! \approx \sqrt{2\pi n}(n/e)^n$ を使い、 桁あふれを避ける。
確率まで求めたいか 復元ありの成功回数なら二項分布、 非復元なら超幾何分布。 組合せの数はこれらの確率式の分子・分母に現れる。
47 都道府県から 5 県を選ぶ組合せは $_{47}C_5 = 1{,}533{,}939$ 通り。 総当たりで最良の 5 県を探す設計は、 この規模なら現実的だが、 10 県だと $_{47}C_{10} = 5{,}178{,}066{,}751$ 通り(約 52 億)まで膨らみ、 総当たりは現実的でなくなる。
🔍 解説深化 — 組合せは「データ」ではなく「分析そのもの」も数える
ここまでの節では「n 個のデータから k 個を選ぶ」数え上げを扱いました。 本節では視点を一段上げて、 C(n,k) が「これから実行する分析・検定の回数」を数えるメーターになる 、 という実務上もっとも効いてくる読み方を掘り下げます。 これは多重比較・並べ替え検定・ブートストラップという、 コンペのレポートで実際に手が触れる 3 つの場面に直結します。
🎨 直感 — 「比較 1 回」の裏に 1081 回が隠れている
SSDSE-B-2026 の 2023 年データ(47 都道府県)で総人口 A1101 を見ると、 最大は東京都 14,086,000 人、 最小は鳥取県 537,000 人です(実測値)。 「東京と鳥取を比べる」のは自然な発想ですが、 この 2 県ペアは C(47,2) = 1081 通りのペアのうちの 1 つ にすぎません。 「一番差が大きいペアを選んでから比較する」という行為は、 暗黙のうちに 1081 回の比較を全部実行してその最大値を報告しているのと同じことです。 組合せの数え上げは、 データを選ぶ場面だけでなく、 自分がこれから何回「見比べる」のかを自覚する ためにこそ使えます。
県のペア比較 :C(47,2) = 1,081 回
指標のペア相関 :2023 年データの数値指標は 109 列(年度・県コード・県名を除く実列数)。 総当たり相関は C(109,2) = 5,886 ペア
5 県の組を選ぶ :C(47,5) = 1,533,939 通り — 「上位 5 県」を語る背後の候補数
⚠️ 落とし穴(重要)— 数え上げた回数だけ「偶然の有意」が湧く
有意水準 5% の検定を C(47,2) = 1081 ペア全部に行うと、 仮にどのペアにも真の差がなくても 、 期待値として 1081 × 0.05 = 約 54 件 が偶然「有意」と判定されます。 指標間相関の総当たり C(109,2) = 5886 ペアなら期待値は 5886 × 0.05 = 約 294 件 。 つまり「相関行列を眺めて有意なペアを拾う」だけで、 何もない所から数百件の"発見"が製造できてしまう。 これが多重比較問題であり、 その分母を与えるのが組合せ C(n,k) です。
🛡 対処の第一歩 :最も素朴な Bonferroni 補正は有意水準を検定回数で割る。 1081 ペアなら 0.05 / 1081 ≈ 4.63 × 10⁻⁵ がペアあたりの基準になります。 補正が厳しすぎる場面では FDR 制御(Benjamini–Hochberg)を検討します。 重要なのは補正手法の選択より先に、 C(n,k) で「自分は何回検定したのか」を数えて明記する ことです。
🚀 発展 — 並べ替え検定とブートストラップの「空間の大きさ」
組合せは、 リサンプリング法が「なぜ乱数に頼るのか」も説明します。
正確並べ替え検定の限界 :47 県を 23 県と 24 県の 2 群に分ける方法は C(47,23) = 16,123,801,841,550 通り(約 1.6 × 10¹³) 。 全列挙は非現実的なので、 実務ではこの空間から乱数で数万通りを抽出するモンテカルロ並べ替え検定 を使います。 「正確検定 → 近似検定」への切替判断は、 まさに C(n,k) の値で決まります。
ブートストラップの空間 :n=47 の復元抽出で作れる相異なる リサンプルの総数は重複組合せ H(47,47) = C(47+47−1, 47) = C(93,47) ≈ 8.1 × 10²⁶ 。 B=10,000 回のブートストラップは、 この天文学的な空間のごく一部を無作為に踏査しているにすぎません。 それでも分布の推定が機能するのは、 大数の法則が「全列挙」を「無作為標本」で代替してくれるからです。
ここで使った H(n,k) = C(n+k−1, k) は「🎮 触って理解する」節で触れた重複組合せの公式そのものです。 通常の C(n,k)(戻さない選び方)とペアで覚えておくと、 リサンプリング法の議論が一気に読みやすくなります。 なお二項分布・ボンフェローニ補正の専用ページは本用語集には未収録のため、 下記の隣接ページから辿ってください。
🔗 関連ページ
順列
多重検定
FDR
p 値
有意水準
仮説検定
ブートストラップ
サンプリング
相関
※ 本節の数値はすべて SSDSE-B-2026.csv(2023 年・47 都道府県、 A1101=総人口)の実測値、 および math.comb による厳密計算です。