Scénario de test & Cas d'usage
Clasificación utilizando redes bayesianas.
Descubrir todas las acciones de bayesianNetClassifierCrea una tabla de solicitudes de crédito con valores faltantes introducidos intencionadamente en una variable nominal (`Historial_Laboral`) y una de intervalo (`Nivel_Ingresos`).
| 1 | DATA 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; |
| 15 | RUN; |
| 1 | PROC CAS; |
| 2 | TABLE.loadTable / |
| 3 | caslib='CASUSER' path='SOLICITUDES_CREDITO.sashdat' casout={name='SOLICITUDES_CREDITO', replace=true}; |
| 4 | RUN; |
| 1 | PROC 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}; |
| 13 | RUN; |
| 1 | PROC 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}; |
| 13 | RUN; |
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.