1 Introduction

La méthode de Chainladder permet de calculer les coefficients de développement d’un triangle, et cet artcile montre quelques méthodes de lissage.

On utilise le package ChainLadder.

2 Méthode de Chain Ladder

2.1 Visualisation du triangle cumulé

Un exemple de triangle est contenu dans le package :

RAA #Reinsurance Association of America
##       dev
## origin    1     2     3     4     5     6     7     8     9    10
##   1981 5012  8269 10907 11805 13539 16181 18009 18608 18662 18834
##   1982  106  4285  5396 10666 13782 15599 15496 16169 16704    NA
##   1983 3410  8992 13873 16141 18735 22214 22863 23466    NA    NA
##   1984 5655 11555 15766 21266 23425 26083 27067    NA    NA    NA
##   1985 1092  9565 15836 22169 25955 26180    NA    NA    NA    NA
##   1986 1513  6445 11702 12935 15852    NA    NA    NA    NA    NA
##   1987  557  4020 10946 12314    NA    NA    NA    NA    NA    NA
##   1988 1351  6947 13112    NA    NA    NA    NA    NA    NA    NA
##   1989 3133  5395    NA    NA    NA    NA    NA    NA    NA    NA
##   1990 2063    NA    NA    NA    NA    NA    NA    NA    NA    NA

Utilisation plot pour visualiser

plot(RAA) # option : lattice=TRUE

plot(RAA,lattice=TRUE)

2.2 Visualisation du triangle décumulé

Utiliser matplot pour visualiser le triangle décumulé

RAAnc=RAA[1:10,1:10]-cbind(t(t(rep(0,10))),RAA[1:10,1:9])
matplot(t(RAAnc),type="b",lwd=2)

2.3 Bubble chart du triangle

Utiliser un bubble chart pour visualiser

  • le triangle cumulé
  • le triangle décumulé
data=as.data.frame(cbind(rep(seq(1981,1990,1),10),
                         as.vector(t(matrix(rep(seq(1,10,1),10),10,10))),
                         as.vector(RAA)))
# symbols(data$V1,data$V2,squares=data$V3,inches=0.6,fg="white",bg="blue")
symbols(data$V1,data$V2,circles=data$V3,inches=0.4,fg="white",bg="blue")

2.4 Coefficients de développement

Calculer les coefficients de développement selon la méthode de Chain Ladder

  • avec une boucle R
  • en utilisant la fonction sapply
  • rappel de la formule \[f_k=\frac{\sum_{i=1}^{n-k}C{i,k+1}}{\sum_{i=1}^{n-k}C{i,k}}\]
n=10
f <- sapply(1:(n-1),function(i){
  sum(RAA[c(1:(n-i)),i+1])/sum(RAA[c(1:(n-i)),i])
  })
f
## [1] 2.999359 1.623523 1.270888 1.171675 1.113385 1.041935 1.033264 1.016936
## [9] 1.009217

3 Lissage des coefficients

3.1 Extrapolation des coefficients

En général, on ne considère pas que tout le développement est observé sur le triangle, ainsi on va faire une extrapolation.

  • Faire un plot de f : que constate-t-on ?
  • Quelle est la limite attendue de la suite ?
  • Faire l’hypothèse que log(f-1) suit un modèle linéaire
  • Réaliser la régression linéaire et trouver les coefficients du modèle
  • Fonction pour la régression linéaire : lm
  • A partir de quelle année peut-on considérer que le développement est complet ?
dev=1:(n-1);tail.model=lm(log(f-1)~dev);co=coef(tail.model)
plot(dev,log(f-1))
abline(tail.model)

3.2 Calcul du tail factor

tail=exp(co[1]+c((n+1):(n+100))*co[2])+1
f.tail=prod(tail)
  • Calculer la cadence de paiement, cumulée et non cumulée
  • Tracer le graphique

3.3 Cadence de paiement cumulée

cpc=rev(1/cumprod(rev(c(f, tail[tail>1.0001]))))
plot(cpc, t="b",main="Cadence de paiement cumulée",
xlab="Dev. period", ylab="Development % of ultimate loss")

