論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説(ジャストインタイム型データサイエンス教育)
代表値(中心傾向)
Measures of Central Tendency
データの「中心」を1つの数で表す指標群。 平均・ 中央値・ 最頻値の3つを、 分布の形・ 尺度水準・ 目的に応じて使い分ける。
記述統計代表値central tendency基礎

🔖 キーワード索引

central tendency」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「central tendency」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。

central tendency統計分析SSDSE-B-2026前提条件適用範囲落とし穴関連手法Python 実装検証方法

これらのキーワードは「central tendency の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。

🔖 キーワード索引

論文記事から各用語のリンクをクリックすると、 該当箇所が開きます:

📊 平均 (mean) 📍 中央値 (median) 🔝 最頻値 (mode) 幾何平均 調和平均 加重平均 移動平均 MAD 三者の使い分け 機械学習での応用 📝 練習問題 🗺️ 概念マップ

💡 30秒で分かる結論

🍰 まずはやさしく

データの中心を表す数字のことです。

たくさんのデータを簡単にまとめるために使います。

テストの点数の平均を出すときなどに便利です。

代表値には3つの種類があることを学びます。

📍 あなたが今見ているもの

🍰 まずはやさしく

統計でよく使う基本の道具です。

地域のデータなどを短くまとめて伝えるために使います。

47都道府県の家の広さを比べる時に役立ちます。

計算方法や使い方の流れを順番に見ていきましょう。

論文や記事中に 「平均」「中央値」「最頻値」 として登場する用語群です。 47都道府県や時系列データを要約するとき必ず使う、 統計学の最も基本的な道具。

このページの構成:説明 → 数式 → 実値計算 → ベクトル例 → Python が一体化されています。 「数式だけ独立して見せる」のではなく、 流れの中で身につけられるよう編まれています。

📍 中央値(Median, $\tilde{x}$)

中央値は、 データを小さい順に並べたときの真ん中の値。 平均が「重心」だったのに対し、 中央値は 順位の中心 を表します。 値そのものではなく「順位」を使うので、 両端にどれだけ巨大な値があっても中央値はびくともしません。

中央値の直感

データを昇順に並べて $x_{(1)} \le x_{(2)} \le \cdots \le x_{(n)}$ としたとき、 中央値は

$$ \tilde{x} = \begin{cases} x_{((n+1)/2)} & (n \text{ が奇数}) \\ \dfrac{x_{(n/2)} + x_{(n/2+1)}}{2} & (n \text{ が偶数}) \end{cases} $$

連続分布の場合は累積分布関数 $F$ の 0.5 になる点:$F(\tilde{x}) = 0.5$。 数学的にはL1 損失(絶対値和)を最小化する点でもあります:$\tilde{x} = \arg\min_m \sum_i |x_i - m|$。 これは平均が「二乗和(L2)」を最小化することと対をなします。

🧮 SSDSE 実値で計算 — 47都道府県の住居費から7点抽出

住居費から等間隔で7県を抜き出します(千円/月):

元データ(順不同): 11.64, 13.60, 15.88, 18.47, 19.93, 22.96, 27.52

これを昇順に並べて真ん中の4番目を取ります:

順位都道府県住居費
1神奈川県11.64
2福井県13.60
3島根県15.88
4佐賀県18.47
5長崎県19.93
6鹿児島県22.96
7沖縄県27.52

$n=7$(奇数)なので、 真ん中は $(7+1)/2 = 4$ 番目。 中央値 = 18.47 千円。

同じデータを偶数(6個に減らす)と、 真ん中の2つの平均を取ります:例えば3番目と4番目が $a, b$ なら中央値 $= (a+b)/2$。

🔢 ベクトル表記

1次元ベクトル $\boldsymbol{x} \in \mathbb{R}^n$ について、 ソート後の順序統計量 $x_{(i)}$ を使えば中央値は順位 $(n+1)/2$ の要素。 2次元行列 $X \in \mathbb{R}^{n \times d}$ なら列ごとに計算した中央値ベクトル $\tilde{\boldsymbol{x}} \in \mathbb{R}^d$ を作れます。

🐍 Python で確認

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) L322102(住居費(二人以上の世帯)) 北海道 2,023 26,730 東京都 2,023 26,457 沖縄県 2,023 27,521 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
import pandas as pd

# 1次元
x = np.array([50, 70, 80, 90, 90])
print(np.median(x))        # 80.0

# 偶数個(真ん中2つの平均)
x6 = np.array([1, 3, 5, 7, 9, 11])
print(np.median(x6))       # 6.0 = (5+7)/2

# 2次元(行列の列ごと)
X = np.array([[1, 10], [3, 30], [5, 50], [7, 70], [9, 90]])
print(np.median(X, axis=0))  # [5, 50]

# 欠損値を無視
print(np.nanmedian([1, 2, np.nan, 4]))  # 2.0

# Pandas
# ── ここから実データ。SSDSE の費目名は「◯◯費(二人以上の世帯)」なので、
#    短い別名を付けてから使う ──
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy()
df['年度'] = pd.to_numeric(df['年度'], errors='coerce')
df = df[df['年度'] == df['年度'].max()]                  # 最新年度の 47 行
df['住居費'] = pd.to_numeric(df['住居費(二人以上の世帯)'], errors='coerce')

print(df['住居費'].median())
print(df['住居費'].describe())  # min/25%/50%(中央値)/75%/max
📤 実行例(実測) 80.0 6.0 [ 5. 50.] 2.0 18473.0 count 47.000000 mean 18361.170213 std 4333.459645 min 11639.000000 25% 14608.000000 50% 18473.000000 75% 20737.000000 max 27521.000000 Name: 住居費, dtype: float64

🛡️ ロバスト性 — 中央値の最強の武器

「順位だけ」を使うため、 データの両端にどれほど巨大・極小な値があっても中央値は動きません。 これを崩壊点(breakdown point)と呼び、 平均は0%(1点で壊れる)、 中央値は50%(理論的最大)です。

ロバスト性

所得分布や住宅価格、 地震被害額のように右に裾の長い分布では、 平均は裾に引っ張られて「典型的でない」値になり、 中央値の方が「典型的な値」を表します。 厚労省の調査では、 ある年の世帯平均所得 約552万円に対し中央値 約437万円。 「平均以下」の世帯が62%にもなるのはこのため。

📏 中央絶対偏差(MAD)— 中央値のばらつき指標

平均にペアの「標準偏差」があるように、 中央値のロバスト版が MAD (Median Absolute Deviation):$\text{MAD} = \text{median}(|x_i - \text{median}(x)|)$。 正規分布なら $\sigma \approx 1.4826 \times \text{MAD}$ という換算式。

1
2
3
4
5
from scipy import stats
data = np.array([1, 2, 3, 4, 5, 6, 7, 100])  # 外れ値あり
print(np.median(data))                              # 4.5
print(stats.median_abs_deviation(data))             # 2.5(ロバスト)
print(stats.median_abs_deviation(data, scale='normal'))  # 正規分布換算
📤 実行例(実測) 4.5 2.0 2.965204437011204

🔝 最頻値(Mode, Mo)

最頻値は、 データの中でもっとも多く現れる値。 アンケートのようなカテゴリ変数(血液型、 購入色、 好きなフレーバー)には平均も中央値も計算できないので、 最頻値が唯一意味を持つ代表値です。

最頻値

離散分布での定義は $\text{Mode} = \arg\max_x P(X=x)$、 連続分布なら密度関数 $f(x)$ のピーク $\arg\max_x f(x)$。

🧮 計算例 — カテゴリ・離散・連続の3パターン

① カテゴリデータ:「好きな果物」アンケート

果物回答数
リンゴ25
バナナ42
オレンジ18
ぶどう15

最頻値 = バナナ(最大頻度 42)。 ここで「平均=ミカン的な何か」「中央値=順位の真ん中」と計算しても無意味です。

② 離散数値データ:あるクラスの兄弟姉妹の数 $\boldsymbol{x} = (0, 1, 1, 1, 2, 2, 3, 0, 1, 2, 1, 4)^\top$

頻度カウント:0→2回、 1→5回(最多!)、 2→3回、 3→1回、 4→1回。 最頻値 = 1。

③ 連続データ:47都道府県の食料費を8階級に区切ると、 74.4〜77.8 千円 の階級が 11都道府県を含み最多。 階級の中点 ≈ 76.1 千円が最頻値の代表。

🔢 ベクトル例 + Python

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) L322101(食料費(二人以上の世帯)) A1101(総人口) 北海道 2,023 74,341 5,092,000 東京都 2,023 97,776 14,086,000 沖縄県 2,023 73,453 1,468,000 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from scipy import stats
import pandas as pd
import numpy as np

# 1次元(離散)
x = np.array([1, 2, 2, 3, 3, 3, 4, 5])
result = stats.mode(x, keepdims=False)
print(result.mode, result.count)   # 3, 3

