Informations ROC (Receiver Operating Characteristic) : Analyse de la capacité du modèle à séparer les événements des non-événements à différents seuils de probabilité.
Informations de Lift : Mesure l'efficacité du modèle en comparant la proportion d'événements capturés par le modèle par rapport à une sélection aléatoire.
Statistiques d'ajustement (Fit Statistics) : Diverses métriques quantifiant la performance globale du modèle, telles que l'erreur quadratique ou la perte logistique.
Les exemples fournis illustrent comment créer des données, utiliser des options courantes (comme le nombre de seuils de coupure et de bacs), des scénarios avancés avec des formats personnalisés, et l'intégration avec l'environnement distribué CAS pour le traitement de grands volumes de données.
Analyse des données
Type : CREATION_INTERNE
Les exemples utilisent des données synthétiques générées par un Data Step pour créer des variables de prédiction (p_good, p_bad) et une variable cible binaire (good_bad). Un grand jeu de données est également généré directement dans CAS pour l'exemple avancé afin de démontrer la capacité de traitement sur de larges volumes de données.
1 Bloc de code
PROC ASSESS Data
Explication : Cet exemple illustre l'utilisation la plus simple de la procédure ASSESS pour évaluer un modèle. Après avoir établi une connexion CAS et créé des données de score synthétiques (avec `p_good` comme probabilité d'événement positif et `good_bad` comme cible), les données sont chargées dans une table CAS nommée `score_data`. La procédure ASSESS est ensuite appelée en spécifiant la variable de prédiction (`p_good`) et la variable cible binaire (`good_bad`). Par défaut, la procédure calcule les métriques ROC et de lift basiques.
Copié !
/* 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;
1
/* Configuration CAS */
2
cas;
3
caslib _all_ assign;
4
5
/* Préparation des données: Création d'un jeu de données de score synthétiques */
/* Exemple 1 : Utilisation Basique de PROC ASSESS */
48
PROC ASSESSDATA=casuser.score_data;
49
var p_good;
50
target good_bad;
51
RUN;
2 Bloc de code
PROC ASSESS Data
Explication : Cet exemple étend l'utilisation basique en incluant des options courantes pour une analyse plus détaillée. `NCUTS=5` définit 5 seuils de coupure pour l'analyse ROC, et `NBINS=5` spécifie 5 bacs pour l'analyse de lift. `EVENT="good" LEVEL=NOMINAL` indique que 'good' est la classe d'événement d'intérêt pour la variable cible nominale. La déclaration `FITSTAT` est ajoutée pour calculer des statistiques d'ajustement en utilisant `p_bad` comme probabilité de l'événement de référence ('bad').
Copié !
/* 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;
1
/* Configuration CAS (si non déjà configurée) */
2
cas;
3
caslib _all_ assign;
4
5
/* Préparation des données: Création d'un jeu de données de score synthétiques */
Explication : Cet exemple avancé montre comment personnaliser et approfondir l'analyse. Un `PROC FORMAT` est utilisé pour créer un format personnalisé pour la variable `_PartInd_`, ce qui rend les sorties plus lisibles lors de l'analyse par groupes. Les données formatées sont ensuite chargées dans une nouvelle table CAS. L'option `NBINS=10` augmente la granularité de l'analyse de lift. La déclaration `ROC` utilise l'option `CUTOFF` pour spécifier des seuils de coupure personnalisés (de 0.1 à 0.9 par pas de 0.1) et l'option `PLOTS` pour générer des tracés graphiques (comme la courbe ROC). La déclaration `BY _PartInd_` exécute des analyses séparées pour chaque partition de données.
Copié !
/* 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;
1
/* Configuration CAS (si non déjà configurée) */
2
cas;
3
caslib _all_ assign;
4
5
/* Préparation des données: Création d'un jeu de données de score synthétiques */
/* Création d'un format personnalisé pour la variable _PartInd_ */
48
PROC FORMAT;
49
value $partfmt '0' = 'Partition A'
50
'1' = 'Partition B';
51
RUN;
52
53
DATA casuser.score_data_fmt;
54
SET casuser.score_data;
55
FORMAT _PartInd_ $partfmt.;
56
RUN;
57
58
/* Exemple 3 : Cas Avancé de PROC ASSESS */
59
PROC ASSESSDATA=casuser.score_data_fmt nbins=10;
60
var p_good;
61
target good_bad / event="good" level=nominal;
62
fitstat pvar=p_bad / pevent="bad";
63
roc / cutoff=0.1 to 0.9BY0.1 plots; /* Spécifie des seuils de coupure personnalisés et demande les tracés ROC */
64
BY _PartInd_;
65
RUN;
4 Bloc de code
PROC ASSESS Data
Explication : Cet exemple met l'accent sur l'intégration avec SAS Viya pour le traitement de grands volumes de données. Un jeu de données de 20 000 observations est généré directement dans CAS, soulignant la capacité de la plateforme à gérer des données massives en mémoire. L'option `NBINS=20` est utilisée pour une analyse de lift plus détaillée. La déclaration `ROC` inclut `ADJUSTFOR=good_bad(event="good")` pour ajuster les métriques ROC en fonction de la distribution réelle de la variable cible, ce qui est crucial pour les datasets déséquilibrés. La table CAS temporaire est ensuite supprimée pour nettoyer l'environnement.
Copié !
/* 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;
1
/* Configuration CAS (si non déjà configurée) */
2
cas;
3
caslib _all_ assign;
4
5
/* Exemple 4 : Intégration Viya / Grand volume de données */
6
7
/* Création d'un grand jeu de données synthétique directement dans CAS */
8
DATA casuser.large_score_data;
9
DO _PartInd_ = 0 to 1;
10
DO i = 1 to 10000; /* Créer 20,000 observations */
roc / adjustfor=good_bad(event="good") plots; /* ajuster pour la distribution de la cible */
25
BY _PartInd_;
26
RUN;
27
28
/* Nettoyage du dataset temporaire CAS */
29
PROC CAS;
30
droptable "large_score_data" caslib="CASUSER";
31
RUN;
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.
« La procédure ASSESS est l'étape finale et cruciale de tout projet de Data Science dans l'écosystème SAS Viya. Une fois votre modèle entraîné, il ne suffit pas qu'il prédise ; il doit être performant. ASSESS agit comme le juge de paix, fournissant les métriques standard de l'industrie pour les modèles de classification.
La courbe ROC et l'AUC : C'est le premier réflexe du Data Scientist. En analysant la capacité du modèle à séparer les "événements" (ex: fraudeurs, acheteurs) des "non-événements" à différents seuils (NCUTS), la procédure calcule l'aire sous la courbe (AUC). Plus elle est proche de 1, plus votre modèle est un excellent discriminateur.
Le Lift et les Gains : Si le ROC mesure la séparation, le Lift mesure l'utilité commerciale. En découpant vos données en bacs (NBINS), ASSESS vous indique combien de fois votre modèle est plus efficace qu'un tirage aléatoire. C'est l'indicateur clé pour optimiser vos campagnes marketing : "Si je contacte les 10% les mieux scorés, combien de clients vais-je réellement capter ?"
Statistiques d'ajustement (FITSTAT) : Au-delà des courbes, ASSESS fournit des métriques d'erreur comme l'ASE (Average Squared Error). Cela permet de comparer deux modèles de manière purement mathématique sur leur capacité à s'approcher de la probabilité réelle.
Le traitement distribué (Big Data) : L'exemple 4 souligne la force de Viya : évaluer un modèle sur des millions de lignes n'est pas plus complexe que sur quelques dizaines. En travaillant directement en mémoire CAS, la procédure distribue le calcul des bacs et des seuils sur tous les nœuds, offrant une réactivité immédiate.
Mon conseil : Pour les jeux de données déséquilibrés (ex: détection de panne rare), utilisez systématiquement l'option ADJUSTFOR dans l'instruction ROC. Cela permet de corriger les biais de distribution de la cible et d'obtenir des métriques de performance beaucoup plus proches de la réalité opérationnelle. »
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.