Kaggle Tutorial

疑似ラベル(pseudo-labeling)・半教師あり

テスト予測を仮の正解として学習に加える疑似ラベルの手順と、リークを避ける注意点を学びます。

疑似ラベルとは#

疑似ラベリングは、学習済みモデルがテストデータに付けた予測を「仮の正解」として 訓練データに加え、再学習する半教師あり的なテクニックです。ラベルなしデータを活用できます。

基本の手順#

1. 訓練データでモデルを学習し、テストを予測
2. 自信の高い予測(確率が極端に高い/低い)だけを疑似ラベルとして採用
3. 訓練データ + 疑似ラベルで再学習
4. 必要なら 1〜3 を数回繰り返す
proba = model.predict_proba(X_test)[:, 1]
confident = (proba > 0.95) | (proba < 0.05)        # 自信の高いものだけ
pseudo_X = X_test[confident]
pseudo_y = (proba[confident] > 0.5).astype(int)

X_aug = np.vstack([X_train, pseudo_X])
y_aug = np.concatenate([y_train, pseudo_y])
model.fit(X_aug, y_aug)

リークと過学習に注意#

注意

疑似ラベルは諸刃の剣です。誤った予測を正解として学習すると誤りが増幅し、 過学習シェイクアップを招きます。検証は本物のラベルだけで行い、 疑似ラベルを検証側に混ぜない(データリークを作らない)ことが鉄則です。

  • 自信の高い予測だけを使う(閾値を厳しめに)
  • 交差検証で「疑似ラベルあり/なし」を比較し、効いたときだけ採用
  • fold ごとに疑似ラベルを作り直す実装にすると、よりリークを避けられる

ヒント

疑似ラベルは、ラベルが少ない/テストが大きいコンペで効きやすい一方、効かないことも多い手法です。 「まず試す」より「ベースラインが固まってから慎重に試す」のが安全です。

理解度チェック#

Quiz疑似ラベルを使うときの安全な進め方は?

次のステップ#

次は、評価指標に合わせた後処理(閾値・順位最適化)を学びます。