All posts by Arthur Charpentier

Arthur Charpentier, professor in Montréal, in Actuarial Science. Former professor-assistant at ENSAE Paristech, associate professor at Ecole Polytechnique and assistant professor in Economics at Université de Rennes 1.  Graduated from ENSAE, Master in Mathematical Economics (Paris Dauphine), PhD in Mathematics (KU Leuven), and Fellow of the French Institute of Actuaries.

Genre et tarification assurantielle: corrélation ou causalité?

L’article La tarification par genre en assurance, corrélation ou causalité ?, coécrit avec Katrien Antonio, devrait paraître dans les jours à venir dans Risques.

La segmentation en matière d’assurance évoque la classification qu’un assureur opère, selon différents critères, en vue de fixer la cotisation, de telle sorte qu’elle reflète, du mieux possible, le risque représenté par chaque assuré. On parlera ainsi de « segmentation tarifaire ». Et classiquement, les modèles économétriques de régression permettent de capturer les variables les plus corrélées avec la fréquence des sinistres, ou leur coût. Mais, comme le notait Davet [2015], « si la corrélation globale entre âge et coût du risque santé est indéniable, les relations de causalité sont moins simples qu’il n’y paraît ». La corrélation, pourtant importante, entre sinistralité et genre en assurance automobile ne peut plus être évoquée pour créer une discrimination tarifaire depuis décembre 2012*. Mais comme nous allons le voir, les objets connectés permettent de récupérer les vraies variables tarifaires (causales) dont le genre n’était alors qu’un proxy.

L’article reprend plusieurs de éléments Unraveling the Predictive Power of Telematics Data in Car Insurance Pricing, de Roel Verbelen, Katrien Antonio et Gerda Claeskens.

Actuarial Pricing Game, with Reinsurance

The Third Actuarial Pricing Game is still open, the deadline for submission is still February 25th. As mentioned in the instructions, for those willing to play in a market where reinsurance is available, here are the prices offered by some reinsurance company.

As mentioned in the description, the price is per insurance policy, per year. Players should send me their premiums in a csv file, gross of reinsurance, and mention in the email that they want to purchase treaty (A) – for instance (and mention explicitly in the object of the email that they want to play in this specific market, where reinsurance is available).

Les sondages et le bruit

Après les sondages pour les présidentielles l’été passé, on commence à crouler sous les sondages, en France, pour la prochaine élection présentielle. Avec les questions que ça induit. Et loin de moi l’idée de faire un billet sur les sondeurs sont des gros nuls, parce que c’est quand même plus compliqué que ça. Et il est normal de faire des erreurs, comme le rappelait  Ranganathan (2014). Et comme on m’a convié dans deux semaines à une table ronde sur les sondages, je me suis dit qu’il serait temps que je travaille un peu.

Même si ça semble être des banalités, les élections américaines et les élections en France sont très différentes.

Premier point, les 538 grands électeurs, contre un vote direct en France. Quand on estime la probabilité de gagner on obtient des choses très différentes.

On peut faire des simulations pour s’en rendre compte

simu=function(i){
n=1+2000
vote=sample(c("A","B"),size=n,replace=TRUE,prob=c(.51,.49))
region=sample(1:50,size=n,replace=TRUE)
france=mean(vote=="A")
us=aggregate(vote,by=list(region),function(x) mean(x=="A"))$x
prop=c(france,mean(us>1/2))
names(prop)=c("FR","US")
return(prop)
}
S=Vectorize(simu)(1:1e4)
plot(density(S[1,]))

En France, en interrogeant 2000 personnes, on a une très faible incertitude sur probabilités réelles, et dans 82% des scénarios, le candidats qui a 51% d’intention de vote est déclaré vainqueur.

> mean(S[1,]<.5)
[1] 0.1841

Aux Etats-Unis (ou disons une simulation d’une élection avec un collège électoral, avec ici 50 grands électeurs), c’est une autre histoire.

