「平均」周辺の重要用語:
🍰 まずはやさしく
データの中心を表す代表的な値です。
バラバラな数値のまとまりを1つで表します。
テストの平均点などでよく使われます。
ここでは定義や弱点について読みます。
平均(mean)は、 全データの合計を個数で割った最も基本的な代表値です。 df.mean() で一発計算。
意味:「データの中心」を1点で表現する代表値。 全データ点の重心に対応します。
強み:(i) 数学的に扱いやすい(微分・線形性)、 (ii) 全データを使うので情報量が多い、 (iii) 回帰モデルの中核(平均からのズレ=偏差が分散・回帰係数を作る)。
弱点:外れ値の影響を強く受ける。 1個の極端な値で平均は大きく動きます。 例えば年収の平均は、 ごく少数の超富裕層によって押し上げられるため、 「平均的な人」を表しません。 そういうときは中央値が適切。
分布が歪んでいる場合(所得分布、 株価、 地震被害額など)、 平均より中央値が代表値として優れます。
🍰 まずはやさしく
データ分析でよく出てくる言葉です。
データの全体像を正しく掴むために使います。
都道府県の統計データなどで活用します。
定義から実装まで6つの視点で学びます。
論文中に 「平均」として登場する用語。
平均 とは:全データの合計 ÷ 個数。データの「中心」を表す代表値だが、外れ値の影響を受けやすい。
本ページでは「mean」を扱う。 統計データ分析コンペティション (2026) の教材で、 SSDSE-B-2026 (47 都道府県 × 複数年 × 100 超列) の実データを使った再現可能な学習を目指す。
「mean」は統計・データサイエンスの体系における重要概念のひとつ。 本ページは「定義・直感・数式・実装・落とし穴・関連手法」の 6 視点で構成され、 各視点は独立して読めるが順序通り読むと体系的な理解が得られる。
🍰 まずはやさしく
シーソーのバランス点のようなものです。
データの重心がどこにあるかを知るために使います。
家計の食料費などの分布で考えます。
図を使って直感的な意味を理解しましょう。
下の図は、 47都道府県の家計食料費(2023年・ SSDSE-B-2026)を1次元の数直線上にプロットしたものです。 各点が1つの都道府県。 赤い縦線が平均、 オレンジ点線が中央値。
各データ点に同じ重さの「玉」を置いたとき、 シーソーが釣り合う支点こそが平均です。 これを数式で表すと:
$$ \sum_{i=1}^{n} (x_i - \bar{x}) = 0 $$
「各データから平均までの距離(偏差)を全部足すと、 ぴったりゼロになる」という意味。 上向きの引っ張りと下向きの引っ張りが釣り合っているからです。 これが「重心」と呼ばれる所以。
💡 平均は幾何学的には「重心」、 数学的には「偏差の総和をゼロにする点」、 確率論的には「期待値」、 機械学習的には「最小二乗推定量」。 同じものを多角的に見ることで深く理解できます。
2023 年の家計食料費 (千円/月) を 5 県だけ抜き出すと:
| 都道府県 | 食料費 (千円) | 平均からの偏差 |
|---|---|---|
| 北海道 | 74.3 | -9.48 |
| 東京都 | 97.8 | +14.02 |
| 愛知県 | 88.3 | +4.52 |
| 大阪府 | 85.0 | +1.22 |
| 沖縄県 | 73.5 | -10.28 |
| 合計 | 418.9 | 0 |
平均 = 418.9 ÷ 5 = 83.78 千円(L322101、 2023 年実測)。 偏差 (-9.48, +14.02, +4.52, +1.22, -10.28) を合計するとピタリ 0。 これがシーソーが釣り合う支点であることの直接の証拠。
5 県を数直線上に並べ、 平均 83.78 を支点として釣り合いを ASCII で図示:
食料費 (千円): 70 ─── 75 ─── 80 ─── 85 ─── 90 ─── 95 ─── 100
●● ● ● ●
沖縄 北海道 大阪 愛知 東京
(73.5, 74.3) (85.0)(88.3) (97.8)
▲
支点 = 平均 83.78
◄── -19.76 ──►◄── +19.76 ──►
左の引っ張り合計 右の引っ張り合計
(-10.28-9.48) (+14.02+4.52+1.22)
両側で釣り合う = 偏差合計 0
東京・愛知・大阪 3 都府県の「右の引っ張り (+19.76)」と、 沖縄・北海道 2 道県の「左の引っ張り (-19.76)」が完全に釣り合っている。 もし沖縄が 50 千円に下がったら左の引っ張りが強くなり、 支点 (平均) は左へずれる。
下の数直線には、 5 都道府県の家計食料費 (千円/月, 2023 年・SSDSE-B-2026 実測) が玉として並んでいます。 玉をドラッグして動かすと、 算術平均 (赤い支点▲) と 中央値 (オレンジ点線) がリアルタイムに更新されます。 マウスでもタッチでも操作できます。
玉を動かしてみましょう。 偏差の総和は常にほぼ 0 のまま——これが「平均=シーソーの支点 (重心)」の正体です。
上の図で赤い支点 (▲) は、 左右の玉の引っ張りが釣り合う 1 点に自動で移動します。 各玉から支点までの距離が偏差で、 その総和は必ず 0——だから平均は「重心」です。 同時に平均は「全部の食料費を集めて 5 県で均等に配り直したら 1 県あたりいくらか」というならしの値でもあります。 重心とならし、 この 2 つの見方はどちらも同じ $\bar{x}=\frac{1}{n}\sum x_i$ を指しています。
「外れ値を作る」ボタンで東京を 200 千円に飛ばしてみてください。 算術平均 (支点) は大きく右へ引きずられるのに、 中央値 (オレンジ点線) はほとんど動きません。 これが平均の外れ値感応と、 中央値の頑健性 (ロバスト性) の対比です。 所得・地価・被害額のように右に裾を引く歪んだ分布では、 平均は少数の巨大値に引っ張られて「平均的な人」を代表しなくなります。 こうした場合は中央値や後述のトリム平均が代表値として優れます。
関連ページ:中央値/代表値 (中心傾向)/外れ値/ロバスト統計/標準偏差/分散。 加重平均・幾何平均・調和平均・トリム平均は本ページ上部の「4 種類の平均」節も参照。
🍰 まずはやさしく
合計を個数で割る計算のことです。
正確な値を出すために数式を使います。
部活の記録などの合計を人数で割るイメージです。
数式に使う記号の意味をひとつずつ解説します。
平均の定義式は教科書で必ず見るものですが、 記号の意味を1つずつ丁寧に読み解きます。
$$ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i $$
| 記号 | 読み方 | 意味 |
|---|---|---|
| x̄ | エックスバー | 標本平均。 観測したデータから計算された平均値 |
| n | エヌ | 標本サイズ(データの個数) |
| xᵢ | エックスサブアイ/エックスアイ | i番目のデータ点。 i は 1, 2, ..., n まで動く |
| Σ | シグマ(大文字)/総和記号 | 「全部足す」を意味する。 「∑」の下に開始、 上に終了が書かれる |
| ∑ᵢ₌₁ⁿ xᵢ | シグマ アイ イコール 1 から エヌまで エックスアイ | x₁ + x₂ + ... + xₙ の略記 |
| 1/n | エヌぶんのいち | 合計を個数で割る → 1個あたりの値 |
$$ \mu = \frac{1}{N} \sum_{i=1}^{N} x_i = \mathbb{E}[X] $$
標本平均 x̄ は母平均 μ の不偏推定量:何度もサンプリングして平均を取れば、 期待値は μ に一致します(E[x̄] = μ)。
合計だけでは「データが多ければ多いほど大きくなる」だけで、 中心の位置情報になりません。 個数で割ることで「1個あたりの代表値」になります。 これが平均が個体の比較に使える理由。
$$ \bar{a x + b y} = a \bar{x} + b \bar{y}, \quad \bar{c} = c $$
これが「平均の線形性」。 a, b, c は定数。 この性質のおかげで、 平均は計算が簡単で、 回帰モデルの中核に使えます。 例:年収を1.1倍して10万円足したものの平均は、 元の平均を1.1倍して10万円足したものと同じ。
「平均」と一口に言っても、 実は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_{i=1}^{n} x_i \right)^{1/n} $$
「掛け算ベース」の平均。 使い時:成長率(毎年110%, 90%, 105% の平均成長率)、 複利、 比率の平均、 GDP 成長率、 株価収益率、 ジャズの売上倍率。 算術平均より小さいか等しい(AM ≥ GM)。
例:年率 +50%, -50% の2年で投資はどうなる? 算術平均 → (50-50)/2 = 0%(変わらない?)。 幾何平均 → √(1.5×0.5) = 0.866 → 年率 -13.4%(実際は損!)。 こういう時は幾何平均が正解。
$$ \bar{x}_H = \frac{n}{\sum_{i=1}^{n} \frac{1}{x_i}} $$
逆数の平均の逆数。 使い時:往復速度の平均(行き60km/h、 帰り40km/hの平均は調和平均で48km/h)、 並列処理の合算スループット、 F1スコア(精度と再現率の調和平均)。 算術平均よりもっと小さい(HM ≤ GM ≤ AM)。
$$ \bar{x}_W = \frac{\sum w_i x_i}{\sum w_i} $$
各データに「重み w」を付けた平均。 使い時:成績の加重平均(単位数×評点)、 ポートフォリオのリターン(資産比率×収益率)、 全国平均(県別人口×値)の集計。 各値の重要度が異なるときに必須。
非負の値については、 算術平均 ≥ 幾何平均 ≥ 調和平均 が常に成立(イェンセンの不等式の特殊例)。 等しくなるのは全データが同じ時だけ。
平均が統計学の中核である理由は、 2つの偉大な定理があるから。 サンプル数が多いほど標本平均は「真の値」に収束し、 「正規分布」に近づきます。
「サンプルサイズが大きくなるほど、 標本平均は母平均に収束する」
$$ \bar{X}_n \xrightarrow{n \to \infty} \mu $$
読み方:「エックスバー サブ エヌ(標本平均)は、 n が無限大に向かうとき、 ミュー(母平均)に収束する」。 上の図の左を見ると、 n が小さい時は標本平均は揺れますが、 n が大きくなるほど赤い破線(真の平均 = 80.60)に収束していくのが分かります。
「標本平均の分布は、 元の分布が何であれ、 n が大きいと正規分布に近づく」
$$ \bar{X}_n \sim N\left(\mu, \frac{\sigma^2}{n}\right) \quad (n \to \infty) $$
上の図の右を見ると、 元のデータ(食料費)の分布がどんな形でも、 標本平均を5000回計算した分布はきれいな釣り鐘形(正規分布)になっています。 これがCLTの威力。
CLTのおかげで:
多くの統計分析が「平均を扱う」ことに集中している理由はここにあります。 CLTにより平均は予測可能になるからです。
標本平均 x̄ が出ても、 「母平均 μ はどこにあるか」は分かりません。 そこで「95%の確率で μ が含まれる範囲」を計算するのが信頼区間。
$$ \bar{x} \pm t_{\alpha/2, n-1} \cdot \frac{s}{\sqrt{n}} $$
💡 結論:「東北6県の母平均食料費は、 95%の信頼度で[77.8, 83.8]千円の範囲にある」。 区間が広いほど不確実、 狭いほど精度が高い推定。
標本平均の式 $\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i$ を「日本語で音読」してみる。 記号を1つずつ意味に置き換えると、 式そのものが手順書として読めるようになる。
| 記号 | 読み方 | 意味 | SSDSE-B-2026 での例 |
|---|---|---|---|
| $\bar{x}$ | エックス バー | 標本平均(求めたい値) | 食料費の全国平均 80.6 千円/月(2023 年・47 都道府県) |
| $x_i$ | エックス アイ | i 番目の観測値 | $x_1$=青森の食料費、 $x_2$=岩手の食料費 … |
| $i$ | アイ | サンプル番号(添字) | 1, 2, 3, …, 47(都道府県の通し番号) |
| $n$ | エヌ | サンプル数(合計いくつ集めたか) | 47(全都道府県)または 6(東北 6 県) |
| $\sum_{i=1}^{n}$ | シグマ | i=1 から n まで足し合わせる演算子 | 47 都道府県の食料費を全部足す |
| $\frac{1}{n}$ | エヌ分の 1 | 合計をサンプル数で割る(=平均化) | 47 で割る |
「$\bar{x}$(標本平均)は、 $x_1, x_2, \ldots, x_n$(観測したデータ全部)を $\sum$(足し合わせて)、 それを $n$(サンプル数)で $\frac{1}{n}$(割った)値である」
母集団全体の真の平均は $\mu = E[X]$ と書く。 これは「無限回サンプリングしたら収束する理論値」で、 実際には観測できない。 私たちが計算する $\bar{x}$ は $\mu$ の不偏推定量(平均的に $\mu$ と一致する近似値)である。 つまり $\bar{x}$ は「サンプルから $\mu$ を当てに行く道具」と読める。
47都道府県データの中から、 東北6県を抜き出して手で平均を計算します。 SSDSE-B-2026 の家計食料費(2023年、 単位:千円/月)です。
| 都道府県 | 食料費(千円/月) |
|---|---|
| 青森県 | 77.90 |
| 秋田県 | 78.12 |
| 福島県 | 78.98 |
| 岩手県 | 82.00 |
| 宮城県 | 83.83 |
| 山形県 | 84.11 |
| 合計 | 484.94 |
$$ \bar{x} = \frac{1}{n} \sum_{i=1}^{n} x_i = \frac{x_1 + x_2 + \cdots + x_n}{n} $$
東北6県の家計食料費の平均は約80.8千円。 全国平均(80.6千円)と比較するとやや多いことが分かります。
各データから平均を引いた「偏差」を求めます:
| 都道府県 | 食料費 xᵢ | 偏差 (xᵢ - x̄) |
|---|---|---|
| 青森県 | 77.90 | -2.925 |
| 秋田県 | 78.12 | -2.700 |
| 福島県 | 78.98 | -1.840 |
| 岩手県 | 82.00 | +1.173 |
| 宮城県 | 83.83 | +3.011 |
| 山形県 | 84.11 | +3.281 |
| 偏差の合計 | 0.000000 ≈ 0 |
偏差の合計が(丸め誤差を除き)ゼロになることが確認できます。 これが「平均は重心」と呼ばれる所以。 正の偏差と負の偏差が互いに打ち消し合う点が平均。
SSDSE-B-2026 の食料費(L322101、 2023 年・千円換算)に対し、 算術平均・幾何平均・調和平均・トリム平均・加重平均を計算し、 値の差を観察する。 実測値は 算術 80.60 / 幾何 80.40 / 調和 80.20 / 10% トリム 80.22 / 人口加重 84.66 / 中央値 79.94 千円。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import numpy as np import pandas as pd from scipy import stats df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) df = df[df['SSDSE-B-2026'] == 2023] # 2023 年・47 都道府県 x = df['L322101'].astype(float).values / 1000 # 食料費(千円) w = df['A1101'].astype(float).values # 総人口 am = np.mean(x) gm = stats.gmean(x) hm = stats.hmean(x) tm = stats.trim_mean(x, proportiontocut=0.1) wm = np.average(x, weights=w) med = np.median(x) print(f'算術平均 : {am:8.2f}') print(f'幾何平均 : {gm:8.2f} (AM-GM 不等式: AM >= GM)') print(f'調和平均 : {hm:8.2f} (HM <= GM <= AM)') print(f'10%トリム平均: {tm:8.2f}') print(f'人口加重平均 : {wm:8.2f} (大都市寄り)') print(f'中央値 : {med:8.2f}') |
合成 [2, 4, 8] で 3 種類の平均を計算する。
1 2 3 4 5 6 | import numpy as np from scipy import stats x = np.array([2, 4, 8]) print(f"算術: {x.mean():.3f}") print(f"幾何: {stats.gmean(x):.3f}") print(f"調和: {stats.hmean(x):.3f}") |
💬 手計算 (Step 1-3) と Python 出力が完全一致。
Pythonでは複数のライブラリで平均を計算できます。 状況によって使い分けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import pandas as pd # SSDSE データを読み込む(2 行目の日本語ラベル行を skip) df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1]) # 1変数の平均(2023 年の食料費 L322101、 千円換算) d23 = df[df['SSDSE-B-2026'] == 2023] print(f"食料費の平均: {d23['L322101'].mean()/1000:.2f} 千円") # 80.60 # 全数値列の平均を一気に all_means = d23.mean(numeric_only=True) print(all_means.head()) # グループ別平均(年度別など) by_year = df.groupby('SSDSE-B-2026')['L322101'].mean() print(by_year) # 加重平均(総人口 A1101 で重み付け) weighted_mean = (d23['L322101'] * d23['A1101']).sum() / d23['A1101'].sum() print(f'人口加重平均: {weighted_mean/1000:.2f} 千円') # 84.66 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import numpy as np # 配列からの平均 arr = np.array([2.0, 4.0, 8.0]) print(np.mean(arr)) # 4.667 print(arr.mean()) # 同じ # 軸指定(多次元配列) mat = np.array([[1, 2, 3], [4, 5, 6]]) print(np.mean(mat, axis=0)) # [2.5, 3.5, 4.5] - 列ごと print(np.mean(mat, axis=1)) # [2.0, 5.0] - 行ごと # 加重平均 np.average(arr, weights=[1, 3, 1]) # 重み付き # 欠損値を含む場合 arr_nan = np.array([1, 2, np.nan, 4]) print(np.nanmean(arr_nan)) # 2.333 - NaN を無視 |
1 2 3 4 5 6 7 8 9 | from scipy import stats arr = [2.0, 4.0, 8.0] print(stats.gmean(arr)) # 4.0 - 幾何平均 print(stats.hmean(arr)) # 3.429 - 調和平均 # トリム平均(上下10%をカット) data_with_outlier = [1, 2, 3, 4, 5, 100] print(stats.trim_mean(data_with_outlier, proportiontocut=0.1)) |
1 2 3 4 5 6 7 | import statistics arr = [2.0, 4.0, 8.0] print(statistics.mean(arr)) # 4.667 print(statistics.geometric_mean(arr)) # 4.0 print(statistics.harmonic_mean(arr)) # 3.429 print(statistics.fmean(arr)) # 4.667(高速版、 float のみ) |
1 2 3 4 5 6 7 8 9 10 11 | import numpy as np from scipy import stats data = np.array([77.90, 78.12, 78.98, 82.00, 83.83, 84.11]) mean = data.mean() se = data.std(ddof=1) / np.sqrt(len(data)) t_crit = stats.t.ppf(0.975, df=len(data)-1) ci_low = mean - t_crit * se ci_high = mean + t_crit * se print(f'95%CI: [{ci_low:.2f}, {ci_high:.2f}]') |
1 2 3 4 5 6 7 8 | import numpy as np x = np.array([1, 2, 3, np.nan, 5]) # np.mean は欠損が 1 つでもあると結果が「非数 (Not a Number)」になる。これが落とし穴 print('mean が非数になったか:', bool(np.isnan(np.mean(x)))) print('nanmean :', np.nanmean(x)) # 欠損を無視して平均 → 2.75 print('average :', np.average(x[~np.isnan(x)])) # 欠損を除いてから平均 → 2.75 # 加重平均 print('weighted :', np.average([1,2,3], weights=[1,2,3])) # 2.333 |
平均の最大の弱点は外れ値に弱いこと。 1つの極端な値が代表値を大きく歪めます。
左:通常の10人の年収(350〜700万円)。 平均と中央値は近い(500万円前後)。
右:そこに「年収1億円の人」を1人足しただけ。 平均は劇的に上がるのに、 中央値はほぼ動かない。
| 手法 | 説明 | 外れ値耐性 |
|---|---|---|
| 算術平均 | 全データの平均 | ❌ 弱い |
| 中央値 | 並べた真ん中の値 | ✅ 強い(崩壊点50%) |
| トリム平均 (trimmed mean) | 上下10%を捨てた残りの平均 | ⭕ 中程度 |
| ウィンザー化平均 (winsorized mean) | 上下10%を境界値に置換した平均 | ⭕ 中程度 |
| M推定 | 外れ値の影響を減らす重み付け | ✅ 強い |
平均は全データを等しく扱うため、 外れ値 1 個で大きく動く。 「日本人の平均年収」では一握りの超高所得者が平均を引き上げ、 過半数の人より高い値が出る。 こうした「右に裾を引く分布」では中央値の方が「典型的な人」を表す。 報告時には平均と中央値の両方を併記、 さらにヒストグラムや箱ひげ図で分布形状を示すのが標準的なベストプラクティス。 「平均年収 600 万」の見出しに騙されないリテラシーが必須。
「投資 A: +10%, B: -10% を平均すると 0%」と思いがちだが、 実際には複利で (1.10 × 0.90) - 1 = -1% の損失。 比率や成長率の平均には幾何平均を使うのが正しい。 「年率 5% × 3% → 平均 4%」ではなく、 √(1.05 × 1.03) - 1 ≈ 4.0% と幾何平均で算出。 速度の平均(距離一定で往復)は調和平均、 と平均の種類は使い分ける必要がある。 算術平均を機械的に使うと数値が嘘になる。
「グループごとの平均」が「全体の平均」と矛盾する現象。 例:男女別の合格率は男女ともに学部 A > B でも、 全体で集計すると女性の合格率が高くなる、 など。 これは集計レベルが変わると重みが変わるため。 平均だけで「グループ間に差がある」と結論する前に、 重要な変数(学部・年齢・地域)で層別化したサブグループ平均も確認する。 因果推論の文脈では交絡変数の存在を疑う。
「平均 ± SD」と「平均 ± SE」は別物。 SD はデータのばらつきを表し、 SE は平均推定量の精度(= SD/√n)を表す。 サンプルが大きくなると SE は小さくなるが SD は変わらない。 多くの論文で混同が見られるので、 必ず「mean ± SE (n=N)」もしくは「mean ± SD」と明記する。 グラフのエラーバーが何を意味するか(SD / SE / 95%CI)を凡例に書かないと読者に正確に伝わらない。
「47 都道府県の単純平均」と「国民 1 人当たりの加重平均(人口加重)」は別の数値。 政策議論で「県民平均」を引いて議論すると、 人口の少ない県が過大評価される。 GDP の地域差なら GDP 加重、 個人レベルの分析なら個人加重と、 目的によって重みを正しく選ぶ。 sklearn の sample_weight、 statsmodels の weights、 numpy.average の weights を使い分ける。
numpy.mean は NaN があると NaN を返す。 pandas Series.mean() は既定で NaN をスキップし「観測値だけの平均」を返す。 この違いが落とし穴で、 同じデータでもライブラリで結果が変わる。 さらに、 欠損が完全ランダムでない場合(MNAR/MAR)は NaN をスキップした平均が偏る。 多重代入(MICE)や Inverse Probability Weighting で対処するのが現代的なアプローチ。
平均 がデータサイエンスの体系の中でどこに位置するかを、 3つの異なる視点で可視化します。 同じ情報でも見方を変えると気付きが変わります。
🌐 統計・データサイエンス › 記述統計 › 中心傾向 › 平均
中心に 平均 を置き、 そこから 中央値・分散・標準偏差・相関係数・単回帰・標準化 など 計 14 個の用語へ、 前提・兄弟・発展形といった関係を矢印で結んでいます。 線がどちら向きかを見れば、 先に読むべき用語とあとから読む用語が分かります。 ノードはドラッグで動かせ、 ホイールでズーム、 クリックでその用語のページへ遷移します。
大きな円が小さな円を包含する Circle Packing 図。 「平均」は緑色でハイライト。
長方形を入れ子に分割した Treemap 図。 各分野の規模感を面積で比較。 「平均」は緑色でハイライト。
| マップ | 分かること | こんな時に見る |
|---|---|---|
| 🔗 関係マップ | 手法間の横の関係(前提→発展→応用) | 「次に何を学べばよい?」 学習順序の判断 |
| ⭕ 包含マップ | 分類体系の入れ子構造(上位⊃下位) | 「この手法はどんなジャンルに属する?」 |
| 🌳 ツリーマップ | 分野の規模比較(面積=ボリューム) | 「データサイエンス全体の俯瞰像」 |
💡 3 つの図は同じ位置関係を別の角度から描いています。 関係マップは 平均 の隣に何が並ぶかを、 包含マップとツリーマップは 統計・データサイエンス → 中心傾向 → 平均 という入れ子の位置を示します。 「中心傾向には他に何があったか」を思い出したいときは包含マップを、 「次に何を読むか」を決めたいときは関係マップを開いてください。
平均は単独で完結する指標ではなく、 上流のサンプリング設計、 並列の中央値・最頻値・幾何平均・調和平均、 下流の分散・標準誤差・信頼区間と組み合わせる。 単独で出すと外れ値や歪んだ分布で誤解を生むため、 必ず散布度と一緒に報告する。 ここでは 接続 / 統合 / 比較 の 3 視点で隣接手法 5 件との関係を整理する。
| 前後関係 | 隣接手法 | 平均との接続 | 適用シーン |
|---|---|---|---|
| 上流 | データクレンジング | NA・外れ値処理が前提 | SSDSE 列の前処理段階 |
| 上流 | サンプリング設計 | 標本平均が母平均の推定量 | 調査設計と標本抽出 |
| 下流 | 標準偏差・分散 | 平均からの散らばりを測定 | 平均±SD を要約統計で併記 |
| 下流 | 信頼区間 | 標本平均 ± 1.96×SE で母平均区間推定 | 推定の不確実性を示す |
| 下流 | t 検定 | 2 群の平均差を検定統計量で評価 | A/B テスト・処置効果検証 |
| 手法 | 算術平均との違い | いつ平均より優先するか |
|---|---|---|
| 中央値 | 順序統計量の真ん中、 外れ値に頑健 | 分布が歪む・外れ値あり |
| 幾何平均 | 積の n 乗根、 比率・成長率に適合 | 複利・人口成長率の集約 |
| 調和平均 | 逆数の平均の逆数、 速度・密度に適合 | 平均速度・F1 スコア |
SSDSE-B-2026 の県別人口(2023 年)で平均を出すと約 264.6 万人だが、 中央値は 154.9 万人。 東京の約 1409 万人が大きく引き上げている。 上流で分布をヒストグラム確認、 中段で平均 + 標準偏差、 下流で中央値 + IQR を併記、 さらに歪度を計算して「右に裾を引く分布」と注釈、 これが最低限の報告フォーマット。
状況によって適切な平均は異なります。 以下のフローに従って選びます:
所得分布や被害額のような歪んだ分布では、 平均は「典型的な値」を表しません。 必ずヒストグラムや箱ひげ図で分布を確認。 「日本人の平均貯蓄額」が高く出るのも、 富裕層の影響です。
全体での平均と、 部分での平均が逆になることがあります。 集計レベルが違うと、 結論が変わる。 必ず複数のレベルで確認。
「都道府県の平均所得」を単純平均すると、 人口の多い都市県の影響が過小評価されます。 全国全体を語るなら人口で加重すべき。
「3社の利益率(10%, 20%, 30%)の平均は20%」は、 売上規模が同じならOKだが、 普通は加重平均すべき。 単純平均は誤解の元。
「3年で +10%, +20%, -10% の成長」の平均成長率を算術平均で出すと(10+20-10)/3 = 6.67%だが、 これは誤り。 正しくは幾何平均:³√(1.1×1.2×0.9) = 1.058 → 5.8%。
n=3 の平均は信頼性が低い。 必ず信頼区間を併記、 または最低 n≥30 で計算。 CLTが成立するサンプルサイズが目安。
SSDSE-B-2026 のデータをヒストグラムで可視化。 平均(赤線)と中央値(オレンジ点線)の位置関係も確認できます。
分布は概ね右に裾を引いており(少数の高額県あり)、 平均は中央値よりやや右にあります。 これは「平均は外れ値に引っ張られる」典型例。 分布が歪んでいる場合の代表値は中央値の方が安全です。
時系列データ(株価、 売上、 気温)のノイズを取り除く最も基本的な平滑化が移動平均。 直近 N 個のデータの平均を窓を動かしながら計算します。
$$ \text{SMA}_t = \frac{1}{N} \sum_{i=t-N+1}^{t} x_i $$
「最後の N 個の単純平均」。 窓を1ステップずつスライドさせて計算。 N が大きいほど平滑化が強くなる。
$$ \text{EMA}_t = \alpha \cdot x_t + (1 - \alpha) \cdot \text{EMA}_{t-1} $$
「新しいデータほど重みを大きく」。 α(0〜1)は平滑化係数。 機械学習のAdam optimizer、 株式のテクニカル分析、 IoT センサーのノイズ除去で頻繁に使われます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd # この抜粋だけで動くように、時系列を用意する(df は後続ブロックが使うので触らない) # SSDSE-B は 2012〜2023 年の 12 時点なので、窓 7 の移動平均が計算できる _src = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', header=1) _src = _src[_src['地域コード'].astype(str).str.match(r'^R\d{5}$', na=False)].copy() _src['年度'] = pd.to_numeric(_src['年度'], errors='coerce') _src['消費支出'] = pd.to_numeric(_src['消費支出(二人以上の世帯)'], errors='coerce') sales = (_src.groupby('年度', as_index=False)['消費支出'].mean() .rename(columns={'消費支出': '売上'})) # ここでは「売上」に見立てる # pandas で時系列移動平均 sales['SMA_7'] = sales['売上'].rolling(window=7).mean() # 7 期 SMA sales['EMA_7'] = sales['売上'].ewm(span=7, adjust=False).mean() # 7 期 EMA # 中心化移動平均(過去+未来の窓) sales['CMA_7'] = sales['売上'].rolling(window=7, center=True).mean() # 加重移動平均 weights = [1, 2, 3, 4, 5] sales['WMA_5'] = sales['売上'].rolling(window=5).apply( lambda x: (x * weights).sum() / sum(weights), raw=True) print(sales.round(1)) |
線形回帰など多くの教師あり学習は、 予測誤差の平均を最小化します:
$$ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $$
「予測 ŷ と真値 y のズレを2乗して平均」。 「平均」を最小化するから、 結果は「予測誤差ゼロの中心」 = 条件付き平均 E[Y|X] になります。
機械学習モデルの誤差は3つに分解できます:
$$ \text{誤差} = \text{バイアス}^2 + \text{バリアンス} + \text{ノイズ} $$
両方とも平均が基本になっています。
深層学習で各層の出力を平均0・分散1に標準化する手法。 ミニバッチ内の平均と分散を計算して使う。 訓練の安定性と速度が劇的に改善する画期的技術(Ioffe & Szegedy, 2015)。
複数の予測モデル(決定木、 ニューラルネット)の予測結果を平均することで精度を上げる手法(バギング、 ランダムフォレスト、 アベレージング)。 「3人寄れば文殊の知恵」を平均で実現。
これらの最適化アルゴリズムは、 過去の勾配の指数移動平均を使って学習率を適応的に調整。 「最近の勾配ほど重視」する平均化が学習を加速。
「平均」という考え方は驚くほど古くから存在しました。 統計学の歴史を簡単に俯瞰します。
💡 「平均」という素朴な概念が、 4000年かけて確率論・統計学・機械学習・物理学の中核に発展してきました。 一見単純なものほど、 深く理解する価値があります。
ベイズ統計学では、 平均は「事前分布と尤度を組み合わせた事後分布の期待値」として登場します。
$$ \mathbb{E}[\mu | x_1, \ldots, x_n] = \frac{\tau_0^2}{\tau_0^2 + \sigma^2/n} \bar{x} + \frac{\sigma^2/n}{\tau_0^2 + \sigma^2/n} \mu_0 $$
事後平均は「標本平均」と「事前平均 μ₀」の加重平均。 サンプルが多いほど標本平均が優勢、 サンプルが少ないほど事前情報が優勢。 これは正則化と本質的に同じ仕組み(Ridge 回帰の原型)。
独立した複数の平均を推定する時、 「すべての平均を全体平均に向けて引き寄せる」推定量(James-Stein 推定量)の方が、 個別の標本平均より必ず精度が高いという驚くべき結果(James & Stein, 1961)。 ベイズ的シュリンケージの原型。
典型的な観察例(2023 年・食料費 L322101 の実測値): 47 都道府県の食料費は AM 80.60 ≈ GM 80.40 ≈ HM 80.20 千円で、 ほぼ一致する(相対的なばらつきが小さいため)。 一方、 人口加重平均は東京・神奈川・大阪のウェイトが効いて約 84.66 千円と上方シフト。 「47 都道府県の単純平均」と「日本の 1 世帯当たり」に近い加重平均が違うものを測っている点が重要。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import numpy as np from scipy import stats # この抜粋だけで動くように、欠損のない実データを用意する # (前のブロックの x は NaN を含むので、そのまま使うと SE も CI も NaN になる) x = np.array([77.90, 78.12, 78.98, 82.00, 83.83, 84.11]) am = x.mean() n = len(x) sd = np.std(x, ddof=1) se = sd / np.sqrt(n) t = stats.t.ppf(0.975, df=n-1) ci_lo, ci_hi = am - t*se, am + t*se print(f'AM = {am:.2f} SE = {se:.2f} 95%CI = [{ci_lo:.2f}, {ci_hi:.2f}]') # ブートストラップ CI(分布仮定不要) from scipy.stats import bootstrap res = bootstrap((x,), np.mean, n_resamples=10000, confidence_level=0.95) print(f'Bootstrap 95%CI = [{res.confidence_interval.low:.2f}, ' f'{res.confidence_interval.high:.2f}]') |
1 2 3 4 5 6 | # 都道府県別データは時系列ではないが、 47県を「人口順」に並べて移動平均でデモ s = df.sort_values('A1101')['L322101'].reset_index(drop=True) # 人口順に食料費を並べる print('移動平均 (window=5) :') print(s.rolling(window=5).mean().round(1)) print('指数加重移動平均 :') print(s.ewm(span=5).mean().round(1)) |
1 2 3 4 5 6 7 | from scipy import stats x = np.array([100, 200, 300, 400, 500]) print('gmean :', stats.gmean(x)) # 幾何平均 print('hmean :', stats.hmean(x)) # 調和平均 print('pmean(p=2) :', stats.pmean(x, 2)) # 二次平均 / RMS print('trim_mean :', stats.trim_mean(x, 0.2)) # 両端20%トリム print('mode :', stats.mode(x, keepdims=True)) |
1 2 3 4 5 6 7 | import pandas as pd s = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(s.mean()) # 5.5 print(s.rolling(window=3).mean()) # 単純移動平均 print(s.rolling(window=3).mean().dropna().tolist()) print(s.ewm(span=3).mean().tolist()) # 指数加重 print(s.expanding().mean().tolist()) # 累積平均 |
1 2 3 4 5 6 7 8 | from statsmodels.stats.weightstats import DescrStatsW, ttest_ind d = DescrStatsW(df['L322101'], weights=df['A1101'], ddof=1) print(f'重み付き平均: {d.mean:.2f}, CI={d.tconfint_mean()}') # 2群平均差検定(不等分散 / Welch t): 都道府県コード 1-23 vs 24-47 で東西分割 a = df.loc[df['Code'].str[1:3].astype(int)<=23, 'L322101'] # 北海道〜愛知 b = df.loc[df['Code'].str[1:3].astype(int)> 23, 'L322101'] # 三重〜沖縄 t, p, _ = ttest_ind(a, b, usevar='unequal') print(f'コード1-23 vs 24-47: t={t:.2f}, p={p:.4f}') # t=2.76, p=0.0087(2023 年実測) |
1 2 3 4 | from scipy.stats import bootstrap res = bootstrap((df['L322101'].values,), np.mean, method='BCa', n_resamples=10000) print('BCa 95%CI =', res.confidence_interval) |
1 2 3 4 5 6 | import statsmodels.api as sm # Huber の M-estimator huber = sm.robust.scale.Huber() x = df['L322101'].astype(float).values # 食料費(円) mu_huber, sigma_huber = huber(x) print(f'Huber 中心 = {mu_huber:.2f}, スケール = {sigma_huber:.2f}') |
平均のいちばん確かなイメージは「データの合計を個数で割った重心」です。 数直線に同じ重さの玉としてデータを置くと、 ちょうど釣り合う一点(てこの支点)が平均。 各玉から支点までの距離(偏差)は左右で必ず打ち消し合い、 総和は $\sum_i (x_i-\bar{x})=0$ になります。 「重心(バランス点)」と「ならすと1件あたりいくらか(等分配)」——この2つの言い方はどちらも同じ $\bar{x}=\frac1n\sum x_i$ を指しています。 上部の 🎨 直感で掴む と 🎮 触って理解する のシーソー図も同じ話です。
てこ(モーメント)の釣り合いとして見ると、 平均の性質が一目で分かります。 支点から遠い玉ほど「引っ張る力(モーメント=偏差)」が大きいので、 遠くの1個を動かすと支点は大きくずれる——これが外れ値感応の物理的な正体です。 逆に支点のすぐ近くの玉をいくら動かしても平均はほとんど動きません。
「平均」は算術平均だけではありません。 何を等分配したいのかで使う平均が変わります。 目安は「足し算でならすなら算術、 掛け算(倍率)でならすなら幾何、 逆数(率・速度)でならすなら調和、 重要度に差があるなら加重」。
| 種類 | ならす対象 | 式 | 代表的な場面 |
|---|---|---|---|
| 算術平均 (AM) | 和 | $\frac1n\sum x_i$ | 身長・気温・食料費など通常の量 |
| 幾何平均 (GM) | 積(倍率) | $\left(\prod x_i\right)^{1/n}$ | 成長率・複利・株価収益率・比率 |
| 調和平均 (HM) | 逆数 | $n/\sum\frac1{x_i}$ | 往復の平均速度・スループット・F1 |
| 加重平均 (WM) | 重み付きの和 | $\frac{\sum w_i x_i}{\sum w_i}$ | 人口加重の全国平均・成績(単位×評点) |
47都道府県の家計食料費(L322101, 千円/月)で3つの平均を計算すると、 算術 80.60 ≥ 幾何 80.40 ≥ 調和 80.20 千円(実測値)。 差は小さいですが、 大小関係が理論どおり成り立っています。 ばらつきが小さいほど3者は近づき、 全値が等しいときだけ一致します。 逆にばらつきが大きい量(次節の人口)ではGM・HMがAMからぐっと下に離れます。 上部の🎮ウィジェットでも紫の◆(幾何/調和)が赤い支点▲(算術)の左側に来ることで、 この不等式を目で確認できます。
関連:代表値(中心傾向)/中央値/最頻値。 期待値・加重平均・幾何平均・調和平均の単独ページは本サイトでは未整備のため、 本ページ内の 📐 4種類の平均 節を参照してください。
平均は全データを等しく扱うので、 極端に大きい1個で大きく動きます。 SSDSE-B-2026(2023年)の総人口 A1101を見ると、 47都道府県の算術平均は約264.6万人なのに中央値は約154.9万人——平均が中央値より約110万人も高い右に裾を引いた分布です。 犯人は東京都の約1408.6万人という突出値。 実際、 東京都を1県外すだけで算術平均は264.6万→239.7万人へ約25万人も下がりますが、 中央値はほとんど動きません。 「平均的な都道府県」を語りたいなら中央値の方が実態に近いのです。
所得・地価・人口・被害額のように右に長い裾を引く分布では、 平均は少数の巨大値に引っ張られ「典型的な値」からずれます。 鉄則は平均と中央値を必ず併記し、 両者が離れているほど分布の歪みを疑うこと。 さらにヒストグラムや箱ひげ図で形を見れば、 「平均年収600万円」の見出しに惑わされずに済みます。 詳しくは 中央値、 外れ値、 ロバスト統計、 ばらつきの見方は 分散・標準偏差 を参照。
倍率(成長率)を平均するなら幾何平均、 率や速度を平均するなら調和平均が正解です。 (架空例)投資が「+50%→−50%」の2年なら、 算術平均は0%でも実際は $1.5\times0.5=0.75$ で−25%の損失。 幾何平均 $\sqrt{1.5\times0.5}-1\approx-13.4\%$ がこの実感に合います。 実データ例(SSDSE-B-2026)としては、 食料費の単純算術平均80.60千円に対し、 人口を重みにした加重平均は84.66千円(実測)。 人の多い大都市圏の食料費が高いため、 「日本の世帯が実際に払う平均像」に近いのは加重平均で、 両者は約4千円も食い違います。 どの重みで平均するかで数値は変わります。
(架空例)ある2病院の治療成功率が、 軽症・重症のどちらの患者でも病院Aが病院Bを上回るのに、 全患者をまとめると病院Bの成功率が高く見える——こうした逆転が起こります。 原因は、 病院Aに重症患者(成功率が低い層)が偏って集まっているといった層ごとの人数(重み)の偏り。 全体平均は各層の加重平均なので、 重みが偏ると結論がひっくり返ります。 平均だけで「A→Bに差がある」と断じる前に、 交絡しそうな変数(年齢・地域・重症度)で層別化したサブグループ平均を必ず確認しましょう。
(架空例)ある年に極端に成績の良かった選手が翌年は平凡に戻り、 極端に悪かった選手が翌年は持ち直す——これは平均への回帰で、 測定に偶然(運)の成分がある限り自然に起こる統計現象です。 「叱ったら伸びた/褒めたら落ちた」を因果と早合点するのが典型的な罠。 極端値の次の観測は母平均側へ戻りやすいとだけ理解しておけば、 施策の効果と偶然の揺り戻しを取り違えずに済みます。
同じ平均でも中身はまったく違い得ます。 平均は位置しか語らないので、 ばらつき(分散・標準偏差)や形(歪度・裾)とセットで初めて分布を語れます。 「平均±標準偏差」だけでなく、 分布そのもの(ヒストグラム)を見る癖をつけましょう。 → 分散・標準偏差・共分散。
非負データでは常に算術平均 ≥ 幾何平均 ≥ 調和平均が成り立ちます(等号は全値が等しいときのみ)。 これは凸関数に対するイェンセンの不等式の特例で、 $\log$ が凹関数であることから $\log$ の平均 ≤ 平均の $\log$ が導け、 GM ≤ AM が出ます。 HM は「逆数のAMの逆数」で、 逆数変換に同じ議論を当てると GM ≥ HM が従います。 上の 🧭 直感を深める で見たとおり、 食料費の実測でも 80.60 ≥ 80.40 ≥ 80.20 と成立していました。
$$ \frac{n}{\sum \frac1{x_i}} \;\le\; \left(\prod x_i\right)^{1/n} \;\le\; \frac1n\sum x_i $$
加重平均 $\bar{x}_W=\frac{\sum w_i x_i}{\sum w_i}$ で、 重みを合計1に正規化($p_i=w_i/\sum w_j$)すると $\bar{x}_W=\sum p_i x_i$。 これは確率分布に対する期待値 $\mathbb{E}[X]=\sum p_i x_i$ とまったく同じ形です。 つまり「加重平均=確率を重みにした平均」。 標本平均 $\bar{x}$ は各点に等確率 $1/n$ を置いた期待値で、 母平均 $\mu=\mathbb{E}[X]$ の不偏推定量($\mathbb{E}[\bar{x}]=\mu$)になります。 人口加重で全国平均を作る作業は、 「都道府県を人口比の確率で引く」期待値計算そのものです。
外れ値感応を弱めつつ情報量を保つ折衷案がトリム平均(上下 α% を捨ててから算術平均)とウィンザー化平均(上下 α% を境界値に置換してから算術平均)です。 SSDSE-B-2026(2023年)の食料費では、 単純算術平均 80.60・10%トリム平均 80.22・10%ウィンザー化平均 80.34 千円(いずれも実測)。 食料費は外れ値が弱いため差は小さいですが、 人口のように裾が長い量ではトリム/ウィンザー化がAMより中央値側に大きく寄ります。 崩壊点(何%汚染まで壊れないか)は 中央値50% > トリム平均α% > 算術平均0%。 → ロバスト統計。
「地方ブロックごとの平均食料費」のように、 条件 $Y$ を与えたときの平均を条件付き期待値 $\mathbb{E}[X\mid Y]$ と呼びます。 全体平均はグループ平均を重み(各グループの割合)で束ねた加重平均になり、 これが繰り返し期待値の法則 $\mathbb{E}[X]=\mathbb{E}\big[\mathbb{E}[X\mid Y]\big]$ です。 回帰分析は「説明変数を与えたときの条件付き期待値 $\mathbb{E}[X\mid Y]$ を推定する営み」と読み替えられ、 平均は回帰の一番単純な形(説明変数なしの $\mathbb{E}[X]$)にあたります。 なお前節④のシンプソンのパラドックスは、 この重み付けが層で偏ると全体平均が層内平均と食い違う現象でした。
大数の法則は「サンプルを増やすほど標本平均 $\bar{x}_n$ が母平均 $\mu$ に収束する」という保証です($\bar{x}_n \to \mu$)。 さらに中心極限定理により標本平均のばらつきは $\sigma/\sqrt{n}$(標準誤差)で縮み、 分布は正規に近づきます。 だから平均には信頼区間や $t$ 検定といった強力な理論が使えるのです(本ページ 📐 数式 節に東北6県での信頼区間の実演あり)。 中央値にも同種の理論はありますが取り扱いはやや複雑で、 「平均が統計学の主役である」理由はこの理論的な扱いやすさにあります。 大数の法則・中心極限定理の単独ページは本サイト未整備のため、 本ページ内解説を参照してください。