
Comment sélectionner des variables de manière robuste dans un modèle de notation
échouer pour une raison : une mauvaise sélection de variable. Vous choisissez des variables qui fonctionnent sur vos données d’entraînement. Ils s’effondrent sur de nouvelles données. Le modèle a fière allure en développement et en pause de production.
Il existe une meilleure façon. Cet article vous montre comment sélectionner des variables stables, interprétables et robustes, quelle que soit la manière dont vous divisez les données.
L’idée de base : la stabilité plutôt que la performance
Une variable est robuste si elle est importante pour chaque sous-ensemble de vos données, et pas seulement pour l’ensemble de données complet.
Pour vérifier cela, nous divisons les données d’entraînement en 4 fois à l’aide d’une validation croisée stratifiée. Nous stratifions selon la variable par défaut et l’année pour garantir que chaque pli est représentatif de l’ensemble de la population.
from sklearn.model_selection import StratifiedKFold.
skf = StratifiedKFold(n_splits=4, shuffle=True, random_state=42)
train_imputed["fold"] = -1
for fold, (_, test_idx) in enumerate(skf.split(train_imputed, train_imputed["def_year"])):
train_imputed.loc[test_idx, "fold"] = fold

On construit ensuite quatre paires (entraîner, tester). Chaque paire utilise trois plis pour l’entraînement et un pli pour les tests. Nous appliquons chaque règle de sélection uniquement sur l’ensemble d’entraînement, jamais sur l’ensemble de test. Cela évite les fuites de données.
folds = build_and_save_folds(train_imputed, fold_col="fold", save_dir="folds/")
Une variable ne survit à la sélection que si elle répond aux critères sur les quatre critères. Un seul pli faible suffit à l’éliminer.
L’ensemble de données
Nous utilisons le Ensemble de données de notation de crédit de Kaggle. Il contient 32 581 prêts accordés à des emprunteurs particuliers.
Les prêts couvrent les besoins médicaux, personnels, éducatifs et professionnels, ainsi que la consolidation de dettes. Les montants des prêts varient de 500 $ à 35 000 $.
L’ensemble de données comporte deux types de variables :
- Caractéristiques du contrat : montant du prêt, taux d’intérêt, objet du prêt, qualité de crédit, délai écoulé depuis l’octroi
- Caractéristiques de l’emprunteur : âge, revenus, années d’expérience, statut de logement
Nous avons identifié 7 variables continues :
- personne_revenu
- personnage
- personne_emp_length
- montant_prêt
- prêt_int_rate
- prêt_pourcent_revenu
- cb_person_cred_hist_length
Nous avons identifié 4 variables catégorielles :
- personne_home_ownership
- cb_person_default_on_file
- prêt_intention
- prêt_grade
La cible est default: 1 si l’emprunteur fait défaut, 0 sinon.
Nous avons traité les valeurs manquantes et les valeurs aberrantes dans un article précédent. Ici, nous nous concentrons sur la sélection de variables.
La méthode de filtrage : quatre règles
La méthode de filtrage utilise des mesures statistiques d’association. Il n’a pas besoin d’un modèle prédictif. Il est rapide, vérifiable et facile à expliquer aux parties prenantes non techniques.
Nous appliquons quatre règles en séquence. Chaque règle alimente sa sortie dans la suivante.
Règle 1 : Supprimer les variables continues non liées à la valeur par défaut
Nous effectuons un test de Kruskal-Wallis entre chaque variable continue et la cible par défaut. Si la valeur p dépasse 5 % sur au moins un pli, nous supprimons la variable. Il n’est pas lié de manière fiable au défaut.
rule1_vars = filter_uncorrelated_with_target(
folds=folds,
variables=continuous_vars,
target="def_year",
pvalue_threshold=0.05,
)
Résultat: Toutes les variables continues satisfont à la règle 1. Chaque variable continue présente une association significative avec le défaut dans les quatre volets.
Règle 2 : supprimer les variables catégorielles faiblement liées à la valeur par défaut
Nous calculons le V de Cramér entre chaque variable catégorielle et la cible par défaut. Le V de Cramér mesure l’association entre deux variables catégorielles. Il va de 0 (pas de lien) à 1 (lien parfait).
On abandonne une variable si son V de Cramér tombe en dessous de 10% sur au moins un pli. Une association forte nécessite un V supérieur à 50 %.
rule2_vars = filter_categorical_variables(
folds=folds,
cat_variables=categorical_vars,
target="def_year",
low_threshold=0.10,
high_threshold=0.50,
)
Résultat: Nous conservons 3 variables catégorielles sur 4. La variable loan_int est abandonné ; son lien par défaut est trop faible dans au moins un pli.
Règle 3 : supprimer les variables continues redondantes
Deux variables continues portant la même information nuisent au modèle. Ils créent une multicolinéarité.
Nous calculons la corrélation de Spearman entre chaque paire de variables continues. Si la corrélation atteint 60 % ou plus sur au moins un pli, nous supprimons une variable de la paire. Nous conservons celui avec le lien le plus fort avec le défaut, mesuré par la valeur p de Kruskal-Wallis la plus basse.
selected_continuous = filter_correlated_variables_kfold(
folds=folds,
variables=rule1_vars,
target="def_year",
threshold=0.60,
)
Résultat: On garde 5 variables continues. Nous laissons tomber loan_amnt etcb_person_cred_hist_length— les deux étaient fortement corrélés avec d’autres variables retenues. Cela correspond à nos conclusions dans cet article.
Règle 4 : Supprimez les variables catégorielles redondantes
Nous appliquons la même logique aux variables catégorielles. Nous calculons le V de Cramér entre chaque paire de variables catégorielles retenues après la règle 2. Si le V atteint 50 % ou plus sur au moins un pli, nous supprimons la variable la moins liée au défaut.
selected_categorical = filter_correlated_categorical_variables(
folds=folds,
cat_variables=rule2_vars,
target="def_year",
high_threshold=0.50,
)
Résultat: Nous gardons 2 variables catégorielles. Nous laissons tomber loan_gradequi est fortement corrélée à une autre variable retenue, et son lien avec la valeur par défaut est plus faible.
Sélection finale : 7 variables
La méthode de filtrage sélectionne 7 variables au total, 5 continues et 2 catégorielles. Chacun est significativement lié au défaut. Aucun d’entre eux n’est redondant. Et ils résistent tous à chaque pli.
Cette sélection est vérifiable. Vous pouvez montrer chaque décision à un régulateur ou à une partie prenante de l’entreprise. Vous pouvez expliquer pourquoi chaque variable a été conservée ou supprimée. Cela compte dans la notation de crédit.
Chaque règle s’exécute sur l’ensemble d’entraînement de chaque pli. Une variable est supprimée si elle échoue sur un seul pli. C’est ce qui rend la sélection robuste.
Dans le prochain article, nous étudierons la monotonie et la stabilité temporelle de ces 7 variables. Une variable peut être significative aujourd’hui et instable dans le temps. Les deux propriétés sont importantes dans les modèles de notation de production.
Principaux points clés de l’article :
- La plupart des data scientists sélectionnent des variables en fonction des données d’entraînement. Ils s’appuient sur de nouvelles données. La règle 1 corrige ce problème : nous effectuons un test de Kruskal-Wallis sur chaque pli séparément. La corrélation entre la variable continue et le défaut doit être significative dans les quatre plis.
- Les variables catégorielles sont les tueuses silencieuses des modèles de notation. Ils semblent corrélés aux valeurs par défaut sur l’ensemble de données complet. Ils s’effondrent sur un sous-ensemble. La règle 2 les détecte : nous calculons le V de Cramér sur chaque pli indépendamment. En dessous de 10 % sur un seul pli, c’est parti.
- Deux variables continues qui disent la même chose ne doublent pas votre signal. Ils détruisent votre modèle. La règle 3 détecte chaque paire corrélée (Spearman ≥ 60 %) dans tous les plis. Lorsque deux variables s’affrontent, celle dont le lien avec le défaut est le plus faible perd.
- La redondance catégorielle est invisible jusqu’à ce que votre modèle échoue à un audit. La règle 4 le fait apparaître : nous calculons le V de Cramér entre chaque paire de variables catégorielles. Au-dessus de 50 % sur n’importe quel pli, on y va. Nous gardons celle la plus corrélée à la variable par défaut.
Vous avez trouvé cela utile ? Star le dépôt sur GitHub et restez à l’écoute pour le prochain article sur la monotonie et la stabilité temporelle.
Comment sélectionnez-vous les variables de manière robuste dans vos propres modèles ?
Crédits images
Toutes les images et visualisations de cet article ont été créées par l’auteur en utilisant Python (pandas, matplotlib, seaborn et plotly) et Excel, sauf indication contraire.
Références
[1] Lorenzo Beretta et Alessandro Santaniello.
Algorithmes d’imputation du voisin le plus proche : une évaluation critique.
Bibliothèque nationale de médecine, 2016.
[2] Nexialog Conseil.
Traitement des données manquantes dans le milieu bancaire.
Document de travail, 2022.
[3] John T. Hancock et Taghi M. Khoshgoftaar.
Enquête sur les données catégorielles pour les réseaux de neurones.
Journal du Big Data, 7(28), 2020.
[4] Melissa J. Azur, Elizabeth A. Stuart, Constantine Frangakis et Philip J. Leaf.
Imputation multiple par équations chaînées : qu’est-ce que c’est et comment ça marche ?
Revue internationale des méthodes de recherche psychiatrique, 2011.
[5] Majid Sarmad.
Analyse de données robuste pour les plans expérimentaux factoriels : méthodes et logiciels améliorés.
Département des sciences mathématiques, Université de Durham, Angleterre, 2006.
[6] Daniel J. Stekhoven et Peter Bühlmann.
MissForest : Imputation de valeur manquante non paramétrique pour les données de type mixte.Bioinformatique, 2011.
[7] Supriyanto Wibisono, Anwar et Amin.
Détection d’anomalies météorologiques multivariées à l’aide de l’algorithme de clustering DBSCAN.
Journal of Physics : série de conférences, 2021.
[8] Laborda, J. et Ryoo, S. (2021). Sélection de fonctionnalités dans un modèle de notation de crédit. Mathématiques, 9(7), 746.
Données et licences
L’ensemble de données utilisé dans cet article est sous licence Creative Commons Attribution 4.0 International (CC BY 4.0) licence.
Cette licence permet à quiconque de partager et d’adapter l’ensemble de données à n’importe quelle fin, y compris un usage commercial, à condition qu’une attribution appropriée soit attribuée à la source.
Pour plus de détails, consultez le texte officiel de la licence : CC0 : domaine public.
Clause de non-responsabilité
Toutes les erreurs ou inexactitudes restantes relèvent de la responsabilité de l’auteur. Les commentaires et corrections sont les bienvenus.



