論文一覧に戻る 📚 用語解説(ジャストインタイム型データサイエンス教育)
最小二乗法(OLS)
Ordinary Least Squares (OLS) (OLS)
残差(実測値 − 予測値)の二乗和を最小化して回帰係数を推定する古典的手法。
回帰モデルOLS最小二乗OLS回帰通常最小二乗法
📍 文脈💡 30秒結論📖 詳しく🎨 直感図📐 数式🔬 読み解き🧮 計算してみる🎓 深掘り⚠️ 落とし穴🔗 関連用語

🔖 キーワード索引

📍 文脈 💡 30秒結論 📖 詳しく 🎨 直感 📐 数式 🔬 読み解き 🧮 実値計算 🐍 Python ⚠️ 落とし穴 🌐 関連手法 🔗 関連用語 📚 教材

💡 30秒で分かる結論

🍰 まずはやさしく

データに合う直線を引くルールです。

一番いい直線の位置を決めるために使います。

スマホの利用時間と成績の関係を調べます。

この方法の結論を短くまとめました。

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

🍰 まずはやさしく

分析結果の最初に出てくる基本の手法です。

データの傾向を正しく読み取るために使います。

部活の練習量と試合結果の関係を調べます。

この手法がどこで使われるかを確認します。

回帰分析の出力で最初に出てくる「OLS Regression Results」。 また論文の手法説明で「OLS重回帰」「最小二乗法による推定」と書かれている部分。 ほぼ全ての回帰分析の出発点となる推定法。

最小二乗法(OLS) とは:残差(実測値 − 予測値)の二乗和を最小化して回帰係数を推定する古典的手法。

📖 もっと詳しく

「直線をデータに当てはめる」のが回帰分析の本質。 ですが、 47都道府県の散布図を見ると点は綺麗に直線に並んでいません。 ばらつきがある中で、 「どの直線が最もよく当てはまるか」を一意に決めるルールが必要です。 そのルールが 最小二乗法(Ordinary Least Squares, OLS)

OLSの核心アイデア: 各データ点の 「予測値とのズレ(=残差)」を 2乗して、 全部足したもの(=残差平方和、 RSS)が 最小 になるような直線を選ぶ、というルールです。 なぜ2乗するかは:(i) 正のズレと負のズレが相殺しないように、 (ii) 大きいズレほどより重く罰するため、 (iii) 数学的に解析的解が出るため。

OLSは19世紀初頭(ガウス、ルジャンドルら)に天体観測の誤差処理として開発された古典中の古典。 ですが、 一定の仮定(線形性・等分散性・独立性・正規性)を満たせば、 現代でも最良線形不偏推定量(BLUE: Best Linear Unbiased Estimator)として最強の推定法です(ガウス-マルコフの定理)。

🎨 直感で掴む

🍰 まずはやさしく

点と直線のズレを小さくするイメージです。

最もズレが少ない直線を引くために使います。

買い物で予算と支出のバランスを考えます。

なぜズレを2乗して計算するのかを学びます。

最小二乗法(OLS)
OLSは「各点から直線への縦方向の距離(点線)」の2乗和が最小になる直線を引く。 47都道府県の高齢化率→死亡率の例。

図の点線が各点での 残差(residual) です。 直線をどこに引くかで残差は変わります。 OLSは「残差の2乗を全部足した値」が最小になる位置に直線を置きます。

なぜ「2乗」なのかを直感で説明すると:

📐 数式

🍰 まずはやさしく

ズレの合計を最小にする計算式です。

正確な数値を導き出すために使います。

テストの点数の平均的な上がり方を調べます。

計算の手順を数式で詳しく見ていきましょう。

【OLS推定量(行列形式の閉形式解)】
$$\hat{\boldsymbol{\beta}} = \arg\min_{\boldsymbol{\beta}} \sum_{i=1}^{n} (y_i - \mathbf{x}_i^\top \boldsymbol{\beta})^2 = (X^\top X)^{-1} X^\top \mathbf{y}$$
残差平方和を最小化した結果は、 一発で閉形式に解ける(数値最適化不要)

🔬 数式を「言葉」で読み解く

$\mathbf{y}$
目的変数のベクトル(n×1):例えば各都道府県の死亡率
$X$
説明変数の行列(n×(k+1)):先頭に1の列(切片用)、 続いて各変数の列
$\boldsymbol{\beta}$
回帰係数のベクトル((k+1)×1):切片と各説明変数の係数
$\sum (y_i - \mathbf{x}_i^\top \boldsymbol{\beta})^2$
残差平方和(RSS):実測値と予測値のズレの2乗の和
$(X^\top X)^{-1}$
逆行列。 説明変数同士の相関構造を反映。 多重共線性で計算が不安定に

🧮 計算してみる

簡単な5都道府県のデータで、 OLSの仕組みを手で追ってみましょう(高齢化率 x → 死亡率 y)。

STEP 1 データの平均を計算
x = [39, 36, 28, 26, 23] → x̄ = 30.4
y = [19, 17, 13, 12, 11] → ȳ = 14.4
STEP 2 傾き β = Σ(x−x̄)(y−ȳ) / Σ(x−x̄)² を計算
分子: (8.6)(4.6)+(5.6)(2.6)+(−2.4)(−1.4)+(−4.4)(−2.4)+(−7.4)(−3.4) ≈ 39.6+14.6+3.4+10.6+25.2 = 93.4
分母: 8.6²+5.6²+(−2.4)²+(−4.4)²+(−7.4)² = 74+31.4+5.8+19.4+54.8 = 185.4
β = 93.4 / 185.4 ≈ 0.504
STEP 3 切片 α = ȳ − β·x̄ を計算
α = 14.4 − 0.504 × 30.4 ≈ −0.93
回帰直線:y = −0.93 + 0.504·x
STEP 4 解釈
「高齢化率が1%ポイント増えると、 死亡率は約 0.5‰ 増える」。 これがOLSが推定した「最もデータに合う」関係。 残差を計算して2乗して合計すると、 これより小さい組み合わせは存在しません。

🎓 Gauss-Markov の定理 — なぜ OLS がベストなのか

5つの古典的仮定(線形性、 誤差の独立、 等分散、 期待値0、 説明変数と誤差の無相関)が全て成立するとき、 OLS推定量は次の意味で「最強」と証明されています:

不偏性(unbiasedness):$E[\hat{\beta}] = \beta$。 平均すれば真の値を当てる。

分散最小(efficiency):他の線形不偏推定量と比べて、 OLSの分散が最小。 つまり最も精度が高い。

これを BLUE: Best Linear Unbiased Estimator と呼びます。 「線形」「不偏」の枠内で「best」、 という条件付き最強です。 非線形でもよいなら別の推定量(リッジ回帰、 LASSO、 木モデル)の方が良いこともあります。

仮定が破れたら

⚠️ よくある落とし穴

