Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Overfitting vs Underfitting: Why Your ML Model Acts Like a Student Who Either Memorizes or Doesn't Study at All

2026年08月22日に「Dev.to」が公開したITニュース「Overfitting vs Underfitting: Why Your ML Model Acts Like a Student Who Either Memorizes or Doesn't Study at All」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

機械学習モデルが訓練データを完璧に学習しすぎ、未知のデータに対応できない状態を「過学習」、学習不足でどちらのデータにも対応できない状態を「未学習」と呼ぶ。これらはモデル失敗の主要原因だ。汎化性能の高いモデルを目指し、原因に応じた適切な対策で過学習・未学習を防ぐ必要がある。

ITニュース解説

機械学習モデルを訓練する際、しばしば期待通りの性能が得られないことがある。特に、訓練データでは非常に高い精度を出すにもかかわらず、実際に新しいデータに適用すると全く機能しないといった状況は珍しくない。このような問題の主な原因として、「過学習(Overfitting)」と「未学習(Underfitting)」という二つの現象が存在する。これらは、不適切なデータやアルゴリズム選択よりも、多くの機械学習プロジェクトの失敗を引き起こす主要な要因となることが多い。

まず、過学習について説明する。過学習は、モデルが訓練データをあまりにも詳細に学習しすぎてしまう状態を指す。これは、データに含まれる本来のパターンだけでなく、特定の訓練データにしか存在しないノイズ(誤差やランダムな変動)、外れ値、偶発的な特徴までをも記憶してしまうことを意味する。その結果、モデルは訓練データに対してはほぼ完璧な性能を示すが、現実世界から得られる少しでも異なる新しいデータ、つまり未見のデータに対しては性能が著しく低下する。過学習したモデルの予測結果をグラフに描くと、個々の訓練データ点一つ一つを通過しようと、線が極端にジグザグに描かれることがある。これは、モデルが過度に複雑になり、データの表面的な特徴に囚われすぎている状態を示している。 過学習が発生する原因はいくつかある。一つは、訓練データが少なすぎる場合である。限られたデータ量では、モデルはパターンを一般化する機会が少なく、与えられた情報をそのまま記憶する傾向が強まる。次に、モデル自体が複雑すぎる場合も原因となる。例えば、データ点が500個しかないにもかかわらず、数百万ものパラメータを持つニューラルネットワークのような非常に複雑なモデルを使用すると、モデルは容易に500個のデータ点を完璧に記憶してしまう。また、モデルの訓練時間が長すぎることも過学習につながる。訓練を継続しすぎると、モデルは本来の信号(重要なパターン)ではなく、ノイズに適合し始める。さらに、モデルに与える特徴量(データの属性)が多すぎると、モデルはサンプル数が少ない中で見せかけの相関関係を見つけ出し、実運用では機能しないパターンを学習してしまうことがある。

次に、未学習について説明する。未学習は過学習とは逆の問題であり、モデルがデータの本来のパターンを十分に学習できていない状態を指す。つまり、モデルがシンプルすぎる、あるいは訓練が不十分であるために、データの本質的な関係性を捉えきれていないのである。未学習のモデルは、訓練データに対しても未見のデータに対しても、一貫して低い性能を示すことが特徴である。例えば、データが明らかに曲線的な関係を示しているにもかかわらず、未学習のモデルが直線で予測を描くような場合がこれに該当する。モデルは、データのパターンが存在しているにもかかわらず、それを認識する能力がない状態である。 未学習が発生する原因もいくつか存在する。最も一般的なのは、モデルが単純すぎることである。例えば、非線形な関係性を持つデータに対して線形回帰モデルのような単純なモデルを適用しようとすると、モデルはデータの複雑なパターンを捉えることができない。また、モデルに与える特徴量が少なすぎることも原因となる。例えば、住宅価格を予測しようとしているにもかかわらず、モデルに寝室の数しか与えず、広さ、立地、築年数、状態といった重要な情報を無視してしまうと、モデルは十分に学習できない。訓練時間が短すぎる場合も、モデルが学習する機会を十分に得られずに未学習となる。さらに、データ自体にあまりにも多くのノイズが含まれており、本来の信号がノイズに埋もれてしまっている場合も、モデルはパターンを学習しにくくなる。

モデルが過学習しているか未学習しているかを判断するには、訓練データにおけるモデルの性能(訓練スコア)と、未見のデータにおける性能(テストスコア)を比較することが重要である。 もし訓練スコアもテストスコアも両方とも高く、その値が近い場合、モデルはバランスが取れており、適切に学習できていると判断できる。 訓練スコアが非常に高いにもかかわらず、テストスコアが著しく低い場合は、モデルが過学習している可能性が高い。これは、モデルが訓練データを記憶してしまい、新しいデータに適用できない状態を示している。 反対に、訓練スコアもテストスコアも両方とも低い場合は、モデルが未学習である可能性が高い。これは、モデルがそもそもデータから有用なパターンを学習できていない状態を示している。 このように、訓練性能とテスト性能の間の「ギャップ」が、モデルの状態を診断する上で最も重要な手がかりとなる。大きなギャップは過学習を示し、一貫して低いスコアは未学習を示唆する。