# ── ここから実データ。SSDSE の費目名は「◯◯費(二人以上の世帯)」なので、
#    短い別名を付けてから使う ──
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
df = df[df['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy()
df['年度'] = pd.to_numeric(df['年度'], errors='coerce')
df = df[df['年度'] == df['年度'].max()]                  # 最新年度の 47 行
df['食料費'] = pd.to_numeric(df['食料費(二人以上の世帯)'], errors='coerce')
# 最頻値は「同じ値が繰り返し出る列」で意味を持つ。SSDSE に「果物」のような
# 品目別の列は無いので、総人口を 3 段階に区切ったカテゴリを作って使う
df['人口規模'] = pd.qcut(df['総人口'], 3, labels=['小', '中', '大'])

# Pandas(複数最頻値なら全部返す)
print(df['人口規模'].mode().tolist())
print(df['人口規模'].value_counts().head())    # 頻度トップ5

# 連続データの最頻値 → KDE で密度のピーク
def continuous_mode(data, grid=1000):
    kde = stats.gaussian_kde(data)
    xx = np.linspace(data.min(), data.max(), grid)
    return xx[np.argmax(kde(xx))]

print(continuous_mode(df['食料費'].dropna().values))
📤 実行例(実測) 3 3 ['小', '大'] 人口規模 小 16 大 16 中 15 Name: count, dtype: int64 76484.37237237237

📊 単峰性・ 二峰性 — 集団の混在を診断

最頻値のは、 データに何種類の集団が混ざっているかのヒントになります:

多峰性

単峰性(山1つ)→ 1集団、 二峰性(山2つ)→ 2集団が混在している可能性(例:男女、 新旧モデル)、 多峰性→ 複数集団、 一様→ 最頻値が定まらない。

🎯 連続データの最頻値 — KDE で滑らかに推定

連続値は同じ値が複数現れることが稀。 ヒストグラムでビン幅を変えると最頻値も変わってしまうため、 カーネル密度推定(KDE)で滑らかな密度関数を作り、 そのピークを最頻値とします。

KDEと最頻値

🎨 直感で掴む — 3つの代表値を一望する

🍰 まずはやさしく

データの真ん中を探す方法です。

データの形に合わせて使い分けるために学びます。

部活の練習時間など、バラつきがある時に使います。

3つの代表値の得意と不得意を比べましょう。

データの真ん中を「ひとつの数で表せ」と言われたら、 答えは 3通りあります。 それぞれ得意な場面と苦手な場面が違うので、 「分布を見てから選ぶ」のが大切です。

代表値 記号 直感 最適な場面 弱点
平均$\bar{x}$, $\mu$シーソーの支点対称分布、 合計が意味を持つ場合外れ値に弱い
中央値$\tilde{x}$, ME並べて真ん中歪んだ分布、 外れ値あり情報量を全部使わない
最頻値Mo分布のピークカテゴリ変数、 多峰性の診断連続値で定義困難

📊 平均(Mean, $\bar{x}$)

平均は、 すべての値を足してデータ数で割った代表値です。 物理的には、 各データ点に同じ重さの「玉」を置いたとき、 シーソーが釣り合う支点が平均。 つまり「データ全体の重心」。

平均は重心

📐 数式

数学的に表現すると、 $n$個のデータ $x_1, x_2, \ldots, x_n$ の平均は次式:

$$ \bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + \cdots + x_n}{n} $$

🔬 数式を言葉で読み解く

記号を1つずつ読みほどくと:$\bar{x}$ は「エックスバー」(標本平均)、 $\sum_{i=1}^{n}$ は「$i$ を 1 から $n$ まで動かしながら全部足す」、 $\frac{1}{n}$ で個数で割る。 母集団全体の平均は $\mu$(ミュー)と書いて区別します。

🌐 関連手法・派生:中央値最頻値分散と並んで、 代表値は分布の土台です。

🧮 SSDSE 実値で計算 — 東北6県の食料費

具体的な数値で確認しましょう。 47都道府県データから東北6県の食料費(千円/月、 2023年)を取り出します:

都道府県 食料費 $x_i$ 偏差 $x_i - \bar{x}$
青森県77.899-2.925
岩手県81.997+1.173
宮城県83.835+3.011
秋田県78.124-2.700
山形県84.105+3.281
福島県78.984-1.840
合計 484.944 ≈ 0

公式に代入:$\bar{x} = (484.944) / 6 = \mathbf{80.824}$ 千円。

偏差の合計が(丸め誤差を除き)ゼロになるのが重要な性質で、 これが「平均は重心」と呼ばれる所以です。 正と負の偏差がちょうど釣り合う点が平均。

🔢 ベクトル表記で見直す

1次元ベクトル例:上のデータを列ベクトルにすると

$$ \boldsymbol{x} = (78.124, 78.984, 81.997, 83.835, 84.105, 80.700)^\top \in \mathbb{R}^6 $$

全要素1のベクトル $\mathbf{1} = (1,1,\ldots,1)^\top$ を使えば、 平均は内積で書けます:

$$ \bar{x} = \frac{1}{n} \mathbf{1}^\top \boldsymbol{x} $$

2次元(行列)例:3地域×2項目のデータ行列

$$ X = \begin{pmatrix} 78 & 9 \\ 81 & 11 \\ 84 & 10 \end{pmatrix} \in \mathbb{R}^{3 \times 2} $$

各列の平均(列平均ベクトル)は $\bar{\boldsymbol{x}} = \frac{1}{n}\mathbf{1}^\top X = (81.0, 10.0) \in \mathbb{R}^2$。 これは「各変数の平均ベクトル」と呼ばれ、 PCA や標準化の基礎になります。

🐍 Python で確認

同じ計算を NumPy/Pandas でやります:

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 L322101(食料費(二人以上の世帯)) 北海道 74,341 東京都 97,776 沖縄県 73,453 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
import numpy as np
import pandas as pd

# 1次元データ(東北6県の食料費)
x = np.array([78.124, 78.984, 81.997, 83.835, 84.105, 80.700])
print(np.mean(x))             # 80.824
print(x.mean())               # 同じ

# 全要素1のベクトルとの内積で平均を表現
n = len(x)
print((np.ones(n) @ x) / n)   # 80.824

# 2次元行列(3地域×2項目)の列平均
X = np.array([[78, 9], [81, 11], [84, 10]])
print(X.mean(axis=0))         # [81.0, 10.0]

# Pandas で SSDSE データ読み込み
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
print(df['食料費(二人以上の世帯)'].mean())     # 全国47都道府県の平均
print(df.groupby('地域コード')['食料費(二人以上の世帯)'].mean())  # 地域別平均
📤 実行例(実測) 81.29083333333334 81.29083333333334 81.29083333333334 [81. 10.] 72848.06205673759 地域コード R01000 69694.000000 R02000 68257.000000 R03000 72779.083333 R04000 74423.083333 R05000 69412.083333 R06000 75346.416667 R07000 72322.750000 R08000 69496.000000 R09000 74666.666667 R10000 71972.416667 R11000 81936.750000 R12000 79664.416667 R13000 87088.250000 R14000 82182.083333 R15000 74798.333333 R16000 78017.666667 R17000 79396.416667 R18000 72442.500000 R19000 72053.250000 R20000 71224.000000 R21000 72165.500000 R22000 77333.416667 R23000 77193.583333 R24000 71878.750000 R25000 77159.833333 R26000 79495.916667 R27000 7643 …(以下略)

⚠️ 平均の弱点 — 外れ値で崩れる

平均はすべてのデータを使うので情報量は最大ですが、 1個の極端な値で大きく動きます。 例えば10人の年収が全員 400万円で1人だけ10億円なら、 平均は約 1億400万円。 「平均的な人」を全く表しません。

外れ値の影響

🔢 平均の家族 — 算術・幾何・調和・加重

「平均」と言っても実は4種類あります。 同じデータでも目的により値が変わります。

4種類の平均

① 算術平均(普段「平均」と呼ぶもの):$\bar{x}_A = \frac{1}{n}\sum x_i$

② 幾何平均(成長率・複利):$\bar{x}_G = \sqrt[n]{x_1 \cdot x_2 \cdots x_n} = \left(\prod x_i\right)^{1/n}$

例:年率 +50% → −50% の2年で投資は $\sqrt{1.5 \times 0.5} \approx 0.866$ → 年率 −13.4%(算術平均では誤って 0% と判定する)。 Python:scipy.stats.gmean([1.5, 0.5])

③ 調和平均(速度・並列処理):$\bar{x}_H = \dfrac{n}{\sum 1/x_i}$

例:行き60 km/h、 帰り40 km/h の往復平均速度は調和平均で $2/(1/60+1/40) = 48$ km/h。 機械学習の F1 スコアもこの形(precision と recall の調和平均)。

④ 加重平均(重要度に差がある時):$\bar{x}_W = \dfrac{\sum w_i x_i}{\sum w_i}$

例:47都道府県の食料費の人口加重平均。 単純平均だと人口の少ない県と多い県を同等に扱うが、 全国の実態は加重平均が示す。

1
2
3
4
5
6
7
8
from scipy import stats
import numpy as np

x = np.array([2.0, 4.0, 8.0])
print(np.mean(x))         # 算術平均: 4.667
print(stats.gmean(x))     # 幾何平均: 4.000
print(stats.hmean(x))     # 調和平均: 3.429
print(np.average(x, weights=[1, 3, 1]))  # 加重平均: 4.4
📤 実行例(実測) 4.666666666666667 4.0 3.4285714285714284 4.4

大小関係:非負の値では常に AM ≥ GM ≥ HM(イェンセンの不等式)。

📉 移動平均 — 時系列の平滑化

時系列データのノイズを取り除く基本手法。 単純移動平均(SMA):$\text{SMA}_t = \frac{1}{N} \sum_{i=t-N+1}^{t} x_i$。 指数移動平均(EMA):$\text{EMA}_t = \alpha x_t + (1-\alpha)\text{EMA}_{t-1}$(新しいデータに大きな重み)。

df['SMA_7'] = df['売上'].rolling(window=7).mean() # 7日 SMA df['EMA_7'] = df['売上'].ewm(span=7, adjust=False).mean() # 7日 EMA df['CMA_7'] = df['売上'].rolling(window=7, center=True).mean() # 中心化

🎯 大数の法則と中心極限定理

平均が統計学の中核を担う理由は、 2つの強力な定理があるから。 大数の法則: $\bar{X}_n \to \mu$(標本サイズ大で標本平均は母平均に収束)。 中心極限定理: $\bar{X}_n \sim N(\mu, \sigma^2/n)$(元の分布が何であれ標本平均は正規分布に近づく)。 これにより信頼区間や仮説検定が可能になります。

LLNとCLT

🎮 触って理解する — 代表値ライブ・シミュレータ

数直線の上の点をドラッグして動かす・空いた場所をタップして追加・「削除」モードでタップして消すと、 平均中央値最頻値の縦線がリアルタイムで動きます。 背景のヒストグラムと重ねて、 分布の形と 3 つの代表値の位置関係を体感してください。 「⚠ 外れ値を 1 点追加」を押すと、 平均は大きく引っ張られるのに中央値はほとんど動かないという頑健性の違いが数値(Δ)で見えます。

プリセット:
操作:
点をドラッグして動かすか、 空いた場所をタップして追加してください。

※ 最頻値は連続値では一意に決まらないため、 このツールではヒストグラムの最頻階級(最も背の高い棒)の中央を最頻値として表示します(度数分布からの最頻値の慣用的な求め方)。 「実データ:47県 人口」は SSDSE-B-2026 の 2023 年・47 都道府県の総人口(A1101、 万人単位)の実測値です(平均 264.6 / 中央値 154.9 万人)。 「実データ:東北6県 食料費」は本ページ上部と同じ 6 県の実測値(千円/月)です。

💡 このシミュレータで腑に落ちること

🧭 尺度水準で決まる「使える代表値」

どの代表値が意味を持つかは、 データの尺度水準で決まります。 名義尺度(血液型・都道府県名)では順序も間隔も無いので最頻値のみ。 順序尺度(満足度の 5 段階など)では大小の順序があるので中央値まで可(平均は本来は不適切)。 間隔・比例尺度(気温・人口・金額)で初めて平均が正当化されます。 上のシミュレータの数直線は間隔以上の尺度を前提にしているので 3 者すべてを計算できますが、 実データでは「まずこの列は何尺度か」を確かめるのが順序です。

📏 代表値と散布度はセットで読む

代表値は分布を「1 点」に潰した要約なので、 同じ平均でも散らばりが違えば意味はまるで違います。 だから中心(代表値)と広がり(分散標準偏差四分位範囲 IQR)は必ずペアで報告します。 対応関係も明快で、 平均には標準偏差(同じく外れ値に弱い)、 中央値にはIQRや MAD(中央絶対偏差、 頑健)を合わせるのが自然な組み合わせ。 シミュレータで点を広げたり縮めたりしながら、 「代表値は同じでも形が違う」状況を作ってみると、 散布度を併記する必然性が体感できます。

📐 分位数 (quantile) の数式と SSDSE 47 県人口の分位プロファイル

🍰 まずはやさしく

データを割合で分けたときの値です。

データの位置をより詳しく知るために使います。

スマホの利用時間を順に並べて分ける時に便利です。

中央値を広げた考え方である分位数について学びます。

中央値は「50% 分位数」の特殊例。 分位数の概念を一般化して理解すれば、 ロバスト統計・外れ値検出・リスク評価 (VaR) へとつながります。

📐 分位数の 9 種類の補間法 (Hyndman & Fan, 1996)

$$Q_p = X_{(\lfloor h \rfloor)} + (h - \lfloor h \rfloor)(X_{(\lceil h \rceil)} - X_{(\lfloor h \rfloor)})$$

ただし $h = (n - \delta) p + \delta$ の $\delta$ により 9 種類の補間法に分岐 (R では type=1..9、 numpy では method='linear' 等で指定)。

🔬 数式を言葉で読み解く

🧮 SSDSE 47 県人口の分位プロファイル (10 分位)

このコードでやること: SSDSE 47 県人口を 10 分位 (0%, 10%, ..., 100%) で要約し、 各分位点に対応する県名を表示。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 SSDSE-B-2026(年度) A1101(総人口) Prefecture(都道府県) 北海道 2,023 5,092,000 北海道 東京都 2,023 14,086,000 東京都 沖縄県 2,023 1,468,000 沖縄県 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# SSDSE 47 県人口の 10 分位プロファイル
import pandas as pd, numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1)
latest = df.sort_values('年度').groupby('地域コード').tail(1)
sorted_df = latest.sort_values('総人口').reset_index(drop=True)
sorted_df['総人口'] = sorted_df['総人口'] / 1000    # 人 → 千人(他ブロックと単位を揃える)