❌ 仮定を確認せずに係数だけ報告する
OLSの仮定が破れているのに気づかず、 「係数 = 0.5 で有意」と言ってしまうのは非常によくあるミス。 残差プロット、 Q-Qプロット、 VIF で仮定を診断するのは必須の儀式。
❌ 外れ値の影響を過小評価
OLSは残差の2乗を最小化するため、 1つの大きな外れ値が直線を大きく動かします。 散布図で外れ値を確認し、 必要に応じて Robust regression(M推定など)を使う。
❌ 多重共線性下で係数解釈をする
説明変数同士が強く相関していると、 $(X^\top X)^{-1}$ が不安定になり、 個々の係数の標準誤差が爆発します。 VIF で確認し、 必要なら変数を絞るか Ridge回帰へ。
❌ 外挿(観測範囲外への予測)
高齢化率 23〜39% のデータで推定した直線を、 「もし50%になったら?」に当てはめるのは危険。 直線関係が広い範囲で成り立つ保証はない。

👁️ 直感 — OLSは「残差の二乗和を最小化する直線」

最小二乗法(Ordinary Least Squares, OLS)は、 「観測データに最もよく当てはまる直線」を見つける方法。 各観測値の予測値からのズレ(残差)の二乗を全て足した値を最小化するのが基本原理。

OLSの直感

47都道府県の食料費(x)から教育費(y)を予測する単回帰。 赤い直線が OLS の解 y = 0.525x + -32.71。 黄色い縦線が残差(観測値と予測値の差)。 この縦線の二乗を全部足した値を最小にする直線を選んでいます。

💡 なぜ「二乗」を最小化する? 単なる距離だと符号が混ざる、 絶対値は微分困難、 二乗なら滑らかで唯一の解が得られる。 加えてガウス分布の最尤推定と一致するため、 統計理論的にも自然。

📐 幾何学的解釈 — 射影としてのOLS

OLS は数学的には「観測ベクトル y を、 説明変数が張る部分空間に直交射影する」操作。 射影された点が予測値 ŷ、 ズレが残差 e。

OLSの幾何

残差ベクトル e と説明変数空間が直交するのが OLS の特徴。 これが「最小二乗 = 直交射影」と呼ばれる所以。

📐 数式と読み方

① 単回帰モデル

$$ y_i = \beta_0 + \beta_1 x_i + \varepsilon_i $$

② 損失関数(残差二乗和)

$$ S(\beta_0, \beta_1) = \sum_{i=1}^{n} (y_i - \beta_0 - \beta_1 x_i)^2 $$

これを最小化する β を求めるのが OLS。

③ 単回帰の解(閉形式)

$$ \hat{\beta}_1 = \frac{\sum(x_i - \bar{x})(y_i - \bar{y})}{\sum(x_i - \bar{x})^2} = \frac{\text{Cov}(x, y)}{\text{Var}(x)} = r \cdot \frac{s_y}{s_x} $$

$$ \hat{\beta}_0 = \bar{y} - \hat{\beta}_1 \bar{x} $$

④ 重回帰の行列形式

$$ \mathbf{y} = \mathbf{X} \boldsymbol{\beta} + \boldsymbol{\varepsilon} $$

正規方程式の解:

$$ \hat{\boldsymbol{\beta}} = (X^T X)^{-1} X^T y $$

「エックス転置エックスの逆 エックス転置ワイ」 — OLSの最も重要な公式。 機械学習・統計学の基本。

📋 OLS の4つの仮定 — Gauss-Markov 定理

OLS が「最良線形不偏推定量(BLUE)」となるための仮定:

  1. 線形性:y と x の関係が線形
  2. 独立性:誤差項 ε_i が互いに独立
  3. 等分散性(homoskedasticity):Var(ε_i) = σ² が一定
  4. 正規性:ε_i ~ N(0, σ²)(厳密にはGM定理に不要、 検定で必要)
OLSの仮定

Gauss-Markov 定理

「線形性・独立性・等分散性を満たすとき、 OLS推定量は最良線形不偏推定量(BLUE: Best Linear Unbiased Estimator)」。 同じ条件下で他の線形不偏推定量より分散が小さい。

仮定が崩れたら?

違反 影響 対処
非線形推定量がバイアス多項式項、 ログ変換、 GAM
不等分散SEが不正確WLS、 ロバストSE
自己相関SEが不正確GLS、 時系列モデル
多重共線性係数が不安定Ridge、 LASSO、 PCR
外れ値回帰直線が歪むロバスト回帰

🔍 残差分析 — モデルの「健康診断」

OLS の仮定をチェックする最重要ツールが残差分析。 残差 e_i = y_i - ŷ_i を様々な角度から見る。

残差分析

4つの主要な残差プロット

  1. 残差 vs 予測値:ランダムに散らばっていればOK。 パターンあれば線形性違反 or 不等分散
  2. QQプロット:理論分位と残差分位を比較。 直線に乗れば正規分布
  3. Scale-Location:√|残差| vs 予測値。 等分散性の確認
  4. 残差 vs leverage:影響力のある観測値(Cook's distance)の検出

残差統計量

📊 評価指標 — R² と RMSE

① 決定係数 R²

$$ R^2 = 1 - \frac{SS_{\text{res}}}{SS_{\text{tot}}} = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2} $$

「説明変数 x が y のばらつきの何%を説明できるか」。 0〜1の値。 本ページの SSDSE 例(死亡数 A4200 ~ 65歳以上人口 A1303、 2023 年)では R² = 0.998(99.8%を説明)。

② 調整済み R²

変数を増やすと R² は単調に増加する → 過学習の温床。 これを補正:

$$ R^2_{\text{adj}} = 1 - (1 - R^2) \cdot \frac{n - 1}{n - p - 1} $$

p(説明変数数)が多いほど R² から差し引かれる量が増える。

③ RMSE (Root Mean Squared Error)

$$ \text{RMSE} = \sqrt{\frac{1}{n} \sum (y_i - \hat{y}_i)^2} $$

元の単位での誤差の大きさ。 「予測が平均的に何単位ずれているか」が分かる。

④ MAE (Mean Absolute Error)

$$ \text{MAE} = \frac{1}{n} \sum |y_i - \hat{y}_i| $$

外れ値に強い。 中央値回帰と相性が良い。

⑤ AIC、 BIC

モデル選択指標。 AIC = -2 ln(L) + 2p、 BIC = -2 ln(L) + p ln(n)。 小さいほど良い。 複雑性ペナルティ付き。

🎯 OLS推定量の推測 — 信頼区間と検定

係数の標準誤差

$$ SE(\hat{\beta}_1) = \frac{\sigma_\varepsilon}{\sqrt{n} \cdot s_x} $$

標準誤差を使って t統計量と p値が計算可能:

$$ t = \frac{\hat{\beta}_j}{SE(\hat{\beta}_j)} \sim t(n - p - 1) $$

係数の95%信頼区間

