Vous êtes sur la page 1sur 102

textetuooooooooo

Rapport de Bureau d’étude - Groupe n°11


MASTER 1 Actuariat

Étude de la sinistralité automobile par des


méthodes de machine learning

Abdoul-Malick BUARI - Thomas LE BRIGAND - Arstan UMAROV

Travail supervisé par :

Nabil RACHDI (Responsable Data Science Actuaris)


Pierre AILLIOT (Enseignant - Chercheur)
Franck VERMET (Enseignant - Chercheur)

2017-2018
Remerciements

Tout d’abord, nous tenons à exprimer notre plus grande reconnaissance à Monsieur Nabil RA-
CHDI - responsable Data Science au sein du cabinet Actuaris et tuteur de notre bureau d’étude - pour
sa disponibilité, son attention en particulier lors de nos entretiens téléphoniques, ainsi que pour ses
nombreux conseils qui nous ont permis d’avancer dans notre travail.
Par ailleurs, nous souhaitons tout particulièrement remercier Monsieur Franck VERMET - direc-
teur des études de l’EURIA, responsable de l’encadrement des bureaux d’étude, enseignant chercheur
et également tuteur de notre bureau d’étude - ainsi que Monsieur Pierre AILLIOT - enseignant cher-
cheur - pour l’aide et les indications qu’ils nous ont apportées au cours de nos recherches lors des
différentes étapes de notre travail.
Enfin, nous adressons nos remerciements à Monsieur Anthony NAHELOU pour les conseils com-
plémentaires qu’il a pu nous donner lorsque cela était nécessaire.

1 Bureau d’étude 2017 - 2018


TABLE DES MATIÈRES

Table des matières

1 Introduction 7

2 Open Data 8
2.1 Contexte général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 Définition générale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 Sources de l’Open Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2.1 L’intéropérabilité : essence de l’Open Data . . . . . . . . . . . . . . . . . . 9
2.1.2.2 Une grande variété de secteurs sources . . . . . . . . . . . . . . . . . . . . 9
2.2 Exemples d’utilisation d’Open Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Bénéfices et répercusions de l’Open Data sur la société . . . . . . . . . . . . . . . . . . . . 10
2.3.1 Les bénéfices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2 Les répercussions sur la vie des citoyens . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Ce qu’il faut retenir des Open Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

3 La sinistralité automobile en France 12


3.1 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.2 Historique de la sinistralité automobile en France . . . . . . . . . . . . . . . . . . . . . . . 13
3.3 Causes des accidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4 La base de données 16
4.1 Importation de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2 La base de données initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.2.1.1 La sous-base USAGERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.2.1.2 La sous-base VEHICULES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.1.3 La sous-base LIEUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.2.1.4 La sous-base CARACTERISTIQUES . . . . . . . . . . . . . . . . . . . . . . 19
4.2.2 Analyses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.2.1 La gravité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.2.2.2 Les quatre sous-bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.3 La nouvelle base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.1 Mise en perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3.2.1 Modification de la sous-base USAGERS . . . . . . . . . . . . . . . . . . . 24
4.3.2.2 Modification de la sous-base VEHICULES . . . . . . . . . . . . . . . . . . 25
4.3.2.3 Modification de la sous-base LIEUX . . . . . . . . . . . . . . . . . . . . . . 26
4.3.2.4 Modification de la sous-base CARACTERISTIQUES . . . . . . . . . . . . . 26
4.3.3 Gestion des valeurs manquantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3.4 Visualisation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2 Bureau d’étude 2017 - 2018


TABLE DES MATIÈRES

5 Les outils Informatiques utilisés 35


5.1 Le package H2O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 TensorFlow & Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.1 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2.2 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

6 La mise en place des modèles 37