plot(density(S[2,]))

Dans un tiers des cas, on se trompe sur le vainqueur.

> mean(S[2,]<.5)
[1] 0.3319

Et la distribution de la couleur des grands électeurs peut être très volatile… allant de 30% à 70% pour A, alors la moitié du peuple a voté pour lui.

Deviner qui va gagner est un exercice manifestement compliqué aux Etats-Unis, à cause de ces grands électeurs. Et je ne parle pas du fait qu’estimer une probabilité très finement ne présage en rien du résultat final, comme  je l’avais dit dans un précédant billet.

Deuxième point, le nombre de candidats dans la course. Un simplifiant un peu, ils sont deux aux Etats-Unis, avec (quasiment) un vote en un tour, alors qu’en France, ils sont plus nombreux, avec un vote en deux tours, et une règle qui dit que seuls les deux premiers accèdent au second tour.

Commençons par le cas simple, avec quatre candidats, et une élection à un tour (à la majorité)

simu=function(i){
n=1+2000
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=c(.27,.26,.24,.23))
tb=table(vote)
return(names(which.max(tb)))
}
S=Vectorize(simu)(1:1e4)
barplot(table(S))

Pour passer au second tour, on imagine qu’il faut comprendre comment se passe le report des voix. On va supposer qu’il existe une espèce d’ordre, entre les candidats, A, B, C et D. Si son candidat ne passe pas le prochain tour, on vote pour un voisin. Autrement dit, A ne votera jamais pour C, ni pour D.  Mais si B est candidat, il votera pour lui. Par contre, si B a le choix entre A et C, on va supposer que l’électorat se partage en deux, entre A et C. Par contre, il ne votera jamais pour D.

simu=function(i){
n=1+2000
probabilite=c(.27,.26,.24,.23)
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=probabilite)
tb=table(vote)+rnorm(4)/1000
perdants=LETTERS[1:4][(rank(tb)%in%1:2)]
if(("A"%in%perdants)&("B"%in%perdants)) prob2=c(0,0,probabilite[2]+probabilite[3],probabilite[4])
if(("A"%in%perdants)&("C"%in%perdants)) prob2=c(0,probabilite[2]+probabilite[1]+probabilite[3]/2,0,probabilite[4]+probabilite[3]/2)
if(("A"%in%perdants)&("D"%in%perdants)) prob2=c(0,probabilite[2]+probabilite[1],probabilite[4]+probabilite[3],0)
if(("B"%in%perdants)&("C"%in%perdants)) prob2=c(probabilite[2]+probabilite[1],0,0,probabilite[4]+probabilite[3])
if(("B"%in%perdants)&("D"%in%perdants)) prob2=c(probabilite[1]+probabilite[2]/2,0,probabilite[3]+probabilite[2]/2+probabilite[4],0)
if(("C"%in%perdants)&("D"%in%perdants)) prob2=c(probabilite[1],probabilite[2]+probabilite[3],0,0)
vote=sample(c("A","B","C","D"),size=n,replace=TRUE,prob=prob2)
tb=table(vote)
return(LETTERS[which.max(tb)])
}
S=Vectorize(simu)(1:1e4)
barplot(table(S))

Le résultat est vraiment différent. Et la clé est le report des voix, entre les deux tours. Aussi, deviner qui va gagner est un exercice manifestement compliqué en France, à cause de ces deux tours.

Au delà des systèmes de votes, il existe quand même des similitudes, quand on parle d’incertitude dans les sondages. Classiquement, on pense au biais d’estimation. Parce qu’il correspond à ce que toute personne ayant fait un peu de statistiques (ce qui représentera bientôt la majorité des français, si j’en crois les réformes du programme du lycée) doit savoir (je n’ai pas dit compris). C’est le fameux « le sondage IFOP publié jeudi dans France-Soir a, quant à lui, été mené auprès de 1 046 personnes, soit une marge d’erreur d’environ 2,5 % » . Il s’agit de la marge d’erreur.