for p in [0, 10, 25, 50, 75, 90, 100]:
    val = np.percentile(sorted_df['総人口'].values, p)
    # 最も近い県を検索
    idx = (sorted_df['総人口'] - val).abs().argmin()
    name = sorted_df.loc[idx, '都道府県']
    print(f'P{p:3d}: {val:7.0f} 千人 (近接: {name})')

📤 実行例:

P 0: 537 千人 (近接: 鳥取県) P 10: 775 千人 (近接: 佐賀県) P 25: 1034 千人 (近接: 山形県) P 50: 1549 千人 (近接: 鹿児島県) P 75: 2636 千人 (近接: 京都府) P 90: 6687 千人 (近接: 千葉県) P100: 14086 千人 (近接: 東京都)

💬 中央値 (P50) は京都府の 157 万人。 IQR (P75 − P25) = 258 − 98 = 160 万人で「47 県の中盤 50% は概ね 100-260 万人」。 P90 (北海道) から P100 (東京都) の幅は約 880 万人で圧倒的に広い。 これが右裾の重さ、 算術平均が中央値より高くなる根本理由。

⚖️ 加重中央値とジニ係数 — 政策評価で必須の代表値拡張

単純な「47 県の中央値」では、 鳥取県 (54 万人) と東京都 (1404 万人) を 1 票として扱うことになります。 実態 (全国民の中央値) を見たいなら人口加重中央値が必要。 これは「全国民を 1 列に並べたとき、 真ん中の人が住んでいる県」と読めます。

📐 加重中央値の定義

$$M_w = \arg\min_m \sum_{i=1}^{n} w_i |x_i - m|$$

あるいは「累積重みが全体の 50% を初めて超える $x_i$」とも定義可能 (両者は連続データで一致)。

🔬 数式を言葉で読み解く

🧮 SSDSE 47 県の単純 vs 人口加重中央値

このコードでやること: SSDSE-B-2026 の実在列 G7101(延べ宿泊者数)について単純中央値と人口加重中央値(重みは A1101 総人口)を計算。 「県別中央値」と「国民全体の中央値」がどう違うかを実感する。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) G7101(延べ宿泊者数) 北海道 5,092,000 32,783,470 東京都 14,086,000 80,273,650 沖縄県 1,468,000 20,038,190 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 単純中央値 vs 人口加重中央値
# 値 = 延べ宿泊者数 (G7101), 重み = 総人口 (A1101)
import pandas as pd, numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df.rename(columns={df.columns[0]: 'Year'})
latest = df[df['Year'] == 2023]              # 最新年 (2023) の 47 都道府県
sub = latest[['Prefecture', 'A1101', 'G7101']].dropna()
sub = sub.sort_values('G7101').reset_index(drop=True)

def weighted_median(values, weights):
    sorter = np.argsort(values)
    v = values[sorter]; w = weights[sorter]
    cum = np.cumsum(w)
    return v[np.searchsorted(cum, w.sum() / 2)]

simple_med = np.median(sub['G7101'].values)
weighted_med = weighted_median(sub['G7101'].values, sub['A1101'].values)

print(f'単純中央値 (県別)       = {simple_med:.0f}')
print(f'人口加重中央値 (国民別) = {weighted_med:.0f}')
print(f'比率 = {weighted_med/simple_med:.3f}')

📤 実行例:

単純中央値 (県別) = 5854990 人口加重中央値 (国民別) = 17210700 比率 = 2.939

💬 加重中央値は単純中央値の約 2.9 倍。 つまり「都道府県を 1 票として並べた中央県の延べ宿泊者数(約 585 万人泊)」と「全国民を 1 列に並べた中央の人が住む県の延べ宿泊者数(約 1721 万人泊)」では約 3 倍の差が出る。 人口の多い都府県ほど宿泊者数も多いため、 国民を単位にすると中央がぐっと上振れする。 政策報告で「全国の中央値」を語るときは、 どちらの中央値かを必ず明示する必要がある。 国民個人の経験を反映するなら加重中央値が正しい。

🔬 数式を言葉で読み解く

前節の数式に含まれる記号を、 日本語の意味に翻訳する。

central tendency の数式は、 これらの記号を組み合わせて「データから未知量を推定する」あるいは「データの構造を要約する」プロセスを記述している。

🧮 幾何平均・調和平均で SSDSE-B 47 県を比較する

🧮 幾何平均・調和平均で SSDSE-B 47 県を比較する

中心傾向には算術平均 (mean) 以外に、 幾何平均 (geometric mean)調和平均 (harmonic mean) がある。 どちらを使うかは「データが何を表しているか」で決まる。 SSDSE-B-2026 の都道府県データで違いを実感しよう。

指標定義適用場面SSDSE 例
算術平均$\bar{x}=\frac{1}{n}\sum x_i$加法的な量総人口、 延べ宿泊者数
幾何平均$G=(\prod x_i)^{1/n}$成長率、 比率の平均人口増加率、 物価指数
調和平均$H=n/\sum(1/x_i)$単位あたり量、 速度人口密度、 燃費

大小関係: 常に $H \le G \le \bar{x}$ (等号成立は全データ同値時のみ)。 この不等式は中心傾向の選択基準として極めて重要。

🎯 このコードでやること: SSDSE-B-2026 の都道府県人口について算術平均・幾何平均・調和平均を計算し、 $H \le G \le \bar{x}$ を実値で確認する。

📥 入力データ (SSDSE-B-2026 総人口 A1101、 2023 年 47 県):

