Scénario de test & Cas d'usage
Agrégation de données et calculs statistiques sommaires.
Découvrir toutes les actions de aggregationGénération d'une table volumineuse (1 million de transactions) simulant des opérations par carte de crédit, avec des schémas spécifiques à détecter.
| 1 | DATA casuser.transactions_volumineuses(keep=id_carte montant ts); |
| 2 | informat ts datetime20.; |
| 3 | FORMAT ts datetime20.; |
| 4 | DO i = 1 to 1000000; |
| 5 | id_carte = ceil(rand('UNIFORM') * 50000); |
| 6 | montant = round(rand('UNIFORM') * 200, 0.01); |
| 7 | ts = '01JAN2023:00:00:00'dt + (i * 2); |
| 8 | OUTPUT; |
| 9 | END; |
| 10 | /* Ajout d'un cas de fraude à tester */ |
| 11 | DO i = 1 to 5; |
| 12 | id_carte = 99999; |
| 13 | montant = i; |
| 14 | ts = '10JAN2023:14:30:00'dt + (i * 60); /* 5 transactions en 5 minutes */ |
| 15 | OUTPUT; |
| 16 | END; |
| 17 | RUN; |
| 1 | PROC CAS; |
| 2 | aggregation.aggregate / |
| 3 | TABLE={name='transactions_volumineuses', groupBy={'id_carte'}}, |
| 4 | id='ts', |
| 5 | interval='HOUR', |
| 6 | varSpecs={ |
| 7 | {name='montant', agg='N', columnNames={'Nb_Transactions'}}, |
| 8 | {name='montant', agg='SUM', columnNames={'Total_Montant'}} |
| 9 | }, |
| 10 | casOut={name='agregat_fraude_horaire', replace=true}; |
| 11 | RUN; |
| 12 | QUIT; |
| 1 | PROC CAS; |
| 2 | TABLE.filter / |
| 3 | TABLE={name='agregat_fraude_horaire', where='Nb_Transactions > 3'}, |
| 4 | casOut={name='cartes_suspectes', replace=true}; |
| 5 | RUN; |
| 6 | QUIT; |
L'action 'aggregate' traite efficacement la table volumineuse et crée la table 'agregat_fraude_horaire'. La seconde étape filtre cette table pour produire 'cartes_suspectes', qui isole les cartes ayant un comportement anormal. Le scénario valide la capacité de l'action à gérer une charge de travail importante et à produire un résultat intermédiaire essentiel pour un processus de détection de fraude.