Cette étude vise à explorer l’impact des variations des délais de paiement sur le calcul des Provisions pour Prestations à Payer (PPAP). À l’aide de simulations réalisées en R, des paiements et des cadences ont été modélisés pour évaluer l’effet de variations allant jusqu’à 5 jours sur les estimations des PPAP.
Les librairies importantes
library(dplyr)
library(readr)
library(ggplot2)
library(ChainLadder)
library(gtools)
library(lubridate)Les fonctions permettant de calculer les provisions à l’aide des méthodes de London Chain et de Taylor arithmétique sont implémentées pour effectuer ces estimations.
Dans un premier temps, les données nécessaires pour effectuer ces calculs seront simulées en générant 10 000 déclarations avec des dates de survenance différentes et des montants variant entre 1 € et 1 000 €. Les délais de paiement seront simulés avec une moyenne de 30 jours.
set.seed(342)
n <- 10000
date_survenance <- as.Date("2021-01-01") + sample(0:(as.Date("2023-12-31") - as.Date("2021-01-01")), n, replace = TRUE)
# Générer les délais de déclaration (loi exponentielle avec une moyenne de 30 jours)
delais <- 2+c(round(rexp(n-1000, rate = 1/30)), 1:1000)
delais_final <- sample(delais, n)
# Calculer les dates de déclaration (toujours ≥ date de survenance)
date_declaration <- pmin(date_survenance + delais, as.Date("2023-12-31"))
montants <- runif(n, min = 1, max = 1000)
donnees <- data.frame(
Date_Survenance = date_survenance,
Date_Declaration = date_declaration,
Montant = montants
)
head(donnees)## Date_Survenance Date_Declaration Montant
## 1 2021-05-02 2021-05-26 26.05176
## 2 2022-09-15 2022-09-30 770.10902
## 3 2022-03-24 2022-06-02 386.46331
## 4 2022-06-12 2022-06-27 794.06052
## 5 2022-08-26 2022-10-05 589.76927
## 6 2021-02-11 2021-03-03 182.24505
Pour le calcul des IBNR à l’aide des méthodes déterministes agrégées, les triangles de paiement cumulés seront nécessaires. Pour ce faire, les données seront agrégées dans un triangle \(N \times N\), où \(N\) représente le nombre de périodes d’étude (36 dans ce cas). Les données seront agrégées par période de survenance et de déclaration, de préférence par mois.
ref_date <- as.Date("2021-01-01")
# Transformer les dates en nombre de mois depuis la référence
mois_survenance <- (year(date_survenance)-year(ref_date))*12 + month(date_survenance)
mois_declaration <- (year(date_declaration)-year(ref_date))*12 + month(date_declaration) - mois_survenance + 1
mois_declaration_taylor <- (year(date_declaration)-year(ref_date))*12 + month(date_declaration)Le mois de déclaration (ou de paiement) est calculé en fonction du mois de survenance, afin de construire le triangle de paiement cumulé.
# Construire le dataframe final
donnees_mois <- data.frame(
Mois_Survenance = round(mois_survenance, 1),
Mois_Declaration = round(mois_declaration, 1),
Mois_survenance_Taylor = round(mois_declaration_taylor,1),
Montant = montants
)
# Afficher les premières lignes
head(donnees_mois)## Mois_Survenance Mois_Declaration Mois_survenance_Taylor Montant
## 1 5 1 5 26.05176
## 2 21 1 21 770.10902
## 3 15 4 18 386.46331
## 4 18 1 18 794.06052
## 5 20 3 22 589.76927
## 6 2 2 3 182.24505
Le code suivant permet d’agréger les données dans le triangle, où \(Y_{i,j}\) représente le paiement pour un sinistre survenu à la période \(i\) et réglé à la période \(j\) à partir de \(i\). Dans ce cas, les paiements cumulés sont définis par :
\[ C_{i,j} = \sum_{k=0}^{i} Y_{k,j}. \]
Tableau 1 : Paiements \(Y_{i,j}\)
\[
\begin{array}{c|cccccc}
i,j & 0 & 1 & \dots & j & \dots & n \\
\hline
0 & Y_{0,0} & Y_{0,1} & \dots & Y_{0,j} & \dots
& Y_{0,n} \\
\vdots & \vdots & \vdots & & \vdots & & \\
i & Y_{i,0} & Y_{i,1} & \dots & Y_{i,j}
& & \\
\vdots & \vdots & & & & & \\
n & Y_{n,0} & & & & &
\end{array}
\]
Tableau 2 : Paiements cumulés \(C_{i,j}\)
\[
\begin{array}{c|cccccc}
i,j & 0 & 1 & \dots & j & \dots & n \\
\hline
0 & C_{0,0} & C_{0,1} & \dots & C_{0,j} & \dots
& C_{0,n} \\
\vdots & \vdots & \vdots & & \vdots & & \\
i & C_{i,0} & C_{i,1} & \dots & C_{i,j}
& & \\
\vdots & \vdots & & & & & \\
n & C_{n,0} & & & & &
\end{array}
\]
Le triangle de paiement cumulé pour les methodes de London Chane t de Chaon ladder
triangle_paiement_cumule <- function(data_paiement, Row, Col){
Triangle_paiement_cumules <- matrix(NA, ncol = Col, nrow = Row)
data_paiement <- data_paiement %>%
group_by(Mois_Survenance, Mois_Declaration) %>%
summarise(Montant = sum(Montant), .groups = "drop")
for(i in 1:Row) {
cum_sum <- 0
for(j in 1:Col) {
if(i + j <= Row + 1) { # Vérifie que l'index reste dans le triangle
subdata <- subset(data_paiement, Mois_Survenance == i & Mois_Declaration == j)
if(nrow(subdata) > 0) {
cum_sum <- cum_sum + subdata$Montant
Triangle_paiement_cumules[i, j] <- cum_sum # Remplissage de la matrice avec la somme cumulative
} else {
Triangle_paiement_cumules[i, j] <- cum_sum # Ajoute 0 à la somme si aucune donnée
}
}
}
}
return(Triangle_paiement_cumules)
}
Triangle_paiement_cumules = triangle_paiement_cumule(donnees_mois, 36, 36)Le triangles de paiement non cumulé pour la methode de taylor arithmetiques
triangle_paiement_taylor <- function(data_paiement, Row, Col) {
Triangle <- matrix(NA, ncol = Col, nrow = Row)
data_paiement <- data_paiement %>%
group_by(Mois_Survenance, Mois_survenance_Taylor) %>%
summarise(Montant = sum(Montant), .groups = "drop")
for (i in 1:Row) {
for (j in 1:Col) {
Triangle[i, j] <- sum(data_paiement$Montant[data_paiement$Mois_Survenance == i &
data_paiement$Mois_Declaration == j], na.rm = TRUE)
}
}
return(Triangle)
}
Triangle_paiement_taylor = triangle_paiement_taylor(donnees_mois, 36, 36)les IBNR sont donnée par la forume suovante :
\[IBNR = CHARGE - ULTIME \]
ibnr <- function(data_paiement){
return(sum(data_paiement[, ncol(data_paiement)] -
data_paiement[row(data_paiement) +
col(data_paiement) == ncol(data_paiement) + 1]))
}Le package ChainLadder permet d’estimer les IBNR à
l’aide de la méthode Chain Ladder. Il permet également, grâce à la
fonction MackChainLadder, de fournir une estimation des
erreurs de Mack.
## MackChainLadder(Triangle = Triangle_paiement_cumules)
##
## Latest Dev.To.Date Ultimate IBNR Mack.S.E CV(IBNR)
## 1 130,508 1.000 130,508 0.00e+00 0.0 NaN
## 2 118,944 1.000 118,944 0.00e+00 11.9 Inf
## 3 123,140 1.000 123,140 -1.46e-11 12.2 -8.38e+11
## 4 138,350 0.998 138,584 2.34e+02 224.8 9.61e-01
## 5 138,602 0.992 139,729 1.13e+03 461.8 4.10e-01
## 6 146,436 0.989 148,055 1.62e+03 621.5 3.84e-01
## 7 145,833 0.985 147,988 2.15e+03 823.0 3.82e-01
## 8 135,492 0.980 138,317 2.83e+03 1,436.2 5.08e-01
## 9 141,265 0.975 144,820 3.55e+03 1,809.3 5.09e-01
## 10 152,341 0.969 157,163 4.82e+03 2,250.6 4.67e-01
## 11 135,132 0.963 140,389 5.26e+03 2,321.5 4.42e-01
## 12 140,544 0.958 146,704 6.16e+03 2,741.4 4.45e-01
## 13 143,150 0.951 150,461 7.31e+03 3,183.6 4.35e-01
## 14 127,424 0.946 134,731 7.31e+03 3,358.7 4.60e-01
## 15 158,977 0.941 169,000 1.00e+04 4,278.2 4.27e-01
## 16 119,297 0.935 127,570 8.27e+03 3,950.2 4.77e-01
## 17 134,736 0.928 145,245 1.05e+04 5,056.6 4.81e-01
## 18 121,352 0.924 131,393 1.00e+04 4,896.7 4.88e-01
## 19 129,121 0.920 140,390 1.13e+04 5,201.4 4.62e-01
## 20 134,463 0.915 146,981 1.25e+04 5,391.5 4.31e-01
## 21 135,060 0.910 148,375 1.33e+04 5,569.6 4.18e-01
## 22 143,822 0.906 158,754 1.49e+04 6,162.8 4.13e-01
## 23 145,549 0.899 161,876 1.63e+04 6,746.7 4.13e-01
## 24 132,334 0.894 148,034 1.57e+04 6,900.8 4.40e-01
## 25 151,178 0.889 170,000 1.88e+04 7,529.9 4.00e-01
## 26 131,661 0.884 148,857 1.72e+04 7,368.5 4.28e-01
## 27 137,770 0.878 156,856 1.91e+04 8,010.1 4.20e-01
## 28 130,267 0.873 149,175 1.89e+04 8,145.5 4.31e-01
## 29 150,409 0.867 173,462 2.31e+04 9,492.6 4.12e-01
## 30 151,234 0.860 175,762 2.45e+04 9,884.4 4.03e-01
## 31 135,417 0.853 158,740 2.33e+04 9,743.0 4.18e-01
## 32 155,161 0.842 184,314 2.92e+04 11,134.3 3.82e-01
## 33 124,411 0.817 152,288 2.79e+04 10,771.8 3.86e-01
## 34 134,834 0.763 176,788 4.20e+04 12,561.9 2.99e-01
## 35 128,302 0.631 203,298 7.50e+04 17,442.8 2.33e-01
## 36 138,977 0.268 519,034 3.80e+05 47,143.5 1.24e-01
##
## Totals
## Latest: 4,941,491.48
## Dev: 0.85
## Ultimate: 5,805,728.01
## IBNR: 864,236.53
## Mack.S.E 77,564.07
## CV(IBNR): 0.09
## [1] 864236.5
Avec la méthode de Chain Ladder, une provision de 864,236,53,€ est obtenue.
La fonction suivante permet de calculer les IBNR à l’aide de la méthode de London Chain.
## [1] 627398.8
La méthode de London Chain fournit une provision de 627,398,8,€.
(Taylor_ppap = Taylor(triangle_paiement_taylor(donnees_mois, 36, 36), Min = 1, Max = 36, decoupe = 36))## Periode Provision
## 1 1 NaN
La provision donnée par la méthode de Taylor Arithmétique est la plus faible, s’élevant à 603,441. Même si les données sont simulées, cela permet d’observer que Taylor fournit une provision bien plus basse que celle de Chain Ladder(en general). London Chain arrive en seconde position. Étant donné que les données sont simulées et ne proviennent pas d’une véritable assurance, il est impossible de déterminer laquelle des méthodes fournit la meilleure estimation dans ce cas.
Dans la suite, les délais de paiement seront réduits de 1 jour, en supposant une diminution des délais due aux avancées technologiques. L’impact de cette réduction sur les provisions sera analysé.
variation_simules <- sample(0:1, n, replace = TRUE)
date_declaration_varie <- date_declaration - variation_simules
ref_date <- as.Date("2021-01-01")
# Transformer les dates en nombre de mois depuis la référence
mois_survenance <- (year(date_survenance)-year(ref_date))*12 + month(date_survenance)
mois_declaration <- (year(date_declaration_varie)-year(ref_date))*12 + month(date_declaration_varie) - mois_survenance + 1
mois_declaration_taylor <- (year(date_declaration_varie)-year(ref_date))*12 + month(date_declaration_varie)
# Remplacer les valeurs de mois_declaration égales à 0 ou NULL par 1
mois_declaration <- ifelse(mois_declaration < 1 | is.na(mois_declaration), 1, mois_declaration)
mois_declaration_taylor <- ifelse(mois_declaration_taylor < 1 | is.na(mois_declaration_taylor), 1, mois_declaration_taylor)
donnees_mois_varie <- data.frame(
Mois_Survenance = round(mois_survenance, 1),
Mois_Declaration = round(mois_declaration, 1),
Mois_survenance_Taylor = round(mois_declaration_taylor,1),
Montant = montants
)
Triangle_paiement_cumules_1jour = triangle_paiement_cumule(donnees_mois_varie, 36, 36)
Triangle_paiement_taylor_1jour = triangle_paiement_taylor(donnees_mois_varie, 36, 36)Les montants ne changent pas dans le triangles.
sum((Triangle_paiement_cumules_1jour[row(Triangle_paiement_cumules_1jour) +
col(Triangle_paiement_cumules_1jour) == ncol(Triangle_paiement_cumules_1jour) + 1]))## [1] 4941491
sum((Triangle_paiement_cumules_1jour[row(Triangle_paiement_cumules_1jour) +
col(Triangle_paiement_cumules_1jour) == ncol(Triangle_paiement_cumules_1jour) + 1]))## [1] 4941491
## [1] 0
Les mêmes calculs seront reproduits en faisant varier les délais de paiement, cette fois-ci à la baisse, car dans notre cas(mémoire), les délais de paiement tendent à diminuer. Les délais seront réduits de 1 à 10 jours maximum, et l’impact sur les IBNR sera analysé.
IBNR_CHAINLADDER <- ibnr(MackChainLadder(Triangle_paiement_cumules_1jour)$FullTriangle)
IBNR_CHAINLONDON <- Londonchain(Triangle_paiement_cumules_1jour, FALSE)$IBNR
IBNR_TAYLOR <- Taylor(Triangle_paiement_taylor_1jour, Min = 1, Max = 36, decoupe = 36)
# Afficher les résultats des différents calculs
print("IBNR Chain Ladder:")## [1] "IBNR Chain Ladder:"
## [1] 845171.7
## [1] "IBNR London Chain:"
## [1] 633504.9
## [1] "IBNR Taylor:"
## [1] NaN
Le premier constat est que les provisions données par les trois méthodes diminuent lorsque les délais sont réduits de 1 jour.
generate_triangle_ibnr <- function(Nbre, Montant, date_survenance, date_declaration, n, ref_date, delta_delais){
ref_date <- as.Date("2021-01-01")
IBNR <- list()
for(i in 1:Nbre){
variation_simules <- sample(0:delta_delais, n, replace = TRUE)
date_declaration_varie <- date_declaration - variation_simules
mois_survenance <- (year(date_survenance)-year(ref_date))*12 + month(date_survenance)
mois_declaration <- (year(date_declaration_varie)-year(ref_date))*12 + month(date_declaration_varie) - mois_survenance + 1
mois_declaration_taylor <- (year(date_declaration_varie)-year(ref_date))*12 + month(date_declaration_varie)
# Remplacer les valeurs de mois_declaration égales à 0 ou NULL par 1
mois_declaration <- ifelse(mois_declaration < 1 | is.na(mois_declaration), 1, mois_declaration)
mois_declaration_taylor <- ifelse(mois_declaration_taylor < 1 | is.na(mois_declaration_taylor), 1, mois_declaration_taylor)
donnees_mois_varie <- data.frame(
Mois_Survenance = round(mois_survenance, 1),
Mois_Declaration = round(mois_declaration, 1),
Mois_survenance_Taylor = round(mois_declaration_taylor,1),
Montant = montants
)
Triangle_paiement_cumules_1jour = triangle_paiement_cumule(donnees_mois_varie, 36, 36)
Triangle_paiement_taylor_1jour = triangle_paiement_taylor(donnees_mois_varie, 36, 36)
IBNR_CHAINLADDER <- ibnr(MackChainLadder(Triangle_paiement_cumules_1jour)$FullTriangle)
IBNR_CHAINLONDON <- Londonchain(Triangle_paiement_cumules_1jour, FALSE)$IBNR
IBNR_TAYLOR <- Taylor(Triangle_paiement_taylor_1jour, Min = 1, Max = 36, decoupe = 36)
IBNR <- rbind(
IBNR,
data.frame(
IBNR_chainLadder = IBNR_CHAINLADDER,
IBNR_London = IBNR_CHAINLONDON,
IBNR_TAYLOR = IBNR_TAYLOR$Provision
)
)
}
return(IBNR)
}
IBNR_results <- generate_triangle_ibnr(100, montants, date_survenance, date_declaration, n, ref_date, 1)## IBNR_chainLadder IBNR_London IBNR_TAYLOR
## 1 849502.7 624500.3 NaN
## 2 846685.9 627336.5 NaN
## 3 841855.9 624651.6 NaN
## 4 843852.7 617980.7 NaN
## 5 846277.2 634649.8 NaN
## 6 845600.3 629129.9 NaN
## 7 847845.5 638776.4 NaN
## 8 843190.9 622283.2 NaN
## 9 843741.2 629890.7 NaN
## 10 841786.1 621244.6 NaN
## 11 843239.1 634230.2 NaN
## 12 843205.8 624118.7 NaN
## 13 843614.4 621716.8 NaN
## 14 847392.9 630257.9 NaN
## 15 843431.9 625824.5 NaN
## 16 845289.3 643658.7 NaN
## 17 841461.8 621363.0 NaN
## 18 844409.8 624380.9 NaN
## 19 841922.2 628167.8 NaN
## 20 843104.7 636238.8 NaN
## 21 842247.7 628209.8 NaN
## 22 843301.4 621128.6 NaN
## 23 842508.6 617723.4 NaN
## 24 845111.4 630583.7 NaN
## 25 845252.2 639754.7 NaN
## 26 845521.6 631337.7 NaN
## 27 849109.8 625848.8 NaN
## 28 845976.6 625319.8 NaN
## 29 846803.6 636517.1 NaN
## 30 845921.3 627938.8 NaN
## 31 844316.8 618131.7 NaN
## 32 848743.6 617391.7 NaN
## 33 845362.3 638181.8 NaN
## 34 848358.2 633859.2 NaN
## 35 849080.8 634771.1 NaN
## 36 847265.4 626450.4 NaN
## 37 847899.1 632975.8 NaN
## 38 848222.7 626818.0 NaN
## 39 846737.8 635498.6 NaN
## 40 846144.0 622719.7 NaN
## 41 847585.6 634134.2 NaN
## 42 845215.5 624524.3 NaN
## 43 844712.1 614519.8 NaN
## 44 842206.3 618560.7 NaN
## 45 841021.7 619087.0 NaN
## 46 845382.2 639964.1 NaN
## 47 846084.7 639234.9 NaN
## 48 846153.5 630340.4 NaN
## 49 842642.3 620350.4 NaN
## 50 846039.8 635348.3 NaN
## 51 845376.0 617732.1 NaN
## 52 845383.6 631952.4 NaN
## 53 842694.8 627761.6 NaN
## 54 848706.7 626466.6 NaN
## 55 846548.7 624703.9 NaN
## 56 845728.1 633889.8 NaN
## 57 842989.2 625158.2 NaN
## 58 844205.3 633037.4 NaN
## 59 843985.7 617607.5 NaN
## 60 844908.1 630247.8 NaN
## 61 844046.9 624004.2 NaN
## 62 845663.6 615156.7 NaN
## 63 844357.9 625525.8 NaN
## 64 850056.6 629874.1 NaN
## 65 846153.6 637302.8 NaN
## 66 844716.0 618930.5 NaN
## 67 846657.9 638244.4 NaN
## 68 850447.7 630386.5 NaN
## 69 844046.9 635179.9 NaN
## 70 845359.2 635766.7 NaN
## 71 845497.0 624219.4 NaN
## 72 849800.7 624578.9 NaN
## 73 842443.3 626511.3 NaN
## 74 844586.0 614421.0 NaN
## 75 846124.6 630055.9 NaN
## 76 846269.6 636771.7 NaN
## 77 846813.6 627473.5 NaN
## 78 842745.7 624561.6 NaN
## 79 846922.0 633085.6 NaN
## 80 847757.0 633376.5 NaN
## 81 842783.5 616880.2 NaN
## 82 845938.1 650432.3 NaN
## 83 844446.8 610490.7 NaN
## 84 842005.9 630353.5 NaN
## 85 845676.2 620355.5 NaN
## 86 842805.7 636223.6 NaN
## 87 846727.2 629145.1 NaN
## 88 844375.7 642853.0 NaN
## 89 845665.0 634418.2 NaN
## 90 842726.9 617500.6 NaN
## 91 843724.3 624033.8 NaN
## 92 843620.8 622850.0 NaN
## 93 841255.3 625074.3 NaN
## 94 847298.6 624961.8 NaN
## 95 842930.4 620615.5 NaN
## 96 845534.7 631098.2 NaN
## 97 841591.4 625482.5 NaN
## 98 846300.6 633844.0 NaN
## 99 846236.0 630597.1 NaN
## 100 842917.1 615358.0 NaN
# Créer un data.frame long pour IBNR avec le numéro de simulation
IBNR_results_long <- data.frame(
Simulation = rep(1:nrow(IBNR_results), times = 3),
Value = c(IBNR_results$IBNR_chainLadder, IBNR_results$IBNR_London, IBNR_results$IBNR_TAYLOR),
Type = rep(c('IBNR_chainLadder', 'IBNR_London', 'IBNR_TAYLOR'), each = nrow(IBNR_results))
)
# Tracer les résultats en fonction du numéro de simulation
ggplot(IBNR_results_long, aes(x = Simulation, y = Value, color = Type)) +
geom_line(alpha = 0.6) + # Tracer des lignes
geom_point(alpha = 0.6) + # Ajouter des points pour chaque simulation
labs(title = "Valeurs de IBNR_chainLadder, IBNR_London et IBNR_TAYLOR par Simulation",
x = "Numéro de Simulation", y = "Valeur de IBNR") +
theme_minimal() +
theme(legend.position = 'top')La méthode de London, comme le montre le graphique, est plus sensible à la variation des délais de paiement que les autres méthodes. Cependant, dans ce cas, il ne s’agit que d’une variation d’un jour. Pour approfondir l’analyse, la variation sera poussée jusqu’à 10 jours.
IBNR_results <- generate_triangle_ibnr(100, montants, date_survenance, date_declaration, n, ref_date, 10)
# Créer un data.frame long pour IBNR avec le numéro de simulation
IBNR_results_long <- data.frame(
Simulation = rep(1:nrow(IBNR_results), times = 3),
Value = c(IBNR_results$IBNR_chainLadder, IBNR_results$IBNR_London, IBNR_results$IBNR_TAYLOR),
Type = rep(c('IBNR_chainLadder', 'IBNR_London', 'IBNR_TAYLOR'), each = nrow(IBNR_results))
)
# Tracer les résultats en fonction du numéro de simulation
ggplot(IBNR_results_long, aes(x = Simulation, y = Value, color = Type)) +
geom_line(alpha = 0.6) + # Tracer des lignes
geom_point(alpha = 0.6) + # Ajouter des points pour chaque simulation
labs(title = "Valeurs de IBNR_chainLadder, IBNR_London et IBNR_TAYLOR par Simulation",
x = "Numéro de Simulation", y = "Valeur de IBNR") +
theme_minimal() +
theme(legend.position = 'top')Plus les délais baissent, plus les provisions divergent. La méthode de London Chain n’est sans doute pas la meilleure à prendre en compte dans ce cas, car les provisions qu’elle fournit sont très volatiles. La méthode de Taylor Arithmétique reste relativement stable, tandis que celle de Chain Ladder varie également, mais dans une moindre mesure.
## IBNR_chainLadder IBNR_London IBNR_TAYLOR
## 2581.488 16695.319 NA
Comme nous le montre les ecart types, les Taylor est plus stable, c’est l’une des raison pour lesquelles elle a été unitiisz pendant des années chez GFM.
Pour répondre à cette question, les résultats des provisions seront analysés en fonction des différentes méthodes de calcul utilisées. L’impact d’une réduction des délais de paiement sur les estimations des provisions sera examiné en détail.
ggplot(IBNR_results, aes(x = IBNR_chainLadder)) +
geom_density(fill = "blue", alpha = 0.4) + # Tracer la densité avec une couleur de remplissage
geom_vline(aes(xintercept = chain_ppap, color = "ibnr chain ladder"), linetype = "dashed", size = 1) + # Ajouter la droite verticale
scale_color_manual(name = "", values = c("ibnr chaine ladder" = "red")) + # Définir la couleur et le label de la légende
labs(title = "Densité de IBNR_chainLadder avec référence chain_ppap",
x = "Valeur de IBNR_chainLadder",
y = "Densité") +
theme_minimal() +
theme(legend.position = "right") # Placer la légende à droiteggplot(IBNR_results, aes(x = IBNR_London)) +
geom_density(fill = "blue", alpha = 0.4) + # Tracer la densité avec une couleur de remplissage
geom_vline(aes(xintercept = london_ppap, color = "ibnr london chain"), linetype = "dashed", size = 1) + # Ajouter la droite verticale
scale_color_manual(name = "", values = c("ibnr london chain" = "red")) + # Définir la couleur et le label de la légende
labs(title = "Densité de IBNR_chainLadder avec référence chain_ppap",
x = "Valeur de IBNR_chainLadder",
y = "Densité") +
theme_minimal() +
theme(legend.position = "right") # Placer la légende à droiteLa méthode de London Chain étant la plus volatile, les provisions qu’elle fournit, avec une réduction des délais de paiement, peuvent être soit plus élevées, soit plus faibles que la valeur réelle. Comme le montre le graphique ci-dessus, les résultats sont presque équitablement répartis autour de la valeur réelle.
ggplot(IBNR_results, aes(x = IBNR_TAYLOR)) +
geom_density(fill = "blue", alpha = 0.4) +
geom_vline(aes(xintercept = Taylor_ppap$Provision, color = "ibnr taylor"), linetype = "dashed", size = 1) +
scale_color_manual(name = "", values = c("ibnr taylor" = "red")) +
labs(title = "Densité de IBNR_chainLadder avec référence chain_ppap",
x = "Valeur de IBNR_chainLadder",
y = "Densité") +
theme_minimal() +
theme(legend.position = "right") # Placer la légende à droite1. Provisions sous-estimées avec des délais
courts
Les méthodes Taylor et Chain Ladder donnent
généralement des provisions plus faibles que les valeurs réelles. Cela
s’explique par le fait qu’avec des délais de paiement de plus en plus
courts, les coefficients de passage dans les triangles de paiement se
rapprochent rapidement de 1.
2. Cas théorique vs réalité
Ce constat est valable dans le cas où les IBNR sont calculées en
diminuant simplement les délais sans ajuster les paiements. Cependant,
dans la réalité (chez France Mutelle), une réduction des délais de 10
jours modifie la répartition des paiements. Par exemple, un sinistre
survenu le 22/12/N et payé le 03/01/N+1 serait maintenant payé le
28/12/N, ce qui gonflerait les paiements de l’année N.
3. Impact sur les paiements en fin d’année
Les délais de paiement étant plus courts en fin d’année, davantage de
paiements sont comptabilisés pour l’année N, tandis que moins de
paiements sont reportés à l’année N+1. De plus, les années les plus
récentes, ayant les délais les plus courts, entraînent une augmentation
annuelle des charges à prendre en compte pour le calcul des IBNR.
4. Raisons du surprovisionnement chez GFM
Ces mécanismes expliquent en partie le surprovisionnement observé chez
GFM. La réduction des délais de paiement, combinée à une répartition
inégale des paiements en fin d’année, contribue à une surestimation des
provisions nécessaires.