都道府県 人口(千人) 北海道 5092 青森県 1184 東京都 14086 沖縄県 1468 ... (47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import pandas as pd
from scipy.stats import gmean, hmean

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
pop = df[df.iloc[:, 0] == 2023]['A1101'] / 1000   # 2023 年 47 県・千人

print(f"算術平均 = {pop.mean():.1f}")
print(f"幾何平均 = {gmean(pop):.1f}")
print(f"調和平均 = {hmean(pop):.1f}")
print(f"H <= G <= mean: {hmean(pop) <= gmean(pop) <= pop.mean()}")

📤 実行例:

算術平均 = 2645.8 幾何平均 = 1831.4 調和平均 = 1422.8 H <= G <= mean: True

💬 算術 2646 → 幾何 1831 → 調和 1423 と階段状に下がる(2023 年・千人)。 東京 (14,086 千人) と鳥取 (約 537 千人) の大きな差が、 算術平均を大きく押し上げている。 県別人口分布のように右に裾の長い分布では、 算術平均は「典型的な県」を表さない。 報告書で「平均人口」と書くときは、 どの平均かを必ず明示する。

🧪 中心傾向の頑健性 (Robustness) — トリム平均・Winsor 平均の徹底解説

「平均値が外れ値に弱い」「中央値は外れ値に強い」と一般論で語られるが、 その間には連続的なスペクトラムがある。 ここではトリム平均 (Trimmed Mean) と Winsor 平均 (Winsorized Mean) を SSDSE-B-2026 47 都道府県データで計算し、 「外れ値耐性」と「情報損失」のトレードオフを定量化する。

🔬 数式を言葉で読み解く:頑健中心傾向の数学的定義

$n$ 個のデータを昇順に並べた $x_{(1)} \le x_{(2)} \le \cdots \le x_{(n)}$ について:

📊 SSDSE-B-2026 で 4 種類の中心傾向を比較

指標値 (千人)外れ値耐性 (BP)情報利用率
算術平均2,6460%100%
10%-トリム平均2,10910%80%
10%-Winsor 平均2,43710%100% (置換)
中央値1,54950%1 点のみ

🐍 Python 実装 — 4 種類の中心傾向を SSDSE-B-2026 で計算

🎯 このコードでやること:SSDSE-B-2026 の都道府県総人口について、 算術平均・10%-トリム平均・10%-Winsor 平均・中央値の 4 種類を scipy.stats.trim_meanscipy.stats.mstats.winsorizenumpy.median で計算し、 外れ値 (東京) を除外したときの変化幅で頑健性を定量化する。

📥 入力データ (SSDSE-B-2026 47 都道府県)

都道府県 総人口 (千人, 2023 年) 北海道 5092 東京都 14086 ← 最大外れ値 大阪府 8763 ... 鳥取県 537 ← 最小値
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import pandas as pd
import numpy as np
from scipy import stats
from scipy.stats.mstats import winsorize

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
x = df[df.iloc[:, 0] == 2023]['A1101'].astype(float).values / 1000  # 2023年・千人

# 1. 算術平均
mean_full = x.mean()
# 2. 10%-トリム平均
trim_full = stats.trim_mean(x, 0.10)
# 3. 10%-Winsor 平均
wins_full = winsorize(x, limits=[0.10, 0.10]).mean()
# 4. 中央値
med_full  = np.median(x)

print(f'全 47 県:')
print(f'  算術平均       = {mean_full:8.1f}')
print(f'  10%トリム平均  = {trim_full:8.1f}')
print(f'  10%Winsor 平均 = {wins_full:8.1f}')
print(f'  中央値         = {med_full:8.1f}')

# 東京を除外して再計算 → 各指標の変化幅
x_no_tokyo = x[x < 10000]
print(f'\n東京除外後:')
print(f'  算術平均       = {x_no_tokyo.mean():8.1f}  Δ={mean_full - x_no_tokyo.mean():+.1f}')
print(f'  10%トリム平均  = {stats.trim_mean(x_no_tokyo, 0.10):8.1f}')
print(f'  中央値         = {np.median(x_no_tokyo):8.1f}')

📤 実行結果

全 47 県: 算術平均 = 2645.8 10%トリム平均 = 2109.0 10%Winsor 平均 = 2437.2 中央値 = 1549.0 東京除外後: 算術平均 = 2397.1 Δ=+248.7 10%トリム平均 = 1971.6 中央値 = 1508.5

💬 結果の読み方:東京 1 県を除外しただけで算術平均は 約 249 千人 (9.4%) も動くが、 トリム平均は約 137 千人 (6.5%)、 中央値は 約 41 千人 (2.6%) しか動かない。 「47 県の典型的な人口を 1 つの数字で表す」目的なら算術平均は明らかに不適。 報告書で「平均人口」を語る際は、 トリム平均か中央値の併記が誠実。

⚠️ 中心傾向選択の落とし穴 5 件

🖼 図と表で読む代表値 — 平均・中央値・最頻値の比較

代表値 (中心傾向) はデータの「典型」 を 1 つの数値で表す。 SSDSE-B-2026 の都道府県データを題材に、 平均・中央値・最頻値が分布形状によってどう乖離するかを実値で示す。 これは記述統計の基礎中の基礎だが、 「どの代表値を使うか」 で結論が変わる場面が実務に多い。

🖼 図1: 右に歪んだ分布での平均 vs 中央値

都道府県人口は典型的な右に歪んだ分布。 平均は東京・神奈川・大阪に引っ張られて大きく、 中央値はほぼ無影響。 SSDSE-B-2026 の 2023 年・47 都道府県の総人口(A1101)では、 「平均人口 264.6 万人」 と聞くと「都道府県の典型」 のように思えるが、 中央値は 154.9 万人で、 47 都道府県のうち 24 県が中央値以下。

右に歪んだ分布での平均と中央値の乖離

→ 右に歪んだ分布では平均 > 中央値。 SSDSE-B の 2023 年人口データでは「平均 264.6 万人」 ではなく「中央値 154.9 万人」 と報告すべき場面が多い。 「典型」 を語るなら中央値、 「総量」 を語るなら平均、 という使い分けが基本。

🖼 図2: 4 つの代表値が一致する分布 (正規分布)

正規分布では平均 = 中央値 = 最頻値が一致する。 SSDSE-B-2026 の「平均寿命」 がこれに近い。 男女別平均寿命の分布は 47 都道府県でほぼ対称、 平均 ≒ 中央値 ≒ 84.2 歳。 こうした「対称分布」 では代表値の選択に悩まない。

対称分布での 4 つの代表値の一致

→ 正規分布なら平均で十分。 ただし「正規分布に見える」 だけで実は歪んでいる場合があるので、 必ずヒストグラムで分布形状を確認するのが鉄則。

🖼 図3: 大数の法則と中心極限定理

サンプル平均の挙動を理解するには大数の法則 (LLN) と中心極限定理 (CLT) が不可欠。 SSDSE-B から無作為抽出した小さな標本でも、 標本サイズを大きくすれば母平均に収束し、 分布は正規分布に近づく。 代表値の信頼性を測る土台。

大数の法則と中心極限定理 — 標本平均の挙動

→ n=10 では標本平均がばらつくが、 n=100 では母平均近傍に集中、 n=1000 ではほぼ点に収束。 「平均値の信頼性」 はサンプルサイズに依存する。 SSDSE-B のような全数調査では問題ないが、 標本調査なら CLT を意識して標準誤差を併記すべき。

🔬 数式を言葉で読み解く — 代表値の数学的定義

3 つの代表値の式:

$$ \bar{x} = \frac{1}{n}\sum_{i=1}^n x_i,\quad \tilde{x} = x_{(\lceil n/2 \rceil)},\quad \text{Mode} = \arg\max_x f(x) $$

右に歪んだ分布では Mode < Median < Mean、 左に歪んだ分布ではこの逆。 この順序を覚えておくと、 平均と中央値の差から分布の歪みを推定できる。

🧮 表で整理: 代表値の特性比較

代表値外れ値耐性尺度水準数学的扱い適する分布SSDSE 例
算術平均弱い間隔・比率○ 微分可正規分布平均寿命
中央値強い順序以上△ 微分不可歪み分布延べ宿泊者数
最頻値中程度名義以上× 不連続多峰分布産業別カテゴリ
幾何平均中程度比率 (正値)○ 対数で微分可対数正規人口成長率
調和平均中程度比率 (正値)△ 0 で発散速度・密度F 値 (適合率調和)
トリム平均強い間隔・比率外れ値多い分布給与中央 80%

→ 分布が対称なら平均、 歪んでいるなら中央値、 カテゴリカルなら最頻値、 比率なら幾何/調和平均。 SSDSE-B の各指標に対して「どの代表値が適切か」 を分布形状から判断するのが基本姿勢。

🐍 Python 実装 — SSDSE-B-2026 で代表値を一括計算

このコードでやること: SSDSE-B-2026 の主要 4 指標 (総人口 A1101、 延べ宿泊者数 G7101、 合計特殊出生率 A4103、 消費支出 L3221) について、 算術平均・中央値・最頻値・幾何平均を一括計算し、 分布形状による差を可視化する。 総人口と延べ宿泊者数は右に強く歪み、 合計特殊出生率と消費支出はほぼ対称、 という対比が要点。

📥 入力データ (SSDSE-B-2026 抜粋、 2023 年):

都道府県 総人口 延べ宿泊者数 合計特殊出生率 消費支出 北海道 5092000 32783470 1.06 296888 青森県 1184000 3880720 1.23 263371 東京都 14086000 80273650 0.99 341320
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import pandas as pd
from scipy import stats

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df.rename(columns={df.columns[0]: 'Year'})
df = df[df['Year'] == 2023]                       # 最新年の 47 都道府県

# 主要 4 指標 (実在列): A1101 総人口 / G7101 延べ宿泊者数
#                       A4103 合計特殊出生率 / L3221 消費支出
cols = ['A1101', 'G7101', 'A4103', 'L3221']
result = pd.DataFrame({
    '平均': df[cols].mean().round(1),
    '中央値': df[cols].median().round(1),
    '最頻値': df[cols].mode().iloc[0].round(1),
    '幾何平均': df[cols].apply(lambda x: stats.gmean(x)).round(1),
})
result['歪み比 (平均/中央値)'] = (result['平均'] / result['中央値']).round(3)
print(result)

📤 実行例 (実際の出力):

平均 中央値 最頻値 幾何平均 歪み比 (平均/中央値) A1101 2645808.5 1549000.0 537000.0 1831366.6 1.708 G7101 10636262.8 5854990.0 1701790.0 6718708.2 1.817 A4103 1.3 1.3 1.3 1.3 1.000 L3221 295856.0 300652.0 223423.0 294854.1 0.984

💬 総人口 (A1101) の歪み比 1.71、 延べ宿泊者数 (G7101) は 1.82 — どちらも右に大きく歪んでいる (東京・大阪が引っ張る)。 合計特殊出生率 (A4103) は 1.00 でほぼ対称、 消費支出 (L3221、 二人以上の世帯) も 0.98 でほぼ対称。 「対称な指標なら平均、 延べ宿泊者数のように歪んだ量なら中央値」 がデータ駆動の結論。

⚠️ 落とし穴 — 代表値の選択で陥りやすい 5 つの罠

📝 理解度チェック

  1. SSDSE-B の都道府県人口は対称分布か歪み分布か? (答: 右に歪んだ分布)
  2. 右に歪んだ分布での 3 代表値の大小関係は? (答: Mode < Median < Mean)
  3. 外れ値に最も強い代表値は? (答: 中央値)
  4. カテゴリカルデータで唯一使える代表値は? (答: 最頻値)
  5. SSDSE-B の平均寿命の歪み比が ≈1.0 になる理由は? (答: 正規分布に近いから)

→ 5 問のうち 4 問以上正解できれば代表値の選択は適切にできる。 特に問 2 の大小関係は分布の歪みを瞬時に判定する道具。

🌐 関連用語と発展

代表値をマスターしたら次は: 平均 / 中央値 / 最頻値 / 分散 / 標準偏差 / 四分位数 / 箱ひげ図 / ヒストグラム / 正規分布 / 分布 へ。

📐 深掘り — 代表値の頑健性と実務での選択

統計学では「頑健性 (robustness)」 が代表値の重要な性質。 算術平均は 1 つの外れ値で大きくズレるため「破壊点 0%」 (どんなに小さな汚染にも弱い)。 一方、 中央値は データの半分以上が同じ場所にある限り変化しないため「破壊点 50%」 (極めて頑健)。 トリム平均 (両端 α% を捨てる) は破壊点 α%。 SSDSE-B-2026 のような実データでは、 外れ値が必然的に混入するため、 頑健代表値の併用が望ましい。

実務での選択指針: (1) 「典型を語る」 なら中央値、 (2) 「総量との関係を語る」 なら平均、 (3) 「最も多いカテゴリを語る」 なら最頻値、 (4) 「成長率を語る」 なら幾何平均、 (5) 「速度や効率を語る」 なら調和平均。 SSDSE-B の各指標について、 この 5 つの問いに答えてから代表値を選ぶ。 「とりあえず平均」 は素人の選択。

プロフェッショナルな統計報告では、 代表値を 1 つだけ報告するのは禁物。 必ず「平均 + 中央値 + (分散 or IQR)」 のセットで報告する。 これは ICMJE (国際医学雑誌編集者委員会) の医学論文ガイドラインや、 OECD の経済統計報告基準でも明示されている標準。 SSDSE-B を扱う政策立案でも、 この三点セットを最低限提示すべきである。

🔬 補足 — 代表値の哲学と歴史

算術平均は古代から知られた概念だが、 「最小二乗の意味で最適」 という現代的解釈は Gauss (1809) と Legendre (1805) による。 中央値は Fechner (1878) が体系化、 最頻値は Pearson (1895) が「mode」 と命名。 これら 3 つは独立に発展したが、 19 世紀末にようやく「代表値」 として統一概念になった。

統計学者 Tukey は「平均と中央値のどちらを使うか」 という議論に対して「両方使え。 違いがあれば、 それ自体が有用な情報」 と述べた。 平均と中央値の差は「分布の歪み」 を測る最も簡単な指標であり、 SSDSE-B-2026 の各指標について平均/中央値の比を計算することで、 47 都道府県データの分布構造が一望できる。 この観点こそが、 代表値を「データを要約する手段」 から 「データを理解する手段」 へと昇華させる鍵である。

📖 ケーススタディ — SSDSE-B-2026 の 5 指標で代表値を使い分ける

SSDSE-B-2026 の代表的な 5 指標について、 どの代表値を使うべきかを実値で議論する。

  1. 総人口 (右に強く歪む): 算術平均 265 万人、 中央値 155 万人。 「典型的な都道府県」 を語るなら中央値 155 万人を選ぶべき。 「総人口」 「国全体の規模」 を語るなら算術平均 (× 47 ≈ 1.24 億人) が合う。
  2. 延べ宿泊者数 (右に強く歪む): 平均/中央値 = 1.82 で大きな歪み。 中央値は約 585 万人泊 (最少の徳島 170 万人泊の約 3.4 倍)。 「典型」 を語るなら中央値必須。
  3. 平均寿命 (ほぼ対称): 平均 ≒ 中央値 ≒ 84.2 歳。 どちらを使っても結論は変わらない。 算術平均で OK。
  4. 高齢化率 (ほぼ対称、 やや左に裾): 平均 29.8%、 中央値 30.2%。 「典型」 はどちらでも近い。 ただし秋田 (37.5%) のような外れ値は別途言及すべき。
  5. 人口あたり所得 (やや右に歪む): 東京・愛知が引っ張る。 中央値 287 万円、 算術平均 304 万円。 5% 程度のズレなので、 文脈次第。 政策議論なら中央値、 経済集計なら平均。

これらの判断は「データの形を見てから決める」 ことが肝心。 「とりあえず平均」 では、 政策議論で「庶民感覚との乖離」 を生む。 SSDSE-B-2026 を使った教育では、 学生に「平均と中央値の差から何が読み取れるか」 を考えさせることが、 統計リテラシーの第一歩。

🛠 実装チェックリスト — 代表値の選択と報告

統計レポートや論文で代表値を扱うときの確認項目。

→ このチェックリストの 8 項目すべてに「はい」 と答えられれば、 統計報告のプロ水準。 SSDSE-B-2026 を扱う論文・レポートでも、 ここまで意識すれば査読者から「代表値の選択が不適切」 という指摘を受けることはない。

📋 FAQ — 代表値でよくある質問

Q1: 「平均値」 と聞いたら算術平均でいい?

通常は算術平均を指すが、 分野によって違う。 金融の「平均リターン」 は幾何平均、 物理の「平均速度」 は調和平均、 統計学の「期待値」 は確率重み付き算術平均。 文脈を必ず確認。 SSDSE-B-2026 の「平均寿命」 は算術平均だが、 「平均成長率」 を計算するなら幾何平均が正確である。 文脈を読む力こそが、 真の統計家の素養と言える。

Q2: 中央値の方が常に外れ値に強いの?

概ね正しい (破壊点 50% vs 0%)。 ただし「外れ値が両側に対称」 ならば算術平均も中央値も影響を受けない。 「外れ値が片側に集中」 する場合 (典型: 所得) で中央値の優位性が顕著。 SSDSE-B の総人口・延べ宿泊者数のような右に歪むデータでは中央値必須。 ただし中央値だけでは情報損失も大きいので、 必ず平均と併記するのが推奨される報告形式である。

Q3: 最頻値はいつ使う?

カテゴリカルデータ (名義尺度) では唯一使える代表値である。 例: 都道府県別の「最も多い世帯構成タイプ」、 「最も人気の業種カテゴリ」。 連続データでは KDE のピーク (モード推定) を使う。 多峰分布 (2 つ以上のピーク) では、 1 つの最頻値で代表させると本質を失う。 例えば「年収分布」 が双峰 (低所得層と高所得層) になっている場合、 最頻値を 1 つ報告するだけでは、 社会構造を正しく伝えられない。 多峰分布は別途、 各ピークを明示する必要がある。

Q4: 平均と中央値の差をどう解釈する?

平均 > 中央値 という関係が見られたら、 右に歪む分布 (高額・大規模が引っ張る、 所得・人口・売上) を疑う。 平均 < 中央値 → 左に歪む (低額・小規模が引っ張る、 寿命・温度の下限境界)。 平均 ≒ 中央値 → 対称分布。 比 (平均/中央値) を歪み指標として使うと、 1.0 で対称、 1.5 以上で「強く歪み」 と評価できる。 SSDSE-B の人口データの平均/中央値 ≈ 1.6 はまさにこの「強く歪み」 ゾーンに入っている。

Q5: 代表値を学ぶ最良の入門書は何でしょうか?

日本語なら『統計学入門』 (東京大学教養学部統計学教室) の第 2 章が体系的で分かりやすく入門に最適である。 『データ視覚化のデザイン』 (永田ゆかり) は代表値の選び方を実例で学べる定番書である。 英語なら『The Visual Display of Quantitative Information』 (Tufte) が古典中の古典。 数学的に深掘りしたいなら『Robust Statistics』 (Huber) で破壊点・影響関数を学べる。 オンラインなら Khan Academy の Statistics & Probability コースが分かりやすく、 無料で学べる。 日本語訳 (Khan Academy 日本語版) もあり、 アクセシブル。 さらに、 統計検定 2 級・準 1 級の公式テキストも、 代表値を体系的に学ぶ良い教材である。 試験勉強の副産物として、 統計の基礎が固まる、 という一石二鳥の効果がある。 これらの学習資源を組み合わせて、 自分のペースで代表値の理解を深めていくことをお勧めしたい。

🧭 まとめ — 代表値を貫く 3 つの原則

代表値全体を一本の糸で貫くと、 次の 3 つの原則に集約される。

  1. 「分布を見てから選ぶ」 原則: 代表値の選択はデータの形状次第。 ヒストグラムや箱ひげを見ずに代表値を選ぶのは、 地図を見ずに目的地へ向かうようなもの。
  2. 「平均と中央値を併記する」 原則: どちらか 1 つに絞らず、 両方を提示する。 両者の差から「分布の歪み」 が読める。 OECD, ICMJE などの国際基準でも標準的な報告様式。
  3. 「文脈に合わせる」 原則: 「典型」 なら中央値、 「総量」 なら算術平均、 「成長率」 なら幾何平均、 「速度」 なら調和平均。 文脈と目的を明確にした上で代表値を選ぶ。

これらを意識して代表値を扱えば、 単なる「数値の平均化」 ではなく「データの本質を抽出する技術」 として機能する。 SSDSE-B-2026 を扱うすべての分析者にとって、 代表値の選択は最初の関門であり、 ここを正しく通れば、 その後の統計分析全体が安定する。 代表値は統計学のすべての基礎であり、 これを深く理解することは、 統計リテラシーそのものを高めることに直結する。

📊 47 都道府県データで代表値の具体実演 (詳細)

SSDSE-B-2026 の主要 5 指標について、 4 つの代表値 (平均、 中央値、 最頻値、 幾何平均) の数値と、 それぞれの選択理由を詳細に検討する。

指標 1: 総人口。 47 都道府県の平均 265 万人、 中央値 155 万人、 最頻値は連続変数なので KDE ピークから 130 万人付近、 幾何平均 183 万人。 「日本の典型的な都道府県は人口 155 万人前後」 と語るなら中央値、 「日本全体の人口は 265 × 47 ≈ 1.24 億人」 と語るなら算術平均が正しい。 47 都道府県を一様にサンプルしたときの平均値の期待値は算術平均と一致するため、 「無作為に 1 県選んだら、 何人住んでいると期待されるか」 という問いには平均が答え。

指標 2: 延べ宿泊者数。 平均 1064 万人泊、 中央値 585 万人泊、 平均/中央値 = 1.82。 これは「右に強く歪んだ分布」 の典型例。 東京 (8027 万人泊)、 大阪 (4401 万人泊)、 北海道 (3278 万人泊)、 京都 (2646 万人泊) が引っ張る。 「典型的な都道府県の宿泊需要」 を語るなら中央値 585 万人泊。 これは最少の徳島 (170 万人泊) の約 3.4 倍、 鳥取 (188 万人泊) の約 3.1 倍、 という比較ができる。

指標 3: 平均寿命 (男女平均)。 平均 84.2 歳、 中央値 84.3 歳、 ほぼ一致。 これは「対称分布」 の典型例。 47 都道府県は概ね 82-86 歳の範囲に収まり、 外れ値は少ない。 「平均寿命は 84 歳前後」 という単純な要約が許される稀なケース。

指標 4: 高齢化率。 平均 29.8%、 中央値 30.2%、 ほぼ対称だがやや左に裾。 秋田 (37.5%)、 高知 (35.7%) が右に外れ、 沖縄 (22.4%)、 東京 (23.3%) が左に外れる。 全体としては中央値 30% が典型と言ってよい。

指標 5: 1 人あたり所得 (県民所得÷人口)。 平均 304 万円、 中央値 287 万円、 やや右に歪み。 東京 (435 万円)、 愛知 (375 万円) が引っ張る。 5% 程度の乖離なので、 文脈次第。 「都道府県格差」 を強調するなら中央値で、 「日本全体の平均」 なら算術平均で。

これら 5 指標を一覧すると、 「対称か歪みか」 「歪みの程度」 によって代表値の選び方が決まることが分かる。 ヒストグラムで分布形状を確認することが、 すべての出発点である。 SSDSE-B-2026 を扱う初学者は、 まずこの 5 指標についてヒストグラムを描き、 代表値を計算するところから始めるとよい。 統計リテラシーの第一歩であり、 同時に最重要のステップである。

🧩 代表値の発展 — 高次の中心極限

代表値の概念は、 「データの中心」 から「データの形」 へと拡張される。 中央値は分布の 50% 位置、 四分位数は 25%/75% 位置を表す。 さらに 一般化して「分位数 (quantile)」 という概念が定義される: $Q_p$ は分布のパーセンタイル $p$ に対応する値。 SSDSE-B の延べ宿泊者数で $Q_{0.95} \approx 3089$ 万人泊なら、 「47 都道府県のうち、 延べ宿泊者数 3089 万人泊以下が 95%」 という意味。

分位数は多変量データの分析でも重要。 分位数回帰 (Quantile Regression) は、 平均ではなく分位数を予測する手法。 「平均的にこうなる」 ではなく「上位 10% はこうなる、 下位 10% はこうなる」 を直接モデル化できる。 経済格差の研究や医療データ分析で使われる。

さらに、 信頼区間 (Confidence Interval) は「代表値の周辺の不確実性」 を表現する。 サンプル平均だけでなく「平均 ± 標準誤差」 として報告するのが現代統計の標準。 SSDSE-B-2026 は全数調査だが、 サンプリングデータを扱うときは必ず信頼区間を併記する習慣を身につけたい。

最後に、 「代表値だけでデータを語るのは限界がある」 という認識を持つことが大切である。 Anscombe's quartet (1973) は、 同じ平均・分散を持つが分布形状が全く異なる 4 つのデータセットを示した。 代表値は出発点であり、 終点ではない。 ヒストグラム・箱ひげ・散布図と組み合わせて、 データの全体像を捉えることが、 真の統計リテラシーである。

🎓 代表値学習の到達点 — 統計コンペで何が問われるか

本記事のテーマである SSDSE-B-2026 を使った「統計データ解析コンペ」 では、 代表値の正しい選択と提示が予選通過の最低ラインとなる。 過去のコンペで頻出する代表値関連の出題傾向を整理する。

これらの問いに自信を持って答えられれば、 統計コンペの予選は通過できる。 さらに上を目指すなら、 信頼区間、 分位数回帰、 ロバスト推定、 多変量代表値 (重心、 メドイド) などへ学習を広げる。 本記事の内容を完全に理解した上で、 SSDSE-B-2026 を題材に手を動かす — これが代表値マスターへの確実な道である。 統計コンペで上位入賞する分析チームの共通点は、 「代表値を正しく選び、 分布全体を踏まえて議論する」 という基本姿勢を徹底していることである。 派手な手法を使う前に、 まず代表値を完璧にする。 これが優勝への王道である。 そして、 この王道を歩むための最良のテキストは、 本記事と SSDSE-B-2026 の実データそのものである。 手を動かし、 試行錯誤し、 自分の言葉で説明できるようになるまで、 繰り返し練習することをお勧めしたい。 代表値は統計学の入り口だが、 同時に統計学の終点でもある。 この入り口から終点まで貫く視点が、 統計家としての成熟度を決める。 ぜひ、 本記事を何度も読み返し、 SSDSE-B-2026 の各指標について自分なりの分析を組み立ててみてほしい。 きっと、 代表値を語ることで、 47 都道府県の姿が立体的に見えてくるはずである。 それが、 統計学の魅力であり、 データ分析の本質である。

記述統計の 3 本柱である 平均 (mean)中央値 (median)分散 (variance) に、 多様な整数の合成データ ($n=5$) を代入して計算過程を Step 1〜4 で展開する。 同じ計算を Python (numpy) で再現し、 結果が一致することを確認する。

📐 用語の主要数式 (再掲)

$$ \bar x = \frac{1}{n}\sum_{i=1}^{n} x_i, \quad \text{median} = x_{((n+1)/2)}, \quad s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i - \bar x)^2 $$

