始める無料で始める

K-fold 交差検証

Kaggle の playground コンペティションから抽出したサンプルで、二値分類問題に取り組みます。このコンペの目的は、有名なバスケットボール選手 Kobe Bryant が特定のシュートを成功させたか(スコア)失敗したかを予測することです。

学習データは bryant_shots DataFrame としてワークスペースに用意されています。10,000 本のシュートの特徴量と、target 変数 "shot\_made\_flag"(シュートが入ったかどうか)が含まれています。

特徴量のひとつに "game_id"(そのシュートが行われた試合)があり、異なる試合は 541 通りあります。これは高カーディナリティのカテゴリ特徴量です。ここでは target mean エンコーディングを使ってエンコードしてみましょう!

5-fold 交差検証を使い、ローカル検証で mean target エンコードした特徴量を評価したいとします。

この演習はコースの一部です

Pythonで挑むKaggleコンペティション

コースを見る

演習の手順

  • これを行うには、各フォールド分割ごとに、カテゴリ特徴量 "game_id" に対するエンコード手順を個別に繰り返す必要があります。目的は、各フォールド分割内で呼び出す mean_target_encoding() 関数の不足しているパラメータをすべて指定することです。
  • traintest パラメータには、それぞれ学習用と検証用の DataFrame を指定することを思い出してください。
  • 一方、targetcategorical パラメータには、ターゲット変数名とエンコード対象のカテゴリ特徴量名を指定します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# Create 5-fold cross-validation
kf = KFold(n_splits=5, random_state=123, shuffle=True)

# For each folds split
for train_index, test_index in kf.split(bryant_shots):
    cv_train, cv_test = bryant_shots.iloc[train_index], bryant_shots.iloc[test_index]

    # Create mean target encoded feature
    cv_train['game_id_enc'], cv_test['game_id_enc'] = mean_target_encoding(train=cv_train,
                                                                           test=____,
                                                                           target='shot_made_flag',
                                                                           categorical='____',
                                                                           alpha=5)
    # Look at the encoding
    print(cv_train[['game_id', 'shot_made_flag', 'game_id_enc']].sample(n=1))
コードを編集して実行