Suite du billet (ici) sur le provisionnement en assurance dommage. On sait depuis le papier d'England et Verrall (1994) que la régression log-Poisson coïncide avec la méthode Chain-Ladder, en tous les cas en moyenne (on peut aller jeter un oeil ici pour les arguments théoriques). Pour les sceptiques, je renvoie au code suivant.
> library(ChainLadder)
> an <- 10; ligne = rep(1:an, each=an); colonne = rep(1:an, an)
> passe = (ligne + colonne - 1)<=an; n = sum(passe)
> PAID=GenIns; INC=PAID
> INC[,2:an]=PAID[,2:an]-PAID[,1:(an-1)]
> Y = as.vector(INC)
> lig = as.factor(ligne)
> col = as.factor(colonne)
> base = data.frame(Y,col,lig)
> reg=glm(Y~col+lig,data=base,family="poisson")
> sum(exp(predict(reg,newdata=base))[passe!=TRUE])
[1] 18680856
On peut vérifier avec la fonction MackChainLadder de library(ChainLadder), i.e.
> MackChainLadder(GenIns)
MackChainLadder(Triangle = GenIns)
Latest Dev.To.Date Ultimate IBNR Mack.S.E CV(IBNR)
1 3,901,463 1.0000 3,901,463 0 0 NaN
2 5,339,085 0.9826 5,433,719 94,634 71,835 0.759
3 4,909,315 0.9127 5,378,826 469,511 119,474 0.254
4 4,588,268 0.8661 5,297,906 709,638 131,573 0.185
5 3,873,311 0.7973 4,858,200 984,889 260,530 0.265
6 3,691,712 0.7223 5,111,171 1,419,459 410,407 0.289
7 3,483,130 0.6153 5,660,771 2,177,641 557,796 0.256
8 2,864,498 0.4222 6,784,799 3,920,301 874,882 0.223
9 1,363,294 0.2416 5,642,266 4,278,972 970,960 0.227
10 344,014 0.0692 4,969,825 4,625,811 1,362,981 0.295
Totals
Latest: 34,358,090.00
Ultimate: 53,038,945.61
IBNR: 18,680,855.61
Mack S.E.: 2,441,364.13
CV(IBNR): 0.13
Bref, les deux coïncident. Tout en étant fondamentalement très différents, comme l'avait noté Mack et Venter (2000). Mais que se passe-t-il si on ne dispose pas d'un triangle de données, mais d'un losange (par exemple en enlevant les 6 données du coin en haut à gauche).
> M=GenIns
> M[1,1:3]=NA
> M[2,1:2]=NA
> M[3,1]=NA
> an <- 10; ligne = rep(1:an, each=an); colonne = rep(1:an, an)
> passe = (ligne + colonne - 1)<=an; n = sum(passe)
> PAID=M; INC=PAID
> INC[,2:an]=PAID[,2:an]-PAID[,1:(an-1)]
> Y = as.vector(INC)
> lig = as.factor(ligne)
> col = as.factor(colonne)
> base = data.frame(Y,col,lig)
> reg=glm(Y~col+lig,data=base,family="poisson")
> sum(exp(predict(reg,newdata=base))[passe!=TRUE])
[1] 17810100
Le montant de provision est ici inférieur au montant obtenu par Chain Ladder (et qui est correct pour avoir refait les calculs),
> MackChainLadder(M)
MackChainLadder(Triangle = M)
Latest Dev.To.Date Ultimate IBNR Mack.S.E CV(IBNR)
1 3,901,463 1.0000 3,901,463 0 0 NaN
2 5,339,085 0.9826 5,433,719 94,634 69,796 0.738
3 4,909,315 0.9127 5,378,826 469,511 118,278 0.252
4 4,588,268 0.8661 5,297,906 709,638 130,514 0.184
5 3,873,311 0.7973 4,858,200 984,889 260,065 0.264
6 3,691,712 0.7223 5,111,171 1,419,459 410,087 0.289
7 3,483,130 0.6153 5,660,771 2,177,641 557,519 0.256
8 2,864,498 0.4155 6,893,493 4,028,995 861,372 0.214
9 1,363,294 0.2341 5,824,117 4,460,823 998,750 0.224
10 344,014 0.0684 5,028,331 4,684,317 1,492,354 0.319
Totals
Latest: 34,358,090.00
Ultimate: 53,387,997.33
IBNR: 19,029,907.33
Mack S.E.: 2,533,277.54
CV(IBNR): 0.13
Bref, si l'on ne dispose que de données incomplètes, il faut faire attention quand on fait une régression log-Poisson...
Miscellaneous › general insurance
Tuesday, December 15 2009
Chain Ladder dans les triangles incomplets
By arthur charpentier on Tuesday, December 15 2009, 15:37






