3. Évaluation et validation des modèles
On peut toujours faire coller un modèle aux données sur lesquelles il a été entraîné. Ce qui compte, c'est sa performance sur des données jamais vues. Ce module fait de l'évaluation une compétence à part entière : comment estimer honnêtement l'erreur hors échantillon, comment s'en servir pour choisir un modèle, et les pièges qui rendent facile de se tromper soi-même, surtout avec des jeux de données petits ou dépendants.
Objectifs
- Distinguer l'erreur en échantillon de l'erreur hors échantillon et voir pourquoi l'erreur d'entraînement est optimiste.
- Séparer les données en ensembles d'entraînement, de validation et de test, et connaître le rôle de chacun.
- Estimer l'erreur de généralisation par validation croisée à k blocs.
- Utiliser la validation pour choisir modèles et hyperparamètres sans contaminer l'ensemble de test.
- Éviter les fuites de données et le biais d'anticipation, et valider des données dépendantes par des schémas temporels ou groupés.
3.1 Erreur en échantillon et hors échantillon
La quantité qui nous intéresse est l'erreur de généralisation, la perte espérée sur un nouveau tirage de la même population :
\[\boxed{ R(h) = \mathbb{E}_{(x, y)}\left[ L\!\left(h(x), y\right) \right] }\]On ne peut pas l'observer, il faut donc l'estimer. L'estimation tentante est l'erreur d'entraînement, la perte moyenne sur les données ayant servi à ajuster \(h\). Elle est biaisée vers le bas : le modèle s'est déjà adapté à cet échantillon précis, il se juge donc trop favorablement.
\[\boxed{ \hat{R}_{\text{train}}(h) = \frac{1}{m}\sum_{i=1}^{m} L\!\left(h(x^{(i)}), y^{(i)}\right) \;\le\; R(h) \ \text{(en espérance)} }\]Remarque : un modèle flexible poussé vers une erreur d'entraînement quasi nulle a en général mémorisé le bruit. C'est le surapprentissage, l'extrémité à forte variance du compromis biais-variance introduit dans Concepts généraux.
3.2 Ensembles d'entraînement, de validation et de test
La parade consiste à garder des données que le modèle n'a jamais vues pendant l'ajustement. La séparation standard a trois rôles disjoints :
| Ensemble | Sert à | Consulté |
|---|---|---|
| Entraînement | ajuster les paramètres du modèle | à chaque ajustement |
| Validation | choisir le modèle et ses hyperparamètres | plusieurs fois |
| Test | fournir une estimation finale honnête | une seule fois |
Remarque : l'ensemble de test est sacré. Chaque fois qu'un choix est guidé par la performance de test, celui-ci devient discrètement partie de l'entraînement et son estimation devient optimiste.
3.3 Validation croisée
Les jeux de données sont souvent petits, et une unique séparation entraînement/validation gaspille des données tout en donnant une estimation bruitée. La validation croisée à \(K\) blocs réutilise les données : on partitionne en \(K\) blocs, et pour chaque bloc on entraîne sur les \(K-1\) autres et on valide sur le bloc mis de côté. L'erreur de validation croisée moyenne les \(K\) tours :
\[\boxed{ \text{VC}_K = \frac{1}{K}\sum_{k=1}^{K} \frac{1}{|F_k|}\sum_{i \in F_k} L\!\left(h^{(-k)}(x^{(i)}), y^{(i)}\right) }\]
où \(h^{(-k)}\) est entraîné sur tous les blocs sauf \(F_k\). Prendre \(K = m\) donne la validation croisée « un contre tous ». Les choix courants sont \(K = 5\) ou \(K = 10\), un compromis entre calcul et variance de l'estimation.
Chaque tour met un bloc de côté pour la validation et entraîne sur le reste, et le score rapporté est la moyenne sur les blocs.
3.4 Sélection du modèle et des hyperparamètres
La validation croisée est notre outil de réglage. On ajuste chaque candidat (une famille de modèles, une profondeur d'arbre, ou la pénalité \(\lambda\) du module suivant) et on garde celui dont l'erreur de validation est la plus faible. Ce n'est qu'ensuite, une fois le choix figé, que l'on consulte l'ensemble de test pour rapporter un chiffre final.
Remarque : choisir le gagnant sur l'ensemble de test gonfle l'estimation. Avec assez de candidats, l'un paraîtra bon par pur hasard, c'est la malédiction du vainqueur, donc sélection et évaluation finale doivent utiliser des données différentes.
3.5 Pièges courants de la validation
Une validation honnête est plus difficile qu'il n'y paraît, et les données réelles brisent souvent les hypothèses habituelles de trois façons.
- Fuite de données. De l'information sur la cible se glisse dans les variables. Standardiser avec des statistiques calculées sur tout l'échantillon, ou inclure une variable réalisée après le résultat, laisse le modèle entrevoir la réponse. Tout prétraitement doit être ajusté sur les seuls blocs d'entraînement.
- Biais d'anticipation. Utiliser une information qui n'était pas encore disponible au moment de la prédiction, ce qui survient dès que les données sont ordonnées dans le temps, produit des backtests irreproductibles en conditions réelles.
- Dépendance. De nombreux jeux de données sont autocorrélés (séries temporelles) ou groupés (plusieurs observations partageant une même unité). Les mélanger en blocs aléatoires met des voisins quasi identiques de part et d'autre, et l'estimation devient bien trop optimiste.
Pour les séries temporelles, on utilise un schéma à origine glissante (par blocs) de sorte que le modèle ne soit testé que sur des données postérieures à sa fenêtre d'entraînement. Pour les données groupées, on met de côté des unités entières (validation croisée groupée) afin qu'aucune unité n'apparaisse des deux côtés.
Dans un schéma à origine glissante, la fenêtre d'entraînement s'étend dans le temps et le modèle est validé sur le bloc suivant, jamais sur des données mélangées.
Remarque : la question honnête derrière toute séparation est toujours la même. Cela aurait-il été connaissable à l'époque, à partir des données dont le modèle disposait réellement ?
Une fois la généralisation mesurable, le module suivant ajuste nos premiers modèles, et celui d'après contrôle leur complexité par la régularisation, réglée précisément avec cette validation croisée.
Suivant : Formulation probabiliste · Vue d'ensemble du cours
