/****************************************************************************** * Programme : Modelo Probit para Datos Binarios con PROC BART * Reference : MODELO1E4A * Source : https://www.wearecas.eu/en/sampleCode/MODELO1E4A ******************************************************************************/ /* --- BLOC 1 --- */ /* Préparation des données dans CAS */ cas; libname mylib cas; data mylib.JunkMail; set Sashelp.JunkMail; run; /* Utilisation Basique de PROC BART pour un modèle probit binaire */ proc bart data=mylib.JunkMail seed=12345; model Class = Make Address All _3d Our Internet Order / dist=binary; partition rolevar=Test(train='0' test='1'); run; /* --- BLOC 2 --- */ /* Préparation des données dans CAS */ cas; libname mylib cas; data mylib.JunkMail; set Sashelp.JunkMail; run; /* Options courantes et sortie des prédictions */ proc bart data=mylib.JunkMail seed=67890; model Class = Make Address All _3d Our Internet Order Mail Receive Will / dist=binary; /* Options MCMC pour une meilleure convergence et stabilité */ mcmc nchain=4 nbi=1000 nsample=5000; partition rolevar=Test(train='0' test='1'); /* Sauvegarde les prédictions et probabilités dans une table CAS */ output out=mylib.BartPredictions copyvars=(Class Test) p=ProbSpam pred=PredictedSpam; run; /* Afficher les premières lignes des prédictions */ proc print data=mylib.BartPredictions(obs=10); run; /* --- BLOC 3 --- */ /* Préparation des données dans CAS */ cas; libname mylib cas; data mylib.JunkMail; set Sashelp.JunkMail; /* Exemple de transformation de variable: créer une variable d'interaction simple */ Length_Exclamation = Length * Exclamation; run; /* Cas Avancé : hyperparamètres, validation croisée */ proc bart data=mylib.JunkMail seed=112233; model Class = Make Address All _3d Our Internet Order Mail Receive Will People Report Length_Exclamation / dist=binary; /* Personnalisation des hyperparamètres de l'arbre BART */ prior bart ntree=100 nminsplit=5 nminleaf=3; /* Utilisation de la validation croisée (5 plis) pour évaluer la robustesse du modèle */ cv ncv=5 foldvar=Test(train='0' test='1'); output out=mylib.BartAdvancedPred p=ProbSpam pred=PredictedSpam; run; /* --- BLOC 4 --- */ /* Préparation des données dans CAS */ cas; libname mylib cas; data mylib.JunkMail; set Sashelp.JunkMail; run; /* Entraînement et sauvegarde du modèle BART */ proc bart data=mylib.JunkMail seed=445566; model Class = Make Address All _3d Our Internet Order Mail Receive Will People Report Addresses Free Business / dist=binary; partition rolevar=Test(train='0' test='1'); /* Sauvegarde le modèle entraîné dans CAS pour réutilisation */ save rstore=mylib.BartModel_rstore; run; /* Chargement du modèle sauvegardé et score sur de nouvelles données (ici l'ensemble de test) */ proc bart data=mylib.JunkMail(where=(Test='1')) rstore=mylib.BartModel_rstore; score out=mylib.BartScoredData copyvars=(Class Test) p=ScoreProb pred=ScorePred; run; /* Vérifier les résultats du scoring */ proc freq data=mylib.BartScoredData; tables Class*ScorePred; run; proc print data=mylib.BartScoredData(obs=10); run;