Mais ce n’est pas la seule source d’erreur, loin de là ! La base des sondages, c’est d’avoir un échantillon aléatoire de votants (au sens de personnes qui iront voter), et d’extrapoler ensuite sur la population entière, éventuellement en pondérant les réponses. Les poids sont là pour corriger de différences observables entre la population entière, et la population interrogée. Classiquement, on va utiliser des variables démographiques (âge, genre, profession, région, etc) dans la population des électeurs. Par exemple, si sur les listes électorales on a 50% d’hommes et 50% de femmes, mais que dans notre échantillon, il y a deux fois plus d’hommes que de femmes, on va généralement attribuer un poids de 2 pour les femmes, et de 1 pour les hommes afin de corriger. Malgré tout, on peut observer une différence entre les votes estimés, et la réalité le jour du vote. Une des raisons est que la population des votants peut être différente de celle des populations inscrites sur listes électorales. Si les hommes s’abstiennent beaucoup plus que les femmes, la correction utilisée ne suffira pas. C’est ce qu’on pourrait appeler une erreur de framing. Cette dernière correspond à l’erreur que l’on fait quand la population réelle et la population de l’échantillon diffère. L’exemple classique était lié à l’utilisation du téléphone pour constituer des listes de sondés. Avec cette méthode, les personnes sans téléphone (ou sur liste rouge) étaient systématiquement exclues.

Le second problème est le traitement des non-réponses. Si la non-réponse est un phénomène purement aléatoire, imprévisible, dans ce cas, ça va juste augmenter la variance. C’est ce qu’on observe sur l’exemple ci-dessous. Si tout le monde répond, on a

simu=function(i){
n=2000
vote=sample(c("A","B"),size=n,replace=TRUE,prob=c(.51,.49))
return(mean(vote=="A"))
}
S=Vectorize(simu)(1:1e4)

Supposons maintenant que 50% des gens ne répondent pas

simu=function(i){
n=2000
vote=sample(c("A","B",NA),size=n,replace=TRUE,prob=c(.51/2,.49/2,.5))
return(mean(vote[!is.na(vote)]=="A"))
}
S=Vectorize(simu)(1:1e4)

On a davantage de dispersion, mais on n’a pas de biais. Autrement dit, le nombre de cas où A est effectivement en tête sur le sondage est du même ordre de grandeur, avec ou sans non-réponse.

Par contre, si les électeurs de A ont davantage tendance à ne pas répondre, c’est une toute autre histoire

simu=function(i){
n=2000
vote=sample(c("A",NA,"B",NA),size=n,replace=TRUE,prob=c(.51*.8,.51*.2,.49*.9,.49*.1))
return(mean(vote[!is.na(vote)]=="A"))
}
S=Vectorize(simu)(1:1e4)

Autrement dit, si la non-réponse est liée au vote, on a un biais causé par la non-réponse. C’est le cas lorsque les personnes votant pour un des candidats n’osent pas révéler. C’est ce que montre très bien Fuchs, Bossert & Stukowski (2013).

Un autre exemple connu en sondage est lié à l’ordre des questions, comme le soulignait McFarland (1981), ou même les mots utilisés, pour reprendre Smith (1987). On peut rapprocher ce biais au biais dit de spécification, lorsqu’il y a une mauvaise compréhension de la question.

Enfin (et je m’arrêterais là), il reste un biais important, qui est un biais d’indécision, pour personnes indécises ou qui pourraient juste changer d’avis entre deux dates.

Compte tenu de tous ces biais, on voit qu’il est compliqué d’estimer l’erreur associée à un sondage. En tous cas, on se doute que le fameux « Le sondage IFOP publié jeudi dans France-Soir a, quant à lui, été mené auprès de 1 046 personnes, soit une marge d’erreur d’environ 2,5 % » implique une (forte) sous-estimation de l’incertitude. En fait, si on en croit Shirani-Mehr et al. (2016), la marge d’erreur pourrait être deux fois supérieure, avec un RMSE de ±7% sur l’intervalle de confiance et non pas ±3%. J’aurais donc tendance à croire que les sondages rajoutent essentiellement une information très bruitée dans le climat pré-élections.

