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.
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)
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)
Utiliser un bubble chart pour visualiser
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")
Calculer les coefficients de développement selon la méthode de Chain Ladder
sapplyn=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
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.
plot de f : que constate-t-on ?log(f-1) suit un modèle linéairelmdev=1:(n-1);tail.model=lm(log(f-1)~dev);co=coef(tail.model)
plot(dev,log(f-1))
abline(tail.model)
tail=exp(co[1]+c((n+1):(n+100))*co[2])+1
f.tail=prod(tail)
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")
cpcn=c(cpc[1],diff(cpc))
plot(cpcn, t="b",main="Cadence de paiement non cumulée",
xlab="Dev", ylab="Development % of ultimate loss")
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))
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
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
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