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