Publié le :
Statistiques CREATION_INTERNE

Binning par Quantiles (Procédure BINNING)

Ce code est également disponible en : Deutsch English Español
En attente de validation
La procédure BINNING est un outil puissant pour la discrétisation des variables continues. Lorsque la méthode 'QUANTILE' est spécifiée, la procédure analyse la distribution de la variable et crée un nombre défini de bins, de sorte que chaque bin contienne une proportion approximativement égale d'observations. Cela est particulièrement utile pour gérer des distributions asymétriques, réduire le bruit dans les données, ou préparer des variables pour des modèles qui nécessitent des entrées catégorielles. Les options clés incluent 'DATA' pour la table d'entrée CAS, 'NUMBIN' pour spécifier le nombre désiré de bins, 'METHOD=QUANTILE' pour activer la méthode de binning par quantiles, 'INPUT' pour sélectionner les variables à discrétiser, et 'OUTPUT' ou 'OUTBIN' pour générer des tables de sortie contenant les données binnées ou les détails des bins.
Analyse des données

Type : CREATION_INTERNE


Tous les exemples fournissent le code complet pour la génération autonome des données de démonstration directement dans la session CAS, garantissant ainsi leur exécutabilité sans dépendances externes. Les données sont générées à l'aide de DATA steps et de la fonction RAND().

