Category Archives: Course

Moindres carrés, STT5100

On avance dans le cours STT5100 de modèles linéaires appliqués. Les supports de cours sont en ligne sur https://github.com/freakonometrics/STT5100. 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 en lien avec les moindres carrés sont en ligne

  1. Régressions video + pdf (40:01)
  2. Régression simple sur variable continue (1) video + pdf (41:33)
  3. Régression simple sur variable continue (2) video + pdf (30:26)
  4. Régression simple sur variable continue (3) video + pdf (30:39)
  5. Régression simple sur variable factorielle video + pdf (39:59)
  6. Régression multiple (1) video + pdf (45:56)
  7. Régression multiple (2) video + pdf (37:40)
  8. Modèle Gaussien et tests video + pdf (55:43)
  9. Bootstrap video + pdf (45:37)
  10. Diagnostique video + pdf (50:08)
  11. ANOVA (1) video + pdf (37:52)
  12. ANOVA (2) video + pdf (28:28)
  13. ANOVA (3) video + pdf (16:42)
  14. Régression pondérée video + pdf (16:33)
  15. Multicolinéarité (1) video + pdf (43:25)
  16. Sélection de variables video + pdf (44:13)
  17. MCG & hétéroscédasticité video + pdf (21:30)
  18. Multicolinéarité (2) video + pdf (25:05)
  19. ANOVA (4) pdf (hors programme)
  20. Transformations video + pdf (13:20)
  21. Lissage, non-linéarités video + pdf (34:51)
  22. Discontinuités video + pdf (21:36)
  23. Exemple video + pdf (40:24)
  24. Exemple video + pdf (28:17)

ACT6100, analyse non-supervisée

On avance tranquillement 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

  1. ACP (1) (PCAvideo pdf (48:42)
  2. ACP (2) video pdf (31:10)
  3. ACP (3) video pdf (47:51)
  4. ACP (4) video pdf (39:59)
  5. ACP (5) video pdf (28:53)
  6. CA (1) video pdf (38:33)
  7. CA (2) video pdf (46:51)
  8. MCA (1) video pdf (28:03)
  9. Clusters (k-means) video pdf (48:20)
  10. Clusters (CAH) video pdf (37:38)
  11. NA & Imputations (k-nn) video pdf (17:47)
  12. 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.

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}\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é…

STT5100, introduction et rappels

Reprise des cours ce vendredi pour STT5100, modèles linéaires appliqués. Les supports de cours sont en ligne sur https://github.com/freakonometrics/STT5100. Avec la session en distanciel, le cours sera asynchrone, et je posterais régulièrement des capsules vidéos. Les premières, présentant le cours, et reprenant les principaux concepts déjà vus dans les prérequis, sont en ligne

1. Syllabus video pdf (36:44)
2. Epistémologie video pdf (29:50)

1. Rmarkdown video pdf (30:48)
2. Probabilités video pdf (47:24)
3. Loi normale et vecteur Gaussien video pdf (36:05)
4. Maximum de vraisemblance video pdf (39:56)
5. Estimation paramétrique video pdf (27:32)
6. Estimation nonparamétrique video pdf (37:12)
7. Simulations, Bootstrap video pdf (40:50)
8. Tests (1) video pdf (32:29)
9. Tests (2) video pdf (32:30)
10. Tests (3) video pdf (25:44)
11. Optimisation video pdf (49:57)
12. Algèbre linéaire et matrices video pdf (53:54)

 

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.

INF7100, prédictions

La troisième (et dernière) partie de mon intervention sur la science des données, dans le cadre du cours INF7100 portera sur une introduction aux modèles prédictifs. Le plan sera le suivant

  • 311: Corrélation pdf video (8:35)
  • 321: Régression Simple pdf video (30:01)
  • 322: Régression Multiple pdf video (37:16)
  • 331: Lissage pdf video (37:35)
  • 341: Régression Quantile pdf video (32:00)
  • 351: Classification (analyse discriminante, régression logistique) pdf video (27:29)
  • 352: Courbe ROC pdf video (22:52)
  • 361: Application de la Régression [je ne sais pas si j’aurais le temps de faire l’application]
  • 371: Application de la Classification (images) pdf video (18:15)

INF7100, statistiques