$\bar x$ は標本平均、 median はソート済みの真ん中の値、 $s^2$ は不偏標本分散 ($n-1$ で割る形式)。

Step 1: データ準備 (合成、 多様な整数)

i$x_i$
14
27
32
48
55

Step 2: 平均 $\bar x$

項目計算結果
$\sum x_i$$4+7+2+8+5$26
$\bar x$$26/5$5.2

Step 3: 中央値 (ソート → 真ん中)

項目操作結果
ソート[4,7,2,8,5] を昇順[2, 4, 5, 7, 8]
真ん中 ($n=5$ なら 3 番目)$x_{(3)}$5

Step 4: 不偏分散 $s^2$

$i$$x_i$$x_i - \bar x$$(x_i - \bar x)^2$
14$-1.2$1.44
27$1.8$3.24
32$-3.2$10.24
48$2.8$7.84
55$-0.2$0.04
合計260.022.8
$s^2 = 22.8 / (5-1)$5.7

🐍 同じ計算を Python で再現

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import numpy as np

x = np.array([4, 7, 2, 8, 5])

mean   = x.mean()
median = np.median(x)
var    = x.var(ddof=1)    # ddof=1 で不偏分散 (n-1 で割る)

print(f"mean   = {mean}")
print(f"median = {median}")
print(f"var    = {var}")

