モデルの評価と交差検証へようこそ!
こんにちは!CS2 機械学習シラバスの中でも特に実践的な章へようこそ。これまではモデルの構築方法について学んできたことでしょう。しかし、そのモデルが本当に「優れている」かどうかをどうやって判断すればよいのでしょうか?もしモデルを作成したのと同じデータでテストしただけでは、モデルは素晴らしい性能に見えても、実際の保険料率の算定などで使ってみると全く役に立たない、ということが起こり得ます。
この章では、交差検証(Cross-validation)を用いてモデルを「ストレス・テスト」する技術を学びます。また、モデルの「秘密の設定」であるハイパーパラメータの調整方法も習得しましょう。さあ、始めましょう!
1. パラメータとハイパーパラメータの違い
モデルを評価する前に、実際に何を調整しているのかを理解する必要があります。機械学習には、私たちが操作できる2種類の「つまみ」があります。
パラメータ
これは、データからモデルが自動的に学習する内部の値です。例えば、線形回帰 \( y = \beta_0 + \beta_1 x \) において、係数 \( \beta_0 \) と \( \beta_1 \) がパラメータです。これらはあなたが選ぶのではなく、データが決めるものです。
ハイパーパラメータ
これは、学習プロセスが始まる前に、あなた(アクチュアリー)が設定しなければならない「設定値」です。これらはモデルがどのように学習するかを制御します。
例え話:マラソンのトレーニングをしていると想像してください。走行中の心拍数や筋力はパラメータです(トレーニングに適応して変化するもの)。一方、トレーニング計画の長さや履くシューズのブランドはハイパーパラメータです(最高の成果を出すために、最初にあらかじめ決めておくものです)。
クイックレビュー:
- パラメータ:データから学習されるもの(例:ニューラルネットワークの重み)。
- ハイパーパラメータ:アクチュアリーが設定するもの(例:K近傍法における \( k \) の値、決定木の深さなど)。
2. 黄金律:学習、検証、そしてテスト
モデルが未知のデータに対して機能するかを確認するために、すべてのデータを学習に使うべきではありません。代わりに、データセットを3つの異なるグループに分割します:
- 学習用データ(Training Set):モデルがパターンを「勉強」するためのデータ。
- 検証用データ(Validation Set):モデルを「調整」するために使用します。異なるハイパーパラメータを試し、このセットで最も優れたパフォーマンスを示すものを探します。
- テスト用データ(Test Set):「最終試験」です。最後に一度だけ使用し、全く新しいデータに対して最終的なモデルがどの程度機能するかを確認します。
避けるべき一般的なミス:絶対に、テスト用データをハイパーパラメータの決定に使わないでください!もしそうしてしまうと、情報が「漏洩(リーク)」し、結果が楽観的に出すぎてしまいます。
重要なポイント:
学習は知識習得のため、検証は最適な設定を選ぶため、そしてテストは最終的な性能確認のためにあります。
3. 交差検証とは何か?
データセットが小さい場合、3つに分割してしまうとモデルが学習するためのデータが非常に少なくなってしまいます。交差検証は、データをより効率的に活用するための賢い手法です。
K分割交差検証(K-fold Cross-validation)
これが最も一般的な手法です。手順は以下の通りです:
1. データを等しいサイズの \( k \) 個のパーツ(「フォールド」と呼びます)に分割します。
2. 1つのフォールドを検証用データとして選び、残りの \( k-1 \) 個のフォールドを学習用データとして使います。
3. モデルを学習させ、検証用フォールドで誤差(例:平均二乗誤差)を計算します。
4. これを \( k \) 回繰り返し、毎回異なるフォールドを検証用データとして使います。
5. \( k \) 回の誤差推定の平均を計算します。この平均値が交差検証誤差です。
難しそうに見えても心配しないでください! スポーツの総当たり戦のようなものだと考えてみてください。各チームが順番に試合を休み(検証用データ)、その間に他のチームが試合(学習用データ)を行うのと同じことです。
1個抜き交差検証(Leave-One-Out Cross-Validation: LOOCV)
これはK分割交差検証の極端なバージョンで、\( k \) が観測データの数(\( n \))と等しいものです。各試行において、1つを除いたすべてのデータで学習し、除外されたその1つのデータでテストします。非常に正確ですが、データが多い場合は計算に非常に時間がかかります!
豆知識:アクチュアリーの実務では \( k=5 \) または \( k=10 \) を使うのが標準的です。これは計算速度と精度のバランスが良いためです。
4. ハイパーパラメータ調整のための交差検証
どうすれば「最良の」ハイパーパラメータを見つけられるのでしょうか?グリッドサーチと交差検証を組み合わせた手法を使います:
1. ハイパーパラメータとして考えられる値のリストを定義します(例:モデルに対して \( k=1, 3, 5, 7, 9 \) を試す)。
2. それぞれの値に対して、K分割交差検証を実行します。
3. 各値の平均誤差を比較します。
4. 最も平均誤差が低い値を選択します。
重要なポイント:
交差検証は、学習用データを単に丸暗記するのではなく、未知のデータに対してうまく汎化(generalize)できるようなハイパーパラメータを選ぶ助けとなります。
5. 過学習と過小学習
交差検証の目的は、2つの極端な状態の「スイートスポット(最適解)」を見つけることです:
- 過小学習(Underfitting):モデルが単純すぎる状態(曲線的なパターンに直線で当てはめようとするようなもの)。学習データと検証データの両方で性能が悪くなります。
- 過学習(Overfitting):モデルが複雑すぎる状態(データのノイズまで丸暗記している)。学習データでは完璧な性能を示しますが、検証データではひどい結果になります。
覚え方のヒント:
過学習は、特定の模擬試験の答えを丸暗記するようなもの。
汎化(私たちが目指すもの)は、概念を理解することで、どんな問題にも答えられるようになることです。
要点まとめ
1. ハイパーパラメータは(モデルではなく)アクチュアリーが選択する設定値である。
2. 交差検証(特にK分割)は、モデルが未知のデータに対してどの程度機能するかを推定する技術である。
3. 検証用データはハイパーパラメータの調整に使い、テスト用データは最終評価のみに使う。
4. K分割法は、データを \( k \) 個に分割し、どの部分を「テスト」データにするかを交代させながら行う。
5. LOOCVは、\( k = n \) となるK分割交差検証のことである。
6. 目的:過学習を避けるために交差検証誤差を最小化すること。
おめでとうございます!これでCS2の機械学習モデル評価の基礎をマスターしました。これらの概念を練習し続ければ、モデル構築のエキスパートへの道は開かれています!