percentile assess

Scénario Performance : Évaluation d'un modèle de détection de fraude avec pondération et regroupement

Scénario de test & Cas d'usage

Contexte Métier

Une institution financière doit évaluer un modèle de détection de fraude sur un grand volume de transactions. Il est crucial d'évaluer la performance du modèle non seulement globalement, mais aussi par type de transaction (en ligne, en magasin). De plus, les fraudes sur des montants élevés doivent être considérées comme plus critiques. On utilise donc le montant de la transaction comme poids dans l'évaluation.
À propos du Set : percentile

Calcul précis des percentiles et quantiles.

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

Création d'une table volumineuse (200 000 transactions) simulant des transactions financières. La table inclut un identifiant, un type de transaction, le montant, un indicateur de fraude ('est_fraude') et un score de fraude. Le montant servira de poids.

Copié !
1DATA casuser.transactions_fraude (promote=yes);
2 call streaminit(456);
3 array types_trans{2} $10 ('EN_LIGNE', 'MAGASIN');
4 DO transaction_id = 1 to 200000;
5 type_transaction = types_trans[rand('INTEGER', 1, 2)];
6 montant = 10 + rand('UNIFORM') * 2000;
7 est_fraude = rand('BERNOULLI', 0.02);
8 IF est_fraude = 1 THEN score_fraude = 0.6 + rand('UNIFORM')*0.4;
9 ELSE score_fraude = rand('UNIFORM')*0.5;
10 OUTPUT;
11 END;
12 FORMAT montant dollar8.2;
13RUN;

Étapes de réalisation

1
Évaluation du modèle en utilisant le montant de la transaction comme poids (`weight`) pour donner plus d'importance aux erreurs sur les transactions de grande valeur. La méthode `ITERATIVE` est choisie pour une meilleure performance sur le grand volume de données.
Copié !
1PROC CAS;
2 percentile.assess
3 TABLE='transactions_fraude',
4 response='est_fraude',
5 event='1',
6 pVar={'score_fraude'},
7 weight='montant',
8 method='ITERATIVE',
9 fitStatOut={name='fit_stats_fraude_pondere', replace=true};
10RUN;
11QUIT;
2
Analyse comparative de la performance du modèle par `type_transaction`. L'option `groupBy` permet de générer des statistiques d'évaluation distinctes pour les transactions 'EN_LIGNE' et 'MAGASIN', afin de vérifier si le modèle est aussi performant pour chaque segment.
Copié !
1PROC CAS;
2 percentile.assess
3 TABLE={name='transactions_fraude', groupBy={'type_transaction'}},
4 response='est_fraude',
5 event='1',
6 pVar={'score_fraude'},
7 weight='montant',
8 fitStatOut={name='fit_stats_fraude_par_type', replace=true};
9RUN;
10QUIT;

Résultat Attendu


L'action doit s'exécuter rapidement malgré le volume de données. La première étape doit produire des statistiques d'ajustement pondérées. La seconde étape doit créer la table `fit_stats_fraude_par_type` contenant des lignes de statistiques distinctes pour chaque `type_transaction`, permettant de comparer les métriques (ex: AUC, Gini) entre les transactions en ligne et en magasin.