Freakonometrics

To content | To menu | To search

Thursday, December 20 2012

Examen ACT6420 sur les séries temporelles, correction

L'examen de mercredi est en ligne ici (les données et les annexes étaient dans un précédant billet), et je poste des éléments de correction. Une correction avec les statistiques de réponses sera en ligne dans les jours qui viennent (le temps de corriger). Si quelqu'un voit des coquilles dans la correction, voire des réponses erronées, merci de me le dire avant que je ne valide les notes.

Sinon pour le second devoir, le nombre de pages attendu est de l'ordre d'une dizaine, maximum quinze, avec les noms et les codes étudiants sur la page de garde. Je veux - par courriel - un fichier pdf avant le 23 décembre, 23:59 (date limite, mais il est possible de l'envoyer plus tôt).

Actuariat 1, examen 3

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2012/12/tumblr_m93iu0p10Z1qbb7f3o1_r1_500.gif

L'examen de lundi est en ligne ici, avec des éléments de correction (avec comme toujours des statistiques sur les réponses). Les notes seront publiées bientôt. Toute personne qui trouve des erreurs peut me contacter avant que je ne valide les notes. L'examen correspondait à l'examen de pratique 15 du livre de Jacques Labelle (je n'ai rien inventé). Pour une des questions, la réponse n'était pas parmi les réponses proposées. J'ai donc finalement noté l'épreuve sur 29 (et appliqué un coefficient multiplicatif pour ramener à une note sur 30). Comme toujours, ceux qui ont prédit correctement leur nombre de bonnes réponses ont eu un point bonus.

http://f.hypotheses.org/wp-content/blogs.dir/253/files/2012/12/tumblr_m93iu0p10Z1qbb7f3o2_r1_500.gif

Friday, December 14 2012

ACT6420 examen final

Mercredi prochain, c'est l'examen final (qui compte pour 30%).

Au programme, 33 questions à choix multiples, en 3 heures, environ la moitié sur la base suivante


> base=read.table( "http://freakonometrics.blog.free.fr/public/data/TS-examen.txt", + sep=";",header=TRUE) > X=ts(base$X,start=c(base$A[1],base$M[1]),frequency=12) > plot(X)

Les annexes qu'il faudra commenter lors de l'examen sont en ligne ici. Inutile de préciser que je ne répondrais à aucune question sur les sorties.

Monday, December 10 2012

Actuariat 1, ACT2121, huitième cours

Pour le huitième cours, on continuera les exercices commencés la semaine passée. Je mets toutefois en ligne quelques exercices supplémentaires, pour ceux qui souhaitent s'entraîner davantage. Pour rappel (?) l'examen final aura lieu dans 2 semaines lundi prochain, et portera sur l'ensemble de la matière,

Saturday, December 8 2012

Somewhere else, part 24

 Still interesting posts, here and there, on the internet,



et cette semaine, plusieurs articles en francais,
Did I miss something ?

Friday, December 7 2012

Modélisation et prévision, cas d'école

Quelques lignes de code que l'on reprendra au prochain cours, avec une transformation en log, et une tendance linéaire. Considérons la recherche du mot clé headphones, au Canada, la base est en ligne sur http://freakonometrics.blog.free.fr/...

> report=read.table(
+ "report-headphones.csv",
+ skip=4,header=TRUE,sep=",",nrows=464)
> source("http://freakonometrics.blog.free.fr/public/code/H2M.R")
> headphones=H2M(report,lang="FR",type="ts")
> plot(headphones)

Mais le modèle linéaire ne devrait pas convenir, car la série explose,

> n=length(headphones)
> X1=seq(12,n,by=12)
> Y1=headphones[X1]
> points(time(headphones)[X1],Y1,pch=19,col="red")
> X2=seq(6,n,by=12)
> Y2=headphones[X2]
> points(time(headphones)[X2],Y2,pch=19,col="blue")

Il est alors naturel de prendre le logarithme de la série,

> plot(headphones,log="y")

C'est cette série que l'on va modéliser (mais c'est bien entendu la première série, au final, qu'il faudra prévoir). On commence par ôter la tendance (ici linéaire)

