/****************************************************************************** * Programme : FOREST Procedure (Random Forests) * Reference : FORESTC6E3 * Source : https://www.wearecas.eu/de/sampleCode/FORESTC6E3 ******************************************************************************/ /* --- BLOC 1 --- */ /* Création d'une session CAS et d'une caslib */ CAS; LIBNAME mycas CAS; /* Données d'exemple pour la classification binaire */ DATA mycas.CreditData; INPUT Age ScoreCredit Revenu StatutClient $; DATALINES; 25 700 50000 Bon 30 650 40000 Mauvais 35 720 60000 Bon 40 600 30000 Mauvais 45 750 70000 Bon 50 680 45000 Mauvais 60 710 55000 Bon 28 670 38000 Mauvais 33 730 62000 Bon 55 690 48000 Bon ; RUN; /* Exécution de la procédure FOREST pour la classification */ PROC FOREST data=mycas.CreditData; input Age ScoreCredit Revenu; target StatutClient / level=nominal; RUN; /* Nettoyage de la session CAS si nécessaire */ CAS_TERMINATE; /* --- BLOC 2 --- */ /* Création d'une session CAS et d'une caslib */ CAS; LIBNAME mycas CAS; /* Données d'exemple étendues pour la régression avec une variable catégorielle */ DATA mycas.SalesData; INPUT Publicite Internet Vendeurs Region $ Ventes; DATALINES; 10 5 2 Est 100 12 6 3 Ouest 120 8 4 2 Nord 90 15 7 4 Sud 150 11 5 3 Est 110 13 6 4 Ouest 130 9 4 2 Nord 95 16 8 5 Sud 160 10 5 3 Est 105 14 7 4 Ouest 140 ; RUN; /* Exécution de la procédure FOREST avec partition et importance des variables */ PROC FOREST data=mycas.SalesData seed=12345; input Publicite Internet Vendeurs Region / level=interval Publicite Internet Vendeurs Region level=nominal Region; target Ventes / level=interval; partition fraction(0.7 train = training 0.3 test = testing); varimportance; ods output VariableImportance=mycas.VarImp; save state out=mycas.ForestModel / onestore; RUN; /* Affichage de l'importance des variables */ PROC PRINT data=mycas.VarImp; RUN; /* Nettoyage de la session CAS si nécessaire */ CAS_TERMINATE; /* --- BLOC 3 --- */ /* Création d'une session CAS et d'une caslib */ CAS; LIBNAME mycas CAS; /* Données d'exemple pour la régression avec plus de complexité */ DATA mycas.HousingPrices; INPUT Surface Chambres NbSallesBains AgeMaison Garage NbEtages PrixMaison; DATALINES; 1500 3 2 10 1 2 250000 1200 2 1 20 0 1 180000 2000 4 3 5 2 3 350000 1000 2 1 30 0 1 150000 1800 3 2 15 1 2 290000 1300 3 1 25 1 1 200000 2200 4 3 8 2 3 380000 900 2 1 40 0 1 130000 1700 3 2 12 1 2 270000 1600 3 2 18 1 2 260000 ; RUN; /* Exécution de la procédure FOREST avec tuning d'hyperparamètres et sortie détaillée */ PROC FOREST data=mycas.HousingPrices ntrees=100 maxdepth=10 nsubsets=5 seed=54321; input Surface Chambres NbSallesBains AgeMaison Garage NbEtages; target PrixMaison / level=interval; baggingfraction=0.7; proctime; performance nthreads=4; ods output FitStatistics=mycas.FitStats; save rforest out=mycas.ForestModel_Adv; RUN; /* Création de nouvelles données pour la prédiction */ DATA mycas.NewHouses; INPUT Surface Chambres NbSallesBains AgeMaison Garage NbEtages; DATALINES; 1400 3 2 12 1 2 1900 4 2 7 2 3 ; RUN; /* Application du modèle pour faire des prédictions */ PROC ASTORE; score data=mycas.NewHouses out=mycas.NewHouses_Scored rstore=mycas.ForestModel_Adv; run; PROC PRINT data=mycas.NewHouses_Scored; RUN; /* Nettoyage de la session CAS si nécessaire */ CAS_TERMINATE; /* --- BLOC 4 --- */ /* Établissement d'une session CAS */ CAS; LIBNAME mycas CAS; /* Chargement d'un jeu de données SASHELP dans CAS pour simuler un grand jeu de données */ /* (Assurez-vous que le jeu de données SASHELP.CLASS est disponible et a une taille raisonnable) */ PROC CASUTIL; LOAD DATA=SASHELP.CLASS OUTCASLIB=mycas OUTCAS=ClassData REPLACE; RUN; /* Préparation des données: ajout d'une variable cible binaire pour la classification */ /* Exemple: 'TooOld' si Age > 14 */ DATA mycas.ClassDataPrepared; SET mycas.ClassData; IF Age > 14 THEN TooOld = 1; ELSE TooOld = 0; RUN; /* Exécution de la procédure FOREST sur la table CAS */ PROC FOREST data=mycas.ClassDataPrepared ntrees=200 maxdepth=15 seed=67890; input Age Height Weight; target TooOld / level=binary; ods output FitStatistics=mycas.ForestFitStats IterationHistory=mycas.ForestIterHist; save rforest out=mycas.BinaryForestModel; RUN; /* Vérification des statistiques d'ajustement */ PROC PRINT data=mycas.ForestFitStats; RUN; /* Chargement de nouvelles données pour le scoring */ DATA mycas.NewStudents; INPUT Name $ Age Height Weight; DATALINES; John 15 65 120 Jane 12 58 90 Mike 17 70 150 Sarah 13 60 100 ; RUN; /* Scoring des nouvelles données avec le modèle entraîné */ PROC ASTORE; score data=mycas.NewStudents out=mycas.NewStudents_Scored rstore=mycas.BinaryForestModel; RUN; PROC PRINT data=mycas.NewStudents_Scored; RUN; /* Nettoyage de la session CAS */ CAS_TERMINATE;