1 Bloc de code
PROC BINNING Data
Explication :
Cet exemple démontre l'utilisation la plus simple de la procédure BINNING pour le binning par quantiles. Il crée une table de données 'data_basic' dans la session CAS avec deux variables continues. Ensuite, PROC BINNING est appelée avec l'option 'NUMBIN=10' pour diviser 'x1' et 'x2' en 10 bins de quantiles. La table résultante 'binned_basic' contient les nouvelles variables binnées.
Copié !
1/* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */
2caslib _all_ assign;
3 
4/* 1. Création des données en mémoire CAS */
5DATA mylib.data_basic;
6 call streaminit(123); /* Pour la reproductibilité */
7 DO id=1 to 10000;
8 x1 = rand("Uniform");
9 x2 = rand("Uniform") * 10;
10 OUTPUT;
11 END;
12RUN;
13 
14/* 2. Binning par quantiles */
15PROC BINNING DATA=mylib.data_basic numbin=10 method=quantile;
16 INPUT x1 x2;
17 OUTPUT out=mylib.binned_basic;
18RUN;
19 
20/* 3. Affichage des détails des bins pour vérification (échantillon) */
21PROC PRINT DATA=mylib.binned_basic (obs=20);
22RUN;
23 
2 Bloc de code
PROC BINNING Data
Explication :
Cet exemple illustre comment personnaliser le binning en spécifiant un nombre différent de bins (NUMBIN=5) et en utilisant l'option 'OUTBIN'. L'option 'OUTBIN' crée une table de sortie séparée ('bin_details_inter') qui contient des informations détaillées sur chaque bin créé, telles que les limites, le nombre d'observations et les identifiants de bin. Ceci est utile pour inspecter la structure de la discrétisation.
Copié !
1/* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */
2caslib _all_ assign;
3 
4/* 1. Création des données en mémoire CAS */
5DATA mylib.data_inter;
6 call streaminit(456); /* Pour la reproductibilité */
7 DO id=1 to 15000;
8 x1 = rand("Uniform");
9 x2 = rand("Normal"); /* Une autre distribution */
10 x3 = rand("Uniform") * 50;
11 OUTPUT;
12 END;
13RUN;
14 
15/* 2. Binning par quantiles avec options courantes */
16PROC BINNING DATA=mylib.data_inter numbin=5 method=quantile;
17 INPUT x1 x2 x3; /* Binning sur plusieurs variables */
18 OUTPUT out=mylib.binned_inter;
19 outbin out=mylib.bin_details_inter; /* Sauvegarde les détails des bins */
20RUN;
21 
22/* 3. Affichage des détails des bins */
23PROC PRINT DATA=mylib.bin_details_inter;
24 var _VARNAME_ _BINID_ _LOWER_ _UPPER_ _COUNT_;
25RUN;
26 
3 Bloc de code
PROC BINNING Data
Explication :
Cet exemple avancé montre comment appliquer le binning par quantiles indépendamment pour des sous-groupes de données en utilisant l'instruction 'BY'. Une variable 'group' est créée dans les données d'entrée, et la procédure BINNING est exécutée séparément pour chaque valeur de 'group'. La table 'bin_stats_adv' est générée pour inclure des statistiques descriptives complètes pour chaque bin et chaque groupe, telles que la moyenne, l'écart-type, le minimum et le maximum.
Copié !
1/* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */
2caslib _all_ assign;
3 
4/* 1. Création des données en mémoire CAS avec un groupe */
5DATA mylib.data_adv;
6 call streaminit(789); /* Pour la reproductibilité */
7 DO id=1 to 20000;
8 IF mod(id, 2)=0 THEN group = "A";
9 ELSE group = "B";
10 x1 = rand("Uniform") + (group="A") * 0.5; /* x1 dépend du groupe */
11 x2 = rand("Normal") + (group="B") * 2; /* x2 dépend du groupe */
12 OUTPUT;
13 END;
14RUN;
15 
16/* 2. Binning par quantiles avec BY group et statistiques de sortie */
17PROC BINNING DATA=mylib.data_adv numbin=4 method=quantile;
18 BY group; /* Binning effectué séparément pour chaque groupe */
19 INPUT x1 x2;
20 OUTPUT out=mylib.binned_adv;
21 outbin out=mylib.bin_stats_adv;
22RUN;
23 
24/* 3. Affichage des détails des bins par groupe */
25PROC PRINT DATA=mylib.bin_stats_adv;
26 BY group;
27 var group _VARNAME_ _BINID_ _LOWER_ _UPPER_ _COUNT_ MEAN STD MIN MAX;
28RUN;
29 
4 Bloc de code
PROC BINNING Data
Explication :
Cet exemple met l'accent sur les capacités de SAS Viya et du moteur CAS pour gérer de très grands ensembles de données. Il génère 5 millions d'observations directement en mémoire CAS, puis applique la procédure BINNING. Ensuite, il utilise 'PROC CASUTIL' pour interagir directement avec la session CAS : lister les tables, décrire la structure de la table binnée et récupérer un échantillon des données pour vérifier l'application du binning. Ceci démontre une approche complète pour les flux de travail basés sur CAS.
Copié !
1/* Création d'une bibliothèque CAS pour les exemples si elle n'existe pas */
2caslib _all_ assign;
3 
4/* 1. Création d'une table CAS très volumineuse */
5DATA mylib.data_cas_large;
6 call streaminit(101112); /* Pour la reproductibilité */
7 DO id=1 to 5000000; /* 5 millions d'observations */
8 x1 = rand("Uniform");
9 x2 = rand("Exponential");
10 OUTPUT;
11 END;
12RUN;
13 
14/* 2. Binning par quantiles sur la grande table CAS */
15PROC BINNING DATA=mylib.data_cas_large numbin=10 method=quantile;
16 INPUT x1 x2;
17 OUTPUT out=mylib.binned_cas_large;
18 outbin out=mylib.bin_stats_cas_large;
19RUN;
20 
21/* 3. Inspection des propriétés de la table CAS résultante */
22PROC CASUTIL incaslib="mylib";
23 list files; /* Lister les fichiers dans la caslib pour voir les tables créées */
24 describe TABLE="binned_cas_large"; /* Décrire la structure de la table binnée */
25 fetch casdata="binned_cas_large" to=out; /* Récupérer un échantillon pour vérification */
26RUN;
27QUIT;
28 
29/* 4. Affichage d'un échantillon de la table binnée */
30PROC PRINT DATA=out (obs=10);
31RUN;
32 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« La discrétisation, ou binning, est une étape stratégique du feature engineering, particulièrement cruciale lorsque l'on traite des variables continues présentant des distributions irrégulières. La procédure PROC BINNING, exploitant la puissance distribuée de SAS Viya, offre avec la méthode QUANTILE une solution robuste pour normaliser l'influence des données. Contrairement à un découpage à intervalles constants, le binning par quantiles garantit que chaque classe possède un effectif identique (isopopulation). Cette approche est indispensable pour neutraliser l'impact des valeurs extrêmes (outliers) et pour transformer des relations non linéaires complexes en formats catégoriels exploitables par des modèles de scoring ou de régression. »