Pour le onzième (et dernier) chapitre du cours d’actuariat de l’assurance non-vie à l’ENSAE, on va finir d’étudier les modèles de provisionnement (provisions pour sinistres à payer) avec les modèles de régression et les modèles bayésien. Je n’aurais pas le temps d’aborder cette année le provisionnement sur données individuelles. Les slides sont en ligne (la version pdf téléchargeable est comme souvent plus complète que celle sur slideshare)
Tag Archives: provisions
Claims reserving (introduction)
Mercredi, on commence la modélisation du passif des compagnies d’assurance IARD. Plus particulièrement, nous parlerons des provisions pour sinistres à payer, ou “provision for claims outstanding (PCO)” selon la terminologie anglaise, i.e. “the estimated total cost of ultimate settlement of all claims incurred before the date of record, whether reported or not, less any amounts already paid out in respect thereof.” Je renvoie à la lecture de Le contrôle de la solvabilité des compagnies d’assurance en ligne sur le site de l’OCDE, pour une vision globale des approches de ces provisions. La SOA avait publié un rapport en 2009, Comparison of Incurred But Not Reported IBNR Methods que j’encourage à lire.
Le livre de référence sur le sujet est celui de Mario Wüthrich et Michael Merz. Les premiers chapitres (correspondant a ce qui sera vu en cours) peuvent être téléchargés sur http://actuaries.ch/…
Nous aborderons mercredi les triangles. Parmi les triangles que nous manipulerons
> source("https://perso.univ-rennes1.fr/arthur.charpentier/bases.R")
qui contient plusieurs fichiers, dont
> PAID [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372 4411 4428 4435 4456 [2,] 3367 4659 4696 4720 4730 NA [3,] 3871 5345 5338 5420 NA NA [4,] 4239 5917 6020 NA NA NA [5,] 4929 6794 NA NA NA NA [6,] 5217 NA NA NA NA NA
ainsi que le triangle évoqué sur http://rworkingparty.wikidot.com/
> OthLiabData = read.csv("http://www.casact.org/research/reserve_data/othliab_pos.csv",header=TRUE, sep=",") > library(ChainLadder) > OL = SumData=ddply(OthLiabData,.(AccidentYear,DevelopmentYear,DevelopmentLag),summarise,IncurLoss=sum(IncurLoss_h1-BulkLoss_h1), + CumPaidLoss=sum(CumPaidLoss_h1), EarnedPremDIR=sum(EarnedPremDIR_h1)) > LossTri = as.triangle(OL, origin="AccidentYear", + dev = "DevelopmentLag", value="IncurLoss") > Year = as.triangle(OL, origin="AccidentYear", + dev = "DevelopmentLag", value="DevelopmentYear") > TRIANGLE=LossTri > TRIANGLE[Year>1997]=NA > TRIANGLE dev origin 1 2 3 4 5 6 7 8 9 10 1988 128747 195938 241180 283447 297402 308815 314126 317027 319135 319559 1989 135147 208767 270979 304488 330066 339871 344742 347800 353245 NA 1990 152400 238665 297495 348826 359413 364865 372436 372163 NA NA 1991 151812 266245 357430 400405 423172 442329 460713 NA NA NA 1992 163737 269170 347469 381251 424810 451221 NA NA NA NA 1993 187756 358573 431410 476674 504667 NA NA NA NA NA 1994 210590 351270 486947 581599 NA NA NA NA NA NA 1995 213141 351363 444272 NA NA NA NA NA NA NA 1996 237162 378987 NA NA NA NA NA NA NA NA 1997 220509 NA NA NA NA NA NA NA NA NA
Les transparents sont en ligne,
Pour les lectures complémentaires, Best Estimates for Reserves de Glen Barnett et Ben Zehnwirth est téléchargeable sur http://casact.org/pubs/…. En 2004 , Ben Zehnwirth, Julie Sims et Mark Shapland ont publié Will Your Next Reserve Increase Be Your Last (en ligne sur http://contingencies.org/janfeb04/…) Lors des prochaines séances, nous aborderons les méthodes par simulations. J’encourage la lecture de about the bootstrap, http://insureware.com/Library/… Sinon, des compléments plus spécifiques sont téléchargeables,
- The Chain Ladder and Tweedie Distributed Claims Data par Greg Taylor
- Chain-Ladder Bias: Its Reason and Meaning par Leigh Joseph Halliwell
- Estimating Predictive Distributions for Loss Reserve Models par Glenn Meyers
- Using a Bayesian Approach for Claims Reserving par Mario Wuthrich
- Obtaining Predictive Distributions for Reserves Which Incorporate Expert Opinion par Richard Verrall
- Loss Reserve Estimates: A Statistical Approach for Determining “Reasonableness” par Mark Shapland
- Munich Chain Ladder: A Reserving Method that Reduces the Gap between IBNR Projections Based on Paid Losses and IBNR Projections Based on Incurred Losses par Gerhard Quarg et Thomas Mack
- The Bornhuetter-Ferguson Principle par Klaus Schmidt et Mathias Zocher
- On the Importance of Dispersion Modeling for Claims Reserving: An Application with the Tweedie Distribution par Jean-Philippe Boucher et Danail Davidov
- Quantifying Uncertainty in Reserve Estimates par Zia Rehman et Stuart Klugman
- Robustifying Reserving par Gary Venter et Dumaria Rulina Tampubolon, voir aussi Robustifying Reserving
- Bootstrap Estimation of the Predictive Distributions of Reserves Using Paid and Incurred Claims par Huijuan Liu et Richard Verrall
- Predictive Distributions for Reserves Which Separate True IBNR and IBNER Claims par Huijuan Liu et Richard Verrall
- The Retrospective Testing of Stochastic Loss Reserve Models, par Glenn Meyers
- A GLM-Based Approach to Adjusting for Changes in Case Reserve Adequacy par Larry Decker
- A Method for Modelling Varying Run-off Evolutions in Claims Reserving par Richard Verrall
- A Nonlinear Regression Model of Incurred But Not Reported Losses par Scott Stelljes
- Back-Testing the ODP Bootstrap of the Paid Chain-Ladder Model with Actual Historical Claims Data par Jessica (Weng Kah) Leong, Shaun Wang et Han Chen
- A Practical Way to Estimate One-Year Reserve Risk par Ira Robbin
- Closed-Form Distribution of Prediction Uncertainty in Chain Ladder Reserving by Bayesian Approach par Ji Yao
- The Prediction Error of Bornhuetter-Ferguson par Thomas Mack
- Stochastic Loss Reserving with the Collective Risk Model par Glenn Meyers
- On the Accuracy of Loss Reserving Methodology par Tapio Boles et Andy Staudt
- Bootstrapping Generalized Linear Models for Development Triangles Using Deviance Residuals par Thomas Hartl
- Fitting a GLM to Incomplete Development Triangles par Thomas Hartl
- Gauss—Markov Loss Prediction in a Linear Model par Alexander Ludwig et Klaus Schmidt
- Anatomy of Actuarial Methods of Loss Reserving par Prakash Narayan
- Bootstrap Modeling: Beyond the Basics par Mark R. Shapland et Jessica (Weng Kah) Leong
- GLM Invariants par Fred Klinker
- The Retrospective Testing of Stochastic Loss Reserve Models par Glenn Meyers et Peng Shi
- A GLM-Based Approach to Adjusting for Changes in Case Reserve Adequacy par Larry Decker
- Testing the Assumptions of Age-to-age Factors, par Gary Venter, voir aussi http://rationalargumentator.com/actuaryguide/…
ACT2040: examen final (suite et fin)
Comme annoncé, l’examen terminal a lieu ce matin, et il est basé sur des données mises en ligne sur le blog depuis une dizaine de jours. L’énoncé est un peu longue, avec une bonne trentaine de pages de sorties informatiques, et un énoncécomprenant une trentaine de questions. Des éléments de correction sont en ligne ci-dessous (plutôt que de taper une correction en pdf, autant mettre le code en ligne).
On suppose importée les bases (sinon, le code est ici). Pour la première partie – sur la tarification (a priori) – la fréquence annuelle de sinistres est tout simplement
> mean(BASEN$nombre)/mean(BASEN$exposition) [1] 0.05241692 > exp(glm(nombre~1,offset=log(exposition),data=BASEN, + family=poisson(link="log"))$coefficients) (Intercept) 0.05241692
(je vais essayer de donner à chaque question deux méthodes pour obtenir le résultat). Si on suppose que le nombre de sinistres par an suit une loi de Poisson, alors la probabilité d’avoir au moins un accident est
> lambda=mean(BASEN$nombre)/mean(BASEN$exposition) > 1-ppois(0,lambda) [1] 0.05106684 > 1-exp(-lambda) [1] 0.05106684
Si on cherche à distinguer par sexe du conducteur principal
> mean(BASEN$nombre[BASEN$sexeconducteur=="H"])/ + mean(BASEN$exposition[BASEN$sexeconducteur=="H"]) [1] 0.05218143 > mean(BASEN$nombre[BASEN$sexeconducteur=="F"])/ + mean(BASEN$exposition[BASEN$sexeconducteur=="F"]) [1] 0.05457013 > exp(glm(nombre~0+sexeconducteur,offset=log(exposition), + data=BASEN,family=poisson(link="log"))$coefficients) sexeconducteurF sexeconducteurH 0.05457013 0.05218143
Ces deux valeurs ne sont pas significativement différentes. Si on regarde la sortie de la régression
Coefficients: Estimate Std. Error z value Pr(>|z|) sexeconducteurF -2.90827 0.05464 -53.23 <2e-16 *** sexeconducteurH -2.95303 0.01848 -159.82 <2e-16 ***
les deux coefficients sont quasiment identiques (en enlevant la constante). Si on rajoute la constante, la modalité de référence devientle sexe féminin
Coefficients: Estimate Std. Error z value Pr(>|z|) (Intercept) -2.90827 0.05464 -53.230 <2e-16 *** sexeconducteurH -0.04476 0.05768 -0.776 0.438
et la modalité homme n’est alors plus significative. Bref, le sexe du conducteur n’est pas une variable explicative.
Ensuite, parmi les variables qui semble pouvoir etre utilisée pour modéliser le nombre de sinistre, on pourra retenir l’age du conducteur (décroissant jusqu’à 30 ans, puis croissant), l’age du véhicule (décroissant), l’ancienneté du permis de conduire (décroissant les 10 premières années puis croissant – ou indépendant), éventuellement certains type de véhicules (le coupé cabriolet semble avoir – en moyenne – plus d’accident que la Jeep), la situation familiale, le lieu d’habitation (en particulier rural semble avoir moins d’accident qu’urbain), le statut d’habitation, le type de paiement de la prime (mensuel semblant plus risqué qu’annuel), le poids du véhicule, ou la marque (ou plutot certaines marques, comme Peugeot versus Burstner Mobil). Bref, toutes, sauf le sexe du conducteur.
Pour un conducteur de 45 ans qui a son permis de conduire depuis seulement 5 ans, les trois modèles donnent la fréquence annuelle suivante
> nbase=data.frame(ageconducteur=45,agepermis=5,exposition=1) > exp(t(c(1,5))%*%reg6$coefficients) [,1] [1,] 0.03395972 > predict(reg6,newdata=nbase,type="response") 1 0.03395972 > exp(t(c(1,45))%*%reg7$coefficients) [,1] [1,] 0.04100356 > predict(reg7,newdata=nbase,type="response") 1 0.04100356 > exp(t(c(1,5,45))%*%reg8$coefficients) [,1] [1,] 0.05395398 > predict(reg8,newdata=nbase,type="response") 1 0.05395398
Les trois modèles sont respectivement un modèle de Poison avec un lien log, un modèle binomiale négative avec un lien log, et un modèle binomial, avec un lien logit. Les deux premiers sont très proches: ils ont la meme fonction de lien, et comme nous l’avions vu à l’examen intra, le modèle binomiale négative est un modèle de Poisson avec une variable latente non observée qui suivrait une loi Gamma. Donc pour ces deux modèles, si les classes sont homogènes, et que par classe, la loi de Poisson est adaptée, il est normal d’avoir des coefficients très proches. Pour le modèle binomial avec un lien logistique, il faut se souvenir que la fonction lien est
car ici la probabilité d’avoir un accident est faible. Donc les deux fonctions liens sont proches. De plus, pour une loi de Poisson
Bref, pour notre loi de Poisson, on a presque une loi binomiale de paramètre si est petit.
Pour la prédiction suivant les trois modèles, on utilise classiquement
Comme on a accès aux sorties, pour les trois modèles, les trois prédictions sont très proches (mais on s’en doutait d’après la question précédante)
> predict(reg9,newdata=nbase,type="response") 1 0.04351037 > predict(reg10,newdata=nbase,type="response") 1 0.04351056 > predict(reg11,newdata=nbase,type="response") 1 0.04352741
Pour la méthode de biais minimal, il s’agit du principe de balancement, qui coïncide avec la régression de Poisson sur les classes. Pour les régressions stepwise, dans un cas, on élimine (étape par étape) des variables, et dans l’autre cas, des modalités de variables (pour les variables qualitatives).
Les deux modèles semblent valides, au sens où toutes les variables sont significatives. Le découpage en classes pour l’age du véhicule semble justifié par l’arbre de régression, qui suggèrait de découper à 8 et 14 ans. Pour les prédictions, on a pour le premier modèle
> nbase15=data.frame(ageconducteur=40,agepermis=20, + habitation="urbain",locataire=TRUE,paymensuel=FALSE, + marie=TRUEFORD=TRUE,RENAULT=FALSE,PEUGEOT=FALSE, + exposition=1) > predict(reg15,newdata=nbase15,type="response") 1 0.03398312
alors que le second donne
> nbase16=data.frame(ageconducteur=40,agevehF="NEUF",rural=FALSE, + locataire=TRUE,paymensuel=FALSE,marie=TRUE, + jeune=FALSE,ancien=FALSE,exposition=1) > predict(reg16,newdata=nbase16,type="response") 1 0.05208656
Moralité, nos deux modèles (qui semblent autant valides l’un que l’autre) donnent des prédictions relativement différentes. Si l’assuré change de voiture, cela n’a pas d’influence pour le second modèle (le véhicule est toujours dans la catégorie neuf). Pour le premier, il perd le rabais qu’il avait en conduisant un véhicule Ford, et donc la fréquence annuelle de sinistre augmente de 23.5%
> 1/exp(reg15$coefficients["FORDTRUE"]) FORDTRUE 1.235329
Bref, la prédiction devient
> predict(reg15,newdata=nbase15,type="response")/ + exp(reg15$coefficients["FORDTRUE"]) 1 0.04198033
On peut d’ailleurs le vérifier simplement,
> nbase15b=data.frame(ageconducteur=40,agepermis=20, + habitation="urbain",locataire=TRUE,paymensuel=FALSE, + marie=TRUE,FORD=FALSE,RENAULT=FALSE,PEUGEOT=FALSE, + exposition=1) > predict(reg15,newdata=nbase15b,type="response") 1 0.04198033
Si on passe maintenant à la modélisation de la charge de sinistres, le coût moyen par sinistre serait
> mean(BASEY$cout) [1] 1468.522
Cette fois, contrairement à la modélisation de la fréquence, il est plus difficile de trouver des variables explicatives. A priori, au vu des graphiques, aucune variable ne semblerait convenir…
Si on regarde la prédiction pour le premier modèle obtenu,
> nbase7=data.frame(VOLKSWAGEN=FALSE,agepermis=20, + sexeconducteur="H",usage="TOUS_DEPLACEMENTS") > predict(regr7,newdata=nbase7,type="response") 1 1388.622
alors que pour le second,
> exp(predict(regr8,newdata=nbase7))* + exp(summary(regr8)$sigma^2/2) 1 1359.552
Si c’est la femme de l’assuré qui avait pris l’assurance, cela n’aurait rien changé pour le second modèle. En revanche, pour le premier, l’assuré perdrait le rabais qu’il avait en étant un homme, et donc le cout moyen attendu augmenterait de 23%,
> 1/exp(regr7$coefficients["sexeconducteurH"]) sexeconducteurH 1.237832
i.e.
> predict(regr7,newdata=nbase7,type="response")/ + exp(regr7$coefficients["sexeconducteurH"]) 1 1718.88
La encore, on retrouve le meme résultat directement
> nbase7b=data.frame(VOLKSWAGEN=FALSE,agepermis=20, + sexeconducteur="F",usage="TOUS_DEPLACEMENTS") > predict(regr7,newdata=nbase7b,type="response") 1 1718.88
Passons maintenant aux calculs de la prime pure. Sans segmentation, la prime pure serait
Les prédictions des modèles pour la fréquence donnaient
> (n1=predict(reg15,newdata=nbase15,type="response")) 1 0.03398312 > (n2=predict(reg16,newdata=nbase16,type="response")) 1 0.05208656
alors que pour les couts moyens par sinistre, nous avions
> (c1=predict(regr7,newdata=nbase7,type="response")) 1 1388.622 > (c2=exp(predict(regr8,newdata=nbase7)) + *exp(summary(regr8)$sigma^2/2)) 1 1359.552
Les quatre primes pures obtenues sont alors
Passons maintenant à la seconde partie – sur le provisionnement des sinistres à payer. On commence par travailler sur le triangle
TRIANGLE2010 D1 D2 D3 D4 D5 D6 D7 D8 D9 A2002 357848 1124788 1735330 2218270 2745596 3319994 3466336 3606286 3833515 A2003 352118 1236139 2170033 3353322 3799067 4120063 4647867 4914039 5339085 A2004 290507 1292306 2218525 3235179 3985995 4132918 4628910 4909315 NA A2005 310608 1418858 2195047 3757447 4029929 4381982 4588268 NA NA A2006 443160 1136350 2128333 2897821 3402672 3873311 NA NA NA A2007 396132 1333217 2180715 2985752 3691712 NA NA NA NA A2008 440832 1288463 2419861 3483130 NA NA NA NA NA A2009 359480 1421128 2864498 NA NA NA NA NA NA A2010 376686 1363294 NA NA NA NA NA NA NA
Pour obtenir le montant payé en 2008 pour les sinistres survenus en 2004, on utilise la différence entre
> TRIANGLE2010["A2004",c("D4","D5")] D4 D5 A2004 3235179 3985995
i.e.
> TRIANGLE2010["A2004","D5"]-TRIANGLE2010["A2004","D4"] [1] 750816
Pour le montant payé au total en 2005, on utilise
> CUMULPAIEMENTS2010=TRIANGLE2010 > INCREMENTPAIEMENTS2010=CUMULPAIEMENTS2010 > INCREMENTPAIEMENTS2010[,2:9]=CUMULPAIEMENTS2010[,2:9]- + CUMULPAIEMENTS2010[,1:8] > sum(diag(as.matrix(INCREMENTPAIEMENTS2010[1:4,4:1]))) [1] 2729241
On attaque maintenant la méthode Chain Ladder. Les coefficients de développement sont
> lambda=rep(NA,8) > for(k in 1:8){ + lambda[k]=(sum(TRIANGLE2010[1:(9-k),k+1])/ + sum(TRIANGLE2010[1:(9-k),k]))} > lambda[1:5] [1] 3.474193 1.704149 1.460866 1.161765 1.095763
On peut alors obtenu ce qui sera payé en 2011 pour les sinistres survenus en 2010,
> TRIANGLE2010["A2010","D1"]*(lambda[1]-1) [1] 931993.8
alors que pour le montant payé en 2011 pour les sinistres survenus en 2009,
> TRIANGLE2010["A2009","D2"]*(lambda[2]-1) [1] 1000686
Pour le montant payé en 2010 et 2011 pour les sinistres survenus en 2010,
> TRIANGLE2010["A2010","D1"]*lambda[1]*lambda[2] [1] 2230186
Pour les sinistres survenus en 2008, la charge total estimée sera
> TRIANGLE2010["A2008","D3"]*prod(lambda[3:8]) [1] 5531128
ce qui fait un montant de provision
> TRIANGLE2010["A2008","D3"]*(prod(lambda[3:8])-1) [1] 3111267
On rajoute maintenant une diagonale dans notre triangle, i.e. une nouvelle année de paiements (en 2011).
Le montant payé en 2011 pour les sinistres survenus en 2010 est
> TRIANGLE2011["A2010","D2"]-TRIANGLE2011["A2010","D1"] [1] 986608
à comparer avec
> TRIANGLE2010["A2010","D1"]*(lambda[1]-1) [1] 931993.8
prédit par la méthode Chain-Ladder, soit une erreur de l’ordre de 5%,
> (TRIANGLE2011["A2010","D2"]- + TRIANGLE2011["A2010","D1"])/ + (TRIANGLE2010["A2010","D1"]*(lambda[1]-1))-1 [1] 0.05859927
Si on compare maintenant les coefficients de transition de la méthode Chain Ladder,
> lambda2011=rep(NA,9) > for(k in 2:9){ + lambda2011[k]=(sum(TRIANGLE2011[1:(10-k),k+1])/ + sum(TRIANGLE2011[1:(10-k),k]))} > lambda2011[1:5] [1] NA 1.747333 1.457413 1.173852 1.103824 > lambda[1:5] [1] 3.474193 1.704149 1.460866 1.161765 1.095763
Le coefficient permettant de passer de la colonne 2 à la colonne 3 augmente (légèrement). Si on regarde la prédiction du montant de paiements effectué en 2012 pour les sinistres survenus en 2009,
> TRIANGLE2011["A2009","D3"]*(lambda2011[3]-1) [1] 1310258
qui sont à comparer avec les
> TRIANGLE2010["A2009","D2"]*lambda[2]*(lambda[3]-1) [1] 1116132
estimés un an auparavant. La variation entre les estimations est de l’ordre de 17%,
> TRIANGLE2011["A2009","D3"]*(lambda2011[3]-1)/ + (TRIANGLE2010["A2009","D2"]*lambda[2]*(lambda[3]-1))-1 [1] 0.1739278
Entre 2010 et 2012, on peut estimer que l’on payera
> TRIANGLE2011["A2010","D2"]*lambda2011[2] [1] 2382128
pour les sinistres survenus en 2010.
Si on se focalise sur les sinistres survenus en 2008, la prédiction de la charge finale est ici
> TRIANGLE2011["A2008","D4"]*prod(lambda2011[4:9]) [1] 5660771
à comparer avec la prédiction faire en 2010,
> TRIANGLE2010["A2008","D3"]*prod(lambda[3:8]) [1] 5531128
i.e. notre nouvelle prédiction est 2% plus élevée,
> TRIANGLE2011["A2008","D4"]*prod(lambda2011[4:9])/ + (TRIANGLE2010["A2008","D3"]*prod(lambda[3:8]))-1 [1] 0.02343867
Le provisions pour sinistres à payer pour les sinistres survenus en 2008 est estimé, fin 2011, à
> TRIANGLE2011["A2008","D4"]*(prod(lambda2011[4:9])-1) [1] 2177641
alors que fin 2010, un montant de provision avait été constitué, à hauteur de
> TRIANGLE2010["A2008","D3"]*(prod(lambda[3:8])-1) [1] 3111267
On notera que la différence
> TRIANGLE2011["A2008","D4"]*(prod(lambda2011[4:9])-1)- + TRIANGLE2010["A2008","D3"]*(prod(lambda[3:8])-1) [1] -933626.7
vient des paiements effectués en 2011, et du changement dans l’estimation de charge ultime
> TRIANGLE2011["A2008","D4"]*prod(lambda2011[4:9])- + (TRIANGLE2010["A2008","D3"]*prod(lambda[3:8])) [1] 129642.3 > TRIANGLE2011["A2008","D4"]-TRIANGLE2011["A2008","D3"] [1] 1063269 > TRIANGLE2011["A2008","D4"]*prod(lambda2011[4:9])- + (TRIANGLE2010["A2008","D3"]*prod(lambda[3:8]))- + (TRIANGLE2011["A2008","D4"]-TRIANGLE2011["A2008","D3"]) [1] -933626.7
On attaque enfin la dernière partie, avec la régression de Poisson. La prédiction du montant de paiements faits en 2012 pour les sinistres survenus en 2009 est ici
> Y=as.vector(as.matrix(INCREMENTPAIEMENTS2011)) > ANNEE=rep(2002:2010,10) > DEVEL=rep(1:10,each=9) > baseTriangle=data.frame(Y,A=as.factor(ANNEE), + D=as.factor(DEVEL)) > reg=glm(Y~A+D,data=baseTriangle,famil=poisson(link="log")) > nbase=data.frame(A="2009",D="4") > predict(reg,newdata=nbase,type="response") 1 1310258
qui correspond à ce que donnait la méthode Chain Ladder
> TRIANGLE2011["A2009","D3"]*(lambda2011[3]-1) [1] 1310258
(mais on savait que les deux modèles prédisaient la même chose). Pour les sinistres survenus en 2005, le montant de provisions à constituer est
> nbase=data.frame(A="2005",D=c("8","9","10")) > predict(reg,newdata=nbase,type="response") 1 2 3 247190.0 370179.3 92268.5 > sum(predict(reg,newdata=nbase,type="response")) [1] 709637.8
qui, là encore, correspond à ce que prédisait la méthode Chain Ladder.
> TRIANGLE2011["A2005","D7"]*(prod(lambda2011[7:9])-1) [1] 709637.8
Chain ladder
Pour la fin du cours, on a commencé à voir la méthode dite Chain Ladder. Pour cela, rappelons que l’on dispose du jeu de données suivants, de paiements cumulés,
> source("https://perso.univ-rennes1.fr/arthur.charpentier/bases.R") > PAID [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372 4411 4428 4435 4456 [2,] 3367 4659 4696 4720 4730 NA [3,] 3871 5345 5398 5420 NA NA [4,] 4239 5917 6020 NA NA NA [5,] 4929 6794 NA NA NA NA [6,] 5217 NA NA NA NA NA > PAID/PREMIUM [,1] [,2] [,3] [,4] [,5] [,6] [1,] 0.6989 0.9522 0.9607 0.9644 0.9660 0.9705 [2,] 0.7206 0.9972 1.0051 1.0102 1.0124 NA [3,] 0.7960 1.0991 1.1100 1.1145 NA NA [4,] 0.8191 1.1433 1.1632 NA NA NA [5,] 0.8688 1.1976 NA NA NA NA [6,] 0.8112 NA NA NA NA NA
si on visualise l’évolution du ratio sinistre/primes. On peut visualiser les facteurs de transition dans le tableau ci-dessous,
> PAID[,2:6]/PAID[,1:5] [,1] [,2] [,3] [,4] [,5] [1,] 1.362418 1.008920 1.003854 1.001581 1.004735 [2,] 1.383724 1.007942 1.005111 1.002119 NA [3,] 1.380780 1.009916 1.004076 NA NA [4,] 1.395848 1.017407 NA NA NA [5,] 1.378373 NA NA NA NA [6,] NA NA NA NA NA
Toutefois, pour faire le ratio moyen, on ne fait pas la moyenne des ratios, ou alors à condition de pondérer correctement, par exemple pour passer de la première à la seconde ligne du tableau,
> k=1 > weighted.mean(x=PAID[,k+1]/PAID[,k],w=PAID[,k],na.rm=TRUE) [1] 1.380933 > sum(PAID[1:(6-k),k+1])/sum(PAID[1:(6-k),k]) [1] 1.380933
En itérant, on récupère l’ensemble des coefficients de transition,
> lambda=rep(NA,5) > for(k in 1:5){ + lambda[k]=(sum(PAID[1:(6-k),k+1])/sum(PAID[1:(6-k),k]))} > lambda [1] 1.380933 1.011433 1.004343 1.001858 1.004735
Une fois récupérés tous les coefficients de transition, on peut compléter la partie inférieure du triangle (ou de la matrice),
> PROJECTION=PAID > for(k in 1:5){ + PROJECTION[((7-k):6),k+1]=PROJECTION[((7-k):6),k]*lambda[k] + print(PROJECTION)} [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372.000 4411 4428 4435 4456 [2,] 3367 4659.000 4696 4720 4730 NA [3,] 3871 5345.000 5398 5420 NA NA [4,] 4239 5917.000 6020 NA NA NA [5,] 4929 6794.000 NA NA NA NA [6,] 5217 7204.327 NA NA NA NA [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372.000 4411.000 4428 4435 4456 [2,] 3367 4659.000 4696.000 4720 4730 NA [3,] 3871 5345.000 5398.000 5420 NA NA [4,] 4239 5917.000 6020.000 NA NA NA [5,] 4929 6794.000 6871.672 NA NA NA [6,] 5217 7204.327 7286.691 NA NA NA [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372.000 4411.000 4428.000 4435 4456 [2,] 3367 4659.000 4696.000 4720.000 4730 NA [3,] 3871 5345.000 5398.000 5420.000 NA NA [4,] 4239 5917.000 6020.000 6046.147 NA NA [5,] 4929 6794.000 6871.672 6901.518 NA NA [6,] 5217 7204.327 7286.691 7318.339 NA NA [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372.000 4411.000 4428.000 4435.000 4456 [2,] 3367 4659.000 4696.000 4720.000 4730.000 NA [3,] 3871 5345.000 5398.000 5420.000 5430.072 NA [4,] 4239 5917.000 6020.000 6046.147 6057.383 NA [5,] 4929 6794.000 6871.672 6901.518 6914.344 NA [6,] 5217 7204.327 7286.691 7318.339 7331.939 NA [,1] [,2] [,3] [,4] [,5] [,6] [1,] 3209 4372.000 4411.000 4428.000 4435.000 4456.000 [2,] 3367 4659.000 4696.000 4720.000 4730.000 4752.397 [3,] 3871 5345.000 5398.000 5420.000 5430.072 5455.784 [4,] 4239 5917.000 6020.000 6046.147 6057.383 6086.065 [5,] 4929 6794.000 6871.672 6901.518 6914.344 6947.084 [6,] 5217 7204.327 7286.691 7318.339 7331.939 7366.656
où on visualise, étape par étape, le remplissage de la partie inférieure de la matrice. La dernière colonne contient des prédictions des charges ultimes, par année de survenance, et sur la diagonale, on a toujours le montant de paiements déjà effectués par année de survenance. Le montant de provision est alors la différence entre ce que l’on pense payer, et ce que l’on a déjà payé.
Provisionnement et règle de trois
Longtemps, dans les formations d’actuariat, le provisionnement était un sujet traité en 2 heures, car malgré son importance stratégique dans les résultats d’une entreprise d’assurance, il ne s’agissait que d’une “règle de trois“.
- De l’importance des provisions en assurance
D’un point de vue comptable, les provisions pour sinistres à payer sont une quantification des engagements pris par l’assureur envers ses assurés. En reprenant des vieux tableaux dans l’Argus, avec une compagnie d’assurance spécialisée en grands risques (AXA Corporate Solutions), une mutuelle (MAIF), et une autre société anonyme (Groupama), on obtient
Pour les grands risques, on notera que le montant de provision (plus de 5 milliards) est plus de 3 fois supérieur au montant des primes encaissées (1,5 milliards). Aussi, si l’on pense qu’il faut augmenter de 5% le montant des provisions (ce qui pourrait paraître acceptable à un statisticien) il faudrait augmenter le chiffre d’affaire de 15%.
- Histoire de la “règle de trois“
Le Petit Robert prétendait que l’expression « règle de trois » remontrait à 1538, même si le résultat sous-jacent est tout simplement le théorème de Thalès… Les manuels d’arithmétiques expliquaient ainsi que “la règle de trois est la méthode servant à résoudre les problèmes dans lesquels, étant données des grandeurs pouvant former les trois termes d’une proportion, on demande de trouver le quatrième terme“. On peut retrouver beaucoup plus d’infos sur le site images des mathématiques (ici) ou (là), où on trouve d’ailleurs cette illustration,
La “règle de trois” est aussi le premier souvenir de raisonnement mathématique exposée par Paul Lévy dans sa biographie (“quelques aspects de la pensée d’un mathématicien“), lorsqu’il raconte qu’à 7 ans, il tenait la main d’une fille de 12 ans, il était surpris de lever la main. En effet, certes la jeune fille était plus grande que lui, mais son bras devait également être plus grand. Il compris alors le principe des règles de proportionnalité.
Bref, comme toujours, les actuaires ont inventé un nouveau mot pour la “règle de trois” (je renvoie à un vieux papier de Claude Bébéar sur la novlangue utilisée par les actuaires, ici, mais je reviendrais longuement sur le jargon une autre fois).
- Les méthodes de provisionnement: Chain Ladder
J’avais évoqué il y a quelques temps les travaux d’Eugène Astesan (ici), précurseur de la méthode Chain Ladder, même si l’estimateur qu’il avait alors proposé n’était pas celui de variance minimale dans la classe des estimateurs. Les premiers travaux sur les modèles stochastiques de provisionnement ont chercher à justifier la règle de trois, par exemple via le papier de Thomas Mack “which stochastic model is underlying the chain ladder method” (ici).
Pour venir deux minutes sur la méthode “chain ladder“, par exemple à l’aide du triangle suivant, on peut estimer les montants à payer (dans la partie inférieure) via une simple règle de trois. Considérons le triangle suivant, tiré du livre de Partar, Lecoeur, Nessi, Nisipasu et Reiz
Pour la seconde colonne, on fait une simple règle de trois, en calculant les sommes sur chacune des colonnes,
Aussi, ici,
i.e.
On peut ensuite passer à la troisième colonne, puis la quatrième, etc. La règle de trois donne ici
Voici pour la méthode dite “chain ladder“. Et Thomas Mack a été le premier à essayer de quantifier l’erreur de prédiction commise en utilisant cet estimateur. En particulier, les travaux théoriques des années 90 ont essayer d’étudier l’incertitude associée à l’estimation de la charge ultime, calculée aujourd’hui. Comme le notait un article paru dans l’Argus, les compagnies d’assurance qui utilisaient ces techniques étaient encore rares il y a 5 ans (et celles qui le faisaient cherchaient également à le faire savoir, ici). Mais les derniers documents (ici ou là) partent sur un objectif radicalement différent, que j’exposerais d’ici quelques jours, en revenant sur la novlangue des récents papiers sur le provisionnement..