機械学習のモデルづくりで、初心者が最初につまずく最大の落とし穴が「過学習」です。訓練中の成績は素晴らしいのに、本番のデータではまるで当たらない——この現象の正体と対策を、この記事でしっかり理解しましょう。

📖 ひと言でいうと

過学習(オーバーフィッティング)とは、モデルが訓練データに過度に適応してしまい、訓練データでは高い性能を出せるのに、未知の新しいデータではうまく予測できなくなる状態です。

例えるなら、過去問の答えを丸暗記した受験生のようなものです。過去問とまったく同じ問題なら満点を取れますが、少し表現を変えた初見の問題にはまったく歯が立ちません。「問題の解き方(法則)」ではなく「答えそのもの」を覚えてしまったのが原因です。厳密には、モデルが訓練データに含まれる偶然のノイズや細かい癖まで学習してしまい、データ全体に共通する本質的なパターンを捉えられていない状態を指します。

🖼 1枚でわかる過学習

過学習(オーバーフィッティング)の全体像
  • 症状 — 訓練誤差は小さいのに、未知データへの汎化誤差が小さくならない
  • 原因 — モデルが複雑すぎる・データが少ない・ノイズまで暗記
  • 対極の状態 — 未学習(underfitting)=訓練データにすら合わない
  • 検出法 — 訓練データとは別の検証データで性能を測る(交差検証)
  • 対策 — 正則化・データ追加・モデルの単純化・早期終了など
つくもち屋「G検定対策」SUMMARY

📘 公式テキストの説明

学習時に訓練誤差が小さい一方で、新しい未知のデータに対する汎化誤差が小さくならない状態。この状態では、モデルは訓練データに対して高い性能を示すが、新しいデータに対しては効果的でない。つまり、訓練データに過度に最適化されてしまっている。対比される現象として未学習(underfitting)があり、これはモデルが訓練データに対しても、新しい未知のデータに対しても低い性能しか示さない状態であり、正則化が過度である場合や、モデルの複雑性が不足している場合に発生する。これにより全体の汎化性能(予測性能)が低下する。

ここで出てくる「訓練誤差」とは学習に使ったデータ上での間違いの大きさ、「汎化誤差」とは学習に使っていない未知のデータ上での間違いの大きさのことです。機械学習の本来の目的は未知のデータへの予測ですから、汎化誤差こそが本当の実力です。過学習は「訓練誤差は小さいのに汎化誤差が大きい」というギャップの状態であり、逆に両方とも大きい状態が未学習です。この2つはセットで対比されるので、必ず区別できるようにしておきましょう。

🔍 しっかり理解する

なぜ過学習が起こるのか

主な原因は「モデルの表現力(複雑さ)」と「データの量・質」のバランスの崩れです。パラメータの多い複雑なモデルは、複雑な曲線を描いてどんなデータにもぴったり合わせられます。しかし訓練データには、たまたま混じった測定誤差や偶然の偏り(ノイズ)が必ず含まれています。表現力が高すぎるモデルは、この「たまたま」まで忠実になぞってしまうのです。

💡 ポイント
  • モデルが複雑すぎる(パラメータが多すぎる)
  • 訓練データの量が少ない
  • 学習を長く回しすぎて訓練データに密着していく

こうした条件がそろうほど、過学習は起こりやすくなります。

過学習と未学習の対比

🅰 過学習(overfitting)
  • 訓練誤差: 小さい
  • 汎化誤差: 大きい
  • 原因: モデルが複雑すぎ・データ不足
  • 対策: 正則化を強める・データを増やす・モデルを単純化
🅱 未学習(underfitting)
  • 訓練誤差: 大きい
  • 汎化誤差: 大きい
  • 原因: モデルの複雑性不足・正則化が過度
  • 対策: モデルを複雑に・正則化を弱める

