機械学習で最も重要な問いの一つ:「このモデルは、まだ見ぬデータに対してどれくらいうまく予測できるのか?」
訓練データでの性能は信用できない。なぜなら、モデルはそのデータを「見て」学習したから。本当に知りたいのは、未知のデータへの予測能力 ── これを汎化性能と呼ぶ。
この章では、汎化性能を理解するための核心概念「バイアス・バリアンス分解」を学ぶ。シンプルすぎるモデルは的外れ(高バイアス)、複雑すぎるモデルはノイズまで学習(高バリアンス)。この2つのバランスこそが、良いモデルを作る鍵となる。
この章を読み終えると:
あなたは今、データサイエンティストとして働いているとしましょう。上司から「明日の売上を予測するモデルを作れ」と言われました。
過去1年分のデータを使って、複雑なモデルを作りました。訓練データでの予測は完璧 ── 誤差はほぼゼロ。「これは素晴らしいモデルだ!」と思って上司に報告しました。
ところが翌日、実際の売上と予測を比べてみると...全然当たっていない。何が起きたのでしょうか?
これは機械学習で最もよくある落とし穴です。訓練データでうまくいくことと、未知のデータでうまくいくことは、まったく別の話なのです。

訓練データでモデルを評価することは、試験問題を事前に見せてから試験を受けさせるようなもの。当然、良い点数が取れます。でも、それは本当の実力を測れていません。
本当に知りたいのは、まだ見たことのないデータに対する予測能力。これを汎化性能(generalization performance)と呼びます。
モデルの予測がどれくらい「間違っている」かを測りたい。でも、「間違っている」とは具体的にどういうことでしょうか?
ここで損失関数(loss function)の出番です。損失関数は、予測値と実際の値のズレを数値に変換する関数です。
最も代表的なのが二乗誤差損失:
各記号の意味:
$Y$:実際の値(真の答え)
$\hat{f}(X)$:モデルの予測値
この差を二乗したものが「損失」
なぜ二乗するのでしょうか?2つの理由があります:

もう一つよく使われるのが絶対値誤差損失:
こちらは外れ値に対して寛容です。どちらを使うかは、問題の性質によります。
さて、損失関数を使って誤差を測る準備ができました。でも、どのデータで測るかで意味がまったく変わります。
訓練誤差(training error)は、モデルの学習に使ったデータでの誤差です。言葉で書くと「訓練データすべての誤差を足して、データ数で割った平均」:
これは「試験問題を事前に見せた上での点数」。当然、良い値が出やすい。
一方、テスト誤差(test error)は、学習に使わなかった新しいデータでの誤差です。

ここで「期待値」という言葉が出てきます。これは「平均的な値」と考えてOKです。テスト誤差を言葉で書くと「新しいデータをたくさん持ってきて、それぞれの誤差を計算し、その平均を取ったもの」:
$\mathcal{T}$:訓練データのセット
この式は「訓練データ $\mathcal{T}$ でモデルを作った後、新しいデータに対する誤差の平均」という意味です。
縦棒 $|$ は「〜という条件のもとで」を表します。
さらに、訓練データ自体のランダム性も考慮した期待予測誤差:
これが、モデルの真の性能を表す指標です。
ここで、機械学習で最も重要なグラフの一つを見てみましょう。
横軸にモデルの複雑さ(パラメータ数、多項式の次数など)、縦軸に誤差を取ります。
訓練誤差は、モデルが複雑になるほど単調に減少します。なぜなら、複雑なモデルほど訓練データに完璧にフィットできるから。極端な話、各データ点を丸暗記することもできます。
一方、テスト誤差は違う振る舞いをします:
この結果、テスト誤差はU字カーブを描きます。

U字の底にあるのが「ちょうど良い複雑さ」。これより左はアンダーフィッティング(モデルが単純すぎる)、右はオーバーフィッティング(モデルが複雑すぎる)。
テスト誤差がU字カーブを描くのはなぜでしょうか?その答えがバイアス・バリアンス分解です。
ある入力点 $x_0$ での期待予測誤差は、次のように分解できます:

3つの項を一つずつ見ていきましょう:
実は、データには「真の関係」以外に、測定誤差や偶然の変動が含まれています。
例えば、同じ身長の人でも体重は人それぞれ。身長から体重を予測するモデルを作っても、この「人それぞれ」の部分は予測できません。
どんなに完璧なモデルを作っても、この「予測不可能な変動」は残ります。だから「既約(減らせない)誤差」と呼ばれます。天気予報が完璧になれないのと同じ理由です。
ここで記号を整理しましょう:
「モデルの平均的な予測」とは、別の訓練データでモデルを作り直したら予測値が変わる、という考え方です。何度も訓練し直したときの予測値の平均が $E[\hat{f}(x_0)]$。
バイアスは、この「平均的な予測」と「真の答え」のズレです:
シンプルなモデルは、複雑な現実を捉えきれないため、バイアスが大きくなります。
これは「訓練データが変わると予測がどれくらいブレるか」。複雑なモデルはデータのノイズにも敏感に反応するため、バリアンスが大きくなります。
ここで核心に迫ります。バイアスとバリアンスは、通常トレードオフの関係にあります。
シンプルなモデル(例:直線)の場合:
複雑なモデル(例:高次多項式)の場合:

これがU字カーブの正体です:
良いモデルを作るとは、このバランスを見つけること。「ちょうど良い複雑さ」を探す旅が、機械学習の核心なのです。
バイアスとバリアンスをもっと直感的に理解するために、的当てに例えてみましょう。
あなたは弓矢で的を狙っています。何度も矢を放ちます。
高バイアス・低バリアンスの場合:
矢は毎回ほぼ同じ場所に当たる(ばらつきが小さい)。でも、的の中心から離れている(系統的にズレている)。
低バイアス・高バリアンスの場合:
平均すると的の中心を狙えている。でも、矢がばらばらに散らばる(ばらつきが大きい)。

理想的な状態:
矢が毎回、的の中心付近に集中している。これが低バイアス・低バリアンスの状態です。
機械学習のモデルも同じ。私たちが目指すのは、「的の中心(真の値)に、安定して当たる」モデルです。
ここまでの話を踏まえて、実践的な問題に移りましょう。
機械学習のプロジェクトでは、2つの異なる目標があります:
モデル選択(Model Selection):
複数の候補モデルから最良のものを選ぶ。
「決定木とランダムフォレスト、どちらがこのデータに適しているか?」
モデル評価(Model Assessment):
選んだモデルの汎化性能を見積もる。
「このモデルを本番環境で使ったら、どれくらいの精度が期待できるか?」

この2つを混同すると、大きな問題が起きます。
例えば、モデル選択に使ったデータで最終的な性能を報告すると、楽観的すぎる推定値になります。なぜなら、そのデータに対してうまくいくモデルを選んだのだから。
では、モデル選択と評価を「別々のデータで」行うには、どうすればいいでしょうか?
答えはシンプル:最初にデータを分けておくことです。
典型的な分割は3つ:

重要なのは、テストデータは一度しか使わないこと。
検証データは何度も使ってOK。複数のモデルを試し、ハイパーパラメータを調整し、最良のモデルを選ぶ。この過程で検証データへの性能は最適化される。
だから、最終的な性能評価は「初めて見る」テストデータで行う必要があります。
典型的な分割比率は:
データが少ない場合は、クロスバリデーション(次章で解説)という手法を使います。
この章で学んだことを振り返りましょう。

次の章では、交差検証やブートストラップなど、限られたデータを最大限活用する手法を学びます。
汎化性能を理解する鍵: