{"word_count": 1056, "character_count": 8890}
Pour le dernier cours sur les méthodes de provisionnement, on s'est arrête aux méthodes par simulation. Reprenons là où on en était resté au dernier billet où on avait vu qu'en faisant une régression de Poisson sur les incréments, on obtenait exactement le même montant que la méthode Chain Ladder,&#62; Y     [,1] [,2] [,3] [,4] [,5] [,6][1,] 3209 1163   39   17    7   21[2,] 3367 1292   37   24   10   NA[3,] 3871 1474   53   22   NA   NA[4,] 4239 1678  103   NA   NA   NA[5,] 4929 1865   NA   NA   NA   NA[6,] 5217   NA   NA   NA   NA   NA&#62; y=as.vector(as.matrix(Y))&#62; base=data.frame(y,ai=rep(2000:2005,n),bj=rep(0:(n-1),each=n))&#62; reg2=glm(y~as.factor(ai)+as.factor(bj),data=base,family=poisson) &#62; summary(reg2)Call:glm(formula = y ~ as.factor(ai) + as.factor(bj), family = poisson,     data = base)Coefficients:                  Estimate Std. Error z value Pr(&#62;|z|)    (Intercept)        8.05697    0.01551 519.426  &#60; 2e-16 ***as.factor(ai)2001  0.06440    0.02090   3.081  0.00206 ** as.factor(ai)2002  0.20242    0.02025   9.995  &#60; 2e-16 ***as.factor(ai)2003  0.31175    0.01980  15.744  &#60; 2e-16 ***as.factor(ai)2004  0.44407    0.01933  22.971  &#60; 2e-16 ***as.factor(ai)2005  0.50271    0.02079  24.179  &#60; 2e-16 ***as.factor(bj)1    -0.96513    0.01359 -70.994  &#60; 2e-16 ***as.factor(bj)2    -4.14853    0.06613 -62.729  &#60; 2e-16 ***as.factor(bj)3    -5.10499    0.12632 -40.413  &#60; 2e-16 ***as.factor(bj)4    -5.94962    0.24279 -24.505  &#60; 2e-16 ***as.factor(bj)5    -5.01244    0.21877 -22.912  &#60; 2e-16 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for poisson family taken to be 1)    Null deviance: 46695.269  on 20  degrees of freedomResidual deviance:    30.214  on 10  degrees of freedom  (15 observations deleted due to missingness)AIC: 209.52Number of Fisher Scoring iterations: 4&#62; base$py2=predict(reg2,newdata=base,type="response")&#62; round(matrix(base$py2,n,n),1)       [,1]   [,2] [,3] [,4] [,5] [,6][1,] 3155.7 1202.1 49.8 19.1  8.2 21.0[2,] 3365.6 1282.1 53.1 20.4  8.8 22.4[3,] 3863.7 1471.8 61.0 23.4 10.1 25.7[4,] 4310.1 1641.9 68.0 26.1 11.2 28.7[5,] 4919.9 1874.1 77.7 29.8 12.8 32.7[6,] 5217.0 1987.3 82.4 31.6 13.6 34.7&#62; sum(base$py2[is.na(base$y)])[1] 2426.985Le plus intéressant est peut être de noter que la loi de Poisson présente probablement trop peu de variance...&#62; reg2b=glm(y~as.factor(ai)+as.factor(bj),data=base,family=quasipoisson)&#62; summary(reg2)Call:glm(formula = y ~ as.factor(ai) + as.factor(bj), family = quasipoisson,     data = base)Coefficients:                  Estimate Std. Error t value Pr(&#62;|t|)    (Intercept)        8.05697    0.02769 290.995  &#60; 2e-16 ***as.factor(ai)2001  0.06440    0.03731   1.726 0.115054    as.factor(ai)2002  0.20242    0.03615   5.599 0.000228 ***as.factor(ai)2003  0.31175    0.03535   8.820 4.96e-06 ***as.factor(ai)2004  0.44407    0.03451  12.869 1.51e-07 ***as.factor(ai)2005  0.50271    0.03711  13.546 9.28e-08 ***as.factor(bj)1    -0.96513    0.02427 -39.772 2.41e-12 ***as.factor(bj)2    -4.14853    0.11805 -35.142 8.26e-12 ***as.factor(bj)3    -5.10499    0.22548 -22.641 6.36e-10 ***as.factor(bj)4    -5.94962    0.43338 -13.728 8.17e-08 ***as.factor(bj)5    -5.01244    0.39050 -12.836 1.55e-07 ***---Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Dispersion parameter for quasipoisson family taken to be 3.18623)    Null deviance: 46695.269  on 20  degrees of freedomResidual deviance:    30.214  on 10  degrees of freedom  (15 observations deleted due to missingness)AIC: NANumber of Fisher Scoring iterations: 4Mais on en reparlera dans un instant. Ensuite, on avait commencé à regarder erreurs commises, sur la partie supérieure du triangle. Classiquement, par construction, les résidus de Pearson sont de la formeOn avait vu dans le cours de tarification que la variance au dénominateur pouvait être remplacé par le prévision, puisque dans un modèle de Poisson, l'espérance et la variance sont identiques. Donc on considérait&#62; base$erreur=(base$y-base$py2)/sqrt(base$py2)&#62; round(matrix(base$erreur,n,n),1)     [,1] [,2] [,3] [,4] [,5] [,6][1,]  0.9 -1.1 -1.5 -0.5 -0.4    0[2,]  0.0  0.3 -2.2  0.8  0.4   NA[3,]  0.1  0.1 -1.0 -0.3   NA   NA[4,] -1.1  0.9  4.2   NA   NA   NA[5,]  0.1 -0.2   NA   NA   NA   NA[6,]  0.0   NA   NA   NA   NA   NALe soucis est que si  est - asymptotiquement - un bon estimateur pour , ce n'est pas le cas à distance finie, car on a alors un estimateur biaisé pour la variance, et donc la variance des résidus n'a que peu de chances d'être de variance unitaire. Aussi, il convient de corriger l'estimateur de la variance, et on pose alorsqui sont alors les résidus de Pearson tel qu'on doit les utiliser.&#62; E=base$erreur[is.na(base$y)==FALSE]*sqrt(21/(21-11))&#62; E [1]  1.374976e+00  3.485024e-02  1.693203e-01 -1.569329e+00  1.887862e-01 [6] -1.459787e-13 -1.634646e+00  4.018940e-01  8.216186e-02  1.292578e+00[11] -3.058764e-01 -2.221573e+00 -3.207593e+00 -1.484151e+00  6.140566e+00[16] -7.100321e-01  1.149049e+00 -4.307387e-01 -6.196386e-01  6.000048e-01[21] -8.987734e-15&#62; boxplot(E,horizontal=TRUE)En rééchantillonnant dans ces résidus, on peut alors générer un pseudo triangle. Pour des raisons de simplicités, on va générer un peu rectangle, et se restreindre à la partie supérieure,&#62; Eb=sample(E,size=36,replace=TRUE)&#62; Yb=base$py2+Eb*sqrt(base$py2)&#62; Ybna=Yb&#62; Ybna[is.na(base$y)]=NA&#62; Tb=matrix(Ybna,n,n)&#62; round(matrix(Tb,n,n),1)       [,1]   [,2] [,3] [,4] [,5] [,6][1,] 3115.8 1145.4 58.9 46.0  6.4 26.9[2,] 3179.5 1323.2 54.5 21.3 12.2   NA[3,] 4245.4 1448.1 61.0  7.9   NA   NA[4,] 4312.4 1581.7 68.7   NA   NA   NA[5,] 4948.1 1923.9   NA   NA   NA   NA[6,] 4985.3     NA   NA   NA   NA   NACette fois, on a un nouveau triangle ! on va alors pouvoir faire plusieurs choses,compléter le triangle para la méthode Chain Ladder, c'est à dire calculer les montants moyens que l'on pense payer dans les années futuresgénérer des scénarios de paiements pour les années futurs, en générant des paiements suivant des lois de Poisson (centrées sur les montants moyens que l'on vient de calculer)générer des scénarios de paiements avec des lois présentant plus de variance que la loi de Poisson. Idéalement, on voudrait simuler des lois qusi-Poisson, mais ce ne sont pas de vraies lois. Par contre, on peut se rappeler que dans ce cas, la loi Gamma devrait donner une bonne approximation.Pour ce dernier point, on va utiliser le code suivant, pour générer des quasi lois,&#62; rqpois = function(n, lambda, phi, roundvalue = TRUE) {+ b = phi+ a = lambda/phi+ r = rgamma(n, shape = a, scale = b)+ if(roundvalue){r=round(r)}+ return(r)+ }Je renvois aux diverses notes de cours pour plus de détails sur la justification, ou à un vieux billet. On va alors faire une petite fonction, qui va soit somme les paiements moyens futurs, soit sommer des générations de scénarios de paiements, à partir d'un triangle,&#62; CL=function(Tri){+ y=as.vector(as.matrix(Tri))+ base=data.frame(y,ai=rep(2000:2005,n),bj=rep(0:(n-1),each=n))+ reg=glm(y~as.factor(ai)+as.factor(bj),data=base,family=quasipoisson)+ py2=predict(reg,newdata=base,type="response")+ pys=rpois(36,py2)+ pysq=rqpois(36,py2,phi=3.18623)+ return(list(+ cl=sum(py2[is.na(base$y)]),+ sc=sum(pys[is.na(base$y)]),+ scq=sum(pysq[is.na(base$y)])))+ }Reste alors à générer des paquets de triangles. Toutefois, il est possible de générer des triangles avec des incréments négatifs. Pour faire simple, on mettra des valeurs nulles quand on a un paiement négatif. L'impact sur les quantiles sera alors (a priori) négligeable.&#62; for(s in 1:1000){+ Eb=sample(E,size=36,replace=TRUE)*sqrt(21/(21-11))+ Yb=base$py2+Eb*sqrt(base$py2)+ Yb=pmax(Yb,0)+ scY=rpois(36,Yb)+ Ybna=Yb+ Ybna[is.na(base$y)]=NA+ Tb=matrix(Ybna,6,6)+ C=CL(Tb)+ VCL[s]=C$cl+ VR[s]=C$sc+ VRq[s]=C$scq+ }Si on regarde la distribution du best estimate, on obtient&#62; hist(VCL,proba=TRUE,col="light blue",border="white",ylim=c(0,0.003))&#62; boxplot(VCL,horizontal=TRUE,at=.0023,boxwex = 0.0006,add=TRUE,col="light green")&#62; D=density(VCL)&#62; lines(D)&#62; I=which(D$x&#60;=quantile(VCL,.05))&#62; polygon(c(D$x[I],rev(D$x[I])),c(D$y[I],rep(0,length(I))),col="blue",border=NA)&#62; I=which(D$x&#62;=quantile(VCL,.95))&#62; polygon(c(D$x[I],rev(D$x[I])),c(D$y[I],rep(0,length(I))),col="blue",border=NA)Mais on peut aussi visualiser des scénarios basés sur des lois de Poisson (équidispersé) ou des scénarios de lois quasiPoisson (surdispersées), ci-dessousDans ce dernier cas, on peut en déduire le quantile à 99% des paiements à venir.&#62; quantile(VRq,.99)    99% 2855.01Il faut donc augmenter le montant de provisions de l'ordre 15% pour s'assurer que la compagnie pourra satisfaire ses engagements dans 99% des cas,&#62; quantile(VRq,.99)-2426.985    99% 428.025