Teaching › actuariat - M2-09/10
Monday, February 22 2010
Quels leviers pour pérenniser les retraites ?
By arthur charpentier on Monday, February 22 2010, 03:04
Saturday, February 6 2010
Provisionnement et surdispersion
By arthur charpentier on Saturday, February 6 2010, 06:26
Un billet rapide suite à une question que j'ai reçu par mail, au sujet des triangles de liquidation, "pourquoi tout le monde fait du ODP alors que le résultat est le même que Poisson normale ?".
Le plus simple est de regarder effectivement, sur un triangle, ce qui
se passe si l'on prend des modèles intégrant de la surdispersion, au
lieu d'un modèle de Poisson plus classique. Pour commencer, ajustons un
modèle de Poisson sur le triangle des incréments,
> 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)
> reg1=glm(Y~col+lig,data=base,family="poisson")
> sum(exp(predict(reg1,newdata=base))[passe!=TRUE])
[1] 18680856
Si on utilise un modèle de Poisson surdispersé, la prédiction sera la même,
> reg2=glm(Y~col+lig,data=base,family="quasipoisson")
> sum(exp(predict(reg2,newdata=base))[passe!=TRUE])
[1] 18680856
En
effet, seule la variance change, i.e. l'incertitude sera plus grande si
l'on utilise un modèle de Poisson surdispersion. Notons que les tests
permettent de valider l'hypothèse de surdispersion,
> dispersiontest(reg1)
Overdispersion test
data: reg1
z = 4.3942, p-value = 5.558e-06
alternative hypothesis: true dispersion is greater than 1
Une autre idée peut être de faire une régression binomiale négative (qui permet de prendre en compte la surdispersion),
> library(MASS)
> reg3=glm.nb(Y~col+lig,data=base)
> summary(reg3)
(Dispersion parameter for Negative Binomial(13.8349) family taken to be 1)
Theta: 13.83
Std. Err.: 2.61
2 x log-likelihood: -1460.766
On peut alors calculer à nouveau le montant de provision total,
> sum(exp(predict(reg3,newdata=base))[passe!=TRUE])
[1] 18085795
qui est légèrement différent du cas Poissonnien.

> an <- 10; ligne = rep(1:an, each=an); colonne = rep(1:an, an)
> passe = (ligne + colonne - 1)<=an; np = sum(passe)
> futur = (ligne + colonne - 1)> an; nf = sum(passe)
> base$Y2=base$Y; base$Y2[is.na(Y)]=.001
> reg1b=glm(Y2~lig+col, family=poisson,data=base)
> reg2b=glm(Y2~lig+col, family=quasipoisson,data=base)
> reg3b=glm.nb(Y2~lig+col, data=base)
La fonction suivante calcule l'estimateur du montant total de réserve, ainsi que la prediction error (que l'on exprime également en fonction du montant de provisions)
> predCL=function(reg=reg1,regb=reg1b){
+ p = 2*6-1;
+ phi.P = sum(residuals(reg,"pearson")^2)/(np-p)
+ Sig = vcov(reg)
+ X = model.matrix(regb)
+ Cov.eta = X%*%Sig%*%t(X)
+ mu.hat = exp(predict(reg,newdata=data.frame(lig,col)))*futur
+ pe2 = phi.P * sum(mu.hat) + t(mu.hat) %*% Cov.eta %*% mu.hat
+ cat("Total reserve =", sum(mu.hat), "prediction error =", sqrt(pe2),sqrt(pe2)/sum(mu.hat)," ")
+ }
Avec nos trois modèles, Poisson, ODP et binomiale négative, on obtient,
> predCL(reg1,reg1b)
Total reserve = 18680856 prediction error = 896876.9 0.04801048
> predCL(reg2,reg2b)
Total reserve = 18680856 prediction error = 4736425 0.2535443
> predCL(reg3,reg3b)
Total reserve = 18085795 prediction error = 2058134 0.1137984
Moralité, oui la surdispersion a un impact, ainsi que la méthode que l'on retient pour ma modéliser....
Tuesday, December 1 2009
Les modèles Tweedie en actuariat (1)
By arthur charpentier on Tuesday, December 1 2009, 12:04

