Publicado el :
Estadística CREATION_INTERNE

Evaluación de un modelo con objetivo binario

Este código también está disponible en: Deutsch English Français
En espera de validación
El procedimiento ASSESS de SAS© Visual Statistics es una herramienta poderosa para la evaluación del rendimiento de modelos predictivos, especialmente para objetivos binarios. Permite analizar la capacidad del modelo para distinguir las clases de eventos (por ejemplo, 'good' vs 'bad') a través de diversas métricas. Los conceptos clave incluyen:
  • Información ROC (Receiver Operating Characteristic): Análisis de la capacidad del modelo para separar los eventos de los no eventos en diferentes umbrales de probabilidad.
  • Información de Lift: Mide la eficacia del modelo comparando la proporción de eventos capturados por el modelo en relación con una selección aleatoria.
  • Estadísticas de ajuste (Fit Statistics): Diversas métricas que cuantifican el rendimiento global del modelo, como el error cuadrático o la pérdida logística.
Los ejemplos proporcionados ilustran cómo crear datos, utilizar opciones comunes (como el número de umbrales de corte y de grupos), escenarios avanzados con formatos personalizados y la integración con el entorno distribuido CAS para el procesamiento de grandes volúmenes de datos.
Análisis de datos

Type : CREATION_INTERNE


Los ejemplos utilizan datos sintéticos generados por un Data Step para crear variables de predicción (p_good, p_bad) y una variable objetivo binaria (good_bad). Un gran conjunto de datos también se genera directamente en CAS para el ejemplo avanzado a fin de demostrar la capacidad de procesamiento en grandes volúmenes de datos.

