IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS STAT Discussion :

Chain ladder SAS [Fait]


Sujet :

SAS STAT

  1. #21
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Je fait le Chain-Ladder en SAS.
    Pour le faire plus facilement il faut oublier la forme "triangulaire" de présentation et passer à la forme "linéaire". J'explique.
    Normalement on travaille avec des "triangles", i.e. des matrices rectangulaire (dont seulement la partie supérieure gauche est remplie, c'est pour ça qu'on les appelle "triangles") avec des coordonnées de genre "exercice de survenance" en Y et "année de déroulement" en X. Cette construction est très facile à visualiser et reste toujours possible sous SAS, mais la programmation devient une vrai galère. Il est beaucoup plus simple de passer par la table à trois colonnes :
    1. coordonné X (déroulement dans notre exemple) ;
    2. coordonné Y (année de survenance) ;
    3. valeur du triangle (nombre de sinistres, règlement, charge, etc.) ;
    Petite remarque concernant le 3) : on peut dans le cas d'utilisation de cette structure combiner plusieurs triangles dans une seule table en ajoutant des colonnes de type 3) à volonté.

    Exemple de cette présentation pour tes données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    DATA toto;
    input a b v;
    cards;
    0 0 1381
    0 1 4399
    0 2 4229
    0 3 435
    0 4 465
    0 5 205
    0 6 110
    0 7 67
    1 0 859
    1 1 6940
    1 2 2619
    1 3 1531
    1 4 517
    1 5 572
    1 6 287
    2 0 6482
    2 1 6463
    2 2 3995
    2 3 1420
    2 4 547
    2 5 723
    3 0 2899
    3 1 16428
    3 2 5521
    3 3 2424
    3 4 477
    4 0 3964
    4 1 15872
    4 2 8178
    4 3 3214
    5 0 6809
    5 1 24484
    5 2 27928
    6 0 11155
    6 1 38229
    7 0 10641
    ;
    run;
    Le passage de cette forme à la forme triangulaire (uniquement à la fin, pour la sortie et la présentation) se fait par la proc transpose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    proc transpose data=TOTO out=TITI prefix=V;
    	by A;
    	id B;
    	var V;
    run;
    Du coût, l'opération de cumul (dont tu as besoin pour ta table) se fait toute seule (ou presque) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    proc sql;
    create table TOTO_SUM as
    	select a.A, a.B, sum(b.V) as V
    	from TOTO a inner join TOTO b on a.A = b.A and a.B >= b.B
    	group by a.A, a.B
    	order by a.A, a.B
    ;
    quit;
    De même pour calculer le coefficient de propagation (TOTO a inner join TOTO b on a.X = b.X - 1 and a.Y = b.Y) ou autres opérations.

    Attention quand-même aux valeurs manquants. En constituant la première table "plate" il faut veiller pour ne pas avoir de trous de genre (X; Y) = (10; 1) est absent mais (11; 1) et (12; 1) (aussi bien que pour tous les X < 10 et Y = 1) présents. Ça arrive, par exemple, à la fin des cadences de liquidations où les mouvements se font pas toutes les années.
    Il faut dans ce cas faire ce qu'on appelle chez nous "la normalisation", i.e. ajouter des lignes fictives dans le triangles plat non cumulé avec toutes les valeurs possibles de X et Y du triangle et 0 comme valeur.

    J'espère que la réponse n'est pas complètement à côté de la plaque. C'est bien ça que tu voulais faire ?

  2. #22
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut triangle des regelments
    En fai je cherche a obtenir le triangle superieur de regelement sou la forme x x x
    x x
    x
    mon objecti est dutiliser iml pour retrouvé ce triangle 2 en partant du triangle 1 qui est sou la forme
    x x x
    x x
    x en faisai juste un decalage des lignes .

    les variable 'ci 'constituent les colonne du triangle 1 les ligne étant les anné de survenance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROC IML ;
    USE tmp1.triangle1 ;
    READ ALL VAR {c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 } INTO X ;
     
    do i=2 TO nrow(x) BY 1;
    	do j=1 TO ncol(x) BY 1;
    		x[i,j]=x[i,j-1];
    	end;
    end;
    CREATE tmp1.e FROM x;
    APPEND FROM x ;
    CLOSE x ;
    print x;
    end;
    voivi une partie de mon programme mais cela ne marche pa .
    avez vous une idée la dessus ?

  3. #23
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Points : 46
    Points
    46
    Par défaut
    Une chose est sur utilise SAS IML
    Tres pratique pour le calcul matriciel, tu pourras y trouver directement les fonctions matricielles, tels que eigen pour diagonaliser une matrice...

  4. #24
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Désolé, je ne connais pas IML, je fais tout comme j'ai décris.
    Comme ça, à l'œil je préfère ma solution : il est plus simple de faire des opérations (pas besoin de boucles) et les jointures (imagine si tu veux actualiser les montants en utilisant une table complémentaire avec des indices d'actualisation).
    Mais ça peut être juste une question d'habitude... Il faut que je regarde un jour IML.

    Sinon pour ton programme : l'instruction x[i,j]=x[i,j-1]; est censée de décaler le triangle d'une colonne à droite, c'est ça ? Pourquoi dans ce cas tu parcours les lignes de 2 à la fin (et pas de 1 à la fin) et le colonnes de 1 à la fin (et pas de 2 à la fin) ? Est que veux-tu mettre dans la première colonne ?

    A propos : dans mon modèle avec des "triangles plats" cette opération consiste juste à faire X = X + 1;

  5. #25
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par kelmarina Voir le message
    En fai je cherche a obtenir le triangle superieur de regelement sou la forme x x x
    x x
    x
    mon objecti est dutiliser iml pour retrouvé ce triangle 2 en partant du triangle 1 qui est sou la forme
    x x x
    x x
    x en faisai juste un decalage des lignes .

    les variable 'ci 'constituent les colonne du triangle 1 les ligne étant les anné de survenance.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PROC IML ;
    USE tmp1.triangle1 ;
    READ ALL VAR {c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 } INTO X ;
     
    do i=2 TO nrow(x) BY 1;
    	do j=1 TO ncol(x) BY 1;
    		x[i,j]=x[i,j-1];
    	end;
    end;
    CREATE tmp1.e FROM x;
    APPEND FROM x ;
    CLOSE x ;
    print x;
    end;
    voivi une partie de mon programme mais cela ne marche pa .
    avez vous une idée la dessus ?
    Je ne comprends pas très bien le sens du décallage?
    c'est possible d'avoir un exemple AVANT APRES, et une table avec les données pour les tests?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  6. #26
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Si je comprend bien ce qu'il veut faire, c'est de calculer les coefficients de projection d'un triangle. Mathématiquement parlant il s'agit de calculer une matrice C(i,j) à partir de M(i,j) de la manière suivante : C(i,j) = M(i,j+1)/M(i,j). Plus les règles de bord : i + j < N + 1 dans la matrice M et i + j < N dans la matrice C. Et après il faudra faire la moyenne (plus ou moins compliquée) de C(i,*) = C*(i).

    Dans le monde réel ça correspond à calculer le ratio, le coefficient multiplicateur entre l'année de déroulement i et i+1. Si C*(1) est, par exemple, 1.1, ça veut dire que le chiffres de la deuxième colonne de la matrice M peuvent être obtenues à partir des chiffres de la première colonne de même matrice en multipliant par 1.1. "Obtenues" pas exactement, mais statistiquement, en moyenne.

  7. #27
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut bootstrap sous sas.
    bonjour a tous ,
    jai pu régléer mon pb vace le iml la dernière fois merci pour votre aide.
    Merci .

  8. #28
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Si tu as solutionné ton problème de "chain lader" pourrais tu nous donner ton code.
    Merci
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  9. #29
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut salut
    Voici le code que jai utiliser sous sas ss iml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    data tmp1.z;set tmp1.t_cf;
    if surv2 = 2008 then do ; _0=0;end; 
    F1=_1;
    if surv2 = 2007 then do ; _1=0;end; 
    F2=_2;
    if surv2 = 2006 then do ; _2=0;end; 
    F3=_3;
    if surv2 = 2005 then do ; _3=0;end; 
    F4=_4;
    if surv2 = 2004 then do ; _4=0;end; 
    F5=_5;
    if surv2 = 2003 then do ; _5=0;end; 
    F6=_6;
    if surv2 = 2002 then do ; _6=0;end; 
    F7=_7;
    if surv2 = 2001 then do ; _7=0;end; 
    F8=_8;
    if surv2 = 2000 then do ; _8=0;end; 
    F9=_9;
    if surv2 = 1999 then do ; _9=0;end; 
    F10=_10;
    keep _0 _1  _2 _3 _4 _5 _6 _7 _8 _9  F1 F2 F3 F4 F5 F6 F7 F8 F9 F10;
    run;
    proc summary data=tmp1.z;
    var _0 _1  _2 _3 _4 _5 _6 _7 _8 _9  F1 F2 F3 F4 F5 F6 F7 F8 F9 F10;
    output out=tmp1.z1 (drop= _freq_ _type_)sum()=;
     
    run;
    data tmp1.fact_moy_f; set tmp1.Z1;
    F1=F1 /_0;
    F2= F2/_1;
    F3=F3/_2;
    F4=F4 /_3;
    F5=F5/_4;
    F6=F6/_5;
    F7=F7/_6;
    F8=F8/_7;
    F9=F9/_8;
    f10=f10/_9;
    drop _0 _1  _2 _3 _4 _5 _6 _7 _8 _9 _10 ;
    run;
     
    proc sql;create table tmp1.z2 as select * from tmp1.t_cf , tmp1.fact_moy_f;run;quit;
     
     
    data tmp1.t_cf;
    set tmp1.z2;
    if surv2 = 2008 then do;  _1=F1*_0  ; end;
    if surv2 >= 2007 then do;  _2=F2*_1; end;
    if surv2 >= 2006 then do; _3=F3*_2; end;
    if surv2 >= 2005 then do; _4=F4*_3; end;
    if surv2 >= 2004 then do; _5=F5*_4; end;
    if surv2 >= 2003 then do; _6=F6*_5; end;
    if surv2 >= 2002 then do; _7=F7*_6; end; 
    if surv2 >= 2001 then do; _8=F8*_7; end;
    if surv2 >= 2000 then do; _9=F9*_8; end;
    if surv2 >= 1999 then do; _10=F10*_9; end;
    keep surv2 _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _10;
    run;
    jai finalmnt laissé tomber le iml pr travaille avec le sas base .
    jespèr k c te sera utile.

  10. #30
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Pas mal comme une mesure contre chômage. Parce que l'année prochaine c'est presque l'intégralité du code qui est à refaire...

  11. #31
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Intervalle de confiance pour la méthode de Chain Ladder
    Bonjour,

    aprés avoir eu mes résultats avec la méthode de Chain Ladder, je cherche à faire sortir mon intervalle de confiance et je n'y arrive pas ??

    si c'est possible d'avoir une réponse SVP

    je vous remercie d'avance

  12. #32
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    bonjour Mayer,

    qu'est ce que la méthode Chain Ladder? peux-tu également mettre à dispo ton code SAS?

    Merci

    Manoutz

  13. #33
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Chaine Ladder
    J’ai mis un exemple d’application de la méthode de Chain Ladder sur Excel. J’ai préféré le faire sur Excel parce que c’est plus simple à manipuler les triangles.

    Les valeurs, en noir, sont les valeurs réelles et les valeurs, en rouge, sont les valeurs obtenues après N+i années de développement.
    Les coefficients de passages d’une année à une autre sont calculés grâce à des formules très simples, vous les trouverez sur la feuille Excel jointe.

    Ma question c’était ; est ce que qu’on on peut avoir l’intervalle de confiance quand on applique la Chain Ladder ?

    Merci.
    Fichiers attachés Fichiers attachés

  14. #34
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Salut,

    Le chain Ladder sous SAS peut être calculé avec 3 arrays.

    Un pour stocker les élements de la ligne -1
    Un pour stocker les élements de la ligne lue

    Quand tu changes de ligne tu utilise l'array ligne -1 pour compléter la ligne courante sur les période que tu n'as pas encore.

    Utilise un autre array pour stocker la ligne completée.

    Je te déconseille de multiplier les étapes (data/transpose/sql) car avec de la volumétrie tu vas avoir vite des soucis, surtout si tu dois faire plusieurs Chain Ladder pour différents groupes/sous-groupes.

    Avec cette méthode il te sera egalement possible d'avoir directement les ratios "Projection Factor".


    xav

  15. #35
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Bonjour Green_fr,

    Je travaille dans le domaine de l'analyse décisonnelle et decouvre le "chain ladder".
    En recherchant des infos à propos de cette méthode, je suis tombé sur votre message dans ce forum.Il me semble de loin le plus adapté à ce que j'essaie de faire.

    J'ai suivi (très facilement) votre méthode pour arriver à un calcul de la somme.
    Par contre je ne comprends pas comment calculer le triangle à partir de cette structure.
    Qu'est ce que j'ai manqué?

    Bien Cordialement,

    constant2k
    Bonjour constant2k,

    En fait, si je comprends bien le mot "calculer" dans ce contexte, calculer le triangle ne sert qu'à mettre en forme les données avant les afficher à l'utilisateur ou exporter sous Excel. Tous les calculs se font sur la structure "plate", i.e. une table à 3 colonnes : X, Y, Donnée.

    Sinon, pour mettre en forme, c'est la procédure proc transpose qui fait le nécessaire.

  16. #36
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    bonjour,
    Si comme moi tu penses que la syntaxe de la proc iml est complétement dépassée et qu'Excel n'est pas un outil sérieux mais plutôt chronophage , tu peux aussi utiliser tableau.
    Les fonctions avancées doivent permettre de faire du chain ladder.
    Pour info, je n'ai aucun lien commercial avec cette entreprise.

    Nicolas.

Discussions similaires

  1. Transformer des dates SAS en chaines
    Par tanaka59 dans le forum SAS Base
    Réponses: 1
    Dernier message: 10/09/2014, 17h41
  2. Réponses: 5
    Dernier message: 20/10/2013, 03h09
  3. Extraire une sous chaine numérique en SAS
    Par tassia dans le forum Débutez
    Réponses: 6
    Dernier message: 29/04/2013, 12h37
  4. Extraire une chaine en SAS
    Par tassia dans le forum Débutez
    Réponses: 2
    Dernier message: 29/10/2012, 16h31
  5. Réponses: 5
    Dernier message: 21/09/2011, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo