L'action `dataPreprocess.binning` est un outil fondamental en préparation de données (Data Preprocessing) pour le Machine Learning. Elle permet de réaliser une discrétisation non supervisée, c'est-à-dire de transformer des variables continues en variables catégorielles (ou 'bins'). Cette technique est essentielle pour simplifier les modèles, gérer les non-linéarités et améliorer la robustesse des algorithmes face aux valeurs aberrantes (outliers).
| Paramètre | Description |
|---|---|
| binEnds | Spécifie les valeurs de fin des classes. Si applicable, elles remplacent les valeurs maximales des données. |
| binMapping | Contrôle comment mapper les valeurs qui tombent à la frontière entre des classes consécutives. 'LEFT' utilise la notation [], (], ..., (] tandis que 'RIGHT' utilise [), [), ..., []. |
| binMissing | Lorsque défini sur True, regroupe les valeurs manquantes dans une classe distincte avec l'ID 0. |
| binStarts | Spécifie les valeurs de début des classes. Si applicable, elles remplacent les valeurs minimales des données. |
| binWidths | Spécifie la largeur des classes. |
| casOut | Applique le scoring à la table d'entrée et sauvegarde les résultats dans une table de sortie CAS. |
| casOutBinDetails | Spécifie les paramètres pour une table de sortie qui inclut des informations détaillées sur les résultats du binning. |
| code | Spécifie les paramètres pour générer le code de scoring SAS DATA step, permettant de répliquer le binning en dehors de CAS. |
| copyAllVars | Lorsque défini sur True, toutes les variables de la table d'entrée sont copiées dans la table de sortie scorée. |
| copyVars | Spécifie une liste de variables à copier de la table d'entrée vers la table de sortie pour aider à l'identification des observations. |
| cutPoints | Spécifie les points de coupe définis par l'utilisateur pour la méthode de binning 'CUTPTS'. |
| freq | Spécifie la variable de fréquence à utiliser dans les calculs. |
| fuzzyCompare | Spécifie le seuil de comparaison floue (epsilon) utilisé pour déterminer si des valeurs numériques sont distinctes. |
| includeInputVars | Lorsque défini sur True, les variables d'analyse spécifiées dans le paramètre `inputs` sont incluses dans la table de sortie. |
| includeMissingGroup | Lorsque défini sur True, les valeurs manquantes sont autorisées comme clés de regroupement (group-by). |
| inputs | Spécifie les variables à analyser et à discrétiser. |
| method | Spécifie la technique de binning à utiliser : 'BUCKET' (largeur égale), 'QUANTILE' (fréquence égale), ou 'CUTPTS' (points de coupe manuels). |
| nBinsArray | Spécifie le nombre de classes à créer pour chaque variable. Peut être un entier unique (appliqué à toutes les variables) ou une liste d'entiers. |
| noDataLowerUpperBound | Lorsque défini sur True, les bornes globales inférieure et supérieure du binset sont illimitées lors de la génération du code de scoring. |
| outputTableOptions | Spécifie des options pour les tables de résultats, comme les noms des tables à générer. |
| outVarsNamePrefix | Spécifie un préfixe à ajouter aux noms des nouvelles variables de binning créées. |
| outVarsNameSuffix | Spécifie un suffixe à ajouter aux noms des nouvelles variables de binning créées. |
| percentileDefinition | Spécifie la définition de percentile à utiliser (de 1 à 6) pour la méthode 'QUANTILE'. |
| percentileMaxIterations | Spécifie le nombre maximum d'itérations pour le calcul des percentiles. |
| percentileTolerance | Spécifie la tolérance pour le calcul des percentiles. |
| sasVarNameLength | Lorsque défini sur True, la longueur des noms des variables de sortie est contrainte à 32 caractères ou moins, conformément aux conventions SAS. |
| table | Spécifie la table d'entrée à traiter. |
| weight | Spécifie la variable de pondération à utiliser dans les calculs. |
Ce bloc DATA step crée une table simple nommée `sample_data` dans la caslib `mycas`. Cette table contient une variable `value` avec des nombres de 1 à 100, plus quelques valeurs manquantes, qui servira d'entrée pour les exemples de binning.
| 1 | DATA mycas.sample_data; |
| 2 | DO i = 1 to 100; |
| 3 | value = i; |
| 4 | OUTPUT; |
| 5 | END; |
| 6 | DO i = 1 to 5; |
| 7 | value = .; |
| 8 | OUTPUT; |
| 9 | END; |
| 10 | RUN; |
Ceci est l'utilisation la plus simple. L'action divise la variable `value` en 5 classes de largeur égale. Une nouvelle table `binned_data` est créée avec la variable `bin_value` contenant le numéro de la classe.
| 1 | PROC CAS; |
| 2 | dataPreprocess.binning |
| 3 | TABLE={name='sample_data', caslib='mycas'}, |
| 4 | inputs={{name='value'}}, |
| 5 | method='BUCKET', |
| 6 | nBinsArray=5, |
| 7 | casOut={name='binned_data', caslib='mycas', replace=true}; |
| 8 | RUN; |
Cette méthode crée des classes contenant approximativement le même nombre d'observations. Ici, nous créons 4 classes (quartiles) pour la variable `value`.
| 1 | PROC CAS; |
| 2 | dataPreprocess.binning |
| 3 | TABLE={name='sample_data', caslib='mycas'}, |
| 4 | inputs={{name='value'}}, |
| 5 | method='QUANTILE', |
| 6 | nBinsArray=4, |
| 7 | casOut={name='binned_quantile', caslib='mycas', replace=true}; |
| 8 | RUN; |
Cette méthode permet de définir manuellement les frontières des classes. Utile pour appliquer une logique métier spécifique. Ici, nous définissons les classes 0-25, 26-50, 51-75, 76-100.
| 1 | PROC CAS; |
| 2 | dataPreprocess.binning |
| 3 | TABLE={name='sample_data', caslib='mycas'}, |
| 4 | inputs={{name='value'}}, |
| 5 | method='CUTPTS', |
| 6 | cutPoints={25, 50, 75}, |
| 7 | casOut={name='binned_cutpoints', caslib='mycas', replace=true}; |
| 8 | RUN; |
Cet exemple montre comment isoler les valeurs manquantes dans leur propre classe (`binMissing=TRUE`) et comment personnaliser les noms des variables de sortie avec un préfixe et un suffixe.
| 1 | PROC CAS; |
| 2 | dataPreprocess.binning |
| 3 | TABLE={name='sample_data', caslib='mycas'}, |
| 4 | inputs={{name='value'}}, |
| 5 | method='BUCKET', |
| 6 | nBinsArray=10, |
| 7 | binMissing=TRUE, |
| 8 | outVarsNamePrefix='DISC', |
| 9 | outVarsNameSuffix='_V1', |
| 10 | casOut={name='binned_missing', caslib='mycas', replace=true}, |
| 11 | casOutBinDetails={name='bin_details', caslib='mycas', replace=true}; |
| 12 | RUN; |
Une équipe marketing souhaite transformer des variables démographiques continues (âge, revenu) en groupes catégoriels pour construire un modèle de ciblage. L'objectif est de cré...
Une institution financière doit analyser des millions de transactions pour identifier des anomalies. Le montant de chaque transaction doit être discrétisé en 1000 petits interva...
Un data scientist prépare des données pour une étude clinique. La variable 'TAUX_CHOLESTEROL' est incomplète et doit être catégorisée selon des seuils cliniques précis (Normal, ...