論文一覧に戻る 📚 用語集トップ 🗺 概念マップ
📚 用語解説
📚 用語解説
教師あり学習
Supervised Learning
ML基礎

🔖 キーワード索引

教師あり 回帰 分類 ラベル 目的変数 特徴量 訓練データ 検証データ テストデータ 汎化 過学習 交差検証 scikit-learn fit/predict

💡 30秒で分かる結論

🍰 まずはやさしく

正解付きのデータで学習する方法です。

新しいデータの答えを予測するために使います。

スマホの写真の自動仕分けなどが例です。

この手法の結論を短くまとめます。

教師あり学習(Supervised Learning):ラベル付きデータ $(x, y)$ から $y$ を予測する関数を学習する手法

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

🍰 まずはやさしく

機械学習の基本となる大切な考え方です。

データの分析を正しく行うために使います。

都道府県のデータを使って練習します。

このページの構成と読み方を説明します。

このページは「教師あり学習(Supervised Learning)」の用語解説です。 機械学習の基礎カテゴリにおける重要概念で、 機械学習の基礎 グループ教材の中で繰り返し登場します。 数式・実コード・落とし穴を 1 ページに集約し、 SSDSE-B-2026 都道府県データ(47 件 × 112 列)を題材に 手を動かしながら理解できるよう構成しています。

別称:Supervised Learning。 まず 💡 30秒結論 で全体像を、 次に 🎨 直感📐 数式🧮 実値🐍 Python の順で読むのがおすすめ。

🎨 直感で掴む

🍰 まずはやさしく

正解付きの過去問で勉強するようなものです。

未知の問題でも答えを出せるようにします。

人口の数から別の人数を予想する例があります。

直感的に仕組みを理解していきましょう。

教師あり学習は、 「正解付きの過去問を大量に与え、 未知の問題でも答えを出せる関数を作る」アプローチです。 教師(ラベル $y$)が正解を教えてくれるのでこの名前。

目的変数 $y$ が連続なら 回帰(売上予測、 価格予測)、 離散なら 分類(メール=スパム/非スパム、 患者=陽性/陰性)です。 47 都道府県データで「総人口 → 15 歳未満人口」を予測するのは典型的な回帰問題です。

📐 数式または定義

🍰 まずはやさしく

入力と正解のペアを使う計算方法です。

予測のズレを最小にする関数を探します。

買い物などの数値データを扱う時に使います。

数式を使って正確な定義を学びます。

教師あり学習 (Supervised Learning) は、 入力 $x_i$ と正解ラベル $y_i$ のペアから損失最小の予測関数 $\hat{f}$ を選ぶ問題として次のように定式化される(KaTeX で描画)。

$$\hat{f} = \arg\min_{f \in \mathcal{F}} \frac{1}{n}\sum_{i=1}^{n} L\bigl(y_i, f(x_i)\bigr) + \lambda \Omega(f)$$

英語名 Supervised Learning。 別称:Supervised Learning。

🔬 数式を言葉で読み解く

記号と意味を逐一突き合わせて読みます。 慣れないうちは式を「日本語で読む」ことが理解の近道です。

🧮 SSDSE-B 実値で計算してみる

SSDSE-B から「総人口・高齢者比率・出生率」を特徴量に、 「若年人口比率の高低」を 2 値分類するロジスティック回帰を訓練します。

データ出典:SSDSE-B-2026(独立行政法人統計センター)。 47 都道府県 × 複数年(最新 2023)の社会統計データ。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1301(15歳未満人口) A1303(65歳以上人口) A4103(合計特殊出生率) 北海道 5,092,000 514,000 1,681,000 1.06 東京都 14,086,000 1,513,000 3,205,000 0.99 沖縄県 1,468,000 236,000 350,000 1.6 …(全 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.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report

# 1行目=コード見出しを採用, 2行目=日本語名の行を除外
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)  # 最新2023年度・47都道府県

df['若年比率'] = df['A1301'] / df['A1101']   # 15歳未満人口 / 総人口
df['高齢比率'] = df['A1303'] / df['A1101']   # 65歳以上人口 / 総人口
df['ラベル']  = (df['若年比率'] >= df['若年比率'].median()).astype(int)

# 特徴量: 総人口(A1101)・高齢比率・合計特殊出生率(A4103)
X = df[['A1101', '高齢比率', 'A4103']].values
y = df['ラベル'].values

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42, stratify=y)

model = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
model.fit(X_train, y_train)
pred = model.predict(X_test)
print(f'Accuracy = {accuracy_score(y_test, pred):.3f}')
print(classification_report(y_test, pred))

実行結果の要約(出力は環境依存。 概算値):

項目
訓練データ32 県
テストデータ15 県
特徴量総人口, 高齢比率, 合計特殊出生率
テスト精度0.867
Precision (若年高)0.80
Recall (若年高)1.00

🐍 Python 実装

scikit-learn / pandas を使った最小実装パターン。 上の SSDSE-B 計算と同じスタイルですが、 ここでは「読み込み→前処理→学習→評価」のテンプレを 4 つのスニペットに分けます。

① データ読み込み & 概観

🎯 このコードでやること:SSDSE-B-2026 を 2023 年で抽出し、 教師あり学習が必要とする「正解付きデータ」の典型形(行=都道府県、 列=特徴量+目的変数)を確認する。

📥 入力データ:data/raw/SSDSE-B-2026.csv(cp932、 47 県 × 12 年度 × 約 112 列)

1
2
3
4
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
print(df.shape, df.columns.tolist()[:8])

📤 実行結果

(47, 112) ['SSDSE-B-2026', 'Code', 'Prefecture', 'A1101', 'A110101', 'A110102', 'A1102', 'A110201']

💬 読み方:47 県分の「正解付き」レコードが揃った。 列の中から $y$(教師信号)と $X$(特徴量)を切り出せば学習準備完了。

② 特徴量と目的変数

🎯 このコードでやること:教師あり学習の入出力を明確化するため、 X(人口・高齢人口)と $y$(15歳未満人口)を物理的に分離する。

1
2
3
4
# X = 総人口(A1101)・65歳以上人口(A1303),  y = 15歳未満人口(A1301)
X = df[['A1101', 'A1303']].values
y = df['A1301'].values
print('X shape =', X.shape, ',  y shape =', y.shape)

📤 実行結果

X shape = (47, 2) , y shape = (47,)

💬 読み方:教師ラベル $y$ が 1 次元ベクトルとして抽出された。 教師なし学習との違いは「$y$ を学習時に見せる」ところにある。

③ 訓練/テスト分割 + モデル学習

🎯 このコードでやること:47 県を 32 県の訓練セット・15 県のテストセットに分け、 RandomForestRegressor で目的変数を学習し汎化性能 $R^2$ を見る。

1
2
3
4
5
6
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestRegressor(n_estimators=300, random_state=0).fit(X_tr, y_tr)
print('R^2 (test) =', round(model.score(X_te, y_te), 3))

📤 実行結果

R^2 (test) = 0.981

💬 読み方:教師ありの強さが体感できる結果。 $y$ を渡したからこそ $R^2 \approx 0.98$ まで一気に上がる。 教師なし学習ではこの精度は出ない。

④ 評価と可視化

🎯 このコードでやること:テスト 15 県の予測値 vs 実測値を散布図化し、 教師あり学習が「正解にどれだけ近づけたか」を視覚化する。

1
2
3
4
5
6
import matplotlib.pyplot as plt
pred = model.predict(X_te)
plt.scatter(y_te, pred)
plt.plot([y_te.min(), y_te.max()], [y_te.min(), y_te.max()], 'r--')
plt.xlabel('実測'); plt.ylabel('予測'); plt.title('「教師あり学習」関連モデルの予測精度')
plt.tight_layout(); plt.savefig('out.png', dpi=150)

📤 実行結果:out.png に「実測 vs 予測」の散布図が保存され、 対角線(赤破線)から外れるほど予測誤差が大きい県を示す。

💬 読み方:教師あり学習で 47 県のうち東京や神奈川など人口規模が極端な県だけ予測がずれる。 訓練データの分布外で性能が落ちる典型的な現象。

※ 「教師あり学習」固有の本格コードは上の 🧮 SSDSE-B 実値計算 節を参照。

⚠️ よくある落とし穴(5 つ)

❌ ラベルにリーケージが混入
目的変数の派生値や未来情報が特徴量に入っていると訓練精度は完璧でも実運用で破綻。 必ず特徴量の生成タイミングを確認。
❌ クラス不均衡を無視
100:1 のような不均衡では accuracy が悪さをする。 PR-AUC, F1, balanced accuracy などを併用。
❌ 訓練と評価を同じデータで実施
汎化性能は 検証分割で測る。 fit/predict を同じ X でやってはダメ。
❌ スケールの違いを放置
ロジスティック回帰や SVM はスケール敏感。 StandardScaler / RobustScaler を Pipeline で挟む。
❌ 因果と相関を混同
教師あり学習で「効く特徴量」と分かっても、 介入したら結果が変わる保証は無い。 因果推論は別技法。

✅ 学習チェックリスト

🎨 直感の深掘り — もう一段の理解

教師あり学習を 30 秒で言えば「正解付きデータ $(X, y)$ から、 $X o y$ の写像を学ぶ枠組み。 「問題と模範解答」のセットで訓練する。」ですが、 実務で迷わないためにはもう一段深い理解が必要です。 ここでは「何が分かれば自信を持って使えるか」を、 3 つの観点で整理します。

観点問い答え方の指針
定義の根拠なぜこの式・この定義になったのか?「何を最小化/最大化したいか」から逆算する
境界条件いつ使える/使えないのか?「データの形」「分布の前提」を確認する
他との関係隣接概念とは何が違うのか?「共通点」と「分かれ目」を 1 つずつ挙げる

💡 暗黙の前提:教師あり学習 が「うまく機能する」には、 データに対する暗黙の仮定(独立同分布、 適切な前処理、 十分なサンプル数)があります。 これを言語化できるかどうかで、 失敗時のデバッグ力が大きく変わります。

📐 数式を 3 段階で読み直す

数式 $\hat f = \arg\min_{f \in \mathcal{F}} \sum_{i=1}^N \ell(y_i, f(x_i))$ を「ぼんやり眺める」から「自分の言葉で説明できる」レベルに引き上げます。

$$\hat f = \arg\min_{f \in \mathcal{F}} \sum_{i=1}^N \ell(y_i, f(x_i))$$

① 形を見る

左辺は何か(スカラー?関数?)、 右辺は和・積・最大化のどれが主役か。 ここで「式の文型」が見えます。

② 各記号に意味を持たせる

記号それぞれに「データ/パラメータ/確率/集合」のラベルを貼り、 「これは固定」「これは動かす」を区別します。

③ 極端なケースで確かめる

サンプルが 1 個、 すべて同じ値、 完全にランダム、 などの極端なケースで式がどう振る舞うか確認すると、 数式が「ただの記号」から「動く道具」になります。

🐍 応用コード — 47 都道府県の特徴量から「出生数」を予測する回帰問題

SSDSE 公的データを題材に、 教師あり学習 を実際に動かす最小コードです。 paths は引数に直書きで、 初心者がコピペで動かせる形を優先しています。

📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行) 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) A9101(婚姻件数) 北海道 5,092,000 1,681,000 24,430 17,281 東京都 14,086,000 3,205,000 86,348 71,774 沖縄県 1,468,000 350,000 12,549 6,316 …(全 47 行)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd
import numpy as np

# 1行目=コード見出し採用・2行目=日本語名を除外 (47県 × 約112列)
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
print('shape:', df.shape)
print('列の先頭:', df.columns.tolist()[:6])

# 必要な列だけ取り出して整形 (総人口・65歳以上人口・婚姻件数・出生数)
features = ['A1101', 'A1303', 'A9101', 'A4101']
df_use = df[features].copy()
print(df_use.describe())

② モデル学習: 前ステップの df から特徴量 X(総人口・65歳以上人口・婚姻件数)と目的変数 y(出生数 A4101)を取り出し、 RandomForest で回帰する。 訓練とテストに分けて R² と RMSE を測る。 読み取り: 実測では train R² ≈ 0.98・test R² ≈ 0.99・test RMSE ≈ 1,776 件で、 人口規模から出生数がよく説明できる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score

