Il y a quelques années, Guillaume Beneteau avait fait son mémoire d'actuariat, en France, sur l'utilisation de données individuelles pour faire du provisionnement (au lieu de travailler sur des donnees aggregées dans des triangles). Dans le même genre d'idées, Ngoc An Dinh et Gilles Chau viennent de soutenir leur mémoire cette semaine à l'ENSAE, encadré par Frédéric Planchet. L'idée était de modéliser les processus de règlements avec deux approches : la première intitulée dynamiques markoviennes qui considère les processus de règlements (avec une certaine dynamique sous-jacente), et une basée sur des modèles linéaires généralisés qui suppose que les règlements appartiennent à une famille de distribution paramétrique et les paramètres dépendent des facteurs liés aux règlements. Le mémoire est en ligne sur le blog, ainsi que le code R.
Tag - provisions
Friday, June 29 2012
Provisionnement et modélisation individuelle des sinistres
By arthur charpentier on Friday, June 29 2012, 15:21 - Encadrement
Tuesday, December 13 2011
ACT2040: examen final (suite et fin)
By arthur charpentier on Tuesday, December 13 2011, 12:04 - ACT2040-2011
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 vases (sinon, le code est ici). Pour la première partie - sur la tarification (a priori) - la fréquence annuelle de sinistres est tout simplement
Tuesday, November 29 2011
ACT2040: chain ladder
By arthur charpentier on Tuesday, November 29 2011, 13:24 - ACT2040-2011

Pour la fin du cours, on a commencé à voir le méthode dit Chain Ladder. Pour cela, rappelons que l'on dispose du jeu de données suivants, de paiements cumulés,
> source("http://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
> 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
> 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.656où 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é.
> PROJECTION[,6]-diag(PAID[,6:1]) [1] 0.00 22.3968 35.7838 66.0646 153.0835 2149.6564 > sum(PROJECTION[,6]-diag(PAID[,6:1])) [1] 2426.985
Monday, October 25 2010
Statistique de l'assurance STT6705V, partie 8
By arthur charpentier on Monday, October 25 2010, 15:35 - actuariat 10/11 STT6705V
Pour reprendre les simulations qui n'ont pas marché au tableau (j'avais oublié restreindre un vecteur de paramètres et j'avais un problème sur le nom d'un paramètre), je mets ci-dessous des lignes de code qui tournent. Pour commencer, on importe le triangle, et on fait une simple régression log-Poisson,
> source("http://perso.univ-rennes1.fr/arthur.charpentier/bases.R")
> 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(colonne)
> col = as.factor(ligne)
> base=data.frame(Y,lig,col,passe)
> reg=glm(Y~lig+col,data=base, family=poisson("log"))
> YP=predict(reg,newdata=base, type="response")
ensuite, on fait un peut de bootstrap pour générer des pseudo-triangles, et on les utilise pour quantifier l'erreur d'estimation du montant de provision,
> set.seed(1)
> R1=rep(NA,2000)
> R2=rep(NA,2000)
> R3=rep(NA,2000)
> for(s in 1:2000){
+ erreursim=sample(erreur,
+ size=36,replace=TRUE)
+ Ysim=YP+erreursim*sqrt(YP)
+ Ysim[passe==FALSE]=NA
+ basesim=data.frame(Ysim,lig,col)
+ if(min(Ysim[passe==TRUE])>0){
+ reg=glm(Ysim~lig+col,data=basesim, family=quasipoisson("log"))
+ YPs=predict(reg,newdata=base, type="response")
+ nsim=sum(passe==FALSE)
+ phi=summary(reg)$dispersion
+ MU=YPs[passe==FALSE]
# il manquait ici la spécification des indices [passe==FALSE]
+ R1[s]=sum(rpois(nsim,lambda=MU))
+ R2[s]=sum(rnbinom(nsim,mu=MU, size=MU/(phi*MU-1)))
+ R3[s]=sum(rgamma(nsim,shape=MU/phi, scale=phi))
+ }}
.On peut alors faire des dessins pour visualiser les trois distributions du montant de provisions (ou plutôt des scénarios générés de paiements futur), avec une loi de Poisson tout d'abord, en rouge,








