ecm

ecm

Description

L'action `ecm` (Economic Capital Modeling) est conçue pour estimer la distribution de la perte agrégée (globale) d'une entreprise. Elle combine les résultats d'une simulation de copule (qui modélise la structure de dépendance entre les risques) avec les distributions empiriques marginales des pertes pour chaque ligne de métier. Cette approche est fondamentale pour calculer le capital économique nécessaire pour couvrir les risques extrêmes (queue de distribution).

ecm.ecm <result=results> <status=rc> / analysisVariables={"string-1" <, "string-2", ...>}, bodySampleFrac=double, copulaSample={caslib="string", dataSourceOptions={key-1=value-1 <, key-2=value-2, ...>}, importOptions={fileType="ANY" | ...}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer} <, ...>}, where="where-expression", whereTable={casLib="string", dataSourceOptions={...}, importOptions={...}, name="table-name", vars={{...}}, where="where-expression"}}, display={caseSensitive=TRUE | FALSE, exclude=TRUE | FALSE, excludeAll=TRUE | FALSE, keyIsPath=TRUE | FALSE, names={"string-1" <, "string-2", ...>}, pathType="LABEL" | "NAME", traceNames=TRUE | FALSE}, doExactFinalCount=TRUE | FALSE, edfAccuracy=double, marginalDrawId=integer, marginals={{drawId=integer, idVarValue="string", percentileMethod=integer, sampleVarName="string", table={caslib="string", dataSourceOptions={...}, importOptions={...}, name="table-name", where="where-expression", whereTable={...}}} <, ...>}, optMaxIter=integer, optTolerance=double, output={outSample={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1" <, ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, ...>}}, varName="string", writeMarginals=TRUE | FALSE}, outputTables={groupByVarsRaw=TRUE | FALSE, includeAll=TRUE | FALSE, names={"string-1" <, ...>} | {key-1={casouttable-1} <, ...>}, repeated=TRUE | FALSE, replace=TRUE | FALSE}, outsum={outSummary={casouttable}, pctlndec=integer, pctlPrefix="string", percentiles={{percentile=double, variable="string"} <, ...>}, summaryStatistics={{statistic="KURTOSIS" | "MEAN" | "QRANGE" | "SKEWNESS" | "STDDEV" | "VARIANCE", variable="string"} <, ...>}, tVaRLevels={{percentileLevel=double, variable="string"} <, ...>}, tVaRPrefix="string"}, percentileMethod=integer, seed=64-bit-integer, shuffleData=TRUE | FALSE, tailEDFAccuracy=double, tailStart=double, varianceDivisor="DF" | "N";
Paramètres
ParamètreDescription
copulaSampleSpécifie la table d'entrée contenant la simulation de copule (marges uniformes). Cette table provient généralement de l'action `copulaSimulate`.
marginalsListe des tables d'entrée contenant les échantillons empiriques des distributions marginales des pertes pour les différentes lignes de métier.
outputDéfinit les paramètres de la table de sortie principale qui contiendra l'échantillon de la perte globale de l'entreprise.
outsumSpécifie les détails de la table de sortie résumée, incluant les statistiques sommaires, les percentiles et la Tail Value-at-Risk (TVaR).
analysisVariablesListe des noms des variables marginales à analyser. Doit correspondre à un sous-ensemble des variables présentes dans la table de simulation de copule.
tailStartDéfinit la valeur de la fonction de distribution empirique (EDF) où commence la région de queue (tail region). Valeur par défaut : 0.8.
seedGraine pour le générateur de nombres pseudo-aléatoires. Essentiel pour la reproductibilité des résultats.
Préparation des Données Voir la fiche de ce code dataprep
Création de données simulées pour ECM

Génération d'une table de simulation de copule (données uniformes) et de deux tables de distributions marginales (pertes simulées) pour illustrer l'action.

Copié !
1 
2DATA work.copula_sim;
3DO i=1 to 10000;
4u1 = rand('Uniform');
5u2 = rand('Uniform');
6OUTPUT;
7END;
8 
9RUN;
10 
11DATA work.margin1;
12DO i=1 to 5000;
13loss = rand('Lognormal', 10, 1);
14id = 'Line1';
15OUTPUT;
16END;
17 
18RUN;
19 
20DATA work.margin2;
21DO i=1 to 5000;
22loss = rand('Gamma', 5, 1000);
23id = 'Line2';
24OUTPUT;
25END;
26 
27RUN;
28 
29PROC CAS;
30upload path="work.copula_sim" casout={name="copula_data", replace=true};
31upload path="work.margin1" casout={name="margin_line1", replace=true};
32upload path="work.margin2" casout={name="margin_line2", replace=true};
33 
34RUN;
35 

Exemples

Exécution de l'action ecm avec une configuration minimale : une table de copule et deux tables marginales.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3ecm.ecm / copulaSample={name="copula_data"} marginals={{TABLE={name="margin_line1"}, sampleVarName="loss"}, {TABLE={name="margin_line2"}, sampleVarName="loss"}} OUTPUT={outSample={name="total_loss_sample", replace=true}};
4 
5RUN;
6 
Résultat :
Une table CAS 'total_loss_sample' est créée contenant les échantillons de perte agrégée basés sur la structure de dépendance de la copule et les marges fournies.

Utilisation de l'action ecm pour calculer la perte globale, en spécifiant les variables d'analyse, en fixant une graine, et en demandant des statistiques détaillées (Percentiles, TVaR) dans une table sommaire.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1 
2PROC CAS;
3ecm.ecm / copulaSample={name="copula_data"} analysisVariables={"u1", "u2"} marginals={{TABLE={name="margin_line1"}, sampleVarName="loss", idVarValue="u1"}, {TABLE={name="margin_line2"}, sampleVarName="loss", idVarValue="u2"}} seed=12345 tailStart=0.95 OUTPUT={outSample={name="detailed_loss", replace=true}, varName="EnterpriseLoss", writeMarginals=true} outsum={outSummary={name="loss_summary", replace=true}, percentiles={{percentile=99.5, variable="VaR_99_5"}, {percentile=99.9, variable="VaR_99_9"}}, tVaRLevels={{percentileLevel=99.5, variable="TVaR_99_5"}}, summaryStatistics={{statistic="MEAN", variable="AvgLoss"}, {statistic="STDDEV", variable="VolLoss"}}};
4 
5RUN;
6 
Résultat :
Génère 'detailed_loss' avec la perte globale et les marges. Génère 'loss_summary' contenant la moyenne, l'écart-type, les VaR à 99.5% et 99.9%, ainsi que la TVaR à 99.5%.

FAQ

Quel est l'objectif principal de l'action ecm ?
Quels sont les paramètres requis pour exécuter l'action ecm ?
À quoi sert le paramètre "copulaSample" ?
Comment définir la fraction de points à échantillonner dans la région du corps de la distribution ?
Quel est le rôle du paramètre "tailStart" ?
Est-il possible d'obtenir des statistiques récapitulatives et des valeurs à risque ?
Comment assurer la reproductibilité des résultats de l'action ?
Le brassage des données est-il activé par défaut ?

Scénarios associés

Cas d'usage
Calcul du Capital Économique pour Assurance Multi-Branche (Auto & Habitation)

Une compagnie d'assurance souhaite agréger les risques de ses branches 'Automobile' et 'Habitation' pour estimer son besoin global en capital. L'objectif est de calculer la VaR ...

Cas d'usage
Stress-Test Risque Opérationnel Bancaire (Haut Volume)

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 s...

Cas d'usage
Modélisation Catastrophique (Focus Queue de Distribution)

Un réassureur se concentre uniquement sur les événements extrêmes (Tremblements de terre et Cyclones). Le but est de modéliser finement la queue de distribution (au-delà du 95èm...