モデルの評価手法

ホールドアウト法・交差検証・混同行列・ハイパーパラメータ
🔰 初心者

モデルの性能ってどうやって評価するんですか?

🎓 上級者

モデルの汎化性能(未知データへの対応力)を正しく測るための手法がいくつかあるよ。学習に使ったデータで評価すると「カンペを見てテストを受ける」状態になるから、学習に使っていないデータで評価する必要があるんだ。

✂️ ホールドアウト法
🔰 初心者

ホールドアウト法ってどういう方法ですか?

🎓 上級者

データを学習用とテスト用に1回だけ分割して評価する、最もシンプルな方法だよ。

ホールドアウト法の手順

1. データを「学習データ(例:70%)」と「テストデータ(例:30%)」に分ける
2. 学習データでモデルを学習
3. テストデータで精度を評価
シンプルで速いが、分割の仕方で結果が変わる(偏りが生じる)のが弱点。
🔁 交差検証法(K分割交差検証 / K-Fold Cross Validation)
🔰 初心者

ホールドアウト法の弱点を補う方法はありますか?

🎓 上級者

データをK個に分割して、K回評価を繰り返す方法があるよ。すべてのデータが必ず1回はテストに使われるので、評価の偏りが少ないんだ。

交差検証法の手順(例:5分割の場合)

1. データを5つのブロックに分ける
2. 1回目: ブロック1をテスト、残り2〜5で学習 → 精度を記録
3. 2回目: ブロック2をテスト、残り1,3〜5で学習 → 精度を記録
4. 3〜5回目: 同様に繰り返す
5. 5回の精度の平均を最終評価とする
すべてのデータが必ず1回はテストに使われるので、評価の偏りが少ない。Kの一般的な値は5分割や10分割。
Leave-One-Out(LOO)

K=データ数にした交差検証。1つだけテスト、残り全部で学習をデータの数だけ繰り返す。最も偏りが少ないが計算コストが非常に大きい。データが非常に少ないときに使う。

⚖️ ホールドアウト法 vs 交差検証法 比較

ホールドアウト法

分割回数:1回
評価の信頼性:低い(分割に依存)
計算コスト:低い
データが少ないとき:不向き
データが多いとき:十分使える

交差検証法

分割回数:K回
評価の信頼性:高い(平均を取る)
計算コスト:高い(K回学習)
データが少ないとき:有効
データが多いとき:計算コストが無駄になりがち

データ分割方法の比較 ホールドアウト法 学習データ(70%) テスト(30%) 1回だけ分割 → 評価結果が分割に依存 5分割交差検証(K-Fold) 1回目 テスト 2回目 テスト 3回目 テスト 4回目 テスト 5回目 テスト 学習データ テストデータ 5回の平均 → 最終評価
図1: ホールドアウト法と5分割交差検証のデータ分割イメージ
🔢 混同行列(Confusion Matrix)
🔰 初心者

混同行列って何ですか?

🎓 上級者

分類モデルの予測結果を「正解/不正解」x「Positive/Negative」で整理した2x2の表だよ。覚え方は、True/Falseが予測の当たり/外れ、Positive/Negativeがモデルの予測結果だね。

予測:Positive予測:Negative
実際:PositiveTP(True Positive) 正しく陽性と判定FN(False Negative) 見逃し
実際:NegativeFP(False Positive) 誤検出TN(True Negative) 正しく陰性と判定
覚え方

True/False → 予測が当たった/外れた
Positive/Negative → モデルが陽性/陰性と予測した

📊 評価指標
指標計算式意味
正解率(Accuracy)(TP+TN) / 全体全体のうち正しく判定した割合
適合率(Precision)TP / (TP+FP)「陽性」と予測したうち本当に陽性の割合
再現率(Recall)TP / (TP+FN)実際の陽性のうち正しく見つけた割合
F値(F1 Score)2x適合率x再現率 / (適合率+再現率)適合率と再現率の調和平均
混同行列から評価指標へのマッピング 予測: Positive 予測: Negative 実際: Positive 実際: Negative TP 正解をPositiveと予測 FN 正解をNegativeと予測 FP 不正解をPositiveと予測 TN 不正解をNegativeと予測 適合率(Precision) TP / (TP + FP) Positiveと予測した中で正解の割合 再現率(Recall) TP / (TP + FN) 実際のPositiveから正解を見つけた割合 正解率(Accuracy) (TP + TN) / 全体 全予測のうち正解の割合 F1値 = 2 x 適合率 x 再現率 / (適合率 + 再現率) 適合率と再現率の調和平均 → バランスの良い指標 ← Positive予測の列 ← 実際Positiveの行 正しい予測(TP/TN) 誤った予測(FP/FN) 評価指標
図2: 混同行列の各セルから評価指標がどう計算されるか
🔀 適合率と再現率のトレードオフ
🔰 初心者

適合率と再現率はどう使い分けるんですか?

🎓 上級者

片方を上げると片方が下がるトレードオフの関係にあるんだ。誤検出を減らしたいなら適合率を重視、見逃しを減らしたいなら再現率を重視するよ。

適合率を重視

誤検出(FP)を減らしたい場面
例:スパム判定(正常メールをスパムにしたくない)

再現率を重視

見逃し(FN)を減らしたい場面
例:がん検診(がんを見逃したくない)

正解率の落とし穴

