CommencezCommencez gratuitement

Validation croisée 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 est de prédire si le célèbre basketteur Kobe Bryant a réussi ou raté un tir donné.

Les données d'entraînement sont disponibles dans votre espace de travail sous forme de DataFrame bryant_shots. Elles contiennent des informations sur 10 000 tirs, leurs propriétés et une variable target "shot\_made\_flag" — indiquant si le tir a été réussi ou non.

L'une des caractéristiques des données est "game_id" — la partie précise au cours de laquelle le tir a eu lieu. On compte 541 matchs distincts. Vous avez donc affaire à une caractéristique catégorielle à forte cardinalité. Encodons-la avec une moyenne par cible (target mean) !

Supposons que vous utilisiez une validation croisée en 5 plis et que vous vouliez évaluer une caractéristique encodée par moyenne cible sur la validation locale.

Cette activité fait partie du cours

Remporter une compétition Kaggle en Python

Voir le cours

Instructions de l’exercice

  • Pour y parvenir, vous devez répéter la procédure d'encodage pour la caractéristique catégorielle "game_id" séparément à l'intérieur de chaque division en plis. Votre objectif est de préciser tous les paramètres manquants pour l'appel à la fonction mean_target_encoding() dans chaque division en plis.
  • Rappelez-vous que les paramètres train et test attendent les DataFrames d'entraînement et de test.
  • Quant aux paramètres target et categorical, ils attendent les noms de la variable cible et de la caractéristique catégorielle à encoder.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

# 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))
Modifier et exécuter le code