percentile

assess

Description

L'action `assess` du jeu d'actions `percentile` est un outil puissant pour évaluer et comparer les performances de modèles prédictifs. Elle est particulièrement utile dans les scénarios de classification binaire et de régression. Pour les modèles de classification, elle calcule des statistiques d'ajustement, génère des courbes ROC (Receiver Operating Characteristic) et des courbes de lift, qui sont essentielles pour comprendre la capacité du modèle à discriminer les classes. Pour les modèles de régression, elle fournit des métriques d'erreur pour évaluer la précision des prédictions. Cette action permet une analyse fine en supportant la pondération des observations, le traitement par groupe (`groupBy`) et l'évaluation sur des partitions de données spécifiques, ce qui en fait un outil flexible pour la validation de modèles dans SAS Viya.

percentile.assess result=<results> status=<rc> / attributes={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...} binNum=64-bit-integer casOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} cutStep=double epsilon=double event="string" fitStatOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} freq="variable-name" groupByLimit=64-bit-integer includeCutoffOne=TRUE|FALSE includeFitStat=TRUE|FALSE includeLift=TRUE|FALSE includeRoc=TRUE|FALSE includeZeroDepth=TRUE|FALSE inputs={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...} maxIters=integer method="EXACT"|"ITERATIVE" nBins=integer noMissingTarget=TRUE|FALSE partition=TRUE|FALSE partKey={"string-1", ...} pEvent={"string-1", ...} pResponse="variable-name" pVar={"variable-name-1", ...} response="variable-name" responseFmt="string" rocOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR"|"INHERIT"|"STANDARD", name="table-name", promote=TRUE|FALSE, replace=TRUE|FALSE, replication=integer, tableRedistUpPolicy="DEFER"|"NOREDIST"|"REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1", ...}} table={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, ...}, groupBy={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...}, groupByMode="NOSORT"|"REDISTRIBUTE", importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", orderBy={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...}, singlePass=TRUE|FALSE, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, importOptions={fileType="ANY"|"AUDIO"|"AUTO"|"BASESAS"|"CSV"|"DELIMITED"|"DOCUMENT"|"DTA"|"ESP"|"EXCEL"|"FMT"|"HDAT"|"IMAGE"|"JMP"|"LASR"|"PARQUET"|"SOUND"|"SPSS"|"VIDEO"|"XLS", fileType-specific-parameters}, name="table-name", vars={{name="variable-name", format="string", formattedLength=integer, label="string", nfd=integer, nfl=integer}, ...}, where="where-expression"}} useRawPResponse=TRUE|FALSE userCutoff=double weight="variable-name";
Paramètres
ParamètreDescription
attributesSpécifie les attributs temporaires, tels qu'un format, à appliquer aux variables d'entrée.
binNumNombre de bins dans un processus en trois passes.
casOutSpécifie les paramètres de la table de sortie pour les statistiques d'évaluation.
cutStepSpécifie la taille du pas à utiliser pour les calculs ROC.
epsilonSpécifie la tolérance utilisée pour déterminer la convergence de l'algorithme itératif pour le calcul des percentiles.
eventSpécifie la valeur formatée de la variable de réponse qui représente l'événement. Si non spécifié pour une variable numérique, une évaluation de régression est effectuée.
fitStatOutSpécifie la table de sortie pour les statistiques d'ajustement. Pour les variables de réponse nominales, les événements et variables de probabilité doivent être spécifiés.
freqSpécifie la variable de fréquence d'une observation.
groupByLimitSpécifie le nombre maximum de niveaux dans un ensemble de regroupement pour éviter de créer des ensembles de résultats trop volumineux.
includeCutoffOneSi TRUE, inclut une ligne pour cutoff=1 dans les statistiques ROC pour simplifier le traçage de la courbe. Ignoré si la variable cible est un intervalle.
includeFitStatSi FALSE, les statistiques d'ajustement ne sont pas générées.
includeLiftSi FALSE, les calculs de lift ne sont pas générés.
includeRocSi FALSE, les calculs ROC ne sont pas générés.
includeZeroDepthSi TRUE, inclut une ligne pour depth=0 dans les statistiques de lift pour simplifier le traçage de la courbe de lift.
inputsSpécifie les variables d'entrée à utiliser dans l'analyse.
maxItersSpécifie le nombre maximum d'itérations de l'algorithme.
methodSpécifie l'algorithme pour l'analyse des percentiles (EXACT ou ITERATIVE).
nBinsSpécifie le nombre de bins à utiliser pour les calculs de lift.
noMissingTargetExclut les observations où la variable cible a une valeur manquante.
partitionSi TRUE et que la table est partitionnée, les résultats sont calculés efficacement pour chaque partition.
partKeySpécifie une clé de partition pour calculer les résultats sur une seule partition spécifique.
pEventSpécifie les événements correspondant à chaque variable de probabilité, à l'exclusion de l'événement de la variable de réponse.
pResponseSpécifie la variable de réponse prédite pour l'évaluation du modèle.
pVarSpécifie les variables de probabilité d'événement. Doit être utilisé avec le paramètre pEvent.
responseSpécifie la variable de réponse pour l'évaluation du modèle. (Requis)
responseFmtSpécifie un format temporaire pour la variable de réponse afin de produire l'événement spécifié.
rocOutSpécifie les paramètres de la table de sortie pour les calculs ROC.
tableSpécifie les paramètres de la table d'entrée. (Requis)
useRawPResponseSi TRUE, les valeurs brutes de la variable de réponse prédite sont utilisées pour filtrer les observations.
userCutoffSeuil de classification spécifié par l'utilisateur pour la matrice de confusion.
weightSpécifie la variable de poids d'une observation.
Préparation des Données Voir la fiche de ce code dataprep
Création de Données pour l'Évaluation de Modèle

