過学習(Overfitting)
過学習とは、機械学習モデルが訓練(学習)データに適合しすぎてしまい、未知のデータ(テストデータ)に対して正しく予測できなくなった状態を指す。オーバーフィッティング(Overfitting)、過剰適合とも呼ばれ、機械学習やデータ分析において非常に陥りやすい問題の一つである。
一般に、過学習が起きているモデルでは
- 訓練データ上の精度は高い
- テストデータ上の精度は低い
という現象が見られる。あらかじめ用意されたデータで高い正解率を示していても、実運用で用いる未知データに対応できなければ、そのモデルは実用的とは言えない。
言い換えると、過学習を起こさず、幅広い入力データに対して安定して正しい推測ができること(汎化性能)が、機械学習モデルにおいて最も重要である。
未知のテストデータに対する識別能力を汎化能力といい、識別関数がその能力が高いと汎化性能が高いということになる。
機械学習における「学習」とは
過学習の文脈で使われる「学習」とは、人間が知識を覚えることとは異なり、与えられたデータからパターンや規則性を見つけ出す処理を指す。コンピュータは訓練データをもとに数式や重みを調整し、入力と出力の関係を表現するモデルを構築する。
予測モデルとは
予測モデルとは、訓練データから得られたパターンを数式や構造として表現し、未知のデータに対して予測を行う仕組みである。良い予測モデルとは、訓練データだけでなく、見たことのないデータに対しても高い精度を維持できるモデルである。
過学習の具体例
あるクラスの生徒のテスト結果から、学年全体の点数分布を予測するモデルを作成するとする。国語と算数(各100点満点)の点数を縦軸・横軸に取り、散布図を作成したとき、コンピュータが見つけたパターンを曲線として表現する。
| A列(国語) | B列(算数) |
|---|---|
| 40 | 45 |
| 50 | 55 |
| 60 | 58 |
| 65 | 70 |
| 70 | 68 |
| 75 | 78 |
| 80 | 82 |
| 85 | 80 |
| 90 | 88 |
適切なモデルであれば、データ全体の傾向を捉えたなだらかな曲線になるはずである。一方で、過学習が起きている場合、個々の点に過度に適合し、不自然に細かく湾曲した曲線が描かれる。
一見すると、訓練データへの当てはまりが良い後者のモデルの方が優れているように見える。しかし、予測したい未知データを追加すると、なだらかな曲線の方が全体にうまくフィットすることが分かる。
このように、データ一つひとつのばらつきに適合しすぎると、全体の傾向を捉えられなくなり、過学習に陥る。
過学習の問題点
過学習の本質的な問題は、データ全体の傾向を正しく把握できていない点にある。個々のデータが持つノイズや偶然の偏りにまでモデルが適合してしまうことで、以下のような状態が生じる。
- 訓練データへの適合度とテストデータでの予測精度に大きな差が生まれる
- 新しいデータへの対応力(汎化性能)が失われる
- 実運用で使えないモデルになる
予測モデルの役割は、データを忠実に再現することではなく、データに内在する規則性やパターンを抽出することである。過学習に陥ったモデルは、この役割を果たせなくなってしまう。
過学習が起きる主な要因
学習データが不足している
過学習はデータが多すぎることで起こると思われがちだが、実際には学習データが少ない場合に起きやすい。データが少ないと、限られた情報から無理にモデルを構築することになり、偶然の偏りに強く影響されてしまう。
機械学習では、与えられた学習データが世界のすべてである。十分なサンプルがなければ、未知のデータに対応できるモデルを作ることは難しい。
学習データに偏りがある
偏ったデータを学習させることも、過学習の原因となる。例えば売上予測モデルにおいて、閑散期や特殊な状況のデータだけを学習させた場合、通常期の売上を正しく予測することはできない。
訓練データが持つ分布そのものが偏っていれば、モデルの適用範囲も限定されてしまう。そのため、データの量だけでなく質や多様性も重要である。
モデルの目的が不明確である
何を予測したいのかが曖昧なままモデルを構築すると、不必要な特徴量を多く含んだ複雑なモデルになりやすい。その結果、過学習のリスクが高まる。
モデル構築の前段階で、目的と評価指標を明確に定義することが重要である。
過学習の判断方法・見分け方
ホールドアウト法
ホールドアウト法は、機械学習モデル開発の目的は、未知のデータに対して高い精度を出せるモデルを構築することである。したがって、モデルの良し悪しは「学習に使っていないデータ」に対する性能によって判断されなければならない。
ホールドアウト法の概要
ホールドアウト法とは、既存のデータセットを以下の3つに分割し、それぞれ異なる目的で使用する評価手法である。
- 訓練データ(Training Data):モデルの学習に用いる
- 検証データ(Validation Data):モデル選択やハイパーパラメータ調整に用いる
- テストデータ(Test Data):最終的な汎化性能を評価するために用いる
一般的な分割比率の例は以下の通りである。
- 訓練データ:60〜80%
- 検証データ:10〜20%
- テストデータ:10〜20%
分割比率に厳密なルールはないが、訓練データを多めに確保するのが一般的である。
各データの役割
- 訓練データ
訓練データは、モデルのパラメータを学習するために使用されるデータである。ニューラルネットワークや回帰モデルなど、すべての学習アルゴリズムはこのデータを用いて内部構造を調整する。
- 検証データ
検証データは、訓練データで学習した複数のモデルの中から、最も性能の良いモデルを選択するために用いられる。ハイパーパラメータの調整やモデル構造の比較は、このデータを基準に行う。
- テストデータ
テストデータは、モデルの学習および選択に一切使用していないデータである。このデータを用いて評価することで、モデルが未知のデータに対してどの程度の性能を発揮できるかを測定する。
なぜデータを分割する必要があるのか
- 訓練データと検証データを分けない場合
学習に用いたデータで性能を評価すると、モデルの真の性能は分からない。これは、大学受験生が一度解いた参考書の問題だけで学力を測るようなものである。
特にニューラルネットワーク(MLPなど)は、パラメータ次第で訓練データをほぼ完全に記憶できる。この性質は万能近似能力と呼ばれるが、同時に過学習を引き起こす原因にもなる。
このようなモデルを訓練データのみで評価しても、実運用での性能は判断できない。
- 検証データとテストデータを分けない場合
学習に使っていないデータで評価しているため一見問題なさそうに見えるが、モデル選択に用いたデータで再度性能を評価すると、「たまたま良い結果を出したモデル」を選んでしまう可能性が残る。
機械学習モデル開発の最終目的は、モデルの学習や選択に一切関与していないデータに対する性能を知ることである。そのため、テストデータは完全に独立していなければならない。
データ分割比率の考え方
訓練データの割合を大きく取る理由の一つは、実運用に近い状況を再現するためである。
実際の現場では、モデル選択が完了した後、利用可能なすべてのデータを用いて再学習することが多い。したがって、検証段階でも「多くのデータで学習したモデル」を評価する方が現実に近い。
この考え方に基づき、訓練データを多めに確保し、検証・テスト用に一部を分けておく方法が採用される。
時系列データにおける注意点(データリーク)
データ分割を誤ると、リーク(Data Leakage)と呼ばれる問題が発生する。
リークとは、本来は使えない未来情報をモデル評価時に使用してしまうことである。特に時系列データでは注意が必要である。
例えば、訓練データの中に検証データより未来の情報が含まれている場合、モデルは過去と未来の情報を同時に参照できてしまう。このような状況は、実運用では発生しない。
そのため、時系列データでは以下のように時間順を保った分割を行うのが一般的である。
- 過去 → 訓練データ
- 中間 → 検証データ
- 最新 → テストデータ
さらに発展的な手法として、時系列順を保ったまま検証を行うウォークフォワードバリデーション(Walk Forward Validation)がある。
ホールドアウト検証の基本的な流れ
- データセットを用意する
- データを訓練・検証・テストに分割する
- 訓練データを用いてモデルを学習する
- 検証データでモデル選択・調整を行う
- テストデータで最終的な性能を評価する
評価指標の選択
評価指標はタスクの種類や目的に応じて選択する必要がある。
- 回帰問題:MSE、MAE、R²
- 分類問題:Accuracy、Precision、Recall、F1スコア、AUC
不均衡データでは正解率だけを見るのは危険であり、複数指標を組み合わせて評価することが重要である。
交差検証(K分割交差検証)
交差検証では、データをK個に分割し、1つを検証用、残りを訓練用としてK回学習と評価を繰り返す。複数の分割結果を平均することで、より信頼性の高い評価が得られる。
交差検証の目的と重要性
交差検証の主な目的は以下の通りである。
-
モデルの汎化性能を適切に評価する
-
過学習・未学習を検出・防止する
-
ハイパーパラメータ最適化の指標とする
交差検証の基本的な仕組み
交差検証では、データセットを複数の部分集合に分割し、それらを交互にテストデータとして使用する。
基本的な流れは以下の通りである。
- データセットを複数の部分集合に分割する
- そのうち1つをテストデータ、残りを学習データとする
- 学習データでモデルを学習し、テストデータで性能を評価する
- テストデータを入れ替えて同様の手順を繰り返す
- 各評価結果の平均値を最終的な性能指標とする
K分割交差検証(k-fold cross-validation)
- 手法の概要
K分割交差検証は、交差検証の中でも最も一般的に利用される手法である。
データセットをK個の部分集合に分割し、そのうち1つをテストデータ、残りのK-1個を学習データとしてモデルを学習・評価する。
この操作を、すべての部分集合が1回ずつテストデータになるようにK回繰り返し、K回分の評価結果の平均をモデル性能とする。
特徴は以下。
- データを無駄なく活用できる
- 単一の分割より安定した評価が可能
- Kが大きいほど計算コストは増加する
一般的にはK=5やK=10がよく用いられる。
交差検証の主な種類
交差検証には、以下のような代表的な手法が存在する。
-
k分割交差検証
データセットをk個に分割し、k回の評価を行う基本的な手法である。 -
層化k分割交差検証(Stratified k-fold)
分類問題において、クラスの比率を保ったままデータを分割する手法である。
クラス不均衡なデータに対して有効である。 -
Leave-One-Out交差検証(LOOCV)
データ数と同じ回数の学習・評価を行う手法である。
評価は安定するが、計算コストが非常に高い。
交差検証における評価指標
交差検証では、目的に応じてさまざまな評価指標を用いる。
| 評価指標 | 説明 |
|---|---|
| 正解率(Accuracy) | 正しく予測できた割合 |
| 精度(Precision) | 正と予測した中で実際に正である割合 |
| 再現率(Recall) | 実際に正である中で正と予測できた割合 |
| F値(F-score) | 精度と再現率の調和平均 |
問題の性質に応じて、適切な評価指標を選択することが重要である。
ホールドアウト法と交差検証との違い
| 手法 | 概要 |
|---|---|
| ホールドアウト法 | データを一度だけ分割して評価 |
| 交差検証 | データをk分割し、k回評価して平均を取る |
交差検証は信頼性が高い一方で計算コストが高い。データ量が十分にある場合は、ホールドアウト法で十分な評価が可能である。
学習曲線の確認
学習曲線とは、訓練データと検証データそれぞれに対する精度をサンプル数に応じて可視化したものである。
- 訓練精度が高く、検証精度が低いまま乖離している場合、過学習の可能性が高い
- 両者が低い場合は、モデルが単純すぎる(アンダーフィッティング)可能性がある
学習曲線は、過学習の有無だけでなく、サンプル数が十分かどうかの判断にも役立つ。
例)
| サンプル数 | 訓練精度 | 検証精度 |
|---|---|---|
| 50 | 0.98 | 0.60 |
| 100 | 0.96 | 0.68 |
| 200 | 0.95 | 0.74 |
| 400 | 0.94 | 0.78 |
| 600 | 0.93 | 0.80 |
| 800 | 0.92 | 0.81 |
| 1000 | 0.91 | 0.82 |
上記のグラフからは以下のことが分かる。
まず、サンプル数が少ない段階(50〜100)では、訓練精度が非常に高い一方で、検証精度が大きく低い。
これは、訓練データにはよく適合しているが、未知データには対応できていない状態であり、過学習が起きている可能性が高いことを示している。
次に、サンプル数が増加するにつれて、訓練精度は緩やかに低下し、検証精度は着実に向上している。
これは、データ量の増加によってモデルが特定の訓練データに過度に適合することが抑えられ、汎化性能が改善していることを意味する。
さらに、600サンプル以降では、検証精度の伸びが緩やかになり、訓練精度と検証精度の差も小さくなっている。
このことから、現時点では大きな過学習は見られず、モデルは比較的安定した状態にあると考えられる。一方で、サンプル数を増やしても劇的な精度向上は見込めない可能性があり、データ量の増加だけでは性能改善が頭打ちになりつつあることも示唆される。
過学習を回避・解決する代表的な手法
正則化
正則化とは、モデルの複雑さに制約を加えることで過学習を防ぐ手法である。※ここでいう正則化はMin-Max正規化とは別物である点に注意が必要である。
- L1正則化:不要な特徴量の係数を0にし、変数選択を行う
- L2正則化:係数の大きさを抑え、モデルを滑らかにする
L1:「荷物を減らす引っ越し」に例えられる。
引っ越しの際、持っていける荷物の量に厳しい制限があるとする。
その場合、「ほとんど使っていない物」や「重要度の低い物」は思い切って捨てることになる。
L2:「荷物を均等に軽くする引っ越し」に例えられる。
こちらの場合は、すべての荷物を少しずつ軽くする工夫をする。
不要な物を完全に捨てるわけではないが、「特定の荷物だけ極端に重い」状態は避ける。
L1は特徴量が多い場合、L2は特徴量が比較的少ない場合に有効である。
ドロップアウト
ドロップアウトは主にニューラルネットワークで用いられる手法で、学習時にランダムに一部のニューロンを無効化する。これにより、特定の特徴に依存しすぎないモデルが構築され、過学習を抑制できる。
ハイパーパラメータチューニング
モデルの自由度を決める設定値(ハイパーパラメータ)を適切に調整することも重要である。例えば決定木では、木の深さを制限することでモデルの複雑化を防げる。
アンサンブル学習
複数のモデルを組み合わせて予測するアンサンブル学習は、過学習を抑えつつ精度を向上させる手法である。
-
バギング(例:ランダムフォレスト)
バギングとは、同じ学習器を複数用意し、それぞれを異なるデータで学習させ、その予測結果を平均や多数決で統合する手法である。
元データから重複を許してサンプリング(ブートストラップ)した複数の訓練データを用いることで、モデル間にばらつきを生み出し、分散を低減して過学習を抑える効果がある。 -
ブースティング(例:XGBoost、LightGBM)
ブースティングとは、弱学習器を逐次的に学習させ、前のモデルで誤分類されたデータを重視しながら性能を向上させていく手法である。
各学習器は前段の誤りを補正する役割を担い、結果として高い予測精度を実現する。 -
スタッキング
スタッキングとは、異なる種類のモデルを複数組み合わせ、それらの予測結果を入力として別のモデル(メタモデル)を学習させるアンサンブル手法である。
単一モデルでは捉えきれない特徴を補完し合うことで、性能向上を狙う。
参考


