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.

source("ChainLondon.R")
source("Taylor.R")

Génération des données de calculs

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

Triangle de paiement cumulé et non cumulé

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)

Calcul des IBNR

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]))
}

Chain Ladder

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.

Chain_ladder_PPAP <- MackChainLadder(Triangle_paiement_cumules)
Chain_ladder_PPAP
## 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
(chain_ppap = ibnr(Chain_ladder_PPAP$FullTriangle))
## [1] 864236.5

Avec la méthode de Chain Ladder, une provision de 864,236,53,€ est obtenue.

London Chain

La fonction suivante permet de calculer les IBNR à l’aide de la méthode de London Chain.

(london_ppap = Londonchain(Triangle_paiement_cumules, TRUE)$IBNR)

## [1] 627398.8

La méthode de London Chain fournit une provision de 627,398,8,€.

Taylor Arithmetique

(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.

Variation des delais de paiements

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
sum(Triangle_paiement_taylor_1jour-Triangle_paiement_taylor)
## [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é.

Calcul des IBNR

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:"
print(IBNR_CHAINLADDER)
## [1] 845171.7
print("IBNR London Chain:")
## [1] "IBNR London Chain:"
print(IBNR_CHAINLONDON)
## [1] 633504.9
print("IBNR Taylor:")
## [1] "IBNR Taylor:"
print(IBNR_TAYLOR$Provision)
## [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_results
##     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.

sd_values <- apply(IBNR_results, 2, sd)
print(sd_values)
## 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.

Les provisions sont-elles plus élevées avec une diminution des délais de paiement ?

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 à droite

ggplot(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 à droite

La 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 à droite

1. 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.