bayesianNetClassifier bnet

Prueba de Estrategias de Gestión de Datos Faltantes en un Modelo de Riesgo Crediticio

Scénario de test & Cas d'usage

Contexto empresarial

Una entidad financiera necesita construir un modelo de riesgo crediticio, pero sus datos de origen contienen valores faltantes en variables clave como el historial laboral y el nivel de ingresos. El objetivo es probar y validar cómo las diferentes estrategias de manejo de valores faltantes (`LEVEL` vs. `IMPUTE`) impactan en la estructura y el entrenamiento del modelo.
Sobre el conjunto : bayesianNetClassifier

Clasificación utilizando redes bayesianas.

Descubrir todas las acciones de bayesianNetClassifier
Preparación de datos

Crea una tabla de solicitudes de crédito con valores faltantes introducidos intencionadamente en una variable nominal (`Historial_Laboral`) y una de intervalo (`Nivel_Ingresos`).

¡Copiado!
1DATA casuser.SOLICITUDES_CREDITO;
2 call streaminit(999);
3 LENGTH Historial_Laboral $ 10 Riesgo_Credito $ 6;
4 DO i = 1 to 1500;
5 IF rand('uniform') < 0.7 THEN Historial_Laboral = 'Estable'; ELSE Historial_Laboral = 'Inestable';
6 IF rand('uniform') < 0.15 THEN call missing(Historial_Laboral);
7 Nivel_Ingresos = 20000 + 80000 * rand('uniform');
8 IF rand('uniform') < 0.2 THEN call missing(Nivel_Ingresos);
9 IF (Historial_Laboral = 'Inestable' or Nivel_Ingresos < 30000) THEN Riesgo_Credito = 'Alto';
10 ELSE IF (Nivel_Ingresos > 70000) THEN Riesgo_Credito = 'Bajo';
11 ELSE Riesgo_Credito = 'Medio';
12 IF missing(Nivel_Ingresos) and Historial_Laboral = 'Inestable' THEN Riesgo_Credito = 'Alto';
13 OUTPUT;
14 END;
15RUN;

Étapes de réalisation

1
Carga de la tabla de solicitudes de crédito con datos faltantes en CAS.
¡Copiado!
1PROC CAS;
2 TABLE.loadTable /
3 caslib='CASUSER' path='SOLICITUDES_CREDITO.sashdat' casout={name='SOLICITUDES_CREDITO', replace=true};
4RUN;
2
Primer test: Entrenar el modelo tratando los valores faltantes nominales como un nivel distinto (`missingNom='LEVEL'`) y imputando los de intervalo (`missingInt='IMPUTE'`).
¡Copiado!
1PROC CAS;
2 bayesianNetClassifier.bnet /
3 TABLE={name='SOLICITUDES_CREDITO'},
4 target='Riesgo_Credito',
5 inputs={{name='Historial_Laboral'}, {name='Nivel_Ingresos'}},
6 nominals={'Historial_Laboral', 'Riesgo_Credito'},
7 structures={'TAN'},
8 missingNom='LEVEL',
9 missingInt='IMPUTE',
10 numBin=4,
11 outNetwork={name='RED_RIESGO_LEVEL', replace=true},
12 saveState={name='MODELO_RIESGO_LEVEL', replace=true};
13RUN;
3
Segundo test: Entrenar el modelo imputando tanto los valores faltantes nominales (`missingNom='IMPUTE'`) como los de intervalo (`missingInt='IMPUTE'`).
¡Copiado!
1PROC CAS;
2 bayesianNetClassifier.bnet /
3 TABLE={name='SOLICITUDES_CREDITO'},
4 target='Riesgo_Credito',
5 inputs={{name='Historial_Laboral'}, {name='Nivel_Ingresos'}},
6 nominals={'Historial_Laboral', 'Riesgo_Credito'},
7 structures={'TAN'},
8 missingNom='IMPUTE',
9 missingInt='IMPUTE',
10 numBin=4,
11 outNetwork={name='RED_RIESGO_IMPUTE', replace=true},
12 saveState={name='MODELO_RIESGO_IMPUTE', replace=true};
13RUN;

Resultado esperado


Ambas ejecuciones deben completarse correctamente. Para el primer test, la tabla de red `RED_RIESGO_LEVEL` debe mostrar que la variable `Historial_Laboral` tiene un nivel adicional correspondiente a los valores faltantes. Para el segundo test, el modelo se entrenará con datos imputados. La comparación de las tablas `MODELO_RIESGO_LEVEL` y `MODELO_RIESGO_IMPUTE` (o sus tablas de red) debería reflejar las diferentes estrategias de manejo de datos faltantes, resultando en distintas probabilidades condicionales.