This Thursday, we will be in Québec city, for the Second Workshop on Fairness and Discrimination in Insurance.
Tag Archives: Québec
Save the date, May 16th
In one week, we organize our Second Workshop on Fairness and Discrimination in Insurance 2024, in Québec.
Fairness and discrimination, PhD Course, #1 Motivation
This week, we will start our MAT998P course, in Montréal, entitled “équité et discrimination des modèles prédictifs“. It will mainly be based on the forthcoming textbook,
I can also mention the R package
> library(devtools)
> install_github("freakonometrics/InsurFair")
And because it is the first course, this week, I will start with some motivations this week… First of all, let me recall a definition, from Schauer (2006)
To be an actuary is to be a specialist in generalization, and actuaries engage in a form of decision making that is sometimes called actuarial. Actuaries guide insurance companies in making decisions about large categories that have the effect of attributing to the entire category certain characteristics that are probabilistically indicated by membership in the category, but that still may not be possessed by a particular member of the category.
Motivation #1 Redlining
In 1937, the HOLC (Home Owners’ Loan Corporation) produced the following map of Philadelphia, related to “residential security”
These maps were related to concept of “redlining”. According to Merriam Webster dictionary,
to redline is (1) to withhold home-loan funds or insurance from neighborhoods considered poor economic risks; (2) to discriminate against in housing or insurance.
On the (fictitious) maps below, we have three variables, ploted
- some red and green areas (risky-non risky)
- some unsanitary index (on a 0-100 scale)
- the proportion of Black inhabitants per neiborhood
In an insurance context, risky areas (with a higher premium) should be correlated with unsanitarity index (or any risk-related variable), and those variables are legitimate predictive variables. But they can also be related to less-legitimate variable, that could be racial, here. The challenge here is that a lot of variables are correlated…
I could mention here that, for Glenn (2000), insurer’s risk selection process has two sides:
- the one presented to regulators and policyholders (numbers, statistics and objectivity),
- the other presented to underwriters (stories, character and subjective judgment).
The rhetoric of insurance exclusion – numbers, objectivity and statistics – forms what Brian Glenn calls
the myth of the actuary (…) a powerful rhetorical situation in which decisions appear to be based on objectively determined criteria when they are also largely based on subjective ones (…) or the subjective nature of a seemingly objective process.
Glenn (2003) claimed that there are many ways to rate accurately. Insurers can rate risks in many different ways depending on the stories they tell on which characteristics are important and which are not.
The fact that the selection of risk factors is subjective and contingent upon narratives of risk and responsibility has in the past played a far larger role than whether or not someone with a wood stove is charged higher premiums (…) virtually every aspect of the insurance industry is predicated on stories first and then numbers
Motivation #2. “Gender directive”, 2004/113/EC
From the Treaty on European Union (26.10.2012)
Art. 2 The Union is founded on the values of respect for human dignity, freedom, democracy, equality, the rule of law and respect for human rights, including the rights of persons belonging to minorities. These values are common to the Member States in a society in which pluralism, non-discrimination, tolerance, justice, solidarity and equality between women and men prevail.
Art. 3 (…) It shall combat social exclusion and discrimination, and shall promote social justice and protection, equality between women and men, solidarity between generations and protection of the rights of the child.
from the Charter of Fundamental Rights of the European Union (18.12.2000)
Art. 21 (Non discrimination): Any discrimination based on any ground such as sex, race, colour, ethnic or social origin, genetic features, language, religion or belief, political or any other opinion, membership of a national minority, property, birth, disability, age or sexual orientation shall be prohibited.
Art. 23 (Equality between men and women) Equality between men and women must be ensured in all areas, including employment, work and pay. The principle of equality shall not prevent the maintenance or adoption of measures providing for specific advantages in favour of the under-represented sex.
and from the EU Directive 2004/113/EC (2004 version)
Art. 5 (Actuarial factors)
1. Member States shall ensure that in all new contracts concluded after 21 December 2007 at the latest, the use of sex as a factor in the calculation of premiums and benefits for the purposes of insurance and related financial services shall not result in differences in individuals’ premiums and benefits.
2. Notwithstanding paragraph 1, Member States may decide before 21 December 2007 to permit proportionate differences in individuals’ premiums and benefits where the use of sex is a determining factor in the assessment of risk based on relevant and accurate actuarial and statistical data. The Member States concerned shall inform the Commission and ensure that accurate data relevant to the use of sex as a determining actuarial factor are compiled, published and regularly updated.
There was initially (2004) an opt-out clause (Article 5(2)), since, where gender is a determining factor in the assessment of
risk based on relevant and accurate actuarial and statistical
data then proportionate differences in individual premiums or
benefits are allowed.
In March 2011, the European Court of Justice issued its judgement into the “Test-Achats case”. The ECJ ruled Article 5(2) was invalid. Thus, insurers were no longer able to use gender as a risk factor when pricing policies.
Other legal documents in Europe can be mentioned such that the “Ten Oever” judgement (Gerardus Cornelis Ten Oever v Stichting Bedrijfspensioenfonds voor het Glazenwassers — en Schoonmaakbedrijf). In April 1993, the Advocate General Vangerven argued that (see De Baere (2012))
the fact that women generally live longer than men has no significance at all for the life expectancy of a specific individual and it is not acceptable for an individual to be penalized on account of assumptions which are not certain to be true in his specific case,
which could be related to the concept of “injustice by generalization”.
Motivation #3. Colorado (September 27, 2023)
In September 27, 2023, the Colorado Division of Insurance exposed a new proposed regulation entitled Concerning Quantitative Testing of External Consumer Data and Information Sources, Algorithms, and Predictive Models Used for Life Insurance Underwriting for Unfairly Discriminatory Outcomes.
Section 4 (Definitions) Bayesian Improved First Name Surname Geocoding, or “BIFSG” means, for the purposes of this regulation, the statistical methodology developed by the RAND corporation for estimating race and ethnicity.
External Consumer Data and Information Source, or “ECDIS” means, for the purposes of this regulation, a data source or an information source that is used by a life insurer to supplement or supplant traditional underwriting factors. This term includes credit scores, credit history, social media habits, purchasing habits, home ownership, educational attainment, licensures, civil judgments, court records, occupation that does not have a direct relationship to mortality, morbidity or longevity risk, consumer-generated Internet of Things data, biometric data, and any insurance risk scores derived by the insurer or third-party from the above listed or similar data and/or information source.
Then we have different sections, where insurers are asked to “estimate” the race or ethnicity of policyholders
Section 5 (Estimating Race and Ethnicity) : Insurers shall estimate the race or ethnicity of all proposed insureds that have applied for coverage on or after the insurer’s initial adoption of the use of ECDIS, or algorithms and predictive models that use ECDIS, including a third party acting on behalf of the insurer that used ECDIS, or algorithms and predictive models that used ECDIS, in the underwriting decision-making process, by utilizing:
1. BIFSG and the insureds’ or proposed insureds’ name and geolocation information included in the applications) for life insurance shall be used to estimate the race and ethnicity of each insured or proposed insured.
2. For the purposes of BIFSG, the following racial and ethnic categories shall be used: Hispanic, Black, Asian Pacific Islander (API), and White.
Section 6 (Application Approval Decision Testing Requirements) : Using the BIFSG estimated race and ethnicity of proposed insureds and the following methodology, insurers shall calculate whether Hispanic, Black, and API proposed insureds are disapproved at a statistically significant different rate relative to White applicants for whom the insurer, or a third party acting on behalf of the insurer, used ECDIS, or an algorithm or predictive model that used ECDIS, in the underwriting decision-making process.
1. Logistic regression shall be used to model the binary underwriting outcome of either approved or denied.
2. The following factors may be accounted for as control variables in the regression model: policy type, face amount, age, gender, and tobacco use.
3. The estimated race or ethnicity of the proposed insureds shall be accounted for by including Hispanic, Black, and Asian Pacific Islander (API) as separate dummy variables in the regression model.
4. Determine if there is a statistically significant difference in approval rates for each BIFSG estimated race or ethnicity variable as indicated by a p-value of less than .05.
a. If there is not a statistically significant difference in approval rates, no further testing is required.
b. If there is a statistically significant difference in approval rates, the insurer shall determine whether the difference in approval rates is five (5) percentage points or greater as indicated by the marginal effects value of each BIFSG estimated race or ethnicity variable. (…)
or
Section 7 (Premium Rate Testing Requirements) : Using the insureds’ BIFSG estimated race and ethnicity, insurers shall determine if there is a statistically significant difference in the premium rate per $1,000 of face amount for policies issued to Hispanic, Black, and API insureds relative to White insureds for whom the insurer, or a third party acting on behalf of the insurer, used ECDIS, or an algorithm or predictive model that used ECDIS, in the underwriting decision-making process.
1. Linear regression shall be used to model the continuous numerical outcome of premium rate per $1,000 of face amount.
2. The following factors may be accounted for as control variables in the regression model: policy type, face amount, age, gender, and tobacco use.
3. The estimated race or ethnicity of the proposed insureds shall be accounted for by including Hispanic, Black, and Asian Pacific Islander (API) as separate dummy variables in the regression model.
4. Determine if there is a statistically significant difference in the premium rate per $1,000 of face amount for each BIFSG estimated race or ethnicity variable as indicated by a p-value of less than .05.
a. If there is not a statistically significant difference in premium rate per $1,000 of face amount, no further testing is required.
b. If there is a statistically significant difference in premium rate per $1,000 of face amount, determine whether the premium rate per $1,000 of face amount is at least 5% more than the average premium rate per $1,000 for all policies.
i. If the difference in premium rate per $1,000 of face amount is less than 5%, no further testing is required.
ii. If the difference in premium rate per $1,000 of face amount is 5% or greater, further testing is required as described in Section 8.
(etc). In order to illustrate, we can use some data, in the region of Atlanta
We can change the first and last name of people (and keep other relevant information, including the ZIP code) and compare “predictions” of race (white, black, hispanic, asian, etc)
Motivation #4. Motor Insurance in the U.S.
In the context of motor insurance in the U.S., recall that legal restrictions are per states, and we can observe some diversity about what “sensitive” could mean (via thezebra)
(etc). We will also discuss Avraham et al. (2013) that provides a long discussion accross US states.
Motivation #5. Graduate Admission (UC Berkeley)
Another motivation is the popular article, (1975)
The dataset mentioned in the article is the following
the bias in the aggregated data stems not from any pattern of discrimination on the part of admissions committees, which seems quite fair on the whole, but apparently from prior screening at earlier levels of the educational system. Women are shunted by their socialization and education toward fields of graduate study that are generally more crowded, less productive of completed degrees, and less well funded, and that frequently offer poorer professional employment prospects
As we can see, if we formalize, we have (almost)
This is Simpson’s paradox. Another simple example is related to mortality : the (overall) mortality rate for women (picked at random in the entiere population) was 0.812% in Costa Rica, lower than 0.929% in Sweden. But as we can see on the left, below, at any age, mortality rates are lower in Sweden than in Costa Rica.
The paradox can easily be explained if we look at age structures in both countries. Long story short, in Costa Rica, picking someone randomly means that the person is very likely to be (very) young, with a low mortality rate; in Sweden, the person is more likely to be older, with a higher mortality rate.
Motivation #6. Propublica, Actuarial Justice
We will also mention actuarial justice, and et al (2016)
Hence, looking at the same data, with difference perspective, could lead to different conclusions. More robust conclusions can be obtained when look at distributions of scores (instead of simple binary predictions)
and we can also consider temporal process (again, instead of simply binary variables, with temporal censoring)
Motivation #7. Insurance in Québec
Two final motivations, in French this time. In Québec, there is the Charte des droits et libertés de la personne (C-12) with some very clear definition of what “discrimination” means,
Art. 10 Toute personne a droit à la reconnaissance et à l’exercice, en pleine égalité, des droits et libertés de la personne, sans distinction, exclusion ou préférence fondée sur la race, la couleur, le sexe, l’identité ou l’expression de genre, la grossesse, l’orientation sexuelle, l’état civil, l’âge sauf dans la mesure prévue par la loi, la religion, les convictions politiques, la langue, l’origine ethnique ou nationale, la condition sociale, le handicap ou l’utilisation d’un moyen pour pallier ce handicap.
Il y a discrimination lorsqu’une telle distinction, exclusion ou préférence a pour effet de détruire ou de compromettre ce droit.
But, interestingly, insurers can almost do anything they want,
Art 20.1 Dans un contrat d’assurance ou de rente, un régime d’avantages sociaux, de retraite, de rentes ou d’assurance ou un régime universel de rentes ou d’assurance, une distinction, exclusion ou préférence fondée sur l’âge, le sexe ou l’état civil est réputée non discriminatoire lorsque son utilisation est légitime et que le motif qui la fonde constitue un facteur de détermination de risque, basé sur des données actuarielles.
Motivation #8. Intention
And finally, I can mention that in many countries (such as France), “indirect discrimination” is considered as discriminatory, so “intention” has nothing to do with the problem… The Loi no 2008-496 du 27 mai 2008 states that
Art. 1 Constitue une discrimination indirecte une disposition, un critère ou une pratique neutre en apparence, mais susceptible d’entraîner, pour l’un des motifs mentionnés au premier alinéa, un désavantage particulier pour des personnes par rapport à d’autres personnes, à moins que cette disposition, ce critère ou cette pratique ne soit objectivement justifié par un but légitime et que les moyens pour réaliser ce but ne soient nécessaires et appropriés.
This law is an extension of Loi no. 72-546 du 1er juillet 1972, which abolished the requirement for specific intent.
Again, following Avraham (2017), keep in mind that insurance is very specific, regarding discrimination
What is unique about insurance is that even statistical discrimination which by definition is absent of any malicious intentions, poses significant moral and legal challenges. Why? Because on the one hand, policy makers would like insurers to treat their insureds equally, without discriminating based on race, gender, age, or other characteristics, even if it makes statistical sense to discriminate (…) On the other hand, at the core of insurance business lies discrimination between risky and non-risky insureds. But riskiness often statistically correlates with the same characteristics policy makers would like to prohibit insurers from taking into account.
That will be the topic of the course…
Time for a (short) break
Segmentation et Mutualisation en Assurance, à Québec
Cet après midi, je donnerais un exposé à l’Université Laval à Québec. Je suis ravi d’y retourner, surtout que ca sera (au moins) mon cinquième exposé sur ce campus, dans quatre départements différents (actuariat, statistique, informatique, une nouvelle fois au département de Finance, Assurance et Immobilier de la Faculté des Sciences d’Administration).
Les transparents de l’exposé sont en ligne.
Elections Sans Bipartisme
Hier, sur Twitter, @JF_Godbout partageait un joli graphique relatif aux élections québécoises, avec les nombres de votes obtenus (ici en pourcentage des votes totaux) et le pourcentage de sièges que cela donne,
Il faut dire qu’hier, c’était jour d’élection. Ce sont des élections à un tour, avec plusieurs partis (disons 4 grands partis si on se limite aux élections les plus récentes). Jusqu’à lundi, le PQ (Parti Québécois) avait une majorité (relative), et depuis lundi, le PLQ (Parti Libéral) est revenu au pouvoir. Et il y a à côté de ces deux grands partis d’autres partis, que l’on va regrouper. @JF_Godbout m’ayant envoyé ses données, j’ai pu reproduire les graphiques.
La grande différence ici, entre nos approches est – je pense – la méthode de lissage: alors que @JF_Godbout faisait des régressions locales, j’ai opté pour des splines.
reg=glm(Seat~bs(Election),data=d,family=binomial) yp=predict(reg,newdata=data.frame(Election=1970:2015),type="response")
J’utilise des splines parce que ça se généralise facilement à d’autres lois, et qu’on peut aussi les utiliser quand on régresse sur plusieurs variables continues. Si on rajoute les résultats de l’élection de lundi, on obtient le graphique suivant
Ce qui me gêne dans cette modélisation, c’est qu’on considère nos trois dernières régressions comme indépendantes…. alors que ce n’est pas le cas: on a trois modalités possibles, et la somme doit forcément faire 1. D’ailleurs, quand on somme les prédictions, on dépasse 1.
Avec deux partis, notre régression logistique nous garantie d’avoir une somme à un, mais plus ici. A moins d’utiliser un modèle multinomial. Si on oublie le lissage, l’idée est d’écrire
qui est tout simplement l’extension du modèle logistique. La difficulté technique est que, sous R, quand on fait une régression logistique, la variable d’intérêt doit être une variable prenant trois facteurs, et non pas un vecteur de probabilités. Au lieu d’utiliser des taux, ou des pourcentages, je devrais utiliser des nombres d’observations de chaque modalités. On va donc crééer une fausse base
> vote=data.frame( + plq=plq$Vote, + pq=pq$Vote, + autre=autre$Vote, + Election=pq$Election) > vote plq pq autre Election 1 0.5465 0.3022 0.1513 1972 2 0.3378 0.4137 0.2485 1976 3 0.4608 0.4926 0.0466 1981 4 0.5599 0.3869 0.0532 1985 5 0.4995 0.4016 0.0989 1989 6 0.4440 0.4475 0.1085 1994 7 0.4355 0.4287 0.1358 1998 8 0.4599 0.3324 0.2077 2003 9 0.3308 0.2835 0.3857 2007 10 0.4208 0.3517 0.2275 2008 11 0.3120 0.3195 0.3685 2012 12 0.4140 0.2538 0.3312 2014 > M=t(round(vote[,1:3]*1000)) > M [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] plq 546 338 461 560 500 444 436 460 331 421 312 414 pq 302 414 493 387 402 448 429 332 284 352 320 254 autre 151 249 47 53 99 108 136 208 386 227 368 331
On réplique alors autant de fois le nom du parti qu’on a de (pseudo) votes
> Y=X=NULL > for(i in 1:3){ + for(j in 1:ncol(M)){ + Y=c(Y,rep(c("PLQ","PQ","Autre")[i],M[i,j])) + X=c(X,rep(pq$Election[j],M[i,j])) + }} > basev=data.frame(Y=as.factor(Y),X=X)
C’est un peu artificiel, j’en conviens, mais ça marche… On peut alors faire la régression
> library(nnet) > regv=multinom(Y~bs(X),data=basev) # weights: 15 (8 variable) initial value 13186.643301 iter 10 value 12241.931805 final value 12221.591172 converged
et des prévisions
> ypv=predict(regv,newdata= + data.frame(X=1973:2014),type="probs") > ypv Autre PLQ PQ 1 0.18426281 0.4705415 0.3451957 2 0.16051060 0.4767408 0.3627486 3 0.14149153 0.4805514 0.3779571 4 0.12631826 0.4826100 0.3910718 5 0.11426236 0.4834165 0.4023212 6 0.10474046 0.4833543 0.4119053 7 0.09729304 0.4827117 0.4199953 8 0.09156246 0.4817016 0.4267360 9 0.08727323 0.4804776 0.4322491 10 0.08421535 0.4791477 0.4366370 11 0.08223095 0.4777835 0.4399855 12 0.08120364 0.4764292 0.4423672 13 0.08105030 0.4751066 0.4438431 14 0.08171457 0.4738203 0.4444651
Et on notera que cette fois, nos prévisions somment à un.
Cela dit, visuellement, on obtient des choses proches de ce qu’on avait auparavant,
mais intellectuellement, je trouve plus logique d’utiliser autre chose que des régressions logistiques quand on est dans une élection où plusieurs partis sont en compétition.
W.I.M. in Québec City
This Friday, the thrid Workshop on Insurance Mathematics will take place in Québec City.
Paul et le Québec
En mai 2004, j’étais à Québec pour une grosse conférence. Je me souviens avoir flâné dans les librairies, à la recherche de productions locales, en musique, et en bande dessinées. Le premier EP d’Arcade Fire était sorti, et (l’incroyable) Funeral allait sortir quelques mois plus tard, mais il allait falloir attendre la naissance de ma fille pour que j’achète les deux albums (étrangement, j’ai beaucoup écouté Arcade Fire à la naissance de ma fille, et je ne peux m’empêcher d’associer les deux). J’avais en revanche ramené dans mes valises Yanqui U.X.O. de Godspeed You! Black Emperor (je ne pouvais me douter que ça serait un tel choc, et aussi un sujet de discussion presque sans fin avec celui qui a été plusieurs années mon voisin, à Montréal). Mais je m’égare…. En 2004, j’avais ramené pas mal de titres des 400 coups et de La Pastèque, dont Paul en appartement qui venait de sortir. J’ai dévoré le titre pendant la conférence (pas pendant les exposés, c’était une de ces conférences incroyables où j’étais absorbé du premier au dernier exposé, où j’en rencontré beaucoup de monde, dont plusieurs futurs collaborateurs), et j’ai acheté dans la foulée les deux premiers, Paul à la campagne (sorti en 1998) et Paul a un travail d’été (en 2002). Il m’aura fallu plusieurs séjours au Québec pour comprendre certaines subtilités (dont un certain nombre d’expressions), mais j’ai fini par devenir un inconditionnel. Et justement, pour les fêtes, et pour célébrer les 15 ans du titre, une version format géant, et colorié de Paul à la campagne est sorti (il semble qu’en France, seul l’édition en noir et blanc soit disponible). Et ma femme l’a eut pour Noël… Une fois qu’elle l’avais lu, je me suis permis de lui emprunter. Pour faire simple et rapide, j’adore cette version couleur. On a l’impression de livre une BD de style BD belge telle que je l’adore, genre Yves Challand. Mais du Challand très québécois ! Avec beaucoup de nostalgie en plus… Ce n’est pas du même ordre qu’Approximativement, qui reste un gros choc de lecture (pseudo) autobiographique. J’étais peut-être aussi content de trouver une forme de relève à Monsieur Jean, que j’avais beaucoup aimé. En y repensant, la lecture de Paul est indissociable (dans ma mémoire) de la lecture du pavé Blankets de Craig Thompson (que j’ai du découvrir à la même époque, en français tout d’abord, avant de le lire enfin en version originale quelques années plus tard). Ce n’est pas comme relire les vieux Astérix ou écouter Patchanka (où je repense immanquablement aux lectures de mon enfance, chez mes grands-parents pour les premiers, ou sur mon walkman dans la voiture pour aller chez mes grands-parents, justement, pour le dernier). Je revois ici des situations pour lesquelles je ne peux m’empêcher de faire des parallèles avec d’autres que j’ai vécues. Et c’est une forme de nostalgie très agréable… Bref, cette version en couleur m’a enchanté ! et les enfants ont aussi beaucoup aimé, pour mon plus grand plaisir… Et comme le titre ne semble pouvoir se trouver qu’au Canada, je ne peux qu’encourager tous les français (de France) à venir faire un tour au Québec pour l’acheter…
Prévision des vente de voitures au Québec
Après discussion, la date limite pour me renvoyer le second devoir est fixée à vendredi 5 octobre midi, par courriel. Je veux un fichier pdf par équipe, avec une page de garde indiquant le nom des membres du groupe, et le mot clé retenu.
Maintenant, je vais en profiter pour mettre en ligne le code tapé de matin, en cours. On avait travaillé sur la modélisation de la série des ventesde voiture, au Québec. La série est en ligne,
X=read.table( "http://freakonometrics.blog.free.fr/public/ data/car-sales-quebec.csv", header=TRUE,sep=";",nrows=108) Xt=ts(X[,2],start=c(1960,1),frequency=12)
On peut regarder l’évolution de cette série temporelles (car les dessins, et la visualisation, c’est important),
plot(Xt)
On note une tendance linéaire (ou qu’on pourrait supposer linéaire), que l’on va estimer,
X=as.numeric(Xt) temps=1:length(X) base=data.frame(temps,X) reg=lm(X~temps)
et que l’on pourra représenter
plot(temps,X,type="l",xlim=c(0,120)) abline(reg,col="red")
Si on veut une série stationnaire (et c’est effectivement ce que l’on cherche), on va retrancher cette tendance à notre série, et travailler sur la série résiduelle.
La série résiduelle est ici
Y=X-predict(reg) plot(temps,Y,type="l")
que l’on devrait pouvoir supposer stationnaire. Classiquement, on regarde les autocorrélations,
acf(Y,36,lwd=4)
où on repère un beau cycle annuel, mais on va surtout utiliser les autocorrélations partielles pour identifier l’ordre de la composante autorégressive.
pacf(Y,36,lwd=4)
La 12ème est non-nulle, et tous les autres ensuite sont significativement nulles (ou presque). On va donc tenter un .
> fit.ar12=arima(Y,order=c(12,0,0)) > fit.ar12 Series: Y ARIMA(12,0,0) with non-zero mean Coefficients: ar1 ar2 ar3 ar4 ar5 ar6 ar7 0.1975 0.0832 -0.1062 -0.1212 0.1437 -0.1051 0.0319 s.e. 0.0838 0.0809 0.0826 0.0843 0.0850 0.0833 0.0854 ar9 ar10 ar11 ar12 intercept -0.0332 -0.0616 0.2635 0.4913 -148.3180 s.e. 0.0853 0.0840 0.0840 0.0841 384.5095 sigma^2 estimated as 2177974: log likelihood=-946.75 AIC=1921.51 AICc=1926.03 BIC=1959.06
La douzième composante semble significative, si on repense au test de Student,
u=seq(-6,6,by=.1) plot(u,dnorm(u),type="l") points(0.4913/0.0841,0,pch=19,col="red")
En revanche, la huitième ne l’est pas
points(-0.1018/0.0847,0,pch=19,col="blue")
(voilà pour le petit retour sur la lecture des tests). Vérifions maintenant que le bruit résiduel est bien blanc… Si on regarde les autocorrélations
acf(residuals(fit.ar12),36,lwd=4)
Mais ce n’est pas un test de bruit blanc. En particulier, si une autocorrélation semblerait significative, on pourrait accepter que – globalement – les autocorrélations soient très proches de 0. On va alors faire des tests de Box-Pierce
> Box.test(residuals(fit.ar12),lag=12, + type='Box-Pierce') Box-Pierce test data: residuals(fit.ar12) X-squared = 7.7883, df = 12, p-value = 0.8014
Pour l’interpétation du test, c’est toujours pareil: on a une statistique de l’ordre de 7, et la loi sous-jacente (la somme des carrés des 12 premières autocorrélations du bruit) est une loi du chi-deux, à 12 degrés de liberté,
u=seq(0,30,by=.1) plot(u,dchisq(u,df=12),type="l") points(7.7883,0,pch=19, col="red")
On accepte l’hypothèse que les 12 premières autocorrélations soient nulles. Si on va un peu plus loin,
> Box.test(residuals(fit.ar12),lag=18, + type='Box-Pierce') Box-Pierce test data: residuals(fit.ar12) X-squared = 20.3861, df = 18, p-value = 0.3115
on a la même conclusion,
Pour rappels, on peut retrouver à la main la p-value,
> 1-pchisq(20.3861,df=18) [1] 0.3115071
Faisons notre petite dessin de toutes les p-value, pour s’assurer que le bruit est bien un bruit blanc,
BP=function(h) Box.test(residuals(fit.ar12),lag=h, type='Box-Pierce')$p.value plot(1:24,Vectorize(BP)(1:24),type='b', ylim=c(0,1),col="red") abline(h=.05,lty=2,col="blue")
Cette fois c’est bon, on tient notre premier modèle, un . Si on veut aller plus loin, on peut regarder ce que donnerait de la sélection automatique,
> library(caschrono) > armaselect(Y,nbmod=5) p q sbc [1,] 14 1 1635.214 [2,] 12 1 1635.645 [3,] 15 1 1638.178 [4,] 12 3 1638.297 [5,] 12 4 1639.232
On peut être tenté d’aller voir ce qui se passerait en rajoutant une composante moyenne mobile à notre modèle précédant,
> fit.arma12.1=arima(Y,order=c(12,0,1)) > fit.arma12.1 Series: Y ARIMA(12,0,1) with non-zero mean Coefficients: ar1 ar2 ar3 ar4 ar5 ar6 ar7 0.0301 0.1558 -0.0941 -0.1461 0.1063 -0.0688 -0.002 s.e. 0.1235 0.0854 0.0757 0.0784 0.0807 0.0774 0.080 ar9 ar10 ar11 ar12 ma1 intercept -0.0646 -0.0798 0.2538 0.5786 0.2231 -131.3495 s.e. 0.0802 0.0766 0.0751 0.0861 0.1393 368.8156 sigma^2 estimated as 2127759: log likelihood=-945.65 AIC=1921.31 AICc=1926.52 BIC=1961.54
Le nouveau coefficient, est à peine significatif. Éventuellement avec un seuil à 10%… Pourquoi pas? Si on regarde les résidus, sans grande surprise, on a toujours un bruit blanc, encore plus blanc qu’auparavant (en violet sur le dessin ci-dessous)
BP=function(h) Box.test( residuals(fit.arma12.1),lag=h, type='Box-Pierce')$p.value plot(1:24,Vectorize(BP)(1:24),type='b', ylim=c(0,1),col="red") abline(h=.05,lty=2,col="blue") BP=function(h) Box.test(residuals(fit.ar12),lag=h, type='Ljung-Box')$p.value lines(1:24,Vectorize(BP)(1:24),col="purple", type="b")
On peut aussi aller voir parmi les modèles proposés, en particulier le modèle .
> fit.ar14= + arima(Y,order=c(14,0,0),method="CSS") > fit.ar14 Series: Y ARIMA(14,0,0) with non-zero mean Coefficients: ar1 ar2 ar3 ar4 ar5 ar6 ar7 0.2495 0.2105 -0.0584 -0.1569 0.1282 -0.1152 0.0268 s.e. 0.0956 0.0972 0.0854 0.0830 0.0838 0.0840 0.0847 ar9 ar10 ar11 ar12 ar13 ar14 intercept -0.0327 -0.1116 0.2649 0.5887 -0.1575 -0.1572 80.5 s.e. 0.0855 0.0851 0.0853 0.0886 0.1031 0.0999 338.9 sigma^2 estimated as 2218612: part log likelihood=-942.31
C’est un peu tiré par les cheveux, mais on pourrait accepter l’hypothèse que soit significativement non-nuls. Mais on est encore limite… Allez, on l’accepte aussi dans notre gang de modèle.
On a finalement trois modèles. Si on fait un peu de backtesting, sur les 12 derniers mois,
T=length(Y) backtest=12 subY=Y[-((T-backtest+1):T)] subtemps=1:(T-backtest) plot(temps,Y,type="l") lines(subtemps,subY,lwd=4) fit.ar12.s=arima(subY, order=c(p=12,d=0,q=0),method="CSS") fit.arma12.1.s=arima(subY, order=c(p=12,d=0,q=1),method="CSS") fit.ar14.s=arima(subY, order=c(p=14,d=0,q=0),method="CSS") p.ar12=predict(fit.ar12.s,12) pred.ar12=as.numeric(p.ar12$pred) p.arma12.1=predict(fit.arma12.1.s,12) pred.arma12.1=as.numeric(p.arma12.1$pred) p.ar14=predict(fit.ar14.s,12) pred.ar14=as.numeric(p.ar14$pred)
on obtient les prévisions suivantes (avec les valeurs observées dans la première colonne)
> (M=cbind(observé=Y[((T-backtest+1):T)], + modèle1=pred.ar12, + modèle2=pred.arma12.1, + modèle3=pred.ar14)) observé modèle1 modèle2 modèle3 97 -4836.2174 -5689.3331 -5885.4486 -6364.2471 98 -3876.4199 -4274.0391 -4287.2193 -4773.8116 99 1930.3776 1817.8411 2127.9915 2290.1460 100 3435.1751 4089.3598 3736.1110 4039.4150 101 7727.9726 6998.9829 7391.6694 7281.4797 102 2631.7701 3456.8819 3397.5478 4230.5324 103 -509.4324 -2128.6315 -2268.9672 -2258.7216 104 -1892.6349 -3877.7609 -3694.9409 -3620.4798 105 -4310.8374 -3384.0905 -3430.4090 -2881.4942 106 2564.9600 -504.6883 -242.5018 183.2891 107 -1678.2425 -1540.9904 -1607.5996 -855.7677 108 -4362.4450 -3927.4772 -3928.0626 -3718.3922 > sum((M[,1]-M[,2])^2) [1] 19590931 > sum((M[,1]-M[,3])^2) [1] 17293716 > sum((M[,1]-M[,4])^2) [1] 21242230
I.e. on aurait envie de retenir le second modèle, . On va maintenant l’utiliser pour faire un peu de prévision,
library(forecast) fit.arma12.1= arima(Y,order=c(12,0,1)) fit.arma12.1 PREDARMA=forecast(fit.arma12.1,12) plot(Y,xlim=c(1,120),type="l") temps=T+1:12 polygon(c(temps,rev(temps)),c(PREDARMA$lower[,2], rev(PREDARMA$upper[,2])),col="yellow",border=NA) polygon(c(temps,rev(temps)),c(PREDARMA$lower[,1], rev(PREDARMA$upper[,1])),col="orange",border=NA) lines(temps,PREDARMA$mean,col="red")
Cela dit, on peut aussi aller beaucoup plus loin dans la prévision,
PREDARMA=forecast(fit.arma12.1,120) plot(Y,xlim=c(1,210),type="l") temps=T+1:120 polygon(c(temps,rev(temps)),c(PREDARMA$lower[,2], rev(PREDARMA$upper[,2])),col="yellow",border=NA) polygon(c(temps,rev(temps)),c(PREDARMA$lower[,1], rev(PREDARMA$upper[,1])),col="orange",border=NA) lines(temps,PREDARMA$mean,col="red")
Bon, on y est presque, car on a modélisé , la série obtenue en enlevant la tendance linéaire. Pour remonter sur , on va rajouter la tendance à la prévision faite auparavant,
X=as.numeric(Xt) temps=1:length(X) plot(temps,X,type="l",xlim=c(0,210), ylim=c(5000,30000)) base=data.frame(temps,X) reg=lm(X~temps) abline(reg,col="red") PREDTENDANCE=predict(reg,newdata= data.frame(temps=T+1:120)) temps=T+1:120 polygon(c(temps,rev(temps)),c(PREDTENDANCE+ PREDARMA$lower[,2],rev(PREDTENDANCE+PREDARMA$upper[,2])), col="yellow",border=NA) polygon(c(temps,rev(temps)),c(PREDTENDANCE+ PREDARMA$lower[,1],rev(PREDTENDANCE+PREDARMA$upper[,1])), col="orange",border=NA) lines(temps,PREDTENDANCE+PREDARMA$mean,col="red")
Maudits français
Tous les malouins le savent, Jacques Cartier est parti de Saint Malo pour découvrir le Canada en 1536 (si l’on considère son second voyage, c’est à dire celui où il a vraiment pénétré le royaume de Kanata en voguant sur le Saint Laurent). Il y a d’ailleurs un musée du Québec dans les remparts. Et comme s’en vente le musée, les québécois viennent de Saint-Malo.
Or, pour ceux qui ne connaissent pas Saint-Malo, c’est à deux pas du Mont Saint Michel, et du Couesnon qui sépare la Bretagne et la Normandie. Étant né en Normandie, avant de venir vivre à Rennes, j’étais convaincu que j’avais des racines communes avec les Québécois*. Mais j’ai été surpris en voyant les noms de famille des copines de classe de ma fille: les noms ne m’étaient pas du tout familiers… Pourtant, si nous avons des racines communes, il ne serait pas surprenant que les noms de familles se retrouvent (c’est le principe de base de la généalogie, si j’ai bien tout suivi). Aussi j’ai voulu creuser davantage….
- Que disent les experts en généalogie ?
On peut trouver des éléments de réponse ici ou là. Parmi les 3800 Français qui ont immigré (ou émigrer, ça dépend du point de vue) entre 1608 et 1700 :
Entre 1700 et 1765, près de 5000 autres hommes, femmes et enfants originaires de France viennent s’établir au Canada, mais “très peu proviennent de la Bretagne et des régions baignées par la mer“. Ce sont d’ailleurs les ordres de grandeur que j’ai pu avoir dans l’ouvrage de Michel Lambert (qui n’est pas un livre de généalogie à proprement parler mais qui est incroyablement intéressant, même s’il ne donne pas de source – ou de détails sur le sens – pour ces chiffres),
- Normandie, 22.6%
- Aunis, 16.4%
- Perche, 11.4%
- Ile de France (région parisienne) 10.5%
- Poitou, 7.5%
- Maine, 5.2%
- Saintonge 5.2%
- Bretagne 3.5%
Moralité, même si Jacques Cartier est parti de Bretagne, rares semblent être les bretons qui ont émigrés au Québec.
- Calculs de probabilités conditionnelles à partir des noms de famille
Il existe des sites qui donnent les “classements” des noms de familles, au Québec par exemple (ici, avec les 1000 noms les plus portés, avec les proportions respectives), ou dans les régions françaises (là, où j’ai pris à chaque fois les 2000 noms les plus portés avec les proportions respectives, en changeant de région). Les données peuvent être récupérées avec le code suivant
quebec=read.table("http://freakonometrics.free.fr/nom-quebec2.txt", header=TRUE,dec=",") bretagne=read.table("http://freakonometrics.free.fr/nom-bretagne.txt", header=TRUE,dec=",",sep="\t") poitou=read.table("http://freakonometrics.free.fr/nom-poitou.txt", header=TRUE,dec=",",sep="\t") normandie=read.table("http://freakonometrics.free.fr/nom-basse-normandie.txt", header=TRUE,dec=",",sep="\t") aquitaine=read.table("http://freakonometrics.free.fr/nom-aquitaine.txt", header=TRUE,dec=",",sep="\t") alsace=read.table("http://freakonometrics.free.fr/nom-alsace.txt", header=TRUE,dec=",",sep="\t") loire=read.table("http://freakonometrics.free.fr/nom-loire.txt", header=TRUE,dec=",",sep="\t")
J’ai retenu 6 régions françaises, et j’ai calculé la proportions de québécois dont le nom de famille était dans le top 2000 d’une région donnée, i.e.
> head(quebec) Rang Nomdefamille Pourcentage 1 1 Tremblay 1.076 2 2 Gagnon 0.790 3 3 Roy 0.753 4 4 Cote 0.692 5 5 Bouchard 0.530 6 6 Gauthier 0.522 > minquebec=tolower(quebec$Nomdefamille) > rangquebec=quebec$Rang > pctquebec=quebec$Pourcentage/sum(quebec$Pourcentage) > head(bretagne) Rang Patronyme Naissances 1 1 LE GALL 18126 2 2 LE GOFF 16093 3 3 LE ROUX 15905 4 4 THOMAS 15705 5 5 MARTIN 12094 6 6 TANGUY 12045 > minbretagne=tolower(bretagne$Patronyme) > rangbretagne=bretagne$Rang > pctbretagne=bretagne$Naissances/sum(bretagne$Naissances) > I=minquebec%in%minbretagne > sum(pctquebec[I])/sum(pctquebec) [1] 0.2579641
Région | Proportion |
Bretagne | 23,39% |
Normandie | 31,07% |
Loire | 32,83% |
Aquitaine | 27,65% |
Poitou | 32,50% |
Alsace | 9,71% |
Si on retrouve peu de noms alsacien au Québec, on peut être un peu “surpris” que les régions qui ressortent le plus sont la Loire et le Poitou et pas la Bretagne et la Normandie…. Bon, j’en conviens, je travaille sur les noms de familles bruts, c’est à dire que je ne tiens pas compte du fait que certains noms se sont déformés. Il s’agit de la version simple… on peut bien entendu aller plus loin, par exemple en utilisant des modèles de mélange par exemple… à suivre donc…
*en fait, mes origines sont davantage bourguignonnes, de part mes quatre grands parents, comme le savent tous ceux qui m’ont déjà payé un verre de vin… mais ayant passé toute mon enfance en Normandie, je peux me considérer un peu comme normand. Et adorant la galette saucisse, je suis définitivement breton….
Uncertainty in claims reserving (WIM)
I will be talking on Friday, at the 1st Québec-Ontario Workshop on Insurance Mathematics (so called WIN, already mentioned here). The program is now online here. My talk will be on Solvency II requirements in claims reserving (slides can be found here). Even if Canada will not adapt the Solvency II European capital test, it looks like Solvency II will matter to Canadian insurance companies (as mentioned here).