$$ \hat{\beta}_j \pm t_{n-p-1, \alpha/2} \cdot SE(\hat{\beta}_j) $$

F検定(モデル全体の有意性)

全係数が0かどうかを検定:

$$ F = \frac{SS_{\text{reg}} / p}{SS_{\text{res}} / (n - p - 1)} \sim F(p, n-p-1) $$

🐍 Python での OLS

SSDSE-B-2026(2023 年度・47 都道府県)の実データで「死亡数(A4200)~ 65歳以上人口(A1303)」を OLS 単回帰し、 ①statsmodels → ②scikit-learn → ③scipy → ④numpy の順に、 同じ推定値が別ツールでも再現されることを確認します。

① statsmodels(要約表と診断が一度に出る)

🎯 目的:statsmodels で SSDSE-B-2026 の「死亡数(A4200)~ 65歳以上人口(A1303)」を OLS 単回帰し、 係数・R²・信頼区間・残差診断を一括で取得する。
📥 入力:data/raw/SSDSE-B-2026.csv(cp932・skiprows=[1] で日本語ラベル行を除去)。 説明変数:A1303(65歳以上人口)。 目的変数:A4200(死亡数)。
 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 statsmodels.api as sm
import statsmodels.formula.api as smf

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].dropna()

# formula API — R 風(死亡数 A4200 ~ 65歳以上人口 A1303)
model = smf.ols('A4200 ~ A1303', data=df).fit()
print(model.summary())

# 出力情報の取り出し
print(f'beta: {model.params.values}')
print(f'SE:   {model.bse.values}')
print(f'p:    {model.pvalues.values}')
print(f'CI(95%): {model.conf_int().values}')
print(f'R2:      {model.rsquared:.4f}')
print(f'adj R2:  {model.rsquared_adj:.4f}')
print(f'AIC: {model.aic:.2f}, BIC: {model.bic:.2f}')

# 残差診断(等分散の検定)
from statsmodels.stats.diagnostic import het_breuschpagan
bp = het_breuschpagan(model.resid, model.model.exog)
print(f'Breusch-Pagan: stat={bp[0]:.3f}, p={bp[1]:.4f}')

# Influence diagnostics(外れ値・leverage)
infl = model.get_influence()
print(infl.summary_frame()[['cooks_d', 'hat_diag']].sort_values('cooks_d', ascending=False).head())
📤 出力:傾き 0.0419、 切片 1234.13、 R²=0.9981、 p<0.001。 傾きの 95%CI は概ね [0.0414, 0.0424]。
💬 解釈:65歳以上人口が 1 人多い県ほど死亡数が約 0.042 人多い。 R² が 0.998 と極端に高いのは、 両者とも人口規模に比例する「実数(カウント)」だから。 Breusch-Pagan は p≈0.0002 で異分散のサインが出るため、 標準誤差は HC3 ロバスト版で補正するのが安全。

② scikit-learn — OLS・ロバスト回帰・交差検証

🎯 目的:同じ単回帰を scikit-learn で実装し、 通常 OLS・Huber・RANSAC・5-fold CV を比較する。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from sklearn.linear_model import LinearRegression, HuberRegressor, RANSACRegressor
from sklearn.model_selection import cross_val_score

X = df[['A1303']].values   # 65歳以上人口
y = df['A4200'].values     # 死亡数

# 標準 OLS
ols = LinearRegression().fit(X, y)
print(f'OLS:    b0={ols.intercept_:.3f}, b1={ols.coef_[0]:.4f}, R2={ols.score(X, y):.4f}')

# Huber ロバスト回帰(外れ値に頑健)
huber = HuberRegressor().fit(X, y)
print(f'Huber:  b1={huber.coef_[0]:.4f}')

# RANSAC(極端な外れ値があるとき)
ransac = RANSACRegressor(random_state=42).fit(X, y)
print(f'RANSAC: b1={ransac.estimator_.coef_[0]:.4f}')

# 5-fold CV による汎化性能
scores = cross_val_score(LinearRegression(), X, y, cv=5, scoring='r2')
print(f'CV R2: {scores.mean():.3f} +/- {scores.std():.3f}')
📤 出力:OLS・Huber・RANSAC の傾きはいずれも 0.042 前後で一致。 5-fold CV の R² も 0.996 ± 0.004 と安定。
💬 解釈:外れ値に頑健な Huber・RANSAC でも傾きがほぼ変わらない = この関係は少数県(東京など)に引きずられていない。

③ scipy.stats — 単回帰の最短コード

🎯 目的:scipy.stats.linregress で単回帰の傾き・切片・R²・p 値・標準誤差を 1 行で得る。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from scipy import stats

# linregress — 単回帰なら1行で OLS と検定
result = stats.linregress(df['A1303'], df['A4200'])
print(f'切片: {result.intercept:.3f}')
print(f'傾き: {result.slope:.4f}')
print(f'R2:   {result.rvalue**2:.4f}')
print(f'p:    {result.pvalue:.2e}')
print(f'SE:   {result.stderr:.5f}')
print(f'95% CI (傾き): [{result.slope - 1.96*result.stderr:.4f}, {result.slope + 1.96*result.stderr:.4f}]')
📤 出力:切片 1234.13、 傾き 0.0419、 R²=0.9981、 p≈1e-62、 SE=0.00027。
💬 解釈:statsmodels と同じ推定値。 単回帰かつ検定量だけ欲しいときは linregress が最短。

④ numpy で手計算(OLS の正規方程式)

🎯 目的:正規方程式・QR 分解・SVD(lstsq) の 3 通りで β̂ を求め、 一致することを確認する。
 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 numpy as np

x = df['A1303'].values.astype(float)   # 65歳以上人口
y = df['A4200'].values.astype(float)   # 死亡数

# 設計行列 X = [1, x]
X = np.column_stack([np.ones(len(x)), x])

# 正規方程式 beta = (X'X)^(-1) X'y
beta_hat = np.linalg.solve(X.T @ X, X.T @ y)
print(f'beta (正規方程式): {beta_hat}')

# QR 分解で安定性向上
Q, R = np.linalg.qr(X)
beta_qr = np.linalg.solve(R, Q.T @ y)
print(f'beta (QR分解): {beta_qr}')

# SVD(最も数値的に安定、 lstsq の実装)
beta_svd, residuals, rank, sv = np.linalg.lstsq(X, y, rcond=None)
print(f'beta (SVD/lstsq): {beta_svd}')

# 各種統計量
y_pred = X @ beta_hat
resid = y - y_pred
TSS = np.sum((y - y.mean())**2)
RSS = np.sum(resid**2)
R_sq = 1 - RSS/TSS
print(f'R2: {R_sq:.4f}')
📤 出力:3 手法とも β̂ ≈ [1234.13, 0.0419]、 R²=0.9981。 正規方程式・QR・SVD が一致。
💬 解釈:$\hat{\beta} = (X^\top X)^{-1}X^\top y$ を実装するだけで statsmodels と同じ結果。 多重共線性が強い場面では QR / SVD の方が数値的に安定。