3.4 Cadence de paiement non cumulée

  • Calcul de la cadence de paiement non cumulée
  • Lissage de la cadence
  • Utilisation de la fonction \(a\cdot exp(polynome)\)
cpcn=c(cpc[1],diff(cpc))
plot(cpcn, t="b",main="Cadence de paiement non cumulée",
xlab="Dev", ylab="Development % of ultimate loss")

3.5 Lissage cadence de paiement non cumulée

plot(log(cpcn));dev=1:14
cpcn.model=lm(log(cpcn)~dev+I(dev^2)+I(dev^3));cpcn.co=coef(cpcn.model)
lines(dev,cpcn.co[1]+cpcn.co[2]*dev+cpcn.co[3]*dev^2+cpcn.co[4]*dev^3)

cpcn=c(cpc[1],diff(cpc))
plot(cpcn, t="b",main="Cadence de paiement non cumulée",xlab="Dev", ylab="Development % of ultimate loss")
lines(dev,exp(cpcn.co[1]+cpcn.co[2]*dev+cpcn.co[3]*dev^2+cpcn.co[4]*dev^3))

3.6 Complétion du triangle

  • Compléter le triangle grâce aux coefficients de développement trouvés.
f.complet=c(f,f.tail)
fullRAA=cbind(RAA,Ult=rep(0,10)) # initialisation
for (k in 1:n){
  fullRAA[(n-k+1):n,k+1]=fullRAA[(n-k+1):n,k]*f.complet[k]

}
round(fullRAA)
##         1     2     3     4     5     6     7     8     9    10   Ult
## 1981 5012  8269 10907 11805 13539 16181 18009 18608 18662 18834 18928
## 1982  106  4285  5396 10666 13782 15599 15496 16169 16704 16858 16942
## 1983 3410  8992 13873 16141 18735 22214 22863 23466 23863 24083 24204
## 1984 5655 11555 15766 21266 23425 26083 27067 27967 28441 28703 28847
## 1985 1092  9565 15836 22169 25955 26180 27278 28185 28663 28927 29072
## 1986 1513  6445 11702 12935 15852 17649 18389 19001 19323 19501 19599
## 1987  557  4020 10946 12314 14428 16064 16738 17294 17587 17749 17838
## 1988 1351  6947 13112 16664 19525 21738 22650 23403 23800 24019 24139
## 1989 3133  5395  8759 11132 13043 14521 15130 15634 15898 16045 16125
## 1990 2063  6188 10046 12767 14959 16655 17353 17931 18234 18402 18495

3.7 Calcul de provision

  • Calculer le montant de provision par année
  • Provion totale
getLatestCumulative(RAA)
##  1981  1982  1983  1984  1985  1986  1987  1988  1989  1990 
## 18834 16704 23466 27067 26180 15852 12314 13112  5395  2063 
## attr(,"latestcol")
## 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 
##   10    9    8    7    6    5    4    3    2    1 
## attr(,"rowsname")
## [1] "origin"
## attr(,"colnames")
##  [1] "10" "9"  "8"  "7"  "6"  "5"  "4"  "3"  "2"  "1" 
## attr(,"colsname")
## [1] "dev"
sum(fullRAA[,11]-getLatestCumulative(RAA))
## [1] 53202.12

3.8 Cadences par année

  • Calculer la cadence par année de survence
  • Tracer le grahpique des cadences individuelles
  • Afficher la cadence moyenne sur les cadences individuelles
fullratio=RAA
for (i in 1:10){
  fullratio[i,]=RAA[i,]/fullRAA[i,11]
}
cpc
##  [1] 0.1115699 0.3346381 0.5432926 0.6904641 0.8089993 0.9007276 0.9384993
##  [8] 0.9697171 0.9861407 0.9952295 0.9975604 0.9988018 0.9994622 0.9998133
matplot(t(rbind(fullratio,cpc[1:10])),type="b",lwd=2)

Copyright © 2016 Blog de Kezhan Shi