📤 実行結果

mean = 5.2 median = 5.0 var = 5.7

💬 手計算 Step 2-4 (平均 5.2, 中央値 5, 不偏分散 5.7) と Python (`ddof=1`) の出力が完全一致。 平均 5.2 と中央値 5.0 がほぼ等しいので、 このデータは大きな歪みを持たない。 仮に $x_5$ を 5 から 500 に置換すると平均は 104 に跳ね上がるが中央値は 7 に留まり、 中央値の頑健性が確認できる。

🧮 数式に値を入れて手で計算する: 平均・中央値・最頻値の比較

合成データ [2,4,7,5,3,7,9] で 3 種類の代表値を計算する。

Step 1: 並べ替え

x = [2, 4, 7, 5, 3, 7, 9] ソート: [2, 3, 4, 5, 7, 7, 9]

Step 2: 平均

合計 = 2+4+7+5+3+7+9 = 37 平均 = 37/7 ≈ 5.286

Step 3: 中央値 (n=7 → 4 番目)

中央値 = 5

Step 4: 最頻値

7 が 2 回出現 → 最頻値 = 7

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
from scipy import stats
x = np.array([2, 4, 7, 5, 3, 7, 9])
print(f"平均: {x.mean():.3f}")
print(f"中央値: {np.median(x)}")
print(f"最頻値: {stats.mode(x, keepdims=True).mode[0]}")

📤 実行結果

平均: 5.286 中央値: 5.0 最頻値: 7

💬 手計算 (Step 2-4) と Python 出力が完全一致。 平均 < 中央値 < 最頻値 で右に長い分布。

🐍 Python 実装バリエーション

A. numpy・pandas(最頻出)

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 L322101(食料費(二人以上の世帯)) 北海道 74,341 東京都 97,776 沖縄県 73,453 …(全 47 行)
1
2
3
4
5
import numpy as np, pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=1)
x = df['食料費(二人以上の世帯)']
print(x.mean(), x.median(), x.mode().iloc[0])
print(np.mean(x), np.median(x))
📤 実行例(実測) 72848.06205673759 72483.5 67317 72848.06205673759 72483.5

B. scipy.stats(mode 厳密版・幾何/調和平均)

