Scénario de test & Cas d'usage
Calcul précis des percentiles et quantiles.
Découvrir toutes les actions de percentileCré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.
| 1 | DATA 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; |
| 13 | RUN; |
| 1 | PROC 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}; |
| 10 | RUN; |
| 11 | QUIT; |
| 1 | PROC 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}; |
| 9 | RUN; |
| 10 | QUIT; |
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.