Exercice — Tarification d’un portefeuille automobile

Contexte

Une compagnie d’assurance souhaite déterminer la prime annuelle d’une nouvelle catégorie de clients en assurance automobile.

Elle dispose des données historiques suivantes sur les trois dernières années.

# Données historiques

donnees <- data.frame(
  Annee = c(2023, 2024, 2025),
  Contrats = c(8000, 9000, 10000),
  Sinistres = c(640, 765, 900),
  Cout_total = c(384000000, 497250000, 630000000)
)

donnees
##   Annee Contrats Sinistres Cout_total
## 1  2023     8000       640  384000000
## 2  2024     9000       765  497250000
## 3  2025    10000       900  630000000

Tous les contrats ont été exposés pendant une année complète.


1. Calcul de la fréquence des sinistres

La fréquence des sinistres est définie par :

\[ Fréquence = \frac{\text{Nombre de sinistres}} {\text{Nombre de contrats}} \]

Question

Calculer la fréquence des sinistres pour chacune des trois années.

Puis calculer la fréquence globale du portefeuille :

\[ F = \frac{\sum_i N_i} {\sum_i E_i} \]

où :

  • \(N_i\) représente le nombre de sinistres ;
  • \(E_i\) représente le nombre de contrats exposés.
donnees$Frequence <- donnees$Sinistres / donnees$Contrats

donnees[, c("Annee", "Contrats", "Sinistres", "Frequence")]
##   Annee Contrats Sinistres Frequence
## 1  2023     8000       640     0.080
## 2  2024     9000       765     0.085
## 3  2025    10000       900     0.090

Calcul de la fréquence globale :

frequence_globale <-
  sum(donnees$Sinistres) /
  sum(donnees$Contrats)

frequence_globale
## [1] 0.08537037

La fréquence peut être exprimée en pourcentage :

frequence_globale * 100
## [1] 8.537037

2. Calcul du coût moyen d’un sinistre

Le coût moyen d’un sinistre est défini par :

\[ Coût\ moyen = \frac{\text{Coût total des sinistres}} {\text{Nombre de sinistres}} \]

Question

Calculer le coût moyen d’un sinistre pour chacune des trois années.

Puis calculer le coût moyen global :

\[ CM = \frac{\sum_i C_i} {\sum_i N_i} \]

où :

  • \(C_i\) représente le coût total des sinistres ;
  • \(N_i\) représente le nombre de sinistres.
donnees$Cout_moyen <-
  donnees$Cout_total / donnees$Sinistres

donnees[, c(
  "Annee",
  "Sinistres",
  "Cout_total",
  "Cout_moyen"
)]
##   Annee Sinistres Cout_total Cout_moyen
## 1  2023       640  384000000     600000
## 2  2024       765  497250000     650000
## 3  2025       900  630000000     700000

Calcul du coût moyen global :

cout_moyen_global <-
  sum(donnees$Cout_total) /
  sum(donnees$Sinistres)

cout_moyen_global
## [1] 655639.9

3. Calcul de la prime pure

La prime pure correspond au coût attendu des sinistres par contrat.

Elle est donnée par :

\[ \boxed{ Prime\ pure = Fréquence \times Coût\ moyen } \]

Question

Calculer la prime pure annuelle du portefeuille.

prime_pure <-
  frequence_globale *
  cout_moyen_global

prime_pure
## [1] 55972.22

La prime pure peut être affichée en FCFA :

cat(
  "Prime pure :",
  round(prime_pure, 0),
  "FCFA"
)
## Prime pure : 55972 FCFA

4. Calcul de la prime commerciale

L’assureur estime les charges suivantes :

Charge Taux
Frais de gestion 12 %
Frais d’acquisition / commission 10 %
Frais généraux 8 %
Marge bénéficiaire 5 %

Le taux total de chargement est donc :

\[ 12\% + 10\% + 8\% + 5\% \]

