neuralNet annTrain

Inkrementelles Training eines Betrugserkennungsmodells mit neuen Daten

Scénario de test & Cas d'usage

Geschäftskontext

Ein Finanzinstitut verfügt über ein bestehendes neuronales Netzwerk zur Betrugserkennung, das auf historischen Transaktionsdaten trainiert wurde. Um mit neuen Betrugsmustern Schritt zu halten, muss das Modell regelmäßig mit neuen Daten aktualisiert werden. Anstatt das Modell jedes Mal von Grund auf neu zu trainieren, soll das Training mit den neuen Daten fortgesetzt werden, um Zeit und Rechenleistung zu sparen.
Über das Set : neuralNet

Training klassischer künstlicher neuronaler Netze.

Entdecken Sie alle Aktionen von neuralNet
Datenaufbereitung

Erstellung von zwei Datensätzen: einem großen historischen Transaktionsdatensatz und einem kleineren, neueren Datensatz.

Kopiert!
1DATA casuser.TRANSAKTIONEN_HISTORISCH (obs=20000) casuser.TRANSAKTIONEN_NEU (obs=5000);
2 call streaminit(987);
3 DO i = 1 to 25000;
4 BETRAG = rand('LOGNORMAL', 3, 1);
5 STUNDE_TAG = int(rand('UNIFORM')*24);
6 TAG_WOCHE = int(rand('UNIFORM')*7);
7 LAND_CODE = ceil(rand('UNIFORM')*10);
8 prob_betrug = 0.01;
9 IF (BETRAG > 500 and (STUNDE_TAG < 6 or STUNDE_TAG > 22)) THEN prob_betrug = 0.4;
10 IF (LAND_CODE > 8) THEN prob_betrug = prob_betrug * 2;
11 IST_BETRUG = rand('BERNOULLI', prob_betrug);
12 IF i <= 20000 THEN OUTPUT casuser.TRANSAKTIONEN_HISTORISCH;
13 ELSE OUTPUT casuser.TRANSAKTIONEN_NEU;
14 END;
15RUN;

Étapes de réalisation

1
Laden beider Transaktionsdatensätze in den CAS-Server.
Kopiert!
1PROC CASUTIL;
2 load DATA=casuser.TRANSAKTIONEN_HISTORISCH casout='TRANSAKTIONEN_HISTORISCH' replace;
3 load DATA=casuser.TRANSAKTIONEN_NEU casout='TRANSAKTIONEN_NEU' replace;
4RUN;
5QUIT;
2
Initiales Training des Modells auf dem historischen Datensatz und Speichern der Modellgewichte.
Kopiert!
1PROC CAS;
2neuralNet.annTrain /
3 TABLE={name='TRANSAKTIONEN_HISTORISCH'},
4 inputs={{name='BETRAG'}, {name='STUNDE_TAG'}, {name='TAG_WOCHE'}},
5 target='IST_BETRUG',
6 nominals={{name='LAND_CODE'}, {name='IST_BETRUG'}},
7 hiddens={50, 20},
8 nloOpts={maxIters=30, algorithm='LBFGS'},
9 seed=321,
10 modelTable={name='BETRUGSMODELL_GEWICHTE', replace=true};
11RUN;
12QUIT;
3
Fortsetzen des Trainings mit dem neuen Datensatz unter Verwendung der zuvor gespeicherten Gewichte.
Kopiert!
1PROC CAS;
2neuralNet.annTrain /
3 TABLE={name='TRANSAKTIONEN_NEU'},
4 inputs={{name='BETRAG'}, {name='STUNDE_TAG'}, {name='TAG_WOCHE'}},
5 target='IST_BETRUG',
6 nominals={{name='LAND_CODE'}, {name='IST_BETRUG'}},
7 hiddens={50, 20}, /* Architektur muss übereinstimmen */
8 modelTable={name='BETRUGSMODELL_GEWICHTE'}, /* Gewichte laden */
9 resume=TRUE, /* Training fortsetzen */
10 nloOpts={maxIters=20, algorithm='LBFGS'},
11 seed=654,
12 saveState={name='BETRUGSMODELL_FINAL_STATE', replace=true};
13RUN;
14QUIT;

Erwartetes Ergebnis


Der zweite `annTrain`-Lauf beginnt nicht mit zufälligen Gewichten. Der anfängliche Fehler im Protokoll des zweiten Laufs ist deutlich niedriger als der anfängliche Fehler des ersten Laufs, was beweist, dass das Training erfolgreich fortgesetzt wurde. Das Training konvergiert schnell. Eine endgültige Zustandstabelle 'BETRUGSMODELL_FINAL_STATE' wird erstellt, die ein Modell repräsentiert, das aus beiden Datensätzen gelernt hat.