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.
La fréquence des sinistres est définie par :
\[ Fréquence = \frac{\text{Nombre de sinistres}} {\text{Nombre de contrats}} \]
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ù :
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
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}} \]
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ù :
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
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 } \]
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
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
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
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
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
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
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
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
Pourquoi la fréquence des sinistres est-elle importante dans la tarification ?
Pourquoi faut-il distinguer la fréquence du coût moyen ?
Pourquoi une compagnie d’assurance ne peut-elle pas appliquer exactement la même prime à tous les assurés ?
Quels sont les risques d’une tarification trop élevée ?
Quels sont les risques d’une tarification trop faible ?
Pourquoi l’inflation doit-elle être prise en compte dans la tarification ?
Quels autres facteurs pourraient être utilisés pour segmenter le risque automobile ?
Exemples :
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 :
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 \]
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.