La prime commerciale est calculée selon :

\[ \boxed{ Prime\ commerciale = \frac{Prime\ pure} {1-Taux\ de\ chargement} } \]

frais_gestion <- 0.12
frais_acquisition <- 0.10
frais_generaux <- 0.08
marge <- 0.05

taux_chargement <-
  frais_gestion +
  frais_acquisition +
  frais_generaux +
  marge

taux_chargement
## [1] 0.35

Calcul de la prime commerciale :

prime_commerciale <-
  prime_pure /
  (1 - taux_chargement)

prime_commerciale
## [1] 86111.11

Affichage :

cat(
  "Prime commerciale :",
  round(prime_commerciale, 0),
  "FCFA"
)
## Prime commerciale : 86111 FCFA

5. Segmentation du portefeuille

L’assureur souhaite maintenant différencier les tarifs selon le profil du conducteur.

Les résultats historiques sont les suivants :

Profil Fréquence Coût moyen
Jeune conducteur 8,0 % 850 000 FCFA
Conducteur intermédiaire 6,0 % 700 000 FCFA
Conducteur expérimenté 4,0 % 600 000 FCFA

On crée les données dans R :

profils <- data.frame(
  Profil = c(
    "Jeune conducteur",
    "Conducteur intermédiaire",
    "Conducteur expérimenté"
  ),
  
  Frequence = c(
    0.08,
    0.06,
    0.04
  ),
  
  Cout_moyen = c(
    850000,
    700000,
    600000
  )
)

profils
##                     Profil Frequence Cout_moyen
## 1         Jeune conducteur      0.08     850000
## 2 Conducteur intermédiaire      0.06     700000
## 3   Conducteur expérimenté      0.04     600000

6. Calcul de la prime pure par profil

Pour chaque profil :

\[ Prime\ pure_i = Fréquence_i \times Coût\ moyen_i \]

profils$Prime_pure <-
  profils$Frequence *
  profils$Cout_moyen

profils
##                     Profil Frequence Cout_moyen Prime_pure
## 1         Jeune conducteur      0.08     850000      68000
## 2 Conducteur intermédiaire      0.06     700000      42000
## 3   Conducteur expérimenté      0.04     600000      24000

Affichage sous forme de tableau :

profils[, c(
  "Profil",
  "Frequence",
  "Cout_moyen",
  "Prime_pure"
)]
##                     Profil Frequence Cout_moyen Prime_pure
## 1         Jeune conducteur      0.08     850000      68000
## 2 Conducteur intermédiaire      0.06     700000      42000
## 3   Conducteur expérimenté      0.04     600000      24000

7. Facteurs de tarification

L’assureur décide d’utiliser comme prime de référence la prime pure du conducteur expérimenté.

Les facteurs tarifaires retenus sont :

Profil Facteur
Conducteur expérimenté 1,00
Conducteur intermédiaire 1,20
Jeune conducteur 1,60
profils$Facteur <- c(
  1.60,
  1.20,
  1.00
)

profils
##                     Profil Frequence Cout_moyen Prime_pure Facteur
## 1         Jeune conducteur      0.08     850000      68000     1.6
## 2 Conducteur intermédiaire      0.06     700000      42000     1.2
## 3   Conducteur expérimenté      0.04     600000      24000     1.0

La prime tarifaire est définie par :

\[ Prime_i = Prime_{référence} \times Facteur_i \]

La prime de référence correspond à la prime pure du conducteur expérimenté.

prime_reference <-
  profils$Prime_pure[
    profils$Profil == "Conducteur expérimenté"
  ]

prime_reference
## [1] 24000

Calcul des primes tarifaires :

profils$Prime_tarifaire <-
  prime_reference *
  profils$Facteur

