プログラミングの用語一覧へ
このページの目次
プログラミング中級図解あり

過学習とは?

最終更新:2026/08/18

3秒でわかる

学習データに合わせ込みすぎて、未知のデータでは当たらなくなる状態。訓練の成績だけが良く、本番で急に精度が落ちる原因のほとんどがこれです。

30秒図解

モデル深さ2、5、20、Noneで訓練精度と未知データ精度を比べ、深さ5付近が最適で深さ20以降は過学習になる図
過学習では訓練データへの精度だけが上がり、未知データへの精度が下がります。検証データの曲線が下がる地点が合図です。

もう少し詳しく

どういうものか

過学習(オーバーフィッティング)は、機械学習のモデルが訓練データの細かい癖やノイズまで覚え込んでしまい、初めて見るデータに対する予測が悪くなる状態です。訓練データでの正解率は上がり続けるのに、検証データでの正解率が途中から下がり始める、という形で現れます。

過去問の答えを丸暗記した状態に近く、同じ問題なら満点でも、少し数字を変えられると解けなくなります。

なぜ必要か

この言葉を知らないと、モデルの良し悪しを訓練データの成績で判断してしまいます。精度 99% と報告されたモデルが本番で半分も当たらない、という事故はここから起きます。だからこそ、データを訓練用と検証用に分けて、見せていないデータでの成績を評価に使います。

具体例

from sklearn.model_selection import train_test_split from sklearn.<a href="/glossary/tree" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">tree</a> import DecisionTreeClassifier X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, random_state=0 ) for depth in [2, 5, 20, <a href="/glossary/none" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">None</a>]: model = DecisionTreeClassifier(max_depth=depth, random_state=0) model.fit(X_train, y_train) print(depth, round(model.score(X_train, y_train), 3), # 訓練の成績 round(model.score(X_test, y_test), 3)) # 未知データの成績 # 2 0.81 0.79 # 5 0.92 0.88 # 20 1.00 0.76 訓練だけ満点 ここが過学習 # None 1.00 0.74

深さを増やすほど訓練の成績は上がりますが、テストの成績は途中から下がります。この折り返し点の手前が使いどころです。

つまずきやすいところ

分割の仕方を間違えると、過学習に気づけません。時系列データを無作為に分割すると、未来のデータで学習して過去を当てることになり、テストの成績が不自然に良く出ます。同じ人物や同じ店舗のデータが訓練と検証の両方に入る場合も同様です。

対策としてよく挙がるのは、データを増やす、特徴量を減らす、正則化を効かせる、木の深さのような複雑さの上限を下げる、早期終了する、といったものです。逆に、訓練の成績も検証の成績もどちらも低いなら、それは過学習ではなく学習不足(未学習)なので、対処は反対向きになります。

覚え方

訓練の点数と検証の点数が離れていくなら過学習、両方低いなら未学習です。

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地過学習プログラミング

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

この用語を扱うコース

コース

データ分析入門 Python(pandas)

57レッスン
コース

生成AI資格対策(生成AIパスポート+G検定)

49レッスン
コース

はじめての生成AI

76レッスン
データ分析コースの全編を見る