percentile

assess

##set_percentile

Description

L'action percentile.assess permet d'évaluer et de comparer les performances de vos modèles prédictifsAlgorithmes entraînés sur SAS Viya pour analyser des données historiques et estimer la probabilité de résultats futurs, facilitant ainsi la prise de décision proactive et automatisée. (parce qu'on aime tous savoir qui a la plus grosse... précision). Elle génère des statistiques d'ajustement (lift, ROC, etc.) indispensables pour valider et comparer vos algorithmes de machine learningBranche de l'IA utilisant des algorithmes pour apprendre des modèles à partir de données. Il permet d'automatiser des prédictions ou des décisions sans programmation explicite de chaque règle.. Source :

Syntaxe Officielle
proc cas;
percentile.assess /
table={name="nom_table_entree", caslib="nom_caslib"}
response="variable_cible"
inputs={"var_predite_1", "var_predite_2"}
pVar={"var_proba_1"}
pEvent={"evenement_cible"}
event="valeur_evenement"
casOut={name="table_sortie", replace=true}
rocOut={name="table_roc", replace=true}
fitStatOut={name="table_fitstat", replace=true};
run;
quit;

Paramètres Clés

Nom du paramètre Description
table Spécifie la table d'entrée (souvent issue d'une étape de scoring) contenant les données à évaluer.
response La variable cible (réelle) utilisée pour évaluer l'exactitude du modèle.
inputs Les variables d'entrée à évaluer (généralement vos probabilités prédites).
pVar Les variables de probabilité d'événement. À utiliser conjointement avec pEvent pour les modèles à cibles nominales/catégorielles.
pEvent Les événements correspondant à chaque variable de probabilité définie dans pVar.
event La valeur formatée de la variable de réponse qui représente l'événement d'intérêt.
casOut Table de sortie principale contenant les résultats globaux de l'évaluation (lift, etc.).
rocOut Table de sortie spécifique pour les statistiques de la courbe ROC (taux de vrais/faux positifs).
fitStatOut Table de sortie pour les statistiques d'ajustement globales.
nBins Nombre de segments (bins) pour les calculs de lift (par défaut: 20).
cutStep Taille du pas pour les calculs ROC (par défaut: 0.01).

Préparation des données

Création de données de test (Scoring fictif)

Créons une petite table simulant des résultats de scoring (prédictions vs valeurs réelles) pour pouvoir évaluer notre modèle imaginaire.

1DATA casuser.scored_data;
2 call streaminit(12345);
3 DO i = 1 to 1000;
4 reponse_reelle = ifc(rand('uniform') < 0.3, 'Oui', 'Non');
5 proba_oui = rand('uniform');
6 proba_non = 1 - proba_oui;
7 /* Ajout d'une petite logique pour que le modèle soit meilleur que le hasard */
8 IF reponse_reelle = 'Oui' THEN proba_oui = min(1, proba_oui + 0.2);
9 ELSE proba_oui = max(0, proba_oui - 0.2);
10 OUTPUT;
11 END;
12RUN;

Exemples d'utilisation

Évaluation d'un modèle binaire simple

Évaluation basique d'un modèle de classification binaire pour générer les courbes Lift et ROC standard.

1PROC CAS;
2 percentile.assess /
3 TABLE={name="scored_data", caslib="casuser"}
4 response="reponse_reelle"
5 event="Oui"
6 inputs={"proba_oui"}
7 pVar={"proba_oui"}
8 pEvent={"Oui"}
9 rocOut={name="roc_results", caslib="casuser", replace=true}
10 fitStatOut={name="fit_results", caslib="casuser", replace=true};
11RUN;
12QUIT;
Résultat Attendu :
Génère les tables en mémoire (roc_results et fit_results) contenant les taux de vrais/faux positifs, l'aire sous la courbe (AUC), et les statistiques de lift pour chaque quantile.
Évaluation avancée avec centiles et pas ROC ajusté

Une évaluation plus granulaire pour les puristes, en utilisant 100 centiles (au lieu de 20 bins par défaut) et un pas plus fin pour lisser la courbe ROC.

1PROC CAS;
2 percentile.assess /
3 TABLE={name="scored_data", caslib="casuser"}
4 response="reponse_reelle"
5 event="Oui"
6 inputs={"proba_oui"}
7 pVar={"proba_oui"}
8 pEvent={"Oui"}
9 nBins=100
10 cutStep=0.005
11 includeCutoffOne=true
12 includeZeroDepth=true
13 casOut={name="assess_details", caslib="casuser", replace=true}
14 rocOut={name="roc_details", caslib="casuser", replace=true}
15 fitStatOut={name="fit_details", caslib="casuser", replace=true};
16RUN;
17QUIT;
Résultat Attendu :
Des tables de sortie beaucoup plus détaillées (100 lignes pour le lift, pas de 0.005 pour le ROC) incluant explicitement les bornes (cutoff=1 et depth=0) pour un tracé graphique impeccable.