percentile assess

Evaluación de Modelo con Datos Faltantes, Ponderaciones y Puntos de Corte Personalizados

Scénario de test & Cas d'usage

Contexto empresarial

Un hospital analiza un modelo que predice el riesgo de reingreso de pacientes. Los datos son imperfectos: algunos pacientes tienen un estado de reingreso desconocido (missing) y los pacientes de alto riesgo (UCI) deben tener más peso en la evaluación. El objetivo es evaluar el modelo manejando estas complejidades y usando un punto de corte específico para la clasificación.
Sobre el conjunto : percentile

Cálculo preciso de percentiles y cuantiles.

Descubrir todas las acciones de percentile
Preparación de datos

Crea una tabla de pacientes con valores faltantes en la variable objetivo (`Reingreso_30d`), una variable de ponderación (`Peso_Paciente`) y dos predicciones del modelo: la probabilidad cruda (`Prob_Reingreso`) y la clase predicha (`Clase_Predicha`).

¡Copiado!
1DATA casuser.pacientes_reingreso;
2 call streaminit(789);
3 DO id_paciente = 1 to 10000;
4 estancia_uci = rand('binomial', 0.2, 1);
5 edad = 40 + rand('uniform') * 45;
6 /* Pacientes de UCI tienen más peso */
7 Peso_Paciente = ifn(estancia_uci=1, 2.5, 1.0);
8 prob_real = 0.15 + ifn(estancia_uci=1, 0.2, 0) + (edad / 200);
9 Prob_Reingreso = prob_real + rand('normal', 0, 0.08);
10 IF Prob_Reingreso < 0 THEN Prob_Reingreso = 0;
11 IF Prob_Reingreso > 1 THEN Prob_Reingreso = 1;
12 /* Simular valores faltantes en el objetivo */
13 IF rand('uniform') < 0.1 THEN Reingreso_30d = .;
14 ELSE Reingreso_30d = rand('binomial', prob_real, 1);
15 /* Simular una clase predicha por el modelo */
16 Clase_Predicha = ifn(Prob_Reingreso > 0.35, 1, 0);
17 OUTPUT;
18 END;
19RUN;

Étapes de réalisation

1
Carga de la tabla de pacientes en memoria CAS.
¡Copiado!
1 
2PROC CASUTIL;
3load
4DATA=casuser.pacientes_reingreso casout='pacientes_reingreso' replace;
5QUIT;
6 
2
Primera evaluación excluyendo explícitamente los pacientes con objetivo faltante y aplicando la ponderación. Se usa un 'cutStep' pequeño para una curva ROC más granular.
¡Copiado!
1PROC CAS;
2 percentile.assess
3 TABLE='pacientes_reingreso',
4 response='Reingreso_30d',
5 event='1',
6 pVar={'Prob_Reingreso'},
7 pEvent={'1'},
8 weight='Peso_Paciente',
9 noMissingTarget=true,
10 cutStep=0.005,
11 rocOut={name='roc_ponderado', replace=true};
12RUN;
13QUIT;
3
Segunda evaluación utilizando 'pResponse' para evaluar la matriz de confusión basada en la clasificación directa del modelo ('Clase_Predicha'), no en la probabilidad.
¡Copiado!
1PROC CAS;
2 percentile.assess
3 TABLE='pacientes_reingreso',
4 response='Reingreso_30d',
5 event='1',
6 pResponse='Clase_Predicha',
7 noMissingTarget=true,
8 fitStatOut={name='fitstat_clase_predicha', replace=true};
9RUN;
10QUIT;

Resultado esperado


La primera ejecución debe producir una tabla ROC (`roc_ponderado`) calculada únicamente sobre los pacientes con datos completos y donde los pacientes de UCI han influido más en las métricas. La segunda ejecución debe generar una tabla de estadísticas de ajuste (`fitstat_clase_predicha`) que refleje el rendimiento del modelo basado en la clasificación binaria predefinida (`Clase_Predicha`), mostrando métricas como Sensibilidad y Especificidad para ese punto de corte implícito. Esto valida la capacidad de la acción para manejar datos complejos y diferentes modos de evaluación.