CommencerCommencez gratuitement

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

<cours>Gagner une compétition Kaggle en Python</cours>
Voir le cours

Instructions de l’exercice

  • 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 fonction mean_target_encoding() dans chaque division en folds.
  • Rappelez-vous que les paramètres train et test attendent les DataFrames d’entraînement et de test.
  • Tandis que les paramètres target et categorical attendent les noms de la variable cible et de la variable 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