/****************************************************************************** * Programme : Courbe ROC, Lift et Fit Statistics : Le guide ultime de l'évaluation de modèles sous SAS * Reference : EVALUAF633 * Source : https://www.wearecas.eu/es/sampleCode/EVALUAF633 ******************************************************************************/ /* --- BLOC 1 --- */ /* Configuration CAS */ cas; caslib _all_ assign; /* Préparation des données: Création d'un jeu de données de score synthétiques */ data work.score_data; length good_bad $4; input _PartInd_ good_bad $ p_good p_bad; datalines; 0 good 0.6675 0.3325 0 good 0.5189 0.4811 0 good 0.6852 0.3148 0 bad 0.0615 0.9385 0 bad 0.3053 0.6947 0 bad 0.6684 0.3316 0 good 0.6422 0.3578 0 good 0.6752 0.3248 0 good 0.5396 0.4604 0 good 0.4983 0.5017 0 bad 0.1916 0.8084 0 good 0.5722 0.4278 0 good 0.7099 0.2901 0 good 0.4642 0.5358 0 good 0.4863 0.5137 1 bad 0.4942 0.5058 1 bad 0.4863 0.5137 1 bad 0.4942 0.5058 1 good 0.6118 0.3882 1 good 0.5375 0.4625 1 good 0.8132 0.1868 1 good 0.6914 0.3086 1 good 0.5700 0.4300 1 good 0.8189 0.1811 1 good 0.2614 0.7386 1 good 0.1910 0.8090 1 good 0.5129 0.4871 1 good 0.8417 0.1583 1 good 0.5500 0.4500 ; run; /* Charger les données dans la session CAS */ proc casutil incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace; load data=score_data outcasfmt; run; /* Exemple 1 : Utilisation Basique de PROC ASSESS */ proc assess data=casuser.score_data; var p_good; target good_bad; run; /* --- BLOC 2 --- */ /* Configuration CAS (si non déjà configurée) */ cas; caslib _all_ assign; /* Préparation des données: Création d'un jeu de données de score synthétiques */ data work.score_data; length good_bad $4; input _PartInd_ good_bad $ p_good p_bad; datalines; 0 good 0.6675 0.3325 0 good 0.5189 0.4811 0 good 0.6852 0.3148 0 bad 0.0615 0.9385 0 bad 0.3053 0.6947 0 bad 0.6684 0.3316 0 good 0.6422 0.3578 0 good 0.6752 0.3248 0 good 0.5396 0.4604 0 good 0.4983 0.5017 0 bad 0.1916 0.8084 0 good 0.5722 0.4278 0 good 0.7099 0.2901 0 good 0.4642 0.5358 0 good 0.4863 0.5137 1 bad 0.4942 0.5058 1 bad 0.4863 0.5137 1 bad 0.4942 0.5058 1 good 0.6118 0.3882 1 good 0.5375 0.4625 1 good 0.8132 0.1868 1 good 0.6914 0.3086 1 good 0.5700 0.4300 1 good 0.8189 0.1811 1 good 0.2614 0.7386 1 good 0.1910 0.8090 1 good 0.5129 0.4871 1 good 0.8417 0.1583 1 good 0.5500 0.4500 ; run; /* Charger les données dans la session CAS */ proc casutil incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace; load data=score_data outcasfmt; run; /* Exemple 2 : Utilisation de PROC ASSESS avec options courantes */ proc assess data=casuser.score_data ncuts=5 nbins=5; var p_good; target good_bad / event="good" level=nominal; fitstat pvar=p_bad / pevent="bad"; run; /* --- BLOC 3 --- */ /* Configuration CAS (si non déjà configurée) */ cas; caslib _all_ assign; /* Préparation des données: Création d'un jeu de données de score synthétiques */ data work.score_data; length good_bad $4; input _PartInd_ good_bad $ p_good p_bad; datalines; 0 good 0.6675 0.3325 0 good 0.5189 0.4811 0 good 0.6852 0.3148 0 bad 0.0615 0.9385 0 bad 0.3053 0.6947 0 bad 0.6684 0.3316 0 good 0.6422 0.3578 0 good 0.6752 0.3248 0 good 0.5396 0.4604 0 good 0.4983 0.5017 0 bad 0.1916 0.8084 0 good 0.5722 0.4278 0 good 0.7099 0.2901 0 good 0.4642 0.5358 0 good 0.4863 0.5137 1 bad 0.4942 0.5058 1 bad 0.4863 0.5137 1 bad 0.4942 0.5058 1 good 0.6118 0.3882 1 good 0.5375 0.4625 1 good 0.8132 0.1868 1 good 0.6914 0.3086 1 good 0.5700 0.4300 1 good 0.8189 0.1811 1 good 0.2614 0.7386 1 good 0.1910 0.8090 1 good 0.5129 0.4871 1 good 0.8417 0.1583 1 good 0.5500 0.4500 ; run; /* Charger les données dans la session CAS */ proc casutil incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace; load data=score_data outcasfmt; run; /* Création d'un format personnalisé pour la variable _PartInd_ */ proc format; value $partfmt '0' = 'Partition A' '1' = 'Partition B'; run; data casuser.score_data_fmt; set casuser.score_data; format _PartInd_ $partfmt.; run; /* Exemple 3 : Cas Avancé de PROC ASSESS */ proc assess data=casuser.score_data_fmt nbins=10; var p_good; target good_bad / event="good" level=nominal; fitstat pvar=p_bad / pevent="bad"; roc / cutoff=0.1 to 0.9 by 0.1 plots; /* Spécifie des seuils de coupure personnalisés et demande les tracés ROC */ by _PartInd_; run; /* --- BLOC 4 --- */ /* Configuration CAS (si non déjà configurée) */ cas; caslib _all_ assign; /* Exemple 4 : Intégration Viya / Grand volume de données */ /* Création d'un grand jeu de données synthétique directement dans CAS */ data casuser.large_score_data; do _PartInd_ = 0 to 1; do i = 1 to 10000; /* Créer 20,000 observations */ good_bad = ifc(ranuni(0) > 0.7, 'bad', 'good'); p_good = ranuni(0); /* Probabilité de 'good' */ p_bad = 1 - p_good; /* Probabilité de 'bad' */ output; end; end; drop i; run; proc assess data=casuser.large_score_data nbins=20; var p_good; target good_bad / event="good" level=nominal; fitstat pvar=p_bad / pevent="bad"; roc / adjustfor=good_bad(event="good") plots; /* ajuster pour la distribution de la cible */ by _PartInd_; run; /* Nettoyage du dataset temporaire CAS */ proc cas; droptable "large_score_data" caslib="CASUSER"; run;