🏛 OLS の歴史・思想・他分野での使われ方

200 年以上の歴史 — 天体観測の苦闘から生まれた

最小二乗法は、 18 世紀末から 19 世紀初頭にかけて、 ガウス (Carl Friedrich Gauss, 1777-1855)ルジャンドル (Adrien-Marie Legendre, 1752-1833)ラプラス (Pierre-Simon Laplace, 1749-1827) らによって独立に提案・発展された推定法です。 直接のきっかけは 1801 年の小惑星セレス (Ceres) の発見と再観測問題でした。 1801 年 1 月にイタリアの天文学者ピアッツィが新しい天体を発見しましたが、 観測データは 41 日分しかなく、 太陽の背後に隠れた後で再発見するには、 限られたデータから軌道を高精度に推定する必要がありました。 ガウスは当時 24 歳で、 自ら考案した最小二乗法を用いて軌道を計算し、 1801 年 12 月末、 ピアッツィの最後の観測から 1 年弱経った時点で、 ガウスの予測に従って観測した結果、 ほぼ予測通りの位置にセレスを再発見することができました。 この劇的な成功が、 最小二乗法を一気に 科学的計算の中核ツール として確立しました。

公式の最初の発表はルジャンドルが 1805 年の著書『彗星の軌道決定の新方法』で行いましたが、 ガウスは「自分は 1795 年から使っていた」と主張し、 優先権争いが起こりました。 真相は今も決着していませんが、 ガウスは 1809 年に 誤差の正規分布を仮定すれば最小二乗法が最尤推定と一致する という、 統計学史に残る重要な理論的基礎づけを行いました。 これが現代まで続く「正規分布 + OLS」セットの起源です。

19 世紀後半、 ゴルトン (Francis Galton) は両親と子供の身長の関係を最小二乗法で分析する中で、 「平均への回帰 (regression toward the mean)」という現象を発見しました。 高身長の親の子供は親より平均寄り、 低身長の親の子供も親より平均寄りに「回帰」する、 という統計的性質です。 「回帰 (regression)」という用語はここから来ていて、 現代の機械学習で「回帰モデル」と呼ぶのも、 元をたどればこの語源にたどり着きます。 ピアソン (Karl Pearson) はゴルトンの研究を理論化し、 相関係数回帰係数 の関係を整理し、 現代統計学の基礎を築きました。 20 世紀に入ると、 フィッシャー (R.A. Fisher) が 分散分析 (ANOVA)最尤推定 の理論を完成させ、 OLS は単なる計算手法から、 統計的推測の体系の中核 へと位置づけが昇格しました。 こうして、 18 世紀の天体観測ツールが、 21 世紀のビッグデータ・機械学習時代まで生き残る「不滅の方法」になったのです。

200 年以上前に確立されながら、 なぜ最小二乗法は色褪せないのでしょうか。 理由は 3 つに集約できます。 第 1 に、 「残差を 2 乗して足す」という非常にシンプルな数学が、 線形代数の枠組み(正規方程式・射影・特異値分解)と美しく結びついていること。 第 2 に、 仮定が満たされる限り「最良線形不偏推定量 (BLUE)」という最強の理論保証が付いてくること。 第 3 に、 仮定が破れた時の 診断ツールと対処法 が整備されており、 失敗のリカバリーまで含めて「再現可能な分析プロセス」を提供してくれること。 現代のディープラーニングの最終層、 ベイズ階層モデルの事前分布、 制約付き最適化の双対問題 — どこを開けても OLS の影が見えるほど、 この方法は統計学・データ科学の 原子 として機能し続けています。

🌐 他分野での OLS — 経済学・心理学・物理学・機械学習

分野 代表的な使われ方 注意される点
計量経済学需要関数、 供給関数、 賃金関数(ミンサー方程式)の推定。 因果効果の識別。内生性、 操作変数、 自然実験。 ロバスト標準誤差。
心理学・教育学テスト得点と学習時間の関係、 心理尺度の項目分析、 階層線形モデル。クラスター標準誤差(学校・クラス)、 マルチレベル分析。
物理学・工学実験データへの理論曲線フィット、 校正曲線、 信号処理。測定誤差が x にもある場合は TLS(直交回帰)が望ましい。
疫学・公衆衛生死亡率・罹患率と社会経済指標の関連分析、 環境暴露評価。エコロジカルな誤謬、 個人レベルと集団レベルの相違。
機械学習ベースラインモデル、 ニューラルネットの最終層、 線形 SVM の双対問題。特徴量数 >> サンプル数の場合は Ridge/LASSO 必須。
ファイナンスCAPM のベータ推定、 リスクファクター分析、 イベントスタディ。時系列の自己相関、 異分散、 GARCH モデルとの併用。
政治学・社会学投票率・選好の決定要因、 国別比較、 サーベイデータ分析。標本ウエイト、 複雑な調査設計に対応した分散推定。

🧠 OLS が「思想」として持つ 3 つの含意

  1. 「平均」をモデル化する哲学:OLS の予測値は「与えられた x のもとでの y の条件付き平均」を推定する。 中央値ではなく平均にこだわるのは、 「全観測点を等しく扱う」「外れ値も無視しない」という思想の表れ。 もし外れ値を排除したいなら分位点回帰、 中央値だけ見たいなら LAD 回帰へ。
  2. 「線形性」という強い前提を受け入れる代わりに、 計算可能性と解釈性を得る:OLS の係数は「他の変数を一定とした時、 x を 1 単位増やすと y が β 単位変わる」という極めて分かりやすい意味を持つ。 ブラックボックスな機械学習では難しい 説明責任 (accountability) が果たせるのが OLS の最大の魅力。
  3. 「仮定の確認」を強制する:OLS の理論枠組みは、 推定の信頼性を「仮定が満たされているかどうか」に明示的に紐づけている。 残差プロット、 Q-Q プロット、 VIF、 Durbin-Watson — これらの診断ツールを通して、 分析者は自分のモデルの限界に直面させられる。 これは機械学習の評価指標(精度や AUC)では得られない、 科学的誠実さ を育てる効果がある。

🗺 概念マップ — OLS を中心とした学習ネットワーク

最小二乗法(OLS)は、 統計学・機械学習・経済学・心理学など、 ほぼあらゆる定量分野で「最初に学ぶ」推定法であり、 同時に、 より高度な推定法(一般化線形モデル、 罰則付き回帰、 ベイズ推定、 因果推論)の基礎でもあります。 ここでは、 OLS の上位概念・並列概念・派生概念・周辺概念をツリーで整理します。

📚 OLS の位置づけ(4 階層)