La seconde partie de mon intervention sur la science des données, dans le cadre du cours INF7100 portera sur les statistiques, univariées et multivarirées. Le plan sera le suivant

  • 201: De la Statistique aux Sciences de Données pdf video (14:24)
  • 211: Fonctions Usuelles en Statistique (fonction de réparition, densité, histogramme) pdf video (28:37)
  • 221: Indicateurs Statistique: Valeur Centrale (moyenne) pdf video (32:56)
  • 222: Indicateurs Statistique: Dispersion (variance, inégalités) pdf video (22:21)
  • 223: Indicateurs Statistique: Approximations (approximation normale) pdf video (18:42)
  • 224: Indicateurs Statistique: Quantiles pdf video (24:54)
  • 231: Inférence (statistique bayésienne) pdf video (39:33)
  • 241: Tests Statistiques (1) (tests, significativité, p-value) pdf video (43:41)
  • 242: Tests Statistiques (2) (erreurs) pdf video (16:51)
  • 261: Statistiques Bivariées pdf video (25:16)
  • 271: Statistiques Multivariées: Projections pdf video (29:06)
  • 272: Statistiques Multivariées: Clusters pdf video (32:21)
  • 281: Réseaux et Graphs pdf video (32:40)
  • 291: Données Chronologiques pdf video (29:01)

 

INF7100, “rappels” de maths

En parallèle des trois parties de mon intervention sur la science des données, dans le cadre du cours INF7100, j’ai mis en ligne une série des capsules de “rappels” de maths.

  • 401: Concepts généraux (logarithme, exponentielle, dérivée, intégrale, approximation) pdf video (38:57)
  • 411: Optimisation (condition du premier ordre, descente de gradient, Lagrangien) pdf video (31:33)
  • 412: Ensembles (intersection, unions, fusion de bases, convexité, centroïdes) pdf video (10:13)
  • 421: Vecteurs et Matrices (orthogonalité, distance, norme, tenseurs) pdf video (43:20)
  • 422: Algèbre Linéaire (déterminant, valeurs propres, vecteurs propres, formes quadratiques, approximations) pdf
  • 423: Coordonnées (données circulaires, coordonnées polaires, projection, spatial) pdf
  • 431: Loi Gaussienne (loi normale, cas multivariée, limite et approximation, loi des grands nombres) pdf video (17:37)
  • 432: Lois Puissance (changement d’échelle, loi puissance, Zipf, Benford) pdf
  • 433: Loi de Durée (loi géométrique, loi exponentielle, loi de Poisson, loi des petits nombres) pdf
  • 434: Modèle de Markov (données séquentielles) pdf

INF7100, les données

La première partie de mon intervention sur la science des données, dans le cadre du cours INF7100 portera sur les données (et la distinction entre les données d’observations et les données d’expérience). Le plan est le suivant

  • 111: Observation vs. Expérimentation pdf video (19:48)
  • 112: Données Observationnelles et Biais pdf video (22:39)
  • 121: Paradoxe de Simpson pdf video (22:24)
  • 122: Recherche de Contrefactuels pdf video (25:27)
  • 123: A/B Testing et Renforcement pdf video (12:13)
  • 131: Incertitude (1) pdf video (39:01)
  • 132: Incertitude (2) pdf video (41:45)

(oui je suis passé sur youtube pour ce cours… mon compte viméo a malheureusement été suspendu… et toutes les capsules de mon cours précédent ne sont plus visibles)

INF7100, à distance

Suite au contexte de la covid-19, la session d’été commencera une semaine plus tard.

Le cours INF7100 Initiation à la science des données et à l’intelligence artificielle – qui devait commencer mardi 28 avril commencera le 5 mai prochain. Les étudiants inscrits recevront un lien pour se connecter, pour une présentation globale. On le donnera conjointement avec Marie-Jean Meurs (du département d’informatique) et Jean-Hugues Roy (de l’école des médias). Je posterais des informations dans les semaines à venir sur les points que je vais aborder (essentiellement sur la science des données).

