Scénario de test & Cas d'usage
Entraînement de réseaux de neurones artificiels classiques.
Découvrir toutes les actions de neuralNetCré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.
| 1 | DATA 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; |
| 14 | RUN; |
| 15 | |
| 16 | PROC CASUTIL; |
| 17 | load DATA=transactions_data outcaslib=casuser casout='TRANSACTIONS_LARGE' replace; |
| 18 | QUIT; |
| 1 | PROC 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}; |
| 19 | QUIT; |
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.