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!
/* 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 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!
/* 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 */
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!
/* 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 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!
/* 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;
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.