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()関数の不足しているパラメータをすべて指定することです。 trainとtestパラメータには、それぞれ学習用と検証用の DataFrame を指定することを思い出してください。- 一方、
targetとcategoricalパラメータには、ターゲット変数名とエンコード対象のカテゴリ特徴量名を指定します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# 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))