Une compagnie d’assurance souhaite déterminer au 31/12/2025 la provision pour sinistres à payer sur un portefeuille automobile.

On dispose du triangle suivant de sinistres cumulés payés, en milliers de FCFA :

Année de survenance 12 mois 24 mois 36 mois 48 mois 60 mois
2021 4 200 6 800 8 100 8 900 9 300
2022 4 500 7 200 8 600 9 500 —
2023 4 800 7 600 9 200 — —
2024 5 100 8 100 — — —
2025 5 400 — — — —

Tous les montants sont en milliers de FCFA.

1. Méthode Chain-Ladder

Pour chaque période, calculons les facteurs de développement.

\[ f_{j} = \frac{\sum_{i=1}^{I-j}C_{i,j+1}}{\sum_{i=1}^{I-j}C_{i,j}}\]

Avec \(I\) la periode considerée.

# Chargement du package
library(ChainLadder)
## Warning: package 'ChainLadder' was built under R version 4.4.3
## 
## Welcome to ChainLadder version 0.2.21
## 
## 
## To cite package 'ChainLadder' in publications use:
## 
##   Gesmann M, Murphy D, Zhang Y, Carrato A, Wuthrich M, Concina F, Dal
##   Moro E (2026). _ChainLadder: Statistical Methods and Models for
##   Claims Reserving in General Insurance_. R package version 0.2.21,
##   <https://CRAN.R-project.org/package=ChainLadder>.
## 
## To suppress this message use:
## suppressPackageStartupMessages(library(ChainLadder))
#Voir le liste des fonctions du package
ls("package:ChainLadder")
##  [1] "ABC"                    "as.LongTriangle"        "as.triangle"           
##  [4] "ata"                    "auto"                   "AutoBI"                
##  [7] "BootChainLadder"        "BS.paid.adj"            "cbind2"                
## [10] "CDR"                    "chainladder"            "checkTriangleInflation"
## [13] "ClarkCapeCod"           "ClarkLDF"               "CLFMdelta"             
## [16] "coef"                   "coerce"                 "cum2incr"              
## [19] "cyEffTest"              "dfCorTest"              "fitted"                
## [22] "GenIns"                 "GenInsLong"             "getLatestCumulative"   
## [25] "glmReserve"             "incr2cum"               "inflateTriangle"       
## [28] "Join2Fits"              "JoinFitMse"             "liab"                  
## [31] "LRfunction"             "M3IR5"                  "MackChainLadder"       
## [34] "MCLincurred"            "MCLpaid"                "MedMal"                
## [37] "Mortgage"               "Mse"                    "MultiChainLadder"      
## [40] "MultiChainLadder2"      "MunichChainLadder"      "MW2008"                
## [43] "MW2014"                 "PaidIncurredChain"      "plot"                  
## [46] "predict"                "qincurred"              "qpaid"                 
## [49] "QuantileIFRS17"         "RAA"                    "rbind2"                
## [52] "resid"                  "residCor"               "residCov"              
## [55] "residuals"              "rstandard"              "show"                  
## [58] "summary"                "Table64"                "Table65"               
## [61] "Table68"                "triangle"               "tweedieReserve"        
## [64] "UKMotor"                "USAAincurred"           "USAApaid"              
## [67] "vcov"
# ============================================================
# 1. CREATION DU TRIANGLE
# ============================================================

triangle <- matrix(
  c(
    4200, 6800, 8100, 8900, 9300,
    4500, 7200, 8600, 9500, NA,
    4800, 7600, 9200, NA,   NA,
    5100, 8100, NA,   NA,   NA,
    5400, NA,   NA,   NA,   NA
  ),
  nrow = 5,
  byrow = TRUE
)

# Nommer les lignes et colonnes
rownames(triangle) <- c(
  "2021",
  "2022",
  "2023",
  "2024",
  "2025"
)

colnames(triangle) <- c(
  "12 mois",
  "24 mois",
  "36 mois",
  "48 mois",
  "60 mois"
)

# Afficher le triangle
triangle
##      12 mois 24 mois 36 mois 48 mois 60 mois
## 2021    4200    6800    8100    8900    9300
## 2022    4500    7200    8600    9500      NA
## 2023    4800    7600    9200      NA      NA
## 2024    5100    8100      NA      NA      NA
## 2025    5400      NA      NA      NA      NA
# ============================================================
# 2. TRANSFORMATION EN TRIANGLE ChainLadder
# ============================================================

Triangle <- as.triangle(triangle)

Triangle
##       dev
## origin 12 mois 24 mois 36 mois 48 mois 60 mois
##   2021    4200    6800    8100    8900    9300
##   2022    4500    7200    8600    9500      NA
##   2023    4800    7600    9200      NA      NA
##   2024    5100    8100      NA      NA      NA
##   2025    5400      NA      NA      NA      NA
# ============================================================
# 3. CHAIN-LADDER DE MACK
# ============================================================

