CommencerCommencer 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

Gagner une compétition Kaggle en Python

Afficher le cours

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