見分け方のポイントは訓練誤差です。訓練誤差が小さいのに未知データで悪いなら過学習、訓練誤差の時点ですでに悪いなら未学習です。「正則化が過度だと未学習になる」という点は、選択肢の入れ替え問題で狙われやすいので注意してください。

どうやって防ぐのか

代表的な対策は次のとおりです。まず「正則化」は、損失関数にペナルティ項(L1正則化・L2正則化など)を加えて、パラメータ(重み)が大きくなりすぎないよう制約をかける方法です。重みを小さく保つことで、モデルがデータの細かな変動に過敏に反応しなくなり、汎化性能が向上します。特にL2正則化はリッジ回帰とも呼ばれ、重みの二乗和を損失関数に加えます。

そのほか、訓練データそのものを増やす、特徴量やパラメータ数を減らしてモデルを単純化する、検証データの誤差が悪化し始めた時点で学習を打ち切る(早期終了)といった方法があります。また、過学習が起きていないかを検出する仕組みとして、データを訓練用と評価用に分ける交差検証(別キーワード)が使われます。

💡 具体例で考える

住宅価格を予測するモデルを考えます。手元の100件の物件データに対し、非常に複雑な多項式モデルを当てはめると、100件すべての価格をほぼ誤差ゼロで「予測」できるモデルが作れます。しかしこのモデルの予測曲線は、データ点の間で不自然に暴れており、新しい物件の価格を入れるととんでもない値を出します。100件の「たまたまの値」を暗記しただけで、広さや立地と価格の本質的な関係を学んでいないからです。

もう1つの例が、犬と猫の画像分類です。訓練データの犬の写真の多くが「屋外の芝生」で撮られていたとすると、モデルは「犬らしさ」ではなく「背景が緑なら犬」という訓練データ限定の手がかりを学んでしまうことがあります。訓練データでは正解率が高くても、室内で撮った犬の写真を猫と誤分類する——これも訓練データの偏りに過度に適応した過学習の一形態です。

⚠️ よくある誤解・紛らわしい用語

💡 ポイント
  • 「訓練データでの正解率が高い=良いモデル」ではない。むしろ訓練データだけ極端に良い場合は過学習を疑うのがセオリーです。評価は必ず学習に使っていないデータで行います。
  • 過学習と未学習の取り違え。「訓練データに対しても性能が低い」のは未学習です。過学習は「訓練データには強く、未知データに弱い」状態です。
  • 「正則化を強めるほど良い」わけではない。正則化が過度だと今度は未学習に陥ります。適切な強さの調整が必要です。
  • 過学習は「学習のしすぎ(時間)」だけの問題ではない。学習回数だけでなく、モデルの複雑さやデータ量とのバランス全体の問題です。

📝 試験でのポイント

💡 ポイント
  • 「訓練誤差が小さいのに汎化誤差が小さくならない状態はどれか」という定義選択問題が基本形です。「汎化誤差」「訓練誤差」の語の対応を正確に。
  • 未学習との対比問題が頻出です。「正則化が過度」「モデルの複雑性が不足」は未学習側の説明であることを押さえましょう。
  • 対策を選ばせる問題では、正則化(L1/L2)・データ拡充・モデルの単純化・早期終了が正解側、「モデルをより複雑にする」は誤り側の典型です。
  • 事例文で「開発中は精度99%だったが本番投入後に精度が大幅に低下した」とあれば、過学習を疑う場面だと判断できるようにしておきましょう。

📚 まとめ

💡 ポイント
  • 過学習は、訓練誤差が小さい一方で未知データへの汎化誤差が小さくならない状態です。
  • 原因はモデルの複雑さとデータ量のアンバランスで、ノイズまで「暗記」してしまうことにあります。
  • 対極の未学習は、訓練データに対してすら性能が出ない状態で、正則化が過度な場合にも起こります。
  • 対策は正則化・データ追加・モデルの単純化・早期終了、検出には交差検証が使われます。
  • 機械学習の目的は未知データへの予測であり、評価すべきは訓練成績ではなく汎化性能です。