ecm ecm

Stress-Test Risque Opérationnel Bancaire (Haut Volume)

Scénario de test & Cas d'usage

Contexte Métier

Une banque systémique doit modéliser les pertes opérationnelles sur 5 types d'incidents (Fraude externe, Panne IT, Juridique, RH, Dommages aux actifs). Le régulateur exige une simulation sur 1 million de scénarios pour garantir la précision des queues de distribution extrêmes.
Préparation des Données

Simulation d'une copule à 5 dimensions avec 1 million de lignes et 5 tables de pertes marginales distinctes.

Copié !
1 
2DATA work.copule_banque;
3call streaminit(777);
4array u[5];
5DO i=1 to 1000000;
6DO j=1 to 5;
7u[j]=rand('Uniform');
8END;
9OUTPUT;
10END;
11 
12RUN;
13%macro gen_marge(nom, loi, p1, p2);
14 
15DATA work.&nom;
16call streaminit(1);
17DO i=1 to 2000;
18perte=rand("&loi", &p1, &p2);
19OUTPUT;
20END;
21 
22RUN;
23%mend;
24%gen_marge(m_fraude, Weibull, 1.5, 5000);
25%gen_marge(m_it, Gamma, 3, 10000);
26%gen_marge(m_juridique, Lognormal, 9, 2);
27%gen_marge(m_rh, Exponential, 2000, 0);
28%gen_marge(m_actifs, Gamma, 1, 10000);
29 
30PROC CAS;
31upload path="work.copule_banque" casout={name="copule_1m", replace=true};
32upload path="work.m_fraude" casout={name="m_fraude", replace=true};
33upload path="work.m_it" casout={name="m_it", replace=true};
34upload path="work.m_juridique" casout={name="m_juridique", replace=true};
35upload path="work.m_rh" casout={name="m_rh", replace=true};
36upload path="work.m_actifs" casout={name="m_actifs", replace=true};
37 
38RUN;
39 

Étapes de réalisation

1
Exécution ECM Haute Performance avec compression et graine fixe
Copié !
1 
2PROC CAS;
3ecm.ecm / copulaSample={name="copule_1m"} analysisVariables={"u1", "u2", "u3", "u4", "u5"} marginals={{TABLE={name="m_fraude"}, sampleVarName="perte", idVarValue="u1"}, {TABLE={name="m_it"}, sampleVarName="perte", idVarValue="u2"}, {TABLE={name="m_juridique"}, sampleVarName="perte", idVarValue="u3"}, {TABLE={name="m_rh"}, sampleVarName="perte", idVarValue="u4"}, {TABLE={name="m_actifs"}, sampleVarName="perte", idVarValue="u5"}} seed=12345 bodySampleFrac=0.5 shuffleData=true OUTPUT={outSample={name="pertes_banque_1m", compress=true, replace=true}};
4 
5RUN;
6 

Résultat Attendu


L'action doit traiter le million de lignes sans erreur mémoire, produire une table compressée 'pertes_banque_1m', et les résultats doivent être identiques à chaque exécution grâce au paramètre seed=12345.