# X = 総人口・65歳以上人口・婚姻件数,  y = 出生数(A4101)
X = df[['A1101', 'A1303', 'A9101']].fillna(0).values
y = df['A4101'].fillna(df['A4101'].median()).values

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=0)
model = RandomForestRegressor(n_estimators=200, max_depth=4, random_state=0).fit(X_tr, y_tr)

pred_tr = model.predict(X_tr)
pred_te = model.predict(X_te)
print(f'train R^2 = {r2_score(y_tr, pred_tr):.3f}')
print(f'test  R^2 = {r2_score(y_te, pred_te):.3f}')
print(f'test RMSE = {np.sqrt(mean_squared_error(y_te, pred_te)):.1f}')

③ 可視化: テストの「実測 出生数」と「予測 出生数」を散布図にし、 対角線(完全予測ライン)からのズレで誤差を眼で確認する。 読み取り: 東京など人口が極端に多い県ほど対角線から離れやすい。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import matplotlib.pyplot as plt

plt.figure(figsize=(7,5))
plt.scatter(y_te, pred_te, alpha=0.7, edgecolor='k')
lims = [min(y_te.min(), pred_te.min()), max(y_te.max(), pred_te.max())]
plt.plot(lims, lims, 'r--', linewidth=2, label='完全予測ライン')
plt.xlabel('実測 出生数')
plt.ylabel('予測 出生数')
plt.title('教師あり学習 を使ったモデルの予測精度(SSDSE-B-2026)')
plt.legend()
plt.tight_layout()
plt.savefig('out_supervised-learning.png', dpi=150)

④ 汎化性能: 単一の train/test 分割は運に左右されるため、 5-fold クロスバリデーションで R² のばらつきも見る。 読み取り: 実測の 5-fold R² は 0.886 ± 0.083(分割により約 0.77〜0.96)。 47 県という小標本では単一分割の数値を過信しない。

1
2
3
4
5
6
7
from sklearn.model_selection import cross_val_score

scores = cross_val_score(
    RandomForestRegressor(n_estimators=200, max_depth=4, random_state=0),
    X, y, cv=5, scoring='r2')
print(f'5-fold CV R^2 = {scores.mean():.3f} (±{scores.std():.3f})')
print('各 fold:', np.round(scores, 3))

🌐 似た概念との比較 — どこが違う?

「教師あり学習」と混同しやすい概念を 1 つの表に並べることで、 違いが鮮明になります。 「共通点」と「分かれ目」を意識して読みましょう。

用語何に焦点本用語との違い使う場面
教師あり学習(本ページ)直感の核:正解付きデータ $(X, y)$ から、 $X o y$ …基本系
教師なし学習正解ラベルなしで構造を発見$y$ がない。 クラスタリング・次元削減が中心探索的データ解析・前処理
半教師あり学習少量のラベル付き + 大量のラベル無しアノテーションコストを下げる中間策医療画像・LLM 事前学習後の fine-tune
強化学習報酬信号で行動を学習教師あり ≠ 強化: 教師ありは即時の正解、 RL は遅延報酬ゲーム AI・ロボティクス・RLHF
自己教師あり学習データ自身から擬似ラベルを生成人手ラベル不要。 BERT / SimCLR / MAE が代表表現学習・基盤モデル事前学習

⚠️ 注意:「似ているからどれでも同じ」と考えると、 微妙な前提の違いから誤った結論を導きがちです。 まずは 1 つの定義に絞って深く理解し、 そのうえで他の概念に拡張するのが安全です。

⚠️ さらに 5 つの落とし穴 — 実務で痛い目を見るパターン

❌ デフォルト設定をそのまま信じる
ライブラリのデフォルト引数は「平均的なケース」向け。 あなたのデータが平均的でなければ、 必ず設定を再検討する必要があります。 公式 docstring を読む癖をつけましょう。
❌ スケーリングを忘れる
「総人口」(数百万) と「出生率」(0.0〜2.0) では値域が 10⁶ 倍違う。 距離ベースの手法では、 必ず StandardScaler / MinMaxScaler でスケールを揃えること。
❌ 訓練データでの前処理パラメータをテストに使わない
StandardScaler の fit訓練データだけに対して行い、 テストには transform のみを適用。 これを混同するとデータリーケージになる。
❌ メトリクスの単位を見落とす
RMSE を「絶対値で 100」と聞いて大きいか小さいかは、 目的変数のスケールによる。 「出生率」(0〜2) で RMSE=100 はあり得ない、 などのサニティチェックを必ず。
❌ 「精度が高い = 良いモデル」と短絡
precision/recall の不均衡、 ラベルの偏り、 ベースラインとの比較を見ないと、 「高精度」は単に多数派を予測しているだけかもしれません。

🕰 歴史的経緯と現代的意味

教師あり学習 は、 統計学と計算機科学の流れの中から生まれました。 下の年表はこの分野全体の流れで、 教師あり学習 固有の年表ではありません。 この用語がどの時代の産物かを掴むために置いています。

時期出来事この時代に起きたこと
前史統計学・情報理論の基盤整備数式的な土台
古典期機械学習の黎明(1960〜80 年代)「教師あり学習」の原型が登場
展開期scikit-learn / TensorFlow など実装の普及(2010〜)誰でも 1 行で使える時代に
現代大規模モデル時代(2020〜)「教師あり学習」の意味が再解釈される

現代の文脈では、 古典的な定義のままでは説明しきれない使い方も出てきています。 教科書の定義を出発点としつつ、 実務での「変奏」も知っておくとよいでしょう。

❓ よくある質問

Q1. なぜこの定義になっているの? 別の式じゃダメ?

理論的には別定義も可能ですが、 「数学的に扱いやすい」「経験的に良い結果が出る」「歴史的経緯」の 3 拍子で現在の定義が標準化されています。 学術論文では別定義を「変種」として議論することもよくあります。

Q2. データが少ない(47 県)でも意味ある分析になる?

教育用途・探索的分析では十分。 ただし「統計的有意」を主張するには n=47 は不足することが多いので、 解釈は慎重に。 ブートストラップで信頼区間を出すと頑健性が確かめられます。

Q3. scikit-learn 以外でも実装はある?

PyTorch / TensorFlow / XGBoost / LightGBM など多数。 ただし基本的な動作確認は scikit-learn が一番速いので、 まず sklearn で動かしてから他に移植するのがおすすめ。

Q4. 大規模データ(百万行)でも同じ方法でいける?

計算量・メモリの観点でアルゴリズムを切り替える必要があります。 mini-batch 版、 サブサンプリング、 近似アルゴリズムの利用を検討します。 47 県スケールで本質を理解した後の応用課題です。

Q5. 論文を書くとき、 この概念をどう引用すべき?

古典的な定義は原典(教科書や著名論文)、 実装は使用ライブラリのバージョン情報を併記するのが標準。 「Murphy 2012」「Hastie et al. 2009」あたりが定番引用です。

Q6. 関連用語との学習順序は?

下の「📚 関連グループ教材」セクションのリストが、 推奨される学習順序の一つです。 上位概念から入って詳細に降りる「トップダウン」と、 1 つの具体例から始めて他に広げる「ボトムアップ」、 どちらも一長一短。 自分の学び方に合わせて。

📚 参考文献 — 次に読むもの

🧭 これからの学習ルート

「教師あり学習」を理解した次に何を学ぶか、 5 ステップで提案します。 順序は厳密ではなく、 興味のあるところから飛び入りで OK。

  1. ステップ 1:上の「🐍 応用コード」を自分の環境で動かす(コピペで OK)
  2. ステップ 2:データを別のもの(自分の興味のあるテーマ)に差し替えて再実行
  3. ステップ 3:上の「🌐 比較」表の類似手法を 1 つ選んで、 同じデータで比較
  4. ステップ 4:「📋 前提」セクションのリンクを 1 つずつ巡って、 関連用語を固める
  5. ステップ 5機械学習の基礎 グループ教材で、 体系全体を俯瞰する

📋 1 枚チートシート

項目内容
用語教師あり学習(Supervised Learning)
1 行定義正解付きデータ $(X, y)$ から、 $X o y$ の写像を学ぶ枠組み。 「問題と模範解答」のセットで訓練する。
数式$\hat f = \arg\min_{f \in \mathcal{F}} \sum_{i=1}^N \ell(y_i, f(x_i))$
SSDSE 適用例47 都道府県の特徴量から「出生数」を予測する回帰問題
主要ライブラリscikit-learn, pandas, numpy
典型的な落とし穴スケーリング忘れ・データリーケージ・前提分布
次に学ぶ機械学習の基礎 グループ教材

※ このチートシートは「30 秒で復習」用。 詳しくは各セクションへ。

📂 ケーススタディ — 過去論文での使われ方

統計データ解析コンペティション過去論文で「教師あり学習」がどのように登場し、 どんな問題を解決したかを見てみます。 論文ページからリンクして本ページに来た方も、 ぜひもう一度自分の関心ある論文を見直してみてください。

論文の方向性「教師あり学習」の役割学べる点
人口動態の予測将来予測モデルの構成要素として時系列との組み合わせ方
地域格差の分析都道府県をクラスタリング・分類する基盤教師なし/教師ありの切り替え
経済指標の関係性特徴量間の関係を可視化・解釈解釈可能性とのトレードオフ
健康・福祉データ少数派ラベルに対する頑健性不均衡データの扱い方
テキスト解析前処理・後処理の枢要NLP との接続

💡 論文を読むときのコツ:「この論文では『教師あり学習』を何のために使っているか?」「もし使わなかったら何が問題だったか?」を意識すると、 技術選定の判断軸が身に付きます。

🐍 実装パターン集 — 状況別レシピ

同じ「教師あり学習」を使うにも、 データの形・規模・目的によって書き方が変わります。 4 つの典型パターンを示します。

パターン A:探索的・最小構成

📥 入力例(SSDSE-B-2026 全体:564 行 × 112 列 = 47 都道府県 × 2012〜2023 年) 年度 地域コード 都道府県 A1101(総人口) A1303(65歳以上人口) A4101(出生数) … 2023 R01000 北海道 5,092,000 1,681,000 24,430 … 2023 R13000 東京都 14,086,000 3,205,000 86,348 … 2023 R47000 沖縄県 1,468,000 350,000 12,549 … …(残り 112 列は住宅・家計・教育・医療など)
1
2
3
4
import pandas as pd
df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
print(df.shape, df.head(3))

パターン B:パイプライン化(前処理+モデル)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model',  Ridge(alpha=1.0)),
])
pipe.fit(X_tr, y_tr)
print('R^2 =', pipe.score(X_te, y_te))

パターン C:交差検証+ハイパーパラメータ探索

1
2
3
4
5
6
from sklearn.model_selection import GridSearchCV

params = {'model__alpha': [0.01, 0.1, 1.0, 10.0, 100.0]}
gs = GridSearchCV(pipe, params, cv=5, scoring='r2', n_jobs=-1)
gs.fit(X, y)
print('best:', gs.best_params_, 'score:', gs.best_score_)

パターン D:可視化付きの結果保存

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import matplotlib.pyplot as plt
import json

pred = gs.predict(X_te)
plt.figure(figsize=(7,5))
plt.scatter(y_te, pred, alpha=0.7, edgecolor='k')
plt.plot([y_te.min(), y_te.max()], [y_te.min(), y_te.max()], 'r--')
plt.xlabel('実測'); plt.ylabel('予測'); plt.title('教師あり学習 結果')
plt.tight_layout(); plt.savefig('result_supervised-learning.png', dpi=150)

with open('result_supervised-learning.json', 'w', encoding='utf-8') as f:
    json.dump({'best_params': gs.best_params_,
               'cv_score': gs.best_score_,
               'test_score': gs.score(X_te, y_te)}, f, ensure_ascii=False, indent=2)

🗺 用語マインドマップ — 周辺概念の整理

「教師あり学習」を中央に置いて、 周辺概念を 5 つの方向に整理します。 これは記憶の足場になります。

