Uploaded by Emmanuel Obrou

iard-tarifer-sous-r-methodes-et-pratiques-guide-seabird

advertisement
Le pocket guide SeaBird
IARD : TARIFER SOUS R | Méthode et pratiques
JUILLET 2022
IARD: TARIFER SOUS R
Méthode et pratiques
| 1
g(Y) = p =
X
E [P|X] = E [N|X] * E[Y|X]
g(Y) = p =
Rédaction
X
E [P|X] = E [N|X] * E[Y|X]
Saïda Derkaoui
Coordination et relecture
Antoine Badillet et Caroline Lechantre
Responsable de la publication
Pierre Thérond
Sommaire
2|
INDEX 4
INTRODUCTION 6
INSTALLATION ET ILLUSTRATION DE LA COMMANDE R 8
Installation de R et RStudio 9
LES PACKAGES SUR R
11
•
•
•
Qu’est-ce qu’un package R ?
Comment utiliser un package R ?
Les packages utiles en assurance
11
11
15
•
L’aide sur R
16
PARTIE 1 : LE LANGAGE AU SERVICE DE LA DONNEE
17
DATAMINING
•
•
•
19
Qu’est-ce qu’un data frame ?
Le package dyplr, une référence pour le traitement de la donnée
Les fonctions utiles dans dyplr
19
20
21
Comment identifier les valeurs manquantes ?
26
DATAVISUALISATION
29
•
•
30
41
Le package ggplot2
Le package Esquisse
PARTIE 2 : DE LA MODELISATION A LA TARIFICATION
43
MODÉLISATION •
Prérequis pour la modélisation : notion de distribution et test d’adéquation
•
Tests statistiques
•
La fonction Q-Q plot
•
Utilisation des séries temporelles
Cum hoc sed non propter hoc (« avec ceci, cependant pas à cause de ceci »)
45
MODÉLISATION LINÉAIRE GÉNÉRALISÉE
•
•
•
•
Principe du modèle
Modèles appliqués à la fréquence des sinistres et aux coûts moyens
Choix des variables explicatives
Validation des hypothèses
Comment modéliser les sinistres graves ?
ANNEXES
45
46
47
48
58
60
60
61
63
65
67
69
| 3
Index
4|
M
actuar p.14, 15
arima p.50, 51
mappage p.35
mice p.27
B
N
beta p.45
binom p.45
nbinom p.45
norm p.27, 45
C
P
cauchy p.45
ChainLadder p.15
chisq p.45
couleur p.33, 34, 38
Package p.11-15, 27, 49, 52
PCA p.53
plot p.49, 62
pois p.45
D
Q
data frame p.19
dyplr p.20, 21
Q-Q plot
E
esquisse p.41, 42
exp p.45
F
f p.23
facetting p.37
FactoMineR p.53
Factoextra p.15
Factoshiny p.52, 57
FExtremes ou extReme p.15
fitdistrplus p.15
G
gamma p.45, 60, 61
geom p.30-37, 45
ggplot2 p.15, 30-34, 36,40, 41, 42
glm p.15, 60-62
Index
A
p.47
R
raster, mapview,
maptools, cartography p.15
S
stepwise
p.51, 63
T
tidyverse
ts p.49
p.20
W
weibull p.45
X
xts
p.49
Z
zoo
p.49
L
lnorm
p.45
| 5
Introduction
R est un langage de programmation multiparadigmes
(orienté object, impératif, fonctionnel, procédural et réflexif).
Le logiciel, libre d’utilisation, est principalement utilisé pour
le développement de logiciels statistiques et l’analyse de
données par la communauté scientifique.
Ce guide requiert une première initiation à R et à son langage.
Des notions clés du traitement de bases de données sont
reprises mais ce guide a pour objectif de familiariser le corps
actuariat et les modélisateurs à son utilisation dans les travaux
quotidiens. Au-delà du traitement et de la visualisation des
données, il présente des notions clés en tarification et en
modélisation.
Ce guide s’adresse à tout membre d’une Direction Technique
cherchant à réaliser ses principaux travaux sous R. Les lignes
de codes utilisées sont à télécharger sur le site de SeaBird.
6|
IARD : TARIFER SOUS R | Méthode et pratiques
Data visualisation
Classification
de données
Traitement
pur de
la donnée
Programmation R
Modélisation
Machine
learning
Statistiques
et analyses
Dans ce guide, vous trouverez :
▶
une liste des principaux packages
▶
leurs méthodes d’utilisation et les résultats attendus
▶
nos conseils et préconisations
| 7
Installation et
illustration de
la commande R
Deux programmes sont à télécharger :
▶
R
▶
RStudio : qui est une interphase simplifiée et facile
à prendre en main s’appuyant sur R. Cette interphase
permet notamment une visualisation des graphiques
simplifiée. Nous recommandons de l’utiliser lors de vos
manipulations.
: qui est l’interphase principale, et qui permet de
stocker et de charger les différents packages.
Installer R est préconisé avant d’installer RStudio.
Pour la suite, les commandes seront présentées
à partir de l’interface RStudio, les arguments,
les packages et les fonctions utilisées peuvent
changer d’une version à l’autre.
8|
IARD : TARIFER SOUS R | Méthode et pratiques
Installation de R et Rstudio
Pour une installation sous Windows, rendez-vous
directement sur cette page :
http://cran.r-project.org/bin/windows/base/
Suivez le premier lien pour télécharger le programme
d’installation.
Une fois le programme d’installation lancé, vous pouvez
installer R avec les options par défaut.
Pour Mac OS X, les fichiers d’installation sont présents sur
ce lien :
http://cran.r-project.org/bin/macosx/
Une fois R correctement installé, vous pouvez télécharger
la dernière version stable de RStudio :
http://www.rstudio.com/products/rstudio/download/
Il s’agit de l’édition OpenSource de RStudio Desktop.
| 9
C’est un environnement de développement intégré pour R
(et également Python) avec une console, un éditeur de mise
en évidence de la syntaxe qui prend en charge l’exécution
directe de code et des outils de traçage d’historique, de
débogage et de gestion de l’espace de travail.
10 |
IARD : TARIFER SOUS R | Méthode et pratiques
Les packages sur R
Qu’est-ce qu’un package R ?
Un package est un ensemble de fonctions développées en
amont par des utilisateurs, qui améliorent ou étendent les
fonctionnalités de base de R.
Des packages proposent, par exemple, des fonctions
permettant de réaliser toutes sortes de graphiques. En
actuariat, des packages permettent de répondre à des
problématiques de provisionnement, de tarification, etc.
Comment utiliser un package R ?
Pour utiliser un package R, vous pouvez le télécharger de
plusieurs manières :
La première méthode consiste à télécharger le package sur
internet puis à l’installer dans un dossier connu de R.
#Installer devtools à partir de CRAN
> install.packages(«nom_package»)
| 11
La deuxième méthode consiste à installer le package à partir
de la bibliothèque de Github. Pour l’installer, vous aurez
besoin du package devtools et d’une fonction install_github
qui prend pour argument principal «Username/repo».
#Ou la version complète à partir de GitHub
> nom_package::install_github(«Username/repo»)
Les noms des packages respectent la casse. Il est
donc important de bien respecter, lors de la copie
manuelle du nom du package, les caractères en
majuscules et ceux en minuscules.
#Non-respect de la casse
> Install.packages («Ggplot2»)
#Respect de la casse
> Install.packages («ggplot2»)
Cette fonction accepte en paramètre un vecteur de nom de
packages, afin d’installer plusieurs packages en une seule
fois.
#Installer plusieurs packages à la fois
> install.packages(c(«tidyverse»,»ggplot2»))
12 |
IARD : TARIFER SOUS R | Méthode et pratiques
Une autre possibilité est d’utiliser l’aide de l’option Install
Package de l’onglet package.
Une fois qu’un package a été installé sur un ordinateur,
ce dernier y est présent de façon permanente. Nous vous
conseillons de ne pas inclure les instructions d’installation
des packages dans les programmes R, pour éviter des
réinstallations superflues.
Le chargement consiste à indiquer à R que l’on souhaite
utiliser le package dans la session courante. La fonction
principale pour charger un package est library.
#Charger un package
> library(«nom_package»)
| 13
Par défaut, la fonction library cherche le package dans
la bibliothèque d’installation des packages. R envoie une
erreur si le package n’est pas présent dans la librairie.
#Package inexistant dans la librairie
> library(«actuar»)
##error in library(«actuar») : aucun package
nommé ‘actuar’ n’est trouvé
Vous pouvez modifier le chemin d’accès à la bibliothèque R
dans laquelle la fonction library cherche les packages grâce
à l’argument lib.loc.
> library(«ggplot2»,lib.loc=»chemin d’accès»)
Vous n’avez pas besoin de le faire dans le cadre
d’un usage standard de R, c’est à dire en utilisant
des fonctions ou opérateurs déjà présents dans le
logiciel.
Si votre code nécessite l’utilisation de packages
externes, rassembler les instructions de
chargement de package au début des programmes
R est indispensable, car cela permet à un utilisateur
qui ne connaît pas les programmes de repérer
facilement les packages utilisés.
14 |
IARD : TARIFER SOUS R | Méthode et pratiques
Les packages utiles en assurance
Packages
Description
Utilisations
ChainLadder
Construction
de triangles de
provisionnement et de
méthodes d’estimation
Provisionnement IARD
actuar
Application de
méthodes statistiques
actuarielles
Actuariat
fitdistrplus
Calcul des estimateurs
de lois de probabilité
grâce à diverses
méthodes
Distribution /
Lois de probabilité
FExtremes ou extReme
Analyse des valeurs
extrêmes
Théorie des valeurs
extrêmes
ggplot2
Visualisation de
données
Data visualisation
raster, mapview,
maptools, cartography
Visualisation
de données
géographiques
Cartographie
- Visualisation
géographique de
données
FactoMineR & factoextra
Analyse en
composantes
principales,
classification.
Calcul des méthodes
des composantes
principales, extraction,
visualisation et
interprétation des
résultats
MASS
GLM Binomiale négative
Tarification
| 15
L’aide sur R
L’accès aux fichiers d’aide pour une fonction dont on connaît
le nom, par exemple la fonction logarithme, peut se faire de
plusieurs manières :
#Demande d’aide R
> ?log #Methode1
> help(log)#Methode2
> help(«log»)#Methode3
Pour trouver toutes les fonctions dont le nom contient
une chaîne de caractères donnée, vous pouvez utiliser la
commande apropos comme présenté ci-dessous :
#Demande d’aide R
> apropos («log»)
Les fichiers sont souvent riches d’informations, très bien
décrits, et proposent des exemples d’utilisation.
16 |
PA R T I E 1
Le langage
au service
de la
donnée
PARTIE 1 : Le langage au service de la donnée
IARD : TARIFER SOUS R | Méthode et pratiques
Datamining
Qu’est-ce qu’un data frame ?
Une table de données porte le nom de data frame.
Elle a pour caractéristiques :
▶
d’être une liste de vecteurs de données,
▶
d’avoir tous les vecteurs de même longueur,
▶
d’avoir des vecteurs nommés et des lignes indexées
ou nommées.
Nous pouvons la manipuler comme une matrice avec
[n° ligne, n° colonne] ou bien [nom ligne, nom colonne]
En langage de programmation R, la fonction pour définir un
data frame est data.frame.
variables (columns)
var 1
var 2
...
var p
individuals (rows)
ind 1
ind 2
ind n
| 19
Le package dyplr, une référence
pour le traitement de la donnée
Ce package est une extension facilitant le traitement et la
manipulation de données contenues dans une ou plusieurs
tables. Cette extension propose une syntaxe claire et
cohérente.
Par ailleurs, les fonctions du package dplyr sont en général
plus rapides que leurs équivalents sous R, elles permettent
donc de traiter des données de grande dimension.
dplyr fait partie du cœur du package tidyverse, qui est luimême formé d’un ensemble de packages. Ce package est
donc chargé automatiquement en chargeant tidyverse.
Le terme tidyverse est une contraction de tidy et
de universe. Il s’agit d’une collection de packages
et/ou d’extensions conçus pour travailler ensemble
et reposant sur une philosophie commune :
•
•
•
•
•
•
•
•
20 |
ggplot2 (Visualisation)
dplyr (Manipulation des données)
tidyr (Remise en forme des données)
purrr (Programmation)
readr (Importation de données)
tibble (Tableaux de données)
forcats (Variables qualitatives)
stringr (Chaînes de caractères).
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Les fonctions utiles dans dyplr
Fonction
Slice
Filter
Propriétés
Manipulation des lignes d’un tableau de données
>> slice(Data,34)
slice(Data,34) #sélectionner
#sélectionner la
la ligne
ligne 34
34 de
de Data
Data
>> slice(Data,1
slice(Data,1 :: 5)
5) #sélectionner
#sélectionner la
la ligne
ligne 1:5
1:5 (1
(1 àà 5)
5) de
de Data
Data
Sélectionner des lignes en fonction d’une condition : on passe en
paramètre une condition, et seules les lignes pour lesquelles cette
condition est vérifiée sont conservées.
>> filter(Data,
filter(Data, condition)
condition)
>> filter(Data,
filter(Data, month==1)
month==1) #sélectionne les données du mois 1
#sélectionne les données du mois 1 (janvier)
(janvier)
Manipulation des colonnes d’un tableau de données
Select
>> select(Data,
select(Data, col2,
col2, col5,…)
col5,…) #sélectionner les colonnes 2 et 5
de
Data
#sélectionner
les colonnes 2 et 5 de Data
select(Data, col1
col1 :: col5)
col5) #sélectionner les colonnes 1 à 5 de
>> select(Data,
#sélectionner les colonnes 1 à 5 de Data
Data
> select(Data, -col1, -col5,…)
>#élimine
select(Data,
-col1, -col5,…)
les colonnes
col1 et col5 de Data
Select comprend une série de fonctions facilitant la sélection
de multiples colonnes. Par exemple, starts_with(), end_with(),
contains() ou matches().
Classe les lignes d’un tableau selon une ou plusieurs colonnes par
ordre croissant par défaut
Arrange
>> arrange(Data,
arrange(Data, col2)
col2) #classe
#classe les
les lignes
lignes de
de Data
Data en
en fonction
fonction de
de colonne
la colonne
de Data
la
col2col2
de Data
arrange(Data, col1,
col1, col5)
col5) #Réordonne
#Réordonne les
les lignes
lignes du
du tableau
tableau
>> arrange(Data,
Data en fonction des colonnes col1 et col5 de Data
Data en fonction des colonnes col1 et col5 de Data
Pour réordonner les lignes d’un tableau selon une ou plusieurs
colonnes par ordre décroissant, utiliser desc()
>> arrange(Data,
arrange(Data, desc(col2))
desc(col2)) #Réordonne
#Réordonne dans
dans l’ordre
l’ordre décroissant
décroissant
les
les lignes
lignes du
du tableau
tableau Data
Data en
en fonction
fonction de
de la
la colonne
colonne col2
col2 de
de
Data
Data
Mutate
>> arrange(Data,
col2) #classe
les lignes
en fonction
mutate(Data, col_new=
col3/col2)
#crée de
uneData
nouvelle
colonnede
la
colonne et
col2
de Datale résultat du rapport entre les données
(col_new)
y insère
>des
arrange(Data,
col1,
col5) #Réordonne les lignes du tableau
colonnes col3
et col2
Data en fonction des colonnes col1 et col5 de Data
| 21
Lors de la manipulation d’une table de données, l’utilisateur
procède fréquemment à un enchaînement de plusieurs
opérations.
Par exemple, la syntaxe suivante :
#Enchaînement de plusieurs opérations
> arrange(select(filter(Data=data, var == «x»)
> y, z), y)
▶ Filtre le tableau data en fonction de la variable var qui
est égale à x
▶ Sélectionne ensuite les données des colonnes y et z
▶ Réorganise enfin les lignes de la colonne y du tableau
data.
Cette notation a plusieurs inconvénients :
▶ La syntaxe est peu lisible ;
▶ Les opérations apparaissent dans l’ordre inverse de leur
réalisation. Ici, on effectue d’abord le filter, puis le select, puis
le arrange, alors qu’à la lecture du code c’est le arrange qui
apparaît en premier.
▶ Le paramètre affecté à chaque fonction est difficilement
identifiable.
Une autre manière de faire est d’effectuer les opérations les
unes après les autres, en stockant les résultats intermédiaires
dans un objet temporaire :
> a <- filter(data, var == «x»)
b <- select(a, y, z)
arrange(b, y)
22 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Pour simplifier et améliorer encore la lisibilité du code, nous
allons présenter un nouvel opérateur, «pipe» qui se note
% > %.
Ce dernier fonctionne comme suit :
expr% > %f
avec f une fonction et expr le premier argument de la
fonction. Cela équivaut à exécuter f(expr).
Ainsi, les lignes de code suivantes sont rigoureusement
équivalentes :
#Exemple1
> filter(data, var == «x»)
> data %>% filter(var == «x»)
#Exemple2
> arrange(select(filter(Data=data, var == «x»),
y, z), y)
> data %>%
filter(var == «x»)%>%
select(y, z) %>%
arrange(y)
Une suite d’instructions de ce type se nomme un
pipeline. L’utilisation du pipeline n’est pas obligatoire
mais nous la recommandons fortement.
| 23
Fonction
Propriétés
Définir des groupes de lignes à partir des valeurs d’une ou
plusieurs colonnes. Les opérations réalisées lors du calcul des
valeurs des nouvelles colonnes sont appliquées groupe de
lignes par groupe de lignes.
#grouper la data selon une variable de la data
> data%>% group_by(var)
group_by
La fonction group_by fonctionne pour les verbes déjà vus
précédemment, sauf pour arrange, qui, par défaut, trie la table
sans tenir compte des groupes. Pour obtenir un tri par groupe,
vous devez lui ajouter l’argument .by_group = TRUE
> data%>%group_by(var1)%>%arrange(desc(var2),
.by_group=TRUE)
Lorsque la variable de groupage est un facteur et que certaines
valeurs du facteur ne sont pas présentes dans le tableau,
l’argument .drop = FALSE de group_by permet de conserver ces
niveaux dans le résultat d’une opération groupée.
Agréger les lignes du tableau en effectuant une opération
résumée sur une ou plusieurs colonnes. Elle est généralement
combinée avec la fonction group_by pour permettre d’agréger
et résumer les lignes du tableau groupe par groupe.
summarise
#grouper la data selon une variable de la data
> data%>% summarise(Var1 = mean_variable1,
Var2 = mean_variable2)
L’opérateur spécial n() retourne le nombre de lignes du groupe.
count
24 |
Compter les lignes par groupe par exemple. Vous avez la
possibilité d’utiliser l’argument .drop de la même manière que
dans group_by.
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Exemple :
#Regrouper tous les diamants dont le prix est
égal à 500 et dont la coupe est idéale avec
group_by
> df%>%
group_by(price=500,cut=»Ideal»)
#Obtenir la moyenne d’une colonne depth à partir
des variables price et cut regroupées grâce à
summarise
> df%>%
group_by(price=500,cut=»Ideal»)%>%
summarise(moy_prof = mean(depth))
| 25
Comment identifier
les valeurs manquantes ?
Les valeurs manquantes sont représentées sous R par NA
(Not Available). Pour les retrouver, la fonction is.na() renvoie
Vrai si la valeur vaut NA et False sinon.
#identifier les données manquantes
> is.na(data)
À présent, nous souhaitons connaître les couples ligne/
colonne (x,y) des individus présentant une valeur
manquante (NA). Nous pouvons utiliser l’option arr.ind
(pour « array indices ») de la fonction which.
#Localiser
données
manquantes
#Localiser
les les
données
manquantes
> which(is.na(data), arr.ind=TRUE)
La sortie sera de la forme :
[1,]
[2,]
row
2
5
col
1
1
Ce qui signifie que :
▶
2 valeurs sont manquantes dans le tableau data.
▶
La première valeur manquante se situe à la 2ème ligne
de la 1ère colonne et la seconde valeur manquante se
situe à la 5ème ligne de la 1ère colonne.
Comment gérer les valeurs manquantes de type NA ?
26 |
▶
Si une variable correspond à une valeur numérique,
vous pouvez la remplacer par une autre valeur justement
choisie ;
▶
S’il s’agit d’une variable impossible à prédire, le plus
simple est de supprimer la ligne entière.
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Des packages d’imputation de données permettent de
gérer efficacement les valeurs manquantes.
Le package mice, par exemple, suppose que les données
soient MAR (Missing At Random).
A chaque variable est associé un modèle d’imputation,
conditionnellement aux autres variables du jeu de données :
Pour Xk variables, les données manquantes de la variable
Xi seront remplacées par les prédictions d’un modèle créé
à partir des autres variables. Le paramètre method de la
fonction mice() peut prendre les valeurs suivantes :
Type de variable
concernée
Paramètre
Propriété
Tout type
pmm
cart
rf
predictive mean matching
arbres de régression et classification
modèle random forest
Numériques
norm
quadratic
régression linéaire
distance quadratique
Binaires
logreg
régression logistique
Factorielles
polyreg
lda
régression logistique multiple
analyse discriminante linéaire
Factorielles
ordonnées
polr
modèle de probabilité
proportionnelle
Ce package permet de :
▶
visualiser les données manquantes ;
▶
diagnostiquer la qualité des valeurs imputées ;
▶
analyser chaque ensemble de données complétées ;
▶
incorporer des méthodes d’imputation personnalisées.
#grouper la data selon une variable de la data
> install.packages(mice»)
> library(«mice»)
> md.pattern(data)
| 27
Var1
Var2
Var3
Var4
Var5
Var6
327 346
1
1
1
1
1
1
0
717
1
1
1
1
1
0
1
458
1
1
1
1
0
0
2
8 255
1
1
1
0
0
0
3
0
0
0
8 255
8 713
9 430
26 398
Cette visualisation nous permet de déterminer rapidement
la localisation des valeurs manquantes de notre jeu de
données. Ici nous constatons que :
327 346
observations n’ont aucune
valeur manquante.
458
pour
observations, les valeurs
de la colonne Var5 et de
la colonne Var6 sont
manquantes,
28 |
717
pour
observations, la valeur
de la colonne Var6
est manquante.
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Datavisualisation
R possède un grand nombre de packages permettant
la datavisualisation. Dans le cas de la visualisation d’un
dataframe avec des spécificités, les ressources peuvent
s’amoindrir. Une multitude de packages permettent de créer
des graphiques personnalisables comme ggplot2. Voici une
liste des packages les plus utilisés en datavisualisation qui
répondent à des problématiques spécifiques :
Package
Lattice
plotly
dygraphs
Problématique
Visualisation des datasets à
multivariables. Vous pouvez concevoir
des mosaïques de graphiques pour
comparer les sous-groupes d’une
même variable.
Syntaxe similaire à ggplot2, permet
d’obtenir des graphiques interactifs
grâce à la fonction ggplotly.
Permet l’affichage graphique des séries
temporelles.
| 29
Le package ggplot2
Pour la suite, nous présenterons l’utilisation du package
ggplot2.
La fonction essentielle de ggplot2 est ggplot(). Quatre
éléments sont à définir pour construire un graphique avec
ggplot() :
▶ La table de données : indiquer où se trouvent
les données, de type dataframe, et quelles
sont les variables que l’on souhaite représenter.
▶ Le mapping consiste à définir l’aesthetic (ou aes).
Il correspond au lien entre les variables des données et ce
que l’on veut représenter sur le graphique (quelle variable
sur l’axe x, sur l’axe y, quelle variable pour définir une
graduation de couleurs…).
▶ La forme géométrique ou geometry spécifique à la
représentation graphique de nos données. Les géométries
ont toutes un nom qui commence par geom_.
Exemple : la géométrie geom_point() permet de réaliser un
nuage de points.
▶ Les paramètres : les autres paramètres dépendent de
constantes qui permettent de personnaliser les graphiques
à la forme prêt (couleur, taille etc...).
La construction d’un graphique repose sur le principe de
couches successives. Les différentes couches graphiques
se superposent et s’enchaînent grâce à l’opérateur +,
comme un pipeline. Vous pouvez vous rendre directement
à la ligne dans une instruction ggplot() mais l’opérateur +
doit figurer à la fin de la ligne.
30 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Un graphique dans ggplot2 s’initialise à l’aide de la fonction
ggplot(). Les données représentées graphiquement sont
toujours issues d’un dataframe, qu’on passe en argument
grâce à l’appellation data.
Grâce à l’argument aes(), nous pouvons renseigner
la variable à représenter sur l’axe des abscisses avec
l’argument x.
La variable à représenter peut être renseignée sur l’axe des
ordonnées également avec l’argument y.
> ggplot(data,
aes(x = var1, y = var2))
Un grand nombre de geom et d’options co-existent pour
créer des graphiques dynamiques sur ggplot2.
En voici quelques-uns, très utilisés en actuariat et en
datavisualisation :
geom_bar
geom_point
geom_line
geom_density
geom_boxplot
geom_histogram
| 31
Exemple simplifié
de code
Type de geom
Description
geom_point()
Nuage
de points
geom_histogram()
Histogrammes
ggplot(data) + geom histogram(aes(x=var1))
geom_boxplot()
Boîte
à moustaches
ggplot(data) + geom_boxplot(aes(x = var1,
y = var2))
geom_bar()
Graphique
en bâtons
ggplot(data) + geom_bar(aes(x=var3))
geom_text
geom_label
Nuage de
points avec
étiquettes
de texte
ggplot(data) + geom_text(aes(x = var1,
y = var2, label=var4))
geom_density
Densité
d’une variable
geom_line()
Courbe Séries
temporelles
32 |
ggplot(data) + geom_point(aes(x = var1,
y = var2))
ggplot(data) + geom density(aes(x=var1))
ggplot(data) + geom_line(aes(x = var1,
y = var2))
PARTIE 1 : Le langage au service de la donnée
IARD : TARIFER SOUS R | Méthode et pratiques
Pour modifier certains attributs graphiques d’un geom, des
arguments supplémentaires peuvent être indiqués :
▶ la couleur avec l’argument color
▶ la taille avec l’argument size
▶ lseur transparence avec l’argument alpha
Attribut
color
size
Description
Pour la couleur
Taille
alpha
Transparence
fill
Remplissage
varwidth
width
Varier la largeur des boîtes
en fonction de l’effectif
Largeur
Vous pouvez personnaliser votre graphique en ajoutant des
titres, des labels aux axes, des sous-titres, etc. Ces éléments
peuvent être adaptés en utilisant les fonctions theme() et
element_text() comme suit :
#Titre principal
> ggplot(data) +
geom_point(aes(x = var1, y = var2)) +
theme(plot.title = element_text(family,
face, colour, size))
#Titre de l’axe des x
> ggplot(data) +
geom_point(aes(x = var1, y = var2)) +
theme(axis.title.x = element_text(family,
face, colour, size))
#Titre de l’axe des y
> ggplot(data) +
geom_point(aes(x = var1, y = var2)) +
theme(axis.title.y = element_text(family,
face, colour, size))
| 33
Les arguments ci-dessous peuvent être utilisés pour la
fonction element_text() pour modifier l’apparence du texte :
▶
family : famille de police
▶
face : type de police. Valeurs possibles “plain”, “italic”,
“bold” et “bold.italic”
▶
colour : couleur du texte
▶
size : taille du texte en pts
▶
hjust : justification horizontale (entre [0, 1])
▶
vjust : justification verticale (entre [0, 1])
▶
lineheight : interligne. Dans un texte multi-lignes,
l’argument lineheight est utilisé pour modifier l’espace
entre les lignes
▶
color : alias pour colour
> ggplot(data)+
aes(x = var1, y = var2)+
geom_point(colour = var3, size = var4, shape
L’un des éléments clés de ggplot2 est la
manipulation des paramètres esthétiques. Il est
possible d’attribuer manuellement des valeurs aux
paramètres du geom_ en définissant soi-même ce
qu’on veut (colour = « green ») ou de les générer
par défaut en attribuant aux paramètres un vecteur.
Ainsi, R choisira une couleur automatiquement
pour chaque élément du vecteur (colour=var3).
34 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Utilisation du mappage
Un mappage est une mise en relation entre un attribut
graphique du geom_ et une variable du tableau de données.
Ces mappages sont passés aux différents geom_ via la
fonction aes().
Si un lien est établi entre les valeurs d’une variable et un
attribut graphique, un mappage peut être utilisé et déclaré
dans aes(). Sinon, tous les points vont être définis de la
même manière.
| 35
Représentation de plusieurs geom_
Pour représenter plusieurs geom_ simultanément sur un
même graphique, vous devez les ajouter à tour de rôle avec
l’opérateur +. Par exemple, pour superposer la position des
points au-dessus d’un boxplot.
Simplification de la lecture du code
Quand une commande ggplot2 devient longue, la répartir
sur plusieurs lignes reste plus lisible pour le modélisateur.
Dans ce cas, l’opérateur + se place en fin de ligne afin que R
comprenne que la commande n’est pas complète.
Exemple :
> ggplot(df) +
aes(x = carat, y = price, colour = color)+
geom_point(shape = «circle», size = 3)
Pour simplifier un peu le code, vous pouvez déclarer le
mappage directement à l’appel du ggplot() pour ne pas
répéter les différents mappages dans chaque geom.
> ggplot(df) +
aes(carat, price, colour = color)+
geom_point(shape = «circle», size = 3)
36 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Qu’est-ce que le facetting ?
Le facetting permet d’effectuer plusieurs fois le même
graphique selon les valeurs d’une ou plusieurs variables
qualitatives.
facet_wrap prend un paramètre de la forme vars (variable),
où variable est le nom de la variable en fonction de
laquelle on souhaite faire les différents graphiques. Ceuxci sont alors affichés les uns à côté des autres et répartis
automatiquement dans la page.
Avec facet_grid, les graphiques sont disposés selon une
grille. La fonction prend alors deux arguments, rows et
cols. En complément, les variables à afficher en ligne ou
en colonne viennent de la fonction vars().
> ggplot(df) +
aes(carat, price, colour = color)+
geom_point(shape = «circle», size = 3)
facet_wrap(~cut)
| 37
Gestion des couleurs dans R
Dans R, les couleurs peuvent être spécifiées soit par le
nom (ex, col = “red”) ou par le code hexadécimal (ex, col =
“#FFCC00”). Au total, 657 noms de couleurs sont reconnus
par R. Vous pouvez également utiliser des couleurs
provenant du package RColorBrewer.
> install.packages(«RColorBrewer»)
> library(«RColorBrewer»)
> display.brewer.all()
38 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
3 types de palettes existent dans RColorBrewer:
séquentielle, divergente et qualitative.
Les palettes séquentielles sont adaptées
pour des données ordonnées qui varient
d’une valeur faible à une valeur forte
(gradient). Les noms des palettes sont :
Blues, BuGn, BuPu, GnBu, Greens, Greys,
Oranges, OrRd, PuBu, PuBuGn, PuRd,
Purples, RdPu, Reds, YlGn, YlGnBu YlOrBr,
YlOrRd.
Les palettes divergentes accordent la
même importance aux différentes valeurs
des données. Les noms des palettes sont :
BrBG, PiYG, PRGn, PuOr, RdBu, RdGy,
RdYlBu, RdYlGn, Spectral.
Les palettes qualitatives sont adaptées pour
représenter des données catégorielles
ou nominales. Les palettes sont : Accent,
Dark2, Paired, Pastel1, Pastel2, Set1, Set2,
Set3.
| 39
Vous pouvez également visualiser une seule palette en
spécifiant son nom :
#Visualiser une palette en spécifiant son nom
> display.brewer.pal(n = 8, name = ‘RdBu’)
#Barplot en utilisant RColorBrewer
> brewer.pal(n = 8, name = «RdBu»)
[1] «#B2182B» «#D6604D» «#F4A582» «#FDDBC7»
#Installer
> install.packages(«wesanderson»)
#Charger
> library(«wesanderson»)
Sauvegarde des graphiques
Les graphiques produits par ggplot2 peuvent être
sauvegardés manuellement ou par des lignes de codes R.
Pour sauvegarder le dernier graphique affiché par ggplot2
au format png, vous pouvez utiliser la fonction ggsave, qui
permet d’en régler la taille et la résolution.
> ggsave(«ggplot.png»)
40 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 1 : Le langage au service de la donnée
Le package esquisse
Le package esquisse propose une interface graphique qui
facilite la construction de graphiques avec ggplot2. L’objectif
de ce package est de vous aider à construire rapidement
un code ggplot2 pour faire le graphique que vous voulez. En
revanche, l’utilisation d’esquisse ne remplace pas l’écriture
d’un code ggplot2.
L’interface graphique d’esquisse est assez
gourmande en ressources, il est donc déconseillé
de l’utiliser avec des données volumineuses (plus
de 100 000 observations).
L’add-in esquisse ne fonctionne qu’avec une version
récente de RStudio (version égale ou supérieure à 1.2). Si
votre version de RStudio est plus ancienne, vous devrez
procéder à une mise à jour avant d’utiliser esquisse.
Comment utiliser esquisse ?
L’add-in esquisse est disponible sous la forme d’un package
à installer.
> install.packages(«esquisse»)
Une fois installé, vous pouvez accéder à cet add-in en
cliquant sur ‘ggplot2’ builder dans le menu Addins de
RStudio ou en exécutant le code suivant :
> library(esquisse)
esquisser()
| 41
Dans la première boîte de dialogue, vous devez sélectionner
le data.frame qui contient les données que vous voulez
représenter sur le graphique. Vous pouvez éventuellement
sélectionner certaines variables, et modifier le type de
certaines variables.
Une nouvelle boîte de dialogue s’affiche, grâce à laquelle
vous pouvez construire un graphique. Les variables
présentes dans vos données sont listées en haut de l’écran.
Ainsi les variables peuvent être déplacées dans les
différentes catégories :
▶ x pour les abscisses,
▶ y pour les ordonnées,
▶ color et size pour la couleur et la taille des éléments
graphiques…
Esquisse vous propose automatiquement le type de
graphique le plus adapté à vos données.
Enfin, l’apparence du graphique (titres des axes, légende…)
peut être modifiée avec les menus en bas de la fenêtre.
Une fois que le graphique est terminé, vous pouvez
récupérer le code ggplot2 qui produit ce graphique
en cliquant sur </>Code (en bas à droite). Vous
pouvez le copier-coller dans un script R.
42 |
PA R T I E 2
De la
modélisation
à la
tarification
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Modélisation
Prérequis pour la modélisation : notion de
distribution et test d’adéquation
Le logiciel R permet d’obtenir, pour certaines lois de
probabilité, la fonction de répartition et la fonction de
densité. Il est possible de calculer les quantiles et de générer
des réalisations de taille n.
Voici un tableau récapitulatif des différentes distributions
disponibles :
Distribution
Nom
Paramètre
Beta
beta
shape1, shape2
Binomiale
binom
size, prob
Binomiale
Négative
nbinom
size, prob
Cauchy
cauchy
location, scale
Khi Deux
chisq
df
Exponentielle
exp
rate=1/mean
Fischer
f
df1, df2
Gamma
gamma
shape,
rate=1/scale
Géométrique
geom
prob
Log Normale
lnorm
meanlog, sdlog
Normale
norm
mean, sd
Poisson
pois
lambda
Weibull
weibull
shape, scale
| 45
Tests statistiques
De nombreux tests statistiques permettent de valider
l’adéquation d’une loi théorique aux données mais l’un des
plus connus est le test de Kolmogorov Smirnov. Ce test est
utilisé pour déterminer si un échantillon suit bien une loi
donnée, connue par sa fonction de répartition continue, ou
bien si deux échantillons suivent la même loi. La formule R
à utiliser pour ce test est ks.test() qui prend en argument :
▶
le vecteur de données X,
▶
la fonction de répartition de la loi à tester,
▶
les paramètres de cette loi.
Dans l’exemple ci-dessous, le test de Kolmogorov Smirnov
est utilisé pour l’adéquation à une loi uniforme d’un
échantillon de 1000 valeurs généré grâce à une loi uniforme.
Puis il est utilisé pour comparer deux échantillons générés
par deux lois différentes.
#génération d’échantillons suivant la même loi
> u1=runif(1000, 0, 1)
u2=runif(1000,0,1)
ks.test(u1,u2)
D=0,041 pour P.value=0,37 #Accepte l’hypothèse nulle
#génération d’échantillons ne suivant pas la même loi
> u3=runif(1000, 0, 4)
u4=rnorm(1000, 2, 1)
ks.test(u3,u4)
D= 0,099 pour P.value=0,01% #Rejet de l’hypothèses nulle
46 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
La fonction Q-Q plot
Le tracé Q-Q, ou tracé quantile-quantile, est un outil
graphique qui aide à évaluer si un ensemble de données
provient plausiblement d’une certaine distribution théorique,
telle qu’une distribution normale ou exponentielle.
#Visualisation des données
> qplot(x,y,data)
#Visualisation des données par petits multiples
> qplot(x,y,data) +
facet_wrap(~ z)
#Visualisation en séries temporelles
> qplot(data, y, x, geom = «line») +
facet_wrap(~ z)
#Visualisation d’un qqnorm
> qnorm(data)
Vous pouvez retrouver ci-dessous deux exemples, un Q-Q
plot d’un vecteur uniforme comparé à la distribution d’une
loi normale (à gauche) et d’un vecteur normal comparé à
la distribution d’une loi normale (à droite).
| 47
Utilisation des séries temporelles
Gestion des dates
Pour préciser la classe (« Date », « numeric », « character »
ou « factor ») des colonnes de données, vous pouvez
utiliser l’argument colClasses de la fonction read.csv lors
de l’importation de la base de données.
Dans le cas de formats plus personnalisés, il est possible de
convertir une chaîne de caractères en format date grâce
aux fonctions as.POSIXct() et strptime().
Par exemple, pour pouvoir effectuer des opérations sur
des dates, il faut au préalable les transformer en objet Date
grâce à la fonction as.Date().
#Création d’une variable date de classe caractère
> date<-«2022-04-11»
#Tranformation de la variable date en objet Date
> date_ref=as.Date(date,format=«%Y-%m-%d»)
#Utilisation de la fonction class() pour obtenir le
type de chaque variable
> class(date)
[1] «character»
> class(date_ref)
[1] «Date»
48 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Modélisation par série temporelle
La classe t permet de manipuler et modéliser les séries
temporelles sur R. Pour ce faire, elle prend en argument
notre data et un argument frequency qui correspond au
nombre d’observations par saison. Une fois importée et
traitée, il est possible de représenter graphiquement la série
de classe ts avec la fonction plot.ts. Il existe d’autres types
de classes pour la gestion des séries temporelles :
Package
Classe
Utilisations
ts
Ts
plot.ts
zoo
zoo
plot.zoo
xts
Xts
plot.xts
Dans un premier temps, il est préférable d’étudier la partie
stationnaire d’une série temporelle grâce à la fonction
decompose() qui va mettre en évidence :
▶
▶
▶
la composante saisonnière : serie$seasonal que l’on
peut supposer soit additive soit multiplicative
la tendance : serie$trend
la partie aléatoire stationnaire de la série : serie_
decomp$random
Cette méthode correspond à la méthode des moyennes
mobiles.
La démarche à suivre pour modéliser et prédire une série
temporelle est :
▶
▶
▶
▶
choisir un modèle,
estimer les paramètres du modèle,
vérifier la validité des hypothèses du modèle,
faire des prévisions avec intervalle de confiance.
| 49
Nous présentons des exemples en lien avec un modèle
SARIMA.
> install.packages(«fable»)
> library(«fable»)
> arima = model(x, ARIMA(data))
> report(arima)
Series: Lynx
Model: ARIMA(2,0,1) w/ mean
Coefficients:
ar1
ar2
1.4851 -0.8468
s.e. 0.0652
0.0571
ma1
-0.3392
0.1185
constant
10165.3614
535.2136
sigma^2 estimated as 60922176: log likelihood=-943.99
AIC=1897.99
AICc=1898.69
BIC=1910.54
>
50 |
gg_tsresiduals(arima)
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
ARIMA effectue d’abord un test « unitroot_ndiffs » pour
déterminer le nombre de différenciations d, puis choisit
les valeurs de p et q minimisant l’AIC par une méthode
séquentielle (stepwise).
| 51
Classification
Dans cette partie, nous présenterons des éléments
techniques sous R pour appliquer des méthodes de
classification supervisée. L’objectif principal de ces
méthodes est de définir des règles à partir d’une base
d’apprentissage permettant de classer des objets dans
des classes.
Ces règles se paramètrent grâce à l’utilisation de variables
explicatives de type qualitatif ou quantitatif.
Méthode
Packages utiles
Arbre de décision
Rpart
Régression
logistique
Pas de packages spécifiques
Courbe ROC
ROCR
ACP
vegan, ade4, FactoMineR, Factoshiny
La suite présentera la méthode de classification par ACP mais
des exemples sont disponibles pour les autres méthodologies
présentées en annexe.
52 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Construction d’un cercle de corrélation et graphe
des individus avec Factominer
L’ACP, ou analyse en composantes principales, permet
de décrire une base de données comprenant plusieurs
variables quantitatives. Elle a pour principe de réduire un
jeu de données de taille N à un jeu de données de dimension
2 ou 3 (en général).
Pour réaliser une ACP avec le package Factominer, il faut
appeler la fonction PCA() qui peut renvoyer des sorties
graphiques.
Les sorties graphiques s’interprètent :
en examinant et en comparant le positionnement des
variables ;
▶ en examinant et en comparant le positionnement des
individus ;
▶ en examinant le positionnement des individus par
rapport au positionnement des variables.
▶
#Construction d’un cercle de corrélation et
▶ graphe des individus avec Factominer
▶ > install.packages(«FactoMineR»)
library(FactoMineR)
▶
acp = PCA(data, scale.unit = TRUE, ncp = 5,
▶ graph = T)
plot.PCA(acp,choix = «ind»)
plot.PCA(acp,choix = «var»)
▶ scale.unit = T permet de normer les données :
center et scale = T donnent des données centréesréduites.
▶
ncp = 3 : indique le nombre de composantes à conserver.
▶
graph = T : permet d’afficher automatiquement les
graphs de visualisation des données.
| 53
Pour identifier le nombre de composantes à retenir pour
réaliser notre ACP, il nous faut identifier où se positionnent
les résultats des poids de chaque composante dans la
sortie d’ACP. Pour le faire, il est possible d’utiliser diverses
méthodes, parmi lesquelles le contrôle de la pertinence de
l’ACP par un diagramme de Pareto.
100
fréquence (%)
80
60
1
2
3
4
Frequency
48%
36,17%
13,4%
2,3%
Cumul
48,03%
84,2%
97,69%
100%
60
40
40
20
20
0
0
comp 1
comp 2
comp 3
comp 4
Défauts
En effet, le principe de Pareto suppose que la variabilité
globale se concentre sur les premières composantes. Afin
de pouvoir travailler sur un nombre réduit de composantes,
il faut s’assurer que le principe de Pareto est respecté. Il est
possible de contrôler la pertinence de l’ACP en s’assurant
que les composantes retenues couvrent bien 95%, 97.5%,
ou plus selon son choix, de la variabilité du nuage.
Dans cet exemple, les 3 premières composantes couvrent
98% de la variabilité, on peut réduire ainsi le nombre de
dimensions des données à seulement 3 au lieu de 4.
Partie 1 • Les scénarios du GIEC
Le guide SeaBird
DÉCEMBRE 2021
Mon «risque planète» va craquer
Comment modéliser
le changement climatique ?
Un exemple d’utilisation est à retrouver dans le guide
SeaBird. Le clustering y est utilisé afin d’identifier
les départements dans lesquels une augmentation
de fréquence d’inondation est attendue.
Le graphique des individus
54 |
80
cumul
100
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Ce graphique montre les “ressemblances” entre individus.
Plus ils sont proches (comme par exemple les diamants
63 et 64), et plus leurs “profils” de performance sont
vraisemblablement similaires.
Les coordonnées des individus peuvent ainsi classiquement
servir de base pour définir des classes d’individus à travers
une classification hiérarchique ascendante.
Comme dans le cas des variables, les individus les mieux
représentés par le plan factoriel sont les plus éloignés du
centre.
La position des individus peut en outre être interprétée
selon la position des variables. Par exemple, le diamant 82
(à droite, en haut) a plutôt eu de bons résultats.
| 55
Le cercle de corrélation des variables
La représentation des variables dans le plan factoriel, aussi
appelée cercle des corrélations, permet d’évaluer la liaison
entre les variables.
En analysant uniquement une variable, si l’angle se trouve à
90° et 270°, alors la corrélation est nulle. Si l’angle est proche
de 180° (les flèches sont opposées), alors la corrélation est
proche de -1. De plus, la corrélation entre deux variables
est significativement proche de 1 si l’angle entre les deux
est petit. Aussi, plus les flèches sont proches du cercle de
corrélation, plus l’impact de la variable est significatif.
Tout cela s’applique évidemment si les variables sont “bien
représentées” par les deux premiers axes de l’ACP (ici, on
a ~72,3% de variance qui est expliquée par la dimension 1 et
~15,1% par l’utilisation de la dimension 2).
56 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Utilisation de Factoshiny
Le package Factoshiny propose de réaliser une analyse en
composantes principales en passant par une interface de
navigateur web. L’avantage de cette méthode repose sur
les nombreuses options disponibles.
Voici un aperçu rapide des possibilités d’analyse avec
Factoshiny.
| 57
Cum hoc sed non propter hoc
(« avec ceci, cependant pas à cause de ceci »)
La corrélation détermine la relation entre deux variables.
Deux variables qui évoluent dans la même trajectoire ne
veut pas dire que l’une est la cause de l’autre. La corrélation
n’implique pas la causalité. L’erreur consisterait à dire X et Y
sont corrélés, donc X cause Y alors que si X cause Y alors X
est corrélé à Y (sa réciproque est fausse).
Comment explorer la causalité ?
Dans un premier temps, il faut établir le lien de causalité
entre l’événement A et l’événement B. Ensuite définir le
sens logique entre l’événement A et l’événement B, c’està-dire quelle est la variable expliquée et quelle est la variable
explicative. L’idée étant de proposer un plan expérimental
rigoureux et pour cela de connaître son périmètre d’étude.
Il est possible de connaître le degré de lien qui existe entre
2 variables en fonction de leur type :
58 |
▶
2 variables quantitatives : déterminer leur corrélation
▶
2 variables quantitative et qualitative (et vice-versa) :
comparer leurs moyennes ou leurs médianes
▶
2 variables qualitative : test de Khi2
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Comment explorer la corrélation ?
L’analyse de la corrélation avec R peut s’effectuer grâce
à une matrice de corrélation. Elle permet d’évaluer la
dépendance entre différentes variables dans une même
base de données par le biais de tests de corrélations :
▶ corrélation de Pearson ;
▶ corrélation de Kendall ;
▶ corrélation de Spearman, etc.
Il existe deux fonctions de calcul du coefficient de
corrélation.
La première est la fonction cor() qui utilise trois arguments :
▶
Les variables x et y à tester ;
La méthode à utiliser qui correspond à une méthode de
pearson de kendall ou de spearman. :
> cor(x,y, method= “pearson”)
> cor(x,y, method= “kendall”)
> cor(x,y, method= “spearman”)
La deuxième est la fonction cor.test(), elle permet d’obtenir
le niveau de significativité du test réalisé, nommé p-value.
> cor.test(x,y, method= “pearson”)
> cor.test(x,y, method= “kendall”)
> cor.test(x,y, method= “spearman”)
| 59
Modélisation
linéaire généralisée
Principe du modèle
Dans le cadre usuel de la tarification IARD, le modèle
fréquence – coût est généralement utilisé avec la charge
totale par police P, définie comme suit :
N
P=
Σ Yi
i=1
avec :
▶
Yi variable aléatoire coût du i -ème sinistres pendant la
▶
N, variable aléatoire nombre de sinistre (fréquence).
période d’exposition. Les lois de probabilité associées
sont généralement la loi Gamma ou la loi Log Normale ;
Les lois de probabilité d’usage sont généralement soit
la loi de Poisson soit la loi Binomiale Négative pouvant
s’interpréter comme un mélange de loi de Poisson dont
le paramètre suit une loi Gamma.
La prime pure (tarif à l’équilibre) est définie comme
E [P]=E [N] * E[Y] ; sous réserve d’indépendance entre
les variables N et Yi (Variables i.i.d.).
60 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Le GLM (Modèle Linéaire Généralisé) consiste à définir un
vecteur X (variables explicatives) à partir duquel la prime
pure est calculée : E [P|X] = E [N|X] * E[Y|X].
Modèles appliqués à la fréquence des sinistres
et aux coûts moyens
Il existe dans la littérature technique plusieurs lois permettant
la modélisation de la fréquence et du coût des sinistres. Ici,
nous explicitons les lois les plus utilisées dans le cadre de
la tarification IARD ainsi que les fonctions de lien affectées
à ces lois.
Modèles les plus utilisés
Coût moyen
Modèle
Gamma
Modèle
log normal
Modèle
normal
Fonction de
lien affectée
Inverse
Identité
Identité
Fréquence
Modèle Binomial
négative
Modèle
Poisson
Modèle
binomial
Fonction de
lien affectée
Log
Log
Log
Ces modèles s’établissent à partir de trois composantes :
▶ la loi des erreurs, connue a priori et appartenant à une
famille dite exponentielle ;
▶ le prédicteur linéaire, défini par des coefficients et par
les variables explicatives ;
▶ la fonction de lien, qui prend en argument la variable à
expliquer
| 61
g(Y) = p = βX
β
avec et X vecteurs de taille n, représentant respectivement
les coefficients et les variables explicatives.
Sous R, la fonction glm est utilisée pour ajuster ces modèles
linéaires généralisés.
Elle prend pour arguments obligatoires :
▶ formula, un objet correspondant à la formule à appliquer,
▶ family, correspondant à la famille de loi à appliquer aux
erreurs du modèle et demandant la fonction de lien à utiliser
dans ce modèle,
▶ data, correspondant aux données contenant les variables
du modèle.
Pour obtenir les arguments facultatifs de ce modèle, nous
vous invitons à vous référencer à l’aide sous R grâce à la
formule ?glm.
> Data.glm <- glm(Col1 ~ . ,
family = binomial, data = Data)
Pour obtenir le détail du modèle calibré, il suffit d’appeler la
fonction summary().
>
summary(Data.glm)
La fonction plot() permet d’avoir un aperçu de la validité
des hypothèses de notre modèle à partir des résidus de
déviance.
>
plot(Data.glm)
Dans le cadre de ce guide de présentation des fonctionnalités
de R, nous nous limiterons à l’analyse des sinistres dits
attritionnels.
62 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Choix des variables explicatives
La sélection des variables explicatives est un lourd sujet
en modélisation. Cette question n’est pas anodine si le
modélisateur est amené à travailler avec des données
« Open Source » disposant d’un grand nombre de variables
explicatives.
Grâce à la fonction stepwise(), il est possible d’avoir recours
à différentes solutions appelés méthodes pas à pas :
Explications
Backward
(Méthode descendante) Le modèle est
ajusté en introduisant toutes les variables
disponibles puis, pour chaque étape, la
variable ayant le pouvoir explicatif le plus
faible, d’après le test de Fisher, est retirée.
La méthode s’arrête lorsque toutes les
variables restantes sont significatives ou
lorsque le retrait d’une nouvelle variable
dégrade le modèle.
Forward
(Méthode ascendante) Le modèle est
ajusté avec uniquement la constante puis,
à chaque étape, la variable avec le plus
fort pouvoir explicatif d’après le test de
Fisher est introduite. La méthode s’arrête
lorsque l’ajout d’une nouvelle variable
n’améliore pas le modèle.
Stepwise
(Méthode combinée) L’idée est que l’ajout
d’une variable ne doit pas provoquer la
suppression d’une variable déjà introduite
dans le modèle.
| 63
La fonction stepwise(), se trouvant dans la library MASS, va
sélectionner la formule préconisée pour le modèle grâce
au critère de l’AIC (Akaike information criterion).
Le critère AIC peut s’appliquer aux modèles estimés par une
méthode du maximum de vraisemblance. Il est défini par
AIC = -2log(L) + 2k où Lest la vraisemblance maximisée et k le
nombre de paramètres dans le modèle. Le meilleur modèle
est celui qui minimise le plus l’AIC.
#Ici la méthode utilisée est la méthode combinée.
En changeant l’argument direction, il est possible
d’utiliser une méthode ascendante ou descendante.
> require(MASS)
> Data.glm <- glm(Col1 ~ . , family = binomial,
data = Data)
> stepwise(Data.glm, direction = «forward/
backward»)
64 |
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Validation des hypothèses
Il existe différents critères permettant de valider la qualité
d’estimation et d’ajustement de notre modèle :
▶ Le RMSE, qui correspond à la racine carrée du MSE, est un
indicateur qui fournit une idée sur la qualité de prédiction, il
permet de comparer deux modèles d’un même ensemble
de données, mais pas entre deux ensembles de données
car il dépend fortement de l’échelle. De plus, cet estimateur
est sensible aux valeurs aberrantes.
▶ La déviance est un critère qui mesure la qualité
d’ajustement entre les valeurs observées i et i - i et les
^
^
valeurs prédites i et i - i . Plus la valeur de la déviance
est faible, meilleur est l’ajustement. De plus, dans le cas de
données groupées, la distribution de cette déviance tend
vers une loi du X2 à
degrés de liberté quand tend
vers l’infini. Le test de Pearson va permettre de mesurer la
qualité de l’ajustement.
µ
n µ
n-p
y n y
n
ǵ
La Null deviance correspond à la déviance du modèle
nul, caractérisé par aucun effet du facteur. Le terme
déviance désigne une variation de la log-vraisemblance.
Plus la Null deviance est faible, plus le modèle nul
correspond à nos données.
ǵ
La variation de vraisemblance entre le modèle parfait et
le modèle nul est la déviance résiduelle du modèle nul.
Le modèle parfait ou saturé correspond à un modèle
possédant autant de paramètres que d’observations
et estimant donc exactement les données.
| 65
Pour rappel une fois notre modèle construit, la fonction
summary() permet d’afficher un diagnostic complet de
ce dernier.
> glm(formula = trips ~ ., family = poisson, data =
RecreationDemand)
#Deviance Residuals:
Min
1Q
Median
3Q
Max
-11.8465
-1.1411
-0.8896
-0.4780
18.6071
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.264993
0.093722
2.827 0.00469 **
quality
0.471726
0.017091 27.602 < 2e-16 ***
skiyes
0.418214
0.057190
7.313 2.62e-13 ***
income
-0.111323
0.019588 -5.683 1.32e-08 ***
userfeeyes
0.898165
0.078985 11.371 < 2e-16 ***
costC
-0.003430
0.003118 -1.100 0.27131
costS
-0.042536
0.001670 -25.467 < 2e-16 ***
costH
0.036134
0.002710 13.335 < 2e-16 ***
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’
0.1 ‘ ’ 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 4849.7
Residual deviance: 2305.8
AIC: 3074.9
on 658
on 651
degrees of freedom
degrees of freedom
Number of Fisher Scoring iterations: 7
JUIN 2021
Pandémie de covid-19
et 100% santé
Étude des impacts sur la tarification
des régimes collectifs
66 |
Un exemple d’utilisation est à retrouver dans le
guide SeaBird. La modélisation linéaire généralisée
y est utilisée afin de mesurer l’impact du Covid sur la
tarification des régimes collectifs .
IARD : TARIFER SOUS R | Méthode et pratiques
PARTIE 2 : De la modélisation à la tarification
Comment modéliser
les sinistres graves ?
La présence de sinistres graves vient perturber l’hypothèse
de différenciation du risque collectif d’une classe à l’autre
et la stabilité temporelle des indicateurs. Les indicateurs,
calculés par des moyennes, sont très sensibles aux valeurs
extrêmes. Il est nécessaire d’envisager des scénarios
extrêmes qui tiennent compte des queues épaisses de la
distribution des sinistres.
La distribution des sinistres graves est modélisée par une
loi de Pareto généralisée. La méthode à dépassement
de seuil consiste à utiliser les observations dépassant un
certain seuil $u$.
La distribution conditionnelle
seuil u est définie par :
Fu(x) = P(X < x | X > u) =
Fu des excès au-delà du
F(x) - F(u)
1 - F(u)
pour x > u
Le théorème de Pickands établit le lien entre le paramètre
de la loi du domaine d’attraction maximum et le
comportement limite des excès au-delà d’un seuil assez
grand.
Dans notre application, nous proposons de présenter la
méthode de détermination du seuil u grâce à l’estimateur
de Hill.
| 67
En supposant appartenir au domaine d’attraction maximale
de Fréchet, l’estimateur de Hill, basé sur la statistique
d’ordre X{kn} <...< X {1,n} est défini par :
^ Hill
1
ξ {n,k} = k-1
Σ
j=1...k-1
ln (X{j:n}) - ln(Xk:n)
> library(evir)
> data(«airquality»)
#start correspond au premier X et end au dernier
de la statistique d’ordre
> hill(airquality$Ozone,start=10,end=100)
Threshold
91
79
71
59
46
40
35
30
24
22
19
16
13
10
17
24
31
38
45
52
59
66
73
80
87
94
alpha (Cl, p=0.95)
8
6
4
2
Order statistics
68 |
Annexes
Opérations numériques
sort(x)
Eléments de x triés
length(x)
Longueur de x
min(x)
Minimum de x
max(x)
Maximum de x
range(x)
Étendue de x
mean(x)
Moyenne de x
Opérations
sur les data-frames
70 |
Description
Description
lapply(df,f)
Application de la fonction f
aux composantes de df
apply(df,f)
Application de la fonction f
aux lignes de df
data.frame(x)
Convertir x en dataframe
summary(df)
Statistiques colonne
par colonne
names(df)
Noms des colonnes
IARD : TARIFER SOUS R | Méthode et pratiques
Analyses statistiques
lm(y ~ x1 + x2,data=df)
summary(mod)
Description
Régression linéraire
Obtenir des informations sur la
qualité de notre modèle
predict(mod)
Prédire les valeurs de notre
modèle
residual(mod)
Obtenir les résidus de notre
modèle
plot(mod)
Programmation
Visualisation du diagnostic de
notre modèle
Description
for( i in vecteur){expr}
Boucle sur tous les éléments
d’un vecteur
while(condition){expr}
Boucle tant que la condition
est vraie
Repeat{condition}
Boucle infinie (couplé avec
l’ordre break pour sortir de
la boucle)
If (condition){expr vraie}
Else {expr alternative}
function(a,b=1){expr}
Annexes
Structure conditionnelle
Fonction avec deux
arguments en entrée a et b
| 71
Choisir
SeaBird
Partenaire conseil des métiers de l’Assurance
Engagé depuis plus de 15 ans auprès des acteurs de l’Assurance, SeaBird
s’appuie sur la richesse et la complémentarité des expertises financières
et actuarielles de ses 200 consultants spécialistes pour accompagner ses
clients dans leurs projets de transformation stratégique, organisationnelle
ou réglementaire, de digitalisation des systèmes d’information et
des processus métiers et d’amélioration de la performance. Nous
nourrissons également les réflexions de nos clients sur leurs stratégies de
développement et l’évolution de leurs métiers : SeaBird organise chaque
année des conférences, publie des guides relatifs aux évolutions et aux
enjeux du secteur. En qualité d’organisme de formation, SeaBird contribue
enfin au développement des compétences de ses clients.
Associé à tous les moments clés de leurs projets, SeaBird est un partenaire
inspirant, un facilitateur et un accélérateur pour répondre aux ambitions
des acteurs de l’Assurance. Notre intime connaissance opérationnelle
des métiers de l’Assurance nourrit notre vision et apporte la garantie de
solutions concrètes et pérennes.
www.seabirdconseil.com
Vos contacts
Saïda Derkaoui
Benjamin Silva
Pierre Thérond
Consultante Actuariat
06 52 56 22 00
sderkaoui@seabirdconseil.com
Manager Actuariat
06 45 52 29 47
bsilva@seabirdconseil.com
Actuaire - Directeur associé
07 66 38 18 89
ptherond@seabirdconseil.com
72 |
Partenaire conseil
des métiers de l’Assurance
Transformation
5 domaines
d’expertise
Digitalisation
De la stratégie
à la mise en œuvre
opérationnelle
Finance
Risques & Actuariat
Investissement
Accompagnement opérationnel
Opérations
Audit, Contrôle interne & Conformité
4 niveaux
d’intervention
30
millions d’euros
de CA annuel
+de
60
Conseil
estimé au 31/08/2022
clients actifs
Organisation et process
Gestion de projet
15 %
de croissance
Renfort opérationnel
annuelle
* en moyenne sur
les 10 dernières années
+de 2
+ de 200
000
missions réalisées
depuis la création
en 2005
consultants
aux expertises financières, actuarielles
et technologiques complémentaires
33 ans
2/3
des salariés
sont actionnaires
Label Gold
Ecovadis
95%
des collaborateurs
en CDI
âge moyen des
collaborateurs
Cabinet indépendant
qui défend un modèle
de gouvernance
innovant et vertueux
+de
du capital détenu par
la fondation actionnaire
SeaBird Impact
Mise en œuvre de programmes
en faveur d’une assurance
inclusive et durable
16 %
du capital détenu par les salariés
notamment via un Fonds Commun de
Placement Entreprise (FCPE) agréé par l'AMF
+ de 400
décideurs de l’Assurance
présents à nos événements d’expertise dans l’année.
Chaque mois, de nouveaux guides, benchmarks, articles...
pour décrypter les enjeux du secteur.
la pratique stratégique,
la vision opérationnelle
| 73
www.seabirdconseil.com
Suivez-nous :
linkedin.com/company/seabird-consulting |
Partenaire conseil
des métiers de l’Assurance
@SeaBirdC
15-17 rue de Bucarest
75008 Paris
Download