論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
組合せ
Combination
数学基礎

🔖 キーワード索引

この用語と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。

#数学基礎#組合せ#二項係数#場合の数#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.combmath.comb, math.perm, itertools.combinations, scipy.special.comb

💡 30秒で分かる結論

🍰 まずはやさしく

組合せは、グループからメンバーを選ぶ方法です。

選ぶ順番を気にせず、数えたいときに使います。

部活の代表者を数人で選ぶときなどに便利です。

ここでは、組合せの基本と計算方法を読みます。

組合せは、 n 個から k 個を順序を区別せず選ぶ方法の数。 確率・統計の根幹。

ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた 階乗オーバーフロー/組合せと順列の混同/0!=1 を忘れる には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたときです。

💡 30 秒で分かる結論(拡張版)

時間が限られている方はこのブロックだけで 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 通り で具体化できます。 以下は実データを使った直感的理解の入口です。

💡 学習のコツ:上の比喩は厳密ではない点に注意。 組合せ の定義は次の「📐 数式」で押さえ、 「🧮 実値で計算」で 47 都道府県から 2 県を選ぶ C(47,2)=1081 通り を使って実感を伴う理解に到達するのが効率的です。

🎨 直感で掴む(拡張版)

47 都道府県から 2 県を選ぶ場合 — 「北海道と青森」と「青森と北海道」は同じ。 これが『組合せ』の核となる定義。

組合せ を直感的に把握する 3 つの視点を以下に並べます。 自分の理解スタイルに合うものを選んでください。

① 比喩で掴む
組合せ は、 日常の○○に喩えると分かりやすい。 例えば「47 都道府県を、 一定のルールで並べたり要約したりする道具」と考えると、 細部は違っても本質的な働きが見えてくる。
② 図形で掴む
組合せ は、 47 都道府県の散布図・ヒートマップ・ネットワーク図のいずれかで可視化できる。 数式を見るより、 グラフを 1 枚描いた方が早く納得できる場合が多い。
③ アルゴリズムで掴む
組合せ は、 入力 → 変換 → 出力の手続きとしても理解できる。 後述の「🐍 Python 実装(拡張)」のコードを写経し、 入出力の形を変えて挙動を観察するのが最も速い。
💡 学習のコツ:上の直感を、 次の「📐 数式」で 組合せ の正確な定義に対応付け、 「🧮 実値で計算」で 47 都道府県から 2 県を選ぶ C(47,2)=1081 通り を実際に動かして確認しましょう。 数式と実データを並べて読むのが最短です。

📐 定義・数式

🍰 まずはやさしく

組合せには、計算するための決まった式があります。

数を使って、正確な数を出すために使います。

テストの点数の配分を考えるときのように正確に数えます。

記号の意味と、計算のやり方を詳しく読みます。

やさしい説明で掴んだ感覚を、ここで 組合せの定義 の定義式に対応づけます。下の式は左辺 $\binom{n}{k}$ が何で決まるかを右辺で書き下したもので、分数(割り算) が現れます。それぞれの記号が何の量を指すのかは、次の「🔬 数式を言葉で読み解く」で 1 つずつ確かめてください。

【組合せの定義】
$$ \binom{n}{k} = \frac{n!}{k!\,(n-k)!} $$
n の階乗を、 k の階乗と (n-k) の階乗で割る。 大きな n では scipy.special.comb で計算。
📌 読み方のコツ:数式を見たら「左辺は何を定義しているか」「右辺の各項は何の合計・積・比か」を声に出して読み下してみる。 これだけで理解が大きく進みます。

📐 数式または定義(拡張版)

組合せ の中心的な定義式は次のとおりです。

$$ C(n, k) = \binom{n}{k} = \frac{n!}{k!(n-k)!} $$

この式は、 組合せ の本質を最も簡潔に表現したもの。 関連分野では同じ概念が別の表記で現れることもあるため、 教科書・論文を読む際は記号定義表を必ず確認してください。

🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳

数式を眺めるだけでは身につかないので、 各記号がどんな役割を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 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 から 550×49×48×47×46 / 5!2,118,760
100 から 10Stirling 近似で推計≈ 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 エンコード)

1
2
3
4
5
6
7
8
9
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行・総人口(人))

1
2
3
4
5
6
7
8
9
# 標準化(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.combfactorial で再現し、 手計算との一致を確認する。

📥 入力:n=5, k=2(スカラー)

1
2
3
4
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) にジャンプします。

🔢 実際の選び方(列挙)
🔺 パスカルの三角形(緑=C(n,k)/橙=C(n,n-k))

🧭 何が起きている?

⚠️ よくある落とし穴

🚀 発展:二項定理と確率へ

🔗 関連ページ: 順列 確率 確率分布 分布 集合論

🐍 Python 実装

公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。

🎯 解説: SSDSE-B-2026 の 47 都道府県から 3 つを選ぶ組合せ数 C(47,3) を計算し、 重複なく順序を区別しない選び方の総数を求める。
📥 入力例: n = 47 (都道府県数) k = 3 (選ぶ数)
1
2
3
4
5
6
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 度自分の手でなぞってみることを強く推奨します。

  1. 環境準備:このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
  2. データ取得:本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
  3. 探索的に観察df.head()df.describe()df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
  4. 前提検証:組合せ をこのデータに当てはめてよいか(このページの「⚠️ よくある落とし穴」で挙げた 階乗オーバーフロー・組合せと順列の混同 など)を確認。 NG なら別手法を検討。
  5. 本処理:上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
  6. 結果可視化:散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
  7. 解釈・記録:「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手を明記。
  8. 共有: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行)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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数値列)