> X=as.numeric(headphones)
> Y=log(X)
> n=length(Y)
> T=1:n
> B=data.frame(Y,T)
> reg=lm(Y~T,data=B)
> plot(T,Y,type="l")
> lines(T,predict(reg),col="purple",lwd=2)

On travaille alors sur la série résiduelle. 

> Z=Y-predict(reg)
> acf(Z,lag=36,lwd=6)
> pacf(Z,lag=36,lwd=6)

On peut tenter de différencier de manière saisonnière,

> DZ=diff(Z,12)
> acf(DZ,lag=36,lwd=6)
> pacf(DZ,lag=36,lwd=6)

On ajuste alors un processus ARIMA, sur la série différenciée,

> mod=arima(DZ,order=c(1,0,0),
+ seasonal=list(order=c(1,0,0),period=12))
> mod
 
Coefficients:
ar1     sar1  intercept
0.7937  -0.3696     0.0032
s.e.  0.0626   0.1072     0.0245
 
sigma^2 estimated as 0.0046:  log likelihood = 119.47

Mais comme c'est la série de base qui nous intéresse, on utilise une écriture SARIMA,

> mod=arima(Z,order=c(1,0,0),
+ seasonal=list(order=c(1,1,0),period=12))

On fait alors la prévision de cette série.

> modpred=predict(mod,24)
> Zm=modpred$pred
> Zse=modpred$se

On utilise aussi le prolongement de la tendance linéaire,

> tendance=predict(reg,newdata=data.frame(T=n+(1:24)))

Pour revenir enfin à notre série initiale, on utilise les propriétés de la loi lognormales, et plus particulièrement la forme de la moyenne, pour prédire la valeur de la série,

> Ym=exp(Zm+tendance+Zse^2/2)

Graphiquement, on a 

> plot(1:n,X,xlim=c(1,n+24),type="l",ylim=c(10,90))
> lines(n+(1:24),Ym,lwd=2,col="blue")

Pour les intervalles de confiance, on peut utiliser les quantiles de la loi lognormale,

> Ysup975=qlnorm(.975,meanlog=Zm+tendance,sdlog=Zse)
> Yinf025=qlnorm(.025,meanlog=Zm+tendance,sdlog=Zse)
> Ysup9=qlnorm(.9,meanlog=Zm+tendance,sdlog=Zse)
> Yinf1=qlnorm(.1,meanlog=Zm+tendance,sdlog=Zse)
> polygon(c(n+(1:24),rev(n+(1:24))),
+ c(Ysup975,rev(Yinf025)),col="orange",border=NA)
> polygon(c(n+(1:24),rev(n+(1:24))),
+ c(Ysup9,rev(Yinf1)),col="yellow",border=NA)

Jeux et assurance

