neuralNet annTrain

Scénario Performance : Détection de Fraude sur Données Transactionnelles Déséquilibrées

Scénario de test & Cas d'usage

Contexte Métier

Une institution financière doit détecter les transactions par carte de crédit frauduleuses en temps réel. Le défi majeur est que les fraudes sont des événements très rares (moins de 1% des transactions), ce qui rend le modèle difficile à entraîner. Le modèle doit être performant et capable de gérer ce déséquilibre de classe pour éviter de simplement prédire 'non-fraude' pour toutes les transactions.
À propos du Set : neuralNet

Entraînement de réseaux de neurones artificiels classiques.

Découvrir toutes les actions de neuralNet
Préparation des Données

Création d'un grand volume de données de transactions (100 000) avec une très faible proportion de fraudes (0.5%). Les caractéristiques incluent le montant, l'heure, et si la transaction est en ligne.

Copié !
1DATA transactions_data;
2 call streaminit(987);
3 DO i = 1 to 100000;
4 montant = round(rand('LOGNORMAL', 3.5, 0.8), 0.01);
5 heure_transaction = rand('UNIFORM') * 24;
6 transaction_en_ligne = ifn(rand('UNIFORM') > 0.3, 1, 0);
7 est_fraude = 0;
8 /* Les fraudes sont rares et ont des schémas spécifiques (montants élevés, la nuit) */
9 IF (rand('UNIFORM') < 0.005) or (montant > 800 and heure_transaction < 5 and transaction_en_ligne = 1 and rand('UNIFORM') > 0.2) THEN DO;
10 est_fraude = 1;
11 END;
12 OUTPUT;
13 END;
14RUN;
15 
16PROC CASUTIL;
17 load DATA=transactions_data outcaslib=casuser casout='TRANSACTIONS_LARGE' replace;
18QUIT;

Étapes de réalisation

1
Entraînement d'un réseau de neurones en utilisant l'option `inversePriors` pour contrebalancer le poids des classes rares (fraudes) dans la fonction de coût. Utilisation de l'optimiseur ADAM et du `dropOut` pour la régularisation.
Copié !
1PROC CAS;
2 ACTION neuralNet.annTrain /
3 TABLE={name='TRANSACTIONS_LARGE'},
4 inputs={{name='montant'}, {name='heure_transaction'}, {name='transaction_en_ligne'}},
5 target='est_fraude',
6 nominals={{name='transaction_en_ligne'}, {name='est_fraude'}},
7 hiddens={50, 25},
8 arch='MLP',
9 std='STD',
10 errorFunc='ENTROPY',
11 inversePriors=TRUE, /* Gestion du déséquilibre */
12 dropOut=0.1, /* Régularisation */
13 seed=2024,
14 nloOpts={
15 algorithm='ADAM',
16 optmlOpt={maxIters=50, miniBatchSize=256}
17 },
18 casOut={name='fraude_model_weights', replace=true};
19QUIT;

Résultat Attendu


L'action s'exécute sur le grand volume de données et entraîne un modèle. La table de résultats 'FitStatistics' devrait montrer une performance (ex: Misclassification Rate) raisonnable pour la classe minoritaire (est_fraude=1), indiquant que l'option `inversePriors` a correctement fonctionné pour empêcher le modèle d'ignorer les cas de fraude. Le temps d'exécution est surveillé pour valider la performance de l'action sur un jeu de données volumineux.