Preprocessing et Feature Engineering: booster les performances d'un modèle IA

Auteur: Mohamed CHINY Durée necessaire pour le cours de Preprocessing et Feature Engineering: booster les performances d'un modèle IA Niveau recommandé pour le cours de Preprocessing et Feature Engineering: booster les performances d'un modèle IA Supports vidéo non disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz non disponibles pour ce cours

Page 15: Le binning: discrétisation des features numériques continues

Toutes les pages

Le binning: discrétisation des variables continues

Réduire la granularité des données par intervalles

Après avoir vu comment réduire les features pour alléger le modèle via la feature selection, cette fois nous allons explorer une autre approche: réduire le nombre de valeurs possibles d’un même feature grâce au binning.

Le principe du binning (dit aussi discrétisation) consiste à transformer une variable continue en catégories en regroupant ses valeurs dans des intervalles prédéfinis. Par exemple, au lieu de travailler avec l’âge exact des passagers du Titanic, on peut créer des classes comme enfant, adolescent, adulte et senior. Cette technique simplifie l’information, rend les relations non linéaires plus visibles et peut améliorer la robustesse face aux valeurs extrêmes.

Le binning est particulièrement utile pour les modèles linéaires ou les analyses exploratoires, car il permet de mettre en évidence des tendances cachées et de faciliter l’interprétation des résultats même si cela implique une perte de précision.

Le binning appliqué au dataset Titanic: transformer l'âge en catégories

Nous allons appliquer le binning sur la variable Age du célèbre dataset Titanic. Nous allons procéder à un découpage en intervalles fixes (equal-width) qui transforme l’âge en catégories interprétables comme Enfant, Adolescent, Jeune adulte, Adulte et Senior. Nous allons ensuite appliquer un découpage par quantiles (equal-frequency) qui répartit les passagers en quatre groupes contenant chacun un nombre similaire d’individus.

L’objectif est de montrer comment une variable continue peut être simplifiée en classes, ce qui facilite l’analyse exploratoire, la mise en évidence de tendances (par exemple, le taux de survie selon les tranches d’âge) et l’amélioration de l’interprétabilité des modèles.

Je propose le code suivant:
import pandas as pd

titanic = pd.read_csv('titanic.csv')
titanic=titanic[['Age','Sex', 'Embarked', 'Pclass', 'Survived']].dropna()

# Binning en intervalles égaux (equal-width)
titanic['Age_bin_width'] = pd.cut(titanic['Age'],
   bins=[0, 12, 18, 35, 60, 80],
   labels=['Enfant', 'Adolescent', 'Jeune adulte',
   'Adulte', 'Senior'])

# Binning par quantiles (equal-frequency)
titanic['Age_bin_quantile'] = pd.qcut(titanic['Age'], q=4,
   labels=['Q1', 'Q2', 'Q3', 'Q4'])

print(titanic[['Age','Age_bin_width','Age_bin_quantile']].head(10))
Expliquons rapidement ce que nous avons fait, et commençons par cette instruciton:
titanic['Age_bin_width'] = pd.cut(titanic['Age'],
   bins=[0, 12, 18, 35, 60, 80],
   labels=['Enfant', 'Adolescent', 'Jeune adulte',
   'Adulte', 'Senior'])
La fonction pd.cut() de Pandas permet de transformer une variable continue en une variable catégorielle en la découpant en intervalles prédéfinis appelés bins. Par conséquent, nous avons crée une nouvelle colonne appelée Age_bin_width dans le DataFrame titanic, où chaque passager se voit attribuer une catégorie en fonction de son âge. Les intervalles définis par les bornes [0, 12, 18, 35, 60, 80] permettent de regrouper les âges en classes significatives et les étiquettes associées (Enfant, Adolescent, Jeune adulte, Adulte, Senior) rendent ces catégories plus lisibles et interprétables.

Ainsi, au lieu de manipuler une valeur numérique brute, l’âge est transformé en une variable qualitative: un passager de 10 ans sera classé comme Enfant, tandis qu’un passager de 25 ans sera classé comme Jeune adulte, ce qui facilite l’analyse et la comparaison entre groupes.
titanic['Age_bin_quantile'] = pd.qcut(titanic['Age'], q=4,
   labels=['Q1', 'Q2', 'Q3', 'Q4'])
Cette instruction crée une nouvelle colonne appelée Age_bin_quantile dans le DataFrame titanic où chaque passager est classé dans l’un des quatre groupes d’âge définis par les quartiles de la distribution.

Concrètement, la fonction pd.qcut() découpe une variable continue en intervalles contenant chacun un nombre similaire d’observations (equal-frequency binning). Les labels Q1, Q2, Q3, Q4 permettent d’identifier ces catégories de manière lisible. Ainsi, au lieu de manipuler directement l’âge exact, on obtient une segmentation équilibrée de la population en quatre classes, ce qui facilite l’analyse comparative entre groupes et met en évidence des tendances ou différences de comportement.

Après exécution du code, on obtient ce résultat:
    Age       Age_bin_width     Age_bin_quantile
0   22.0      Jeune adulte      Q2
1   38.0      Adulte            Q3
2   26.0      Jeune adulte      Q2
3   35.0      Jeune adulte      Q3
4   35.0      Jeune adulte      Q3
6   54.0      Adulte            Q4
7    2.0      Enfant            Q1
8   27.0      Jeune adulte      Q2
9   14.0      Adolescent        Q1
10   4.0      Enfant            Q1
         
La nouvelle variable Age_bin_width qui regroupe les passagers du Titanic en catégories d’âge telles que Enfant, Adolescent, Jeune adulte, Adulte et Senior, peut désormais être utilisée directement comme feature dans un modèle de classification.

Comme il s’agit d’une variable catégorielle, il est nécessaire de la transformer en valeurs numériques pour l’entraînement du modèle. Cela peut se faire par label encoding, qui attribue un entier à chaque catégorie, ou par One hot encoding qui crée une colonne binaire pour chaque classe. Ainsi, l’information qualitative issue du binning devient exploitable par les algorithmes de machine learning tout en conservant la lisibilité et l’interprétation des groupes d’âge.
Comme la variable Age_bin_width comporte 5 catégories (Enfant, Adolescent, Jeune adulte, Adulte, Senior), l’application d’un One Hot Encoding produirait 5 colonnes binaires distinctes. Pour réduire la dimensionnalité et limiter la complexité du modèle, on peut envisager l’utilisation du Binary Encoding qui permet de représenter ces 5 catégories avec seulement 3 colonnes.