Félicitations à Christophe Dutang, qui a obtenu il y a quelques heures le prix Scor de la meilleure thèse de doctorat en actuariat. Christophe avait soutenu sa thèse à Lyon sur "Étude des marchés d'assurance non-vie à l'aide d'équilibres de Nash et de modèles de risques avec dépendance" (les transparents sont en ligne sur sa page, et la thèse est en ligne sur http://tel.archives-ouvertes.fr/...)

La cérémonie avait lieu mercredi soir, et je ne pouvais pas y être car je fêtais mon anniversaire en famille (et accessoirement, je suis à Montréal pour finir la session). En fait, je n'ai jamais eu l'occasion de me rendre à cette cérémonie annuelle (même lorsque le prix m'avait été attribué, voilà quelques années, car j'étais alors à Valparaiso). Je pourrais aussi souligner que si je trouve que le prix est une très bonne idée, le lieu n'est pas idéal.

Histoire de jouer un peu les vieux cons, Le Cercle de l'Union Interallié est un club très select, très sexiste (« les femmes n’ont pas accès aux instances dirigeantes du Cercle » comme le précise http://fr.wikipedia.org/...), et en plus la cravate est de rigueur pour les hommes (sinon, on ne peut pas entrer). Si je sors mon costume à l'occasion (certains collègues ont eu l'occasion de se moquer), je dois avouer que mes cravates sont depuis fort longtemps dans la malle à déguisement des enfants. Et elles ne sont pas prêt d'en sortir !

En attendant, félicitations à Christophe qui méritait le prix... Et félicitations à Aymric Kamega quia obtenu le même soir une mention spéciale !

Wednesday, December 5 2012

Syntaxe pour les SARIMA

La forme générale (enfin, la plus simple) des modèles SARIMA est la suivante

http://latex.codecogs.com/gif.latex?(1-L)^d(1-L^s)^{d_s}\Phi(L)\Phi_s(L^s)%20(X_t-m)%20=%20\Theta(L)\Theta_s(L^s)\varepsilon_t

Afin de comprendre comment les écrire sous R, commençons par un processus simple, autorégressive, de la forme
http://latex.codecogs.com/gif.latex?(1-\phi_1%20L)X_t%20=%20\varepsilon_t

La syntaxe est ici

> arima(X, order = c(p=1, d=0, q=0))

Supposons que l'on souhaite rajouter une composante moyenne mobile, i.e.

http://latex.codecogs.com/gif.latex?(1-\phi_1%20L)X_t%20=%20(1-\theta_1%20L)\varepsilon_t

La syntaxe devient

> arima(X, order = c(p=1, d=0, q=1))

Si on suppose maintenant que pour la composante autorégressive, on a une racine unité et le processus s'écrit

http://latex.codecogs.com/gif.latex?(1-%20L)X_t%20=%20(1-\theta_1%20L)\varepsilon_t

L’estimation de ce modèle se fait avec la commande

> arima(X, order = c(p=0, d=1, q=1))

Si pour finir, on veut calibrer un modèle de la forme

http://latex.codecogs.com/gif.latex?(1-%20L)(1-\phi_1%20L-\phi_2%20L^2)X_t%20=%20(1-\theta_1%20L)\varepsilon_t

on utilise la commande

> arima(X, order = c(p=2, d=1, q=1))

Supposons maintenant que notre série http://latex.codecogs.com/gif.latex?(X_t) ait été obtenu par différenciation saisonnière d'une série http://latex.codecogs.com/gif.latex?(Y_t), au sens où http://latex.codecogs.com/gif.latex?X_t=(1-L^{12})Y_t=\Delta^{12}%20Y_t, alors on devrait écrire

http://latex.codecogs.com/gif.latex?(1-%20L)(1-\phi_1%20L-\phi_2%20L^2)(1-L^{12})Y_t=%20(1-\theta_1%20L)\varepsilon_t

Pour estimer un tel modèle, la syntaxe est alors

> arima(X, order = c(p=2, d=1, q=1),
+ seasonal = list(order = c(0, 1, 0), period = 12))

En particulier, on peut avoir deux modèles assez proches pour modéliser une série cyclique: un bruit blanc avec une intégration saisonnière, i.e.

http://latex.codecogs.com/gif.latex?(1-L^{12})%20X_t%20=%20\varepsilon_t

dont la syntaxe serait

> arima(X, order = c(p=0, d=0, q=0),
+ seasonal = list(order = c(0, 1, 0), period = 12))

et un simple processus autorégressif à l'ordre 12. Mais là encore, soit je veux imposer que seule la dernière composante soit non nulle i.e.

http://latex.codecogs.com/gif.latex?(1-\phi_{12}%20L^{12})%20X_t%20=%20\varepsilon_t

ce qui s'écrit

> arima(X, order = c(p=0, d=0, q=0),
+ seasonal = list(order = c(1, 0, 0), period = 12))

soit je prends un processus plus général, de la forme

http://latex.codecogs.com/gif.latex?(1-\phi_1%20L-\cdots%20\phi_{12}%20L^{12})%20X_t%20=%20\varepsilon_t

dont la syntaxe devient

> arima(X, order = c(p=12, d=0, q=0))

En fait, on peut introduire un polynôme autorégressive avec uniquement des retards à l'ordre 12, en plus de la différentiation saisonnière, i.e.

http://latex.codecogs.com/gif.latex?(1-L)(1-L^{12})(1-\phi_1%20L)(1-\phi_{12}%20L^{12})%20X_t%20=%20(1-\theta_1%20L)\varepsilon_t

Ce modèle s'écrire alors sous la forme

> arima(X, order = c(p=1, d=1, q=1),
+ seasonal = list(order = c(1, 1, 0), period = 12))

On peut bien sûr aller plus loin, en autorisant non seulement une composante autorégressive saisonnière, mais pourquoi pas, une composante moyenne mobile saisonnière, i.e.

http://latex.codecogs.com/gif.latex?(1-L)(1-L^{12})(1-\phi_1%20L)(1-\phi_{12}%20L^{12})%20X_t%20=%20(1-\theta_1%20L)\varepsilon_t(1-\theta_{12}L^{12})\varepsilon_t

qui s'écrit, sous R,

> arima(X, order = c(p=1, d=1, q=1),
+ seasonal = list(order = c(1, 1, 1), period = 12))

On a vu la forme la plus générale des SARIMA. Enfin, comme je le disais en préambule, c'est aussi la plus simple. Car si je suppose qu'une autre cycle se superpose au cycle annuel, je peux le faire. Mais on va peut être essayer d'éviter de trop compliquer les notations...

Examen ACT6420 sur les séries temporelles

L'examen final du cours de modèles de prévision aura lieu dans 15 jours. Comme annoncé ce matin, la forme sera proche de celle de l'examen intra,

  • quelques questions de compréhension générales sur la modélisation des séries temporelles,
  • quelques questions portant sur de l'analyse de sorties obtenues suite à une modélisation d'une série.

Cette session, la série à étudier sera celle obtenue sur la fréquentation d'un aéroport, sur une quinzaine d'années. Les données sont mensuelles, et sont en ligne via le code suivant

> base=read.table(
"http://freakonometrics.blog.free.fr/public/data/TS-examen.txt",
+ sep=";",header=TRUE)
> X=ts(base$X,start=c(base$A[1],base$M[1]),frequency=12)
> plot(X)

Je mettrais les sorties en ligne dans 10 jours.

Interview sur mutualisation versus segmentation

Hier, j'ai été un peu surpris quand un ancien collègue en France m'a parlé d'une interview exclusive (de moi) sur http://argusdelassurance.com/.... Puis je me suis souvenu qu'il y a quelques semaines, Madeleine m'avait contacter pour me poser quelques questions sur les assurance « à la carte », et la plus grande modularité des produits. Elle avait mis le doigt sur deux questions importantes, "comment procéder au calcul quand les offres sont personnalisées" et "est-ce intéressant pour l'assureur, pour l’assureur" ? Pour la première partie, c'est technique, et ça correspond à ce qu'on fait dans les cours de tarification (on en reparle dans quelques semaines, promis). Par contre le second point est plus troublant. Avec la théorie économique d'un côté, et les principes d'antisélection et d'aléa moral, mais qui insiste sur la nécessité, et pas l'intérêt de la segmentation... Afin de partager mon point de vue sur ces problèmes, j'avais voulu reprendre simplement un modèle qu'on avait utilisé dans le livre avec Michel Denuit (tome 1). Cet exemple nécessite un peu de formalisation, et j'ai été très surpris de voir que Madeleine l'avait gardé. Mieux, qu'elle l'avait clarifié (il faut dire qu'elle m'avait demandé un courriel en fin de journée, et que j'avais tapé ça rapidement, tout en faisant les devoirs des grands, et le bain de la plus petite... quand je relis ce que j'avais envoyé, et ce qu'elle en a fait, je suis admiratif). Mais prenons deux minutes pour reformuler cette histoire de segmentation d'un marché de l'assurance...

Commençons par le cas le plus simple, sans segmentation, avec mutualisation parfaite (et donc prime unique). En utilisant un principe de prime pure, si http://latex.codecogs.com/gif.latex?S désigne la perte (aléatoire) pour les assurés, la prime à payer serait http://latex.codecogs.com/gif.latex?\mathbb{E}(S). Et dans ce cas, en moyenne, le bilan de l'assureur serait équilibré, car http://latex.codecogs.com/gif.latex?\mathbb{E}(S-\mathbb{E}(S))=0. Si on regarde l'incertitude associée aux dépenses (disons la variance pour faire simple), les assurés n'ont aucune variance car la dépense est la même pour tous. Tout le risque (la variance) est à la charge de l'assureur. On peut résumer ça dans le petit tableau suivant,


Assurés
Assureur
Dépense

http://latex.codecogs.com/gif.latex?\mathbb{E}(S)

http://latex.codecogs.com/gif.latex?S-\mathbb{E}(S)

Dépense moyenne

http://latex.codecogs.com/gif.latex?\mathbb{E}(S)

http://latex.codecogs.com/gif.latex?0
Variance
http://latex.codecogs.com/gif.latex?0

http://latex.codecogs.com/gif.latex?\text{Var}(S)

On a ici la répartition des dépenses et du risque (que nous appellerons variance, à la Markowitz) entre l'assureur et les assurés assez simple, et on a un mécanisme de transfert des risques pur.

Continuons dans un monde parfait (disons avec information parfaite) mais avec cette fois de la segmentation (parfaite). Autrement dit, si la variable de risque est un variable http://latex.codecogs.com/gif.latex?\Omega, connue par l'assureur, alors il devrait faire payer http://latex.codecogs.com/gif.latex?\mathbb{E}(S|\Omega) pour un assuré portant le risque http://latex.codecogs.com/gif.latex?\Omega. Cette fois, la décomposition des dépenses et des risques se fait de la manière suivante


Assurés
Assureur
Dépense

http://latex.codecogs.com/gif.latex?\mathbb{E}(S|\Omega)

http://latex.codecogs.com/gif.latex?S-\mathbb{E}(S)

Dépense moyenne

http://latex.codecogs.com/gif.latex?\mathbb{E}(S)

http://latex.codecogs.com/gif.latex?0
Variance

http://latex.codecogs.com/gif.latex?\text{Var}(\mathbb{E}(S|\Omega))

http://latex.codecogs.com/gif.latex?\text{Var}(S-\mathbb{E}(S|\Omega))

Cette fois, l'assureur prend à sa charge la composante des risques purement aléatoire, mais les assurés prennent à leur charge une partie de la variabilité, correspondant à l'hétérogénéité du portefeuille. On notera que la variance de l'assureur est ici http://latex.codecogs.com/gif.latex?\mathbb{E}(\text{Var}(S|\Omega)): on retrouve ici la formule classique de décomposition de la variance

http://latex.codecogs.com/gif.latex?\text{Var}(\mathbb{E}(S|\Omega))+\mathbb{E}(\text{Var}(S|\Omega))=\text{Var}(S)

On a ici une première composante qui repose sur les assurés, et la seconde sur les assureurs. C'est d'ailleurs le théorème de Pythagore, avec la variance liée à l'hétérogénéité à gauche, et à droite, la composante purement aléatoire.

Mais dans la vraie vie http://latex.codecogs.com/gif.latex?\Omega (le risque intrinsèque de l'assuré) n'est pas connu. On doit faire une segmentation imparfaite: on dispose de quelques variables explicatives, que l'on notera par un vecteur http://latex.codecogs.com/gif.latex?\boldsymbol{X}, et on va essayer de construire un proxy de la variable de risque http://latex.codecogs.com/gif.latex?\Omega (c'est le but des méthodes économétriques appliquées en tarification). La décomposition entre l'assureur et ses assurés se fait de la manière suivante


Assurés
Assureur
Dépense

http://latex.codecogs.com/gif.latex?\mathbb{E}(S|\boldsymbol{X})

http://latex.codecogs.com/gif.latex?S-\mathbb{E}(S|\boldsymbol{X})

Dépense moyenne

http://latex.codecogs.com/gif.latex?\mathbb{E}(S)

http://latex.codecogs.com/gif.latex?0
Variance

http://latex.codecogs.com/gif.latex?\text{Var}(\mathbb{E}(S|\boldsymbol{X}))

http://latex.codecogs.com/gif.latex?\mathbb{E}(\text{Var}(S|\boldsymbol{X}))

qui correspond à la décomposition précédente, en remplaçant la variable non-observée http://latex.codecogs.com/gif.latex?\Omega par le proxy construit à partir de http://latex.codecogs.com/gif.latex?\boldsymbol{X}.   Là encore, en moyenne, l'assureur est à l'équilibre, car

http://latex.codecogs.com/gif.latex?\mathbb{E}(\mathbb{E}(S|\boldsymbol{X}))=\mathbb{E}(S)

autrement dit segmenter n'a pas de conséquence, en moyenne, sur le résultat de l'assureur. Par contre, la variance de l'assureur est ici

http://latex.codecogs.com/gif.latex?\mathbb{E}(\text{Var}(S|\boldsymbol{X}))=\mathbb{E}(\text{Var}(S|\Omega))+\mathbb{E}(\text{Var}(\mathbb{E}(S|\Omega)|\boldsymbol{X}))

et la variance total du portefeuille est alors la somme

http://latex.codecogs.com/gif.latex?\text{Var}(\mathbb{E}(S|\boldsymbol{X}))+\mathbb{E}(\text{Var}(S|\Omega))+\mathbb{E}(\text{Var}(\mathbb{E}(S|\Omega)|\boldsymbol{X}))

avec à gauche, un terme lié à la segmentation, au centre le hasard, et à droite, un terme de solidarité entre assuré (qu'on pourrait appeler de mutualisation), lié au fait que le risque n'est que partiellement assurable. C'est la mutualisation résiduelle qui peut exister en assurance santé si on exclue les tests génétiques: à partir de quelles variables explicatives http://latex.codecogs.com/gif.latex?\boldsymbol{X}, on peut inférer le risque de maladie, mais moins que si des tests génétiques permettaient d'approcher http://latex.codecogs.com/gif.latex?\Omega avec une plus grande précision... Autrement dit, segmenter imparfaitement, ou partiellement, permet de maintenir un effet de mutualisation dans le portefeuille.... de faire de l'assurance en quelque sorte...

Monday, December 3 2012

Somewhere else, part 23

Some interesting posts, this week, 




Did I miss something ?

Méthodes de lissage en assurance

Dans le cours de modèles de prévision, j'avais abordé les méthodes de régression locale rapidement, en finissant la section sur les données individuelles. On verra plus d'outils la session prochaine dans le cours actuariat IARD, a.k.a. ACT2040 (que je donnerais cet hiver). En attendant, je mets en ligne les transparents du cours que vient de donner Julien Tomas à l'Institut de science financière et d'assurances (à Lyon, en France), dans un contexte d'assurance dépendance,

(et que Julien m'a autorisé à diffuser).

Sunday, December 2 2012

ACT2121, éléments de correction

Le second intra avait lieu lundi dernier. L'énoncé est en ligne, ainsi que des éléments de correction (comportant également des statistiques par réponse, la bonne réponse étant en rouge). Comme annoncé au tableau, dans la question 21, il y a eu un copier-coller malencontreux (les bonnes réponses ont été écrites au tableau). Toutes mes excuses. Quant à la question 29, certains élèves s'étaient plaint de ne avoir de table de loi normale à disposition. J'avais projeté au tableau la table suivante. A mes yeux, la probabilité qu'une loi normale (centrée et réduite) soit inférieure à 2 devrait être sue par cœur (comme beaucoup d'autres quantités).

Friday, November 30 2012

Estimation et prévision pour des séries temporelles

Pour la fin de cours , quelques transparents sur l'identification et l'estimation des modèles SARIMA, quelques compléments sur les tests (racines unités et non-stationnarité, ainsi que saisonnalité), et enfin, quelques pistes pour construire des prédictions (avec une quantification de l'incertitude). Les transparents sont en ligne ici. Maintenant que les transparents sont finis (et en ligne) les prochains billets seront orientés autour de la modélisation et des aspects computationnels.

Thursday, November 29 2012

Actuariat 1, ACT2121, septième cours

Toujours dans le cadre de la préparation à l'examen P de la SOA, une série d'exercices. Comme il reste trois semaines (en plus de l'examen final), on va essayer de finir de revoir l'ensemble des notions. Les 50 exercices sont en ligne ici. L'énoncé et la correction du devoir de lundi dernier seront mis en ligne très bientôt...

- page 1 of 73