mack <- MackChainLadder(
  Triangle,
  est.sigma = "Mack"
)


# Afficher les résultats
mack
## MackChainLadder(Triangle = Triangle, est.sigma = "Mack")
## 
##      Latest Dev.To.Date Ultimate  IBNR Mack.S.E CV(IBNR)
## 2021  9,300       1.000    9,300     0      0.0      NaN
## 2022  9,500       0.957    9,927   427     22.8   0.0534
## 2023  9,200       0.869   10,592 1,392     53.2   0.0382
## 2024  8,100       0.724   11,182 3,082    121.1   0.0393
## 2025  5,400       0.454   11,904 6,504    175.6   0.0270
## 
##              Totals
## Latest:   41,500.00
## Dev:           0.78
## Ultimate: 52,904.80
## IBNR:     11,404.80
## Mack.S.E     254.72
## CV(IBNR):      0.02
# ============================================================
# 4. RESUME DES RESULTATS
# ============================================================

summary(mack)
## $ByOrigin
##      Latest Dev.To.Date  Ultimate      IBNR  Mack.S.E   CV(IBNR)
## 2021   9300   1.0000000  9300.000    0.0000   0.00000        NaN
## 2022   9500   0.9569892  9926.966  426.9663  22.81854 0.05344341
## 2023   9200   0.8685718 10592.101 1392.1012  53.16059 0.03818730
## 2024   8100   0.7243687 11182.150 3082.1503 121.14472 0.03930526
## 2025   5400   0.4536451 11903.579 6503.5794 175.61318 0.02700254
## 
## $Totals
##                  Totals
## Latest:    4.150000e+04
## Dev:       7.844279e-01
## Ultimate:  5.290480e+04
## IBNR:      1.140480e+04
## Mack S.E.: 2.547195e+02
## CV(IBNR):  2.233441e-02
# ============================================================
# 5. RESULTATS PAR ANNEE DE SURVENANCE
# ============================================================

resultats <- summary(mack)$ByOrigin

resultats
##      Latest Dev.To.Date  Ultimate      IBNR  Mack.S.E   CV(IBNR)
## 2021   9300   1.0000000  9300.000    0.0000   0.00000        NaN
## 2022   9500   0.9569892  9926.966  426.9663  22.81854 0.05344341
## 2023   9200   0.8685718 10592.101 1392.1012  53.16059 0.03818730
## 2024   8100   0.7243687 11182.150 3082.1503 121.14472 0.03930526
## 2025   5400   0.4536451 11903.579 6503.5794 175.61318 0.02700254
# ============================================================
# 6. EXTRAIRE LES INFORMATIONS IMPORTANTES
# ============================================================

resultats[, c(
  "Latest",
  "Dev.To.Date",
  "Ultimate",
  "IBNR",
  "Mack.S.E",
  "CV(IBNR)"
)]
##      Latest Dev.To.Date  Ultimate      IBNR  Mack.S.E   CV(IBNR)
## 2021   9300   1.0000000  9300.000    0.0000   0.00000        NaN
## 2022   9500   0.9569892  9926.966  426.9663  22.81854 0.05344341
## 2023   9200   0.8685718 10592.101 1392.1012  53.16059 0.03818730
## 2024   8100   0.7243687 11182.150 3082.1503 121.14472 0.03930526
## 2025   5400   0.4536451 11903.579 6503.5794 175.61318 0.02700254
# ============================================================
# 7. PROVISION TOTALE
# ============================================================

total <- summary(mack)$Totals

total
##                  Totals
## Latest:    4.150000e+04
## Dev:       7.844279e-01
## Ultimate:  5.290480e+04
## IBNR:      1.140480e+04
## Mack S.E.: 2.547195e+02
## CV(IBNR):  2.233441e-02
# Afficher uniquement la provision totale
cat(
  "Provision totale IBNR :",
  total$IBNR,
  "\n"
)
## Provision totale IBNR :
# ============================================================
# 8. ULTIME TOTAL
# ============================================================

cat(
  "Charge ultime totale :",
  total$Ultimate,
  "\n"
)
## Charge ultime totale :
# ============================================================
# 9. ERREUR STANDARD
# ============================================================

cat(
  "Erreur standard de Mack :",
  total$Mack.S.E,
  "\n"
)
## Erreur standard de Mack :
# ============================================================
# 10. COEFFICIENT DE VARIATION
# ============================================================

cat(
  "Coefficient de variation :",
  total$`CV(IBNR)`,
  "\n"
)
## Coefficient de variation :
# ============================================================
# 11. GRAPHIQUES DE DIAGNOSTIC
# ============================================================

plot(mack)