過学習が判明した場合、これを修正するためのいくつかの方法がある。最も効果的な対策の一つは、より多くの訓練データを収集することである。多様なデータ例を追加することで、モデルは特定のノイズを記憶しにくくなり、より汎用的なパターンを学習せざるを得なくなる。次に、モデルの複雑さを減らすことも有効である。例えば、ニューラルネットワークであれば層の数やパラメータの数を減らす、決定木であれば深さを制限するといった方法がある。正則化も一般的な手法である。L1(Lasso)やL2(Ridge)正則化のような技術は、モデルが過度に複雑になることをペナルティとして課し、モデルの重みを小さく保つことで汎化性能を高める。ニューラルネットワークでは、訓練中に一部のニューロンをランダムに無効化するDropoutという手法も有効である。これは、特定のニューロンに過度に依存するのを防ぎ、ネットワーク全体の頑健性を高める。訓練の「早期終了(Early Stopping)」も重要である。これは、訓練中に検証データでのモデル性能を監視し、検証性能が悪化し始めた時点で訓練を停止するという方法である。この時点が、モデルがノイズを記憶し始める転換点であることが多い。最後に、訓練データのクリーンアップと前処理も過学習対策に役立つ。ノイズを除去し、外れ値を適切に処理し、データの一貫性を保つことで、モデルが学習する不要な要素を減らすことができる。

一方、未学習が判明した場合も、いくつかの修正方法がある。一つは、モデルの複雑さを増すことである。例えば、線形回帰モデルから多項式回帰モデルへ、あるいは浅いニューラルネットワークからより深いものへと変更することで、モデルがより複雑なパターンを学習できるようになる。より良い「特徴量エンジニアリング」も効果的である。これは、既存のデータから新しい特徴量を作成することで、モデルが捉えきれていなかったパターンを浮き彫りにする方法である。例えば、価格と面積を別々に与えるのではなく、「単位面積あたりの価格」という新しい特徴量を作成することで、モデルの学習能力が向上することがある。データ内のノイズを減らすことも未学習対策となる。信号がノイズに埋もれている場合、ノイズを減らすことで本来のパターンがモデルにとって学習しやすくなる。訓練時間を長くすることも単純ながら効果的な方法である。モデルによっては、より多くの訓練エポック(訓練回数)を必要とすることがある。最後に、正則化を適用しすぎている場合は、その度合いを減らすことを検討する。正則化が強すぎると、モデルが本来学習すべきパターンすらも抑制してしまう可能性があるためである。

これらの過学習と未学習の問題は、「バイアス-バリアンスのトレードオフ」という概念でまとめられる。高バイアスは未学習の状態を指し、モデルがデータに対してあまりにも多くの単純な仮定を置き、本質的なパターンを見逃してしまう傾向がある。一方、高バリアンスは過学習の状態を指し、モデルが特定の訓練データに過度に敏感になり、その詳細なノイズまで学習してしまう傾向がある。機械学習モデル開発の目標は、低バイアスでありながら低バリアンスである、という「スイートスポット」を見つけることである。これは、モデルがデータのパターンを十分に捉えつつ、未見のデータに対しても適切に汎化できる状態を意味する。実際には、バイアスを下げようとするとバリアンスが上がったり、その逆が起こったりするため、常にこの二つのバランスを取ることが求められる。

機械学習を学ぶ上で、いくつかの一般的な誤解を解いておく必要がある。「高い精度が常に良い」という考え方は誤りである。特に訓練データ上での精度が非常に高くても、テストデータでの精度が低ければ、そのモデルは実用性が低い。重要なのは、モデルがまだ見たことのないデータに対しても一貫して良い性能を発揮する「汎化性能」である。また、「より複雑なモデルが常に良い」という考え方も正しくない。十分なデータがない状況でモデルの複雑さだけを高めると、過学習に直結する。まずはシンプルなモデルから始め、必要に応じて複雑さを増していくのが賢明なアプローチである。さらに、「過学習は深層学習だけで起こる」という誤解もあるが、これも間違いである。決定木のようなシンプルなモデルであっても、深さの制限を設けなければ、小さなデータセットに対して容易に過学習してしまうことがある。過学習は、あらゆる種類の機械学習モデルに普遍的に起こりうる問題である。

機械学習のモデル開発において、最も重要なスキルの一つは、この過学習と未学習のスペクトルを理解し、適切に対処することである。訓練データで最も高いスコアを出すモデルが良いモデルなのではなく、まだ見たことのないデータに対して一貫して高い性能を発揮するモデルこそが、真に価値のあるモデルなのだ。この理解が、実世界で機能する堅牢な機械学習システムを構築するための第一歩となる。

関連コンテンツ