Validation croisée en K-fold
Vous allez travailler sur un problème de classification binaire à partir d’un sous-échantillon d’une compétition Kaggle Playground. L’objectif de cette compétition est de prédire si le célèbre basketteur Kobe Bryant a marqué un panier ou manqué un tir donné.
Les données d’entraînement sont disponibles dans votre environnement sous forme de DataFrame bryant_shots. Elles contiennent des informations sur 10 000 tirs avec leurs caractéristiques et une variable target "shot\_made\_flag" — qui indique si le tir a été marqué ou non.
L’une des variables du jeu de données est "game_id" — l’identifiant du match dans lequel le tir a eu lieu. Il y a 541 matchs distincts. Vous avez donc affaire à une variable catégorielle à forte cardinalité. Encodons-la avec une moyenne cible !
Supposons que vous utilisiez une validation croisée en 5 folds et que vous souhaitiez évaluer une variable encodée par moyenne cible sur la validation locale.
Cet exercice fait partie du cours
Gagner une compétition Kaggle en Python
Instructions
- Pour y parvenir, vous devez répéter la procédure d’encodage pour la variable catégorielle
"game_id"séparément à l’intérieur de chaque division en folds. Votre objectif est de renseigner tous les paramètres manquants pour l’appel à la fonctionmean_target_encoding()dans chaque division en folds. - Rappelez-vous que les paramètres
trainettestattendent les DataFrames d’entraînement et de test. - Tandis que les paramètres
targetetcategoricalattendent les noms de la variable cible et de la variable catégorielle à encoder.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
# 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))