【最上位】 統計的推定 (Statistical Estimation)
 ├ 点推定 (Point Estimation)
 │  ├ 最尤推定 (MLE) — 尤度を最大化
 │  ├ モーメント法 (MoM) — 標本モーメントを母モーメントに一致させる
 │  ├ 最小二乗法 (OLS) ←★ 本ページ ★ 残差平方和を最小化
 │  └ ベイズ推定 (MAP/EAP) — 事後分布から推定
 └ 区間推定 (Interval Estimation) — 信頼区間・予測区間

【中位】 OLS の対象モデル
 ├ 単回帰 (Simple Linear Regression) — 説明変数 1 個
 ├ 重回帰 (Multiple Linear Regression) — 説明変数複数
 ├ 多項式回帰 (Polynomial Regression) — 非線形項を線形パラメータで
 └ 変換回帰 (Log-linear, Box-Cox) — y や x を変換

【下位】 OLS を拡張・修正した推定法
 ├ WLS (Weighted LS) — 観測ごとに重みづけ → 異分散対策
 ├ GLS (Generalized LS) — 誤差の共分散構造を一般化
 ├ TLS (Total LS) — x にも誤差がある場合(直交回帰)
 ├ IRLS (Iteratively Reweighted LS) — ロバスト回帰の中心アルゴリズム
 ├ 2SLS / IV — 内生性対策の操作変数法
 ├ Ridge / LASSO / ElasticNet — 罰則項を追加した縮小推定
 └ Quantile Regression — 残差の絶対値(中央値や任意分位点)を最小化

【周辺】 OLS の診断・評価ツール
 ├ 残差分析 — 残差プロット、 Q-Q プロット、 Durbin-Watson 検定
 ├ VIF / 条件数 — 多重共線性チェック
 ├ てこ比 (leverage), Cook の距離 — 影響点検出
 ├ R² / 調整済み R² / AIC / BIC — モデル選択指標
 └ F 検定 / t 検定 / 信頼区間 — 統計的検定

🔄 OLS の派生・拡張系統図

OLS は「等分散・独立・線形・誤差期待値 0」の仮定が満たされる時に BLUE(最良線形不偏推定量)になりますが、 仮定が崩れると派生法に切り替える必要があります。 どの仮定が崩れた時に、 どの拡張へ進むかを整理しましょう。

崩れる仮定 症状(残差プロットなど) 推奨される代替推定法 Python ライブラリ
等分散性 (homoscedasticity)残差プロットが「ラッパ型」WLS, HC3 ロバスト標準誤差statsmodels.WLS, fit(cov_type='HC3')
誤差の独立性Durbin-Watson が 2 から大きく外れる、 時系列のラグ相関GLS, ARIMA, クラスター標準誤差statsmodels.GLS, statsmodels.tsa.arima
線形性残差 vs 予測値プロットが曲線パターン多項式回帰, GAM, 非線形回帰, 機械学習sklearn.preprocessing.PolynomialFeatures, pyGAM
説明変数と誤差の無相関(内生性なし)パラメータがバイアス、 因果効果と相関効果がズレる2SLS (操作変数法), 差分の差分法 (DID), 傾向スコアlinearmodels.IV2SLS, statsmodels
多重共線性が低いVIF > 10, 係数の符号が直感に反する、 標準誤差が爆発Ridge, LASSO, 主成分回帰 (PCR)sklearn.linear_model.Ridge/Lasso
外れ値に頑健数件の異常値が回帰直線を大きく動かすHuber 回帰, RANSAC, 分位点回帰sklearn.linear_model.HuberRegressor/RANSACRegressor
目的変数が連続値y が 2 値、 カウント、 順序などロジスティック回帰, ポアソン回帰, 順序ロジット(GLM 系)statsmodels.GLM, sklearn.linear_model.LogisticRegression

🧭 学習ロードマップ — OLS の前と後

OLS を本当に使いこなすには、 前提となる線形代数・統計学・確率論を押さえた上で、 派生手法へ展開していく順序が大切です。 SSDSE-B-2026 を題材に、 おすすめの学習ステップを示します。

段階 学ぶ内容 SSDSE-B-2026 を使った演習例
線形代数の基礎(行列、 ベクトル、 内積、 逆行列)人口・面積・所得の 3 列を X 行列にして、 X.T @ X の意味を考える
平均・分散・共分散・相関の意味と計算高齢化率と死亡率の相関係数 r を計算(OLS の傾きと一致することを確認)
単回帰 OLS(このページの中心)総人口(A1101)→ 出生数(A4101)で scipy.stats.linregress を実行、 R² を確認
重回帰 OLS と多重共線性死亡率 ~ 高齢化率 + 医師数 + 一人当たり所得 の 3 変数モデルで VIF をチェック
残差診断(線形性、 等分散、 正規性、 独立性)残差プロット、 Q-Q プロット、 Breusch-Pagan 検定を可視化
仮定が崩れた時の対処(WLS, ロバスト SE)東京を外れ値として影響を見る、 HC3 標準誤差で再推定
罰則付き回帰(Ridge, LASSO)と交差検証SSDSE-B の数値列を全て説明変数にし、 LASSO で変数選択
GLM への拡張(ロジスティック、 ポアソン)「高齢化率 30% 以上か否か」を 2 値化してロジスティック回帰
因果推論(IV, DID, 傾向スコア)医師数が死亡率に与える因果効果を、 内生性を意識して推定する
ols 線形代数・共分散 WLS・GLS Ridge・LASSO 重回帰・予測モデル 最尤推定 (MLE) GLM・ロジスティック

🎓 理解度チェック — OLS クイズ 7 問

ここまでの学習を「使える知識」に変えるための確認問題。 答えはクリック(タップ)で表示。 全問正解なら、 OLS の核心は押さえたと言ってよいでしょう。

Q1. OLS が最小化するのは何ですか?

答え:残差の 2 乗和(RSS, Residual Sum of Squares)。 単なる和ではなく、 単なる絶対値の和でもなく、 「(実測値 − 予測値) の 2 乗」を全観測点で合計した値。 2 乗するのは ① 正負を相殺しない、 ② 大きいズレを重く罰する、 ③ 数学的に解析解が出る、 という 3 つの利点があるため。

Q2. Gauss-Markov の定理が言う「BLUE」とは何の略?

答えBest Linear Unbiased Estimator(最良線形不偏推定量)。 ここで「最良」とは「分散が最小」という意味で、 「線形」「不偏」という枠の中で他のどんな推定量よりも分散が小さい、 という条件付き最強の地位。 仮定が満たされなければ BLUE ではなくなる。

Q3. 線形回帰 OLS の正規方程式は?

答え:$\hat{\boldsymbol{\beta}} = (X^\top X)^{-1} X^\top \mathbf{y}$。 説明変数行列 X の転置と X 自身の積の逆行列に、 X の転置と目的変数ベクトル y を掛けたもの。 これは閉形式の解で、 反復計算なしに 1 回の行列演算で求まる。 ただし $X^\top X$ が特異(多重共線性が完全)だと逆行列が存在せず計算できない。

Q4. R² が 0.95 なら良いモデル、 と言える?

