Tratar con un buen desempeño en los datos de capacitación y validación, pero muy mal desempeño en los datos de prueba

8

Tengo un problema de regresión con 5-6k variables. Divido mis datos en 3 conjuntos no superpuestos: capacitación, validación y pruebas. Entreno usando solo el conjunto de entrenamiento y genero muchos modelos de regresión lineal diferentes eligiendo un conjunto diferente de 200 variables para cada modelo (intento aproximadamente 100k de tales subconjuntos). Califico un modelo como . Usando este criterio, termino eligiendo un modelo. Resulta que el modelo elegido tiene R ^ 2 muy similar en el entrenamiento y los datos de validación. Sin embargo, cuando pruebo este modelo en los datos de prueba, tiene un R ^ 2 mucho más bajo . Por lo tanto, parece que de alguna manera estoy sobreajustando tanto el entrenamiento como los datos de validación. ¿Alguna idea sobre cómo puedo obtener un modelo más robusto? min(Rtraining data2,Rvalidation data2)R2R2

Intenté aumentar el tamaño de los datos de entrenamiento, pero eso no ayudó. Estoy pensando en reducir el tamaño de cada subconjunto.

He intentado usar la regularización. Sin embargo, los modelos que obtengo usando el lazo o la red elástica tienen un R ^ 2 mucho más bajo R2en el conjunto de entrenamiento y en el conjunto de validación, en comparación con el modelo que obtengo al hacer el enfoque de selección de subconjunto. Por lo tanto, no considero estos modelos, ya que supongo que si el Modelo A funciona mejor que el Modelo B tanto en el conjunto de entrenamiento como en el conjunto de validación, el Modelo A es claramente mejor que el Modelo B. Sería muy curioso si usted no estoy de acuerdo con esto

En una nota relacionada, ¿crees que R2 es un mal criterio para elegir mis modelos?

usuario10
fuente

Respuestas:

5

Si bien esto suena como un sobreajuste, creo que en realidad es más probable que tenga algún tipo de "error" en su código o proceso. Comenzaría por verificar que su conjunto de pruebas no sea sistemáticamente diferente del conjunto de capacitación / validación. Supongamos que sus datos están ordenados por fecha (o lo que sea). Si utilizó el primer 50% para el entrenamiento, el siguiente 25% para la validación y el resto para las pruebas, es posible que haya estratificado accidentalmente sus datos de manera que los datos de entrenamiento sean algo representativos de los datos de validación, pero no tanto para el prueba de datos. Esto es bastante fácil de hacer por accidente.

También debe asegurarse de no estar "sumergiendo dos veces" en los datos de validación de alguna manera, lo que a veces ocurre accidentalmente.

Alternativamente, el propio @Frank Harrell de CV ha informado de que una sola división de tren / prueba a menudo es demasiado variable para proporcionar información útil sobre el rendimiento de un sistema (tal vez pueda pesar con una cita o algunos datos). Podría considerar hacer algo como validación cruzada o bootstrapping, que le permitiría medir tanto la media como la varianza de su medida de precisión.

A diferencia de Mikera, no creo que el problema sea tu mecanismo de puntuación. Dicho esto, no puedo imaginar una situación en la que su , por lo que sugeriría la puntuación utilizando solo los datos de validación.Rtraining2<Rvalidation2

En términos más generales, creo que o algo así es una opción razonable para medir el rendimiento de un modelo de salida continua, suponiendo que conozca sus posibles advertencias. Dependiendo exactamente de lo que esté haciendo, es posible que también desee ver el error máximo o peor. Si de alguna manera está discretizando su salida (regresión logística, algunos umbrales externos), entonces mirar precisión / recuperación / AUC podría ser una mejor idea.R2

Matt Krause
fuente
Gracias por tu respuesta Matt. De hecho, tengo datos ordenados por fecha. Lo divido en 3 partes y uso la primera parte para el entrenamiento, la siguiente parte para la validación y la última parte para las pruebas. Para mi aplicación, los datos de las pruebas siempre serán cronológicamente después del conjunto de entrenamiento y validación, aunque puedo mezclar el conjunto de entrenamiento y validación como quiera (incluida la validación cruzada). Voy a intentar la validación cruzada. Sin embargo, no espero que lo haga bien porque mi en el conjunto de entrenamiento y validación está bastante cerca. <El descanso continúa en el siguiente comentario>R2
usuario10
También comprobaré la varianza en para diferentes días. Si la varianza es alta, esperaría que la validación cruzada sea útil. Si no, esperaría que dé resultados similares a tener un conjunto de validación como el que ya tengo. ¡Gracias de nuevo! R2
usuario10
El orden per se no es el problema; es que el conjunto de entrenamiento puede ser más representativo del conjunto de validación que el conjunto de prueba. Por ejemplo, imagina que estás prediciendo las ventas de una tienda. Si su conjunto de entrenamiento contiene junio, julio y agosto, probablemente también hará un buen trabajo al predecir las ventas de septiembre (el conjunto de validación). Sin embargo, podría desintegrarse por completo cuando se prueba en noviembre y diciembre de ventas: la gente está comprando regalos de vacaciones y ropa de invierno en lugar de pantalones cortos y protector solar, etc.
Matt Krause
1

Está sobreajustando porque está utilizando min(training r-square,validation r-square)datos para producir una puntuación, que a su vez se está utilizando para impulsar la selección del modelo. Debido a que su r-cuadrado de entrenamiento es probable que sea igual o menor (después de todo, acaba de ejecutar una regresión), esto es más o menos equivalente a hacer la selección del modelo en el r-cuadrado de los datos de entrenamiento.

Esto tiene el efecto de ajustarse demasiado a los datos de entrenamiento e ignorar los datos de validación.

Si usó justo validation r-squareentonces debería obtener un mejor resultado.

mikera
fuente
¿Pero no es ese el punto de tener un conjunto de datos de validación? ¿No debería elegir un modelo que tenga un error bajo en el conjunto de validación (es decir, fuera de la muestra)?
usuario10
Lo siento, leí mal tu pregunta. He modificado la respuesta.
mikera
Dado que ejecuté una regresión, mi entrenamiento generalmente debería ser mayor que la validación , y dado que uso el mínimo, ¿no es equivalente a hacer la selección del modelo usando el conjunto de validación? Sucede que, dado que uso min, obtengo un buen tanto para el entrenamiento como para la validación, que desafortunadamente no se traduce en el conjunto de prueba. ¡Gracias! R2R2R2
usuario10