1 Bloque de código
PROC ASSESS Data
Explicación :
Este ejemplo ilustra el uso más simple del procedimiento ASSESS para evaluar un modelo. Después de establecer una conexión CAS y crear datos de puntuación sintéticos (con `p_good` como probabilidad de evento positivo y `good_bad` como objetivo), los datos se cargan en una tabla CAS llamada `score_data`. El procedimiento ASSESS se invoca luego especificando la variable de predicción (`p_good`) y la variable objetivo binaria (`good_bad`). Por defecto, el procedimiento calcula las métricas ROC y de lift básicas.
¡Copiado!
1/* Configuration CAS */
2cas;
3caslib _all_ assign;
4 
5/* Préparation des données: Création d'un jeu de données de score synthétiques */
6DATA work.score_data;
7 LENGTH good_bad $4;
8 INPUT _PartInd_ good_bad $ p_good p_bad;
9 DATALINES;
100 good 0.6675 0.3325
110 good 0.5189 0.4811
120 good 0.6852 0.3148
130 bad 0.0615 0.9385
140 bad 0.3053 0.6947
150 bad 0.6684 0.3316
160 good 0.6422 0.3578
170 good 0.6752 0.3248
180 good 0.5396 0.4604
190 good 0.4983 0.5017
200 bad 0.1916 0.8084
210 good 0.5722 0.4278
220 good 0.7099 0.2901
230 good 0.4642 0.5358
240 good 0.4863 0.5137
251 bad 0.4942 0.5058
261 bad 0.4863 0.5137
271 bad 0.4942 0.5058
281 good 0.6118 0.3882
291 good 0.5375 0.4625
301 good 0.8132 0.1868
311 good 0.6914 0.3086
321 good 0.5700 0.4300
331 good 0.8189 0.1811
341 good 0.2614 0.7386
351 good 0.1910 0.8090
361 good 0.5129 0.4871
371 good 0.8417 0.1583
381 good 0.5500 0.4500
39;
40RUN;
41 
42/* Charger les données dans la session CAS */
43PROC CASUTIL incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace;
44 load DATA=score_data outcasfmt;
45RUN;
46 
47/* Exemple 1 : Utilisation Basique de PROC ASSESS */
48PROC ASSESS DATA=casuser.score_data;
49 var p_good;
50 target good_bad;
51RUN;
2 Bloque de código
PROC ASSESS Data
Explicación :
Este ejemplo extiende el uso básico incluyendo opciones comunes para un análisis más detallado. `NCUTS=5` define 5 umbrales de corte para el análisis ROC, y `NBINS=5` especifica 5 grupos para el análisis de lift. `EVENT="good" LEVEL=NOMINAL` indica que 'good' es la clase de evento de interés para la variable objetivo nominal. La declaración `FITSTAT` se añade para calcular estadísticas de ajuste utilizando `p_bad` como probabilidad del evento de referencia ('bad').
¡Copiado!
1/* Configuration CAS (si non déjà configurée) */
2cas;
3caslib _all_ assign;
4 
5/* Préparation des données: Création d'un jeu de données de score synthétiques */
6DATA work.score_data;
7 LENGTH good_bad $4;
8 INPUT _PartInd_ good_bad $ p_good p_bad;
9 DATALINES;
100 good 0.6675 0.3325
110 good 0.5189 0.4811
120 good 0.6852 0.3148
130 bad 0.0615 0.9385
140 bad 0.3053 0.6947
150 bad 0.6684 0.3316
160 good 0.6422 0.3578
170 good 0.6752 0.3248
180 good 0.5396 0.4604
190 good 0.4983 0.5017
200 bad 0.1916 0.8084
210 good 0.5722 0.4278
220 good 0.7099 0.2901
230 good 0.4642 0.5358
240 good 0.4863 0.5137
251 bad 0.4942 0.5058
261 bad 0.4863 0.5137
271 bad 0.4942 0.5058
281 good 0.6118 0.3882
291 good 0.5375 0.4625
301 good 0.8132 0.1868
311 good 0.6914 0.3086
321 good 0.5700 0.4300
331 good 0.8189 0.1811
341 good 0.2614 0.7386
351 good 0.1910 0.8090
361 good 0.5129 0.4871
371 good 0.8417 0.1583
381 good 0.5500 0.4500
39;
40RUN;
41 
42/* Charger les données dans la session CAS */
43PROC CASUTIL incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace;
44 load DATA=score_data outcasfmt;
45RUN;
46 
47/* Exemple 2 : Utilisation de PROC ASSESS avec options courantes */
48PROC ASSESS DATA=casuser.score_data ncuts=5 nbins=5;
49 var p_good;
50 target good_bad / event="good" level=nominal;
51 fitstat pvar=p_bad / pevent="bad";
52RUN;
3 Bloque de código
PROC ASSESS Data
Explicación :
Este ejemplo avanzado muestra cómo personalizar y profundizar el análisis. Se utiliza un `PROC FORMAT` para crear un formato personalizado para la variable `_PartInd_`, lo que hace que las salidas sean más legibles durante el análisis por grupos. Los datos formateados se cargan luego en una nueva tabla CAS. La opción `NBINS=10` aumenta la granularidad del análisis de lift. La declaración `ROC` utiliza la opción `CUTOFF` para especificar umbrales de corte personalizados (de 0.1 a 0.9 en pasos de 0.1) y la opción `PLOTS` para generar gráficos (como la curva ROC). La declaración `BY _PartInd_` ejecuta análisis separados para cada partición de datos.
¡Copiado!
1/* Configuration CAS (si non déjà configurée) */
2cas;
3caslib _all_ assign;
4 
5/* Préparation des données: Création d'un jeu de données de score synthétiques */
6DATA work.score_data;
7 LENGTH good_bad $4;
8 INPUT _PartInd_ good_bad $ p_good p_bad;
9 DATALINES;
100 good 0.6675 0.3325
110 good 0.5189 0.4811
120 good 0.6852 0.3148
130 bad 0.0615 0.9385
140 bad 0.3053 0.6947
150 bad 0.6684 0.3316
160 good 0.6422 0.3578
170 good 0.6752 0.3248
180 good 0.5396 0.4604
190 good 0.4983 0.5017
200 bad 0.1916 0.8084
210 good 0.5722 0.4278
220 good 0.7099 0.2901
230 good 0.4642 0.5358
240 good 0.4863 0.5137
251 bad 0.4942 0.5058
261 bad 0.4863 0.5137
271 bad 0.4942 0.5058
281 good 0.6118 0.3882
291 good 0.5375 0.4625
301 good 0.8132 0.1868
311 good 0.6914 0.3086
321 good 0.5700 0.4300
331 good 0.8189 0.1811
341 good 0.2614 0.7386
351 good 0.1910 0.8090
361 good 0.5129 0.4871
371 good 0.8417 0.1583
381 good 0.5500 0.4500
39;
40RUN;
41 
42/* Charger les données dans la session CAS */
43PROC CASUTIL incaslib="WORK" outcaslib="CASUSER" outkeep=(_ALL_) replace;
44 load DATA=score_data outcasfmt;
45RUN;
46 
47/* Création d'un format personnalisé pour la variable _PartInd_ */
48PROC FORMAT;
49 value $partfmt '0' = 'Partition A'
50 '1' = 'Partition B';
51RUN;
52 
53DATA casuser.score_data_fmt;
54 SET casuser.score_data;
55 FORMAT _PartInd_ $partfmt.;
56RUN;
57 
58/* Exemple 3 : Cas Avancé de PROC ASSESS */
59PROC ASSESS DATA=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.9 BY 0.1 plots; /* Spécifie des seuils de coupure personnalisés et demande les tracés ROC */
64 BY _PartInd_;
65RUN;
4 Bloque de código
PROC ASSESS Data
Explicación :
Este ejemplo se centra en la integración con SAS Viya para el procesamiento de grandes volúmenes de datos. Se genera un conjunto de datos de 20,000 observaciones directamente en CAS, lo que resalta la capacidad de la plataforma para manejar datos masivos en memoria. La opción `NBINS=20` se utiliza para un análisis de lift más detallado. La declaración `ROC` incluye `ADJUSTFOR=good_bad(event="good")` para ajustar las métricas ROC en función de la distribución real de la variable objetivo, lo cual es crucial para conjuntos de datos desequilibrados. La tabla CAS temporal se elimina luego para limpiar el entorno.
¡Copiado!
1/* Configuration CAS (si non déjà configurée) */
2cas;
3caslib _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 */
8DATA casuser.large_score_data;
9 DO _PartInd_ = 0 to 1;
10 DO i = 1 to 10000; /* Créer 20,000 observations */
11 good_bad = ifc(ranuni(0) > 0.7, 'bad', 'good');
12 p_good = ranuni(0); /* Probabilité de 'good' */
13 p_bad = 1 - p_good; /* Probabilité de 'bad' */
14 OUTPUT;
15 END;
16 END;
17 drop i;
18RUN;
19 
20PROC ASSESS DATA=casuser.large_score_data nbins=20;
21 var p_good;
22 target good_bad / event="good" level=nominal;
23 fitstat pvar=p_bad / pevent="bad";
24 roc / adjustfor=good_bad(event="good") plots; /* ajuster pour la distribution de la cible */
25 BY _PartInd_;
26RUN;
27 
28/* Nettoyage du dataset temporaire CAS */
29PROC CAS;
30 droptable "large_score_data" caslib="CASUSER";
31RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.