答え必ずしも言えない。 R² は「データの分散を説明できた割合」だが、 ① 説明変数を増やせば必ず上がる(過学習)、 ② 時系列で y にトレンドがあれば自動的に高くなる(疑似回帰)、 ③ 因果関係を保証しない、 という落とし穴がある。 調整済み R²AIC/BIC交差検証スコア残差診断 を合わせて評価することが重要。

Q5. 残差プロットが「ラッパ型」(予測値が大きいほど残差の散らばりが大きい)に見える。 何が問題?

答え等分散性(homoscedasticity)の仮定が崩れている、 つまり 異分散(heteroscedasticity)。 OLS の点推定(係数)自体は不偏のままだが、 標準誤差が誤って計算されるので t 検定や信頼区間が信頼できなくなる。 対処:① HC3 ロバスト標準誤差に切り替える、 ② WLS(加重最小二乗法)で重みづけする、 ③ y を対数変換するなど分散を安定化する。

Q6. VIF(分散拡大要因)が 15 と出た。 どうするべき?

答え:多重共線性が 深刻(一般的な目安:VIF>10 は問題、 VIF>5 で警戒)。 対処の選択肢:① その変数を 除外 する、 ② 強く相関する 2 変数を 主成分 にまとめる(PCA → PCR)、 ③ Ridge 回帰 で係数を縮小して安定化、 ④ LASSO で自動的にどちらかを 0 にする、 ⑤ ドメイン知識でどちらが「より根本的な」変数か判断して残す。 ただ、 予測精度自体に大きな影響はない(係数の解釈と標準誤差だけが歪む)ので、 予測タスクなら無視してもよいことも多い。

Q7. OLS で得た係数の符号が、 ドメイン知識と逆だった。 どう考える?

答え:3 つの可能性を順に検討する。 ① 多重共線性:他の説明変数と強く相関しているため係数が不安定。 VIF を確認し、 単回帰した時の符号と比較する。 ② 欠落変数バイアス(交絡):本来必要な第 3 の変数が抜けているため、 因果関係が表面化していない。 例:「アイスクリーム売上 → 溺死数」の正の相関は「気温」という交絡因子による。 ③ サンプルサイズが小さい:47 都道府県だけだと、 偶然の符号反転も起こり得る(信頼区間を確認、 0 を跨いでいないか)。 最後の手段として、 ④ 本当にドメイン知識の方が誤っている場合もある(新発見)。

🧩 補足解説 — OLS にまつわるよくある誤解を解く

最後に、 OLS の周りで頻繁に飛び交う「もっともらしいけれど不正確な」言説を 5 つピックアップして、 正しい理解を整理しておきます。 これらは初学者だけでなく、 一定の経験を積んだ実務家でも勘違いしやすいポイントです。

📝 自由演習問題(解答は自分で書いてみよう)

  1. SSDSE-B-2026 から「総人口(A1101)」を説明変数、 「出生数(A4101)」を目的変数として単回帰 OLS を実行し、 R² と回帰直線をグラフ化せよ。 さらに、 両変数を 対数変換 してから再度回帰し、 残差プロットがどう変わるかを比較せよ。
  2. 「死亡数(A4200) ~ 65歳以上人口(A1303) + 総人口(A1101) + 年平均気温(B4101)」の重回帰を実行し、 ① 各係数の 95% 信頼区間、 ② VIF(A1101 と A1303 は強く相関し VIF が跳ね上がる)、 ③ Breusch-Pagan 検定の結果をレポートせよ。 もし等分散性が破られていたら、 HC3 ロバスト標準誤差で再推定し、 信頼区間がどう変わるか比較せよ。
  3. 同じデータに対して、 OLS、 Ridge(α=1.0)、 LASSO(α=0.1)の 3 種類で係数を推定し、 5-fold 交差検証 RMSE を比較する表を作成せよ。 どの手法が予測に最適か、 また係数の解釈はどう変わるかを議論せよ。

🧮 数式に値を入れて手で計算する: OLS の正規方程式