Prédire ou Prévoir, réflexions (probablement) personnelles

Il y a quelques années, j’avais fait un billet où je m’énervais contre une phrase que j’avais entendu (“l’homme qui avait prédit la crise). Le point de départ était surtout un énervement lié au fait que beaucoup de journalistes vivent avec des oeillères (par exemple en associant “économiste” à “type à la télé qui parle d’économie“), et ne connaissent pas la diversité de la communauté des économistes (surtout que la pluralité n’est pas vraiment une vertue présente dans les grands médias, la manière dont sont présentés les différents candidats à la future élection présidentielle peut en être une illustration). Mais je m’écarte…. en fait, un de mes points portait sur l’utilisation du terme “prédit“.

Avec un peu de recul, je ne sais pas si la langue française à changé depuis, mais j’aurais envie de revenir sur ma distinction entre “prévoir” et “prédire“. Prévoir et prédire ont deux racines latines distinctes, prévoir venant du latin praevidere, et prédire de praedicere. Beaucoup notent que “prédire” a longtemps eu le sens de “prophétiser“, où l’annonce (de ce qui doit arriver) est souvent d’inspiration divine. En anglais, c’est presque plus compliqué (car il y a plus de synonymes) mais la même confusion existe. On peut retrouver “foretell” construit sur “fore” et “tell” (qui est à relier à une notion de prémonition), “forespell” construit sur “fore” et “spell” (on retroue la notion de sort, proche du néerlandais “voorspellen”), “foresee” construit sur “fore” et “see”, ou encore  “forecast“, dont on reparlera très bientôt. A côté de ces mots, construits sur le préfixe “fore”, il existe le mot “predict“, tiré du latin praedicere, construit sur “prae” ‎(avant, que l’on retrouvé dans “pré” en français) et “dicere” ‎(dire). Comme le note le dictionnaire, “predicted” a un sens proche de “foretold” mais “without the mystical flavour”. Bref, “prédit” a longtemps eu une connotation mystique, divine.

Pourtant, les deux semblent parfois être interchangeables. Au point que fin 2006, Le Devoir écrivait « parce que cette administration n’a pas su prévoir ce qui était prévisible, nous en sommes rendus à siéger à 6 h un lundi matin! ». “prévoir ce qui était prévisible” vaste programme, non ?

Si on reste sur l’anglais, on peut tenter une distinction. Par exemple “forecast“, c’est à dire “prévoir“, est associé aux ouvrages suivants, sur amazon.com

Autrement dit, “forecast” (ou “prévision“) correspond à un aspect temporel. On cherche à prévoir, à un instant donné https://latex.codecogs.com/gif.latex?t la valeur d’une variable https://latex.codecogs.com/gif.latex?x à une date ultérieur, disons https://latex.codecogs.com/gif.latex?t+h. Classiquement, on cherche (et ça sera notre “prévision”)

https://latex.codecogs.com/gif.latex?\mathbb{E}_t[X_{t+h}]=\mathbb{E}[X_{t+h}|x_t,x_{t-1},\cdots]

C’est pour cela que bon nombre de cours de séries temporelles, ou séries chronologiques sont des cours de “modèles de prévision“.

Mais on commence à voir arriver des ouvrages de “méthodes prédictives“, “predictive modeling“, proposant des “prédictions

Si on regarde de plus près, ces techniques sont utilisées non pas dans un contexte de séries temporelles, mais de données individuelles. Ici, on cherche à prévoir une variable d’intérêt https://latex.codecogs.com/gif.latex?y à l’aide de covariables (variables dites explicatives https://latex.codecogs.com/gif.latex?x_1,\cdots,x_k. La prédiction sera classiquement