方向隣接概念関係性
北 (上位)機械学習 / 統計モデリング教師あり学習を包含する大枠
南 (下位)分類 / 回帰 / ランキング$y$ の型で分かれる具体タスク
東 (発展)半教師あり / 自己教師あり / 能動学習ラベル不足を補う発展形
西 (前提)説明変数 / 目的変数 / 損失関数$(X, y) \to \hat{f}$ を構成する構成要素
中央教師あり学習本ページの主役

マインドマップは「学んだ用語を整理する道具」として優秀。 紙にこの 5 方向を書き、 自分なりの隣接概念を埋めると、 暗黙的にあった理解構造が可視化されます。

📝 自己検証クイズ — 5 問

「教師あり学習」を本当に理解できたか、 自分でテストできるクイズです。 答えは展開で確認。

Q1. 「教師あり学習」を 30 秒で同僚に説明するとしたら、 何を最初に言う?

模範回答:上の「💡 30秒結論」を参照。 ポイントは「何のために使うか」を最初に言うこと。 定義や数式から入ると相手が引きます。

Q2. 数式の左辺と右辺、 それぞれ「動かせる量」「固定する量」はどれ?

模範回答:データは観測値で固定、 パラメータは学習で動かす、 出力は計算結果。 上の「📐 数式の構造をもう一度」を参照。

Q3. SSDSE-B-2026 で「教師あり学習」を使ったとき、 何が変わる?

模範回答:47 都道府県の特徴量を入力にすると、 結果が地理的に解釈しやすくなる、 一方でサンプル数が少ないため信頼区間は広めに出る、 など。

Q4. 「教師あり学習」と類似手法の最大の違いは?

模範回答:上の「🌐 似た概念との比較」表を参照。 1 文で言える違いを持っておくと、 「なぜこっちを選んだか」を説明できます。

Q5. 「教師あり学習」を使うときに最も気をつけるべき落とし穴は?

模範回答:上の「⚠️ 落とし穴」と「⚠️ さらに 5 つの落とし穴」セクションから、 自分のプロジェクトに最も関連するものを 1 つ選んで言語化してみましょう。

📚 グループ教材の中での位置

「教師あり学習」は単独で学ぶよりも、 関連する複数の用語をセットで学ぶ方が効率的です。 関連グループ教材へのリンクを整理します。

グループ教材含まれる主な用語「教師あり学習」の位置
機械学習の基礎教師あり/なし、 損失、 汎化、 過学習中核
モデル選択CV、 ハイパーパラメータ、 交差検証関連
評価指標R²、 RMSE、 ROC-AUC、 confusion matrix関連
決定木情報利得、 エントロピー、 ジニ特定の応用
分類2 値・多値・不均衡タスク
クラスタリングK-means、 階層型、 DBSCAN教師なし側

💡 勧めの学習スタイル:1 つのグループ教材を読破してから次へ、 ではなく、 「気になる用語を起点に近所を巡る」スタイルが、 ジャストインタイム学習のコツです。 興味の連鎖に従って深掘りしましょう。

🎨 教師あり学習の二本柱:回帰と分類を同じデータで実践する

教師あり学習は「目的変数 y が連続量なら回帰、 カテゴリなら分類」と覚えるのが基本。 SSDSE-B-2026 の 47 県データで、 同じ特徴量を使って両方のタスクを実装し、 違いを体感しましょう。

📊 タスクの定義(同じ SSDSE データから 2 タスク)

項目回帰タスク分類タスク
入力 X出生数 A4101、 転入者数 A5101、 65歳以上人口 A1303出生数 A4101、 転入者数 A5101、 65歳以上人口 A1303
出力 y総人口 A1101(連続値、 人)大都市県(人口≥100万)か否か(0/1)
損失$\frac{1}{n}\sum (y_i - \hat y_i)^2$(MSE)$-\frac{1}{n}\sum [y_i\log\hat p_i + (1-y_i)\log(1-\hat p_i)]$(交差エントロピー)
代表モデルLinearRegression, Ridge, RandomForestRegressorLogisticRegression, RandomForestClassifier, SVM
評価指標R²、 RMSE、 MAEaccuracy、 F1、 ROC-AUC

🐍 回帰:47 県の総人口を予測する

このコードでやること:SSDSE-B-2026 の 47 県を 80:20 で分割し、 LinearRegression で総人口を予測。 R² と RMSE を測定。

📥 入力データ:47 県、 入力 3 特徴量(出生数・転入者数・高齢人口)、 ターゲット A1101(総人口)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['Code'].str.startswith('R') & (df['SSDSE-B-2026'] == 2023)]
X = df[['A4101', 'A5101', 'A1303']].values
y = df['A1101'].values

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)
model = LinearRegression().fit(X_tr, y_tr)
y_pred = model.predict(X_te)
print(f'R² = {r2_score(y_te, y_pred):.4f}')
print(f'RMSE = {np.sqrt(mean_squared_error(y_te, y_pred)):,.0f} 人')

📤 実行例:

R² = 0.9973 RMSE = 212,822 人

💬 R²=0.9973 は非常に高く、 入力 3 変数で総人口がほぼ説明できることを示す(出生数・転入者数・高齢人口は人口総量と強く相関)。 RMSE 約 21 万人は、 47 県の平均人口 270 万人に対し約 8.0% の誤差。 実用上は十分な精度。

🐍 分類:大都市県(人口≥100万)かどうかを判定

このコードでやること:同じ 3 特徴量から、 LogisticRegression で「大都市県(1)/小都市県(0)」を分類。 accuracy と F1 を測定。

📥 入力データ:47 県、 同じ 3 特徴量、 ターゲットを (A1101 >= 1_000_000) で 0/1 化。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score, f1_score

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['Code'].str.startswith('R') & (df['SSDSE-B-2026'] == 2023)]
X = df[['A4101', 'A5101', 'A1303']].values
y = (df['A1101'] >= 1_000_000).astype(int).values

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
scaler = StandardScaler().fit(X_tr)
X_tr_s, X_te_s = scaler.transform(X_tr), scaler.transform(X_te)

clf = LogisticRegression().fit(X_tr_s, y_tr)
y_pred = clf.predict(X_te_s)
print(f'accuracy = {accuracy_score(y_te, y_pred):.3f}')
print(f'F1 = {f1_score(y_te, y_pred):.3f}')

📤 実行例:

accuracy = 0.800 F1 = 0.889

💬 test 10 県中 8 県正解(accuracy = 0.800, F1 = 0.889)。 入力に「65歳以上人口」が含まれており、 これと総人口は強相関 → 大都市判定は比較的容易。 ただし test サイズが小さい(10 県)ため、 k-fold CV で複数回測ることが望ましい。

📐 損失関数:教師あり学習の「目的地」を定義する数式

教師あり学習は「損失関数 $L(y, \hat y)$ を最小化するパラメータを探す」プロセスです。 損失をどう定義するかで、 同じデータでもまったく違う結果が出ます。

📐 主要な損失関数 4 種

$$\text{MSE: } \;L_{\text{MSE}} = \frac{1}{n}\sum_{i=1}^{n}(y_i - \hat y_i)^2$$

$$\text{MAE: } \;L_{\text{MAE}} = \frac{1}{n}\sum_{i=1}^{n}|y_i - \hat y_i|$$

$$\text{BCE: } \;L_{\text{BCE}} = -\frac{1}{n}\sum_{i=1}^{n}\!\bigl[y_i\log\hat p_i + (1-y_i)\log(1-\hat p_i)\bigr]$$

$$\text{Hinge: } \;L_{\text{Hinge}} = \frac{1}{n}\sum_{i=1}^{n}\max(0, 1 - y_i\,\hat y_i)$$

🔬 数式を言葉で読み解く

🧮 SSDSE-B-2026 で 3 種類の損失を比較

このコードでやること:47 県の総人口予測で、 MSE / MAE / Huber 損失を比較。 東京(外れ値)を含む場合と含まない場合の影響を観察。

📥 入力データ:SSDSE-B-2026.csv、 47 県の人口(A1101)と特徴量(A1303)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression, HuberRegressor

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['Code'].str.startswith('R') & (df['SSDSE-B-2026'] == 2023)]
X = df[['A1303']].values
y = df['A1101'].values

mse_model = LinearRegression().fit(X, y)
huber_model = HuberRegressor().fit(X, y)
print(f'MSE 回帰: 傾き={mse_model.coef_[0]:.2f}, 切片={mse_model.intercept_:.0f}')
print(f'Huber 回帰: 傾き={huber_model.coef_[0]:.2f}, 切片={huber_model.intercept_:.0f}')

📤 実行例:

MSE 回帰: 傾き=4.00, 切片=-434130 Huber 回帰: 傾き=3.34, 切片=0

💬 MSE と Huber で傾きが約 17% 異なる → MSE は東京の外れ値に引っ張られて傾きが大きめに、 Huber は外れ値の影響を抑えて典型的な県の傾きを推定。 「外れ値が結論に与える影響を抑えたい」場合は Huber や Quantile 回帰を選ぶべき、 という診断ができます。

🌐 教師あり学習モデル動物園:7 種の比較

「どのモデルを選ぶべきか?」に正解はありませんが、 タスクと特性のマッチングで方針は立ちます。 SSDSE-B-2026 の人口予測タスクで、 各モデルの想定 R² も併記します。

モデル線形か解釈性少サンプル耐性SSDSE-B R² 目安
線形回帰線形高(係数が直接読める)0.99
Ridge 回帰線形高(正則化で過適合回避)0.99
Lasso 回帰線形高(変数選択も同時に)0.98
決定木非線形中(ツリーを描けば見える)中(深いと過適合)0.92
Random Forest非線形低〜中(feature importance)0.97
勾配ブースティング(XGBoost)非線形低〜中(多くのハイパラ)0.98
SVM(RBF カーネル)非線形低(サポートベクトルのみ)0.96

💡 選択指針:(1) まず線形回帰で「ベースライン」を取る。 (2) 残差にパターンが見える(曲線が見える)なら非線形モデル。 (3) 解釈が必須なら線形 / 決定木、 性能が最優先なら XGBoost / LightGBM。 SSDSE-B のような小規模データでは シンプルな線形系が勝ちやすい傾向。

⚠️ 過学習と汎化:train R² と test R² が乖離する原因と対策

教師あり学習で最も警戒すべきは「train で 99% 、 test で 50%」のような 汎化失敗。 SSDSE-B-2026 の 47 県データで起こりがちな状況を 5 つ示します。

📊 過学習が起こる 5 つの状況

状況症状対策
1. モデル複雑すぎtrain R² → 1.0、 test R² 大幅低下L1/L2 正則化、 max_depth 制限
2. 特徴量が多すぎ47 県に 100 特徴量を入れるLasso、 mutual_info_regression で特徴選択
3. 訓練が長すぎ学習曲線で val が再上昇early stopping
4. データが少ないCV ごとに R² がバラつく単純なモデル、 augmentation、 転移学習
5. 分布シフトtrain と test の県の集合が異なるstratify、 GroupKFold、 ドメイン適応

📐 過学習を防ぐ正則化の数式

Ridge 回帰(L2 正則化)の最適化問題:

$$\min_{\beta} \;\sum_{i=1}^{n}(y_i - X_i^\top\beta)^2 + \lambda\sum_{j=1}^{p}\beta_j^2$$

第 1 項は MSE(データへの適合)、 第 2 項は 係数の大きさを罰する ペナルティ。 $\lambda$ が大きいほど係数が 0 に近づき、 モデルが「素直」になります。 $\lambda$ は validation で選択します。

🔬 数式を言葉で読み解く

🧮 評価指標カタログ:回帰 4 種 + 分類 6 種

教師あり学習の評価指標は 「何を重視するか」 で変わります。 SSDSE-B の文脈で各指標が何を測るのか、 一覧で示します。

📊 回帰の評価指標 4 種

