Me gustaría implementar un algoritmo para la selección automática de modelos. Estoy pensando en hacer una regresión gradual, pero cualquier cosa servirá (aunque debe basarse en regresiones lineales).
Mi problema es que no puedo encontrar una metodología o una implementación de código abierto (estoy trabajando en Java). La metodología que tengo en mente sería algo así como:
- calcular la matriz de correlación de todos los factores
- elegir los factores que tienen una baja correlación entre sí
- eliminar los factores que tienen una t-stat baja
- agregue otros factores (todavía basados en el factor de baja correlación encontrado en 2.).
- Reitere varias veces hasta que algún criterio (por ejemplo, AIC) supere un cierto umbral o no pueda o no podamos encontrar un valor mayor.
Me doy cuenta de que hay una implementación R para esto (stepAIC), pero encuentro que el código es bastante difícil de entender. Tampoco he podido encontrar artículos que describan la regresión gradual.
Respuestas:
Creo que este enfoque está equivocado, pero quizás sea más útil si explico por qué. Querer conocer el mejor modelo dada cierta información sobre una gran cantidad de variables es bastante comprensible. Además, es una situación en la que las personas parecen encontrarse regularmente. Además, muchos libros de texto (y cursos) sobre regresión cubren métodos de selección por pasos, lo que implica que deben ser legítimos. Sin embargo, lamentablemente no lo son, y el emparejamiento de esta situación y objetivo es bastante difícil de navegar con éxito. La siguiente es una lista de problemas con los procedimientos automatizados de selección de modelos por pasos (atribuidos a Frank Harrell y copiados desde aquí ):
La pregunta es, ¿qué tienen de malo estos procedimientos / por qué ocurren estos problemas? La mayoría de las personas que han tomado un curso básico de regresión están familiarizados con el concepto de regresión a la media , así que esto es lo que uso para explicar estos problemas. (Aunque esto puede parecer fuera de tema al principio, tenga paciencia conmigo, prometo que es relevante).
Imagine un entrenador de atletismo de la escuela secundaria en el primer día de pruebas. Aparecen treinta niños. Estos niños tienen un nivel subyacente de capacidad intrínseca a la que ni el entrenador ni ninguna otra persona tienen acceso directo. Como resultado, el entrenador hace lo único que puede hacer, que es que todos corran una carrera de 100 metros. Los tiempos son presumiblemente una medida de su capacidad intrínseca y se toman como tales. Sin embargo, son probabilísticos; cierta proporción de lo bien que alguien lo hace se basa en su capacidad real y otra proporción es aleatoria. Imagine que la verdadera situación es la siguiente:
Los resultados de la primera carrera se muestran en la siguiente figura junto con los comentarios del entrenador a los niños.
Tenga en cuenta que dividir a los niños por sus tiempos de carrera deja superposiciones en su capacidad intrínseca; este hecho es crucial. Después de alabar a algunos y gritarles a otros (como suelen hacer los entrenadores), los hace correr nuevamente. Aquí están los resultados de la segunda carrera con las reacciones del entrenador (simuladas a partir del mismo modelo anterior):
Tenga en cuenta que su capacidad intrínseca es idéntica, pero los tiempos rebotaban en relación con la primera raza. Desde el punto de vista del entrenador, aquellos a los que gritó tendieron a mejorar, y los que elogió tendieron a empeorar (adapté este ejemplo concreto de la cita de Kahneman que aparece en la página wiki), aunque en realidad la regresión a la media es una simple matemática consecuencia del hecho de que el entrenador está seleccionando atletas para el equipo basándose en una medición que es en parte aleatoria.
Ahora, ¿qué tiene esto que ver con las técnicas de selección de modelo automatizadas (por ejemplo, paso a paso)? El desarrollo y la confirmación de un modelo basado en el mismo conjunto de datos a veces se denomina dragado de datos.. Aunque existe una relación subyacente entre las variables, y se espera que las relaciones más fuertes produzcan puntajes más fuertes (por ejemplo, estadísticas t más altas), estas son variables aleatorias y los valores realizados contienen error. Por lo tanto, cuando selecciona variables basadas en tener valores realizados más altos (o más bajos), pueden ser tales debido a su valor verdadero subyacente, error o ambos. Si continúa de esta manera, se sorprenderá tanto como el entrenador después de la segunda carrera. Esto es cierto si selecciona variables basadas en tener estadísticas t altas o intercorrelaciones bajas. Es cierto que usar el AIC es mejor que usar los valores p, porque penaliza la complejidad del modelo, pero el AIC es en sí mismo una variable aleatoria (si ejecuta un estudio varias veces y se ajusta al mismo modelo, el AIC rebotará como todo lo demas). Desafortunadamente,
Espero que esto sea útil.
fuente
Consulte el paquete de caret en R. Le ayudará a validar de forma cruzada los modelos de regresión paso a paso (use
method='lmStepAIC'
omethod='glmStepAIC'
), y podría ayudarlo a comprender cómo este tipo de modelos tienden a tener un rendimiento predictivo deficiente. Además, puede usar lafindCorrelation
función en caret para identificar y eliminar variables colineales, y larfe
función en caret para eliminar variables con una estadística t baja (usorfeControl=rfeControl(functions=lmFuncs)
).Sin embargo, como se mencionó en las respuestas anteriores, es probable que estos métodos de selección de variables te pongan en problemas, especialmente si los haces de forma iterativa. Asegúrese absolutamente de evaluar su rendimiento en un conjunto de prueba COMPLETAMENTE extendido. ¡Ni siquiera mire el conjunto de prueba hasta que esté satisfecho con su algoritmo!
Finalmente, podría ser mejor (y más simple) usar el modelo predictivo con la selección de características "incorporadas", como la regresión de crestas, el lazo o la red elástica. Específicamente, pruebe el
method=glmnet
argumento de caret y compare la precisión validada cruzada de ese modelo con elmethod=lmStepAIC
argumento. Supongo que el primero le dará una precisión fuera de la muestra mucho más alta, y no tiene que preocuparse por implementar y validar su algoritmo de selección de variables personalizado.fuente
r
opython
? Me encantaría probarlo.Estoy totalmente de acuerdo con los problemas descritos por @gung. Dicho esto, hablando de manera realista, la selección del modelo es un problema real que necesita una solución real. Aquí hay algo que usaría en la práctica.
Para un ejemplo del uso de este método en el mundo real, creo que se usó en la competencia del Premio Netflix.
fuente
Para responder a la pregunta, hay varias opciones: 1) todo subconjunto por AIC / BIC 2) paso a paso por valor p 3) paso a paso por AIC / BIC 4) regularización como LASSO (puede basarse en AIC / BIC o CV 5) algoritmo genético (GA) 6) otros? 7) uso de selección no automática orientada a la teoría ("conocimiento de la materia")
La siguiente pregunta sería qué método es mejor. Este documento (doi: 10.1016 / j.amc.2013.05.016) indica que "toda regresión posible" dio los mismos resultados a su nuevo método propuesto y paso a paso es peor. Un simple GA está entre ellos. Este documento (DOI: 10.1080 / 10618600.1998.10474784) compara la regresión penalizada (Puente, Lazo, etc.) con "saltos y límites" (parece un algoritmo de búsqueda exhaustivo pero más rápido) y también encontró que "el modelo de puente coincide con el mejor modelo de la selección de subconjuntos por el método de pasos agigantados ". Este documento (doi: 10.1186 / 1471-2105-15-88) muestra que GA es mejor que LASSO. Este documento (DOI: 10.1198 / jcgs.2009.06164) propuso un método, esencialmente un enfoque de todos los subconjuntos (basado en BIC) pero que reduce ingeniosamente el tiempo de cálculo. Demuestran que este método es mejor que LASSO. Curiosamente, este documento (DOI: 10.1111 / j.1461-0248.2009.01361.
Por lo tanto, en general, los resultados son mixtos, pero tuve la impresión de que GA parece muy bueno, aunque por etapas puede no ser tan malo y es rápido.
En cuanto a 7), el uso de la selección orientada a la teoría no automática ("conocimiento de la materia"). Lleva mucho tiempo y no es necesariamente mejor que el método automático. De hecho, en la literatura sobre series temporales, está bien establecido que el método automatizado (especialmente el software comercial) supera a los expertos humanos "por un margen sustancial" (doi: 10.1016 / S0169-2070 (01) 00119-4, página 561, por ejemplo, seleccionando varios suavizados exponenciales y modelos ARIMA).
fuente
Aquí hay una respuesta del campo izquierdo: en lugar de usar regresión lineal, use un árbol de regresión (paquete rpart). Esto es adecuado para la selección automática de modelos porque con un poco de trabajo puede automatizar la selección de cp, el parámetro utilizado para evitar un ajuste excesivo.
fuente
El modelo lineal se puede optimizar implementando un algoritmo genético en la forma de elegir las variables independientes más valiosas. Las variables se representan como genes en el algoritmo, y el mejor cromosoma (conjunto de genes) se selecciona luego de los operadores de cruce, mutación, etc. Se basa en la selección natural, entonces la mejor 'generación' puede sobrevivir, en otras palabras, el algoritmo optimiza la función de estimación que depende del modelo particular.
fuente
Tenemos una función en el paquete de estadísticas de base R, llamada paso (), que hace la selección hacia adelante, hacia atrás o paso a paso de modelos basados en el AIC más bajo. Esto también funciona para las variables de factor. ¿Esto no sirve al servidor aquí?
fuente
Veo que mi pregunta generó mucho interés y un debate interesante sobre la validez del enfoque de selección automática de modelos. Si bien estoy de acuerdo en que dar por sentado el resultado de una selección automática es arriesgado, puede usarse como punto de partida. Así es como lo implementé para mi problema particular, que es encontrar los mejores n factores para explicar una variable dada
Nuevamente, esto es muy difícil, puede haber formas de mejorar la metodología, pero ese es mi punto de partida. Estoy publicando esta respuesta con la esperanza de que pueda ser útil para otra persona. ¡Los comentarios son bienvenidos!
fuente