bayesianNetClassifier bnet

Scénario Performance : Détection de Fraude avec Sélection de Variables et Auto-ajustement

Scénario de test & Cas d'usage

Contexte Métier

Une société de crédit souhaite développer un modèle de détection de transactions frauduleuses. Le jeu de données contient un très grand nombre de variables potentiellement explicatives. L'objectif est de laisser l'algorithme sélectionner les variables les plus pertinentes et trouver la meilleure structure de réseau pour maximiser la performance de détection.
À propos du Set : bayesianNetClassifier

Classification utilisant des réseaux bayésiens.

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

Création d'une table de transactions large avec plus de 50 variables (la plupart étant du bruit) pour simuler un problème de haute dimensionnalité.

Copié !
1DATA casuser.transactions_fraude;
2 call streaminit(987);
3 array bruits{50} bruit1-bruit50;
4 DO id_transaction = 1 to 10000;
5 montant = rand('lognormal', 4, 1);
6 heure = rand('integer', 23);
7 pays_origine = byte(65+rand('integer', 4)); /* A, B, C, D, E */
8 DO i=1 to 50; bruits{i} = rand('normal'); END;
9 /* Cible */
10 is_fraude = 0;
11 IF (montant > 200 and heure < 6 and pays_origine='E') or (montant > 500) THEN DO;
12 IF rand('uniform') < 0.8 THEN is_fraude = 1;
13 END;
14 ELSE IF rand('uniform') < 0.01 THEN is_fraude = 1;
15 OUTPUT;
16 END;
17 keep id_transaction montant heure pays_origine is_fraude bruit1-bruit50;
18RUN;

Étapes de réalisation

1
Chargement de la table de transactions large dans CAS.
Copié !
1PROC CASUTIL;
2 load DATA=casuser.transactions_fraude outcaslib='casuser' casout='transactions_fraude' replace;
3RUN;
4QUIT;
2
Entraînement d'un modèle en activant la présélection, la sélection de variables avancée ('varSelect'='THREE' pour identifier le 'Markov Blanket') et l'auto-ajustement ('bestModel'=true) sur plusieurs structures et niveaux de significativité alpha.
Copié !
1PROC CAS;
2 ACTION bayesianNetClassifier.bnet /
3 TABLE={name='transactions_fraude'},
4 target='is_fraude',
5 inputs={{name='montant'}, {name='heure'}, {name='pays_origine'}}, /* Le reste est ajouté par l'option 'allother' implicite */
6 nominals={{name='is_fraude'}, {name='pays_origine'}},
7 partByFrac={test=0.3, seed=111},
8 preScreening='ONE', /* Active la présélection */
9 varSelect='THREE', /* Sélectionne le Markov Blanket de la cible */
10 structures={'NAIVE', 'TAN', 'PC'}, /* Teste plusieurs structures */
11 alpha={0.01, 0.05, 0.2}, /* Teste plusieurs seuils */
12 bestModel=true, /* Garde uniquement le meilleur modèle */
13 display={'TunerHistory', 'BestModelInfo', 'SelectedInputs'};
14RUN;
15QUIT;

Résultat Attendu


L'action exécute un processus de sélection de variables et d'auto-ajustement. La table 'SelectedInputs' montre que seules quelques variables (proches de 'montant', 'heure', 'pays_origine') ont été retenues parmi les 50+ variables initiales. La table 'TunerHistory' liste les performances de chaque combinaison de paramètres testée. La table 'BestModelInfo' décrit la configuration du modèle final retenu, qui est celui ayant le meilleur taux de classification sur les données de test. Le processus a réussi à ignorer le bruit et à construire un modèle performant de manière automatisée.