6.1 Intérêt de la modélisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2 Recherche d’informations redondantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3 Les métriques utilisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.3.1 Exactitude (Accuracy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.3.2 Précision (Precision) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.3.3 Rappel (Recall) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.3.4 Score F1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.3.5 AUC (Area Under Curve) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
6.4 La théorie des modèles de prédictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.4.1 Modèles linéaires généralisés (GLM) . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.4.2 Forêts aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4.2.1 Les arbres de décisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.4.2.2 La théorie du modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.4.3 Modèle Gradient Boosting (GBM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.4.4 Réseaux de neurones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.5 Application à notre étude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5.1 Échantillonnage de la base de données . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5.2 Mise en forme des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5.3 Paramétrage des modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5.3.1 Sous H2O . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.5.3.2 GLM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5.3.3 Forêts aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5.3.4 GBM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5.3.5 Sous Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5.4 Présentation des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.5.4.1 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.5.4.2 Interpréation des résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.5.4.3 Analyse ex ante / ex post . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7 Représentation géographique des accidents 73

8 Conclusion 75

A Codes informatiques 76

3 Bureau d’étude 2017 - 2018


TABLE DES FIGURES

Table des figures

2.1 Les différents secteurs de sources d’Open Data . . . . . . . . . . . . . . . . . . . . . . . . 9

3.1 Evolution de la mortalité automobile en France . . . . . . . . . . . . . . . . . . . . . . . . 13

4.1 Aperçu de la sous-base USAGERS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17


4.2 Aperçu de la sous-base VEHICULES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.3 Aperçu de la sous-base LIEUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4.4 Aperçu de la sous-base CARACTERISTIQUES . . . . . . . . . . . . . . . . . . . . . . . . . 20
4.5 Evolution de la proportion des modalités de la gravité des accidents entre 2005 et 2016 20
4.6 Proportion de valeurs manquantes par variable de la sous-base USAGERS . . . . . . . . 21
4.7 Proportion de valeurs manquantes par variable de la sous-base VEHICULES . . . . . . . 22
4.8 Proportion de valeurs manquantes par variable de la sous-base CARACTERISTIQUES . 22
4.9 Proportion de valeurs manquantes par variable de la sous-base LIEUX . . . . . . . . . . 23
4.10 Aperçu de la nouvelle sous-base USAGERS . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.11 Aperçu de la nouvelle sous-base VEHICULES . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.12 Aperçu de la nouvelle sous-base LIEUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.13 Aperçu de la nouvelle sous-base CARACTERISTIQUES . . . . . . . . . . . . . . . . . . . . 27
4.14 Répartition des accidents par type d’usagers . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.15 Répartition des accidents par âge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.16 Répartition des accidents par genre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.17 Répartition des accidents par catégories de véhicules . . . . . . . . . . . . . . . . . . . . . 31
4.18 Les manoeuvres principales des conducteurs avant l’accident . . . . . . . . . . . . . . . 31
4.19 Répartition des accidents par catégorie de routes . . . . . . . . . . . . . . . . . . . . . . . 32
4.20 Etat de la surface lors de l’accident . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.21 Les types d’infrastructures sur le lieu de l’accident . . . . . . . . . . . . . . . . . . . . . . 33
4.22 Les conditions météorologiques lors de l’accident . . . . . . . . . . . . . . . . . . . . . . . 33
4.23 L’heure des accidents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6.1 Répartition de la gravité avec 4 modalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37


6.2 Répartition de la gravité avec 2 modalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.3 Coût de la sinistralité automobile de 2010 à 2016 . . . . . . . . . . . . . . . . . . . . . . . 38
6.4 Analyse de la corrélation sur la base USAGERS . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.5 Analyse de la corrélation de la base VEHICULES . . . . . . . . . . . . . . . . . . . . . . . . 40
6.6 Analyse de la corrélation base CARACTERISTIQUES . . . . . . . . . . . . . . . . . . . . . 41
6.7 Analyse de la corrélation base LIEUX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.8 Exemple simpliste d’arbre de décision : Trouver la maladie en fonction des symptômes . 46
6.9 Schéma explicatif du fonctionnement d’un neurone formel . . . . . . . . . . . . . . . . . 48
6.10 Schéma explicatif du fonctionnement d’un perceptron simple . . . . . . . . . . . . . . . 49
6.11 Schéma explicatif du fonctionnement d’un perceptron monocouche (1 couche cachée) 49
6.12 Courbe ROC des modèles mis en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.13 Historique d’entraînement du réseau neuronal . . . . . . . . . . . . . . . . . . . . . . . . 54
6.14 Variables explicatives de la gravité par le modèle glm . . . . . . . . . . . . . . . . . . . . . 55
6.15 Variables explicatives de la gravité par les forêts aléatoires . . . . . . . . . . . . . . . . . . 56

4 Bureau d’étude 2017 - 2018


TABLE DES FIGURES

6.16 Variables explicatives de la gravité dans le modèle gbm . . . . . . . . . . . . . . . . . . . 56


6.17 Graphique croisé de catv-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.18 Graphique croisé de NB_pers-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.19 Graphique croisé de obstacle-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.20 Graphique croisé de agg-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.21 Graphique croisé de manv-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.22 Graphique croisé de col-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.23 Boites à moustaches de densité-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.24 Graphique croisé de densite-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.25 Explication individuelle de la sinistralité par le réseau neuronal . . . . . . . . . . . . . . 65
6.26 Variables explicatives de la gravité par les forêts aléatoires sous le nouveau modèle . . . 67
6.27 Graphique croisé age-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.28 graphique croisé Plan-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.29 graphique croisé heure-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.30 graphique croisé mois-grav . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.31 Explication individuelle de la sinistralité automobile . . . . . . . . . . . . . . . . . . . . . 72

7.1 Aperçu de la représentation des accidents sur l’année 2016 en France métropolitaine . 73
7.2 Aperçu du nombre de tués en Pointe de Bretagne au cours de l’année 2008 . . . . . . . . 74

5 Bureau d’étude 2017 - 2018


LISTE DES TABLEAUX

Liste des tableaux

3.1 Statistiques des principales causes d’accidents . . . . . . . . . . . . . . . . . . . . . . . . 15

6.1 Résultats des modèles sur la base d’apprentissage . . . . . . . . . . . . . . . . . . . . . . . 52


6.2 Résultats des modèles sur la base de test . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.3 Résultats des modèles sur la base de la validation . . . . . . . . . . . . . . . . . . . . . . . 53
6.4 Résultat des nouveaux modèles sur la base de validation 2016 . . . . . . . . . . . . . . . 66

6 Bureau d’étude 2017 - 2018


Chapitre 1

Introduction

Au cours de notre année de Master 1 à l’Euro Institut d’Actuariat, des professionnels du domaine
de l’actuariat proposent différents sujets d’étude variés et innovants, accompagnés de probléma-
tiques concrètes. Après le choix d’un sujet, les encadrants professionnels et professeurs assignés nous
guident dans nos travaux de recherche qui ont pour objectif de nous faire découvrir un domaine ac-
tuariel. Le "Bureau d’Etude" est, pour beaucoup d’étudiants, une première expérience de mission de
recherche et permet de tester notre capacité à travailler en groupe. En plus des connaissances ac-
quises et nécessaires lors de nos deux premières années d’études en actuariat, le Bureau d’Etude vise
à nous sensibiliser sur un sujet précis, souvent "inconnu", étendant ainsi notre champ de connais-
sance.
En particulier, notre sujet porte sur l’étude de la sinistralité automobile en France par des mé-
thodes de "Machine Learning". Ce sujet nous a été proposé par le cabinet Actuaris et consiste à ex-
pliquer cette sinistralité au cours des dernières années par des méthodes de prédiction issues de la
"Data Science" ou de l’analyse de données en utilisant des données libres communément décrites
sous le nom d’"Open Data". Il est notifié dans la problématique que la variable à prédire par nos mo-
dèles est le niveau de gravité d’un accident subi par un individu. Les données proposées par Actuaris
sont récupérées sur le site www.data.gouv.fr et sont qualifiées d’Open Data.
Ce sujet est très riche, tant par la diversité des domaines étudiés lors de cette étude (comme la
sinistralité automobile ou l’usage des Open Data) que par l’application de méthodes de Machine
Learning introduites lors de nos cours d’Apprentissage Statistique et de Modèles Linéaires. C’est éga-
lement par ailleurs un sujet d’actualité innovant. En effet, les révolutions numériques et digitales ob-
servées ces dernières années ont pour cause l’explosion de la quantité de données disponibles (d’où
l’appellation anglaise qui qualifie ces données de "Big Data"), mais aussi de défis qui accompagnent
ces évolutions (tels que la protection des données personnelles par exemple). Ces immenses données
vont propulser sur le devant de la scène les techniques de Machine Learning, qui étaient jusqu’alors
difficilement applicables à cause de limitations technologiques, et qui vont permettre aujourd’hui la
mise en place de modèles prédictifs performants.
Après avoir présenté les différentes notions utilisées, notre étude se décomposera en trois étapes
fondamentales présentes dans toutes les études de Data Science. Dans un premier temps, il sera ques-
tion de collecter, analyser et éventuellement modifier les données disponibles. La deuxième étape
consistera ensuite à construire et à expliquer la sinistralité automobile par des modèles prédictifs.
Enfin, il restera à évaluer la qualité de nos modèles et appliquer ces différentes étapes à plusieurs
reprises si nécessaire. Nous compléterons également notre étude par la mise en place d’un outil de
représentation géographique des accidents.

7 Bureau d’étude 2017 - 2018


Chapitre 2

Open Data

Les Open Data ou données ouvertes, sont des données rendues totalement publiques et libres
d’accès et de droit, pouvant être exploitées et réutilisées. Ces "données ouvertes" vont donc permettre
de conduire des études permettant d’approfondir notre connaissance ou compréhension de certains
sujets, et cela dans différents domaines d’activités.

2.1 Contexte général


2.1.1 Définition générale

Le terme Open Data désigne un ensemble de données auxquelles tout le monde peut accéder,
utiliser ou partager sans aucune restriction.

Ces données reposent sur des critères essentiels qui sont :


— La disponibilité et l’accès :
Les données doivent être accessibles de façon légale et sans barrière technique quant à leur utili-
sation, c’est-à-dire lisibles par les machines. Elles sont préférablement disponibles sur Internet.
— La réutilisation et la redistribution :
Les données doivent être mises à disposition sous des conditions permettant leur réutilisation et
leur redistribution, notamment la possibilité de pouvoir les combiner à d’autres données.
— La participation universelle :
Tout le monde doit pouvoir accéder à ces données et être en mesure de les réutiliser et les manipu-
ler de la même manière, sans faire de discrimination sur les fins d’utilisation ou envers des personnes
ou des groupes. Aucune restriction d’utilisation ne doit être faite, y compris à des fins commerciales.

Ces trois critères sont essentiels pour l’Open Data car ils permettent l’interopérabilité qui consiste
en la capacité de pouvoir mélanger différents ensembles de données donnant ainsi à différentes en-
treprises et/ou systèmes la possibilité de travailler ensemble.

8 Bureau d’étude 2017 - 2018


2.1. CONTEXTE GÉNÉRAL

2.1.2 Sources de l’Open Data


2.1.2.1 L’intéropérabilité : essence de l’Open Data

L’intéropérabilité évoquée ci-dessus est très importante en Open Data car elle donne par la dé-
mocratisation de la donnée, l’opportunité à différentes entités de travailler ensemble créant ainsi des
systèmes d’exploitation plus larges de la donnée. La mise en commun des données qui repose sur la
possibilité de les mélanger librement est nécessaire afin de développer des produits et des services
en plus grande quantité et surtout de meilleure qualité.
Toutefois, cette interopérabilité ne repose pas uniquement sur le partage de données. En effet, les
jeux de données doivent utiliser un langage de programmation commun ou alors un intermédiaire
informatique qui permet de faciliter leur exploitation.
Certaines conditions doivent alors être respectées au moment de la création de données, notam-
ment la certification de la provenance des données publiées, l’indication des caractéristiques qui y
sont liées (nous pouvons par exemple citer la date et l’heure de création des données), ou encore la
garantie de la qualité de l’information...

2.1.2.2 Une grande variété de secteurs sources

L’Open Data concerne des informations en provenance de n’importe quelle source d’informa-
tions, dans n’importe quel domaine et sur n’importe quel sujet dès lors que ces données libre d’accès
sont proposées pour un usage gratuit afin que les utilisateurs puissent en tirer un bénéfice, qu’il soit
commercial ou non. La plupart du temps, ces Open Data sont fournies par le gouvernement ou le
secteur public : il peut s’agir de données sur des budgets, des données cartographiques, ou encore de
résultats découlant de recherches scientifiques. Ce ne sont néanmoins pas les seules sources d’Open
Data que l’on peut trouver.
Les Open Data sont généralement des données non personnelles pour des raisons de respect de la
vie privée des individus. Nous pouvons trouver de telles données dans les domaines de la science, de
la cartographie, de l’environnement, de la culture, de l’éducation, de l’économie, du développement,
des affaires, ou encore de la finance. En plus de données chiffrées, nous retrouvons d’autres contenus
comme des images, du texte ou de la musique.

F IGURE 2.1 – Les différents secteurs de sources d’Open Data

9 Bureau d’étude 2017 - 2018


2.2. EXEMPLES D’UTILISATION D’OPEN DATA

2.2 Exemples d’utilisation d’Open Data


Aujourd’hui, les principaux acteurs qui fournissent des données ouvertes sont les gouvernements
et collectivités gouvernementales ainsi que les très grandes entreprises. Ils récoltent massivement
tous types de données qui constituent alors de précieuses ressources. Grâce à ce recueil d’informa-
tions massives, différentes entités les utilisent de manière totalement libre et légale afin de mieux
accomplir leurs tâches.
En effet, différents groupes de personnes ou organisations qui exercent des activités très diverses
les utilisent, y compris les gouvernements. Nous pouvons citer comme secteurs d’activités utilisa-
teurs des Open Data : la santé, les transports, le tourisme, l’environnement, la culture...

Parmi les collectivités actives, Rennes Métropole est un précurseur avec l’accès gratuit à sa base
de données sur les transports. Par exemple, l’application Androïd ArceauVélo localise sur une carte
les emplacements de supports à vélo proches des utilisateurs. Une autre application, EasyBus, donne
de manière rapide et efficace les horaires de bus sur le réseau de Rennes Métropole.
Comme exemples dans le domaine de la culture, nous pouvons évoquer le partenariat mis en
place entre le Ministère de la Culture et de la Communication, la Bibliothèque nationale de France
(BnF) et la Réunion des musées nationaux et du Grand Palais (Rmn-GP), qui a permis d’élaborer une
offre de parcours géolocalisés à disposition des utilisateurs, proposant de découvrir des œuvres em-
blématiques du patrimoine français accessibles en haute définition. Le contenu de la base de données
est issu des archives de Gallica (BnF) et de celles de la Rmn-GP.
Un dernier exemple d’application dans le domaine de l’environnement, la boussole éco-mobilité
et éco-citoyenneté qui permet de se rendre en un lieu ou établissement de la façon la plus rapide et
écoresponsable possible.
Cette boussole utilise la liste des établissements publics, les données de transport en commun
disponible comme les lignes de bus et de tramway et un utilitaire développée par 3Liz à Montpellier
pour calculer l’itinéraire.

2.3 Bénéfices et répercusions de l’Open Data sur la société


2.3.1 Les bénéfices
Les Open Data sont de plus en plus exploitées par les entreprises. C’est une source d’emplois en
expansion rapide.
Ces Open Data génèrent à elles seules des dizaines de milliards d’euros chaque année et le retour
sur investissement est utopique. Elles permettent aussi d’améliorer le quotidien des individus sur le
plan financier, social et même culturel.
Par exemple, chaque jour, 84% des smartphones utilisent une application de type Open Data.
L’Open Data Institute estime le chiffre d’affaires annuel combiné des entreprises anglaises diri-
gées par l’ Open Data à 92 milliards de Livres Sterling. L’industrie du transport à Londres est parvenue
à dégager un retour sur investissement de 58 pour 1 en ouvrant l’accès à ses données de transport.
Cela a permis de faire émerger des leaders mondiaux, comme Citymapper. Cette application mobile
révolutionnaire est donc née grâce à l’ouverture des données.
D’autre part, lorsque de grandes entreprises ou des gouvernements ouvrent l’accès à des don-
nées non-personnelles, cela permet aux petites entreprises de développer des ressources offrant des
améliorations cruciales pour leurs consommateurs.
De plus, les Open Data permettent d’accéder plus facilement aux services de santé et de découvrir
plus efficacement de nouveaux traitements pour les maladies par exemple. Elles offrent l’opportunité
de voyager plus aisément. De nouvelles possibilités sont découvertes en permanence.

10 Bureau d’étude 2017 - 2018


2.4. CE QU’IL FAUT RETENIR DES OPEN DATA

2.3.2 Les répercussions sur la vie des citoyens


Beaucoup de personnes se posent des questions sur la notion d’Open Data et plus particulière-
ment sur l’accessibilité à des données personnelles, surtout depuis le scandale Facebook-cambridge
Analytica dans lequel les données personnelles d’utilisateurs du réseau social Facebook ont été uti-
lisées par l’entreprise Cambridge Analytica, une entreprise de collecte et traitement de données per-
sonnelles pour influencer la récente campagne présidentielle aux Etats-Unis et le vote sur le Brexit.
Le terme Open Data ne signifie pas qu’un gouvernement ou qu’une autre entité rend publiques
toutes ses données, y compris les données personnelles. En effet, il serait non seulement inconscient
de délivrer toutes les données privées et personnelles des citoyens ou des consommateurs à n’importe
qui, mais cela irait également à l’encontre de la protection de la vie privée de chaque individu qui a
été affirmée en 1948 par la Déclaration universelle des droits de l’homme des Nations unies (art. 12).
En droit français, l’article 9 du Code civil, introduit par la loi du 17 juillet 1970, dispose que « Toute
personne a droit au respect de sa vie privée ».
Cela signifie simplement que les données sont rendues publiques d’une manière spécifique, par
exemple par cryptage des données privées ou par une anonymisation de ses données permettant au
public d’y accéder sans aucune restrictions.
Cette mauvaise compréhension justifiée provoque naturellement la crainte de la population concer-
nant la confidentialité. Les gouvernements doivent alors trouver l’équilibre entre l’ouverture des don-
nées et la protection de la vie privée des citoyens. Il existe notamment un règlement européen, la
RGPD, qui est le Règlement Général sur la Protection des Données ou encore GDPR – General Data
Privacy Regulation, qui vise à renforcer la protection des données personnelles en tenant compte des
récentes évolutions technologiques et des défis qui accompagnent ces évolutions.

2.4 Ce qu’il faut retenir des Open Data


Les Open Data ont d’ores et déjà permis d’étendre considérablement le savoir et les connais-
sances. En effet, ce système d’exploitation très prometteur permet d’améliorer la qualité générale des
produits déjà existant et d’en créer sans cesse de nouveaux. Avec cela, un large bénéfice économique
a déjà été engendré ces dernières années et devrait continuer à croître considérablement durant les
prochaines décennies. Cela a permis de générer plusieurs dizaines de milliards d’euros rien qu’en
Europe.
Il faut toutefois faire attention quand à la sécurisation et la publication des données personnelles
des consommateurs.

11 Bureau d’étude 2017 - 2018


Chapitre 3

La sinistralité automobile en France

Outre les Open Data, le thème principal de notre étude est la sinistralité automobile en France.
Il est alors nécessaire de comprendre les différentes notions de celle-ci afin d’effectuer notre étude
basée sur les accidents automobiles.
Ainsi, ce chapitre donnera les définitions des différents termes utilisés par la suite, puis fera un
point sur l’historique de la sinistralité automobile en France. Enfin, il discutera des multiples causes
possibles des accidents accompagné de statistiques et de chiffres clés représentatifs.

3.1 Définitions
En 2004, afin de faciliter les comparaisons internationales, en France, le comité interministériel
de la sécurité routière a décidé d’harmoniser les définitions de la gravité dans le fichier des accidents
corporels avec les définitions adoptées par nos principaux voisins européens.
Dans notre jeu de données, la variable à prédire est la variable qui indique le niveau de gravité
de chaque individu présent dans un accident. Cette variable comporte quatre modalités qui sont :
Indemne, Blessé léger, Blessé hospitalisé et Tué. Définissons alors ces différents termes.
— Un accident corporel (mortel et non mortel) de la circulation routière est un accident qui sur-
vient sur une voie ouverte à la circulation publique, qui implique au moins un véhicule, et qui
provoque au moins une victime, c’est-à-dire un usager ayant nécessité des soins médicaux.

Un accident corporel implique un certain nombre d’usagers. Parmi ceux-ci, nous distinguons :
— Les indemnes : impliqués non décédés et dont l’état ne nécessite aucun soin médical
— Les victimes : impliqués non indemnes.

Parmi les victimes, nous distinguons :


— Les tués : toute personne qui décède sur le coup ou dans les trente jours qui suivent l’accident ;
avant 2004 les statistiques ne faisaient état que de tués dans les six jours.
— Les blessés : victimes non tuées.

Parmi les blessés, nous distinguons :


— Les blessés hospitalisés : victimes admises comme patients dans un hôpital plus de 24 heures.
— Les blessés légers : victimes ayant fait l’objet de soins médicaux mais n’ayant pas été admises
comme patients à l’hôpital plus de 24 heures.

12 Bureau d’étude 2017 - 2018


3.2. HISTORIQUE DE LA SINISTRALITÉ AUTOMOBILE EN FRANCE

3.2 Historique de la sinistralité automobile en France


Pour information, le premier accident automobile en France eut lieu en 1770, le véhicule impli-
qué, appelé le fardier de Cugnot, percuta un mur à une vitesse estimée à 4 km/h ce qui provoqua la
destruction de l’engin. Aucun blessé n’a été comptabilisé.
Par la suite, les véhicules en circulation sont devenus de plus en plus performants et de plus en
plus rapides. De ce fait, les accidents sont aujourd’hui beaucoup plus dangereux.
Depuis 1945, les chiffres sont édifiants. Nous parlons d’au moins 500 000 décèss, soit l’équivalent
d’un grand conflit majeur, ou l’équivalent de pertes humaines subies en France lors de la Seconde
Guerre mondiale.
Depuis 1960, au moins 350 000 personnes sont décédés des suites d’un accident de la route en
France : la seule année 1972 comptabilise 18 034 morts officielles.
Le graphique suivant présente le nombre de morts par accident de voitures en France entre 1970
et 2016.

F IGURE 3.1 – Evolution de la mortalité automobile en France

Nous remarquons que le nombre de morts diminue naturellement tous les ans, et que l’ajout de
système de sécurité routière comme les radars automatiques ne semblent pas contribuer à la dimi-
nution de la mortalité automobile.
Le nombre d’accidents corporels recensés par les pouvoirs publics est en baisse de 2, 7% en 2015
par rapport à 2014. Alors que les blessés légers représentent la majorité des sinistres corporels (envi-
ron 71%), leur indemnisation ne représente que 5% de l’ensemble des indemnités versées. A contra-
rio, les blessés les plus graves ne représentent que 2% des sinistres corporels, soit environ 3 000 blessés
par an pour 58% de la charge des indemnités versées.
En 2016, la France a compté 57 522 accidents corporels, ce qui a provoqué la mort de 3 477 per-
sonnes. Selon les chiffres collectés par l’Observatoire National de la Sécurité Routière (ONISR), le
nombre de blessés s’élève à 72 645 personnes, dont 27 187 ont été hospitalisés.

13 Bureau d’étude 2017 - 2018


3.3. CAUSES DES ACCIDENTS

3.3 Causes des accidents


Des enquêtes scientifiques menées en France entre 1983 et 2004 ont montré que dans 90% des
accidents mortels, le comportement humain est en jeu ; dans 50% des accidents mortels, l’infrastruc-
ture est en jeu ; et dans 30% des accidents mortels, les facteurs liés aux véhicules sont en cause.
Certains facteurs sont relevés systématiquement par les forces de l’ordre après la survenance d’un
accident : alcoolémie, choc contre un obstacle fixe, conditions météorologiques...
D’autres facteurs, et non des moindres, ne sont pas systématiquement recherchés car ils sont
difficiles à déterminer avec précision : vitesse, fatigue, somnolence, distraction, téléphone au volant,
distances de sécurité. . .
Les causes des accidents sont multiples : facteurs humains, véhicule, conditions de circulation,
état de la route, obstacles, conditions météorologiques... Mais ce sont les facteurs humains qui sont
en tête dans la majorité des accidents corporels (dans 90% des cas). Parmi ceux-ci : l’alcool, la vitesse,
la fatigue, la distraction et l’usage du téléphone au volant.
Le cannabis multiplierait par deux la probabilité d’être responsable d’un accident mortel et par
quatorze si le cannabis est associé à l’alcool. La conduite sans permis ou permis invalide est constatée
dans 4% des accidents mortels.
Les causes profondes des accidents peuvent être dues au temps de trajet domicile travail et aux
routes empruntées. Ainsi, les inégalités sociales seraient un facteur non négligeable dans la hausse
des statistiques d’accidents mortels constatés depuis 2014.
En ville, la vitesse tue : nous estimons pour un accident entre un véhicule et un piéton qu’à 30
km/h, les blessures les plus fréquentes sont des contusions légères avec une probabilité de 15% d’être
tué, alors qu’à plus de 50 km/h, la probabilité de tuer un piéton est proche de 100%.
Un choc entre un véhicule et un cycliste peut avoir les mêmes conséquences, mais en plus, le
cycliste chutera.
En France, en 2006, le non-port de la ceinture est présent dans 20% des accidents mortels. Un oc-
cupant portant correctement sa ceinture peut sortir indemne d’un accident, alors que le port d’une
ceinture trop détendue peut conduire à heurter le volant et à des fractures de côtes dues à la collision
contre la ceinture, ou encore à un traumatisme crânien avec fractures faciales et perte de connais-
sance, des fractures des genoux, fémurs ou bassin et enfin un enfoncement thoracique avec lésions
sont souvent mortelles.
Jusqu’en 2006, les carrefours non giratoires sont le lieu de 23% des accidents, et 19% des acci-
dents mortels, les virages de 40% des accidents mortels, et les obstacles sur accotement de 30% des
accidents mortels. La présence d’accès riverains ou commerciaux non aménagés e représente 6%.

14 Bureau d’étude 2017 - 2018


3.3. CAUSES DES ACCIDENTS

Cause de l’accident Statistiques


Conduite sous influence L’alcoolémie positive d’un conducteur est présente dans les accidents
de l’alcool causant 28% des tués sur la route.
Vitesse excessive Selon les forces de l’ordre, les excès de vitesse sont la cause principale
de 26% des accidents mortels.
Défaut de ceinture / Au moment de l’accident :
casque — 21% des tués dans les véhicules (plus d’une personne sur cinq)
ne portaient pas leur ceinture de sécurité.
— 12% des tués à cyclo, et 3% à moto ne portaient pas de casque.

Téléphone au volant Ce facteur n’est pas comptabilisé dans les statistiques d’accidents.
Mais téléphoner au volant multiplie par trois le risque d’accident cor-
porel. Et un accident corporel sur dix est lié à l’usage du téléphone.
Présence d’un obstacle Facteur présent pour les accidents occasionnant 35% des tués.
fixe
Fatigue et somnolence Le facteur « malaise fatigue » apparaît dans 9% des décès sur l’en-
au volant semble du réseau et pour 18% des tués sur l’autoroute. Ce risque ap-
paraît de jour comme de nuit.
Conduite sous influence 23% des décès surviennent dans des accidents impliquant un
du cannabis conducteur contrôlé positif aux stupéfiants. Conduire après avoir
consommé du cannabis multiplie par deux le risque d’être respon-
sable d’un accident mortel. Le risque est multiplié par quatorze en
cas de consommation conjointe de cannabis et d’alcool.
Conduite sans permis / 4% des accidents mortels impliquent un conducteur n’ayant pas le
avec permis inadapté / permis valide, en grande majorité (les 3/4) n’ayant pas de permis. Et
sans assurance 4% des accidents mortels impliquent un véhicule sans assurance.

TABLE 3.1 – Statistiques des principales causes d’accidents

15 Bureau d’étude 2017 - 2018


Chapitre 4

La base de données

Pour effectuer une étude prédictive en Machine Learning, une base de données est nécessaire.
Comme évoqué en introduction, nous utiliserons dans cette étude des données Open Data ou
libres d’accès. Notre première source de données est le site www.data.gouv.fr, qui est la principale
plate-forme ouverte de données publiques françaises. Lorsque l’on effectue une étude à l’aide d’Open
Data, les données brutes récoltées nécessitent un traitement préalable, car elles correspondent rare-
ment à nos besoins et ne sont pas créées pour une utilisation en particulier.
Ce traitement consiste en la recherche de valeurs manquantes, de variables ou valeurs aberrantes
ou non significatives, et souvent en fonction de l’objectif final recherché, à compléter la base de don-
née initiale par d’autres variables issues d’autres bases de données. Nous voyons ici un avantage non
moindre des Open Data, puisque la modification des données est possible sans restriction de copy-
right (droits d’auteurs), à condition que ces données soient de bonne qualité.
Des analyses descriptives de notre jeu de données ont ensuite été réalisées afin de relever de pre-
mières informations sur la sinistralité automobile, avant même la mise en place de modèles de pré-
diction.

4.1 Importation de la base de données


Le jeu de données disponible sur le site www.data.gouv.fr est organisé en 44 fichiers différents
qui sont difficiles à importer manuellement. De ce fait, nous avons utilisé une méthode algorithmique
classique de collecte de données, appelée scraping. Cette méthode permet d’extraire des informa-
tions de la page souhaitée de manière automatique en parcourant les liens imposés à l’algorithme.

4.2 La base de données initiale


4.2.1 Description
Notre jeu de données répertorie l’ensemble des accidents corporels de la circulation française de
2005 à 2016. Les différentes informations relatives à chaque accident sont remplies par l’unité des
forces de l’ordre intervenues sur le lieu de l’accident. Ces saisies sont rassemblées dans une fiche
intitulée "Bulletin d’analyse des accidents corporels". L’ensemble de ces fiches constitue le fichier
national des accidents corporels de la circulation dit "Fichier BAAC1", administré par l’Observatoire
National Interministériel de la Sécurité Routière "ONISR". Nos données sont accompagnées de fiches
descriptives des différentes variables.
Le nombre total d’accidents enregistrés en France entre 2005 et 2016 est de 839 985, ce qui est lar-
gement suffisant pour effectuer une étude de prédictions. Le fichier BAAC1 est décomposé en quatre
sous-bases :

16 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

— La rubrique USAGERS qui décrit les individus victimes de l’accident avec 11 variables.
— La rubrique VEHICULES qui décrit les véhicules impliqués dans l’accident avec 8 variables.
— La rubrique CARACTERISTIQUES qui décrit les circonstances générales de l’accident avec 15
variables.
— La rubrique LIEUX qui décrit le lieu de l’accident avec 17 variables.

Chaque accident est représenté par un numéro appelé Num_Acc permettant de l’identifier dans
les différentes bases.

4.2.1.1 La sous-base USAGERS

Parmi les 11 variables de la sous-base USAGERS, 10 sont qualitatives et 1 est quantitative.

Variables qualitatives :

— num_veh : Identifiant du véhicule repris pour rattacher chaque usager au véhicule associé (y
compris les piétons qui sont rattachés aux véhicules qui les ont heurtés)
— place : Permet de situer la place occupée dans le véhicule par l’usager au moment de l’accident
— catu : Catégorie d’usager entre conducteur, passager, piéton
— grav : Gravité de l’accident pour chaque usager
— sexe : Sexe de l’usager
— trajet : Motif du déplacement au moment de l’accident
— secu : Indique l’existence et/ou l’utilisation d’un équipement de sécurité
— locp : Localisation du piéton par rapport au passage piéton et description des conditions de
traversée de la route
— actp : Action du piéton
— etatp : Précise si le piéton victime était seul ou non au moment de l’accident

Variable quantitative :

— An_nais : Année de naissance de l’usager

F IGURE 4.1 – Aperçu de la sous-base USAGERS

17 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

4.2.1.2 La sous-base VEHICULES

Parmi les 8 variables de la sous-base VEHICULES, 7 sont qualitatives et 1 est quantitative.

Variables qualitatives :

— num_veh : Identifiant du véhicule repris pour chacun des usagers occupant ce véhicule y com-
pris les piétons qui sont rattachés aux véhicules qui les ont heurtés
— senc : Sens de circulation
— catv : Catégorie du véhicule
— obs : Définit l’obstacle dans le cas où le véhicule a heurté un obstacle fixe
— obsm : Définit l’obstacle dans le cas où le véhicule a heurté un obstacle mobile
— choc : Point de choc initial sur le véhicule
— manv : Manœuvre principale avant l’accident

Variable quantitative :

— occutc : Nombre d’occupants dans le transport en commun

F IGURE 4.2 – Aperçu de la sous-base VEHICULES

4.2.1.3 La sous-base LIEUX

Parmi les 17 variables de la sous-base LIEUX, 13 sont qualitatives et 4 sont quantitatives.

Variables qualitatives :

— catr : Catégorie de route (Autoroute, Route Nationale, Route Départementale. . . )


— voie : Numéro de la route
— V1 : Indice numérique du numéro de route (exemple : 2 bis, 3 ter, etc.)
— V2 : Lettre indice alphanumérique de la route
— circ : Régime de circulation
— vosp : Signale l’existence d’une voie réservée, indépendamment du fait que l’accident ait lieu
ou non sur cette voie
— prof : Profil en long décrivant la déclivité de la route à l’endroit de l’accident
— pr : Numéro du point de repère (PR) de rattachement (numéro de la borne amont)
— plan : Tracé en plan
— surf : Etat de la surface
— infra : Aménagement - Infrastructure (Souterrain, Pont, Bretelle, Voie ferrée. . . )

18 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

— situ : Situation de l’accident (Sur chaussée, Sur bande d’arrêt d’urgence, Sur trottoir. . . )
— env1 : Indique si l’accident s’est produit à proximité d’une école

Variables quantitatives :

— nbv : Nombre total de voies de circulation


— pr1 : Distance en mètres au PR (par rapport à la borne amont)
— lartpc : Largeur du terre-plein central s’il existe
— larrout : Largeur de la chaussée affectée à la circulation des véhicules

F IGURE 4.3 – Aperçu de la sous-base LIEUX

4.2.1.4 La sous-base CARACTERISTIQUES

Parmi les 15 variables de la sous-base CARACTERISTIQUES 10 sont qualitatives et 5 sont quanti-


tatives.

Variables qualitatives :

— hrmn : Heures et minutes de l’accident


— lum : Conditions d’éclairage dans lesquelles l’accident s’est produit
— dep : Code INSEE 1 correspondant au département
— com : Code INSEE correspondant à la commune
— agg : Indique si l’accident s’est produit en agglomération ou hors agglomération
— int : Précise le type d’intersection où l’accident s’est produit
— atm : Conditions atmosphériques
— col : Type de collision
— adr : Adresse postale pour les accidents survenus en agglomération
— gps : Indique si l’accident s’est produit en métropole ou dans les DOM-TOM

Variables quantitatives :

— jour : Jour de l’accident


— mois : Mois de l’accident
— an : Année de l’accident
— lat : Latitude
— long : Longitude

1. INSEE : Institut National de la Statistique et des Etudes Economiques

19 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

F IGURE 4.4 – Aperçu de la sous-base CARACTERISTIQUES

Ainsi, ces données décrivent de manière relativement précise chaque accident recensé.

4.2.2 Analyses
4.2.2.1 La gravité

Une première analyse de notre base de données à été de regarder l’évolution de la proportion des
modalités de la gravité sur la période 2005-2016.

F IGURE 4.5 – Evolution de la proportion des modalités de la gravité des accidents entre 2005 et 2016

Nous remarquons que la proportion relative à la gravité est quasiment constante au cours du
temps. Ainsi, nous avons décidé de merger les données par année.

20 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

4.2.2.2 Les quatre sous-bases

Comme dit précédemment, notre jeu de données nécessite un traitement préalable.


En effet, certaines variables contiennent des modalités aberrantes. Par exemple, certaines va-
riables ont des valeurs non explicitées par le descriptif de l’ONISR. Il y est précisé que les données
non renseignées ont été remplacées par des zéros, des points, ou laissées vides.
Lors de l’importation des données sous R, le logiciel considère les données contenant des points
ou des cases vides comme des valeurs manquantes, "NA" sous R. Concernant les zéros aberrants, il
a fallu les remplacer par des valeurs manquantes, variable par variable. De ce fait, dans certains cas,
cela a significativement augmenté le nombre de valeurs manquantes pour la variable en question.
Pour certaines variables, la difficulté principale a été de remarquer que certaines modalités in-
existantes ne sont pas des valeurs manquantes.
Pour la variable place qui indique la position de l’usager dans le véhicule, la modalité "0" signifie
simplement que l’individu est un piéton, et inversement, la modalité "0" dans la variable actp qui
décrit l’action du piéton avant l’accident, indique que l’individu est dans un véhicule.
Suite à ce travail, nous analysons maintenant la proportion des valeurs manquantes dans cha-
cune des sous-bases.
Les graphiques suivants sont composés de deux parties : celle de gauche représente la proportion
de valeurs manquantes par variable, celle de droite représente la répartition des valeurs manquantes
par combinaison de variables et se lit ligne par ligne. Elle permet notamment de détecter l’existence
de tendances dans la répartition des valeurs manquantes et va ainsi nous donner une information
supplémentaire pour le traitement de celles-ci dans la partie gestion des valeurs manquantes.

— La sous-base USAGERS :

F IGURE 4.6 – Proportion de valeurs manquantes par variable de la sous-base USAGERS

On observe principalement trois variables qui ont plus de 80% de valeurs manquantes : locp,
etatp, actp. Ce n’est pas étonnant de retrouver ces variables exclusivement réservées aux piétons, car
la proportion de piétons accidentés est très faible par rapport à la proportion des usagers accidentés.
Ils ne représentent que 8, 5% des usagers.

21 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

— La sous-base VEHICULES :

F IGURE 4.7 – Proportion de valeurs manquantes par variable de la sous-base VEHICULES

— La sous-base CARACTERISTIQUES :

F IGURE 4.8 – Proportion de valeurs manquantes par variable de la sous-base CARACTERISTIQUES

22 Bureau d’étude 2017 - 2018


4.2. LA BASE DE DONNÉES INITIALE

— La sous-base LIEUX :

F IGURE 4.9 – Proportion de valeurs manquantes par variable de la sous-base LIEUX

Ici, le graphique de droite est manquant, car le logiciel R n’est pas en mesure d’afficher un nombre
trop conséquent de variables.

23 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

4.3 La nouvelle base de données


4.3.1 Mise en perspective
Notre objectif principal dans cette étude est d’expliquer la sinistralité automobile. Il est donc im-
portant de tenir compte de cela lors du traitement de notre base initiale. Les piétons ne représentent
que 8, 5% des usagers de notre jeu de données et sont difficiles à garder pour notre étude puisqu’ils
engendrent beaucoup de valeurs manquantes dans les autres variables. Nous décidons donc de nous
concentrer uniquement sur la sinistralité des usagers présents dans un véhicule, plus particulière-
ment, les usagers supposés responsables de l’accident identifiés par "A01" dans la variable Num_veh
de la base USAGERS. Pour garder de l’information relative aux piétons et aux vehicules non respon-
sables de l’accident, nous avons créé des variables qui indiquent le nombre de véhicules impliqués,
et le nombre d’usagers impliqués dans l’accident.

4.3.2 Création
Rappelons que dans bon nombre d’études statistiques, il est courant de voir les données man-
quantes d’une variable remplacées par une moyenne lorsqu’elle est quantitative et par le mode de
celle-ci lorsqu’elle est qualitative. Le logiciel R, par exemple, dans la méthode d’analyse des compo-
santes principales, adopte cette méthodologie lorsqu’elle observe des données manquantes dans un
jeu de données. Cette méthode d’imputation par la moyenne ou le mode, ou encore le fait de rem-
placer des valeurs manquantes par des zéros, est susceptible d’altérer l’information contenue dans la
base de données. En effet, la corrélation entre les variables peut être modifiée.
Ainsi, il ne nous semblait pas pertinent d’utiliser cette méthode d’imputation dans notre étude.
Le retraitement des variables contenant des valeurs manquantes sera explicité dans la partie "Gestion
des valeurs manquantes".
D’autre part, pour les variables ayant trop de modalités, nous avons trouvé judicieux de les re-
grouper en classes pour faciliter la compilation des algorithmes ainsi que l’interprétation de ceux-ci.
Nous avons aussi rassemblé en une seule variable, des variables ayant des informations complémen-
taires comme la variable moment_accident, qui a été créée à partir des variables jour, mois, année
et heure.
De plus, notre base de données, malgré le fait qu’elle nous permette de décrire plus ou moins
précisément un accident, peut être enrichie par des données externes. Il est en effet possible à partir
des codes département et commune donnés dans la base de données, de reconstituer le code INSEE,
qui va ensuite nous permettre de rajouter des variables telles que la population, la superficie, le nom
de commune du lieu d’accident...
Pour finir, selon l’utilisation de la base de données, nous avons supprimé certaines variables.

4.3.2.1 Modification de la sous-base USAGERS

Parmi les 8 variables de la sous-base USAGERS, 5 sont qualitatives et 3 sont quantitatives.

Variables qualitatives :
— grav : Même variable que dans la base initiale (4 modalités)
— sexe : Même variable que dans la base initiale (2 modalités)
— trajet : Même variable que dans la base initiale (6 modalités)
— secu : Passage de 25 à 3 modalités
— condu_seul : Variable créée indiquant si le conducteur était seul au moment de l’accident (2
modalités)

24 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

Variables quantitatives :
— age : Création de classes d’âge (12 modalités)
— nb_pers : Variable créée recensant le nombre de victimes par accident (62 modalités)
— taux_secu : Variable créée représentant le score de sécurité de l’usager entre 0 et 1 (132 moda-
lités)

F IGURE 4.10 – Aperçu de la nouvelle sous-base USAGERS

4.3.2.2 Modification de la sous-base VEHICULES

Parmi les 5 variables de la sous-base VEHICULE, 4 sont qualitatives et 1 est quantitative.

Variables qualitatives :
— catv : Passage de 33 à 4 modalités
— choc : Passage de 10 à 3 modalités
— manv : Passage de 25 à 5 modalités
— obstacle : Passage de 17 à 6 modalités

Variable quantitative :
— nb_veh : Variable créée recensant le nombre de véhicules en collision (28 modalités)

F IGURE 4.11 – Aperçu de la nouvelle sous-base VEHICULES

25 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

4.3.2.3 Modification de la sous-base LIEUX

Les 7 variables de la sous-base LIEUX sont des variables qualitatives

Variables qualitatives :
— catr : Même variable que dans la base initiale (7 modalités)
— circ : Même variable que dans la base initiale (5 modalités)
— vosp : Passage de 4 à 2 modalités
— prof : Passage de 5 à 3 modalités
— plan : Même variable que dans la base initiale (5 modalités)
— surf : Passage de 10 à 6 modalités
— situ : Passage de 6 à 3 modalités

F IGURE 4.12 – Aperçu de la nouvelle sous-base LIEUX

4.3.2.4 Modification de la sous-base CARACTERISTIQUES

Parmi les 20 variables de la sous-base CARACTERISTIQUES, 15 sont qualitatives et 5 sont quanti-


tatives.

Variables qualitatives :
— lum : Même variable que dans la base initiale (5 modalités)
— agg : Même variable que dans la base initiale (2 modalités)
— int : Passage de 10 à 6 modalités
— atm : Passage de 10 à 5 modalités
— col : Passage de 8 à 3 modalités
— com : Même variable que dans la base initiale (925 numéros de communes concernées)
— dep : Même variable que dans la base initiale (101 modalités)
— moment_accident : Variable créée recensant la date et l’heure de l’accident (variable date)
— nom_commune : Variable créée indiquant le nom de la commune où s’est déroulé l’accident
(27885 communes concernées)
— department_name : Variable créée indiquant le nom du département où s’est déroulé l’acci-
dent (101 modalités)
— region_name : Variable créée indiquant le nom de régions où s’est déroulé l’accident (18 mo-
dalités)

26 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— jour : Variable créée indiquant le jour de la semaine de l’accident (7 modalités)


— mois : Même variable que dans la base initiale (12 modalités renommées)
— latitude : Variable créée indiquant la latitude de la commune où s’est produit l’accident (713
valeurs)
— longitude : Variable créée indiquant la longitude de la commune où s’est produit l’accident
(987 valeurs)

Variable quantitative :
— wsemaine : Variable créée indiquant si l’accident a eu lieu en semaine ou durant le week-end
(2 modalités)
— chase : Variable créée indiquant si l’accident est arrivé un week-end d’été (2 modalités)
— heure : Variable créée indiquant à quelle période de la journée l’accident s’est produit (4 mo-
dalités)
— superficie : Variable créée indiquant la superficie de la commune où l’accident s’est produit
( 5096 valeurs uniques)
— population : Variable créée indiquant la démographie de la commune où s’est produit l’acci-
dent (520 valeurs)

Pour rajouter des informations concernant la commune où s’est produit l’accident, nous avons
eu recours à des bases de données externes supplémentaires. Ainsi nous avons pu créer les variables
nom_commune, department_name, latitude, longitude, region_name, superficie, population, la-
titude, longitude de la sous-base CARACTERISTIQUES.

F IGURE 4.13 – Aperçu de la nouvelle sous-base CARACTERISTIQUES

27 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

4.3.3 Gestion des valeurs manquantes


Comme dit précédemment, même après modification des quatre sous-bases, nos données contiennent
tout de même des valeurs manquantes. Celles-ci sont néfastes au bon fonctionnement des algo-
rithmes de prédiction, puisque certains algorithmes ne peuvent pas être compilés en leur présence.
Pour y remédier, nous pouvons appliquer deux méthodes.
Une première méthode consiste à enlever toutes les lignes présentant au moins une valeur man-
quante.
Une deuxième qui permet d’imputer les données manquantes de manière à garder inchangée la
structure statistique de la base de données.

— La méthode de suppression des données manquantes


Elle est relativement simple et consiste à parcourir chaque ligne du tableau de données. Si une va-
leur est manquante, la ligne entière est alors supprimée. Dans le cas contraire, la ligne est conservée.
Pour ce faire, nous avons utilisé la fonction na.omit(), disponible sur R-Studio sans package complé-
mentaire.
Avec cette méthode, il nous reste un jeu de données comportant 809 708 lignes sur les 839 985
lignes initiales, ce qui représente 82% de lignes conservées. Ce résultat est satisfaisant du fait du tra-
vail effectué en amont lors de la modification de la base de données.
Ainsi, notre base nettoyée comporte une quantité de données largement suffisante pour effectuer
une étude de prédiction. Cependant, il n’est pas impossible que la fonction ait enlevé involontaire-
ment une même catégorie de données, modifiant alors la structure statistique du jeu de données.
Cette hypothèse sera de toute façon contrôlée par nos tests d’erreurs.

— La méthode d’imputation des données manquantes


Cette méthode est un peu plus complexe à mettre en oeuvre que la précédente, du fait de sa
partie modélisation. Elle consiste à remplacer toutes les valeurs manquantes d’un jeu de données,
de façon à conserver la structure statistique de celle-ci. Contrairement à la méthode de suppression
des données manquantes, cette méthode garde toutes les données, donc présente moins de risque
de supprimer des lignes importantes. Cependant, cette méthode est extrêmement lourde à compiler
sur de grandes bases de données comme celle sur laquelle nous travaillons, mais peut être accélérée
au moyen de la programmation en parallèle.
Pour ce faire, elle dispose de deux méthodes selon la structure de répartition des données man-
quantes :
— lorsque les données sont manquantes de façon aléatoire.
— lorsque les données manquantes sont manquantes selon une certaine structure.
Les graphes de répartition des valeurs manquantes présentés un peu plus haut ne montrent pas
spécialement de structure dans la répartition des données manquantes, mis à part les données liées
aux piétons qui sont manquantes pour les usagers automobiles. Il est généralement impossible de
savoir pourquoi les données sont manquantes dans la plupart des observations.
Deux packages disponibles sous R-Studio permettent de réaliser les imputations de données man-
quantes dans ce cas, il s’agit des packages MissForest et Mice. Néanmoins, nous n’utiliserons pas ces
packages ici.

28 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

4.3.4 Visualisation des données


Avant la mise en place de modèles de prédiction, il nous est possible de tirer des informations
de notre jeu de données à partir de représentations graphiques. En effet, la visualisation est une des
méthodes couramment utilisées en analyse de données afin de communiquer de manière visuelle et
efficace les informations contenues dans un jeu de données. Pour cela, les graphiques doivent :
— montrer les données, tels qu’elles sont sans les déformer
— inciter le spectateur à réfléchir sur la substance des données
— encourager la comparaison visuelle des données
Ainsi grâce à la visualisation, il sera possible de faire "parler" des données qui ne seront pas utiles
dans la mise en place de nos modèles.
— Usagers

F IGURE 4.14 – Répartition des accidents par type d’usagers

Nous utilisons un graphique en barres pour montrer la répartition des accidents par type d’usa-
gers. Les usagers les plus accidentés sont les conducteurs. Ce résultat n’est pas surprenant, dans le
sens que nous étudions la sinistralité automobile. Cependant, la comparaison entre la proportion de
blessés légers et d’indemnes chez les conducteurs et chez les passagers nous permet d’observer une
différence entre les modalités de ces deux classes : chez les conducteurs, la classe la plus représentée
est la classe des indemnes tandis que chez les passagers et piétons, ce sont les blessés légers. De plus,
chez les piétons, nous pouvons remarquer une très faible proportion d’indemnes, il s’agit de la classe
la moins représentée.

29 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— Age

F IGURE 4.15 – Répartition des accidents par âge

La classe d’âge la plus accidentée est la classe 20-40 ans, avec un fort taux de mortalité autour de
30 ans. Ce résultat peut être mis en comparaison avec le taux de mortalité en France. En effet, la mor-
talité routière est une des causes importantes de mortalité en France, avec 0.5% de la mortalité due à
des accidents de la route. De plus, le risque de mortalité général augmente de manière exponentielle
à partir de 30 ans, contrairement à la mortalité routière qui baisse après cet âge.
— Sexe

F IGURE 4.16 – Répartition des accidents par genre

Le nombre de femmes accidentées est de moitié celui des hommes. Le nombre de blessés légers
chez les femmes (125 757), est également de moitié celui des hommes (267 912). De plus, la classe la
plus représentée est la classe des indemnes chez les hommes, alors que chez les femmes, ce sont les
blessé légers.

30 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— Catégorie de véhicule

F IGURE 4.17 – Répartition des accidents par catégories de véhicules

Nous remarquons que les véhicules à deux roues et les véhicules légers sont les plus accidentés.
— Manoeuvre avant accident

F IGURE 4.18 – Les manoeuvres principales des conducteurs avant l’accident

Nous pouvons constater que le nombre d’accidents à l’arrêt (hors stationnement) est plus élevé
que lorsque les conducteur est déporté à droite.

31 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— Catégorie de la route

F IGURE 4.19 – Répartition des accidents par catégorie de routes

La plupart des accidents ont lieu sur les voies communales et les routes départementales.
— Surfaces

F IGURE 4.20 – Etat de la surface lors de l’accident

la plupart des accidents ont lieu sur une surface normale.

32 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— Infrastructures

F IGURE 4.21 – Les types d’infrastructures sur le lieu de l’accident

Les accidents ont le plus souvent lieu au niveau des carrefours aménagés et des bretelles d’échan-
geurs. La sécurité au niveau de ces zones peut être améliorée.
— Météo

F IGURE 4.22 – Les conditions météorologiques lors de l’accident

Cette carte à cases, encore appelée treemap, nous montre que la plupart des accidents ont lieu
en temps normal.

33 Bureau d’étude 2017 - 2018


4.3. LA NOUVELLE BASE DE DONNÉES

— Heure

F IGURE 4.23 – L’heure des accidents

Les accidents surviennent en grande partie l’après-midi, plus particulièrement aux heures d’af-
fluence.
Remarque : Il est important de faire attention quant à l’interprétation de ces graphiques et la
déduction d’une quelconque influence de variables sur la sinistralité automobile. Ces analyses des-
criptives sont effectuées sur l’ensemble de notre jeu de données et ne le sont qu’à titre illustratif.
Ainsi le fait que la plupart des accidents aient lieu lors de conditions météorologiques normales ou
encore que les accidents aient lieu en fin d’après-midi ne permettent pas de déduire l’influence de
ces variables sur la sinistralité automobile. Nous savons en effet que le nombre de voitures circulant
aux heures de pointes est nettement plus élevé que celles circulant aux heures creuses. Il faut donc
prendre en compte cet effet "échelle" si l’on veut pouvoir déduire un lien entre la sinistralité automo-
bile et l’heure. De même que la météo, si la plupart des véhicules circulent en temps "normal", il est
alors évident que le nombre d’accidents sous ce temps soit plus élevé que lorsque nous sommes en
temps de pluie forte ou de grêle.
Dans la suite de cette étude, La mise en place des algorithmes de prédiction nous permettrons de
déduire des variables influençant sur la sinistralité automobile.

34 Bureau d’étude 2017 - 2018


Chapitre 5

Les outils Informatiques utilisés

Dans cette partie, nous présentons les différents packages utilisés sous R qui nous ont servi lors
de l’implémentation des modèles.

5.1 Le package H2O


H2O est une plate-forme d’apprentissage automatique et d’analyse prédictive disponible en libre
accès, qui permet de construire des modèles d’apprentissage statistique sur des données volumi-
neuses distribuées sur un système appelé "cluster" et exécutable à partir de R-Studio. Elle facilite
aussi la production de ces modèles dans un environnement d’entreprise.
Un cluster est un groupe de serveurs indépendants fonctionnant comme un seul et même sys-
tème afin d’augmenter la puissance de calcul de ce système. Sur R-Studio, H2O propose une riche
bibliothèque d’algorithmes d’apprentissage supervisé et non supervisé comme la régression linéaire,
la régression logistique, l’analyse des composantes principales, la méthode de classification k-means,
les forêts aléatoires,...
La mise en place des algorithmes est assez simple, mais pour certains algorithmes tels que les
réseaux de neurones, le nombre de paramètres conséquents peut vite rendre la mise en place du
modèle plus complexe. Il faut donc consacrer du temps à la calibration des paramètres des modèles.
Ce package possède toutefois des méthodes de recherche automatique de paramètres optimaux.

5.2 TensorFlow & Keras


5.2.1 TensorFlow
TensorFlow est lui aussi une bibliothèque d’apprentissage automatique disponible en libre accès.
Ce package a été développé par des chercheurs et des ingénieurs de l’équipe Google Brain en 2011,
dans le but de conduire des recherches sur les réseaux neuronaux, plus précisément sur le dévelop-
pement de machines dites "intelligentes". Le système conçu est assez général pour être applicable
dans de nombreux autres domaines, tels que la reconnaissance d’images ou de voix. TensorFlow est
devenu en un temps record, l’une des bibliothèques de référence pour la mise en place d’algorithmes
d’apprentissage profond encore appelé "Deep Learning". Il a par exemple, été utilisé par le pentagone
afin d’analyser des images de drones.

35 Bureau d’étude 2017 - 2018


5.2. TENSORFLOW & KERAS

5.2.2 Keras
Sur R-Studio, c’est la librairie Keras, qui sert de support a l’implémentation de TensorFlow. Il
s’agit d’une interface facilitant l’implémentation modulaire de réseaux neuronaux complexes. Dé-
veloppée dans l’idée de permettre une expérimentation rapide de modèles, cette librairie supporte
plusieurs bibliothèques d’apprentissage, dont notamment TensorFlow.
Il existe deux méthodes d’implémentation de modèles sous Keras :
— Le modèle sequentiel :
La création d’un réseau neuronal est assez facile dans cette méthode. En effet, un réseau sous ce
modèle est simplement une association de différentes "boites" contenant les paramètres de celui-ci.
C’est celui que nous utiliserons dans notre étude.
— Le modèle de l’API fonctionnelle :
Il permet de construire des modèles plus complexes tels que des modèles à sorties multiples,
des graphes acycliques, ou des modèles à couches partagées. L’implémentation de TensorFlow sous
Keras peut être accélérée si nous possédons une carte graphique assez puissante du type Nvidia.
De même sous Keras, il est possible d’améliorer les performances en utilisant le moteur de Google
(le Google Cloud Machine Learning Engine), qui permet la maximisation du pouvoir prédictif d’un
réseau. Nous ne l’utiliserons cependant pas dans ce projet.

36 Bureau d’étude 2017 - 2018


Chapitre 6

La mise en place des modèles

6.1 Intérêt de la modélisation


Notre variable d’intérêt grav à prédire, est une variable à quatre modalités, avec une classe mino-
ritaire : la classe de tués. Les premiers modèles que nous avons mis en place et que nous ne présen-
terons pas dans ce rapport, nous donnaient un taux d’erreur global de l’ordre de 30%, mais avec un
fort taux d’erreur sur les classes minoritaires, soit 99% d’erreur sur la classe des tués, 50% sur la classe
des blessés légers et 45% sur la classe des blessés hospitalisés. La précision est excellente sur la classe
majoritaire (la classe des indemnes), soit environ 50% des observations avec 95% de bonnes prédic-
tions. Aucun des algorithmes que nous avons mis en place dans cette section n’améliore ce résultat.
Nous étions donc face à un problème lié à la détection d’évènements rares, un problème classique en
prédiction qui intervient généralement lorsque la modalité d’intérêt est peu représentée. Nos tenta-
tives de rééquilibrage de la base de données n’ont donc pas permis d’améliorer ces résultats. Ainsi,
nous avons décidé de recoder notre variable cible en une variable binaire :
— indemne, qui regroupe les indemnes, avec la modalité "0"
— accidenté, qui regroupe les blessés légers, hospitalisés, et les décédés, avec la modalité "1"
Nous obtenons ainsi une base plus équilibrée.

F IGURE 6.1 – Répartition de la gravité avec 4 F IGURE 6.2 – Répartition de la gravité avec 2
modalités modalités

37 Bureau d’étude 2017 - 2018


6.1. INTÉRÊT DE LA MODÉLISATION

Cependant, il convient de s’interroger de l’intérêt de ce recodage quant à l’objectif final recherché,


et par cette occasion, de l’intérêt même d’un tel modèle prédictif.
Du point de vue assurantiel, si l’objectif de notre modèle est de servir de support à la tarification
de contrats automobiles, la portée de notre modèle se voit réduite. En effet, les usagers accidentés
qui vont impacter le plus le portefeuille d’un assureur sont les blessés légers et les blessés hospitalisés
dont le coût d’indemnisation est élevé, que ce soit sous la forme de dommages corporels ou matériels.
Selon la Fédération Française de l’Assurance, le coût moyen des accidents corporels est en aug-
mentation de 4,8% par an en moyenne depuis 2010. Cela est également le cas pour le coût des acci-
dents matériels (+1,4%), relevé par les pièces de rechange de plus en plus connectées et coûteuses.

F IGURE 6.3 – Coût de la sinistralité automobile de 2010 à 2016

Notre modèle va quant à lui trouver son intérêt du côté de la prévention. En effet, même si l’ac-
tivité d’assurance s’articule autour de la gestion des risques, la prévention est un levier sur lequel les
assureurs peuvent et doivent s’appuyer afin de non seulement améliorer la qualité de leurs services,
mais aussi de conférer des gains à l’ensemble de la collectivité (assurés, pouvoirs publics).
Un autre détail à prendre en compte était que notre base de données contient des variables
connues avant l’accident et des variables connues seulement après l’accident. Quel est dès lors l’in-
térêt d’un modèle prédictif de la sinistralité prenant en compte des informations disponibles après
l’accident ?
L’intérêt purement prédictif d’un tel modèle est limité dans ce cas, mais réside plutôt dans la capa-
cité du modèle à dégager les variables explicatives de la gravité et les interactions entre ces dernières,
et par ailleurs à analyser la fluctuation des résultats prédictifs vis-à-vis de l’absence ou de la présence
de variables connues a posteriori de l’accident.

38 Bureau d’étude 2017 - 2018


6.2. RECHERCHE D’INFORMATIONS REDONDANTES

6.2 Recherche d’informations redondantes


Notre jeu de données contient beaucoup de variables et il est possible que certaines d’entre elles
ne soient pas utiles pour notre problème de prédiction. L’analyse de la corrélation par le coefficient de
corrélation linéaire, peut nous donner une indication quant à l’existence de relations linéaires entre
certaines variables, et donc à l’existence d’informations redondantes. Mais cette statistique peut se
révéler insuffisante car deux variables non linéairement corrélées peuvent l’être d’une autre façon,
par exemple une relation exponentielle ou polynomiale entre deux variables. La détection de ce type
de relation est possible en utilisant la théorie de l’information de Shannon, dans laquelle les variables
contenues dans un jeu de données constituent de l’information mesurée par l’entropie.
Dans la suite, nous n’utiliserons que l’analyse de la corrélation entre variables, le volume de don-
nées que nous avons ne permettant pas le calcul de l’entropie. Les algorithmes que nous mettrons en
place par la suite ont leur propre mesure du degré d’information donnée par les variables.
Par ailleurs, notre jeu de données étant classé en quatre bases donnant une information précise
(USAGERS, CARACTERISTIQUES, LIEUX, VEHICULES), nous décidons d’effectuer une analyse par
sous-bases de données, les données catégorielles étant transformées en variables binaires.
— Base USAGERS

F IGURE 6.4 – Analyse de la corrélation sur la base USAGERS

Nous n’observons pas de fortes relations entre les différentes variables de notre jeu de données,
sauf entre les variables décrivant le même élément comme la variable du taux de sécurité taux_secu
créée qui est corrélée à la variable secu puisqu’elle a été créée à partir de cette dernière, ou encore le
nombre de personnes, qui est lié au nombre d’indemnes. Par la suite, nous choisirons les variables en
fonction du degré d’information qui nous intéresse.

39 Bureau d’étude 2017 - 2018


6.2. RECHERCHE D’INFORMATIONS REDONDANTES

— Base VEHICULES

F IGURE 6.5 – Analyse de la corrélation de la base VEHICULES

Nous pouvons ici observer une forte corrélation entre le nombre de véhicules et "obstacle 2" qui
indique une collision avec un véhicule lors de l’accident, "obstacle 1" indiquant une collision avec un
piéton, ainsi que "obstacle 4" indiquant un obstacle fixe, ce qui semble tout à fait normal.
De même, comme précédemment, nous avons les modalités de variables corrélées entre elles.
Nous avons là rien de surprenant.

40 Bureau d’étude 2017 - 2018


6.2. RECHERCHE D’INFORMATIONS REDONDANTES

— Base CARACTERISTIQUES

F IGURE 6.6 – Analyse de la corrélation base CARACTERISTIQUES

Là aussi, nous n’observons pas de fortes corrélations entre variables, sauf entre modalités de va-
riables ainsi qu’entre les nouvelles variables et les variables qui ont servi à leur création.
Nous pouvons de plus, noter que ce genre de graphes devient illisible lorsque le nombre de va-
riables est élevé. Nous le garderons alors dans un but purement illustratif.

41 Bureau d’étude 2017 - 2018


6.2. RECHERCHE D’INFORMATIONS REDONDANTES

— Base LIEUX

F IGURE 6.7 – Analyse de la corrélation base LIEUX

Dans cette sous-base, nous observons une certaine corrélation entre le régime de circulation
(circ) et la catégorie de route (catr) autour de -23%, ce qui n’est toutefois pas très fort. De même
entre le profil en long de la route (prof) et le tracé en plan (plan) qui décrit la sinuosité de la route,
avec une corrélation autour de 21%.

42 Bureau d’étude 2017 - 2018


6.3. LES MÉTRIQUES UTILISÉES

6.3 Les métriques utilisées


Pour mesurer la qualité de nos modèles, nous avons utilisé plusieurs indicateurs de "performance"
fréquemment utilisés pour ce type de problème, et adaptés à notre étude.
Notons qu’utiliser une seule métrique n’est pas pertinent car chaque métrique évalue un type de
caractéristiques particulier. C’est donc en regardant un ensemble complémentaire de métriques bien
choisies que nous pourrons évaluer la qualité de nos modèles.
Dans cette partie, nous utiliserons la notion de vrais et faux positifs, ainsi que de vrais et faux
négatifs. Nous pouvons les définir de la manière suivante :
— les vrais positifs (TP) : ce sont les valeurs positives correctement prédites. Cela signifie que la
valeur de la classe réelle est "1" et celle de la classe prédite est également "1".
— les faux positifs (FP) : ce sont les valeurs positives incorrectement prédites. Cela signifie que
la valeur de la classe réelle est "0" et celle de la classe prédite est "1".
— les vrais négatifs (TN) : ce sont les valeurs négatives correctement prédites. Cela signifie que
la valeur de la classe réelle est "0" et celle de la classe prédite est également "0".
— les faux négatifs (FN) : ce sont les valeurs négatives incorrectement prédites. Cela signifie que
la valeur de la classe réelle est "1" et celle de la classe prédite est "0".

6.3.1 Exactitude (Accuracy)


L’Exactitude est la mesure de "performance" la plus intuitive. Il s’agit d’un rapport entre le nombre
d’observations correctement prédites (les vrais positifs et les vrais négatifs) et le nombre total d’ob-
servations.

TP + TN
E xact i t ud e =
TP + FP + T N + FN

6.3.2 Précision (Precision)


La Précision est définie comme le nombre de résultats positifs corrects (les vrais positifs) divisé
par le nombre de tous les résultats positifs renvoyés par le modèle de prédiction (les vrais positifs et
les faux positifs).

TP
P r éci si on =
TP + FP

Nous n’avons pas utilisé cette métrique pour mesurer la qualité de nos modèles. Cette métrique
sert à comprendre comment est construit le Score F1 (que nous définirons un peu plus loin).

6.3.3 Rappel (Recall)


Le Rappel est défini comme étant le nombre de résultats positifs corrects (les vrais positifs) di-
visé par le nombre de résultats positifs corrects ainsi que tous les échantillons qui auraient dû être
identifiés comme positifs par le modèle de prédiction (les vrais positifs et les faux négatifs).

TP
Rappel =
TP + FN

43 Bureau d’étude 2017 - 2018


6.3. LES MÉTRIQUES UTILISÉES

6.3.4 Score F1
Le Score F1 (aussi appelé F-score), utilise les notions de précision et de rappel d’un test définies
ci-dessus.
Il s’agit de la moyenne harmonique de la précision et du rappel, pour laquelle un Score F1 atteint
sa meilleure valeur en 1 (précision et rappel parfait) et sa moins bonne valeur en 0.

2 r appel × pr éd i c t i on
Scor e F 1 = 1 1
= 2×
r appel + pr éd i ct i on
r appel + pr éd i c t i on

Notons que le Score F1 ne tient pas compte des vrais négatifs, tout comme la précision et le rappel.
Nous voyons ainsi la limite de ces trois classificateurs.
D’autres classificateurs en tiennent compte, comme par exemple le coefficient de corrélation de
Matthews.

6.3.5 AUC (Area Under Curve)


Tout d’abord, définissons la courbe ROC, étroitement liée avec l’AUC.
Lorsque la classification est binaire ("0" ou "1"), le problème se réduit à l’obtention d’un score
obtenu par le modèle prédictif mesurant la probabilité d’une observation d’appartenir à l’un des deux
groupes. La question est alors de définir un seuil permettant de répartir les observations dans l’un de
ces deux groupes : si l’observation obtient un score supérieur au seuil, elle sera classée dans le groupe
"1", et dans le groupe "0" sinon.
Lorsque les deux groupes sont globalement équiprobables, il est légitime d’affecter une observa-
tion au groupe "1" si le modèle lui attribue un score supérieur à 0.5 et au groupe "0" sinon. Cependant,
dans certains domaines comme en assurance automobile, la population des individus ayant subi un
sinistre grave est peu représentée par rapport au nombre d’accidentés total, et un modèle construit
par apprentissage n’affectera jamais une probabilité d’avoir un sinistre grave supérieur à 0.5. En re-
vanche, si par expérience, la probabilité d’avoir un sinistre grave est de 0.05, alors un individu pour
lequel le modèle prédit une probabilité de 0.1 pourra être jugé comme un individu à risque.
Ainsi, la courbe ROC sera d’autant plus efficiente que le seuil choisi est pertinent. Ce choix du
seuil influencera donc profondément les prédictions du modèle. Il se fait en fonction des prédictions
obtenues pour une base d’apprentissage d’observations pour lesquels nous connaissons le groupe
d’appartenance.
Introduisons maintenant la notion de sensibilité et de spécificité :

— la sensibilité se définit comme le taux de vrais positifs

TP
Se =
TP + FN

— la spécificité se définit comme le taux de vrais négatifs

TN
Sp =
T N + FP

La courbe ROC représente l’évolution de la sensibilité en fonction la spécificité quand nous fai-
sons varier le seuil. Pour évaluer la qualité d’un modèle de prédiction binaire, l’AUC est bon un critère.
Elle est définie comme étant l’aire sous la courbe ROC. Une AUC égale à 1 signifie que le modèle pré-
dictif est parfait, c’est-à-dire qu’il n’y a que des vrais positifs et vrais négatifs, en revanche une AUC
égale à 0.5 signifie que l’affection des classes est faite aléatoirement.

44 Bureau d’étude 2017 - 2018


6.4. LA THÉORIE DES MODÈLES DE PRÉDICTIONS

6.4 La théorie des modèles de prédictions


6.4.1 Modèles linéaires généralisés (GLM)
Les modèles linéaires généralisés ont été présentés pour la première fois en 1972, par Nelder et
Wedderburn. Ils permettent d’expliquer ou d’étudier la liaison entre une variable à expliquer Y et
d’autres variables explicatives (X 1 , ..., X p ).
Ils regroupent le modèle linéaire général, le modèle log-linéaire, la régression logistique et la ré-
gression de Poisson.
Ces modèles linéaires généralisés sont principalement caractérisés par trois composantes :
— la composante aléatoire, qui identifie la loi de probabilités de la variable à expliquer. Nous
supposons que l’échantillon statistique est constitué de n variables aléatoires indépendantes
(Y1 , ..., Yn ), n ∈ N, admettant des distributions issues d’une structure exponentielle, c’est-à-
dire que la loi de probabilité de la composante aléatoire appartient à la famille exponentielle.
Les lois classiques utilisées en actuariat sont, ∀i ∈ [1, ..., n], avec p le nombre de variables
explicatives et n le nombre d’observations :
• la loi Normale : Yi ∼ N (µ(x i ,1 , ..., x i ,p ), σ2 )
• la loi de Bernoulli lorsque Yi ∈ {0, 1} : Yi ∼ B(π(x i ,1 , ..., x i ,p ))
• la loi Gamma lorsque Yi ∈ R+ : Yi ∼ G (α, β(x i ,1 , ..., x i ,p ))
• la loi de Poisson lorsque Yi ∈ N : Yi ∼ P (λ(x i ,1 , ..., x i ,p ))
— la composante déterministe, exprimée sous la forme d’une combinaison linéaire β0 +
β1 X 1 + ... + βp X p . Ce vecteur à n composantes est appelé le "prédicteur" linéaire.

— le lien g, qui fait office de troisième composante, exprime une relation fonctionnelle entre
la composante aléatoire et le prédicteur linéaire. Il spécifie comment l’espérance de Y est liée
au prédicteur linéaire, construit à partir des variables explicatives.

g (E(Yi )) = β0 + β1 x i ,1 + ... + βp x i ,p

Les liens choisis par défaut par le logiciel R sont :


• pour le modèle GLM Gaussien : g (x) = x.
Nous avons alors : Yi ∼ N (µ(x i ,1 , ..., x i ,p ), σ2 ) avec :

g (E(Yi )) = E(Yi )
= µ(x i ,1 , ..., x i ,n )
= β0 + β1 x i ,1 + ... + βp x i ,p
2
Ainsi, Yi ∼ N (β0 + β1 x i ,1 + ... + βp x i ,p , σ ).
x
• pour le modèle GLM Bernoulli : g (x) = l og i t (x) = ln ( 1−x ).
Nous avons alors Yi ∼ B(π(x i ,1 , ..., x i ,p )) avec :

g (E(Yi )) = l og i t (E(Yi ))
π(x i ,1 ,...,x i ,p )
= ln ( 1−π(xi ,1 ,...,xi ,p ) )
= β0 + β1 x i ,1 + ... + βp x i ,p
β0 +β1 x i ,1 +...+βp x i ,p
Nous obtenons donc : P(Yi = 1) = exp( 1+exp(β0 +β1 xi ,1 +...+βp xi ,p ) ).
β0 +β1 x i ,1 +...+βp x i ,p
Finalement, Yi ∼ B(exp( 1+exp(β0 +β1 xi ,1 +...+βp xi ,p ) )).

45 Bureau d’étude 2017 - 2018


6.4. LA THÉORIE DES MODÈLES DE PRÉDICTIONS

• pour le modèle GLM Gamma : par défaut, R-Studio utilise le lien g (x) = x1 , mais en tarifi-
cation, le lien classique est g (x) = ln (x).
Nous avons alors Yi ∼ G (α, β(x i ,1 , ..., x i ,p )) avec :

g (E(Yi )) = ln (αβ(x i ,1 , ..., x i ,p ))


= β0 + β1 x i ,1 + ... + βp x i ,p .
exp(β0 +β1 x i ,1 +...+βp x i ,p )
Ainsi, Yi ∼ G (α, α ).
• pour le modèle GLM Poisson : g (x) = ln (x).
Nous avons alors Yi ∼ P (λ(x i ,1 , ..., x i ,p )) avec :

g (E(Yi )) = ln (λ(x i ,1 , ..., x i ,p ))


= β0 + β1 x i ,1 + ... + βp x i ,p
Ainsi Yi ∼ P (exp(β0 + β1 x i ,1 + ... + βp x i ,p )).

6.4.2 Forêts aléatoires


6.4.2.1 Les arbres de décisions

F IGURE 6.8 – Exemple simpliste d’arbre de décision : Trouver la maladie en fonction des symptômes

Cette méthode fut introduite par Leo Breinam en 1984.


L’apprentissage par arbre de décision est une méthode classique en apprentissage automatique.
Son but est de créer un modèle qui prédit la valeur d’une variable cible depuis la valeur de plusieurs
variables d’entrée.
Une des variables d’entrée est sélectionnée à chaque nœud intérieur de l’arbre selon une méthode
qui dépend de l’algorithme. Chaque branche vers un nœud-fils correspond à un ensemble de valeurs
d’une variable d’entrée, de manière à ce que l’ensemble des branches vers les nœuds-fils couvrent
toutes les valeurs possibles de la variable d’entrée.
Il existe deux principaux types d’arbre de décision en fouille de données :
— Les arbres de classification (Classification Tree), qui permettent de prédire à quelle classe
la variable-cible appartient. Dans ce cas, la prédiction est une étiquette de classe.
— Les arbres de régression (Regression Tree), qui permettent de prédire une quantité réelle
(par exemple, le prix d’une maison ou la durée de séjour d’un patient dans un hôpital). Dans
ce cas, la prédiction est une valeur numérique.

46 Bureau d’étude 2017 - 2018


6.4. LA THÉORIE DES MODÈLES DE PRÉDICTIONS

6.4.2.2 La théorie du modèle

Les forêts aléatoires peuvent être considérées comme une agrégation d’arbres de décision. Cette
méthode fut introduite par Leo Breinman en 2001, elle se base sur la technique générale du Bagging.
Le Bagging consiste à choisir K sous-ensembles de la base d’apprentissage avec remise, et à construire
un arbre de décision sur chacun d’entre eux. Lors de la prédiction, nous prendrons ainsi la moyenne
des prédictions retournées par chacun des K arbres.
Cependant, dans le Bagging, l’algorithme choisit à chaque noeud la variable qui effectue la meilleure
séparation selon le critère choisi, alors que les forêts aléatoires choisissent la meilleure variable parmi
une sélection aléatoire de q variables parmi les p variables initiales. C’est ce qu’on appelle le Boots-
p p
trapping. Le choix de q est généralement de p pour la classification, et de 3 (arrondis à l’entier
inférieur) pour la régression.
La méthode par forêts aléatoire consiste à faire tourner en parallèle un grand nombre d’arbres de
décisions construits aléatoirement. La construction aléatoires des arbres permet d’obtenir des arbres
décorrélés et donc une faible variance.

6.4.3 Modèle Gradient Boosting (GBM)


Comme les forêts aléatoires, le modèle Gradient boosting est aussi une méthode d’agrégation de
modèles. L’algorithme est un cas particulier du Boosting.
Dans le même esprit d’approximation adaptative, Friedman (2002) a proposé sous l’acronyme
MART (Multiple Additive Regression Trees) puis sous celui de GBM (Gradient Boosting Models), une
famille d’algorithmes basés sur une fonction perte supposée convexe et différentiable. Le principe de
base est de construire une séquence de modèles de sorte qu’à chaque étape, chaque modèle ajouté
à la combinaison apparaisse comme un pas vers une meilleure solution. L’objectif est de donner un
poids plus important aux individus pour lesquels la valeur a été mal prédite pour la construction du
modèle suivant. Le fait de corriger les poids au fur et à mesure permet de mieux estimer les valeurs
difficiles à prédire. La principale innovation est que le pas est franchi dans la direction du gradient
de la fonction perte, afin d’améliorer les propriétés de convergence. Une deuxième idée consiste à
approcher le gradient par un arbre de régression afin d’éviter un sur-apprentissage.
Pour résumer, l’algorithme du gradient boosting a besoin de trois éléments principaux :
— Une fonction de perte à optimiser qui doit être différentiable, et qui permet de résoudre
le problème
— Un apprenant faible pour effectuer des prédictions
— Un modèle additif pour combiner nos apprenants faibles afin de minimiser notre fonction
de perte
Choix de la fonction de perte :
— En classification nous utilisons généralement la perte exponentielle, mais dans un en-
vironnement instable nous pouvons préférer utiliser la fonction déviance binomiale ln(1 +
exp(−2y f )), beaucoup moins sensible aux variations de la base de données. Ce sont les deux
fonctions de perte à utiliser pour une classification binaire.
— En régression nous avons le choix entre la perte des moindres carrés ou la perte de norme
1.

47 Bureau d’étude 2017 - 2018


6.4. LA THÉORIE DES MODÈLES DE PRÉDICTIONS

6.4.4 Réseaux de neurones


Les premières réflexions sur les réseaux de neurones datent des années 1940 avec quelques noms
à retenir : Von Neumann, Turing, Wiener, Mac Culloch et Pitts.
— Réseaux neuronaux
Un réseau neuronal est l’association de neurones formels. Les principaux réseaux se distinguent
par leur architecture (nombre de couches,...), leur niveau de complexité (le nombre de neurones,
présence ou non de boucles de rétroaction dans le réseau), le type de neurones (leurs fonctions de
transition ou d’activation) et enfin l’objectif visé : apprentissage supervisé ou non, optimisation, sys-
tèmes dynamiques,...
— Le neurone formel
C’est en 1943 que Mac Culloch et Pitts proposent les premières notions de neurone formel.
Le neurone réel, ou biologique, est une cellule qui se caractérise de la manière suivante :
• des synapses : les points de connexion avec les autres neurones, fibres nerveuses ou mus-
culaires
• des dentrites ou entrées du neurones
• les axones, ou sorties du neurone vers d’autres neurones ou fibres musculaires
• le noyau qui active les sorties en fonction des stimulations en entrée
Son fonctionnement peut se résumer par :
• Une sommation pondérée des influx nerveux (inhibiteurs ou excitateurs) en provenance
des neurones auxquels il est relié, via les dendrites et les synapses.
• Une émission dans l’axone d’un influx si la sommation des entrées dépasse un seuil d’ac-
tivation.
En comparaison, le neurone formel de Mac Culloch et Pitts reproduit ce fonctionnement.
Pour une entrée x = (x 1 , ..., x n ) ∈ Rn , l’unité de poids synaptiques ω = (ω1 , ..., ωn ) ∈ Rn , et un seuil
d’activation θ, il calcule :
n
ωi x i
P
— la somme pondérée :
i =0
— la sortie : y(x) = φ(ω.x − θ) = 1{ω.x≥θ}
La fonction φ est appelé la fonction d’activation, ou fonction de réponse.

F IGURE 6.9 – Schéma explicatif du fonctionnement d’un neurone formel

Un tel neurone réalise donc une fonction de Rn dans {0, 1}.

48 Bureau d’étude 2017 - 2018


6.4. LA THÉORIE DES MODÈLES DE PRÉDICTIONS

Nous trouvons de nombreuses fonctions d’activation, différentes de la fonction d’activation de


Heaviside : φ(u) = 1{u≥0} .
— φ(u) = u, neurone linéaire ou de Widrow-Hoff
1
— φT (u) = 1+exp(− u , dite sigmoïde de température T, convergeant simplement vers φ0 (u) =
)T
1{u≥0} , quand T → 0

u
— φT (u) = 2φT (u) = tanh( 2T ), sigmoïde à valeurs dans ]−1 , 1[
— φT,a,b (u) = a + (b − a)φT (u), sigmoïde à valeurs dans ]a , b[
— φT (u), variable aléatoire de Bernoulli (neurone probabiliste) à valeurs dans {0, 1} telle que :

1
P[φT (u) = 1] =
1 + exp(− Tu )

Ces premiers travaux de Mac Culloch et Pitts ont donné naissance à l’école connexionniste. Ce
concept fut ensuite mis en réseau avec une couche d’entrée et une couche de sortie par Rosenblatt
(psychologue) en 1957 pour simuler le fonctionnement rétinien. C’est l’origine du perceptron.
— Le perceptron
Le perceptron peut être vu comme le type de réseau de neurones le plus simple. C’est un clas-
sifieur linéaire. Ainsi, la différence avec le modèle de neurone formel est que ce neurone peut « ap-
prendre ». Le perceptron va être capable de classer des entrées et décider si elles correspondent à un
côté ou bien à un autre. C’est la fonction d’activation qui distribue la réponse d’un côté ou de l’autre.
Dans sa version simplifiée, le perceptron est "simple" (mono-couche) et n’a qu’une seule sortie
à laquelle toutes les entrées sont connectées. Les entrées et la sortie sont booléennes. Plus générale-
ment, les entrées peuvent être des nombres réels.

F IGURE 6.10 – Schéma explicatif du fonctionnement d’un perceptron simple

Le perceptron multicouche est un type de réseau neuronal formel organisé en plusieurs couches
au sein desquelles une information circule de la couche d’entrée vers la couche de sortie uniquement.
Il s’agit donc d’un réseau à propagation directe. Chaque couche est constituée d’un nombre variable
de neurones, les neurones de la dernière couche (dite « de sortie ») étant les sorties du système global.

F IGURE 6.11 – Schéma explicatif du fonctionnement d’un perceptron monocouche (1 couche cachée)

49 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Les autres types de réseaux neuronaux


Il existe cependant d’autres types de réseaux neuronaux que nous n’utiliserons pas dans cette
étude, tels que les réseaux neuronaux convolutifs (CNN) et les réseaux neuronaux récurrents (RNN).
Les perceptrons multicouches, fonctionnent bien sur les données transactionnelles (tabulaires), tou-
tefois, lorsque l’on désire effectuer de la reconnaissance d’images, les CNN sont un excellent choix ;
ou encore avec des données séquentielles (telles que du texte, de l’audio, des séries chronologiques),
les RNN sont un bon choix.

6.5 Application à notre étude


6.5.1 Échantillonnage de la base de données
Nous disposons d’un historique de données de 809 209 observations sur la période 2005-2016, et
afin d’avoir une bonne évaluation de la qualité de nos modèles, nous décidons de la diviser en trois
parties :
— Une base d’apprentissage, qui correspond à 80% des observations de la période 2005-2015,
soit 601 754 observations, et qui servira à alimenter nos modèles.
— Une base de test, qui correspond à 20% des observations de la période 2005-2015, soit 150 437
observations et permettra de détecter du sur- ou sous-apprentissage par nos modèles.
— Une base de validation, qui correspond aux observations de l’année 2016, soit 57 018 obser-
vations, qui nous permettra de renforcer l’évaluation de nos modèles.
Nous n’utiliserons pas de validation croisée, qui est aussi une méthode d’estimation de fiabilité
d’un modèle fondée sur une technique d’échantillonnage.
Nous rappelons que cet échantillonnage fait suite à nos hypothèses de départ, qui sont :
— la sélection des conducteurs supposés responsables de l’accident
— la suppression des lignes comprenant des valeurs manquantes
— la suppression des variables aberrantes

6.5.2 Mise en forme des données


Comme évoqué précédemment, pour faciliter la compilation des algorithmes, il a été nécessaire
d’effectuer une mise en forme de nos données, qui consiste en :
— une normalisation des variables numériques pour éviter aux algorithmes d’avoir à traiter des
valeurs trop grandes, et donc leur faciliter le traitement des données. Nous utilisons une nor-
x i −mi n(x)
malisation par le min et le max, suivant la formule x i = max(x)−mi n(x) .

— un regroupement des modalités des variables qualitatives, qui a déjà été réalisé précédem-
ment lors de la création de la nouvelle base de données.

6.5.3 Paramétrage des modèles


6.5.3.1 Sous H2O

Le nombre de paramètres pour la mise en place d’un modèle est très large (plus de 15 paramètres),
même pour un modèle aussi simple que le modèle GLM. Dans la documentation des algorithmes, il
est même conseillé d’utiliser les paramètres par défaut des algorithmes qui, selon le problème auquel
nous faisons face, donnent des résultats satisfaisants.
Il existe des paramètres communs à tous les modèles dans H2O :
— Y : la variable à prédire, ici la variable grav
— X : les variables explicatives, c’est-à-dire toutes les autres variables

50 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— training_frame : la base d’apprentissage sur laquelle le modèle est appris.


— validation_frame : la base de validation utilisée pour évaluer la précision du modèle.
— seed : appelé graine de génération, il s’agit d’un nombre permettant d’obtenir la même généra-
tion aléatoire, et donc l’utilisation de mêmes nombres qui sont censés être aléatoires lorsque
le modèle est lancé plusieurs fois. Il va nous permettre de comparer les différents modèles
lorsque nous changeons les paramètres.

6.5.3.2 GLM

— family : binomial, la distribution de la loi utilisée dans le modèle


— link : logit, la fonction lien
— alpha : 0.5, le paramètre de pénalisation, permettant d’éviter le sur-apprentissage, et ainsi de
choisir le modèle de régression pénalisée : entre le LASSO, la regression ridge, et l’elastic net.
Ici, nous avons choisis l’elastic net.
— lambda : 2.022e-4, valeur par défaut, par une méthode heuristique décrite dans la documen-
tation, le paramètre de contrôle de la régularisation.
Remarque : Sous H2O, les paramètres de régularisation peuvent être optimisés avec une méthode
du type Grid Search ou lambda Search, qui consiste à entrer plusieurs valeurs de alpha et lambda et
la sélection par H2O du meilleur modèle.

6.5.3.3 Forêts aléatoires

— ntrees : 50, le nombre d’arbres créés par l’algorithme


— max_depth : 20, la profondeur maximale de chaque arbre
— mtries : 20, le nombre de variables utilisées pour créer chaque arbre

6.5.3.4 GBM

— ntrees : 50, nombre d’arbres créés par l’algorithme


— max_depth : 20, la profondeur maximale de chaque arbre
— distribution : binomial, la famille de lois de notre modèle
— min_depth : 5, profondeur minimale de l’arbre

6.5.3.5 Sous Keras

Sous le modèle séquentiel, il existe plusieurs types de couches dans un réseau neuronal, et chaque
couche du réseau est paramétrable. Nous avons mis en place un réseau neuronal à 4 couches, dont
une couche d’entrée, 2 couches cachées, et 1 couche de sortie. Nous avons ajouté des couches de
«dropout» qui permettent d’éviter le surapprentissage en ne prenant pas en compte une proportion
de la base d’apprentissage à chaque cycle d’entraînement du réseau. De plus, toujours dans l’optique
d’éviter le surapprentissage, il faut faire attention au nombre d’unités dans les couches cachées, qui
ne doit pas être trop élevé ni trop bas si nous ne voulons pas être non plus en sous-apprentissage.
Avant le paramétrage du réseau, nous allons demander à Keras d’utiliser la bibliothèque Tensor-
Flow grâce à la commande :
— use_condaenv("r-tensorflow",required=T)
Les paramètres communs à toutes les couches sont :
— units : le nombre d’unités dans chaque couche
— kernel_initializer : la méthode d’initialisation de la matrice des poids
— activation : la fonction d’activation
La couche d’entrée, contient juste les données d’entrées. Dans la première couche cachée nous
avons :

51 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— units : 16
— kernel_initializer : uniform
— activation : relu
— input_shape : ncol(x_train_tbl)), le nombre de colonnes de la base d’apprentissage
On ajoute ensuite une couche dropout :
— rate : 0.1, le pourcentage d’observations dans la base d’apprentissage qui n’est pas pris en
compte
Viens ensuite la deuxième couche cachée :
— units : 13
— kernel_initializer : uniform
— activation : tanh
Comme précédemment, nous rajoutons une couche dropout :
— rate : 0.1
Et pour finir, la dernière couche, la couche de sortie :
— units : 1
— kernel_initializer : uniform
— activation : sigmoid
Finalement, les paramètres du compilateur de réseau sous Keras :
— optimizer : adam, l’algorithme d’optimisation
— loss : binary_crossentropy, la fonction de perte binaire, car nous avons un problème de classi-
fication
— metrics : accuracy, la mesure d’évaluation de la qualité du modèle pendant l’apprentissage
On rajoute aussi un paramètres d’arrêt du réseau si les résultats sur la base de validation ne s’amé-
liorent pas après 11 cycles :
— early_stopping <- callback_early_stopping(patience = 11)

6.5.4 Présentation des résultats


6.5.4.1 Résultats

Nous présentons les résultats des différents algorithmes, selon les métriques choisies, et sur les
différentes bases de données.
— Sur la base d’apprentissage :

Modèles sur base d’apprentissage Accuracy Recall Score F1 AUC


GLM 0,82876 1 0,82326 0,90435
Random Forest 0,84771 1 0,84329 0,92671
GBM 0,84784 1 0,84305 0,92775
Deep Learning with TensorFlow 0,85100 1 0,84364 0,93137

TABLE 6.1 – Résultats des modèles sur la base d’apprentissage

52 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Sur la base de test :

Modèles sur base de test Accuracy Recall Score F1 AUC


GLM 0,82677 1 0,82181 0,90282
Random Forest 0,84949 1 0,84427 0,92848
GBM 0,84682 1 0,84214 0,92718
Deep Learning with TensorFlow 0,85000 1 0,84140 0,92994

TABLE 6.2 – Résultats des modèles sur la base de test

— Sur la base de validation 2016 :

Modèles sur base de validation 2016 Accuracy Recall Score F1 AUC


GLM 0,82347 1 0,81518 0,90063
Random Forest 0,84679 1 0,83802 0,92501
GBM 0,84391 1 0,83613 0,92417
Deep Learning with TensorFlow 0,84500 1 0,83318 0,92612

TABLE 6.3 – Résultats des modèles sur la base de la validation

Les courbes ROC obtenues pour nos différents modèles ont des allures quasi-similaires, de la
forme suivante :

F IGURE 6.12 – Courbe ROC des modèles mis en place

Nous pouvons donc voir que les modèles mis en place sont de bonne qualité si nous nous rap-
portons à la définition de l’AUC.

53 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Nous pouvons également visualiser l’historique d’entraînement du réseau neuronal sous Tensor-
flow :

F IGURE 6.13 – Historique d’entraînement du réseau neuronal

Après 10 cycles d’entraînement, la précision du réseau est de 85%, après 18 cycles d’entraînement,
la courbe de pertes de la base d’entraînement passe légèrement en dessous de celle de validation,
c’est la marque d’un sur-apprentissage. Nous pouvons donc limiter l’entraînement du réseau à ce
nombre de cycles.

6.5.4.2 Interpréation des résultats

Des quatre modèles mis en place, le modèle le plus performant est celui sous TensorFlow, mais
les autres modèles, plus simples, restent néanmoins acceptables. Nous gagnons 3% en termes de
précision par rapport au modèle GLM. De plus si nous prenons en compte la complexité de la mise
en place du réseau neuronal par rapport à celle du GLM en termes de complexité/performance, nous
pouvons dire que le modèle GLM sort gagnant de cette comparaison. C’est une analyse courante en
machine learning.
En effet les modèles les plus performants ne sont pas toujours les plus complexes. Dans certaines
études, les modèles simples ont parfois un rendement similaire par rapport à des modèles plus com-
plexes (c’est le cas ici), et même souvent supérieur. Cependant l’utilité d’un modèle plus complexe
peut se révéler dans son interprétabilité.
Même si le réseau neuronal est loin d’être le réseau le plus interprétable, nous avons utilisé le pa-
ckage LIME (Local Interpretable Model-agnostic Explanations), qui permet d’expliquer localement,
pour toute observation d’un jeu de données, et à partir du modèle mis en place, les variables qui
influent le plus sur la gravité.

54 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Voici ci-dessous les variables les plus influentes de la gravité pour chacun des modèles sous H2O :
— GLM

F IGURE 6.14 – Variables explicatives de la gravité par le modèle glm

En bleu, nous observons les variables qui influent positivement la gravité. Par exemple, la catégo-
rie de véhicule 1, soit les véhicules à 2 roues, influent positivement le risque de gravité ; et de manière
contraire, la catégorie obstacle 1, en orange, influe de manière négative la probabilité d’être blessé ou
tué lors de l’accident.
Les coefficients représentés sont les poids prédictifs des données normalisées, et sont inclus uni-
quement à titre informatif (par exemple en comparaison de l’importance relative de variables dans
une forêt aléatoire). Dans ce cas, les coefficients «normaux» sont obtenus à partir des coefficients
standardisés en inversant le processus de standardisation des données (désaxé avec l’ordonnée à
l’origine ajustée par un décalage supplémentaire) afin qu’ils puissent être appliqués aux données
dans leur forme originale.

55 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Forêts aléatoires

F IGURE 6.15 – Variables explicatives de la gravité par les forêts aléatoires

Nous avons le graphe de l’importance des variables dans la construction de la forêt aléatoire. En
effet, celui-ci est déterminé en calculant l’influence relative de chaque variable, en fonction de si elle a
été sélectionnée lors de la division dans le processus de construction de l’arbre, et de combien l’erreur
quadratique (sur tous les arbres construits) s’est améliorée en conséquence.
— GBM

F IGURE 6.16 – Variables explicatives de la gravité dans le modèle gbm

L’importance des variables est déterminée de façon similaire à celle sous les forêts aléatoires.

56 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

On peut remarquer que l’interprétation de l’importance des variables pour les variables qualita-
tives, est plus aisée sous les forêts aléatoires, contrairement au GLM qui transforme chaque classe
d’une variable qualitative en une variable unique, mais qui est par conséquent, plus précis au niveau
de l’importance des variables.
Nous utilisons l’ordre d’importance des variables donné par les forêts aléatoires afin de les analy-
ser.
Les variables avec un niveau d’importance au-delà de 15% sont :
— catv
Regardons cette variable, de plus près :

F IGURE 6.17 – Graphique croisé de catv-grav

Le graphe de gauche représente le pourcentage d’indemnes et de victimes par catégorie de vé-


hicule, alors que celui de droite représente le nombre d’indemnes et de victimes par catégorie de
véhicule. Les niveaux de gravité par catégorie de véhicule sont différents. Nous comprenons tout de
suite l’importance de cette variable dans la sinistralité de l’individu. La probabilité d’être victime pour
un véhicule à deux roues est de 88.8%, et donc de 2,3 fois celle d’un véhicule léger, et de 3,16 fois celle
d’un véhicule utiltaire. Pour les autres véhicules, ce niveau s’élève autour de 3,4 fois. On comprend
aussi pourquoi le modèle GLM fait ressortir cette catégorie en premier parmi les variables les plus
influentes.
D’autre part, nous avons 487 389 véhicules légers, soit 2,5 fois plus de deux roues motorisées, mais
un nombre d’indemnes largement supérieur, 5,6 fois plus d’indemnes chez les usagers de véhicules
légers par rapport à ceux des deux roues motorisées.

57 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— NB_pers

F IGURE 6.18 – Graphique croisé de NB_pers-grav

Les observations au-delà des troisièmes quartiles concernent les accidents survenus avec des
transports en commun.
Le décalage entre les quartiles de la population des indemnes et celle des victimes, soit le troi-
sième quartile des victimes qui est au niveau du deuxième quartile des indemnes, nous montre l’im-
portance du nombre de personnes impliquées dans l’accident, même si la moyenne de personnes
dans les deux catégories est quasiment la même, 2,47 pour les indemnes, et 2,04 pour les victimes.

58 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— obstacle

F IGURE 6.19 – Graphique croisé de obstacle-grav

Nous constatons que lors d’une collision avec un piéton, les usagers de véhicules ont 6,7 fois
moins de chances d’être victime, soit 7% de victimes, en comparaison avec une collision entre deux
véhicules où 46,9% des accidents entraînent des victimes.

59 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— agg

F IGURE 6.20 – Graphique croisé de agg-grav

Les accidents hors agglomération sont plus dangereux, ils entrainent plus de victimes que ceux
en agglomération, alors que le nombre d’accidents en agglomération atteint le double du nombre de
ceux qui se sont produits hors agglomération.

60 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— manv

F IGURE 6.21 – Graphique croisé de manv-grav

Lorsque la manœuvre avant accident est "déportée", la probabilité d’être victime, soit 75,7%, est
de 3,12 fois celle d’être victime lorsque la manœuvre avant accident est de tourner à droite ou à
gauche.
Il y a également plus de risque qu’un usager soit victime lorsque la manœuvre avant accident est
un dépassement, avec une probabilité de 69,1% des accidents qui engendrent des victimes.
De plus, le nombre d’accidents en tournant, soit un nombre 99 296 accidents, est plus élevé que
le nombre d’accidents lorsque la manœuvre est de rester dans le même sens de circulation, soit 70
900 accidents, alors que nous avons quasiment 2 fois plus de chances d’être victimes lorsque nous
sommes dans le même sens de circulation.

61 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— col

F IGURE 6.22 – Graphique croisé de col-grav

Nous avons seulement 10,1% des accidents qui sont par "collision frontale", avec une probabi-
lité de faire des victimes de 60%, supérieure aux 79,2% des accidents avec une "autre collision" (par
l’arrière, par le coté, en chaines, collisions multiples. . . ), qui ont une probabilité de 43,9% de faire des
victimes.

62 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— densite

F IGURE 6.23 – Boites à moustaches de densité-grav

Là aussi les quartiles de distribution de la densité de population par rapport à la gravité sont
différents.
En moyenne nous retrouvons moins de victimes dans les communes les plus denses par rapport
aux communes les moins denses.

63 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Cette remarque peut être confirmée par le graphe suivant, si nous segmentons la densité de po-
pulation en 10 classes :

F IGURE 6.24 – Graphique croisé de densite-grav

Nous constatons clairement la décroissance du niveau de gravité par rapport à l’augmentation de


la densité de population.

64 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Comme évoqué précédemment, grâce au package LIME, nous allons visualiser l’explication in-
dividuelle pour les 10 premières observations de la base de validation 2016, donnée par le réseau
neuronal dans l’établissement de la prédiction.

F IGURE 6.25 – Explication individuelle de la sinistralité par le réseau neuronal

Pour ce faire, il a fallu demander à l’explicateur de modèles de nous faire ressortir les 6 variables
qui influent sur le niveau de gravité de chaque individu.
En vert, nous retrouvons les variables qui influent positivement sur l’attribution de la classe pour
chaque observation et en rouge les variables qui influent négativement sur l’attribution de cette
classe.
Nous avons également, en plus de la classe prédite Label et la probabilité de réalisation Probabi-
lity, le pourcentage d’explication donné par l’explicateur Explanation Fit.
La première observation que nous pouvons faire est de remarquer la présence de la catégorie de
véhicule comme premier facteur influent sur le niveau de gravité pour les 10 premières observations.

65 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

6.5.4.3 Analyse ex ante / ex post

Après cette première analyse des variables influentes de la gravité, il est important de rappeler que
parmi les variables à notre disposition, nous avions jusqu’à maintenant dans notre jeu de données,
des variables disponibles avant accident et d’autres après accident. Nous allons maintenant retirer
les variables disponibles après accident, puis analyser l’impact de ce retrait sur nos modèles et sur les
variables influentes de la gravité.
Définissons alors les variables disponibles avant accident :
Les variables connues avant accident sont les variables mesurables et déterminables avant acci-
dent, par exemple par un capteur ou tout autre objet connecté, qui est intégré au système du véhicule
permettant de les mesurer, ou encore connu du conducteur avant accident.
Ce sont dans notre cas :
— secu : le niveau de sécurité, soit le port ou non du dispositif de sécurité (système intégré à
l’automobile, ou connu du conducteur)
— densite : la densité de la commune (déterminable par un gps)
— sexe : le sexe du conducteur (connu du conducteur)
— trajet : le trajet (connu du conducteur)
— age : l’âge du conducteur (connu du conducteur)
— condu : variable indiquant si le conducteur est seul ou non (connue du conducteur)
— catv : la catégorie de véhicule (connue du conducteur)
— manv : la manœuvre avant acccident (connue du conducteur)
— lum : les conditions d’éclairage (déterminables par un capteur)
— agg : localisation (déterminable par un gps)
— atm : conditions atmosphériques (déterminables par un capteur)
— jour : le jour (système intégré ou connu du conducteur)
— mois : le mois (connu du conducteur)
— heure : l’heure (connue du conducteur)
— wsemaine : pleine semaine, ou weekend (connu du conducteur)
— chase : période chassé croisé (connue du conducteur)
— catr : catégorie route (déterminable par un gps)
— circ : régime de circulation
— prof : Profil en long décrivant la déclivité de la route (déterminable par un capteur)
— plan : tracé en plan (déterminable par un capteur)
— surf : état de la surface (déterminable par un capteur)
— situ : situation avant accident (connue du conducteur)
Ci-dessous les résultats obtenus pour chacun de nos modèles sur la base de validation 2016 :

Modèles sur base de validation 2016 Accuracy Recall Score F1 AUC


GLM 0,78824 1 0,78193 0,85707
Random Forest 0,79594 1 0,78997 0,86890
GBM 0,79448 1 0,78968 0,86756
Deep Learning with TensorFlow 0,79300 1 0,78300 0,86801

TABLE 6.4 – Résultat des nouveaux modèles sur la base de validation 2016

Nous remarquons tout de suite la baisse de qualité de nos modèles. Le modèle obtenu grâce aux
forêts aléatoires est le meilleur modèle de prédiction lorsque les données que nous disposons sont
celles disponibles avant accident. Cette remarque rejoint celle que nous avions faite un peu plus
haut : les forêts aléatoires ont une performance supérieure aux réseaux de neurones sur ce type de
problématique.

66 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Nous pouvons visualiser de nouveau les variables explicatives de la gravité sous les forêts aléa-
toires :

F IGURE 6.26 – Variables explicatives de la gravité par les forêts aléatoires sous le nouveau modèle

67 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Nous remarquons l’apparition de nouvelles variables explicatives de la gravité, avec un niveau


d’importance de plus de 15% :
— Age

F IGURE 6.27 – Graphique croisé age-grav

Nous observons une décroissance du niveau de gravité par rapport à l’âge. Les 18-20 ans ont un
niveau de gravité très élevé par rapport aux autres groupes et par rapport à la proportion d’accidentés.

68 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Plan

F IGURE 6.28 – graphique croisé Plan-grav

Cette variable, comme décrite dans le document descriptif des données, décrit la sinuosité de la
route à l’endroit de l’accident. Les informations sont données par rapport au sens de circulation du
premier véhicule décrit. C’est une variable importante pour l’étude des accidents en virage. La pro-
portion d’accidents en courbe est un indicateur typologique classique lors de l’étude d’un réseau ou
d’un itinéraire. Nous observons que les routes en "S" sont les plus dangereuses, avec 71,2% d’acci-
dents entraînant des victimes, alors qu’elles ne représentent que 1,3% des observations. Contraire-
ment aux routes dont la sinuosité est en partie rectiligne, sur lesquelles 76,3% des accidents ont lieu,
la probabilité d’être victime est de 45,7%.

69 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Heure

F IGURE 6.29 – graphique croisé heure-grav

Comme également remarqué lors de la visualisation des données, 38,7% des accidents ont lieu en
période d’après-midi, entre 12h et 18h, et la période au cours de laquelle nous avons le moins d’ac-
cidents est pendant le premier quart de la journée (soit entre 00h et 6h du matin) mais les accidents
ayant lieu au cours de cette période entraînent plus de victimes, soit 70,3% de victimes contre 46,3%
de victimes en après-midi.

70 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

— Mois

F IGURE 6.30 – graphique croisé mois-grav

Les périodes estivales engendrent le plus de victimes, soit plus de 50% des accidents en août,
juillet, juin et mai.
Lors du retour des vacances estivales, nous avons aussi 49,9% des accidents qui engendrent des
victimes.
En comparaison avec le mois d’octobre qui compte le plus d’accidents, 71 368 accidents pour
78,9% de victimes.

71 Bureau d’étude 2017 - 2018


6.5. APPLICATION À NOTRE ÉTUDE

Nous pouvons à nouveau visualiser l’explication donnée par le réseau neuronal :

F IGURE 6.31 – Explication individuelle de la sinistralité automobile

72 Bureau d’étude 2017 - 2018


Chapitre 7

Représentation géographique des


accidents

L’autre objectif de ce bureau d’étude était de mettre en place des cartes interactives de représen-
tation des accidents. Pour cela, nous avons utilisé l’outil 3D Maps permettant de réaliser des cartes
sous Excel à l’aide d’informations géographiques telles que la longitude, la latitude, le département,
et toute information géographique permettant de représenter des lieux. Ces informations sont dispo-
nibles, dans notre jeu de données, dans la sous-base LIEUX.
Ci dessous, la représentation des accidents de l’année 2016 en France métropolitaine :

F IGURE 7.1 – Aperçu de la représentation des accidents sur l’année 2016 en France métropolitaine

73 Bureau d’étude 2017 - 2018


Nous pouvons remarquer une concentration des accidents sur la région Île de France, plus parti-
culièrement au niveau de Paris et de sa banlieue, mais aussi au niveau de la partie ouest et sud-ouest
de la France.
Partant de là, il a également été possible de visualiser l’évolution du nombre de tués sur la période
2005-2016, en région Bretagne.

F IGURE 7.2 – Aperçu du nombre de tués en Pointe de Bretagne au cours de l’année 2008

74 Bureau d’étude 2017 - 2018


Chapitre 8

Conclusion

Tout au long de cette étude, notre objectif était d’étudier la sinistralité automobile en France avec
des méthodes de Machine Learning en utilisant des Open Data. Nous avons alors choisi d’étudier
la gravité des sinistres automobiles en mettant en place des algorithmes de prédiction sur la variable
grav à partir du jeu de données disponible. Pour cela, nous avons fait un certain nombre d’hypothèses
et de modifications sur les données utilisées. En effet, nous avons d’abord dû retraiter certaines don-
nées, sélectionner les données à utiliser en modifiant la variable cible de départ.
Les résultats obtenus sur les différents algorithmes mis en place nous ont permis de faire ressortir
les différents facteurs influents de cette sinistralité avec une précision que nous pouvons qualifier de
satisfaisante.
Cependant, il aurait été intéressant de comparer la différence de résultats avec d’autres hypo-
thèses, comme :
— l’imputation des valeurs manquantes au lieu d’une suppression de ces dernières, afin d’éva-
luer la perte d’informations résultant de cette suppression ou l’impact de l’imputation sur la
prédiction
— le choix d’une modification de la variable cible en une classe combinée de blessés légers et
de blessés hospitalisés d’une part, et d’autre part d’une classe combinée d’indemnes et de
décédés, puisque la première est plus susceptible d’influer le portefeuille d’un assureur
De plus les données que nous avons utilisées contiennent peu d’informations personnelles telles
que le degré d’alcool des individus accidentés ou encore la vitesse des véhicules avant l’accident, et
cela dans un souci de protection de la vie privée des personnes physiques. Ces données personnelles
nous auraient certainement permis d’améliorer significativement la compréhension de la sinistralité
car celle-ci est la combinaison de facteurs généraux et externes tels que la catégorie des routes ou les
phénomènes météorologiques dont nous avons parlé dans cette étude, ainsi que de facteurs liés au
conducteur et à son comportement.
Cette situation d’informations incomplètes ou partielles est l’un des inconvénients lorsque nous
travaillons avec des données disponibles en Open Data car celles-ci, comme dit précédemment, ne
doivent pas divulguer les informations personnelles des individus. Néanmoins, il est possible pour
un assureur, en accord commun avec ses clients, d’avoir accès à ces informations dites personnelles,
comme cela se fait déjà en assurance automobile même si de façon limitée, avec l’installation de
capteurs, ceci permettant d’adapter la prime en fonction du comportement du conducteur. D’autres
acteurs, tels que les géants du Net encore appelés GAFA, disposent d’un nombre considérable d’in-
formations, comme Google qui mesure la vitesse à laquelle nous circulons lorsque le GPS de notre
téléphone mobile est activé et qui pourrait donc permettre une plus grande compréhension de la
sinistralité.
Pour finir, ce bureau d’études a été une expérience très enrichissante pour nous car il nous a
non seulement permis d’améliorer nos compétences informatiques, mais aussi de toucher à un sujet
d’actualité qui est l’utilisation d’algorithmes de Machine Learning.

75 Bureau d’étude 2017 - 2018


Annexe A

Codes informatiques

Les codes sont répartis en différentes parties.

###importation des données (webscrapping sur data.gouv)


------------------------------------------------------------------------
##création des liens

url = "http://www.data.gouv.fr/fr/datasets/base-de-donnees-accidents-corporels-de-la
-circulation/"
liens = read.csv(url, stringsAsFactors = FALSE)
liens = liens[,1]
View(liens[2,1])
library(stringr)
liens = liens[str_detect(liens,"<a href=https://www.data.gouv.fr/s/resources/")]
liens = liens[str_detect(liens,".csv")]
length(liens)
liens = gsub(c(" <a href="),"",liens)
liens = gsub(">","",liens)

###sous_liens
------------------------------------------------------------------------
##liens de la base véhicule
vehicules_liens = liens[str_detect(liens,"vehicules")]

for(i in seq_along(vehicules_lien)) {

#chargement du fichier csv et sauvegarde dans la variable vehicule


vehicule <- read.csv(vehicules_liens[i])

#on renomme le lien, en lui rajoutant l'année


assign(paste0("vehicule_", 2017-i), vehicule)
}

##liens de la base usager


usager_liens = liens[str_detect(liens,"usagers")]
for(i in seq_along(usager_liens)){

usager <- read.csv(usager_liens[i])

assign(paste0("usager_", 2017-i), usager)


}

76 Bureau d’étude 2017 - 2018


##liens de la base lieux
lieux_liens = liens[str_detect(liens,"lieux")]
for(i in seq_along(lieux_liens)) {

lieux <- read.csv(lieux_lien[i])

assign(paste0("lieux_", 2017-i), lieux)


}

##liens de la base lieux


caracter_lien = liens[str_detect(liens,"caracteristiques")]
for(i in seq_along(caracter_lien)) {

caracter <- read.csv(caracter_lien[i])

assign(paste0("caracter_", 2017-i), caracter)


}

###concaténation des bases de données


------------------------------------------------------------------------
base_usager=rbind(usager_2005,usager_2006,usager_2007,usager_2008,usager_2009,
usager_2010,usager_2011,usager_2012,usager_2013,usager_2014,usager_2015,usager_2016)

base_vehicule=rbind(vehicule_2005,vehicule_2006,vehicule_2007,vehicule_2008,
vehicule_2009,vehicule_2010,vehicule_2011,vehicule_2012,vehicule_2013,vehicule_2014,
vehicule_2015,vehicule_2016)

base_caracter=rbind(caracter_2005,caracter_2006,caracter_2007,caracter_2008,
caracter_2009,caracter_2010,caracter_2011,caracter_2012,caracter_2013,caracter_2014,
caracter_2015,caracter_2016)

base_lieux=rbind(lieux_2005,lieux_2006,lieux_2007,lieux_2008,lieux_2009,lieux_2010,
lieux_2011,lieux_2012,lieux_2013,lieux_2014,lieux_2015,lieux_2016)

###première analyse de la base de données


------------------------------------------------------------------------
##évolution de la gravité par année
base_caracter$an = 2000 + base_caracter$an

##sélection de la gravité dans la base usager


base_usager = as.data.table(base_usager)
grav_data = base_usager %>%
select(Num_Acc,grav)

##sélection de l'année dans la base caractéristiques


base_caracter = as.data.table(base_caracter)
year_data = base_caracter %>%
select(Num_Acc,an)

##combinaison des deux bases


evolution_data = left_join(grav_data,year_data)
colnames(evolution_data) = c("Num_Acc","gravite","annee")

77 Bureau d’étude 2017 - 2018


evolution_data$gravite = as.factor(evolution_data$gravite)

##recodage variable gravite


##irec(evolution_data,gravite)
##Recodage de evolution_data$gravite
evolution_data$gravite <- fct_recode(evolution_data$gravite,
"Indemne" = "1",
"Tué" = "2",
"Blessé hospitalisé" = "3",
"Blessé léger" = "4")

##graphe d'évolution des accidents année après année


ggplot(evolution_data,aes(x =annee,fill=gravite))+geom_bar(position="fill")+theme_wsj()

###analyse base usager


------------------------------------------------------------------------
##recherche de valeurs abérrantes
##structure de la base de donnée
str(base_usager)

##variable(place)
describe(base_usager$place)
base_usager$place[base_usager$place==0] = NA

##variable(catu)
describe(base_usager$catu) #variable en bon état

##variable(grav)
describe(base_usager$grav) #variable en bon état

##variable(sexe)
describe(base_usager$sexe) #variable en bon état

##variable(an_nais)
describe(base_usager$an_nais) #variable en bon état

##variable(trajet)
describe(base_usager$trajet) #variable en bon état
base_usager$trajet[base_usager$trajet==0] = NA

##variable(secu)
describe(base_usager$secu) #variable en bon état
base_usager$secu[base_usager$secu<11] = NA

##variable(locp)
describe(base_usager$locp)
base_usager$locp[base_usager$locp==0] = NA

##variable(actp)
describe(base_usager$actp)
base_usager$actp[base_usager$actp==0] = NA

##variable(etatp)

78 Bureau d’étude 2017 - 2018


describe(base_usager$etatp)
base_usager$etatp[base_usager$etatp==0] = NA

##profil de valeurs manquantes


mice_plot <- aggr(base_usager, col=c('white','firebrick3'),
numbers=F, sortVars=TRUE,
labels=names(base_usager), cex.axis=.7,
gap=3, ylab=c("valeurs Manquantes","Profil de valeurs manquantes"),prop=T)

###analyse base vehicule


------------------------------------------------------------------------
##recherche de valeurs abérrantes
##structure de la base de donnée
str(base_vehicule)

##variable(senc)
describe(base_vehicule$senc)
base_vehicule$senc[base_vehicule$senc==0] = NA

##variable(catv)
describe(base_vehicule$catv) #variable en bon état

##variable(obs)
describe(base_vehicule$obs)
base_vehicule$obs[base_vehicule$obs==0] = NA

##variable(obsm)
describe(base_vehicule$obsm)
base_vehicule$obsm[base_vehicule$obsm==0] = NA

##variable(choc)
describe(base_vehicule$choc)
base_vehicule$choc[base_vehicule$choc==0] = NA

##variable(manv)
describe(base_vehicule$manv)
base_vehicule$manv[base_vehicule$manv=="00"] = NA

##variable(occutc)
describe(base_vehicule$occutc)

##profil de valeurs manquantes


mice_plot <- aggr(base_vehicule, col=c('white','firebrick3'),
numbers=F, sortVars=TRUE,
labels=names(base_vehicule), cex.axis=.7,
gap=3, ylab=c("valeurs Manquantes","Profil de valeurs manquantes"),prop=T)

###analyse base caractéristiques


------------------------------------------------------------------------
##recherche de valeurs abérrantes
##structure de la base de donnée
str(base_caracter)

79 Bureau d’étude 2017 - 2018


##variable(hrmn)
describe(base_caracter$hrmn)#variable en bon état

##variable(lum)
describe(base_caracter$lum) #variable en bon état

##variable(dep)
describe(base_caracter$dep) #variable en bon état

##variable(com)
describe(base_caracter$com) #variable en bon état

##variable(agg)
describe(base_caracter$agg) #variable en bon état

##variable(int)
describe(base_caracter$int) #variable en bon état
base_caracter$int[base_caracter$int==0] = NA

##variable(atm)
describe(base_caracter$atm) #variable en bon état

##variable(col)
describe(base_caracter$col) #variable en bon état

##variable(adr)
describe(base_caracter$adr)

##variable(gps)
describe(base_caracter$gps)

##variable(lat)
describe(base_caracter$lat)

##variable(long)
describe(base_caracter$long)

##profil de valeurs manquantes


mice_plot <- aggr(base_caracter, col=c('white','firebrick3'),
numbers=F, sortVars=TRUE,
labels=names(base_caracter), cex.axis=.7,
gap=3, ylab=c("valeurs Manquantes","Profil de valeurs manquantes"),prop=T)

###analyse base lieux


------------------------------------------------------------------------
##recherche de valeurs abérrantes
##structure de la base de donnée
str(base_lieux)

##variable(catr)
describe(base_lieux$catr) #variable en bon état

##variable(voie)

80 Bureau d’étude 2017 - 2018


describe(base_lieux$voie) #variable en bon état

##variable(v1)
describe(base_lieux$v1) #variable en bon état

##variable(v2)
describe(base_lieux$v2) #variable en bon état

##variable(circ)
describe(base_lieux$circ)
base_lieux$circ[base_lieux$circ==0] = NA

##variable(nbv)
describe(base_lieux$nbv)
base_lieux$nbv = as.numeric(base_lieux$nbv)
base_lieux$nbv[base_lieux$nbv==0] = NA
base_lieux$nbv[base_lieux$nbv>8] = NA

##variable(vosp)
describe(base_lieux$vosp)
base_lieux$vosp[base_lieux$vosp==0] = NA

##variable(prof)
describe(base_lieux$prof)
base_lieux$prof[base_lieux$prof==0] = NA

##variable(pr)
describe(base_lieux$pr)

##variable(pr1)
describe(base_lieux$pr1)

##variable(plan)
describe(base_lieux$plan)
base_lieux$plan[base_lieux$plan==0] = NA

##variable(lartpc)
describe(base_lieux$lartpc)

##variable(larrout)
describe(base_lieux$larrout)

#variable(surf)
describe(base_lieux$surf)
base_lieux$surf[base_lieux$surf==0] = NA

##variable(infra)
describe(base_lieux$infra)
base_lieux$infra[base_lieux$infra==0] = NA

##variable(situ)
describe(base_lieux$situ)
base_lieux$situ[base_lieux$situ==0] = NA

81 Bureau d’étude 2017 - 2018


##variable(env1)
describe(base_lieux$env1)
base_lieux$env1 = as.numeric(base_lieux$env1)
base_lieux$env1[base_lieux$env1==0] = NA

##profil de valeurs manquantes


mice_plot <- aggr(base_lieux, col=c('white','firebrick3'),
numbers=F, sortVars=TRUE,
labels=names(base_lieux), cex.axis=.7,
gap=3, ylab=c("valeurs Manquantes","Profil de valeurs
manquantes"),prop=T,combibned = T)

#visualisation
library(treemap)
#base usagers
------------------------------------------------------------------------
#catu
des = base_usager
# irec(des,catu)
## Recodage de des$catu
des$catu <- as.character(des$catu)
des$catu[des$catu == "1"] <- "conducteur"
des$catu[des$catu == "2"] <- "passager"
des$catu[des$catu == "3"] <- "piéton"
des$catu[des$catu == "4"] <- "piéton en roller (ou trotinette)"
des$grav <- as.character(des$grav)
des$grav[des$grav == "4"] <- "Blessé léger"
des$grav[des$grav == "3"] <- "Blessé Hospitalisé"
des$grav[des$grav == "1"] <- "Indemne"
des$grav[des$grav == "2"] <- "Tué"
colnames(des)[colnames(des)=="grav"] = "gravité"
g <- ggplot(des, aes(catu))
g+geom_bar(aes(fill = gravité), position = position_stack(reverse = TRUE)) +
coord_flip() +
theme(legend.position = "top")

#sexe
# irec(des,sexe)
## Recodage de des3$sexe
des$sexe <- as.character(des$sexe)
des$sexe[des$sexe == "1"] <- "Homme"
des$sexe[des$sexe == "2"] <- "Femme"
g <- ggplot(des, aes(sexe))
g+geom_bar(aes(fill = gravité), position = position_stack(reverse = TRUE)) +
coord_flip() +
theme(legend.position = "top")

#base véhicules
------------------------------------------------------------------------
#catv
des = base_vehicule

82 Bureau d’étude 2017 - 2018


# irec(des,catv)
## Recodage de des$catv
des$catv[des$catv == "07"] <- "véhicule légér"
des$catv[des$catv == "02"] <- "Cyclomoteur"
des$catv[des$catv == "05"] <- "Motocyclette"
des$catv[des$catv == "18"] <- "Autre véhicule"
des$catv[des$catv == "17"] <- "Tracteur routier(+semi remorque)"
des$catv[des$catv == "01"] <- "Bicyclette"
des$catv[des$catv == "10"] <- "Véhicule utilitaire"
des$catv[des$catv == "04"] <- "Scooter"
des$catv[des$catv == "15"] <- "Poids lourd"
des$catv[des$catv == "14"] <- "Poids lourd"
des$catv[des$catv == "13"] <- "Poids lourd"
des$catv[des$catv == "03"] <- "Voiturette"
des$catv[des$catv == "32"] <- "Scooter"
des$catv[des$catv == "37"] <- "Autobus"
des$catv[des$catv == "30"] <- "Scooter"
des$catv[des$catv == "31"] <- "Motocyclette"
des$catv[des$catv == "33"] <- "Motocyclette"
des$catv[des$catv == "34"] <- "Scooter"
des$catv[des$catv == "99"] <- NA
des$catv <- as.character(des$catv)
des = des$catv
des = as.data.table(des)
des %>%
filter(!is.na(des)) %>%
group_by(des) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des = reorder(des,Count)) %>%
head(10) %>%

ggplot(aes(x = des,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "brown2") +
geom_text(aes(x = des, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +
labs(x = 'Catégorie Véhicules',
y = 'Nombre') +
coord_flip()

#manoeuvre
des3 = base_vehicule
# irec(des3,manv)
## Recodage de des3$manv
des3$manv[des3$manv == "01"] <- "Sans changement de direction"
des3$manv[des3$manv == "16"] <- "Tournant à droite"
des3$manv[des3$manv == "13"] <- "Déporté à gauche"
des3$manv[des3$manv == "19"] <- "Traversant la chaussée"
des3$manv[des3$manv == "17"] <- "Dépassant à gauche"
des3$manv[des3$manv == "00"] <- NA
des3$manv[des3$manv == "02"] <- "Même sens, même file"

83 Bureau d’étude 2017 - 2018


des3$manv[des3$manv == "15"] <- "Tournant à gauche"
des3$manv[des3$manv == "23"] <- "Arrêté (hors stationnement)"
des3$manv[des3$manv == "09"] <- "En s'incérant"
des3$manv[des3$manv == "14"] <- "Déporté à droite"
des3 = des3$manv
des3 = as.data.table(des3)
des3 %>%
filter(!is.na(des3)) %>%
group_by(des3) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des3 = reorder(des3,Count)) %>%
head(10) %>%

ggplot(aes(x = des3,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "deeppink") +
geom_text(aes(x = des3, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +
labs(x = 'Manoeuvre avant accident',
y = 'Nombre') +
coord_flip()

#base lieux
------------------------------------------------------------------------
des = base_lieux
# irec(des,catr)
## Recodage de des$catr
des$catr <- as.character(des$catr)
des$catr[des$catr == "3"] <- "Route Départementale"
des$catr[des$catr == "2"] <- "Route Nationale"
des$catr[des$catr == "4"] <- "Voie Communale"
des$catr[des$catr == "6"] <- "Parc de stationnement"
des$catr[des$catr == "9"] <- NA
des$catr[des$catr == "5"] <- "Hors réseau public"
des$catr[des$catr == "1"] <- "Autoroute"
des = des$catr
des = as.data.table(des)
des %>%
filter(!is.na(des)) %>%
group_by(des) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des = reorder(des,Count)) %>%
head(10) %>%

ggplot(aes(x = des,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "burlywood") +
geom_text(aes(x = des, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +

84 Bureau d’étude 2017 - 2018


labs(x = 'Catégories des routes',
y = 'Nombre') +
coord_flip()

#surface
des2 = base_lieux
# irec(des2,surf)
## Recodage de des2$surf
des2$surf <- as.character(des2$surf)
des2$surf[des2$surf == "1"] <- "normale"
des2$surf[des2$surf == "2"] <- "mouillée"
des2$surf[des2$surf == "0"] <- NA
des2$surf[des2$surf == "9"] <- NA
des2$surf[des2$surf == "7"] <- "verglacée"
des2$surf[des2$surf == "8"] <- "corps gras - huile"
des2$surf[des2$surf == "5"] <- "enneigée"
des2$surf[des2$surf == "6"] <- "boue"
des2$surf[des2$surf == "3"] <- "flaques"
des2$surf[des2$surf == "4"] <- "inondée"
des2 = des2$surf
des2 = as.data.table(des2)
des2 %>%
filter(!is.na(des2)) %>%
group_by(des2) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des2 = reorder(des2,Count)) %>%
head(10) %>%

ggplot(aes(x = des2,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "cyan") +
geom_text(aes(x = des2, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +
labs(x = 'surfaces',
y = 'Nombre') +
coord_flip()

#infrastructures
des3 = base_lieux
# irec(des3,infra)
## Recodage de des3$infra
des3$infra <- as.character(des3$infra)
des3$infra[des3$infra == "0"] <- NA
des3$infra[des3$infra == "5"] <- "Carrefour aménagé"
des3$infra[des3$infra == "4"] <- "Voie ferrée"
des3$infra[des3$infra == "2"] <- "Pont-autopont"
des3$infra[des3$infra == "3"] <- "Bretelle d’échangeur ou de raccordement"
des3$infra[des3$infra == "6"] <- "Zone piétonne"
des3$infra[des3$infra == "1"] <- "Souterrain - tunnel"

85 Bureau d’étude 2017 - 2018


des3$infra[des3$infra == "7"] <- "Zone de péage"
des3 = des3$infra
des3 = as.data.table(des3)
des3 %>%
filter(!is.na(des3)) %>%
group_by(des3) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des3 = reorder(des3,Count)) %>%
head(10) %>%

ggplot(aes(x = des3,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "springgreen4") +
geom_text(aes(x = des3, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +
labs(x = 'Infrastructures',
y = 'Nombre') +
coord_flip()

# base caractéristiques
------------------------------------------------------------------------
#météo
#conditins atm
des2 = base_caracter
# irec(des2,atm)
## Recodage de des2$atm
des2$atm <- as.character(des2$atm)
des2$atm[des2$atm == "1"] <- "Normale"
des2$atm[des2$atm == "2"] <- "Pluie légère"
des2$atm[des2$atm == "3"] <- "Pluie forte"
des2$atm[des2$atm == "8"] <- "Temps couvert"
des2$atm[des2$atm == "9"] <- NA
des2$atm[des2$atm == "7"] <- "Temps éblouissant"
des2$atm[des2$atm == "6"] <- "Vent fort - tempête"
des2$atm[des2$atm == "4"] <- "Neige-grêle"
des2$atm[des2$atm == "5"] <- "Brouillard-fumée"
## Recodage de des$infra
des2 = des2$atm
describe(des2)
des2 = as.data.table(des2)
des = des2 %>%
filter(!is.na(des2)) %>%
group_by(des2) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des2 = reorder(des2,Count)) %>%
head(10)
treemap(des,
index="des2",
vSize = "Count",

86 Bureau d’étude 2017 - 2018


title="",
palette = "Blues",
fontsize.title = 11
)

#heure
des3 = base_caracter
des3 = des3$hrmn
des3 = floor(des3/100)
des3[des3==0]=24
des3=as.character(des3)
des3 = as.data.table(des3)
des3 %>%
filter(!is.na(des3)) %>%
group_by(des3) %>%
summarise(Count = n()) %>%
arrange(desc(Count)) %>%
ungroup() %>%
mutate(des3 = reorder(des3,Count)) %>%
head(24) %>%

ggplot(aes(x = des3,y = Count)) +


geom_bar(stat='identity',colour="white", fill = "skyblue4") +
geom_text(aes(x = des3, y = 1, label = paste0("(",Count,")",sep="")),
hjust=0, vjust=.5, size = 4, colour = 'black',
fontface = 'bold') +
labs(x = 'Heures',
y = 'Nombre') +
coord_flip()

#packages
library(ade4)
library(lubridate)
library(tidyverse)
library(stringr)
library(questionr)
library(dplyr)
library(data.table)
library("corrplot")
library(caret)
library(h2o)
library(funModeling)
library(ggplot2)
library(ggthemes)

------------------------------------------------------------------------
#retrait des variables inutiles
load("~/BE/files/Data_Final.RData")
data$Num_Acc = NULL
data$vosp = NULL
data$nbv = NULL
data$Nom_commune = NULL
data$departmentName = NULL

87 Bureau d’étude 2017 - 2018


data$regionName = NULL
data$Latitude = NULL
data$Longitude = NULL
data$num_veh = NULL
data$com = NULL
data$dep = NULL
data$POPULATION = NULL
data$SUPERFICIE = NULL
data$NB_indemne = NULL
data$NB_tue = NULL
data$NB_bles_hos = NULL
data$NB_bles_leg = NULL
data$taux_secu = NULL
data = data[data$age!="[0,10]",]
data = data[data$age!="(100,110]",]
data = data[data$age!="(110,120]",]

#modalité aberrantes
#creation autre situation
data$situ = as.character(data$situ)
data$situ[data$situ=="0"] = "6"
data$situ = as.factor(data$situ)

#creation surf normale / surf mauvais état


data$surf = as.character(data$surf)
data$surf[data$surf=="0"] = "9"
data$surf[data$surf!="1"] = "0"
data$surf = as.factor(data$surf)
data = na.omit(data)

#MODELES
------------------------------------------------------------------------
#valeur à prédire
data$grav <- as.character(data$grav)
data$grav[data$grav == "1"] <- "Indemne"
data$grav[data$grav == "2"] <- "victime"
data$grav[data$grav == "3"] <- "victime"
data$grav[data$grav == "4"] <- "victime"
data$grav <- as.factor(data$grav)
colnames(data)

colnames(data)[colnames(data)=="grav"] = "gravité"

#on voit que l'on a une base équilibrée


ggplot(data = training) +
geom_bar(mapping = aes(x = grav,fill = grav))+
theme_wsj()

colnames(data)[colnames(data)=="gravité"] = "grav"

#préparation à la modélisation
------------------------------------------------------------------------
#rajout de l'année comme variable

88 Bureau d’étude 2017 - 2018


#datanonorm ici
x = as.Date(data$moment_accident)
x = substring(x,1,4)
x = as.numeric(x)

data$moment_accident = NULL #plus besoin de cette variable

#normalisation des variables qualitatives


data1.1 = data[sapply(data, class) == "numeric"]
for (i in 1:length(data1.1)) {
k = max(data1.1[, i])
l = min(data1.1[, i])
data1.1[, i] = (data1.1[, i] - l) / (k - l)
}
data1.2 = data[sapply(data, class) == "factor"]

#creation de la nouvelle base normalisée


data = cbind(data1.1,data1.2)
data$annee = x

#echantillonnage base de données


training_base = data %>% #base 2005-2016
filter(annee<=2015)
validating_base = data %>% #base de 2016
filter(annee==2016)

#plus besoin de l'age


training_base$annee = NULL
validating_base$annee = NULL

#reechantillonnage base d'apprentissage/test


set.seed(1)
in_train <- createDataPartition(training_base$grav, p = 0.80, list = FALSE)
training <- training_base[in_train,]
testing <- training_base[-in_train,]

#préparation à la programmation
------------------------------------------------------------------------
#H2O
localH2O <- h2o.init(nthreads = -1)
h2o.init()

#envoi des données dans le cluster h2O


train = as.h2o(training)
test = as.h2o(testing)
pred = as.h2o(validating_base)

#sélection des variables


colnames(train)
y.dep = 4
x.dep = (1:29)[-4]

#mise en place des modèles

89 Bureau d’étude 2017 - 2018


------------------------------------------------------------------------
#mogèle glm
regression.model <- h2o.glm( y = y.dep, x = x.dep, training_frame = train,validation_frame = t
family = "binomial",seed = 1) #,nfolds = 5,fold_assignment = "Mod

#extraction des résultats base de test


model = h2o.performance(regression.model,valid=T)
model

#base apprentissage/test
#accuracy
h2o.accuracy(model)[h2o.accuracy(model)$accuracy==max(h2o.accuracy(model)$accuracy),]

#score f1
h2o.F1(model)[h2o.F1(model)$f1==max(h2o.F1(model)$f1),]

#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(model)

#base validation
#accuracy
accuracy = h2o.accuracy(h2o.performance(regression.model,newdata = pred))
accuracy[accuracy$accuracy==max(accuracy$accuracy),]

#score f1
F1 = h2o.F1(h2o.performance(regression.model, newdata = pred))
F1[F1$f1==max(F1$f1),]

#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(h2o.performance(regression.model, newdata = pred))

#graphes
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(regression.model,10)

#analyse ante/post accident


#sélection des variables
colnames(train)
y.dep = 4
x.dep = (1:29)[c(-1,-2,-11,-13,-16,-18,-4)]

#nouveau modèle
regression.model <- h2o.glm( y = y.dep, x = x.dep, training_frame = train,validation_frame = t

#extraction des résultats base de validation


model = h2o.performance(regression.model,newdata = pred)
model

90 Bureau d’étude 2017 - 2018


#graphes
model = h2o.performance(regression.model,valid=T)
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(regression.model,10)

# random forest
------------------------------------------------------------------------
colnames(train)
y.dep = 4
x.dep = (1:29)[-4]

rforest.model <- h2o.randomForest(y=y.dep, x=x.dep, training_frame = train,validation_frame =


rforest.model

#extraction des résultats base de test


model = h2o.performance(rforest.model,valid=T)
model

#base apprentissage/test
#accuracy
h2o.accuracy(model)[h2o.accuracy(model)$accuracy==max(h2o.accuracy(model)$accuracy),]

#score f1
h2o.F1(model)[h2o.F1(model)$f1==max(h2o.F1(model)$f1),]

#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(model)

#base validation
#accuracy
accuracy = h2o.accuracy(h2o.performance(rforest.model,newdata = pred))
accuracy[accuracy$accuracy==max(accuracy$accuracy),]

#score f1
F1 = h2o.F1(h2o.performance(rforest.model, newdata = pred))
F1[F1$f1==max(F1$f1),]

#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(h2o.performance(rforest.model, newdata = pred))

#graphes
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(rforest.model,10)

#analyse ante/post accident


#sélection des variables

91 Bureau d’étude 2017 - 2018


colnames(train)
y.dep = 4
x.dep = (1:29)[c(-1,-2,-11,-13,-16,-18,-4)]

#nouveau modèle
rforest.model <- h2o.randomForest(y=y.dep, x=x.dep, training_frame = train,validation_frame =

#extraction des résultats base de validation


model = h2o.performance(rforest.model,newdata = pred)
model

#graphes
model = h2o.performance(rforest.model,valid=T)
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(rforest.model,10)

# gbm
------------------------------------------------------------------------
#sélection des variables
colnames(train)
y.dep = 4
x.dep = (1:29)[-4]

#mogèle glm
gbm.model = h2o.gbm(y=y.dep, x=x.dep, training_frame = train,validation_frame = test,distribut
gbm.model

#extraction des résultats base de test


model = h2o.performance(gbm.model,valid=T)
model

#base apprentissage/test
#accuracy
h2o.accuracy(model)[h2o.accuracy(model)$accuracy==max(h2o.accuracy(model)$accuracy),]

#score f1
h2o.F1(model)[h2o.F1(model)$f1==max(h2o.F1(model)$f1),]

#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(model)

#base validation
#accuracy
accuracy = h2o.accuracy(h2o.performance(gbm.model,newdata = pred))
accuracy[accuracy$accuracy==max(accuracy$accuracy),]

#score f1
F1 = h2o.F1(h2o.performance(gbm.model, newdata = pred))
F1[F1$f1==max(F1$f1),]

92 Bureau d’étude 2017 - 2018


#recall
h2o.recall(model)[h2o.recall(model)$tpr==max(h2o.recall(model)$tpr),]

#AUC
h2o.auc(h2o.performance(gbm.model, newdata = pred))

#graphes
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(gbm.model,10)

#analyse ante/post accident


#sélection des variables
colnames(train)
y.dep = 4
x.dep = (1:29)[c(-1,-2,-11,-13,-16,-18,-4)]

#nouveau modèle
gbm.model <- h2o.gbm(y=y.dep, x=x.dep, training_frame = train,validation_frame = test,distribu

#extraction des résultats base de validation


model = h2o.performance(gbm.model,newdata = pred)
model

#graphes
model = h2o.performance(gbm.model,valid=T)
plot(model,timestep = "AUTO", metric = "AUTO")
h2o.varimp_plot(gbm.model,10)

# tendorflow
------------------------------------------------------------------------
library(keras)
library(reticulate)
library(tensorflow)
library(lime)
library(tidyquant)
library(rsample)
library(recipes)
library(yardstick)
library(corrr)
library(stringi)
use_condaenv("r-tensorflow",required=T)

#données
#verification des données
training$grav = as.character(training$grav)
training$grav[training$grav=="victime"]="1"
training$grav[training$grav=="Indemne"]="0"
training <- training %>%
select(grav, everything())
glimpse(training)
testing$grav = as.character(testing$grav)
testing$grav[testing$grav=="victime"]="1"
testing$grav[testing$grav=="Indemne"]="0"

93 Bureau d’étude 2017 - 2018


testing <- testing %>%
select(grav, everything())
glimpse(testing)
validating_base$grav = as.character(validating_base$grav)
validating_base$grav[validating_base$grav=="victime"]="1"
validating_base$grav[validating_base$grav=="Indemne"]="0"
validating_base <- validating_base %>%
select(grav, everything())
glimpse(validating_base)

#decoupage de la base en base apprentissage/test/validation


# #decoupage de la base en base apprentissage/test/validation
train_tbl <- training
test_tbl <- testing
validating_tbl <- validating_base

#retraitement de la base de donnée


rec_obj <- recipe(grav ~ ., data = train_tbl) %>%
step_dummy(all_nominal(), -all_outcomes()) %>% ## step 1 dummy training
step_center(all_predictors(), -all_outcomes()) %>% ## step 2 center training
step_scale(all_predictors(), -all_outcomes()) %>% ## step 3 scale training
prep(data = train_tbl)

#variables explicatives
#Predictors
x_train_tbl <- bake(rec_obj, newdata = train_tbl)
x_test_tbl <- bake(rec_obj, newdata = test_tbl)
x_validating_tbl <- bake(rec_obj, newdata = validating_tbl)
x_train_tbl$grav = NULL;x_test_tbl$grav = NULL;x_validating_tbl$grav=NULL
x_train_tbl$age_X.100.110. = NULL;x_train_tbl$age_X.110.120. = NULL
x_test_tbl$age_X.100.110. = NULL;x_test_tbl$age_X.110.120. = NULL
x_validating_tbl$age_X.100.110. = NULL;x_validating_tbl$age_X.110.120. = NULL
glimpse(x_train_tbl);glimpse(x_test_tbl)

# Response variables for training and testing sets


y_train_vec <- ifelse(pull(train_tbl, grav) == "1", 1, 0)
y_test_vec <- ifelse(pull(test_tbl, grav) == "1", 1, 0)
y_validating_vec <- ifelse(pull(validating_tbl, grav) == "1", 1, 0)

#enlever les ages


#construction du reseau neuronal
model_keras <- keras_model_sequential()
model_keras %>%
# première couche cachée
layer_dense(
units = 16,
kernel_initializer = "uniform",
activation = "relu",
input_shape = ncol(x_train_tbl)) %>%
# couche Dropout pour éviter de surapprentissage
layer_dropout(rate = 0.1) %>%
# deuxième couche cachée
layer_dense(

94 Bureau d’étude 2017 - 2018


units = 16,
kernel_initializer = "uniform",
activation = "tanh") %>%
# couche Dropout pour éviter de surapprentissage
layer_dropout(rate = 0.1) %>%
# couche de sortie
layer_dense(
units = 1,
kernel_initializer = "uniform",
activation = "sigmoid") %>%
#we
# Compile ANN
compile(
optimizer = 'adam',
loss = 'binary_crossentropy',
metrics = c('accuracy')
)
model_keras

#calibration du modele
checkpoint <- callback_model_checkpoint(
filepath = "model.hdf5",
save_best_only = TRUE,
period = 1,
verbose = 1
)

early_stopping <- callback_early_stopping(patience = 11)

# Fit the keras model to the training data


fit_keras <- fit(
object = model_keras,
x = as.matrix(x_train_tbl),
y = y_train_vec,
batch_size = 5000,
epochs = 40,
validation_split = 0.30,callbacks = list(checkpoint, early_stopping),
verbose = getOption("keras.fit_verbose", default = 1)
)

# Print the final model


fit_keras

# Plot the training/validation history of our Keras model


plot(fit_keras) +
theme_tq() +
scale_color_tq() +
scale_fill_tq()

# Predicted Class
yhat_keras_class_vec_train <- predict_classes(object = model_keras, x = as.matrix(x_train_tbl)
as.vector()
yhat_keras_class_vec_test <- predict_classes(object = model_keras, x = as.matrix(x_test_tbl))

95 Bureau d’étude 2017 - 2018


as.vector()
yhat_keras_class_vec_validating <- predict_classes(object = model_keras, x = as.matrix(x_valid
as.vector()

# Predicted Class Probability


yhat_keras_prob_vec_train <- predict_proba(object = model_keras, x = as.matrix(x_train_tbl))
as.vector()
yhat_keras_prob_vec_test <- predict_proba(object = model_keras, x = as.matrix(x_test_tbl)) %>
as.vector()
yhat_keras_prob_vec_validating <- predict_proba(object = model_keras, x = as.matrix(x_validat
as.vector()

# Format test data and predictions for yardstick metrics


#app
estimates_keras_tbl_train <- tibble(
observation = as.factor(y_train_vec) %>% fct_recode(victime = "1", Indemne = "0"),
estimate = as.factor(yhat_keras_class_vec_train) %>% fct_recode(victime = "1", Indemne = "
class_prob = yhat_keras_prob_vec_train
)

#test
estimates_keras_tbl_test <- tibble(
observation = as.factor(y_test_vec) %>% fct_recode(victime = "1", Indemne = "0"),
estimate = as.factor(yhat_keras_class_vec_test) %>% fct_recode(victime = "1", Indemne = "0
class_prob = yhat_keras_prob_vec_test
)

#valid
estimates_keras_tbl_validating <- tibble(
observation = as.factor(y_validating_vec) %>% fct_recode(victime = "1", Indemne = "0"),
estimate = as.factor(yhat_keras_class_vec_validating) %>% fct_recode(victime = "1", Indemn
class_prob = yhat_keras_prob_vec_validating
)

options(yardstick.event_first = FALSE)

#confusion table
confusion_train = estimates_keras_tbl_train %>% conf_mat(observation, estimate)
summary(confusion_train, wide = TRUE)
confusion_test = estimates_keras_tbl_test %>% conf_mat(observation, estimate)
summary(confusion_test, wide = TRUE)
confusion_validating = estimates_keras_tbl_validating %>% conf_mat(observation, estimate)
summary(confusion_validating, wide = TRUE)
#
estimates_keras_tbl_train %>% roc_auc(observation, class_prob)
estimates_keras_tbl_train %>% f_meas(observation, estimate, beta = 1,na.rm=T)
estimates_keras_tbl_test %>% roc_auc(observation, class_prob)
estimates_keras_tbl_test %>% f_meas(observation, estimate, beta = 1,na.rm=T)
estimates_keras_tbl_validating %>% roc_auc(observation, class_prob)
estimates_keras_tbl_validating %>% f_meas(observation, estimate, beta = 1,na.rm=T)

# estimates_keras_tbl_validating %>% metrics(observation, estimate)

96 Bureau d’étude 2017 - 2018


#analyse post accident
------------------------------------------------------------------------
#sélection des données avant accident uniquement
training = select(training,c(-NB_pers,-Nb_veh,-choc,-obstacle,-int,-col))
testing = select(testing,c(-NB_pers,-Nb_veh,-choc,-obstacle,-int,-col))
validating_base = select(validating_base,c(-NB_pers,-Nb_veh,-choc,-obstacle,-int,-col))
# à partir de là on refait le travail effectué plus haut

# interpretation des modèles


------------------------------------------------------------------------
#sous h2O
#catv
training_base$catv = as.character(training_base$catv)

# irec(training_base,catv)
## Recodage de training_base$catv
training_base$catv[training_base$catv == "2"] <- "véhicule léger"
training_base$catv[training_base$catv == "1"] <- "deux roues"
training_base$catv[training_base$catv == "4"] <- "autre véhicule"
training_base$catv[training_base$catv == "3"] <- "véhicule utilitaire"
cross_plot(training_base, input="catv", target="grav")

#nb_pers
plotar(data=training_base, input=c('NB_pers'),target="grav", plot_type = "boxplot")

#obstacle
# irec(training_base,obstacle)
## Recodage de training_base$obstacle
training_base$obstacle <- as.character(training_base$obstacle)
training_base$obstacle[training_base$obstacle == "0"] <- "autre obstacle"
training_base$obstacle[training_base$obstacle == "1"] <- "piéton"
training_base$obstacle[training_base$obstacle == "2"] <- "véhicule"
training_base$obstacle[training_base$obstacle == "3"] <- "animal"
training_base$obstacle[training_base$obstacle == "4"] <- "obstacle fixe seul"
training_base$obstacle[training_base$obstacle == "5"] <- "obstacle fixe + mobile"
training_base$obstacle[training_base$obstacle == "9"] <- "autre obstacle"
cross_plot(training_base, input="obstacle", target="grav")

#agg
# irec(training_base,agg)
## Recodage de training_base$agg
training_base$agg <- as.character(training_base$agg)
training_base$agg[training_base$agg == "1"] <- "Hors agglomération"
training_base$agg[training_base$agg == "2"] <- "En agglomération"
cross_plot(training_base, input="agg", target="grav")

#manv
plotar(data=training_base, input="manv", target="grav", plot_type = "histdens")

# irec(training_base,manv)
training_base$manv <- as.character(training_base$manv)
training_base$manv[training_base$manv == "1"] <- "même sens, même file"
training_base$manv[training_base$manv == "2"] <- "en tournant"

97 Bureau d’étude 2017 - 2018


training_base$manv[training_base$manv == "3"] <- "en dépassant"
training_base$manv[training_base$manv == "4"] <- "déporté"
training_base$manv[training_base$manv == "5"] <- "autres"
cross_plot(training_base, input="manv", target="grav")

#col
training_base$col <- as.character(training_base$col)
training_base$col[training_base$col == "1"] <- "frontale"
training_base$col[training_base$col == "2"] <- "autre collision"
training_base$col[training_base$col == "3"] <- "sans collision"
cross_plot(training_base, input="col", target="grav")

#densite
plotar(data=training_base, input="densite", target="grav", plot_type = "boxplot")
cross_plot(training_base, input="densite", target="grav",auto_binning = T)

#mois
cross_plot(training_base, input="mois", target="grav")

#age
training_base$age = as.character(training_base$age)
training_base$age[training_base$age=="(10,20]"] = "(18,20]"
cross_plot(training_base, input="age", target="grav")

#plan
# irec(training_base,plan)
## Recodage de training_base$plan
training_base$plan <- as.character(training_base$plan)
training_base$plan[training_base$plan == "0"] <- "Non connue"
training_base$plan[training_base$plan == "1"] <- "partie rectiligne"
training_base$plan[training_base$plan == "2"] <- "en courbe à gauche"
training_base$plan[training_base$plan == "3"] <- "en courbe à droite"
training_base$plan[training_base$plan == "4"] <- "en S"
cross_plot(training_base, input="plan", target="grav")

#heure
cross_plot(training_base, input="heure", target="grav")

#explication du modele avec lime


class(model_keras)

# préparation à lime::model_type() function for keras


model_type.keras.models.Sequential <- function(x, ...) {
return("classification")
}

# Setup lime::predict_model() function for keras


predict_model.keras.models.Sequential <- function(x, newdata, type, ...) {
pred <- predict_proba(object = x, x = as.matrix(newdata))
return(data.frame(victime = pred, Indemne = 1 - pred))
}

# Test our predict_model() function

98 Bureau d’étude 2017 - 2018


predict_model(x = model_keras,newdata = x_validating_tbl, type = 'raw') %>%
tibble::as_tibble()

# Run lime() on training set


explainer <- lime::lime(
x = x_validating_tbl,
model = model_keras,
bin_continuous = FALSE)

# Run explain() on explainer


explanation <- lime::explain(
x_validating_tbl[1:10,],
explainer = explainer,
n_labels = 1,
n_features = 6,
kernel_width = 0.5)

#importance visualisation
plot_features(explanation) +
labs(title = "LIME Feature Importance Visualization",
subtitle = "Hold Out (Test) Set, First 10 Cases Shown")

99 Bureau d’étude 2017 - 2018


BIBLIOGRAPHIE

Bibliographie

[1] Documentation sur les OPEN DATA :


L., B. (2017) Open Data définition : Qu’est-ce que c’est ? À quoi ça sert ?, Disponible sur : https:
//www.lebigdata.fr/open-data-definition
CartoClic (2011) Mutualisation des applications développées dans le cadre de l’OpenData, Ca-
talogue des Applications OpenData, Disponible sur : https://openappstore.wordpress.com
HAAS Avocats (2017) PRGPD / GDPR : Règlement général sur la protection des données, Dispo-
nible sur : https://www.haas-avocats.com/nos-competences/avocat-rgpd
Scala Dream Team (2015) L’exploitation des données, Le blog, Disponible sur : https://www.
groupe-scala.com/theme/exploitation-donnees/
Tranié, J. (2018) Facebook, partie open data - Cambridge Analytica : un scandale en quatre
temps, Disponible sur : https://www.la-croix.com/Sciences-et-ethique/Numerique/
Facebook-Cambridge-Analytica-scandale-quatre-temps-2018-03-30-1200928123

[2] Documentation sur la SINISTRALITÉ AUTOMOBILE :


Association Prévention Routière (2016) Statistiques d’accidents, Disponible sur : https://www.
preventionroutiere.asso.fr/categorie/je-minforme/
Fédération Française de l’Assurance (2016) L’assurance automobile des particuliers en 2015, Dis-
ponible sur : https://www.ffa-assurance.fr/
Naudot, E. (2017) Statistiques des accidents de la route, Fiches-auto.fr, Disponible sur : http:
//www.fiches-auto.fr/essais-tests/
Accident de la route en France, Wikipédia Disponible https://fr.wikipedia.org/wiki/
Accident_de_la_route_en_France

[3] Documentation sur les T ENSORFLOW et K ERAS :


Keras (2017) Keras : The Python Deep Learning library, Disponible sur : https://keras.io/
TensorFlow, Site Officiel, Disponible sur : https://www.tensorflow.org/

[4] Documentation sur les MÉTRIQUES :


Joshi, R. (2016) Accuracy, Precision, Recall & F1 Score : Interpretation of
Performance Measures, Disponible http://blog.exsilio.com/all/
sur :
accuracy-precision-recall-f1-score-interpretation-of-performance-measures/

[5] Documentation sur le MODÈLE GLM :


Aillot, P. (2017) Le modèle GLM, Cours sur les modèles linéaires
Université de Toulouse (2016) Introduction au modèle linéaire général, Wiki Stat, Disponible
sur : https://www.math.univ-toulouse.fr/~besse/Wikistat/pdf/st-m-modlin-mlg.
pdf

100 Bureau d’étude 2017 - 2018


BIBLIOGRAPHIE

[6] Documentation sur les FORÊTS ALÉATOIRES :


Vaudor, L. (2015) Classification par forêts aléatoires, R-atique, Disponible sur : http://perso.
ens-lyon.fr/lise.vaudor/classification-par-forets-aleatoires/
Forêt d’arbres décisionnels, Wikipédia, Disponible sur : https://fr.wikipedia.org/wiki/
For%C3%AAt_d%27arbres_d%C3%A9cisionnels

[7] Documentation sur le M ODÈLE G RADIENT B OOSTING :


RAKOTOMALALA, R. (2016) Gradient Boosting : Technique ensembliste pour l’analyse prédictive
- Introduction explicite d’une fonction de coût, Disponible sur : http://eric.univ-lyon2.fr/
~ricco/cours/slides/gradient_boosting.pdf

[8] Documentation sur les RÉSEAUX DE NEURONES :


Université de Toulouse (2016) Réseaux de neurones, Wiki Stat, Disponible sur : https://www.
math.univ-toulouse.fr/~besse/Wikistat/pdf/st-m-app-rn.pdf
Vermet, F. (2017), Cours sur l’Apprentissage statistique

101 Bureau d’étude 2017 - 2018

Vous aimerez peut-être aussi