Ce bloc de code SAS crée une table CAS nommée `hmeq_scored`. Il charge d'abord la table `hmeq` depuis la librairie `Sampsio`, puis la charge dans CAS. Ensuite, un modèle de régression logistique est entraîné pour prédire la variable `BAD` en fonction d'autres variables. Enfin, le modèle est utilisé pour scorer la table `hmeq` et stocker les probabilités prédites dans `hmeq_scored`, qui servira de base pour l'évaluation avec l'action `assess`.

Copié !
1DATA casuser.hmeq_scored;
2 SET sampsio.hmeq;
3RUN;
4 
5PROC CASUTIL;
6 load DATA=casuser.hmeq_scored outcaslib='casuser' replace;
7QUIT;
8 
9PROC LOGISTIC DATA=casuser.hmeq_scored;
10 class reason job;
11 model bad(event='1') = reason job derog delinq clage ninq clno debtinc;
12 OUTPUT out=casuser.hmeq_scored p=p_bad1;
13QUIT;
14 

Exemples

Cet exemple montre comment utiliser l'action `assess` pour évaluer un modèle de classification binaire. Il utilise la table `hmeq_scored` où `BAD` est la variable de réponse réelle et `P_BAD1` est la probabilité prédite de l'événement '1'. L'action générera des statistiques de lift et ROC par défaut.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3percentile.assess TABLE='hmeq_scored', response='BAD', event='1', pVar={'P_BAD1'};
4RUN;
5 

Ici, l'action `assess` est utilisée pour évaluer un modèle de régression. La variable `DEBTINC` est la réponse réelle et `P_BAD1` (utilisé ici comme une prédiction continue) est la réponse prédite. Comme le paramètre `event` n'est pas spécifié, l'action calcule des statistiques d'erreur de régression.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3percentile.assess TABLE='hmeq_scored', response='DEBTINC', pResponse='P_BAD1';
4RUN;
5 

Cet exemple réalise une évaluation complète d'un modèle de classification. Il spécifie la variable de réponse `BAD`, l'événement d'intérêt '1', et la probabilité prédite `P_BAD1`. De plus, il demande la création de deux tables de sortie : `hmeq_roc` pour les données de la courbe ROC et `hmeq_fit` pour les statistiques d'ajustement détaillées. Ces tables peuvent ensuite être utilisées pour des visualisations ou des analyses plus poussées.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 percentile.assess
3 TABLE={name='hmeq_scored'},
4 response='BAD',
5 event='1',
6 pVar={'P_BAD1'},
7 rocOut={name='hmeq_roc', replace=true},
8 fitStatOut={name='hmeq_fit', replace=true};
9RUN;

Cet exemple personnalise les calculs de ROC et de lift. `cutStep=0.05` augmente la granularité de la courbe ROC. `nBins=50` augmente le nombre de quantiles pour les calculs de la courbe de lift, offrant une vue plus détaillée. `includeCutoffOne=true` et `includeZeroDepth=true` ajoutent des points de départ aux tables ROC et de lift respectivement, ce qui facilite leur tracé.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 percentile.assess
3 TABLE='hmeq_scored',
4 response='BAD',
5 event='1',
6 pVar={'P_BAD1'},
7 cutStep=0.05,
8 nBins=50,
9 includeCutoffOne=true,
10 includeZeroDepth=true,
11 casOut={name='hmeq_lift', replace=true};
12RUN;

Cette analyse évalue la performance du modèle séparément pour chaque catégorie de la variable `JOB`. L'option `groupBy={'JOB'}` segmente les données, permettant de comparer comment le modèle se comporte pour différents segments de la population (par exemple, par profession). Cela est crucial pour détecter d'éventuels biais ou des variations de performance du modèle.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 percentile.assess
3 TABLE={name='hmeq_scored', groupBy={'JOB'}},
4 response='BAD',
5 event='1',
6 pVar={'P_BAD1'},
7 fitStatOut={name='hmeq_fit_by_job', replace=true};
8RUN;

FAQ

Quel est l'objectif de l'action 'assess' dans le jeu d'actions 'percentile' ?
Comment spécifier la table de données à évaluer ?
Quel paramètre est nécessaire pour définir la variable de réponse du modèle ?
Comment évaluer un modèle de classification binaire ?
Peut-on évaluer un modèle de régression ?
Comment spécifier les variables de probabilité d'événement prédites ?
Est-il possible de générer des tables de sortie pour les statistiques d'ajustement et les calculs ROC ?
Comment contrôler la granularité des calculs pour la courbe de 'lift' et la courbe ROC ?
Peut-on pondérer les observations lors de l'évaluation ?
Comment l'action gère-t-elle les valeurs manquantes dans la variable cible ?
Quelle est la différence entre les méthodes de calcul `EXACT` et `ITERATIVE` ?
Comment évaluer un modèle sur une seule partition de données ?

Scénarios associés

Cas d'usage
Scénario Standard : Évaluation d'un modèle de propension marketing

Une entreprise de vente au détail a développé un modèle prédictif pour identifier les clients les plus susceptibles de répondre à une nouvelle campagne promotionnelle. L'objecti...

Cas d'usage
Scénario Performance : Évaluation d'un modèle de détection de fraude avec pondération et regroupement

Une institution financière doit évaluer un modèle de détection de fraude sur un grand volume de transactions. Il est crucial d'évaluer la performance du modèle non seulement glo...

Cas d'usage
Scénario Cas Limite : Évaluation d'un modèle de maintenance prédictive avec données manquantes

Une entreprise industrielle utilise un modèle pour prédire les pannes de ses équipements. Les données collectées des capteurs sont souvent incomplètes. Ce scénario vise à tester...