Cette session un peu particulière, 100% en ligne, touche (enfin) à sa fin ! J’ai mis en ligne toutes les vidéos des cours… et je n’y toucherai pas pendant un petit bout de temps, puisque je ne redonnerai pas les cours cet hiver. Toutes les remarques et commentaires sont malgré tout les bienvenues !
Category Archives: ACT6100
Trees and forests
For my ACT6100 weekly quiz, I usually generate some datasets, and then ask students to compare various predictive algorithms. Last week, it was about classification trees and random forests. And students were surprised to have such differences (they had to estimate the probability to have a specific label, for the barycenter of the covariates).
Usually, I use the following to generate some (here 12) covariates that could be correlated
library(FactoMineR) n=279 library(clusterGeneration) library(mnormt) k=12 S=genPositiveDefMat("unifcorrmat",dim=k) X=round(rmnorm(n,varcov=S$Sigma)+8,2) rownames(X)=1:n colnames(X)=LETTERS[1:k] |
Then I need to generate some data, based on some covariates (5 out of 12), with various strengths
idx = sample(1:k,size=5) u = sample(c(-(4:1),1:4),5) beta = rep(0,k) beta[idx] = u U = X%*%beta U = U-min(U) U = U/max(U)*6-3 p = exp(( U))/(1+exp((U ))) Y = rbinom(n,size=1,prob=p) df = data.frame(Y=as.factor(Y),X) levels(df$Y)=levels=c("blue","red") |
We can run a classification tree
library(rpart) arbre = rpart(Y~., data=df) |
and a random forest,
library(randomForest) set.seed(1) arbres = randomForest(Y~., data=df) |
Here are the partial plots for 4 of the explanatory variables that actually have an impact
partialPlot(arbres,pred.data = df, x.var = "A") |
Predictions for the “average” point of the dataset is here
(parbre = predict(arbre,newdata=data.frame(t(apply(df[,-1],2,mean))),type = "prob")) blue red 1 0.8064516 0.1935484 (parbres = predict(arbres,newdata=data.frame(t(apply(df[,-1],2,mean))),type = "prob")) blue red 1 0.422 0.578 attr(,"class") [1] "matrix" "votes" |
and there is a substantial difference, with a probability of 19% with a single tree, 58% with 500 trees (the default value of the function).
To understand why we can have such a difference, we should not only focus on the bagging stratgy, but look at the variability of the predictions, obtained with trees,
B=1e4 parbres = rep(NA,B) m=data.frame(t(apply(df[,-1],2,mean))) for(b in 1:B){ idx = sample(1:nrow(df),size=nrow(df),replace=TRUE) arbre = rpart(Y~., data=df[idx,]) parbres[b] = predict(arbre,newdata=m,type = "prob")[2] } hist(parbres) |
Surprisingly, we have here a bimodal function for \hat{y} which is either very small for some trees, of very large for others. On average, we have a value close to 55%… I think I will use more that generative algorithm for future quiz…
ACT6100, analyse supervisée
On avance dans le cours ACT6100 d’analyse des données en actuariat. Les supports de cours sont en ligne sur https://github.com/freakonometrics/ACT6100. Les capsules présentant les principales méthodes d’analyse supervisée sont maintenant en ligne
- Risque video pdf (45:06)
- Validation Croisée video pdf (32:00)
- Fonction de perte video pdf (20:04)
- Règle de Bayes et analyse discriminante video pdf (37:23)
- Dimension de Vapnik-Chervonenkis video pdf
- Régularisation et pénalisation video pdf (27:17)
- Régularisation – Ridge video pdf (36:46)
- Régularisation – Lasso (1) video pdf (41:23)
- Régularisation – Lasso (2) video pdf (32:24)
- Régularisation – GLM (Ridge et Lasso) video pdf (20:57)
- Régularisation – SVM video pdf (38:25)
- Simulations et monte carlo video pdf (50:29)
- Simulations et bootstrap video pdf (36:03)
- Arbres (1) video pdf (44:15)
- Arbres (2) video pdf (39:35)
- Arbres (3) video pdf (37:30)
- Interprétabilité video pdf (36:14)
- Méthode d’ensembles video pdf (41:17)
- Stacking & bagging video pdf (40:15)
- Forêts aléatoires video pdf (31:55)
- Agrégation séquentielle et boosting (1) video pdf (17:46)
- Agrégation séquentielle et boosting (2) video pdf (46:06)
- Réseaux de neurones (1) video pdf (45:43)
- Réseaux de neurones (2) video pdf (32:40)
- Réseaux de neurones (3) video pdf (31:44)
- Réseaux de neurones (4) video pdf (35:54)
Si les liens des vidéos ne marchent pas, je renvoie vers l’ensemble des capsules du cours, ici.
ACT6100, analyse non-supervisée
On avance tranquillement dans le cours ACT6100 d’analyse des données en actuariat. Les supports de cours sont en ligne sur https://github.com/freakonometrics/ACT6100. Cette session (mais aussi celle d’hiver) étant en distanciel, le cours est asynchrone, et je poste régulièrement des capsules vidéos. Les capsules présentant les principales méthodes d’analyse non-supervisée sont en ligne
- ACP (1) (PCA) video pdf (48:42)
- ACP (2) video pdf (31:10)
- ACP (3) video pdf (47:51)
- ACP (4) video pdf (39:59)
- ACP (5) video pdf (28:53)
- CA (1) video pdf (38:33)
- CA (2) video pdf (46:51)
- MCA (1) video pdf (28:03)
- Clusters (k-means) video pdf (48:20)
- Clusters (CAH) video pdf (37:38)
- NA & Imputations (k-nn) video pdf (17:47)
- NA & Imputations (ACP) video pdf (15:28)
Si les liens des vidéos ne marchent pas, je renvoie vers l’ensemble des capsules du cours, ici.
Cours à distance et capsules vidéos
Le cours de modèles linéaires appliqués va prendre son rythme de croisière,
ainsi que celui de sciences de données,
Les capsules vidéos sont mises en ligne au fur et à mesure…
D’un abus de langage…
Dans mon cours d’analyse des données, je commençais par présenter les diverses distances et normes, en particulier, celles qui dérivent d’un produit scalaire, comme la norme Euclidienne \|\boldsymbol{X}\|_{\mathbb{I}}^2=\boldsymbol{X}^\top\boldsymbol{X}, ou plus intéressante, la norme que l’on peut construire à partir d’une matrice \boldsymbol{M} symétrique définie positive, \|\boldsymbol{X}\|_{\boldsymbol{M}}^2=\boldsymbol{X}^\top\boldsymbol{M}\boldsymbol{X}. Un exemple bien connu étant la norme de Mahalanobis, ou la distance associée, où on prend pour \boldsymbol{M} la matrice \boldsymbol{\Sigma}^{-1} où \boldsymbol{\Sigma}=\text{Var}[\boldsymbol{X}]. Sauf que, par abus de langage, j’appelle aussi distance de Mahalanobis le distance obtenue en prenant pour matrice \boldsymbol{M} la matrice diagonale \boldsymbol{\Delta}_{\boldsymbol{\Sigma}}^{-1} définie par \boldsymbol{\Delta}_{\boldsymbol{\Sigma},ii}=\boldsymbol{\Sigma}_{ii}. En fait, c’est cette matrice que l’on utilise principale en analyse de données, par exemple en analyse des correspondances principales… Prenons un petit exemple, avec quelques données centrées
library(FactoMineR) library(clusterGeneration) library(mnormt) n=15 S=genPositiveDefMat("unifcorrmat",dim=4) X=round(rmnorm(n,varcov=S$Sigma)+8,2) for(j in 1:ncol(X)) X[,j]=X[,j]-mean(X[,j]) rownames(X)=1:n colnames(X)=LETTERS[1:4] |
et seulement 4 variables. Par défaut, quand on fait une analyse en composantes principales, on va réduire les données
acp = PCA(X,scale.unit = TRUE,graph = FALSE) fviz_pca_var(acp, col.var = "cos2") |
Le fait de centrer et réduire les données fait que l’on travaille avec la matrice de corrélation (\boldsymbol{X}^\top\boldsymbol{X}, à un facteur n, ou n-1, près). D’où le cercle de corrélation qui apparaît sur la figure. Et abusivement, quand je présente l’ACP, je dis qu’on a deux manière de voir : (1) utiliser le produit scalaire et la distance usuelle (Euclidienne) sur les données centrées et réduites, (2) utiliser la distance de Mahalanobis sur les données centrées. Mon abus de langage tient du fait qu’on utilise la version avec la matrice diagonale \boldsymbol{\Delta}_{\boldsymbol{\Sigma}}^{-1} , et pas la vraie distance de Mahalanobis… En discutant avec Gabriel après mon cours de ce matin, je me suis rendu compte de la confusion possible (même si je me faisais la réflexion lors de mes enregistrements de capsules, les jours passés). Mais en réalité, faire une analyse en composantes principales avec la vraie distance de Mahalanobis n’aurait aucun sens.
Pour s’en convaincre, utilisons les données centrées et réduites,
S = var(X) Sd = diag(diag(S)) X1 = X%*%solve(chol(Sd)) colnames(X1)=colnames(X) var(X1) A B C D A 1.0000000 0.10113165 -0.88021475 0.4733021 B 0.1011316 1.00000000 0.07885109 -0.7400999 C -0.8802147 0.07885109 1.00000000 -0.5743660 D 0.4733021 -0.74009993 -0.57436600 1.0000000 |
x
acp1 = PCA(X1,scale.unit = FALSE,graph = FALSE) fviz_pca_var(acp1, col.var = "cos2") |
On n’a plus ici, le cercle des corrélations car la fonction ne sait pas que mes données ont été centrées et réduite au préalable… mais on a la même sortie qu’auparavant à part ça…
Si maintenant on utilise la norme de Mahalanobis, on peut là aussi tranformer les données, en notant que \boldsymbol{X}^\top\boldsymbol{M}\boldsymbol{X} peut aussi s’écrire \boldsymbol{X}^\top\boldsymbol{M}^{1/2}\boldsymbol{M}^{1/2}\boldsymbol{X} soit encore la distance euclidienne standard \tilde{\boldsymbol{X}}^\top\tilde{\boldsymbol{X}} sur les données transformées \tilde{\boldsymbol{X}}={\boldsymbol{X}}{\boldsymbol{M}^{1/2}},
S = var(X) X2 = X%*%solve(chol(S)) colnames(X2)=colnames(X) > var(X2) A B C D A 1.000000e+00 -3.582611e-17 5.307644e-16 -1.004784e-16 B -3.582611e-17 1.000000e+00 -3.021333e-16 4.164692e-17 C 5.307644e-16 -3.021333e-16 1.000000e+00 -3.649967e-16 D -1.004784e-16 4.164692e-17 -3.649967e-16 1.000000e+00 |
ce qui donne des données… orthogonales (pour ne pas dire indépendantes, on retrouve ici le processus de whitening, utilisé en ICA, analyse des composantes indépendantes. Et comme on a rendu les données indépendantes… l’analyse des composantes principales n’aura plus grand chose à raconter…
acp2 = PCA(X2,scale.unit = FALSE,graph = FALSE) fviz_pca_var(acp2, col.var = "cos2") |
Chaque axe explique ici pour 25% de l’inertie… bref, on ne va jamais faire une ACP avec la distance de Mahalanobis (la vraie). Elle ne va pas normaliser les variables, mais les orthonormaliser. Et pourtant, par abus de langage, je vais continuer à utiliser ce terme… Désolé…
ACT6100, rappels et compléments
Reprise des cours ce jeudi, pour le cours ACT6100 d’analyse des données en actuariat. Les supports de cours sont en ligne sur https://github.com/freakonometrics/ACT6100. Avec la session en distanciel, le cours sera asynchrone, et je posterais régulièrement des capsules vidéos. Les capsules d’introduction et de compléments mathématiques sont (presque) toutes en ligne
1. Syllabus video pdf (36:36)
2. Glossaire video pdf (29:38)
3. Historique video pdf (24:54)
1. Vecteurs et distances video pdf (29:24)
2. Algèbre et applications linéaires video pdf (25:11)
3. Vecteurs et valeurs propres video pdf (24:27)
4. SVD video pdf (19:05)
5. Noyaux Hilbertiens video pdf
6. Vecteur Gaussien video pdf (15:11)
7. Convexité video pdf (24:10)
8. Optimisation (1) video pdf (23:26)
9. Optimisation (2) video pdf (35:02)
10. Optimisation et finance video pdf (13:36)
11. Programmation linéaire video pdf (39:10)
12. Temps de calcul video pdf
13. Lissage video pdf (35:19)
(mais on va avancer tranquillement, ces capsules étant à regarder pendant les 2 prochaines semaines)
Reprise des cours pour l’automne
Les cours de la session d’automne reprennent cette semaine, avec ACT6100 (analyse de données en assurance) jeudi et STT5100 (modèles linéaires appliqués). Les slides sont en ligne sur github, ainsi que les liens vers les vidéos (ces derniers seront mis à jour au fur et à mesure…)
Suite aux soucis sur viméo l’hiver dernier, toutes les vidéos sont maintenant sur youtube, avec une chaîne pour STT5100, et une pour ACT6100.
Automne 2020, à distance
C’est maintenant officiel, la session d’automne se fera (elle aussi) à distance, majoritairement. On en saura plus cet été, je pense…