データの偏りが大きいと正解率だけでは不十分。例:1000件中がん患者が10人 → 全員「がんでない」と予測するだけで正解率99%になるが、がんの検出には全く役に立たない。こういう不均衡データでは適合率・再現率・F値を見る必要がある。

📈 ROC曲線(ROC Curve)とAUC(Area Under the Curve)
🔰 初心者

ROC曲線って何ですか?適合率や再現率とは違うんですか?

🎓 上級者

ROC曲線は、分類モデルの閾値(しきい値)を変化させたときの性能を可視化するグラフだよ。横軸に偽陽性率(FPR: False Positive Rate)、縦軸に真陽性率(TPR: True Positive Rate = 再現率)をとってプロットするんだ。

🔰 初心者

偽陽性率って何ですか?

🎓 上級者

実際にはNegativeなのに、間違ってPositiveと予測してしまった割合だよ。混同行列で言うと FPR = FP / (FP + TN) で計算する。「本当は健康なのに病気と誤判定された人の割合」というイメージだね。

指標計算式意味
真陽性率(TPR)TP / (TP + FN)実際のPositiveのうち正しく検出した割合(= 再現率)
偽陽性率(FPR)FP / (FP + TN)実際のNegativeのうち誤ってPositiveと判定した割合
🔰 初心者

AUCって何ですか?

🎓 上級者

AUC(Area Under the Curve)は、ROC曲線の下側の面積のこと。0から1の値をとり、1に近いほど良いモデルだよ。AUC = 0.5 は「当てずっぽう(ランダム予測)」と同じ性能で、ROC曲線が左上に近いほど(=AUCが大きいほど)優れた分類器ということだね。

AUCの目安

AUC = 1.0 : 完璧な分類器(理想)
AUC = 0.9〜1.0 : 非常に良い
AUC = 0.7〜0.9 : まあまあ良い
AUC = 0.5 : ランダム予測と同じ(当てずっぽう)
AUC < 0.5 : ランダムより悪い(予測が逆になっている可能性)

ROC曲線・AUCのポイント

ROC曲線が左上に近いほど良い分類器(TPRが高く、FPRが低い)。
AUCは閾値に依存しない総合的な評価指標なので、異なるモデル同士の比較に便利。
不均衡データでは、ROC曲線よりもPR曲線(Precision-Recall曲線)の方が適している場合もある。

🎛️ ハイパーパラメータ
🔰 初心者

ハイパーパラメータって普通のパラメータと何が違うんですか?

🎓 上級者

人間が学習の前に設定するパラメータだよ。モデルが学習中に自動で決める「パラメータ(重みなど)」とは別物なんだ。

パラメータ

誰が決める:モデルが学習で自動的に決める
例:重み(w)、バイアス(b)
いつ決まる:学習の最中

ハイパーパラメータ

誰が決める:人間が事前に設定する
例:学習率、層の数、kの値
いつ決まる:学習の

手法ハイパーパラメータの例
ニューラルネットワーク学習率、中間層の数、ノード数、エポック数、バッチサイズ
SVMC(正則化パラメータ)、カーネルの種類
決定木木の深さ、最小サンプル数
k-NNkの値
K-Meansクラスタ数K
正則化λ(ペナルティの強さ)
🔧 ハイパーパラメータチューニング
手法説明
グリッドサーチ候補を格子状に全組み合わせ試す。確実だが遅い
ランダムサーチランダムに組み合わせを試す。グリッドより効率的なことが多い
ベイズ最適化過去の結果から次に試す値を賢く選ぶ。効率が高い
ハイパーパラメータ探索の比較 グリッドサーチ 学習率 バッチサイズ 各軸 5つの値しか試せない 網羅的だが非効率(25回試行) ランダムサーチ 学習率 バッチサイズ 各軸で多くの値を探索できる 効率的に広く探索(15回試行) = 最良のパラメータ組み合わせ
図3: グリッドサーチ vs ランダムサーチのパラメータ空間探索パターン
交差検証との組み合わせ

通常、交差検証法と組み合わせて最適なハイパーパラメータを探す。

📋 バリデーションデータ(検証データ)
🔰 初心者

データは学習用とテスト用の2つに分ければ良いんですよね?

🎓 上級者

実は2分割だけでは問題があるんだ。ハイパーパラメータを「テストデータの結果を見ながら調整」することになり、テストデータへの情報漏れが起きてしまう。テストデータに合わせたチューニング=カンニングと同じだよ。だから3分割が必要なんだ。

データ役割いつ使う
学習データ(Training)モデルのパラメータ(重みなど)を学習する学習中に何度も使う
検証データ(Validation)ハイパーパラメータの調整・モデル選択に使う学習の途中で何度も使う
テストデータ(Test)最終的な汎化性能を評価する最後に1回だけ
試験勉強でたとえると

学習データ = 教科書・問題集(何度も繰り返し勉強する)
検証データ = 模擬試験(実力チェック→勉強法を調整)
テストデータ = 本番試験(最後に1回だけ受ける)

模試の結果が悪ければ勉強法(=ハイパーパラメータ)を変える。でも本番の問題を事前に見て対策するのはカンニング(=テストデータの情報漏れ)。

交差検証との関係

交差検証法を使う場合、学習データの中をさらにK分割して検証データの役割を果たす。テストデータは別に確保しておく。つまり「検証データ」は交差検証で自動的に作られるケースも多い。

🎯 G検定ポイント