https://latex.codecogs.com/gif.latex?\mathbb{E}_{\boldsymbol{x}}[Y]=\mathbb{E}[Y|x_1,\cdots,x_k]

Sur le graphique du taux d’imposition, en France

Voilà plusieurs années (en 2011) Landais, Piketty et Saez publiaient le graphique suivant, présentant le sytème fiscal, en France, avec l’évolution du taux global d’imposition, en fonction du revenu.

https://freakonometrics.hypotheses.org/files/2017/02/revol-fiscale.png

Il y a deux ans, Yves Guiard critiquait ce graphique (rappelant que “la conversion numérique/graphique obéit à certaines règles“) et proposait une version “correcte“, sous la forme

J’ai déjà dit – voilà plusieurs semaines – que cette vision dogmatique des règles de représentation graphique ne me plaisait pas. Mais le plus simple est peut être de reprendre la réponse de Thomas Piketty, sur cette critique (je me retrouve totalement dans le propos),

(je suis désolé de découvrir cette discussion aussi tard, Béatrice m’a posté un commentaire ce matin, qui pointait vers ces deux articles)

Mais essayons de regarder un peu plus en détails. Oui, si on utilise la représentation standard de la courbe, on retrouve le graphique suivant

avec les plus pauvres à gauche, et les plus riches à droites. On a ici un graphique où le même pas sur l’axe des abscisses correspond au même nombre d’individus. Les 10% les plus pauvres (bande verticale la plus à gauche) ont un taux moyen d’imposition de 40.46% alors qu’il est de 48.09% pour les 10% qui sont juste au dessus du salaire médian (bande juste à droite de 50%). Je ne reviendrais pas sur le débat de commencer le graphique à 0% (ce débat aurait du sens, j’en conviens, mais commencer à 0% et mettre du texte entre l’axe des abscisses et la courbe, c’est un peu tricher), mais si on respecte cette règle, on obtient

Mais ce n’est pas cette visualisation qui est retenue dans le livre de Landais, Piketty et Saez, mais plutôt quelque chose qui ressemble au graphique ci-dessous (je commence à 30% pour éviter d’avoir un billet trop long)

Ce graphique est (je pense) plus intéressant que le premier. Bon, bien sûr, il se rapproche de la courbe parfaite que tout statisticien qui se respecte essaye reproduire

mais surtout, il permet de tenir compte de l’hétérogénéité qui existe dans ce dernier décile. Histoire d’illustrer mon propos, je voudrais proposer une représentation alternative de celle de Landais, Piketty et Saez. Pour se faire, on va utiliser une information complémentaire (en ligne sur le site) à savoir le revenu moyen, par centile, dans la population (voire plus fin dans le centile le plus élevé)

L’idée sera d’utiliser en abscisse non pas un pourcentage de personnes, mais un pourcentage de richesse (un peu comme avec la courbe de Lorenz),

Par exemple sur le graphique ci dessus, la bande la plus à gauche ne représente pas 10% des français, mais la fraction de français les plus pauvres, qui totalisent 10% de la richesse totale. La bande la plus à droite, ce sont les français les plus riches, qui accumulent 10% de la richesse totale. On peut d’ailleurs être un peu plus éclairant (je pense) en mettant des bandes non pas tous les 10% du revenu cumulé, mais faire l’équivalent du premier graphique, avec 10% des français. Bien entendu, les 10% les plus pauvres possède un très faible pourcentage de la richesse totale. En fait, les 30% les plus pauvres possèdent, tous ensemble, 5% de la richesse totale. Alors que les 10% les plus riches possèdent un tiers de la richesse. C’est ce qu’on peut voir sur le graphique ci-dessous

Ce graphique est – je pense – juste, au sens des normes sémiologiques, et permet de faire passer le message du graphique initial.