1
2
3
4
5
6
7
8
9
# 主要指標との相関ランキング
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('\nPC1 上位 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 点セットで整理します。

  1. 定義の混同:似た概念(順列/組合せ、 行列/配列、 SVM/SVR など)と取り違える。 対策:用語ページのリンクを順に辿り、 似て非なる定義を 1 文で書き出す。
  2. 適用条件の見落とし:仮定(独立性、 正規性、 線形性、 IID など)が崩れている場面で使い、 結果が解釈不能になる。 対策:本ページ「📐 数式」直下の仮定を必ずチェック。
  3. スケールの不一致:総人口(人)(数百万単位)と人口比指標(数十単位)を同じスケールで扱い、 結果が偏る。 対策:StandardScaler や MinMaxScaler を前処理に挟む。
  4. 欠損の暗黙除去:pandas が黙って NA を落とすケース。 対策:df.isna().sum() を毎回確認し、 補完/除外の方針を明示。
  5. 多重共線性:強相関の説明変数を複数投入し、 係数が不安定になる。 対策:VIF を確認、 PCA や正則化で対処。
  6. 外挿の危険:観測範囲外で予測を信じる。 対策:訓練データの分布を超えた点では予測値に幅広い信頼区間を添える。
  7. データリーク:未来情報や目的変数の関数を特徴量に混入させる。 対策:時系列なら時間順分割、 群構造があれば GroupKFold を使う。
  8. 解釈の過信:組合せ の出力を因果関係と読み替える。 対策:『相関は因果ではない』を毎回唱える。 必要なら因果推論手法(DID, IV, RDD)を併用。
🚨 警告:上記のうち 3 件以上に該当しないことを確認できないまま、 組合せ の結果をレポートに載せると、 査読・上長レビューで指摘される確率が極めて高くなります。 必ず実行前に「✅ 実務チェックリスト」を確認してください。

🗺 概念マップ

「組合せ」を中心に、 前提・並列・発展の 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 パターンを並べます。 提出前に自分のレポートと突き合わせてください。

  1. 「相関 = 因果」と書いてしまう:必ず『関連』『関係』に言い換える。
  2. 有意 = 重要と混同:p < 0.05 でも効果量が小さければ実務的に無意味。
  3. 外れ値を消し過ぎ:47 都道府県でいうと東京や北海道は外れ値に見えるが、 本来そのまま扱うべき場合が多い。
  4. 標準化の忘れ:組合せ の前処理として標準化を行わず、 結果が歪む。
  5. 学習・検証データのリーク:時系列なら時間順 split、 群構造なら GroupKFold。
  6. 多重比較未補正:複数仮説を同時に検定して偶然有意を量産。 Bonferroni 等で補正。
  7. 過学習:訓練精度のみ報告し、 汎化性能を測らない。
  8. 過剰なモデル複雑性:データ規模に対して係数が多すぎる。 AIC/BIC や交差検証で適正化。
  9. 仮定違反の見落とし:正規性、 等分散性、 独立性などの確認を省略。
  10. 不確実性の隠蔽:点推定だけ報告し、 信頼区間や標準誤差を書かない。

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。

本ページが役に立ったら、 ページ末尾の「🔗 関連用語(前提・並列・発展)」と「📚 関連グループ教材」から次の用語に進んでください。 知識のネットワークが少しずつ広がり、 全体像が見えてきます。

🔗 隣接手法への橋渡し

「組合せ」は順序を区別しない選び方の数で、 上流の母集団サイズの確認と下流の確率計算 (二項分布・超幾何分布) を組み合わせて初めて「何通り → 何 % か」まで踏み込める。

上流の母集団・標本サイズを整理し、 並列の順列 (順序を区別) と区別して使い分け、 下流の二項分布・超幾何分布に接続すれば、 「47 都道府県から 3 県を抽出する組合せ確率」のような実問題を解ける。

🌳 手法選択フロー

「組合せ」を実際に使うとき、 何をどう選ぶかを順に判断する。 上から順に答えていくと、 使うべき手法と評価の仕方が決まる。

  1. 選ぶ順序に意味があるか
    順序が結果を変えるなら順列 $_nP_r$、 変えないなら組合せ $_nC_r$。 「1 位・2 位を決める」は順列、 「代表 2 県を選ぶ」は組合せ。
  2. 同じものを 2 回選べるか
    選べるなら重複組合せ $_{n+r-1}C_r$。 選べないなら通常の $_nC_r$。 復元抽出か非復元抽出かと同じ区別。
  3. $n$ はどれくらい大きいか
    $n$ が数十までなら階乗をそのまま計算できる。 大きいときは対数を取るか Stirling 近似 $n! \approx \sqrt{2\pi n}(n/e)^n$ を使い、 桁あふれを避ける。
  4. 確率まで求めたいか
    復元ありの成功回数なら二項分布、 非復元なら超幾何分布。 組合せの数はこれらの確率式の分子・分母に現れる。

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 回の比較を全部実行してその最大値を報告しているのと同じことです。 組合せの数え上げは、 データを選ぶ場面だけでなく、 自分がこれから何回「見比べる」のかを自覚するためにこそ使えます。

⚠️ 落とし穴(重要)— 数え上げた回数だけ「偶然の有意」が湧く

有意水準 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) で「自分は何回検定したのか」を数えて明記することです。

🚀 発展 — 並べ替え検定とブートストラップの「空間の大きさ」

組合せは、 リサンプリング法が「なぜ乱数に頼るのか」も説明します。

ここで使った H(n,k) = C(n+k−1, k) は「🎮 触って理解する」節で触れた重複組合せの公式そのものです。 通常の C(n,k)(戻さない選び方)とペアで覚えておくと、 リサンプリング法の議論が一気に読みやすくなります。 なお二項分布・ボンフェローニ補正の専用ページは本用語集には未収録のため、 下記の隣接ページから辿ってください。

順列 多重検定 FDR p 値 有意水準 仮説検定 ブートストラップ サンプリング 相関

※ 本節の数値はすべて SSDSE-B-2026.csv(2023 年・47 都道府県、 A1101=総人口)の実測値、 および math.comb による厳密計算です。