> ftweedie = function(y,p,mu,psi){
+ if(p==2){f = dgamma(y, 1/psi, 1/(psi*mu))} else
+ if(p==1){f = dpois(y/psi, mu/psi)} else
+ {lambda = mu^(2-p)/psi /(2-p)
+ if(y==0){ f = exp(-lambda)} else
+ { alpha = (2-p)/(p-1)
+ beta = 1 / (psi * (p-1) * mu^(p-1))
+ k = max(10, ceiling(lambda + 7*sqrt(lambda)))
+ f = sum(dpois(1:k,lambda) * dgamma(y,alpha*(1:k),beta))
+ }}
+ return(f)
+ }
On peut alors lancer une procédure de type maximum de vraisemblance profilée pour trouver la puissance optimale. On peut utiliser cette fonction pas seulement en tarification, mais aussi en provisionnement. Pour aller un peu plus vite, on peut utiliser la library(statmod), mais pour des aspects numériques, il convient de ne pas avoir de valeurs manquantes dans le triangle,
> source("http://perso.univ-rennes1.fr/arthur.charpentier/bases.R")
> library(statmod)
> an <- 6; ligne = rep(1:an, each=an); colonne = rep(1:an, an)
> passe = (ligne + colonne - 1)<=an; n = sum(passe)
> INC=PAID
> INC[,2:6]=PAID[,2:6]-PAID[,1:5]
> Y = as.vector(INC)
> lig = as.factor(ligne)
> col = as.factor(colonne)
> base=data.frame(Y,lig,col,passe)
> basen=base[base$passe=="TRUE",]
On utilise alors le code suivant (je reviendrais un jour plus longuement sur les procedures d'affichage de sorties),
> pltweedie <- function(puissqnce){
+ regt = glm(Y~lig+col, tweedie(pow,0),subset=(passe==TRUE))
+ reserve = sum(predict(regt,newdata=data.frame(lig,col),type="response")[!passe])
+ dev = deviance(regt)
+ phi.hat = dev/n
+ mu = fitted.values(regt)
+ hat.logL = 0
+ for (k in 1:length(y)){
+ hat.logL <- hat.logL + log(ftweedie(y[k], pow, mu[k], phi.hat)) }
+ cat("Puissance =", round(pow,3), "phi =", round(phi.hat,2),
+ "Reserve (tot) =", round(reserve), "logL =", round(hat.logL,3),"\n")
+ return(hat.logL)}
Sur le triangle dont on dispose, on peut regarde la logvraisemblance profilée,
> for(pow in c(1,1.25,1.5,1.75,2)){pltweedie(pow)}
Puissance = 1 phi = 1.44 Reserve (tot) = 2427 logL = -Inf
Puissance = 1.25 phi = 0.47 Reserve (tot) = 2427 logL = -95.965
Puissance = 1.5 phi = 0.15 Reserve (tot) = 2428 logL = -99.207
Puissance = 1.75 phi = 0.05 Reserve (tot) = 2434 logL = -102.149
Puissance = 2 phi = 0.01 Reserve (tot) = 2444 logL = -104.157
Il y a eu 21 avis (utilisez warnings() pour les visionner)
mais aussi lancer une routine d'optimisation,
> optimize(pltweedie, c(1.01,1.99), tol=1e-4,maximum = TRUE)
Puissance = 1.384 phi = 0.26 Reserve (tot) = 2427 logL = -97.707
Puissance = 1.616 phi = 0.09 Reserve (tot) = 2430 logL = -100.644
Puissance = 1.241 phi = 0.48 Reserve (tot) = 2427 logL = -95.855
Puissance = 1.153 phi = 0.72 Reserve (tot) = 2427 logL = -94.751
Puissance = 1.098 phi = 0.92 Reserve (tot) = 2427 logL = -94.096
Puissance = 1.065 phi = 1.07 Reserve (tot) = 2427 logL = -93.704
Puissance = 1.044 phi = 1.18 Reserve (tot) = 2427 logL = -93.474
Puissance = 1.031 phi = 1.25 Reserve (tot) = 2427 logL = -93.403
Puissance = 1.02 phi = 1.31 Reserve (tot) = 2427 logL = -93.303
Puissance = 1.024 phi = 1.29 Reserve (tot) = 2427 logL = -93.375
Puissance = 1.016 phi = 1.33 Reserve (tot) = 2427 logL = -93.107
Puissance = 1.014 phi = 1.35 Reserve (tot) = 2427 logL = -92.862
Puissance = 1.012 phi = 1.36 Reserve (tot) = 2427 logL = -92.641
Puissance = 1.012 phi = 1.36 Reserve (tot) = 2427 logL = -92.476
Puissance = 1.011 phi = 1.37 Reserve (tot) = 2427 logL = -92.362
Puissance = 1.011 phi = 1.37 Reserve (tot) = 2427 logL = -92.288
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.241
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.211
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.192
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.181
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.173
Puissance = 1.01 phi = 1.37 Reserve (tot) = 2427 logL = -92.173
$maximum
[1] 1.010050
$objective
[1] -92.1735
Autrement dit, ici, la loi de Poisson semble la mieux adaptée...
Wednesday, August 19 2009
Actuariat, la problématique du provisionnement
By arthur charpentier on Wednesday, August 19 2009, 12:46
La provision pour prime non acquise (PPNA) correspond à la fraction des primes brutes émises qui doit être allouée à l’exercice comptable suivant. Ces provisions s'expliquent par le fait que, d’une manière générale, les primes d’assurance doivent être payées au début de la période couverte (début du contrat), qui ne coïncide habituellement pas avec l’exercice comptable. Par conséquent, lorsque le bilan est établi à la fin d’un exercice, une partie des primes d’assurance payables au cours de celui-ci est destinée à couvrir des risques de la période suivante. Ces provisions sont alors calculées prorata temporis pour la durée restant à courir jusqu’à l’échéance du contrat. Elle est détaillée dans l'article A331-16 du Code des Assurances (ici)
La provision pour sinistre à payer (PASP) correspond au montant des sinistres survenus avant la date d’inventaire mais non encore réglés. Ces sinistres peuvent :
- être survenus, avoir été déclarés et n’avoir pas encore été (totalement) réglés ;
- être survenus, n’avoir pas été déclarés et donc n’avoir pas encore été réglés, ou, en anglais, incurred but not reported
La première est essentuellement comptable, et contient peu d'incertitude, alors que la seconde nécessite qu'on passe un peu de temps dessus en cours. On notera toutefois que la méthodologie est fixée (partiellement) par la loi (par exemple l'article R331-26 en assurance auto, ici).
Sur le provisionnement (au sens PSAP, ou claims reserving), je voulais renvoyer vers plusieurs très bons papier de Klaus Schmidt, tout d'abord un petit cours fait à Strasbourg, un autre paru à la CAS, et enfin un petit papier sur Bornhuetter-Ferguson dans Variance.
(via 