Après, on peut tenter une vision qui irait encore plus loin, avec non plus un taux en abscisse, mais un niveau de richesse. Aussi, le taux d’imposition, en fonction du revenu brut mensuel (sur une échelle logarithmique) ressemble au graphique ci-dessous

Install R Packages on the Ubuntu Virtual Machine

For the (Advanced) R Crash Course of the Data Science for Actuaries program, we will use the Ubuntu virtual machine. There might be some issues when installing some packages… One trick can be to open a terminal

and then to use the sudo command, to install some packages,

(after entering the password). Just type (or copy/paste)

sudo apt-get install libcurl4-openssl-dev
sudo apt-get install libxml2-dev
sudo apt-get install openjdk-7-*
update-alternatives --config java
sudo apt-get install aptitude
sudo aptitude install libgdal-dev
sudo aptitude install libproj-dev
sudo apt-get install curl
sudo apt-get build-dep r-cran-rgl
sudo apt-get install r-cran-plyr r-cran-xml r-cran-reshape r-cran-reshape2 r-cran-rmysql
sudo apt-get install r-cran-rjava

Then, in RStudio, enter

install.packages("RCurl")
install.packages("xml")
install.packages("rJava")
install.packages("rgdal")
install.packages("xlsx")

It should be fine…

Material for the Course on Inequality

Here is the video that we discussed during the first course,

References for the course are the following,

For similar course lectures notes, see Emmanuel Flachaire’s ECON-473 webpage, as well as Michel Lubrano’s notes.

For the project, some references in French,

and in English

There is also the following report (one can focus only on a chapter of the report)

 

Graduate Course on Advanced Methods in Econometrics

I will give a short graduate course for PhD students, in Rennes, on Thurday mornings, in March (2nd, 9th, 23rd and 30th). The agenda will be

  1. Nonlinear Regression Models and Smoothing Techniques

  2. Bootstrapping and Regression

  3. Penalized Regression Models and LASSO

  4. Quantile Regression and Expectiles

There will be slides available by the end of February.

 

Third Actuarial Pricing Game

With the support of ACTINFO Chair and the (French) Institute of Actuaries, our Third Actuarial Pricing Game starts today ! There is a toolbox file available online, with

  • a description of the game : the rules, the dates, and a description of the datasets
  • 3 datasets : one underwriting and one claims databases, for year 0 (training data) and one underwriting dataset to enter the game

Anyone can play. Students from various programs around the world, as well as practitioners are welcome to play. It can be by teams, and there are no limit on the size. And there is no registration: to start playing, teams have to submit a dataset before the deadline (end of February), to pricing-game@univ-rennes1.fr.

Teasing for the Third Actuarial Pricing Game

We will launch within the next few days the Third Actuarial Pricing Game. The goal will be to replicate the behavior of insurance markets over time. There will be a first stage (January-February) where players will have to build a pricing model for motor insurance policies on the basis of 50,000 contracts observed Year 0 (characteristics of contracts, policyholder, and claims datasets). Proposals for premiums for Year 1 will have to be provided for the same contracts (updated for the age, the location, the car model, etc.). Players will use only the underwriting datasets to provide premiums for Year 1.

Between February 25th (deadline for the proposal for premiums) and March 1st, we will replicate an insurance market by creating competition among insurers (players), and by setting simple rules to match drivers and insurers (randomly among the cheapest at the beginning of the game, and then, as time goes by, we will add inertia, i.e. a tendency to stay with the same insurer if the latter is not too expensive). Once the drivers and the playees are matched we will provide claims information for the insured that each player has won. A new premium proposal must then be submitted at the end of Year 1 (i.e. at the end of March). Etc.

We will here try to replicate the a car insurance market over four years. The goal (for players) will be to maximize the profit of the insurance company over those four years. To make the game more realistic, insurers are assumed to have capital, and they can remain in the game only if their yearly loss ratio (claims over premium) is less than 150%. More information next week (rules, and training datasets).