合成データで β̂ = (X'X)⁻¹X'y を計算する。

Step 1: 行列

y = [3, 7, 12, 9, 4] X (定数+x) = [[1,2],[1,4],[1,7],[1,5],[1,3]]

Step 2: X'X と X'y

X'X = [[5, 21], [21, 103]] X'y = [35, 175] det = 5·103 - 21² = 515 - 441 = 74

Step 3: β̂

(X'X)⁻¹ = (1/74) · [[103, -21], [-21, 5]] β̂ = (1/74) · [[103·35 - 21·175], [-21·35 + 5·175]] = (1/74) · [3605 - 3675, -735 + 875] = (1/74) · [-70, 140] = [-0.946, 1.892] α=-0.946, β=1.892

🐍 Python で再現

1
2
3
4
5
6
import numpy as np
x = np.array([2,4,7,5,3])
y = np.array([3,7,12,9,4])
X = np.column_stack([np.ones(5), x])
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print(f"β̂: {beta.round(3)}")

📤 実行結果

β̂: [-0.946 1.892]

💬 手計算 (Step 3) と Python 出力が完全一致。

🌳 手法選択フロー

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

  1. 関係は直線で近似できるか
    散布図を見て曲がっているなら、 変数を対数に変えるか、 非線形の手法に移る。 直線を当てはめてから残差を見て気づくのでは遅い。
  2. 外れ値とてこ比の高い点はあるか
    OLS は誤差を二乗するので、 1 点に強く引きずられる。 都道府県データでは東京が典型で、 Cook 距離を見て、 除いた場合の結果も併記する。
  3. 説明変数どうしが強く相関していないか
    相関が高いと係数の標準誤差が膨らみ、 符号すら反転しうる。 VIF を計算し、 大きければ変数を絞るか Ridge へ。
  4. 残差は等分散で独立か
    分散が右へ広がるなら不均一分散で、 頑健標準誤差を使う。 時系列や地域データでは残差が相関しうるので、 その場合は別の推定法が要る。

OLS は前提が満たされていれば最良の線形不偏推定量だが、 前提の確認をしないなら単なる直線当てはめ。 係数を解釈する前に、 必ず残差を見る。

🔗 隣接手法への橋渡し

「最小二乗法 (OLS)」は単独で完結せず、 前後の手法と組み合わさって価値が発揮される。 入力データの準備 (上流)・同目的の代替手法との比較 (並列)・結果の活用 (下流) という 3 軸で隣接領域を整理する。

この上流・並列・下流の対応を地図化することで、 「最小二乗法 (OLS)」を中核に据えた分析パイプライン (データ準備 → 手法選択 → 結果の検証と展開) の全体像が見えてくる。

📚 関連グループ教材

OLS は単体で完結する手法ではなく、 「回帰」という大きな流れの入口にある。 全体像を掴むには、 次の教材を横断的に読むのが効率的である。

🧭 グループ教材が扱う 3 段階を 1 つの表で見る

回帰の教材は「単回帰 → 重回帰 → 診断」の順に進む。 その 3 段階を 同じデータ・同じ OLS で並べると、 各段階で何が変わるのかが一目で分かる。

📥 入力: SSDSE-B-2026 の 2023 年 47 都道府県。 目的変数は出生数 (A4101)。

 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
32
import pandas as pd
import numpy as np
import statsmodels.api as sm

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
d = df[df['SSDSE-B-2026'] == 2023]
y = d['A4101'].astype(float).values          # 出生数

# 同じ OLS でも「何を説明変数に入れるか」で結論が変わる。
# 回帰グループ教材が扱う 3 段階を 1 つの表にして見比べる。
specs = {
    '① 単回帰(総人口のみ)':            ['A1101'],
    '② 重回帰(+15歳未満人口)':        ['A1101', 'A1301'],
    '③ 重回帰(+65歳以上人口)':        ['A1101', 'A1301', 'A1303'],
}
print(f'{"モデル":<26}{"R²":>8}{"補正 R²":>9}{"AIC":>9}   総人口の係数')
for name, cols in specs.items():
    X = sm.add_constant(d[cols].astype(float).values)
    r = sm.OLS(y, X).fit()
    print(f'{name:<26}{r.rsquared:>8.4f}{r.rsquared_adj:>9.4f}{r.aic:>9.1f}   {r.params[1]:>+9.5f}')

print('\n→ 説明変数を足すと R² は必ず上がるが、 総人口の係数は符号や大きさが動く。')
print('  「係数の解釈」はモデルの中身とセットでしか意味を持たない。')

# 多重共線性の確認(回帰グループ教材の必修項目)
from numpy.linalg import inv
X = d[['A1101', 'A1301', 'A1303']].astype(float).values
Xc = (X - X.mean(0)) / X.std(0)
vif = np.diag(inv(np.corrcoef(Xc, rowvar=False)))
print('\nVIF(分散拡大係数, 10 超で多重共線性を疑う)')
for c, v in zip(['総人口', '15歳未満人口', '65歳以上人口'], vif):
    print(f'  {c:<14} VIF = {v:8.2f}  {"← 危険" if v > 10 else ""}')

📤 実行するとこの出力が得られる:

モデル R² 補正 R² AIC 総人口の係数 ① 単回帰(総人口のみ) 0.9909 0.9907 832.2 +0.00610 ② 重回帰(+15歳未満人口) 0.9956 0.9954 799.5 +0.00093 ③ 重回帰(+65歳以上人口) 0.9979 0.9978 766.9 +0.00299 → 説明変数を足すと R² は必ず上がるが、 総人口の係数は符号や大きさが動く。 「係数の解釈」はモデルの中身とセットでしか意味を持たない。 VIF(分散拡大係数, 10 超で多重共線性を疑う) 総人口 VIF = 200.72 ← 危険 15歳未満人口 VIF = 150.87 ← 危険 65歳以上人口 VIF = 55.72 ← 危険

💬 結果の読み方: R² は 0.9909 → 0.9956 → 0.9979 と説明変数を足せば必ず上がる(補正 R² と AIC も改善しているので、 この 3 変数は無意味な追加ではない)。 一方で総人口の係数は +0.00610 → +0.00093 → +0.00299 と 6 倍以上動く「総人口が 1 人増えると出生数が何人増えるか」という問いに、 モデルを指定せずに 答えることはできない
理由は VIF が示している。 3 変数の VIF は 200.7 / 150.9 / 55.7 と、 危険水準の 10 を 大きく超えた強い多重共線性がある。 総人口・15 歳未満人口・65 歳以上人口は 定義上ほぼ足し算の関係にあるので当然で、 係数を個別に解釈してはいけない状態である。 予測だけが目的なら問題にならないが、 「どの変数がどれだけ効くか」を語るなら 変数を絞るか、 リッジ回帰のような正則化に切り替える必要がある。

🎮 触って理解する — 残差の二乗和を手で最小化する

最小二乗法(OLS)の核心は 「残差(実測値 − 予測値)の二乗和 SSE を最小にする直線を選ぶ」 こと。 下の散布図で、 スライダーを動かして直線を当てはめ、 各点に描かれる オレンジの正方形(=残差の二乗=面積)の合計をできるだけ小さくしてみましょう。 「最小二乗解」ボタンを押すと、 正規方程式 $\hat{\beta}=(X^\top X)^{-1}X^\top y$ で計算した厳密な最適解と比べられます。

操作:空白をタップ=点を追加/点をドラッグ=移動(マウス・タッチ対応)。 「削除モード」をONにすると点をタップで削除。

あなたの直線
y = 1.00 x + 1.00
SSE(残差二乗和)=
R²(決定係数)=

最小二乗解(厳密解)
y = – x + –
最小SSE =
R²(最大)=

あなたのSSE − 最小SSE = –

💡 直感 — なぜ「二乗和の最小化」なのか

各点から直線までまっすぐ下ろした縦の長さが残差。 それを一辺とする正方形の面積がまさに残差の二乗であり、 SSE はその面積の総和です。 直線を動かすと正方形が伸び縮みし、 合計面積が最小になる位置で手を止めたくなる — これが最小二乗法の気持ちです。 二乗を使う理由は、 (i) 正負のズレが相殺しない、 (ii) 大きなズレを重く罰する、 (iii) 微分すると 残差 と説明変数が直交する線形方程式(正規方程式)になり閉形式で一発で解ける、 の3点。 手で最小化しようとすると、 厳密解(緑の線)に驚くほど近づけないことも体感できます。

⚠️ よくある落とし穴 — 触って確かめる

🎓 発展 — 正規方程式・一般化最小二乗・正則化

➕ 直感を深める — 「最もよく当てはまる直線」=直交射影

OLS の一言まとめは 「残差平方和 (RSS) を最小にする=データに最も近い直線を選ぶ」。 ここで「近い」の意味を掘り下げると、 単なる散布図の見た目の話ではなく、 ベクトル空間での距離の話であることが見えてきます。 目的変数 $\mathbf{y}$($n$ 次元ベクトル)を、 説明変数の列が張る部分空間 $\mathrm{col}(X)$(=X で作れる予測値の集合)の中で「最も近い点」に置き換える操作、 それが OLS です。 その最も近い点が予測値 $\hat{\mathbf{y}}=X\hat{\boldsymbol{\beta}}$、 そこへ届かなかったズレが残差ベクトル $\mathbf{e}=\mathbf{y}-\hat{\mathbf{y}}$ になります。

🎯 なぜ「直交」射影なのか

部分空間 $\mathrm{col}(X)$ 上の点で $\mathbf{y}$ に最も近いのは、 $\mathbf{y}$ から部分空間へ垂直に足を下ろした点(正射影)です。 三角形の斜辺より垂線のほうが短いのと同じ理屈で、 「最短距離=直交」。 したがって残差ベクトル $\mathbf{e}$ は説明変数が張る空間と直交します。 これを式にしたものがまさに正規方程式 (normal equations) です。

【正規方程式は「残差の直交条件」そのもの】
$$ X^\top \mathbf{e} = X^\top (\mathbf{y} - X\hat{\boldsymbol{\beta}}) = \mathbf{0} \;\;\Longleftrightarrow\;\; X^\top X\,\hat{\boldsymbol{\beta}} = X^\top \mathbf{y} $$
「残差 e が全ての説明変数の列と内積 0(=直交)」という幾何条件を移項すると、 見慣れた $\hat{\boldsymbol{\beta}}=(X^\top X)^{-1}X^\top \mathbf{y}$ が出てくる

正規方程式が語っていることを言葉にすると:

💡 ページ上部の 🎮 触って理解するウィジェット は、 各点の残差を一辺とする正方形(=残差の二乗=面積)を描き、 その総面積 SSE を最小化する体験でした。 ここで学んだ「直交射影」は、 その正方形の総面積が最小になる位置=残差が説明変数と直交する位置、 という同じ現象をベクトルの言葉で言い換えたものです。 単回帰・重回帰・多項式回帰まで、 OLS はすべて「$\mathbf{y}$ を $\mathrm{col}(X)$ に直交射影する」一つの操作に統一できます。

➕ 落とし穴を深める — Gauss-Markov 仮定が破れると何が壊れるか

OLS が「最良線形不偏推定量 (BLUE)」であるためには、 ガウス・マルコフの仮定(線形性・外生性=説明変数と誤差の無相関・等分散・誤差間の無相関)が必要でした。 大切なのは どの仮定が破れると「点推定(係数)」が壊れ、 どれが破れると「標準誤差(不確実性の評価)」だけが壊れるか を区別すること。 ここを混同すると、 「係数はバイアスなのに標準誤差だけ直して満足する」「本当は無バイアスなのに係数を捨ててしまう」といった誤対応につながります。

破れる前提 壊れるのは? 中身の説明 対処
線形性係数がバイアス真の関係が曲線なのに直線を当てると、 傾き自体が誤った値に。 残差 vs 予測値プロットに曲線パターンが残る。多項式項・対数変換・GAM
外生性(説明変数と誤差の無相関)係数がバイアス(最重症)説明変数が誤差と相関する=内生性。 欠落変数(交絡)・逆因果・測定誤差が原因。 いくらデータを増やしても真値に収束しない。操作変数法 (IV)交絡の統制・自然実験
等分散標準誤差だけ壊れる不均一分散(heteroscedasticity)。 残差の散らばりが予測値とともに変わる「ラッパ型」。 係数は無バイアスのままだが t 検定・信頼区間が誤る。HC3 ロバスト標準誤差・WLS(加重最小二乗)
誤差の無相関標準誤差だけ壊れる時系列の自己相関やパネル・クラスタ構造。 やはり係数は無バイアスだが、 独立でない分だけ実効的な情報量が減るのに標準誤差はそれを見落として過小評価しがち。GLS・クラスター/HAC 標準誤差・時系列モデル

⚠️ 仮定の外にある、それでも致命的な落とし穴

➕ 発展を深める — BLUE の意味と、その先の推定法

🏆 BLUE(最良線形不偏推定量)を正しく読む

ガウス・マルコフの定理は「仮定が満たされるとき OLS は BLUE」と述べます。 4 文字を分解すると:

つまり BLUE は「線形かつ不偏」という枠の中での条件付きチャンピオンであって、 無条件の最強ではありません。 枠を外せば OLS より「良い」推定量が存在しえます — わざと少しバイアスを入れて分散を大きく減らす Ridge はその代表で、 平均二乗誤差 (MSE) では OLS を上回ることがあります(バイアス・分散トレードオフ)。 また誤差が正規分布なら OLS は最尤推定 (MLE) と一致し、 「線形」の枠すら外した全推定量の中で有効になります。

🔧 仮定が破れたときの「正統な」拡張 — GLS / WLS

等分散・無相関が破れると OLS は BLUE でなくなります。 そこで誤差の分散共分散構造 $\mathrm{Var}(\boldsymbol{\varepsilon})=\sigma^2\Omega$ を明示的に取り込み、 再び BLUE を取り戻すのが一般化最小二乗 (GLS) です。

【GLS 推定量(WLS はその対角特殊ケース)】
$$ \hat{\boldsymbol{\beta}}_{\text{GLS}} = (X^\top \Omega^{-1} X)^{-1} X^\top \Omega^{-1} \mathbf{y} $$
$\Omega=I$ なら OLS に戻る。 $\Omega$ が対角(観測ごとに分散が違うだけ)なら WLS(加重最小二乗)=「分散の大きい観測を軽く、 小さい観測を重く」扱う

WLS(加重最小二乗)は不均一分散に、 GLS の非対角版は自己相関(時系列・パネル)に対応します。 直感的には「情報の質が高い観測ほど強く信じる」重み付けの射影です。

🛡 モデルは直さず標準誤差だけ直す — ロバスト標準誤差

$\Omega$ の形が分からない・特定したくないときは、 係数はそのまま OLS を使い、 不確実性の評価(標準誤差)だけを不均一分散や相関に頑健な形に差し替えます。 これがロバスト標準誤差(White/HC0–HC3、 クラスター、 HAC=Newey–West)です。 「点推定は無バイアスなのに標準誤差だけ壊れる」タイプの破れ(上の落とし穴表の下 2 行)に対する、 最も軽量で実務的な処方箋。 statsmodels なら fit(cov_type='HC3') の一行で済みます。 なお名前が似た ロバスト回帰(M 推定など)は外れ値への頑健化で、 目的が異なる点に注意。

🎛 正則化(Ridge / Lasso)— OLS に「罰則」を足す

多重共線性や「変数が多すぎる」状況では、 RSS に係数の大きさへの罰則を足して解を安定させます。 これが正則化であり、 OLS の自然な一般化として読めます。

【OLS を出発点にした正則化】
$$ \hat{\boldsymbol{\beta}} = \arg\min_{\boldsymbol{\beta}} \underbrace{\sum_i (y_i - \mathbf{x}_i^\top\boldsymbol{\beta})^2}_{\text{OLS の RSS}} \;+\; \lambda \underbrace{\sum_j |\beta_j|^q}_{\text{罰則}} $$
$\lambda=0$ なら OLS。 $q=2$(L2 罰則)が Ridge、 $q=1$(L1 罰則)が Lasso

🧭 まとめると、 OLS を中心に「IV(外生性の破れ)」「GLS・WLS/ロバストSE(等分散・無相関の破れ)」「RidgeLasso(共線性・高次元)」「GAM(線形性の破れ)」が、 それぞれどの仮定が破れたかに応じて枝分かれしていきます。 破れの診断(残差プロット・VIF・Breusch-Pagan・Durbin-Watson)が、 どの枝へ進むべきかの地図になります。