Kaggle Tutorial

交差検証(K-Fold)の考え方

交差検証で性能を安定して評価する方法、層化・グループ・時系列分割の使い分けを学びます。

1 回の分割では不安定#

ホールドアウト(1 回だけの分割)は手軽ですが、たまたまの分け方でスコアが上下します。 交差検証は、分割を変えて複数回評価し、その平均を取ることで安定した見積もりを得ます。

K-Fold のしくみ#

K-Foldでは、データを K 個に分け、各回 1 つを検証・残り K−1 個を訓練として K 回学習します。

Fold1: [検証][訓練][訓練][訓練][訓練]
Fold2: [訓練][検証][訓練][訓練][訓練]
   …(K 回繰り返し、スコアを平均)

各 fold の検証側に対する予測をつなげたものが OOF(Out-of-Fold)で、 スコア評価やアンサンブルに使います。

from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(LogisticRegression(max_iter=1000), X, y, cv=skf)
print(scores.mean(), scores.std())

分割方法を「データの性質」に合わせる#

手法使うとき
K-Fold基本。各 fold をランダムに分ける
Stratified K-Fold分類でクラス比率を保ちたい(不均衡データで重要)
Group K-Fold同一ユーザー等が訓練と検証に跨らないようにする
時系列分割過去で学習し未来で検証する(時系列のリーク防止)

注意

データの性質に合わない分割は、検証スコアを当てにならなくします。 グループ構造や時間順を無視するとデータリークが起き、シェイクアップの原因になります。

理解度チェック#

Quizクラスが不均衡な二値分類で、各 fold のクラス比率を全体とそろえたい。適切な分割は?

次のステップ#

次は、回帰タスクの代表的な**評価指標(RMSE / MAE / RMSLE / R²)**を学びます。