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
sapply
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
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éairelm
dev=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