Supposons que quelqu'un construise un modèle prédictif, mais que quelqu'un ne connaisse pas nécessairement les principes appropriés des statistiques ou de l'apprentissage automatique. Peut-être aidons-nous cette personne dans son apprentissage, ou peut-être utilise-t-elle une sorte de progiciel dont l'utilisation requiert un minimum de connaissances.
Maintenant, cette personne pourrait très bien reconnaître que le véritable test provient de l'exactitude (ou de toute autre métrique) sur des données hors échantillon . Cependant, ce qui me préoccupe, c’est qu’il ya beaucoup de subtilités à craindre. Dans le cas le plus simple, ils construisent leur modèle et l'évaluent sur des données de formation, puis sur des données de test conservées. Malheureusement, il peut parfois être trop facile à ce stade de modifier certains paramètres de modélisation et de vérifier les résultats sur les mêmes données "de test". À ce stade, les données ne sont plus de véritables données hors échantillon, et le surajustement peut devenir un problème.
Une solution possible à ce problème serait de suggérer de créer de nombreux jeux de données hors échantillon de sorte que chaque jeu de données de test puisse être supprimé après utilisation et ne pas être réutilisé du tout. Cela nécessite cependant beaucoup de gestion des données, en particulier le fait que la scission doit être effectuée avant l'analyse (vous devez donc savoir combien de scissions au préalable).
Une approche plus conventionnelle est peut-être la validation croisée par k-fold. Cependant, dans un certain sens, cela fait perdre la distinction entre un ensemble de données "formation" et "test" que je pense pouvoir être utile, en particulier pour ceux qui sont encore en train d'apprendre. De plus, je ne suis pas convaincu que cela soit logique pour tous les types de modèles prédictifs.
Y a-t-il un moyen que j'ai négligé pour aider à surmonter le problème de la suralimentation et du test des fuites tout en restant assez clair pour un utilisateur inexpérimenté?
la source
Réponses:
Vous avez raison, il s'agit d'un problème important en apprentissage machine / modélisation statistique. Le seul moyen de résoudre réellement ce problème consiste essentiellement à conserver un ensemble de tests indépendant jusqu'à la fin de l'étude et à l'utiliser pour la validation finale.
Cependant, inévitablement, les gens examineront les résultats de l'ensemble de tests et modifieront ensuite leur modèle en conséquence; Toutefois, cela n'entraînera pas nécessairement une amélioration des performances de généralisation, car la différence de performances de différents modèles peut être largement due à l'échantillon particulier de données de test dont nous disposons. Dans ce cas, en faisant un choix, nous corrigeons effectivement l’erreur de test.
La façon de limiter cela est de réduire autant que possible la variance de l'erreur de test (c'est-à-dire que la variabilité de l'erreur de test serait vérifiée si nous utilisions différents échantillons de données comme ensemble de test, issus de la même distribution sous-jacente). Ceci est plus facilement réalisable en utilisant un grand ensemble de tests si cela est possible, ou par exemple en procédant à l’amorçage ou à la validation croisée s’il n’ya pas beaucoup de données disponibles.
J'ai constaté que ce type de sur-ajustement dans la sélection du modèle est beaucoup plus gênant qu'on ne le pense généralement, en particulier en ce qui concerne l'estimation de la performance, voir
GC Cawley et NLC Talbot, sur-adaptation dans la sélection du modèle et biais de sélection subséquent dans l'évaluation de la performance, Journal of Machine Learning Research, 2010. Research, vol. 11, pp. 2079-2107, juillet 2010 (www)
Ce type de problème affecte particulièrement l'utilisation des ensembles de données de référence, qui ont été utilisés dans de nombreuses études, et chaque nouvelle étude étant implicitement affectée par les résultats des études précédentes, la performance observée sera probablement une estimation trop optimiste de la réalité. performance de la méthode. J'essaie de contourner ce problème en examinant de nombreux jeux de données (pour que la méthode ne soit pas adaptée à un jeu de données spécifique) et en utilisant plusieurs fractionnements de test / formation aléatoires pour l'estimation de la performance (afin de réduire la variance de l'estimation). Cependant, les résultats doivent encore être avertis que ces critères ont été surajustés.
Un autre exemple dans lequel cela se produit concerne les compétitions d’apprentissage automatique avec un tableau de bord basé sur un jeu de validation. Inévitablement, certains concurrents continuent à bricoler leur modèle pour monter plus haut dans le classement, mais finissent par se retrouver en bas du classement final. La raison en est que leurs choix multiples ont sur-ajusté l'ensemble de validation (apprentissage effectif des variations aléatoires dans le petit ensemble de validation).
Si vous ne pouvez pas conserver un ensemble de tests statistiquement pur, alors je crains que les deux meilleures options ne soient (i) collecter de nouvelles données pour créer un nouvel ensemble de tests statistiquement purs ou (ii) faire la mise en garde sur laquelle le nouveau modèle a été fondé sur un choix effectué après avoir observé l'erreur de l'ensemble de tests, l'estimation de performance risque donc d'avoir un biais optimiste.
la source
Une façon de vous en assurer est de vous assurer que vous avez bien codé tout ce que vous faites pour correspondre au modèle, même le "rafistolage". Ainsi, lorsque vous exécutez le processus à plusieurs reprises, par exemple via une validation croisée, vous gardez la cohérence entre les exécutions. Cela garantit que toutes les sources potentielles de variation sont capturées par le processus de validation croisée.
L’autre élément essentiel est de vous assurer que vous disposez d’un échantillon représentatif dans les deux ensembles de données. Si votre jeu de données n'est pas représentatif du type de données que vous prévoyez utiliser pour prédire, vous ne pouvez pas faire grand chose. Toute modélisation repose sur l'hypothèse que "l'induction" fonctionne: les choses que nous n'avons pas observées se comportent comme celles observées.
En règle générale, éloignez-vous des procédures complexes d'ajustement de modèle, sauf si (i) vous savez ce que vous faites, et (ii) que vous avez essayé les méthodes les plus simples et que vous vous êtes rendu compte qu'elles ne fonctionnaient pas, et que la méthode complexe corrige le problème. problèmes avec la méthode simple. "Simple" et "complexe" s'entendent au sens de "simple" ou "complexe" pour celui qui effectue l'ajustement. La raison pour laquelle cela est si important est que cela vous permet d'appliquer ce que j'aime appeler un "test de détection" aux résultats. Le résultat est-il correct? Vous ne pouvez pas "sentir" les résultats d'une procédure que vous ne comprenez pas.
Fondamentalement, tout cela revient à utiliser un terme de pénalité pour tenir compte de la différence entre les erreurs d'apprentissage et de test, telles que BIC ou AIC. Cela produit effectivement le même résultat que l'utilisation d'un ensemble de tests, mais vous n'êtes pas obligé de jeter des informations potentiellement utiles. Avec le code BIC, vous approximez les preuves du modèle, qui ressemble mathématiquement à:
Cela suggère une forme de validation croisée, mais lorsque l'ensemble d'apprentissage est mis à jour en permanence, une observation à la fois de l'ensemble d'essai - similaire au filtre de Kalman. Nous prédisons l'observation suivante à partir de l'ensemble de tests en utilisant l'ensemble d'apprentissage actuel, mesurons l'écart par rapport à la valeur observée à l'aide du log-vraisemblance conditionnel, puis mettons à jour l'ensemble d'apprentissage en incluant la nouvelle observation. Cependant, notez que cette procédure digère complètement toutes les données disponibles, tout en veillant à ce que chaque observation soit testée comme un cas "hors échantillon". Il est également invariant, en ce sens que ce que vous appelez "observation 1" ou "observation 10" n'a pas d'importance; le résultat est identique (les calculs peuvent être plus faciles pour certaines permutations que d'autres). La fonction de perte est aussi "adaptative"Li=log[p(yi|y1…yi−1MiI)] Li i
Je suggérerais que l'évaluation des modèles prédictifs de cette façon fonctionnerait assez bien.
la source
Je suppose que le seul moyen de garantir cela est que quelqu'un d'autre dispose des données de test . Dans une relation client-consultant, cela peut être géré assez facilement: le client donne au consultant la formation sur laquelle construire les modèles et, à l'intérieur de cette formation, le consultant peut fractionner les données de la manière nécessaire pour éviter la sur-adaptation. se produire; ensuite, les modèles sont redonnés au client pour être utilisés dans leurs données de test.
Pour un chercheur individuel, il va de soi que la meilleure pratique consisterait donc à imiter cette configuration. Cela impliquerait de récupérer certaines des données à tester, une fois que toutes les sélections de modèles ont été effectuées. Malheureusement, comme vous le dites, beaucoup de gens ne le pratiquent pas, et cela arrive même à des gens qui devraient savoir mieux!
Cependant, cela dépend en fin de compte de l'utilisation du modèle. Si la prédiction sur un seul jeu de données ne vous intéresse jamais, alors peut-être pouvez-vous surévaluer tout ce que vous aimez? Toutefois, si vous essayez de promouvoir votre modèle en tant que modèle généralisable ou de l'utiliser dans certaines applications du monde réel, il est évident que cela revêt une grande importance.
Il y a un problème secondaire que je pensais devoir mentionner: même si vous suivez toutes les procédures correctement, vous pouvez toujours vous retrouver avec des modèles sur-équipés, car les données ne sont pas vraiment iid . Par exemple, s'il existe des corrélations temporelles dans les données, si vous prenez toutes vos données d'entraînement de 1 à 3 fois et testez à 4, vous constaterez peut-être que l'erreur de prédiction est plus grande que prévu. Alternativement, il peut exister des artefacts spécifiques à l'expérience, tels que le dispositif de mesure utilisé ou le pool de sujets expérimentés sur l'homme, qui rendent la généralisation des modèles pire que prévu.
la source
view
définissant les autorisations de base de données en conséquence, certaines équipes étant test-data-privy et d'autres en test-data-blind.C'est une très bonne question et un problème très subtil. Bien sûr, il y a les erreurs de mauvaise intention, qui proviennent de quelqu'un qui essaie de vous tromper. Mais il y a une question plus profonde de savoir comment éviter les fuites accidentelles et éviter les erreurs honnêtes.
Laissez-moi énumérer quelques bonnes pratiques opérationnelles. Elles découlent toutes d'erreurs honnêtes que j'ai commises à un moment donné:
la source
Les excellentes réponses déjà données ont couvert de nombreux points importants.
Dernièrement, j'ai développé cette liste de contrôle personnelle pour l'indépendance statistique des données de test:
Il existe un autre type particulier de fuite de données dans mon domaine: nous effectuons une spectroscopie à résolution spatiale de tissus biologiques. L'étiquetage de référence des spectres de test doit être aveuglé par rapport aux informations spectroscopiques, même s'il est tentant d'utiliser une analyse de cluster et de rechercher la classe à laquelle appartient chaque cluster (il s'agirait de données de test semi-supervisées qui ne sont pas pertinentes). indépendant du tout).
Dernier point, mais non le moindre: lors du codage de la validation du rééchantillonnage, je vérifie réellement si les indices calculés dans l'ensemble de données ne conduisent pas à la saisie de lignes de test de patients en formation, de jours, etc.
Notez que le "fractionnement non effectué pour assurer l'indépendance" et le "fractionnement avant tout calcul impliquant plus d'un cas" peuvent également se produire avec des tests prétendant utiliser un jeu de tests indépendant, et ce même si l'analyste de données est aveuglé à la référence des cas de test. Ces erreurs ne peuvent pas se produire si les données de test sont retenues jusqu'à ce que le modèle final soit présenté.
* J'utilise les patients comme la plus haute hiérarchie des données, rien que pour la facilité de description.
** Je suis chimiste analytique: la dérive d'instruments est un problème connu. En fait, une partie de la validation des méthodes d'analyse chimique consiste à déterminer la fréquence à laquelle les étalonnages doivent être vérifiés par rapport aux échantillons de validation et à quelle fréquence l'étalonnage doit être refait.
FWIW: En pratique, je traite des applications où
Personnellement, je n'ai pas encore rencontré l'application où, pour le développement du classificateur, j'ai suffisamment de cas indépendants pour permettre de mettre de côté un ensemble de tests indépendant approprié. Ainsi, je suis parvenu à la conclusion que la validation du rééchantillonnage correctement effectuée est la meilleure alternative tant que la méthode est en cours de développement. Des études de validation appropriées devront éventuellement être réalisées, mais il s’agit d’un énorme gaspillage de ressources (ou les résultats ne fourniront aucune information utile en raison de divergences), alors que le développement de la méthode est dans une phase où les choses changent encore.
la source
Si je me souviens bien, certains des concours de prévisions (tels que Netflix ou ceux sur Kaggle) utilisent ce schéma:
Il y a un ensemble de formation, avec les "réponses". Il existe un ensemble de tests n ° 1, pour lequel le chercheur fournit des réponses. Le chercheur découvre leur score. Il existe un ensemble de tests n ° 2, pour lequel le chercheur fournit des réponses, MAIS le chercheur ne découvre pas leur score. Le chercheur ne sait pas quels cas de prédiction sont en # 1 et # 2.
À un moment donné, le jeu n ° 2 doit devenir visible, mais vous avez au moins limité la contamination.
la source
Dans certains cas, tels que les prédicteurs basés sur une séquence biologique, il ne suffit pas de garantir que les cas n'apparaissent pas dans plus d'un ensemble. Vous devez toujours vous inquiéter de la dépendance entre les ensembles.
Par exemple, pour les prédicteurs basés sur les séquences, il est nécessaire de supprimer la redondance en veillant à ce que les séquences de différents ensembles (y compris les différents ensembles de validation croisée) ne partagent pas un niveau élevé de similarité de séquence.
la source
Je dirais que la "validation croisée au pli" est la bonne réponse du point de vue théorique, mais votre question semble porter davantage sur l'organisation et l'enseignement, donc je vais vous répondre différemment.
Quand les gens "apprennent encore", on pense souvent qu'ils apprennent à appliquer "rapidement et souilleusement" les algorithmes et toutes les connaissances "supplémentaires" (motivation du problème, préparation du jeu de données, validation, analyse des erreurs, pièges pratiques, etc.). ) seront appris "plus tard" quand ils seront "mieux préparés".
C'est totalement faux.
Si nous voulons qu'un étudiant ou quiconque comprenne la différence entre un ensemble de test et un ensemble de formation, le pire est de donner les deux ensembles à deux types différents, comme si nous pensions "à ce stade" la "connaissance supplémentaire" est nocif. C’est comme une approche en cascade dans le développement logiciel - quelques mois de conception pure, puis quelques mois de codage pur, puis quelques mois de tests purs et un résultat pitoyable à la fin.
Apprendre ne devrait pas aller comme cascade. Toutes les parties de l'apprentissage - motivation du problème, algorithme, pièges pratiques, évaluation des résultats - doivent être réunies, par petites étapes. (Approche agile dans le développement de logiciels).
Tout le monde ici a peut-être parcouru le site ml-class.org d'Andrew Ng - je mettrais son cours comme exemple d'un style "robuste", si vous voulez, d'apprentissage - celui qui ne poserait jamais la question "comment s'assurer que les données de test ne fuient pas dans les données d'entraînement ".
Notez que j'ai peut-être complètement mal compris votre question, alors excuses-moi! :)
la source