STT5100, quiz (régression de Poisson #1)

Pour la fin de la semaine, j’avais donné un petit quiz, basé sur la base suivante, qui donne le nombre de cyclistes à une intersection, à New York City,

download.file("http://freakonometrics.free.fr/NYCVelo.RData","velo.RData")
load("velo.RData")
str(base)
'data.frame':	214 obs. of  7 variables:
 $ Date    : chr  "1-Apr-17" "2-Apr-17" "3-Apr-17" "4-Apr-17" ...
 $ HIGH_T  : num  46 62.1 63 51.1 63 48.9 48 55.9 66 73.9 ...
 $ LOW_T   : num  37 41 50 46 46 41 43 39.9 45 55 ...
 $ PRECIP  : num  0 0 0.03 1.18 0 0.73 0.01 0 0 0 ...
 $ BB_COUNT: int  606 2021 2470 723 2807 461 1222 1674 2375 3324 ...
 $ DAY     : chr  "Sam" "Dim" "Lun" "Mar" ...
 $ DIFF_T  : num  9 21.1 13 5.1 17 7.9 5 16 21 18.9 ......

En utiisant une régression de Poisson, il fallait prédire combien de cyclistes passeront un dimanche, s’il fait une température maximale de 85F, minimale de 70F, et s’il ne pleut pas. Et il fallait voir ce que donnerait la prévision pour un lundi.

newbase = data.frame(DAY=as.factor(c("Lun","Dim")),
 HIGH_T=c(85,85),LOW_T=c(70,70),
 PRECIP=c(0,0))

Faisons un modèle avec toutes les variables explicatives.

reg0 = glm(BB_COUNT~HIGH_T+LOW_T+PRECIP+DAY,data=base,family=poisson)

Rajoutons aussi une indicatrice pour indiquer les jours où il ne pleut pas,

reg = glm(BB_COUNT~HIGH_T+LOW_T+PRECIP+I(PRECIP==0)+DAY,data=base,family=poisson)
summary(reg) 
 
Coefficients:
                     Estimate Std. Error z value Pr(>|z|)    
(Intercept)         6.8844970  0.0110463 623.241   <2e-16 ***
HIGH_T              0.0210950  0.0003133  67.328   <2e-16 ***
LOW_T              -0.0114006  0.0003351 -34.024   <2e-16 ***
PRECIP             -0.6570450  0.0071899 -91.384   <2e-16 ***
I(PRECIP == 0)TRUE  0.1303908  0.0033283  39.176   <2e-16 ***
DAYJeu              0.1683475  0.0049690  33.880   <2e-16 ***
DAYLun              0.1144129  0.0050480  22.665   <2e-16 ***
DAYMar              0.1655886  0.0049936  33.160   <2e-16 ***
DAYMer              0.1688035  0.0049190  34.317   <2e-16 ***
DAYSam              0.0466447  0.0051838   8.998   <2e-16 ***
DAYVen              0.1003536  0.0050919  19.709   <2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
 
(Dispersion parameter for poisson family taken to be 1)
 
    Null deviance: 70021  on 213  degrees of freedom
Residual deviance: 26493  on 203  degrees of freedom
AIC: 28580
 
Number of Fisher Scoring iterations: 4

Tout semble vraiment significatif. Et même avoir du sens (si on regarde les signes, par exemple). Et si on a peur de rater un effet non-linéaire, on peut mettre des splines sur toutes les variables continues

library(gam)
reggam = gam(BB_COUNT~bs(HIGH_T)+bs(LOW_T)+bs(PRECIP)+I(PRECIP==0)+DAY,data=base,family=poisson)
plot(reggam, se=TRUE)

pour la température maximale, ou pour la température minimale

et la courbe suivante pour la précipitation, avec un lissage linéaire entre l’observation maximale (3) et celle juste avant (vers 1.8)

On peut aussi régresser sur la température minimale, et l’écart entre le maximum et le minimum (dans un modèle linéaire les modèles sont équivalents, mais avec de transformation nonlinéaire, la différence pourrait donner un modèle plus simple)

library(gam)
reggam2 = gam(BB_COUNT~bs(DIFF_T)+bs(LOW_T)+bs(PRECIP)+I(PRECIP==0)+DAY,data=base,family=poisson)
plot(reggam2, se=TRUE)

On peut maintenant comparer les quatre modèles, et leurs prévision. Par exemple, pour le modèle linéaire (avec la variable indicatrice indiquant qu’il ne pleut pas),

P = predict(reg,newdata=newbase,type="response",se.fit=TRUE)

pour le lundi, on obtient l’intervalle de confiance à 95% pour \widehat{\lambda}

P$fit[1]+c(-2,2)*P$se.fit[1]
[1] 3349.842 3401.395

et pour le dimanche l’intervalle de confiance à 95% est

P$fit[2]+c(-2,2)*P$se.fit[2]
[1] 2987.497 3033.861

On peut visualiser les quatre intervalles de confiance (avec, de haut en bas, le second modèle gam, le premier, le modèle linéaire avec l’indicatrice d’absence de pluie, puis le premier modèle linéaire)

alors que pour le dimanche, on a

Autrement dit, en changeant de modèle, on change beaucoup les intervalles de confiance sur la prévision (et les intervalles sont parfois complètement disjoints). Ce qui n’est pas forcément une bonne nouvelle.