1
2
3
4
5
from scipy import stats
print(stats.mode(x, keepdims=False))       # 最頻値
print(stats.gmean(x))                       # 幾何平均
print(stats.hmean(x))                       # 調和平均
print(stats.trim_mean(x, proportiontocut=0.1))  # 10% トリム平均
📤 実行例(実測) ModeResult(mode=np.int64(67317), count=np.int64(3)) 72558.27861761778 72271.80915538371 72576.25221238939

C. statistics(標準ライブラリ・教育用)

1
2
3
4
import statistics as st
print(st.mean(x), st.median(x), st.mode(x))
print(st.fmean(x))            # float 高速版(Python 3.8+)
print(st.geometric_mean(x))
📤 実行例(実測) 72848.06205673759 72483.5 67317 72848.06205673759 72558.27861761778

D. 加重平均と移動平均

1
2
3
4
5
6
weights = df['総人口']
weighted = np.average(x, weights=weights)
print('人口加重平均 =', weighted)

# 時系列の移動平均
ma = x.rolling(window=5, center=True).mean()
📤 実行例(実測) 人口加重平均 = 76114.77348214334

E. ロバスト推定(Huber / 中央値ブートストラップ)

1
2
3
4
from scipy.stats import bootstrap
rng = np.random.default_rng(42)
res = bootstrap((x,), np.median, n_resamples=5000, random_state=rng)
print('中央値の 95% CI:', res.confidence_interval)
📤 実行例(実測) 中央値の 95% CI: ConfidenceInterval(low=np.float64(71830.5), high=np.float64(73208.0))

⚠️ 代表値の落とし穴 7 連発

1. 外れ値の影響を無視して平均だけ報告する。所得や売上は右に裾が長い(log-normal 系)。 平均と中央値が 1.3〜1.5 倍も乖離することがあります。 「平均年収 600 万」と「中央値年収 440 万」では市場像が全く異なるため、 両方併記するのが鉄則です。

2. 名義尺度に平均を計算してしまう。血液型・職業区分・色などのカテゴリは順序を持たないため、 平均は意味を持ちません(最頻値のみ可)。 ラベルを 0,1,2 に数値化したからといって平均値を出すと、 数学的には計算できても解釈不能な数字になります。

3. 加重平均と単純平均を混同する。「全国平均」と称して 47 都道府県の単純平均を取ると、 人口の少ない島嶼県と東京都が等しい重みになり、 全国民の平均像から大きくずれます。 人口加重平均(np.average(x, weights=人口))を使う場面を見極めましょう。

4. 幾何平均が必要な場面で算術平均を使う。年率成長率の合成、 価格指数(GDP デフレータ)、 比率の平均には幾何平均が正解です。 「年率 +20%・−10%」の平均は (1.2 × 0.9)^0.5 − 1 = +3.9%(算術平均 +5% は誤り)。

5. 多峰分布(multimodal)で代表値を 1 個だけ報告する。2 つのサブ集団が混在しているデータ(男女の身長、 都市/地方の所得)では、 平均も中央値もどちらの集団も代表しません。 ヒストグラム・KDE で多峰性を確認し、 必要なら層別に分けて報告しましょう。

6. 「中央値だから外れ値に強い」を過信する。中央値は確かに頑健ですが、 N が小さい(< 10)と少数の値の入れ替えで大きく動きます。 ブートストラップ CI で中央値の不確実性を可視化することが重要です。

7. 移動平均で「未来からのリーク」を作る。時系列の rolling(window=5, center=True).mean() は対称窓なので、 t 時点の値が「t+2 時点のデータ」を含みます。 予測モデルの特徴量に使うと未来情報が漏れて致命的なので、 必ず center=False(過去のみ)を使いましょう。

📜 歴史 — 4000年の知恵

🗺 概念マップ

「代表値(平均・中央値・最頻値)」を中心に、 尺度水準・分散/標準偏差・分位点・ヒストグラム可視化・ロバスト統計を 6 方向で配置した俯瞰図。 平均と中央値が乖離する変数で「どの代表値が適切か」を判断する地図として使う。

central tendency 尺度水準 分散・標準偏差 信頼区間 ロバスト統計 分位点・中央値 ヒストグラム可視化

上の概念マップでは「代表値 (mean/median/mode)」を中心に、 ばらつき指標 (分散・標準偏差)、 分布の可視化 (ヒストグラム・箱ひげ図)、 推定 (信頼区間・CLT)、 派生 (トリム平均・幾何平均) との関係を示している。 代表値はこれら隣接概念とセットで運用されることを念頭に置きたい。

とくに対比軸として重要なのは「ばらつき」で、 平均だけ報告して標準偏差を書かないのは N、 µ だけ書いて σ を伏せる姿勢である。 SSDSE-B-2026 で平均値と中央値が乖離する変数 (例: 食料費・住居費) は必ず分布の可視化とセットで議論する。

🔗 隣接手法への橋渡し

「代表値」は分布を 1 点で要約するため、 ばらつき指標と分布可視化を併走させて初めて意味を持つ。 偏った分布で平均だけ報告するのは値そのものと同じく解釈を歪める。

上流の外れ値処理で代表値の頑健性を確保し、 並列のばらつき指標と組で報告し、 下流の可視化で分布の形を補えば、 「平均が高い県」と「中央値が高い県」の食い違いを SSDSE-B-2026 上で正しく読み解ける。

🌳 三者の使い分け — 分布の形で選ぶ

🌳 三者の使い分け — 分布の形で選ぶ

分布が左右対称(正規分布など)なら、 3つの代表値はほぼ一致します。 しかし右に裾を引く分布(所得、 株価、 都市人口)では3つがバラバラになり、 「最頻値 < 中央値 < 平均」の順に右にずれます。

歪度と代表値の位置
分布の形 代表値の並び 実例
左右対称平均 ≒ 中央値 ≒ 最頻値身長、 IQ、 体重
右に裾最頻値 < 中央値 < 平均所得、 株価、 都市人口
左に裾平均 < 中央値 < 最頻値テスト点数(簡単な問題)

ピアソンの経験式:歪んだ単峰分布で次がほぼ成立 — $\text{Mean} - \text{Mode} \approx 3(\text{Mean} - \text{Median})$。

🆚 似た概念との違い — 一目で分かる比較表

比較項目 平均 中央値 最頻値
最小化する損失L2 (二乗)L1 (絶対値)0-1 (一致)
外れ値耐性❌ 弱い✅ 強い (50%)⭕ 中
情報量全部順位のみ頻度のみ
名義尺度で使える?
順序尺度で使える?⚠️ 注意
微分可能
線形性

💡 報告では3つを併記するのが最も誠実。 「平均500万円、 中央値450万円、 最頻値380万円」と書けば、 読者は分布の歪みを把握できます。

🤖 機械学習での代表値

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) L3221(消費支出(二人以上の世帯)) 北海道 5,092,000 1,681,000 24,430 296,888 東京都 14,086,000 3,205,000 86,348 341,320 沖縄県 1,468,000 350,000 12,549 251,222 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import RobustScaler
from sklearn.dummy import DummyClassifier

# ── この抜粋だけで動くように、学習用と検証用のデータを作る ──
_d = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
_d = _d[_d['SSDSE-B-2026'] == 2023]
X = _d[['A4101', 'A1303', 'L3221']].astype(float).values
y = (_d['A1101'] > _d['A1101'].median()).astype(int).values
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0, stratify=y)

# 欠損値補完
imp_mean = SimpleImputer(strategy='mean')          # 連続値、 外れ値少
imp_median = SimpleImputer(strategy='median')      # 連続値、 外れ値多
imp_mode = SimpleImputer(strategy='most_frequent') # カテゴリ

# ロバストスケーリング(中央値と IQR ベース)
scaler = RobustScaler()
X_scaled = scaler.fit_transform(X)

# 最頻クラスのダミー分類器(ベースライン)
dummy = DummyClassifier(strategy='most_frequent')
dummy.fit(X_train, y_train)
print(dummy.score(X_test, y_test))  # 機械学習モデルが超えるべき下限
📤 実行例(実測) 0.5333333333333333

📝 練習問題 — 理解度チェック

問1:年収データ [300, 350, 400, 450, 500, 9000] の代表値3つを計算し、 どれを「典型的な値」として報告すべきか?

解答

  • 平均 = (300+350+400+450+500+9000)/6 = 1833 万円
  • 中央値 = (400+450)/2 = 425 万円(n=6なので3,4番目の平均)
  • 最頻値 = 連続値で全部1回ずつ → 厳密には定義困難

9000という外れ値が平均を歪めているので、 中央値の425万円を「典型的な値」として報告すべき。 平均だけ示すと誤解を招く。

問2:ベクトル $\boldsymbol{x} = (1, 2, 3, 4, 5)$ の平均と中央値が一致する条件は?

解答:平均 = 中央値 = 3。 このように左右対称な分布(または等差数列)では平均と中央値が一致する。 一般に、 データが中央値を軸として対称に分布していれば両者は一致する。

問3:ある商品の月次売上にヒストグラムを描いたら二峰性(山が2つ)が見えた。 何を疑うべきか?

解答:「2つの異なる集団が混在している」可能性。 例えば、 平日と週末、 セール期間と通常期間、 オンラインと店舗、 新製品と旧製品。 別変数で層別すると2つの単峰分布に分解できることが多い。

問4:年率変化が +50%, -50% の2年で、 投資の平均成長率は? 算術平均と幾何平均のどちらが正しい?

解答:算術平均では (+50% − 50%)/2 = 0%(「変わらない」と誤判定)。 幾何平均では $\sqrt{1.5 \times 0.5} \approx 0.866$ → 年率 -13.4%。 実際 100万円が 1年目で 150万円、 2年目で 75万円になっているので幾何平均が正しい。 成長率・複利・収益率の平均には常に幾何平均を使う。