指標定義解釈(SSDSE 人口予測)
$1 - \frac{\sum(y-\hat y)^2}{\sum(y-\bar y)^2}$1.0 で完璧、 0 で平均と同じ。 SSDSE-B では 0.99 程度
RMSE$\sqrt{\frac{1}{n}\sum(y-\hat y)^2}$同じ単位(人)で誤差を表す。 12 万人など
MAE$\frac{1}{n}\sum|y-\hat y|$外れ値に強い。 RMSE より小さい値になりがち
MAPE$\frac{1}{n}\sum|\frac{y-\hat y}{y}|$比率(%)。 「平均 5% の誤差」と言える

📊 分類の評価指標 6 種

指標定義向いている場面
accuracy正解数 / 全体クラスが均衡な場合のみ
precisionTP / (TP + FP)「陽性と予測したものの正確さ」
recallTP / (TP + FN)「実際の陽性をどれだけ拾えたか」
F1precision と recall の調和平均不均衡データのバランス評価
ROC-AUCROC 曲線の面積閾値非依存。 0.5=ランダム、 1.0=完璧
PR-AUCPrecision-Recall 曲線の面積極端な不均衡(陽性率 1% 等)

💡 教師あり学習に関する追加 FAQ(10 問)

Q1. 教師あり学習はディープラーニングが必須ですか?

A:いいえ。 SSDSE-B のような小規模・表形式データでは 線形回帰や勾配ブースティングが勝つことが多い。 ディープラーニングが優位なのは画像・音声・テキストなど高次元かつ大規模なデータです。

Q2. ラベルの作り方が悪いと精度は出ますか?

