Publié le :
Statistique CREATION_INTERNE

Découpage par points de coupure (Cutpoint Binning)

Ce code est également disponible en : Deutsch English Español
En attente de validation
Cette fonctionnalité utilise la procédure BINNING, qui fait partie des procédures statistiques visuelles de SAS© Viya. La méthode CUTPTS permet de définir manuellement les seuils pour chaque catégorie. Chaque intervalle est défini par une borne inférieure et une borne supérieure. Le processus transforme les valeurs numériques originales en identifiants de bin. La procédure peut également calculer des statistiques descriptives pour chaque bin et générer des tables de sortie contenant les données binées. L'exécution se fait sur le moteur Cloud Analytic Services (CAS), ce qui permet de traiter de grands volumes de données de manière distribuée et performante.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou des tables SASHELP pour assurer l'autonomie de chaque bloc de code.

1 Bloc de code
PROC BINNING Data
Explication :
Cet exemple crée une table de données simple 'auto_data' dans la bibliothèque CASUSER. Ensuite, la procédure BINNING est utilisée avec la méthode CUTPTS pour la variable 'Horsepower'. Des points de coupure à 180 et 200 sont spécifiés, créant ainsi trois catégories : Horsepower <= 180, 180 < Horsepower <= 200, et Horsepower > 200. La table de sortie 'binned_data' contiendra la nouvelle variable binée ainsi que les variables originales copiées. Les résultats sont ensuite affichés pour les premières observations et une fréquence est réalisée sur la variable binée pour vérifier le découpage.
Copié !
1/* Création d'une table CAS temporaire */
2options casdatalimit=1000;
3caslib _all_ assign;
4 
5DATA casuser.auto_data;
6 INPUT MSRP Invoice EngineSize Horsepower Cylinders MPG_City MPG_Highway Weight Wheelbase LENGTH;
7 DATALINES;
825945 23722 3.5 210 6 18 26 3470 110 195
926445 24300 3.5 210 6 18 26 3470 110 195
1028495 26033 3.5 210 6 18 26 3470 110 195
1123720 21683 2.0 165 4 23 30 2778 101 179
1224595 22473 2.0 165 4 23 30 2778 101 179
1327270 24806 2.0 190 4 21 29 2833 104 184
1428170 25686 2.0 190 4 21 29 2833 104 184
1520000 18456 2.0 160 4 24 31 2901 106 187
1622000 20387 2.0 170 4 23 31 2946 106 187
1730000 27500 3.0 220 6 17 25 3450 109 188
18;
19RUN;
20 
21/* Application du découpage par points de coupure */
22PROC BINNING DATA=casuser.auto_data numbin=3 method=cutpts;
23 INPUT Horsepower / cutpts(180, 200);
24 OUTPUT out=casuser.binned_data copyvars=(MSRP Horsepower);
25RUN;
26 
27/* Affichage des résultats (facultatif) */
28PROC PRINT DATA=casuser.binned_data (obs=5);
29RUN;
30 
31PROC FREQ DATA=casuser.binned_data;
32 tables Binned_Horsepower;
33RUN;
34 
2 Bloc de code
PROC BINNING Data
Explication :
Cet exemple illustre le découpage par points de coupure sur deux variables, 'SqFt' et 'YearBuilt', à partir d'une table de données 'house_prices'. L'option MONITOR=(SalePrice) est utilisée pour la variable 'SqFt' afin de suivre la variable 'SalePrice' dans les statistiques des bins, ce qui est utile pour l'évaluation de la performance du découpage. L'option OUTSTAT génère une table supplémentaire 'bin_stats' contenant les statistiques de chaque bin, offrant une vue détaillée des résultats du regroupement.
Copié !
1/* Création d'une table CAS temporaire */
2options casdatalimit=1000;
3caslib _all_ assign;
4 
5DATA casuser.house_prices;
6 INPUT SqFt Bedrooms Bathrooms LotSize YearBuilt SalePrice;
7 DATALINES;
81500 3 2 5000 1990 150000
91800 4 2.5 6000 1995 200000
101200 2 1 4000 1980 100000
112000 3 3 7000 2000 250000
121600 3 2 5500 1992 160000
131300 2 1.5 4500 1985 110000
142200 4 3.5 8000 2005 300000
151700 3 2 5800 1998 180000
161900 4 2 6500 2002 220000
171400 3 1 4800 1988 130000
18;
19RUN;
20 
21/* Application du découpage par points de coupure avec options */
22PROC BINNING DATA=casuser.house_prices numbin=4 method=cutpts;
23 INPUT SqFt / cutpts(1500, 1800, 2000) monitor=(SalePrice);
24 INPUT YearBuilt / cutpts(1990, 2000) monitor=(SalePrice);
25 OUTPUT out=casuser.binned_house_data copyvars=(SqFt YearBuilt SalePrice) outstat=casuser.bin_stats;
26RUN;
27 
28/* Affichage des détails des bins */
29PROC PRINT DATA=casuser.bin_stats;
30RUN;
31 
32/* Affichage des données binées */
33PROC PRINT DATA=casuser.binned_house_data (obs=5);
34RUN;
35 
3 Bloc de code
PROC BINNING Data
Explication :
Cet exemple avancé utilise une table de données client avec des valeurs manquantes. Pour la variable 'Age', des points de coupure spécifiques (30, 40, 50) sont définis. Pour 'Income_Monthly', bien que des points de coupure soient fournis, l'option HANDLEMISSING=BIN indique que les valeurs manquantes doivent être traitées comme une catégorie de bin distincte. Cela montre une approche plus robuste pour le regroupement de données, en prenant en compte les scénarios réels de données incomplètes.
Copié !
1/* Création d'une table CAS temporaire avec des valeurs manquantes */
2options casdatalimit=1000;
3caslib _all_ assign;
4 
5DATA casuser.customer_data;
6 INPUT Age Income_Monthly Education_Level $ Credit_Score_PreBinning Gender $;
7 DATALINES;
830 3000 Bac NA . M
945 5000 Master NA 750 F
1025 2000 HighSchool NA 600 M
11NA 4000 PhD NA 800 F
1235 NA Bachelor NA 700 M
1350 6000 Master NA 850 F
1428 2500 HighSchool NA 620 M
1540 4500 Bachelor NA 720 F
16NA 3500 PhD NA 780 M
1732 3200 HighSchool NA 680 F
18;
19RUN;
20 
21/* Application du découpage avec gestion des manquantes et différentes numbin */
22PROC BINNING DATA=casuser.customer_data numbin=5 method=cutpts;
23 INPUT Age / cutpts(30, 40, 50);
24 INPUT Income_Monthly / numbin=3 cutpts(3000, 5000) handlemissing=bin;
25 OUTPUT out=casuser.binned_customer_data copyvars=(Age Income_Monthly Credit_Score_PreBinning);
26RUN;
27 
28/* Affichage des résultats pour les données binées */
29PROC PRINT DATA=casuser.binned_customer_data;
30RUN;
31 
32/* Vérification des fréquences pour les variables binées */
33PROC FREQ DATA=casuser.binned_customer_data;
34 tables Binned_Age Binned_Income_Monthly;
35RUN;
36 
4 Bloc de code
PROC BINNING
Explication :
Cet exemple démontre l'intégration de PROC BINNING dans l'environnement SAS Viya/CAS. Il charge la table 'iris' de SASHELP dans une bibliothèque CAS. Ensuite, il applique le découpage par points de coupure sur 'PetalLength' et 'SepalWidth' et sauvegarde l'état du découpage (les règles de binning) dans une table 'binning_state' en utilisant l'option SAVE STATE. Cet 'état' peut être réutilisé pour appliquer exactement les mêmes règles de découpage (scoring) à de nouvelles données sans avoir à redéfinir les points de coupure. La table 'scored_iris' montre le résultat du binning sur les nouvelles données.
Copié !
1/* Assurez-vous d'avoir une session CAS active et une caslib assignée */
2options casdatalimit=1000;
3caslib _all_ assign;
4 
5/* Charger des données SASHELP dans CAS pour l'exemple */
6DATA casuser.iris;
7 SET sashelp.iris;
8RUN;
9 
10/* Application du découpage par points de coupure sur une table CAS */
11PROC BINNING DATA=casuser.iris numbin=3 method=cutpts;
12 INPUT PetalLength / cutpts(1.5, 4.5);
13 INPUT SepalWidth / cutpts(3.0, 3.5);
14 OUTPUT out=casuser.binned_iris (replace=true) copyvars=(Species PetalLength SepalWidth);
15 save state out=casuser.binning_state (replace=true);
16RUN;
17 
18/* Appliquer le découpage sur de nouvelles données (scoring) */
19DATA casuser.new_iris_data;
20 INPUT PetalLength SepalWidth Species $;
21 DATALINES;
221.2 3.8 Setosa
235.0 3.0 Virginica
244.0 2.5 Versicolor
25;
26RUN;
27 
28PROC BINNING DATA=casuser.new_iris_data;
29 score state=casuser.binning_state out=casuser.scored_iris;
30RUN;
31 
32PROC PRINT DATA=casuser.scored_iris;
33RUN;
34 
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.