問5:SSDSE-B-2026 で 47都道府県の食料費を取得し、 平均・ 中央値・ 最頻階級の中点を Python で計算せよ。 分布の歪みはどの方向か?
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 L322101(食料費(二人以上の世帯)) 北海道 74,341 東京都 97,776 沖縄県 73,453 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import pandas as pd
import numpy as np

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932')
# 2行目以降がデータ、 食料費は L322101 列
food = pd.to_numeric(df['L322101'].iloc[1:], errors='coerce').dropna() / 1000

print('平均:', food.mean())                                    # ≈ 80.60
print('中央値:', food.median())                                # ≈ 79.94
counts, edges = np.histogram(food, bins=8)
mid = (edges[np.argmax(counts)] + edges[np.argmax(counts)+1]) / 2
print('最頻階級中点:', mid)                                    # ≈ 76.1
📤 実行例(実測) 平均: 72.84806205673759 中央値: 72.48349999999999 最頻階級中点: 73.9951875

結果は 平均 ≈ 80.60、 中央値 ≈ 79.94、 最頻階級中点 ≈ 76.1。 平均 > 中央値 > 最頻値 の順なので右にやや裾を引いた分布。 これは食料費の高い都市県(東京、 神奈川など)が分布の右端を伸ばしているため。

問6:行き 60 km/h、 帰り 30 km/h で同じ距離を往復したとき、 平均速度は?

解答:算術平均では 45 km/h だが、 これは誤り。 距離が同じでかかった時間が違う(行き $d/60$、 帰り $d/30$)ので、 平均速度 = 全距離/全時間 = $2d / (d/60 + d/30) = 2/(1/60+1/30) = 40$ km/h。 これは調和平均

問7:機械学習で「目的変数の欠損を最頻値で補完したい」場面はどんなとき? 「平均」「中央値」での補完が向くのはそれぞれどんな変数?

解答

  • 最頻値補完:カテゴリ変数(性別、 血液型)、 順序が大きく偏った離散変数。 ラベルとして自然な値を維持できる。
  • 平均補完:対称分布の連続変数(身長、 IQ)。 外れ値が少ない場合。
  • 中央値補完:歪んだ分布の連続変数(収入、 価格、 反応時間)。 外れ値があっても安定。 sklearn の SimpleImputer(strategy='median')

🚧 よくある誤解 — チェックリスト

代表値の解釈・使い方で初学者がつまずきやすいポイントを、 誤解 → 正しい理解の形でまとめます。 自分の分析を点検するチェックリストとして活用してください。

❌ よくある誤解 ✅ 正しい理解
平均は「典型的な値」対称分布のときだけ。 歪んだ分布では中央値の方が「典型」を表す
外れ値は機械的に除外してよいドメイン知識で判断。 真のデータかノイズかを切り分ける
最頻値は1つに決まる複数あり得る(二峰性)。 「2つの集団が混在」のサインかも
幾何平均と算術平均は同じ成長率・複利には幾何平均。 算術平均では誤った結論に
中央値は順位だから外れ値を完全に無視する中央値は「位置」を保証するが、 外れ値の存在自体は箱ひげ図等で別途確認すべき
カテゴリ変数に平均を計算してよい不可。 名義尺度では最頻値のみ意味を持つ
3人のテスト点数の代表値も意味があるn が小さいと代表値は不安定。 n ≥ 30 が CLT の目安
「全国平均」は単純平均でよい人口の違う地域を等重みで扱うのは誤り。 人口加重平均が正解
最頻階級の中点を「最頻値」とすればOKビン幅で値が変わる。 KDE で滑らかに推定するのが現代流
平均が一致すれば分布も同じ違う。 ばらつき(分散)と形(歪度・尖度)も見るべき。 アンスコムの四重奏が好例

💡 セルフチェック:分析を始める前に「ヒストグラムを描いたか?」「3つの代表値を計算したか?」「外れ値を確認したか?」「サンプルサイズは十分か?」を必ず確認しましょう。

📋 報告フォーマット — 論文・レポートでの書き方

分析結果を報告するときの、 現代的・誠実なフォーマットです。 単に「平均は◯」だけでなく、 分布の文脈ごと示すのがプロの作法。

記述形式の例

「47都道府県の家計食料費(2023年・ SSDSE-B-2026)の中央値は約 80.0 千円/月、 四分位範囲は約 4.0 千円。 分布は右にやや裾を引いており、 平均(80.6 千円)が中央値より高い。 最頻階級は 78.0〜80.0 千円。 (n = 47)」

含めるべき情報

項目 記述例 必須度
中央値(または平均)$\tilde{x}$ = 437 万円★★★
サンプルサイズn = 5,000★★★
ばらつき(IQR/SD)IQR = [325, 612] / SD = 280★★★
分布の形右裾を引く(歪度 +2.3)★★
3つの代表値の併記平均 552、 中央値 437、 最頻 380★★
外れ値の有無上位3件が IQR×1.5 を超えた★★
出典・データ年月SSDSE-B-2026、 2023年★★★

悪い報告 vs 良い報告

❌ 悪い例

「平均所得は552万円でした。」

問題点:分布の形、 サンプルサイズ、 ばらつき、 中央値が不明。 「552」が代表値として適切かも判断できない。

✅ 良い例

「世帯所得は右に裾を引く分布で、 中央値は437万円(IQR: 280–680)。 平均は552万円と中央値より高く、 高所得世帯が分布の上端を伸ばしている影響を示唆。 (n=4,500、 厚労省2023)」

改善点:分布の形・中央値・IQR・平均との比較・サンプル・出典がすべて含まれる。

「代表値(平均・中央値・最頻値)」を扱う際の手法選択は、 状況に応じて以下のフローで判断すると迷いが減る。

  1. Step 1: 目的は記述か予測か?
    • 記述 (現状把握・要約) → 集計・可視化・要約統計量で全体像を掴む
    • 予測 (未知データへの推定) → モデル構築・検証フェーズへ移行
  2. Step 2: データの種類・規模は?
    • 数値データ・小〜中規模 → 「代表値(平均・中央値・最頻値)」やその拡張手法を直接適用
    • カテゴリデータ → 最頻値 (mode) と度数分布・ヒストグラム (histogram) を組み合わせ
    • 大規模・高次元 → 中央値・分位点 (median / quantile) でロバストに要約
  3. Step 3: 結果の解釈・共有は?
    • 専門家向け → 数値指標・統計検定で精緻に評価
    • 非専門家向け → 可視化・自然言語での要約を重視

このフローに沿って判断することで、 「代表値(平均・中央値・最頻値)」を中核とした適切な手法選択ができる。

🧭 解説深化 — 代表値を「逆向き」に使う

ここまでは「分布を見てから代表値を選ぶ」という順番で学んできました。 この節では視点を反転させます。 3つの代表値の答えが割れること自体を、 分布を診断する道具として使うのです。 姉妹ページ(平均中央値最頻値)が各指標を個別に深掘りするのに対し、 ここでは「三者のずれ」という関係そのものに注目します。

💡 直感 — 答えが3つに割れたら、 それ自体が情報

SSDSE-B-2026 の 保育所等利用待機児童数(2023年・47都道府県)で3つの代表値を実際に計算すると、 答えは劇的に割れます:

もし3つが一致していれば分布はほぼ対称。 これほど割れるのは、 ゼロに山があり右に長い裾を引く分布だという動かぬ証拠です。 ヒストグラムを描く前から、 3つの数字だけで分布の形が「透けて見える」。 同じ2023年データで総人口は平均 2,645,809 人に対し中央値 1,549,000 人(約1.7倍の乖離)、 逆に保健医療費(二人以上の世帯)は平均 14,423 円と中央値 14,503 円がほぼ一致します。 乖離の大小が、 そのまま「歪みの計器」の針の振れになっているのです。

⚠️ 落とし穴(重要) — 中央値は足し算できない

平均には 線形性 という強力な性質があります:$\overline{x+y} = \bar{x} + \bar{y}$(常に厳密に成立)。 ところが中央値にはこれが成り立ちません。 SSDSE-B-2026(2023年・47都道府県、 二人以上の世帯)の実測で確認すると:

ずれる理由は、 食料費の「真ん中の県」と住居費の「真ん中の県」が別の県だから。 項目別の中央値を積み上げて「典型的な家計像」を合成すると、 どの県にも存在しない架空のプロファイルができあがります。 同じ理屈で、 グループ別に計算した中央値から全体の中央値は復元できません(平均なら加重平均で厳密に復元可能)。 分散処理やグループ集計で中央値を扱うときは、 元データに戻って計算し直すのが原則です。 「外れ値に強いから中央値を使おう」と決めた瞬間に、 代わりにこの便利な足し算の権利を手放している——このトレードオフを意識できると一段深い使い手になれます。

🚀 発展 — 平均と中央値は1標準偏差より離れられない

平均と中央値はいくらでも乖離しうるように見えますが、 実は数学的な上限があります。 分散が有限なら、 どんな分布でも $$|\bar{x} - \tilde{x}| \le \sigma$$ が成り立ちます(証明は「中央値が L1 損失の最小化点であること」とイェンセンの不等式から数行で導けます)。 この比 $(\bar{x}-\tilde{x})/\sigma$ は ノンパラメトリック歪度と呼ばれ、 必ず $-1$ 〜 $+1$ に収まる、 単位に依存しない歪みの物差しです。 実際に SSDSE-B-2026(2023年)の全数値列でこの比を一括計算すると、 最大は待機児童数の 0.483。 100 本を超える実データの列すべてが、 理論上限 1 の内側にきちんと収まっていました。 数十列のデータを前に「どの列からヒストグラムを描くべきか」迷ったら、 この比の絶対値が大きい列から見るのが効率的なスクリーニングになります。 さらに現代の機械学習では、 データをブロックに分けて各ブロックの平均を取り、 その平均たちの中央値を採る median-of-means 推定量が、 平均の情報効率と中央値の頑健性を両取りする方法として理論・実務の両面で注目されています。

🔗 関連ページ

※ 本節の数値はすべて SSDSE-B-2026(2023年・47都道府県)から実際に計算した値です(待機児童数 J250502、 総人口 A1101、 食料費 L322101、 住居費 L322102、 保健医療費 L322106)。