A:ラベルの質が天井を決めます("garbage in, garbage out")。 アノテーターの一致率(Cohen's κ)で 0.6 を下回るなら、 マニュアルを見直すべきです。

Q3. 同じデータで複数モデルを試して良いですか?

A:validation で複数試すのは OK、 test は「最終決定後の 1 回」を厳守。 でないと多重比較で楽観バイアスがかかります。

Q4. 教師あり学習と半教師あり学習の違いは?

A:教師ありは全データにラベルあり。 半教師ありは 一部のみラベルあり、 残りはラベルなしを擬似ラベルや一貫性正則化で活用します。 アノテーションコストを下げる手段。

Q5. 回帰タスクで分類モデルを使ってもいいですか?

A:原則 NG。 ただし「人口を 5 段階に離散化してから分類」のような「ビン化」手法はあり、 解釈性向上目的でよく使われます。

Q6. クラスが極端に不均衡な場合は?

A:(1) SMOTE などのオーバーサンプリング、 (2) class_weight='balanced'、 (3) ROC-AUC や F1 で評価、 (4) 閾値最適化、 を組み合わせます。 accuracy は誤った安心感を与えるので避けます。

Q7. 教師あり学習で「予測信頼区間」は出せますか?

A:はい。 (1) ブートストラップで複数モデルの予測ばらつき、 (2) Quantile 回帰、 (3) Conformal Prediction で出せます。 SSDSE-B-2026 で「人口予測 ±5万人」のような信頼区間が示せます。

Q8. 特徴量の重要度はどう測りますか?

A:線形系なら 係数の絶対値(標準化後)、 ツリー系なら impurity-based importance、 さらに SHAP 値 でモデル非依存に測れます。 SSDSE-B で人口予測なら、 多くの場合 A1303(高齢人口)の重要度が高くなります。

Q9. 教師あり学習はバイアスを増幅しますか?

A:はい。 訓練データに偏りがあれば、 モデルはそれを学習します。 SSDSE-B は公的統計でバイアスは小さいですが、 採用予測や与信判定などでは fairness 指標(demographic parity 等)の確認が必須です。

Q10. 教師あり学習を始めるとき、 まず読むべき本は?

A:『はじめてのパターン認識』(平井有三、 森北出版)、 『Pattern Recognition and Machine Learning』(Bishop)、 sklearn 公式チュートリアル、 を順に。 SSDSE データを使った演習で手を動かすのが最短ルートです。

🖼 図解で読み解く教師あり学習(追補 R378)

教師あり学習は「特徴量 X と正解ラベル y のペアからモデルを学習し、 未知の X' に対して y' を予測する」枠組みである。 本節では、 SSDSE-B-2026 都道府県データを題材に、 (1) 散布図で X と y の関係を可視化し、 (2) ヒストグラムで y の分布を確認し、 (3) 箱ひげ図で地域別のばらつきを把握する三段構えで、 教師あり学習を始める前にやるべき探索的データ解析(EDA)を実演する。 教師あり学習の精度は「データを理解しているか」で 7 割が決まる。 モデル選定や hyperparameter チューニングは残りの 3 割に過ぎない。

図 1: 散布図で「特徴量 X と目的変数 y」の関係を見る

教師あり学習で最初にやるべきは、 特徴量 X と目的変数 y の散布図描画である。 SSDSE-B-2026 では、 都道府県の総人口(A1101)を X、 死亡数(A4200)を y として、 「総人口から死亡数を予測する単回帰モデル」を考えてみよう。 散布図上で 47 都道府県の点を打つと、 ほぼ一直線に並ぶ強い正の相関が見える。 これは「人口が多い県ほど死亡数が多い」という当たり前の事実を視覚的に確認する作業だが、 同時に「東京・大阪・神奈川が右上に外れ値として浮いている」「地方の小県は左下に密集している」といった分布の歪みも発見できる。

散布図の基本例: 2変数の関係を点でプロット
図 1: 散布図の基本形。 教師あり学習では X 軸に特徴量、 Y 軸に目的変数を取り、 線形性・外れ値・分散の不均一性を目視確認する。

このコードでやること: SSDSE-B-2026 から総人口と死亡数を読み込み、 散布図を描き、 同時に線形回帰直線をフィッティングして可視化する。 教師あり学習における「データの確認 → モデル学習 → 結果の可視化」という基本フローを 1 つのコードで実演する。

📥 入力例(SSDSE-B-2026 抜粋):

SSDSE-B-2026 Prefecture A1101 A4200 R01000 北海道 5092000 75120 R13000 東京都 14086000 137241 R27000 大阪府 8763000 104964 R47000 沖縄県 1468000 15110 ...(全 47 都道府県)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
X = df[['A1101']].values   # 総人口(特徴量)
y = df['A4200'].values     # 死亡数(目的変数)

model = LinearRegression().fit(X, y)
y_pred = model.predict(X)

plt.scatter(X, y, alpha=0.7)
plt.plot(X, y_pred, color='red', label='回帰直線')
plt.xlabel('総人口(A1101)')
plt.ylabel('死亡数(A4200)')
plt.legend(); plt.show()
print(f'R^2 = {model.score(X, y):.4f}')
print(f'傾き = {model.coef_[0]:.4f}')

📤 実行例:

R^2 = 0.9783 傾き = 0.0103

💬 結果の読み方: R² が 0.97 を超えているため、 単回帰モデルだけで総人口から死亡数の 98% を説明できる。 傾き 0.0103 は「人口が 1 万人増えると死亡数が約 103 件増える」という解釈。 ただし、 散布図を見ると右上の東京・大阪が回帰直線に大きく影響しているため、 影響度(Cook's distance)の確認や、 ロバスト回帰(Huber 回帰など)の検討が必要。

表 1: 散布図 EDA で確認すべき 6 つのチェックポイント

チェック項目具体的な観察SSDSE-B での例対処法
線形性点が直線状に並ぶか人口 vs 死亡数は直線的非線形なら多項式回帰や対数変換
外れ値群れから孤立した点東京・大阪が右上に分離原因確認後、 ロバスト手法の検討
分散の不均一性X の値で y のばらつきが変わるか大都市ほど分散大重み付き回帰や対数変換
クラスタリング複数の塊に分かれているか大都市群と地方群の二極化クラスタごとの個別モデル
欠損NaN や 0 が異常に多いかSSDSE-B は欠損なし欠損補完または除外
逆相関傾きが想定と逆方向高齢化率と出生率は逆相関因果方向を仮説段階で再検討

図 2: ヒストグラムで「目的変数 y の分布」を把握する

教師あり学習、 とくに回帰タスクでは、 目的変数 y の分布形状がモデル選定に直結する。 y が正規分布なら線形回帰(最小二乗法)が最適だが、 右裾が長い分布(死亡数、 人口、 所得など)では log 変換や Box-Cox 変換で対称化してから学習する方が精度が出る。 SSDSE-B-2026 の人口(A1101)を例にとると、 東京 1,400 万人を頂点とした右裾の長い分布になっており、 そのまま線形回帰すると東京の予測誤差を抑えるために他の県の予測がブレる「外れ値支配」が起きる。

ヒストグラムの基本例: 分布形状を可視化
図 2: ヒストグラムの基本形。 目的変数 y の分布が正規・右裾長・二峰・離散かで、 選ぶべきモデル(線形回帰・log 線形回帰・GMM・分類器)が変わる。

このコードでやること: SSDSE-B-2026 の人口(A1101)を 20 ビンでヒストグラム化し、 同時に log 変換後のヒストグラムも描いて、 分布の対称化効果を可視化する。

📥 入力例: 上記と同じ SSDSE-B-2026 の A1101 列(47 行)。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
pop = df['A1101'].values   # 総人口

fig, axes = plt.subplots(1, 2, figsize=(12, 4))
axes[0].hist(pop, bins=20, color='steelblue')
axes[0].set_title('総人口(元データ)右裾長')
axes[1].hist(np.log(pop), bins=20, color='orange')
axes[1].set_title('log(総人口) 対称化')
plt.show()
print(f'歪度(元)  = {pd.Series(pop).skew():.3f}')
print(f'歪度(log)= {pd.Series(np.log(pop)).skew():.3f}')

📤 実行例:

歪度(元) = 2.293 歪度(log)= 0.820

💬 結果の読み方: 元データの歪度 2.29 は強い右裾(東京・大阪が引っ張る)を示し、 log 変換で 0.82 まで縮小される。 これにより線形回帰の前提(残差の正規性)が満たされやすくなり、 予測精度が向上する。 教師あり学習で「最初に y の分布を見る」習慣は、 モデル選定の指針として極めて重要。

表 2: 目的変数 y の分布形状とおすすめモデル

分布形状歪度の目安SSDSE-B での例推奨モデル変換
正規(対称)|skew| < 0.5気温、 身長線形回帰不要
右裾長skew > 1人口、 死亡数log 線形回帰、 GBDTlog、 Box-Cox
左裾長skew < -1長寿率(上限あり)逆数変換 + 線形1/y、 -log(1-y)
二峰都市規模二極化クラスタ別モデルクラスタリング後
離散・カテゴリ地方区分(8 地方)分類器One-Hot
0 過剰降雪量(南国 0)Zero-Inflated 回帰2 段階モデル

図 3: 箱ひげ図で「地域別のばらつき」を見る

教師あり学習で特徴量を作る際、 カテゴリ変数(地方コード、 都道府県分類)ごとに目的変数の分布がどう変わるかを箱ひげ図で確認する。 SSDSE-B-2026 を 8 地方(北海道・東北・関東・中部・近畿・中国・四国・九州沖縄)に分けて、 各地方の人口分布を箱ひげ図で比べると、 関東地方が圧倒的に箱が高く、 ひげも長い(東京がいる)。 一方、 四国・中国地方は箱が低く中央値も小さい。 この「地方ごとの分散の違い」が見えると、 地方を One-Hot エンコードして特徴量に加える価値が判定できる。

箱ひげ図でカテゴリ別分布を比較
図 3: 多群箱ひげ図。 カテゴリ変数(地方、 業種、 年代)ごとに y の中央値・IQR・外れ値を一望できるため、 特徴量エンジニアリングの判定に使う。

このコードでやること: SSDSE-B-2026 を地方コードでグループ化し、 各地方の人口分布を箱ひげ図で比較する。 同時に ANOVA で「地方間に統計的に有意な差があるか」を検定する。

📥 入力例: SSDSE-B-2026 の都道府県コード(R01100 など)から先頭 2 桁を取って地方を判定。

 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
import pandas as pd
import matplotlib.pyplot as plt
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].reset_index(drop=True)

def region(code):
    c = int(str(code)[1:3])
    if c == 1: return '北海道'
    if c <= 7: return '東北'
    if c <= 14: return '関東'
    if c <= 23: return '中部'
    if c <= 30: return '近畿'
    if c <= 35: return '中国'
    if c <= 39: return '四国'
    return '九州沖縄'

df['地方'] = df['Code'].apply(region)
groups = [g['A1101'].values for _, g in df.groupby('地方')]
f, p = stats.f_oneway(*groups)

df.boxplot(column='A1101', by='地方', figsize=(10, 5))
plt.show()
print(f'ANOVA: F={f:.3f}, p={p:.4f}')

📤 実行例:

ANOVA: F=3.296, p=0.0075

💬 結果の読み方: F 値が大きく p < 0.01 のため、 地方間で人口分布に統計的に有意な差がある。 教師あり学習では地方を OneHotEncoder で特徴量化することで、 モデル精度の向上が期待できる。 とくに関東は他地方との差が大きいため、 「関東フラグ」だけでも強力な特徴量になる。

表 3: EDA → 教師あり学習モデル選定の意思決定表

EDA で見たもの判定次の一手SSDSE-B-2026 での適用
散布図が直線的線形性 OK線形回帰でベースライン人口 → 死亡数
散布図が曲線非線形多項式 / 決定木 / GBDT年齢 → 賃金(U 字)
外れ値が複数頑健性必要Huber 回帰、 RANSAC東京・大阪を含む経済データ
ヒストが右裾長変換必要log 変換 + 線形人口、 所得
箱ひげで群差大カテゴリ重要One-Hot + 線形 / GBDT地方 → 死亡数
欠損 5% 以上補完戦略必要KNN imputation、 MICESSDSE-B では少ない

EDA から教師あり学習へ繋ぐ実践チェックリスト

教師あり学習を実務で運用する際、 以下 10 項目を EDA 段階で必ず確認する。 これを怠ると、 「精度が出ない」「予測がブレる」「外れ値で炎上する」といったトラブルに直結する。 とくに公的データ(SSDSE-B-2026 など)では、 都道府県・年次・産業分類など、 階層構造を持つ変数が多いため、 単純な散布図だけでなく、 群ごとの箱ひげ図と分布形状確認は必須である。

  1. X の分布を全特徴量についてヒストグラム化(右裾長があれば log 変換候補)
  2. y の分布を確認し、 回帰なら歪度・尖度をチェック(分類ならクラス比)
  3. X と y の散布図を主要特徴量で描画し、 線形性・外れ値を目視
  4. カテゴリ別箱ひげ図で群差を確認し、 One-Hot 化の価値を判定
  5. 相関行列を heatmap 化し、 多重共線性(|r| > 0.9 ペア)を特定
  6. 欠損パターンdf.isna().sum() と missingno で可視化
  7. 外れ値を IQR 基準(Q1-1.5*IQR、 Q3+1.5*IQR の外)で抽出し、 ドメイン知識で取扱い決定
  8. 時系列性がある場合は ACF/PACF プロットで自己相関を確認
  9. サンプルサイズと特徴量数の比(n / p)を確認し、 過学習リスクを評価
  10. クラス不均衡を pie chart で確認(分類タスク)

SSDSE-B-2026 を使った教師あり学習の典型 3 タスク

SSDSE-B-2026 で教師あり学習を学ぶなら、 以下 3 タスクをこの順番で実装することを推奨する。 (A) 単回帰 → (B) 重回帰 → (C) 分類、 と難度が上がる構成で、 EDA → 特徴量設計 → モデル学習 → 評価という一連の流れを 3 回繰り返すことで、 教師あり学習の「型」が身につく。 とくに各タスクで上記の散布図・ヒストグラム・箱ひげ図の 3 種 EDA を毎回実施し、 「データの性質に応じてモデルを選ぶ」習慣を体得することが、 実務で通用する教師あり学習エンジニアへの最短ルートである。

📝 より正確な分析(教材補足):本節の散布図・単回帰・重回帰の例は、 SSDSE-B-2026 に実在する列だけで再現できる。 タスク A(単回帰)は「総人口 A1101 → 死亡数 A4200」で、 2023 年度・47 都道府県の実測では R² ≈ 0.978、 傾き ≈ 0.0103(総人口 1 万人あたり死亡数 約 103 件)、 RMSE ≈ 4,235・MAE ≈ 2,844 となる。 タスク B(重回帰)は A1101・log(総人口)・高齢化率(A1303/A1101)・年少人口比(A1301/A1101)+地方 One-Hot を Ridge で学習し、 LOOCV R² ≈ 0.988(総人口単独の LOOCV R² ≈ 0.969 から向上)。 なお SSDSE-B-2026 には GDP(県民経済計算)に相当する列は収録されておらず、 経済規模そのものを分析対象にする場合は SSDSE-E など別データセットの併用が必要である。

以上の追補により、 教師あり学習を「単なるモデル選定」ではなく、 「EDA を起点としたデータ理解 → 特徴量設計 → モデル → 評価」の包括的プロセスとして捉える視点が獲得できる。 SSDSE-B-2026 という実データを軸に、 散布図・ヒストグラム・箱ひげ図の 3 種図解で、 教師あり学習の前段プロセスが完全に内製化できるようになる。

教師あり学習の歴史的発展と主要アルゴリズム系譜

教師あり学習は 1950 年代の Perceptron(Rosenblatt 1958)から始まり、 1970-80 年代の決定木(CART, ID3)、 1990 年代の SVM(Vapnik)と Boosting(AdaBoost, Freund & Schapire 1995)、 2000 年代の Random Forest(Breiman 2001)と GBDT(Friedman 2001)、 2010 年代の XGBoost(Chen & Guestrin 2016)と LightGBM(Microsoft 2017)、 そして深層学習(CNN・RNN・Transformer)へと連なる長大な系譜を持つ。 SSDSE-B-2026 のような中規模の表形式データでは、 一般に GBDT 系(XGBoost、 LightGBM、 CatBoost)が最も性能・解釈性のバランスが良いとされる。 一方、 サンプル数が 47 都道府県のように非常に少ない場合は、 線形回帰・Ridge・Lasso のような正則化線形モデルが過学習を起こさず安定する。 アルゴリズム選定は「データの形状と量」で決まる、 という原則が最重要である。

表 4: 主要な教師あり学習アルゴリズムの実務的比較

アルゴリズム発表年得意なデータ計算量解釈性SSDSE-B 適性
線形回帰1805 (Legendre)線形 + 小規模O(np²)高(係数)◎ ベースライン
ロジスティック回帰1958 (Cox)線形分類O(np)高(odds)◎ 分類タスク
決定木 (CART)1984 (Breiman)非線形 + 解釈重視O(n log n × p)高(ルール)○ 単独では弱い
SVM1995 (Vapnik)高次元 + 小サンプルO(n²) - O(n³)△ 47 件には過剰
Random Forest2001 (Breiman)非線形 + 中規模O(n log n × p × T)中(重要度)○ 安定
XGBoost / LightGBM2016 / 2017表形式の中・大規模O(n log n × p × T)中(SHAP)◎ 高精度狙い
深層学習 (MLP)1986 (BP)大規模 + 非線形O(n × p × layers)△ サンプル不足

教師あり学習における評価指標の選び方(タスク別)

教師あり学習で「精度が良いか」を判断する評価指標は、 タスク種別(回帰・分類)と業務文脈で大きく変わる。 回帰タスクなら RMSE(Root Mean Squared Error)と MAE(Mean Absolute Error)が二大基本指標で、 RMSE は外れ値に敏感、 MAE は外れ値に頑健、 という性質の違いを理解して使い分ける。 R²(決定係数)は「モデルが y の分散の何割を説明しているか」を 0-1 で示し、 直感的だが、 サンプル数や特徴量数の影響を受けるため、 調整済み R² と併用すべきである。 分類タスクでは Accuracy だけでは不十分で、 とくにクラス不均衡データでは Precision・Recall・F1・ROC-AUC・PR-AUC を組み合わせて評価する。 SSDSE-B-2026 を用いた典型例として、 「人口減少県(38 県)vs 人口増加県(9 県)」の 2 値分類では Accuracy 0.81 でも常に「減少」と予測すれば達成できてしまうため、 Recall(増加県の検出率)と F1 を主指標にすべきである。

表 5: 教師あり学習の評価指標チートシート

指標タスク計算式の要約範囲使い所注意点
RMSE回帰√(Σ(y-ŷ)² / n)0 ~ ∞外れ値に敏感な業務単位は y と同じ
MAE回帰Σ|y-ŷ| / n0 ~ ∞外れ値が多い場合勾配が一定
回帰1 - SS_res/SS_tot-∞ ~ 1説明力の直感特徴量増で常に上がる
調整済み R²回帰R² の自由度補正-∞ ~ 1特徴量数比較過学習抑制
Accuracy分類正解数 / 全件0 ~ 1クラス均衡時不均衡で誤誘導
Precision分類TP / (TP+FP)0 ~ 1偽陽性を避けたいRecall と trade-off
Recall分類TP / (TP+FN)0 ~ 1見逃しを避けたいPrecision と trade-off
F1分類2PR/(P+R)0 ~ 1P・R のバランス調和平均
ROC-AUC分類ROC 曲線下面積0.5 ~ 1閾値非依存評価不均衡で過大評価
PR-AUC分類PR 曲線下面積0 ~ 1不均衡データ陽性少数派の評価

このコードでやること: SSDSE-B-2026 で「総人口から死亡数を予測する単回帰」を実装し、 RMSE・MAE・R² の 3 指標を同時に計算して、 指標ごとに数値感覚を掴む。

📥 入力例: SSDSE-B-2026 の A1101(総人口)と A4200(死亡数)の 47 行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
X = df[['A1101']].values   # 総人口
y = df['A4200'].values     # 死亡数

model = LinearRegression().fit(X, y)
y_pred = model.predict(X)

rmse = np.sqrt(mean_squared_error(y, y_pred))
mae  = mean_absolute_error(y, y_pred)
r2   = r2_score(y, y_pred)
print(f'RMSE = {rmse:,.0f}')
print(f'MAE  = {mae:,.0f}')
print(f'R^2  = {r2:.4f}')

📤 実行例:

RMSE = 4,235 MAE = 2,844 R^2 = 0.9783

💬 結果の読み方: RMSE(約 4,235 件)が MAE(約 2,844 件)より大きい(約 1.5 倍)ことから、 外れ値(東京・大阪)の影響で予測誤差が偏っていることが分かる。 R² は 0.978 と高いが、 これは大都市が主に押し上げているため、 地方県のみで再評価すべき。 評価指標は単一ではなく、 必ず複数を併記して読み解く。

教師あり学習における過学習(Overfitting)と汎化性能の本質

教師あり学習の最大の敵は過学習(オーバーフィッティング)である。 過学習とは「訓練データに対しては高精度だが、 未知データには性能が出ない」状態を指す。 SSDSE-B-2026 のように 47 サンプルしかないデータでは、 特徴量を増やすほど(例: 10 個以上)過学習リスクが急上昇する。 対策の三本柱は (1) 正則化(Ridge・Lasso・ElasticNet)、 (2) クロスバリデーション(k-fold、 LOOCV)、 (3) 早期停止(Early Stopping、 GBDT 系で必須)である。 とくに小サンプルでは Leave-One-Out CV(n=47 なら 47 回)が推奨で、 全データを順番に 1 件抜きでテストして汎化性能を評価する。 これにより hold-out 法に比べて評価のばらつきが小さく、 限られたデータを最大限活用できる。

表 6: 過学習を防ぐ 6 つの実務テクニック

テクニック原理適用モデルSSDSE-B での設定例
Ridge 正則化係数の L2 ノルムにペナルティ線形回帰系alpha=1.0 で開始、 CV で調整
Lasso 正則化係数の L1 ノルムにペナルティ(変数選択)線形回帰系alpha=0.1、 特徴量を絞る
k-fold CVデータを k 分割し平均評価全モデルk=5 が標準、 小データなら LOOCV
早期停止検証損失が悪化したら学習中断GBDT、 NNpatience=10 で監視
Dropout学習中にランダムにユニット無効化ニューラルネットrate=0.5(隠れ層)
データ拡張訓練データを増やす(画像・テキスト)画像・NLPSSDSE-B では困難

本追補セクション R378 では、 教師あり学習を「EDA から評価指標まで」の包括的プロセスとして扱った。 3 種の図(散布図・ヒストグラム・箱ひげ図)と 6 表の比較表、 3 つの実コード例で、 SSDSE-B-2026 を題材に「データ理解 → モデル選定 → 学習 → 評価 → 過学習対策」の全工程を一気通貫で実演している。 これにより、 教師あり学習を「ブラックボックスのモデル呼び出し」ではなく、 「データの性質に応じた最適な手法選択と評価のループ」として捉える視座が獲得できる。

教師あり学習の特徴量エンジニアリング 12 パターン

教師あり学習でモデル精度を引き上げる最大要素は、 アルゴリズム選定でも hyperparameter チューニングでもなく、 特徴量エンジニアリング(Feature Engineering)である。 同じデータ・同じ XGBoost を使っても、 特徴量設計が秀逸であれば R² は 0.85 から 0.95 に跳ね上がる。 SSDSE-B-2026 を例に、 実務で頻出する 12 の特徴量パターンを以下に整理する。 これらを組み合わせることで、 47 都道府県という限られたサンプル数でも実用的なモデルを構築できる。 とくに 派生比率(高齢化率 = 65 歳以上 / 総人口)と 対数変換(log(人口))の 2 つは、 ほぼどの予測タスクでも効くため、 最初に試すべき定番である。

  1. 派生比率: 高齢化率 = A1303 / A1101、 年少人口比率 = A1301 / A1101 など、 「分子 / 分母」で意味のある指標を作る。
  2. 対数変換: log(総人口)、 log(死亡数) で右裾長分布を対称化し、 線形モデルに適合させる。
  3. 標準化(Z-score): 各特徴量を (x - μ) / σ で平均 0・分散 1 に揃え、 距離ベースモデル(SVM・KNN)の精度を向上。
  4. Min-Max 正規化: (x - min) / (max - min) で 0-1 に揃え、 ニューラルネットの収束を加速。
  5. カテゴリ→One-Hot: 地方(8 区分)を 8 列の 0/1 ベクトルに変換し、 線形モデルに食わせる。
  6. カテゴリ→Target Encoding: 各カテゴリの y の平均で置換(リーク対策に CV 内で計算)。
  7. 多項式特徴量: x² や x×z を追加して非線形性を線形モデルで近似(次数 2 が無難)。
  8. ビン化(Binning): 連続値を等幅・等頻度で離散化し、 非線形性を捉える。
  9. 欠損フラグ: NaN を「欠損あり」フラグ列として保持(GBDT は NaN を直接扱える)。
  10. 時系列ラグ: 前年・前 2 年の値を特徴量化(時系列タスクの基本)。
  11. 集約統計量: 地方ごとの人口の中央値・最大値などをグループ統計で計算し、 元行に結合。
  12. 外部データ結合: SSDSE-B 以外の公的データ(気象、 観光、 産業)を都道府県キーで結合し、 説明力を拡張。

表 7: 特徴量エンジニアリング前後の精度比較(SSDSE-B-2026 想定)

特徴量セット列数モデルR² (LOOCV)備考
人口のみ(A1101)1LinearReg0.952ベースライン
+ log(人口)2LinearReg0.961+0.9%、 簡単
+ 高齢化率 + 年少人口比4LinearReg0.974派生比率の威力
+ 地方 One-Hot11LinearReg0.978関東フラグが効く
+ 多項式(次数 2)66Ridge0.981正則化必須
同セット + XGBoost11XGBoost0.987非線形の自動捕捉

このコードでやること: SSDSE-B-2026 で「総人口 + 派生比率 + 地方 One-Hot」の特徴量を作り、 Ridge 回帰で死亡数を予測。 LOOCV で過学習を排した汎化性能を評価する。

📥 入力例: SSDSE-B-2026 の A1101(総人口)、 A1303(高齢人口)、 A1301(年少人口)、 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 numpy as np
import pandas as pd
from sklearn.linear_model import Ridge
from sklearn.model_selection import LeaveOneOut, cross_val_predict
from sklearn.metrics import r2_score
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline

df = pd.read_csv('data/raw/SSDSE-B-2026.csv', encoding='cp932', skiprows=[1])
df = df[df['SSDSE-B-2026'] == 2023].reset_index(drop=True)
df['log_pop'] = np.log(df['A1101'])
df['aging']   = df['A1303'] / df['A1101']   # 高齢化率
df['young']   = df['A1301'] / df['A1101']   # 年少人口比率
df['region']  = df['Code'].str[1:3]

num_cols = ['A1101', 'log_pop', 'aging', 'young']
cat_cols = ['region']
y = df['A4200'].values   # 死亡数

pre = ColumnTransformer([
    ('num', StandardScaler(), num_cols),
    ('cat', OneHotEncoder(handle_unknown='ignore'), cat_cols),
])
pipe = Pipeline([('pre', pre), ('reg', Ridge(alpha=1.0))])
# LOOCV は1点ずつ検証するため、全予測を集めてから決定係数を計算する
y_hat = cross_val_predict(pipe, df[num_cols+cat_cols], y, cv=LeaveOneOut())
print(f'LOOCV R^2 = {r2_score(y, y_hat):.4f}')

📤 実行例:

LOOCV R^2 = 0.9879

💬 結果の読み方: 総人口だけの線形回帰(LOOCV R²≈0.969)から、 特徴量エンジニアリング(log・派生比率・One-Hot)と Ridge 正則化を組み合わせることで、 LOOCV R² が 0.988 まで上昇した。 死亡数は人口規模だけでなく高齢化率にも依存するため、 派生比率の追加が効いている。 これは「特徴量エンジニアリングはモデル選定より効果が大きい」という鉄則の典型例。

教師あり学習をビジネス現場で運用する 5 段階プロセス

教師あり学習を企業現場で運用するには、 単にモデルを作って終わりではなく、 ビジネス課題定義からモデル運用・監視・再学習までの一連のプロセス(MLOps)が必要である。 SSDSE-B-2026 を題材に学んだスキルをビジネスに転用する際、 以下の 5 段階プロセスを意識すると失敗が少ない。 とくに第 1 段階の「ビジネス課題の数値化」が最重要で、 ここを曖昧にしたまま「とりあえずモデルを作る」と、 後で評価指標が定まらず PoC が頓挫する。

  1. 第 1 段階: 課題定義: 「何を予測したいか」「予測精度が業務 KPI にどう繋がるか」を文書化。 例: 「来月の店舗売上を予測 → 在庫発注最適化 → 廃棄ロス 10% 削減」。
  2. 第 2 段階: データ収集・前処理: 必要な特徴量を社内 DB や外部から集める。 SSDSE-B 級の公的データも併用。 欠損・外れ値処理、 特徴量設計。
  3. 第 3 段階: モデル開発: ベースライン(線形)→ 高精度モデル(GBDT・NN)の順で比較。 CV で過学習を排し、 評価指標を業務 KPI と連動させる。
  4. 第 4 段階: 本番デプロイ: REST API(FastAPI、 sklearn の joblib 保存)、 バッチ予測(cron + S3)、 Streamlit ダッシュボードなどで業務システムに組込み。
  5. 第 5 段階: 監視・再学習: 予測精度を毎月モニタリング(ドリフト検出)し、 精度が閾値を下回ったら再学習を自動トリガー。 MLflow や Weights & Biases で実験管理。

表 8: 教師あり学習のビジネス活用事例(業界別)

業界予測ターゲット特徴量例使われるモデルビジネス KPI
小売店舗売上、 需要量曜日・天候・イベント・前年実績XGBoost、 LightGBM欠品率、 廃棄率
金融与信スコア、 不正検知取引履歴、 属性、 金額LogReg、 XGBoost貸倒率、 検知率
製造故障予知、 歩留りセンサー値、 温湿度、 稼働時間RandomForest、 LSTM稼働率、 不良率
医療疾患リスク、 在院日数検査値、 既往歴、 年齢LogReg、 Cox 回帰診断精度、 ROI
不動産物件価格、 賃料立地、 築年数、 面積、 駅距離GBDT、 線形回帰査定誤差、 成約率
マーケ離反予測、 LTV購買履歴、 閲覧ログ、 属性XGBoost、 NN解約率、 LTV
HR退職リスク、 採用適性勤怠、 評価、 アンケートLogReg、 RandomForest離職率、 早期離職率
公共人口推計、 税収予測SSDSE-B、 国勢調査線形回帰、 ARIMA予算精度、 政策効果

SSDSE-B-2026 で習得した教師あり学習スキルは、 上記いずれの業界にも転用可能である。 とくに「47 サンプル+多数の特徴量」という小サンプル高次元の構造は、 中小企業の限られたデータでモデル構築する際の縮図そのもの。 LOOCV・Ridge・特徴量エンジニアリングという 3 つの武器を磨いておけば、 実務で必ず役立つ。

🧾 教師あり学習を実務品質で完了させる最終チェック

教師あり学習は、入力と正解ラベルの対応を学ぶ枠組みである。しかし実務上の難しさは、アルゴリズムの選択よりも、正解ラベルが本当に学習してよい対象かを確認する点にある。退職予測なら「退職したか」は人事制度や記録時点に依存する。売上予測なら「売上」は返品、値引き、キャンセル、締め処理で変わる。疾患予測なら「診断」は医師の判断や検査機会の偏りを含む。教師あり学習の監査は、まず目的変数の定義、測定時点、業務上の意味を固定するところから始まる。

次に確認すべきなのは、特徴量が予測時点で本当に利用可能かである。学習データには、結果が分かった後に記録された値が混ざりやすい。解約予測で「最終請求結果」や「退会処理日」を入れる、故障予測で「修理部品コード」を入れる、入院期間予測で「退院時サマリ」を入れると、検証精度は高く見えるが本番では使えない。これはデータリークであり、教師あり学習で最も危険な失敗の一つである。特徴量ごとに取得時点を記録し、予測締切より後の情報を排除する必要がある。

訓練データと評価データの分割も、単純なランダム分割でよいとは限らない。時系列予測では過去で学習し未来で評価する。顧客データでは同じ顧客の別レコードが訓練と評価にまたがると、個人固有の情報を覚えて過大評価になる。地域データでは近接地域が似ているため、地理的なリークも起こる。医療や教育では施設単位の差が大きく、施設をまたいだ汎化性能を見たいなら施設単位で分割する。分割方法は、モデルを本番でどう使うかに合わせて決める。

監査項目確認内容典型的な失敗対策
目的変数定義、時点、業務上の意味ラベルが制度変更で変わるデータ辞書と業務フローで確認する
特徴量取得時点、欠損理由、加工履歴予測後にしか得られない値を使う特徴量ごとに利用可能時点を記録する
分割時系列、個体、施設、地域の独立性同一個体が訓練と評価に混ざる本番利用単位で分割する
評価指標業務損失、クラス不均衡、閾値Accuracy だけで判断する再現率、適合率、AUC、費用を併用する
運用再学習、監視、説明、権限作って終わりになるモデル監視と責任者を設計に含める

評価指標は、正解率だけでは危険である。陽性率が 1% の不正検知で全件を正常と予測すれば、正解率は 99% になるが価値はない。疾病スクリーニングでは見逃しを減らす再現率が重要になり、迷惑メール分類では正常メールを誤ってブロックしない適合率も重要になる。与信では閾値を変えたときの承認率、貸倒率、利益を同時に見る。教師あり学習では、統計的な指標と業務上の損失を結びつけ、どの誤りがどれだけ高くつくかを明示する必要がある。

分類モデルでは、確率の校正も重要である。AUC が高いモデルでも、出力確率 0.8 の案件が実際に 80% の確率で陽性とは限らない。業務で確率を使って優先順位、リスク説明、リソース配分を行うなら、キャリブレーションカーブ、Brier score、Platt scaling、isotonic regression などを確認する。確率が校正されていないモデルは、順位付けには使えても、意思決定の期待値計算には不向きである。確率を表示するなら、その意味を利用者に説明できなければならない。

回帰モデルでは、平均誤差だけでなく、誤差の分布を見る。MAE は解釈しやすく、RMSE は大きな誤差に敏感である。MAPE は割合として便利だが、真値が 0 に近いと不安定になる。売上予測で大店舗の誤差を重く見るのか、小店舗も同じ重みで見るのかによって、評価の意味は変わる。残差プロットで、予測値が大きいほど誤差が広がる、特定群だけ過小予測する、季節によって偏る、といった構造を確認しないと、平均的には良いが現場では使いにくいモデルになる。

特徴量エンジニアリングは強力だが、解釈と保守性を犠牲にしやすい。比率、差分、対数、移動平均、カテゴリ集約、交互作用、ターゲットエンコーディングは精度向上に効く一方で、リークや過学習の原因にもなる。特にターゲットエンコーディングは、訓練全体の目的変数を使ってカテゴリを数値化すると評価データの情報を漏らす。クロスバリデーション内でエンコードする、平滑化する、未知カテゴリを処理するなど、変換ごとの検証設計が必要である。

モデル選択では、複雑なモデルが常に良いとは限らない。線形回帰やロジスティック回帰は、仮定が単純で説明しやすく、少数データでも安定しやすい。ランダムフォレストや勾配ブースティングは非線形と交互作用に強いが、過学習、計算負荷、説明性の課題がある。ニューラルネットワークは大規模・高次元データで有効だが、データ量、監視、再現性が必要になる。実務では、単純なベースラインを作り、その改善幅が複雑性に見合うかを判断する。

ハイパーパラメータ調整では、検証データを使いすぎる問題に注意する。何百通りも試して最も良い設定を選ぶと、検証データに過適合する。最終評価用のテストデータは最後まで触らない。小規模データではネストしたクロスバリデーションや、保守的な探索範囲が有効である。スコアの差が偶然かどうかを見るために、平均だけでなく fold 間のばらつきも確認する。0.1% の精度差のために解釈性や運用性を大きく失うなら、その改善は採用しない判断も合理的である。

公平性と説明責任も教師あり学習の一部である。モデルが全体では高精度でも、性別、年齢、地域、施設、言語、所得層などのサブグループで性能が大きく違うことがある。誤分類の負担が特定群に偏ると、社会的・法的な問題になる。サブグループ別の再現率、適合率、誤差、校正を確認し、センシティブ属性を使わない場合でも代理変数で同様の差が生じていないかを見る。説明可能性の手法は、モデルを正当化するためではなく、問題を発見するために使う。

本番運用では、学習時と同じ前処理が再現されることが必須である。標準化の平均と分散、カテゴリの辞書、欠損補完値、特徴量の順序がずれると、モデルは正常に見えても誤った入力を受け取る。Pipeline として前処理とモデルを一体化し、学習時のアーティファクトをバージョン管理する。入力スキーマ、型、範囲、カテゴリ、欠損率を本番で検査し、異常があれば予測を止めるか、フォールバックへ切り替える。運用品質は、学習コードよりも入力管理で決まることが多い。

モデル監視では、精度がすぐに分からない場合がある。売上予測なら実績が翌月に分かる。不正検知なら調査後にラベルが確定する。医療予後なら結果が数年後になる。このような場合、まず入力分布のドリフト、予測分布の変化、欠損率、カテゴリ出現率、スコアの極端化を監視する。ラベルが得られた時点で性能を後追い評価し、再学習の閾値を決める。モデルは一度作ったら終わりではなく、データ生成過程の変化に合わせて管理する対象である。

人間との役割分担も明確にする必要がある。教師あり学習モデルは、判断を自動化する場合も、候補を順位付けする場合も、説明資料を補助する場合もある。どこまでをモデルが行い、どこから人間が確認するのか、誤った予測に誰が責任を持つのか、利用者がモデル出力を無視できるのかを設計する。リスクの高い用途では、モデルの出力だけで自動決定せず、根拠、信頼度、代替案、問い合わせ先を添える。精度が高いことと、使ってよいことは別である。

教育場面では、教師あり学習を「データを入れれば予測できる技術」として教えるだけでは不十分である。目的変数の定義、訓練・検証分割、ベースライン、評価指標、リーク、過学習、説明性、運用監視までを一連の流れとして扱うと、学生はモデルを作る前に問いを設計する姿勢を身につける。SSDSE-B-2026 のような小さな実データでは、サンプル数の制約、地域差、外れ値、特徴量の重複が見えやすく、教師あり学習の落とし穴を学ぶ教材として適している。

最終チェックとして、モデルカードや分析メモに、目的、対象データ、除外条件、特徴量、分割方法、評価指標、サブグループ性能、既知の限界、再学習条件、利用禁止範囲を残す。これにより、後からモデルを使う人が、どの条件で信頼でき、どの条件では危険かを判断できる。教師あり学習の成果物は、学習済みモデルだけではない。データと業務の関係を整理し、誤用を防ぐ説明文書まで含めて、初めて実務で使える分析になる。

📌 教師あり学習プロジェクトの実装監査シナリオ

教師あり学習をプロジェクトとして進めるときは、開始前、学習前、評価前、本番投入前、本番投入後の 5 時点で監査する。開始前には、予測したい対象が業務上の意思決定に結びついているかを確認する。精度が高くても、予測結果を誰も使わない、使っても行動を変えられない、行動しても成果指標が動かないなら、モデル化する意味は薄い。学習前には、データの取得権限、利用目的、個人情報、同意、保存期間、再利用範囲を整理する。

学習前の技術監査では、ラベル分布、特徴量の欠損率、カテゴリ水準数、外れ値、重複、時系列の範囲、訓練時点で利用可能な情報かどうかを確認する。ここで異常が見つかると、モデルの前にデータ定義へ戻る必要がある。たとえばクレーム予測で、クレーム登録後に入力される対応区分が特徴量に入っていれば、モデルは原因を予測しているのではなく結果を読んでいるだけである。教師あり学習の精度は、こうしたリークを取り除いて初めて意味を持つ。

評価前には、ベースラインを必ず置く。分類なら多数派クラス、単純なルール、ロジスティック回帰を比較対象にする。回帰なら前月値、移動平均、中央値予測、単純線形回帰を置く。高度なモデルがベースラインを少ししか上回らない場合、その複雑性を採用する理由は弱い。逆に単純モデルより大きく改善するなら、どの特徴量や非線形性が効いているのかを調べる価値がある。ベースラインは、モデルの価値を測る物差しであり、プロジェクトの過剰投資を防ぐ。

監査時点主な質問停止すべき兆候次の行動
開始前予測結果で業務行動が変わるか利用者や KPI が不明意思決定フローを先に設計する
学習前ラベルと特徴量は正しい時点か未来情報や処理後情報が混入特徴量一覧を作り直す
評価前分割方法は本番利用と一致するか同一顧客や同一施設が混在グループ分割・時系列分割に変更する
投入前入力スキーマと前処理は固定されたか手作業の変換が残るPipeline 化しアーティファクト化する
投入後性能低下を検知できるかラベル確定後の評価手順がないドリフト監視と再学習条件を定義する

本番投入前には、モデルの失敗時の動きを決める。入力に未知カテゴリが来たらどうするか、特徴量が欠損したら予測を止めるか、過去平均で代替するか、低信頼として人間に回すかを明文化する。モデルサーバが落ちた場合、最後の予測を使い続けるのか、ルールベースへ戻すのか、業務を一時停止するのかも決める。機械学習システムは、正しく動くときだけでなく、壊れたときの設計で信頼性が決まる。

説明性の確認では、個別予測の理由と全体傾向を分けて扱う。特徴量重要度はモデル全体の傾向を示すが、個々の顧客や案件でなぜその予測になったかを必ず説明できるわけではない。SHAP などの局所説明は便利だが、相関の強い特徴量が多いと解釈が不安定になる。説明は利用者の行動に結びつく形にする必要がある。たとえば「スコアが高い」だけでなく、「直近利用減、問い合わせ増、契約更新前」というように対応可能な要因へ翻訳する。

再学習の条件は、定期更新と異常時更新を分けると管理しやすい。定期更新は、毎月や四半期など業務サイクルに合わせて行う。異常時更新は、入力分布が大きく変わった、性能が閾値を下回った、制度や価格体系が変わった、新しい商品や地域が追加された場合に行う。ただし、むやみに再学習すると前回モデルとの比較が難しくなる。データ期間、特徴量定義、ハイパーパラメータ、評価結果、承認者を記録し、いつでも前のモデルへ戻せる状態にする。

法務・倫理面では、目的外利用と差別的影響を確認する。採用、与信、保険、医療、教育のような領域では、予測精度だけでなく、説明可能性、異議申し立て、データ主体の権利、監査可能性が問題になる。センシティブ属性を直接使っていなくても、住所、職歴、購買履歴、端末情報などが代理変数として働くことがある。モデルの利用範囲を文書化し、使ってはいけない意思決定に流用されないよう権限とレビューを設ける。

教育用の課題では、単に高いスコアを競わせるより、失敗分析を提出させる方が学習効果が高い。混同行列のどのセルが問題か、どの群で誤差が大きいか、特徴量を一つ抜くと何が変わるか、分割方法を変えると性能がどれだけ落ちるかを調べる。これにより、学生はモデルをブラックボックスの点数機械としてではなく、データ、仮説、評価、運用の関係として理解できる。教師あり学習の本質は、予測式を作ることではなく、予測を信頼してよい条件を明らかにすることである。

最後に、教師あり学習のレビューでは、成功条件と撤退条件を同時に決める。たとえば再現率 80% 以上、誤警報率 10% 以下、月 100 件以上の業務削減、特定群の性能差 5 ポイント以内、説明文書の承認完了などを成功条件にする。一方で、データ取得が継続できない、ラベル確定が遅すぎる、利用者が予測を確認できない、モデルが特定群に不利益を出す、監視体制が作れない場合は撤退または用途変更を検討する。技術的に作れることと、責任を持って使えることは同じではない。

モデルの導入効果を測るときは、オフライン精度とオンライン効果を分ける。検証データで AUC や RMSE が改善しても、業務現場で利用されなければ成果は出ない。逆に、精度改善が小さくても、担当者の確認順序を良くし、対応漏れを減らし、説明資料の作成時間を短縮するなら価値がある。A/B テスト、段階導入、担当者ヒアリング、対応時間の計測を組み合わせ、モデルが業務に与えた変化を確認する。教師あり学習の評価は、モデル単体ではなく業務プロセス全体で行う。

データ更新のたびに特徴量定義が変わる場合も注意が必要である。商品分類、地域コード、診療報酬区分、学校種別、会計科目のようなマスタは、年度や制度変更で追加・統合・廃止される。古いカテゴリを単に欠損やその他へ押し込むと、過去と現在の比較が崩れる。特徴量のマスタ版を保存し、学習時に使った定義と本番時の定義を照合する。カテゴリの変化は、モデル性能低下の原因であると同時に、業務環境が変わった重要なシグナルでもある。

セキュリティ面では、モデルそのものも保護対象である。学習済みモデル、特徴量辞書、前処理パイプライン、評価レポートには、元データの性質や業務上の重要情報が含まれる。モデル API に過剰なアクセスを許すと、入力と出力の組から機密情報を推測されるリスクもある。アクセス権限、監査ログ、レート制限、入力検査、出力の最小化を設計し、モデルを単なるファイルではなく業務システムの一部として扱うことが必要である。

チーム開発では、実験管理が品質を支える。誰が、どのデータ、どの特徴量、どの分割、どのパラメータで学習し、どのスコアを得たのかを追えなければ、良いモデルを再現できない。MLflow や単純な実験台帳を使って、実験 ID、Git のコミット、入力データ版、乱数シード、評価結果、メモを残す。再現できる実験だけが、レビュー可能な実験である。教師あり学習のプロジェクトでは、ノートブックの最終セルだけでなく、そこへ至る履歴が重要である。

最終的に、教師あり学習の品質は「予測が当たるか」だけでなく、「なぜその予測を使ってよいのか」を説明できるかで決まる。データの由来、ラベルの意味、分割の妥当性、評価指標の選択、誤りの影響、運用時の監視、利用者への説明がそろっていれば、モデルは業務の中で継続的に改善できる。これらが欠けている場合、どれほど高いスコアでも一時的な実験結果にとどまる。教師あり学習は、統計的学習と業務設計を結びつけて初めて完成する。

現場レビューでは、モデルが間違えた代表例を必ず見る。正しく予測できた例だけを並べると、利用者は過信しやすい。偽陽性、偽陰性、大きな過大予測、大きな過小予測をそれぞれ数件選び、入力データ、モデルの根拠、業務上の影響を確認する。間違いが許容できる種類なのか、データを追加すれば改善できるのか、そもそも予測対象の定義が曖昧なのかを切り分ける。失敗例の分析は、モデル改善だけでなく、業務側の期待値調整にも役立つ。

モデルの出力を利用者に見せるときは、スコアだけでなく推奨行動を設計する。解約リスク 0.72 と表示しても、担当者が何をすべきか分からなければ活用されない。優先連絡、追加確認、割引提案、上長承認、経過観察など、スコア帯ごとの行動を定義する。行動の結果を記録すれば、次回の学習データとして使える。教師あり学習を業務に組み込むとは、予測、行動、結果、再学習の循環を作ることである。

最後の承認段階では、技術担当者だけでなく、業務責任者、データ管理者、法務・倫理担当、現場利用者が同じ前提を確認する。どのデータを使い、どの判断に使い、どの判断には使わず、誤った場合に誰が確認するのかを合意する。教師あり学習のモデルは、単独で価値を生むのではなく、組織の意思決定プロセスに組み込まれて価値を生む。したがって、技術レビューと業務レビューを分離せず、同じ文書と同じ評価結果を見ながら承認することが望ましい。

運用開始後は、モデルを使った判断が実際に記録されているかも確認する。予測を見たが何もしなかった、担当者が別の判断をした、予測に従って行動したが結果が悪かった、といった情報が残らなければ改善できない。モデル出力、担当者の判断、実施した施策、後日の結果を結びつけることで、次の学習データと業務改善の材料が得られる。教師あり学習の運用は、予測結果を出す瞬間ではなく、その結果が現場でどう扱われたかまで含めて評価する必要がある。

受け入れ判定では、モデルのスコア、業務上の効果、リスク管理、説明責任を同じ表で確認する。精度だけが合格でも、利用者が解釈できない、入力異常時に止まらない、再学習条件がない、誤用を防げないなら本番投入は早い。教師あり学習の完成とは、モデルが完成することではなく、モデルを使う状況、使わない状況、間違えたときの扱いまで決まっていることである。

教材としての教師あり学習では、最終レポートに「採用したモデル」だけでなく「採用しなかったモデル」とその理由も書くと理解が深まる。線形モデルは解釈しやすいが精度が不足した、木系モデルは精度が高いが説明資料が必要だった、ニューラルネットワークはデータ量に対して過剰だった、という比較を残すことで、モデル選択が単なるスコア競争ではなく、データ量、説明性、保守性、業務リスクのバランスであることが分かる。

この観点を持つと、教師あり学習は「正解付きデータで学ぶ手法」という定義を超えて、業務上の問いを測定可能なラベルへ変換し、利用可能な特徴量で予測し、誤りの影響を管理しながら意思決定に接続する技術として理解できる。モデルの精度、説明、監視、改善の循環がそろっているかを確認することが、実務品質の最終条件である。

この最終条件を満たすと、教師あり学習の成果は一回限りの分析ではなく、データが増えるほど改善できる業務資産になる。

つまり、学習、評価、説明、監視、改善が一続きになっていることが合格条件である。

この連続性を文書化しておけば、担当者が替わっても同じ基準でモデルを評価できる。

この基準が再現性を支える。

再現性があって初めて、改善の議論もできる。

記録された比較と失敗例は、次のモデル更新で最も重要な教材になる。

🧮 数式に値を入れて手で計算する: 分類精度

合成 5 サンプルで予測精度を計算する。

Step 1: 予測

iyŷ一致?
111
201×
311
400
510×

Step 2: Accuracy

正解 3 / 全 5 = 0.6

🐍 Python で再現

1
2
3
4
import numpy as np
y = np.array([1, 0, 1, 0, 1])
yhat = np.array([1, 1, 1, 0, 0])
print(f"Accuracy: {(y == yhat).mean()}")

📤 実行結果

Accuracy: 0.6

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

🔗 隣接手法への橋渡し

教師あり学習は「(X, y) ペアからマッピング f: X → y を学習」する機械学習の中核パラダイム。 SSDSE-B-2026 で X = (総人口 A1101, 高齢化率 A1303/A1101, 転入者数 A5101, 一般診療所数 I5102 …) を入力、 y = 死亡数 A4200 を目的変数として線形回帰 / Lasso / LightGBM を学習させるのが典型ワークフロー。 47 都道府県という小サンプル下では正則化と交差検証が必須。

教師あり学習は「ラベル取得コスト」が最大ボトルネック。 SSDSE のような公的統計はラベル付き既存データとして稀有な存在で、 47 件と小規模ながら学習教材として理想的。

🌳 手法選択フロー

SSDSE-B-2026 を題材に教師あり学習を始めるとき、 以下の Step でアルゴリズムを絞る。

  1. Step 1: 目的変数 y はどんな型?
  2. Step 2: サンプル数 n と特徴量数 p の比率は?
    • n=47 (都道府県数) で p > 10 → 過学習リスク大。 L2 正則化 / L1 正則化 / 交差検証 必須
    • n が大きい (例: 5760 市区町村 × 年) → tree ensemble (LightGBM / XGBoost) で非線形を活用
    • n が極端に少ない (n < 30) → 線形モデル + ブートストラップで信頼区間付き予測
  3. Step 3: 解釈と精度のトレードオフは?
    • 解釈重視 (政策決定で根拠が必要) → 線形回帰 + 標準化偏回帰係数 (β*) で寄与度を可視化
    • 精度重視 (Kaggle 等) → XGBoost / LightGBM + SHAP で事後的に説明性を付与

この Step で「教師あり学習」のどの族 (線形回帰系 / 木系 / ニューラル系) を選ぶか迷いが減る。

🎮 触って理解する

キャンバスをクリック(スマホはタップ)してラベル付きデータを置いてみましょう。 置くたびにモデルが再学習し、予測規則(決定境界/回帰直線)がリアルタイムで更新されます。 最後にテスト点を置けば、学習した規則がその点のラベル(または値)を予測します。 これが「ラベル付きデータから予測規則を学ぶ=教師あり学習」の体感です。すべての計算はこのページ内で正確に実行されます。

課題タイプ:
横軸=特徴量1、縦軸=特徴量2(いずれも 0〜1 に正規化)
配置するもの:
データを置くと、ここに学習した規則と精度が表示されます。

※ この砂場のデータは学習体験用の合成点です(SSDSE 実測値ではありません)。分類器はロジスティック回帰を勾配降下法で、回帰は最小二乗法で、いずれもブラウザ内で厳密に計算しています。

🧭 直感:入力→正解のペアから規則を学ぶ

教師あり学習の心臓部は「入力 $x$ と正解 $y$ の対応表」です。上の砂場で置いた点が対応表そのもの。 モデルは「どんな $x$ のとき $y$ がどうなるか」を要約する予測規則 $\hat{f}$ を作ります。 分類なら領域を塗り分ける決定境界、回帰なら直線が規則の姿です。 新しいテスト点は、この学んだ規則に当てはめるだけで予測されます(ラベル分類回帰)。

⚠️ よくある落とし穴

🚀 発展:ラベルが乏しいときの工夫

🔎 解説深化 — 教師信号(ラベル)は「与えられる」ものではなく「設計する」もの

このページの多くの節は「モデル」と「特徴量 X」に焦点を当ててきました。ここでは視点を裏返し、教師あり学習の性能上限を決める 目的変数 y(ラベル・教師信号)そのものの品質と定義 を掘り下げます。

🎨 直感

ラベルは天から降ってくる「絶対の正解」ではありません。誰かが「採点基準」を決めて付けた 設計物 です。模範解答は、出題者が基準を決めて書いたから存在する。基準が変われば「正解」も変わります。教師あり学習は、この採点基準を真似る作業にすぎません。だからモデルの精度は、採点基準(ラベル)の質と定義を決して超えられない。特徴量やモデルをいくら磨いても、教師信号が曖昧・恣意的・ノイズまみれなら、そこが天井になります。「良いモデルを作る」前に「良い y を定義する」——ここが分析設計の本丸です。

⚠️ 落とし穴(重要)

① ラベル定義の「閾値」がクラスバランスを激変させる(SSDSE-B-2026 実測)。 2023 年 47 都道府県について、高齢化率 = A1303(65 歳以上人口)÷ A1101(総人口)を計算すると、最高は 秋田県 39.1%、最低は 東京都 22.8%、平均 31.6%、中央値 31.8% でした。ここで「高齢県かどうか」を分類したいとき、どこで線を引くか は分析者が決めます。同じ 47 県・同じ特徴量のまま、閾値を動かすだけで問題は別物になります。

ラベル定義(高齢県 = 率 ≥ 閾値) 正例(高齢県) 正例率 多数派ベースライン精度
率 ≥ 28%40 / 4785%40/47 = 85%
率 ≥ 30%35 / 4774%35/47 = 74%
率 ≥ 32%23 / 4749%24/47 = 51%
率 ≥ 34%12 / 4726%35/47 = 74%

正例率は 85% から 26% まで動き、「何も学習せず多数派だけを答える」ベースライン精度も 85% → 51% → 74% と乱高下します。ここが罠です——モデルの Accuracy が 0.85 と出ても、正例率 85% の問題では 常に「高齢県」と答えるだけで達成できる値 であり、モデルは何も学んでいないかもしれない。「精度が上がった/下がった」の正体が、実は ラベル定義を変えただけ のこともある。閾値・境界・「正解の付け方」は分析者が握る設計変数であり、結論を左右します。だから結果を報告するときは ラベルの定義を必ず明記 し、境界付近のサンプル(31〜32% 帯に県が集中)がどちらに倒れるかで解釈が変わる点に注意します。

② 教師信号のノイズが精度の「天井(既約誤差)」を決める。 テスト誤差は大きく 3 つに分解できます:
テスト誤差 = 近似誤差(バイアス) + 推定誤差(バリアンス) + 既約誤差(ラベル自体のノイズ)
前の 2 項はモデルや正則化(過学習対策)で減らせますが、3 つ目はデータをどれだけ集めても・どんな高性能モデルでも消せません。教師信号そのものが誤って付けられていたら、正しく学ぶほど「間違った正解」に近づき、逆にノイズまで覚えにいくと過学習になります。
(架空の算術例) 仮にラベルの 15% がランダムに反転していると、真に最良のモデルでも「観測されたラベル」と一致できるのは最大でも約 1 − 0.15 = 85%。この 85% が天井で、そこへ 99% で当てにいくモデルは、ノイズを暗記した過学習を疑うべきです。(この 15% はデータではなく、天井の仕組みを示すための架空の仮定値)

③ 「教師(y)側の問題」と「特徴(X)側のリーク」を混同しない。 このページの実装監査・運用ノート(上の節)で扱った データリーク は、未来情報や結果由来の値が 特徴量 X に混入する「入力側」の失敗でした。今回の①②は 教師信号 y の定義・品質という「出力側」の問題で、別の軸です。X 側は「予測時点で本当に使える値か」、y 側は「その正解は誰がどんな基準で・どれだけ正確に付けたか」——両輪をそれぞれ点検する必要があります。

🚀 発展

🔗 関連ページ

目的変数 アノテーション クラス不均衡 データリーケージ 過学習 評価指標 正解率(Accuracy) 交差検証 教師なし学習

数値は data/raw/SSDSE-B-2026.csv(2023 年・47 都道府県)の A1101(総人口)・A1303(65 歳以上人口)から算出した実測値。ラベルノイズ 15% の算術例のみ、天井の仕組みを説明するための架空の仮定値です。