bayesianNetClassifier bnet

Vorhersage von Patienten-Wiedereinweisungen mit unvollständigen Daten

Scénario de test & Cas d'usage

Geschäftskontext

Ein Krankenhaus möchte das Risiko einer ungeplanten Wiedereinweisung von Patienten innerhalb von 30 Tagen nach der Entlassung vorhersagen. Die Patientendaten sind oft unvollständig und enthalten fehlende Werte bei wichtigen Indikatoren wie Blutdruck (intervall) und Raucherstatus (nominal). Dieser Test validiert die Fähigkeit der Aktion, mit fehlenden Daten umzugehen, indem sie diese imputiert oder als separate Kategorie behandelt.
Über das Set : bayesianNetClassifier

Klassifikation mit Bayes-Netzen.

Entdecken Sie alle Aktionen von bayesianNetClassifier
Datenaufbereitung

Erstellung einer Patiententabelle mit fehlenden Werten in den Variablen 'blutdruck_systolisch' und 'raucherstatus'.

Kopiert!
1DATA work.patienten_daten;
2call streaminit(456);
3DO patient_id = 1 to 2000;
4 alter = 40 + floor(rand('Uniform') * 45);
5 IF rand('Uniform') < 0.7 THEN geschlecht = 'M'; ELSE geschlecht = 'W';
6 /* 20% fehlende Blutdruckwerte */
7 IF rand('Uniform') < 0.8 THEN blutdruck_systolisch = 100 + rand('Normal', 25, 10); ELSE blutdruck_systolisch = .;
8 /* 15% fehlende Raucherstatus-Werte */
9 rand_raucher = rand('Uniform');
10 IF rand_raucher < 0.5 THEN raucherstatus = 'Nichtraucher';
11 ELSE IF rand_raucher < 0.85 THEN raucherstatus = 'Raucher';
12 ELSE raucherstatus = ''; /* Fehlend */
13 wiedereinweisung_wahrscheinlichkeit = 1 / (1 + exp(-( -3 + (alter/20) + (blutdruck_systolisch/100) + (raucherstatus='Raucher') )));
14 IF rand('Uniform') < wiedereinweisung_wahrscheinlichkeit THEN wiedereinweisung_30t = 1; ELSE wiedereinweisung_30t = 0;
15 OUTPUT;
16END;
17RUN;

Étapes de réalisation

1
Laden der Patientendaten mit fehlenden Werten in CAS.
Kopiert!
1 
2PROC CASUTIL;
3load
4DATA=work.patienten_daten outcaslib='casuser' casout='PATIENTEN_DATEN' replace;
5RUN;
6 
2
Ausführen der bnet-Aktion mit Imputation für Intervallvariablen ('missingInt'='IMPUTE') und Behandlung fehlender Werte als neues Level für nominale Variablen ('missingNom'='LEVEL').
Kopiert!
1PROC CAS;
2bayesianNetClassifier.bnet /
3 TABLE={caslib='casuser', name='PATIENTEN_DATEN'},
4 target='wiedereinweisung_30t',
5 inputs={'alter', 'geschlecht', 'blutdruck_systolisch', 'raucherstatus'},
6 nominals={'geschlecht', 'raucherstatus', 'wiedereinweisung_30t'},
7 missingInt='IMPUTE',
8 missingNom='LEVEL',
9 structures={'MB'},
10 OUTPUT={casout={caslib='casuser', name='patienten_vorhersage', replace=true}, copyvars={'patient_id'}},
11 outNetwork={caslib='casuser', name='bnet_patienten_netzwerk', replace=true};
12RUN;
3
Überprüfen der Ausgabetabelle, um sicherzustellen, dass für alle ursprünglichen Zeilen Vorhersagen generiert wurden.
Kopiert!
1PROC CAS;
2TABLE.fetch / TABLE={caslib='casuser', name='patienten_vorhersage'};
3TABLE.numRows / TABLE={caslib='casuser', name='patienten_vorhersage'};
4TABLE.numRows / TABLE={caslib='casuser', name='PATIENTEN_DATEN'};
5RUN;

Erwartetes Ergebnis


Die Aktion wird ohne Fehler ausgeführt. Die Ausgabetabelle 'patienten_vorhersage' enthält die gleiche Anzahl von Zeilen wie die Eingabetabelle 'PATIENTEN_DATEN', was zeigt, dass die Beobachtungen mit fehlenden Werten nicht verworfen, sondern wie angegeben verarbeitet wurden. Das Modell hat gelernt, fehlende Werte als Information zu nutzen.