profils
##                     Profil Frequence Cout_moyen Prime_pure Facteur
## 1         Jeune conducteur      0.08     850000      68000     1.6
## 2 Conducteur intermédiaire      0.06     700000      42000     1.2
## 3   Conducteur expérimenté      0.04     600000      24000     1.0
##   Prime_tarifaire
## 1           38400
## 2           28800
## 3           24000

8. Inflation du coût des sinistres

Supposons maintenant que le coût moyen des sinistres augmente de 7 % en 2026, en raison notamment de l’inflation et de l’augmentation du coût des réparations.

Le coût moyen actuel pour un conducteur intermédiaire est :

\[ CM = 700\,000 \]

Le coût moyen projeté est :

\[ CM_{2026} = 700\,000 \times (1+7\%) \]

inflation <- 0.07

cout_moyen_2026 <-
  700000 * (1 + inflation)

cout_moyen_2026
## [1] 749000

9. Nouvelle prime pure en 2026

On suppose que la fréquence du conducteur intermédiaire reste constante à :

\[ F = 6\% \]

La nouvelle prime pure est donc :

\[ Prime\ pure_{2026} = F \times CM_{2026} \]

frequence_2026 <- 0.06

prime_pure_2026 <-
  frequence_2026 *
  cout_moyen_2026

prime_pure_2026
## [1] 44940

Affichage :

cat(
  "Prime pure 2026 :",
  round(prime_pure_2026, 0),
  "FCFA"
)
## Prime pure 2026 : 44940 FCFA

10. Synthèse des résultats

On peut construire un tableau récapitulatif :

synthese <- data.frame(
  Indicateur = c(
    "Fréquence globale",
    "Coût moyen global",
    "Prime pure",
    "Taux de chargement",
    "Prime commerciale"
  ),
  
  Valeur = c(
    frequence_globale,
    cout_moyen_global,
    prime_pure,
    taux_chargement,
    prime_commerciale
  )
)

synthese
##           Indicateur       Valeur
## 1  Fréquence globale 8.537037e-02
## 2  Coût moyen global 6.556399e+05
## 3         Prime pure 5.597222e+04
## 4 Taux de chargement 3.500000e-01
## 5  Prime commerciale 8.611111e+04

11. Questions d’analyse actuarielle

Question 1

Pourquoi la fréquence des sinistres est-elle importante dans la tarification ?

Question 2

Pourquoi faut-il distinguer la fréquence du coût moyen ?

Question 3

Pourquoi une compagnie d’assurance ne peut-elle pas appliquer exactement la même prime à tous les assurés ?

Question 4

Quels sont les risques d’une tarification trop élevée ?

Question 5

Quels sont les risques d’une tarification trop faible ?

Question 6

Pourquoi l’inflation doit-elle être prise en compte dans la tarification ?

Question 7

Quels autres facteurs pourraient être utilisés pour segmenter le risque automobile ?

Exemples :

  • âge du conducteur ;
  • ancienneté du permis ;
  • zone géographique ;
  • type de véhicule ;
  • puissance du véhicule ;
  • kilométrage annuel ;
  • historique de sinistres ;
  • usage professionnel ou personnel ;
  • expérience de conduite.

12. Question avancée — GLM

Pour aller plus loin, on pourrait remplacer la méthode simple fréquence × coût moyen par un modèle statistique.

Une approche classique consiste à modéliser :

Fréquence

Avec une régression de Poisson :

\[ N_i \sim Poisson(\lambda_i) \]

et :

\[ \log(\lambda_i) = \beta_0 + \beta_1 Age_i + \beta_2 Puissance_i + \beta_3 Zone_i +\cdots \]

Coût moyen

On peut ensuite modéliser le coût des sinistres à l’aide d’une distribution adaptée, par exemple Gamma.

La prime pure est alors estimée par :

\[ \boxed{ Prime\ pure_i = E[N_i]\times E[C_i] } \]

Cette approche permet d’obtenir une tarification plus fine en tenant compte simultanément de plusieurs caractéristiques des assurés.