Supongamos que tenemos a alguien construyendo un modelo predictivo, pero que alguien no está necesariamente versado en los principios estadísticos o de aprendizaje automático adecuados. Tal vez estamos ayudando a esa persona mientras está aprendiendo, o tal vez esa persona está utilizando algún tipo de paquete de software que requiere un conocimiento mínimo para su uso.
Ahora bien, esta persona podría reconocer que la prueba real proviene de la precisión (o cualquier otra métrica) en los datos fuera de la muestra . Sin embargo, mi preocupación es que hay muchas sutilezas de las que preocuparse. En el caso simple, construyen su modelo y lo evalúan en datos de entrenamiento y lo evalúan en datos de prueba destacados. Desafortunadamente, a veces puede ser demasiado fácil volver atrás y modificar algunos parámetros de modelado y verificar los resultados en los mismos datos de "prueba". En este punto, los datos ya no son verdaderos datos fuera de muestra, y el sobreajuste puede convertirse en un problema.
Una forma potencial de resolver este problema sería sugerir la creación de muchos conjuntos de datos fuera de la muestra, de modo que cada conjunto de datos de prueba pueda descartarse después del uso y no reutilizarse en absoluto. Sin embargo, esto requiere una gran cantidad de gestión de datos, especialmente porque la división debe realizarse antes del análisis (por lo que necesitaría saber cuántas divisiones de antemano).
Quizás un enfoque más convencional es la validación cruzada k-fold. Sin embargo, en cierto sentido eso pierde la distinción entre un conjunto de datos de "entrenamiento" y "prueba" que creo que puede ser útil, especialmente para aquellos que todavía están aprendiendo. Además, no estoy convencido de que esto tenga sentido para todos los tipos de modelos predictivos.
¿Hay alguna forma que haya pasado por alto para ayudar a superar el problema de sobreajustar y probar las fugas sin dejar de ser algo claro para un usuario inexperto?
fuente
Respuestas:
Tiene razón, este es un problema importante en el aprendizaje automático / modelado estadístico. Esencialmente, la única forma de resolver realmente este problema es retener un conjunto de pruebas independiente y mantenerlo en espera hasta que se complete el estudio y usarlo para la validación final.
Sin embargo, inevitablemente las personas verán los resultados en el conjunto de pruebas y luego cambiarán su modelo en consecuencia; sin embargo, esto no necesariamente resultará en una mejora en el rendimiento de generalización, ya que la diferencia en el rendimiento de los diferentes modelos puede deberse en gran medida a la muestra particular de datos de prueba que tenemos. En este caso, al tomar una decisión, estamos ajustando de manera efectiva el error de prueba.
La forma de limitar esto es hacer que la varianza del error de prueba sea lo más pequeña posible (es decir, la variabilidad en el error de prueba que veríamos si utilizáramos diferentes muestras de datos como el conjunto de prueba, extraído de la misma distribución subyacente). Esto se logra más fácilmente utilizando un conjunto de prueba grande si es posible, o por ejemplo, bootstrapping o validación cruzada si no hay muchos datos disponibles.
He descubierto que este tipo de ajuste excesivo en la selección del modelo es mucho más problemático de lo que generalmente se aprecia, especialmente con respecto a la estimación del rendimiento, ver
GC Cawley y NLC Talbot, Ajuste excesivo en la selección del modelo y posterior sesgo de selección en la evaluación del rendimiento, Journal of Machine Learning Research, 2010. Research, vol. 11, págs. 2079-2107, julio de 2010 (www)
Este tipo de problema afecta especialmente el uso de conjuntos de datos de referencia, que se han utilizado en muchos estudios, y cada nuevo estudio está implícitamente afectado por los resultados de estudios anteriores, por lo que es probable que el rendimiento observado sea una estimación demasiado optimista de la verdadera rendimiento del método. La forma en que trato de evitar esto es mirar muchos conjuntos de datos (para que el método no esté ajustado a un conjunto de datos específico) y también usar múltiples divisiones aleatorias de prueba / entrenamiento para la estimación del rendimiento (para reducir la varianza de la estimación). Sin embargo, los resultados aún necesitan la advertencia de que estos puntos de referencia se han ajustado demasiado.
Otro ejemplo en el que esto ocurre es en las competencias de aprendizaje automático con una tabla de clasificación basada en un conjunto de validación. Inevitablemente, algunos competidores siguen jugando con su modelo para ascender en la clasificación, pero luego terminan en la parte inferior de la clasificación final. La razón de esto es que sus múltiples opciones han sobreajustado el conjunto de validación (aprendiendo efectivamente las variaciones aleatorias en el pequeño conjunto de validación).
Si no puede mantener un conjunto de prueba estadísticamente puro, entonces me temo que las dos mejores opciones son (i) recopilar algunos datos nuevos para hacer un nuevo conjunto de prueba estadísticamente puro o (ii) hacer la advertencia de que se basó el nuevo modelo en una elección realizada después de observar el error del conjunto de prueba, por lo que es probable que la estimación del rendimiento tenga un sesgo optimista.
fuente
Una forma de garantizar esto es asegurarse de haber codificado todas las cosas que hace para adaptarse al modelo, incluso "retoques". De esta manera, cuando ejecuta el proceso repetidamente, por ejemplo, mediante validación cruzada, mantiene las cosas coherentes entre las ejecuciones. Esto asegura que todas las posibles fuentes de variación sean capturadas por el proceso de validación cruzada.
La otra cosa de vital importancia es asegurarse de tener una muestra representativa en ambos conjuntos de datos. Si su conjunto de datos no es representativo del tipo de datos que espera utilizar para predecir, entonces no hay mucho que pueda hacer. Todos los modelos se basan en la suposición de que la "inducción" funciona: las cosas que no hemos observado se comportan como las que hemos observado.
Como regla general, manténgase alejado de los procedimientos de ajuste de modelos complejos a menos que (i) sepa lo que está haciendo y (ii) haya probado los métodos más simples y descubra que no funcionan y cómo el método complejo soluciona problemas con el método simple "Simple" y "complejo" significan en el sentido de "simple" o "complejo" para la persona que hace la adaptación. La razón por la que esto es tan importante es que le permite aplicar lo que me gusta llamar una "prueba de detección" a los resultados. ¿El resultado se ve bien? No puede "oler" los resultados de un procedimiento que no comprende.
NOTA: la siguiente parte, bastante larga, de mi respuesta se basa en mi experiencia, que se encuentra en el área , con posiblemente grande. Estoy casi seguro de que lo que sigue a continuación no se aplicaría a los casos oN>>p p N≈p N<p
Cuando tiene una muestra grande, la diferencia entre usar y no usar una observación dada es muy pequeña, siempre que su modelado no sea demasiado "local". Esto se debe a que la influencia de un punto de datos dado es generalmente del orden de . Por lo tanto, en conjuntos de datos grandes, los residuos que se obtienen al "mantener" el conjunto de datos de prueba son básicamente los mismos que los residuos que se obtienen al usarlo en el conjunto de datos de entrenamiento. Puedes mostrar esto usando mínimos cuadrados ordinarios. El residuo que obtiene al excluir la ésima observación (es decir, cuál sería el error del conjunto de prueba si colocamos la observación en el conjunto de prueba) es , donde es el residuo de entrenamiento, y1N i etesti=(1−hii)−1etraini etraini hii es el apalancamiento del punto de datos . Ahora tenemos que , donde es el número de variables en la regresión. Ahora si , entonces es extremadamente difícil para cualquier ser lo suficientemente grande como para hacer una diferencia apreciable entre el conjunto de prueba y los errores del conjunto de entrenamiento. Podemos tomar un ejemplo simplificado, supongamos que (intersección y variable), matriz de diseño es (conjuntos de entrenamiento y prueba), y el apalancamiento esi ∑ihii=p p N>>p hii p=2 1 N×p X
Donde , y . Finalmente, es la variable predictiva estandarizada, y mide cuántas desviaciones estándar es de la media. Por lo tanto, sabemos desde el principio que el error del conjunto de prueba será mucho mayor que el error del conjunto de entrenamiento para las observaciones "en el borde" del conjunto de entrenamiento. Pero esto es básicamente ese problema representativo nuevamente: las observaciones "en el borde" son menos representativas que las observaciones "en el medio". Además, esto es para ordenar . Entonces, si tienes observaciones, incluso six¯¯¯=N−1∑ixi x2¯¯¯¯¯=N−1∑ix2i s2x=x2¯¯¯¯¯−x¯¯¯2 x~i=xi−x¯¯¯sx xi 1N 100 x~i=5 (un valor atípico en el espacio x según la mayoría de las definiciones), esto significa , y el error de prueba se subestima por un factor de solo . Si tiene un conjunto de datos grande, digamos , es aún más pequeño, , que es menor que . De hecho, para observaciones, necesitaría una observación de para hacer una del error del conjunto de prueba, utilizando el error del conjunto de entrenamiento.hii=26100 1−26100=74100 10000 1−2610000 1% 10000 x~=50 25%
Entonces, para grandes conjuntos de datos, el uso de un conjunto de pruebas no solo es ineficiente, sino que también es innecesario, siempre que . Esto aplica para OLS y también aplica aproximadamente para GLM (los detalles son diferentes para GLM, pero la conclusión general es la misma). En más de dimensiones, los "valores atípicos" están definidos por las observaciones con puntajes grandes de "componente principal". Esto se puede mostrar escribiendo Donde es la matriz de vectores propios (ortogonales) para , con matriz de valores propios . Obtenemos dondeN>>p 2 hii=xTiEET(XTX)−1EETxi E XTX Λ hii=zTiΛ−1zi=∑pj=1z2jiΛjj zi=ETxi es el puntaje del componente principal para .xi
Si su conjunto de prueba tiene observaciones, obtendrá una versión matricial , donde y son las filas de la matriz de diseño en el conjunto de prueba. Entonces, para la regresión OLS, ya sabe cuáles habrían sido los errores del "conjunto de prueba" para todas las posibles divisiones de los datos en conjuntos de entrenamiento y prueba. En este caso ( ), no hay necesidad de dividir los datos en absoluto. Puede informar los errores del conjunto de pruebas "mejor caso" y "peor caso" de casi cualquier tamaño sin tener que dividir los datos. Esto puede ahorrarle mucho tiempo y recursos a la PC.k etest{k}=(Ik−H{k})−1etrain{k} H{k}=X{k}(XTX)−1XT{k} X{k} N>>p
Básicamente, todo esto se reduce al uso de un término de penalización, para tener en cuenta la diferencia entre errores de entrenamiento y prueba, como BIC o AIC. Esto logra efectivamente el mismo resultado que lo que hace el uso de un conjunto de prueba, sin embargo, no está obligado a tirar información potencialmente útil. Con el BIC, está aproximando la evidencia para el modelo, que se ve matemáticamente como:
Tenga en cuenta que en este procedimiento, no podemos estimar ningún parámetro interno: cada modelo debe especificarse completamente o tener sus parámetros internos integrados. Sin embargo, podemos hacer que esto parezca validación cruzada (usando una función de pérdida específica) usando repetidamente la regla del producto y luego tomando el registro del resultado:Mi
Esto sugiere una forma de validación cruzada, pero cuando el conjunto de entrenamiento se actualiza constantemente, una observación a la vez desde el conjunto de prueba, similar al filtro de Kalman. Predecimos la siguiente observación del conjunto de prueba usando el conjunto de entrenamiento actual, medimos la desviación del valor observado usando la probabilidad de registro condicional y luego actualizamos el conjunto de entrenamiento para incluir la nueva observación. Pero tenga en cuenta que este procedimiento digiere completamente todos los datos disponibles, al tiempo que se asegura de que cada observación se pruebe como un caso "fuera de muestra". También es invariante, ya que no importa lo que llames "observación 1" u "observación 10"; el resultado es el mismo (los cálculos pueden ser más fáciles para algunas permutaciones que para otras). La función de pérdida también es "adaptativa" en que si definimos L iLi=log[p(yi|y1…yi−1MiI)] , entonces la nitidez de depende de , porque la función de pérdida se actualiza constantemente con nuevos datos.Li i
Sugeriría que evaluar modelos predictivos de esta manera funcionaría bastante bien.
fuente
Supongo que la única forma de garantizar esto es que otra persona tenga los datos de prueba . En una relación cliente-consultor, esto se puede gestionar con bastante facilidad: el cliente le brinda al consultor el conjunto de capacitación sobre el cual construir los modelos, y dentro de este conjunto de capacitación, el consultor puede dividir los datos de cualquier manera necesaria para garantizar que el sobreajuste no ocurrir; posteriormente, los modelos se devuelven al cliente para usar en sus datos de prueba.
Para un investigador individual, es lógico pensar que la mejor práctica sería imitar esta configuración. Esto significaría extraer algunos de los datos para probar, después de que se haya realizado toda la selección del modelo. Desafortunadamente, como usted dice, esto no es practicado por muchas personas, ¡e incluso le sucede a las personas que deberían saberlo mejor!
Sin embargo, en última instancia, depende de para qué se esté utilizando el modelo. Si solo está interesado en la predicción de ese conjunto de datos único, entonces ¿tal vez pueda sobreajustar todo lo que quiera? Sin embargo, si está tratando de promover su modelo como uno que se generalice bien, o use el modelo en alguna aplicación del mundo real, entonces, por supuesto, esto es de gran importancia.
Hay un problema secundario que pensé que debería mencionar, y es que incluso si sigues todos los procedimientos correctamente, aún puedes terminar con modelos que están sobreajustados, debido a que los datos no están realmente identificados . Por ejemplo, si hay correlaciones temporales en los datos, entonces si toma todos sus datos de entrenamiento de los tiempos 1-3 y realiza la prueba en el tiempo 4, entonces puede encontrar que el error de predicción es mayor de lo esperado. Alternativamente, podría haber artefactos específicos del experimento, como el dispositivo de medición que se utiliza o el grupo de sujetos en experimentos humanos, que causan que la generalización de los modelos sea peor de lo esperado.
fuente
view
establecer los permisos de la base de datos en consecuencia, donde algunos equipos tienen acceso a los datos de prueba y otros son ciegos a los datos de prueba.Esta es una muy buena pregunta y un problema muy sutil. Por supuesto, están los errores mal intencionados, que derivan de alguien que intenta engañarte. Pero hay una pregunta más profunda sobre cómo evitar fugas accidentales y evitar errores honestos.
Permítanme enumerar algunas buenas prácticas operativas. Todos provienen de errores honestos que he cometido en algún momento:
fuente
Muchos puntos importantes se han cubierto en las excelentes respuestas que ya se dan.
Últimamente, he desarrollado esta lista de verificación personal para la independencia estadística de los datos de prueba:
Hay otro tipo peculiar de fuga de datos en mi campo: hacemos espectroscopía espacialmente resuelta de tejidos biológicos. El etiquetado de referencia de los espectros de prueba debe cegarse contra la información espectroscópica, incluso si es tentador usar un análisis de conglomerados y luego simplemente descubrir a qué clase pertenece cada conglomerado (eso sería datos de prueba semi-supervisados que no son independiente en absoluto).
Por último, pero no menos importante: cuando codifico la validación de remuestreo, en realidad verifico si los índices calculados en el conjunto de datos no conducen a tomar filas de prueba de pacientes en formación, días, etc.
Tenga en cuenta que la "división no realizada para garantizar la independencia" y la "división antes de que ocurra cualquier cálculo que involucre más de un caso" también puede ocurrir con pruebas que afirman usar un conjunto de pruebas independiente, y este último incluso si el analista de datos es cegado a la referencia de los casos de prueba. Estos errores no pueden ocurrir si los datos de la prueba se retienen hasta que se presente el modelo final.
* Estoy usando pacientes como la jerarquía más alta en datos solo por la facilidad de la descripción.
** Soy químico analítico: la deriva del instrumento es un problema conocido. De hecho, parte de la validación de los métodos de análisis químico es determinar con qué frecuencia las calibraciones deben verificarse contra las muestras de validación, y con qué frecuencia la calibración debe rehacerse.
FWIW: En la práctica, trato con aplicaciones donde
Personalmente, todavía tengo que cumplir con la aplicación donde para el desarrollo de clasificadores obtengo suficientes casos independientes para permitir dejar a un lado un conjunto de pruebas independiente adecuado. Por lo tanto, llegué a la conclusión de que la validación de remuestreo realizada correctamente es la mejor alternativa mientras el método aún está en desarrollo. Eventualmente, se deberán realizar estudios de validación adecuados, pero es un gran desperdicio de recursos (o los resultados no llevarán información útil debido a la variación), mientras que el desarrollo del método se encuentra en una etapa en la que las cosas todavía cambian.
fuente
Si no recuerdo mal, algunos de los concursos de pronósticos (como Netflix o los de Kaggle) usan este esquema:
Hay un conjunto de entrenamiento, con las "respuestas". Existe el conjunto de pruebas # 1, para el cual el investigador proporciona respuestas. El investigador descubre su puntaje. Existe el conjunto de pruebas # 2, para el cual el investigador proporciona respuestas, PERO el investigador no encuentra su puntaje. El investigador no sabe qué casos de predicción se encuentran en el n. ° 1 y n. ° 2.
En algún momento, el conjunto # 2 tiene que hacerse visible, pero al menos ha limitado la contaminación.
fuente
En algunos casos, como los predictores basados en secuencias biológicas, no es suficiente garantizar que los casos no aparezcan en más de un conjunto. Aún debe preocuparse por la dependencia entre los conjuntos.
Por ejemplo, para los predictores basados en secuencias, es necesario eliminar la redundancia asegurando que las secuencias en diferentes conjuntos (incluidos los diferentes conjuntos de validación cruzada) no compartan un alto nivel de similitud de secuencia.
fuente
Yo diría que la "validación cruzada k-fold" es la respuesta correcta desde el punto de vista teórico, pero su pregunta parece más sobre cuestiones de organización y enseñanza, por lo que responderé de manera diferente.
Cuando las personas "todavía están aprendiendo", a menudo se piensa como si estuvieran aprendiendo cómo aplicar "rápida y suciamente" los algoritmos y todo el conocimiento "adicional" (motivación del problema, preparación del conjunto de datos, validación, análisis de errores, errores prácticos, etc.) ) se aprenderán "más tarde" cuando estén "más preparados".
Esto es completamente incorrecto.
Si queremos que un estudiante o quien sea que entienda la diferencia entre un conjunto de pruebas y un conjunto de entrenamiento, lo peor será dar los dos conjuntos a dos tipos diferentes como si pensáramos que "en esta etapa" el "conocimiento adicional" es perjudicial. Esto es como un enfoque en cascada en el desarrollo de software: unos meses de diseño puro, luego unos meses de codificación pura, luego unos meses de pruebas puras y un resultado lamentable al final.
El aprendizaje no debe ir como una cascada. Todas las partes del aprendizaje (motivación del problema, algoritmo, problemas prácticos, evaluación de resultados) deben unirse, en pequeños pasos. (Como enfoque ágil en el desarrollo de software).
Tal vez todos aquí hayan pasado por ml-class.org de Andrew Ng . Yo pondría su curso como un ejemplo de un estilo de aprendizaje "ágil" robusto, el que nunca daría una pregunta de "cómo asegúrese de que los datos de prueba no se filtren en los datos de entrenamiento ".
Tenga en cuenta que es posible que haya entendido mal su pregunta, así que ¡disculpas! :)
fuente