Algoritmos para la selección automática de modelos.

193

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:

  1. calcular la matriz de correlación de todos los factores
  2. elegir los factores que tienen una baja correlación entre sí
  3. eliminar los factores que tienen una t-stat baja
  4. agregue otros factores (todavía basados ​​en el factor de baja correlación encontrado en 2.).
  5. 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.

S4M
fuente
72
Francamente, creo que esta es una idea desastrosa , casi garantizada para conducir a muchas conclusiones falsas.
Gung
44
@gung: aunque estoy de acuerdo en que seguir ciegamente el resultado de una selección de modelo es una mala idea, creo que puede ser útil como punto de partida de un análisis. En mi caso, tengo varios cientos de factores disponibles, y me gustaría elegir los 5-10 más relevantes. No veo cómo podría hacer eso sin la selección automática del modelo (que luego se modificará manualmente).
S4M
12
Todos los procedimientos de selección de modelos están sujetos a los problemas que analizo en mi respuesta a continuación. Además, cuanto mayor sea el número de posibles factores que desea buscar, más extremos se vuelven esos problemas y el aumento no es lineal. Si bien hay algunos enfoques mejores (discutidos por @Zach), que deberían usarse junto con la validación cruzada (discutidos por @JackTanner), la selección basada en t, r y AIC no se encuentran entre ellos. Además, con cientos de factores, la cantidad de datos necesarios podría ser fácilmente de millones. Desafortunadamente, tienes una tarea muy difícil por delante.
Gung
77
¿Cuál es el propósito de hacer la selección del modelo? ¿Es para un modelo predictivo / pronóstico o está buscando las variables importantes? Además, ¿qué tan grande es el conjunto de datos que está utilizando? ¿Cuántas observaciones y cuántas variables?
chanceislogic
66
Aquí hay opiniones interesantes, pero creo que la visión negativa hacia los procedimientos de selección de modelos algorítmicos está un poco anticuada. Tomemos, por ejemplo, el trabajo reciente de David Hendry en el campo de la econometría, particularmente su trabajo en el software PcGive y los métodos de saturación. Una conferencia que proporciona una visión general de su enfoque se puede encontrar aquí . Como @MichaelChernick ha señalado (¡y Hendry también lo haría!), El conocimiento de la materia es (muy) importante. Esta es la razón por la cual los especialistas en temas tienen valor: dejar que los algoritmos actúen solos es el error.
Graeme Walsh

Respuestas:

333

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í ):

  1. Produce valores de R cuadrado que están muy sesgados para ser altos.
  2. Las pruebas F y chi-cuadrado citadas junto a cada variable en la impresión no tienen la distribución reclamada.
  3. El método produce intervalos de confianza para efectos y valores pronosticados que son falsamente estrechos; ver Altman y Andersen (1989).
  4. Produce valores p que no tienen el significado adecuado, y la corrección adecuada para ellos es un problema difícil.
  5. Proporciona coeficientes de regresión sesgados que necesitan contracción (los coeficientes para las variables restantes son demasiado grandes; ver Tibshirani [1996]).
  6. Tiene problemas graves en presencia de colinealidad.
  7. Se basa en métodos (p. Ej., Pruebas F para modelos anidados) que se utilizaron para probar hipótesis previamente especificadas.
  8. Aumentar el tamaño de la muestra no ayuda mucho; ver Derksen y Keselman (1992).
  9. Nos permite no pensar en el problema.
  10. Utiliza mucho papel.

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:

set.seed(59)
intrinsic_ability = runif(30, min=9, max=10)
time = 31 - 2*intrinsic_ability + rnorm(30, mean=0, sd=.5)

Los resultados de la primera carrera se muestran en la siguiente figura junto con los comentarios del entrenador a los niños.

primera carrera

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):

segunda carrera

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.

gung
fuente
43
Explicación fenomenal del dragado de datos.
Frank Harrell
17
Esta es una respuesta muy bien pensada, aunque estoy completamente en desacuerdo con la idea de que aic es una mejora sobre los valores p (o bic o similar), en el contexto de la selección de modelos lineales. cualquier penalización como aic que tenga la forma es equivalente a establecer el valor p en (entrada y salida). aic básicamente te dice cómo elegir el valor p. 2L+kpPr(χ12>k)
probabilidadislogica
77
Mi comentario fue sobre el uso de aic para algoritmo escalonado o similar. Mi comentario también fue demasiado breve. Tenga en cuenta que es el número de variables, es penalización ( para aic para bic) y es negativo el doble de la probabilidad de registro maximizada. Aic y bic son conceptualmente diferentes pero no operacionalmente de los valores p cuando se realiza la selección de estilo "subconjunto" sin contracción de los coeficientes distintos de cero. pk2logN2L
chanceislogic
99
@gung: si toma la diferencia entre dos modelos con un parámetro diferente, obtiene . Ahora, el primer término es la estadística de razón de probabilidad sobre la cual se basa el valor p. Por lo tanto, estamos agregando el parámetro adicional si la estadística de razón de probabilidad es mayor que algún límite. Esto es lo mismo que está haciendo el enfoque del valor p. Aquí solo hay una diferencia conceptual(2L1+2p0+2)(2L0+2p0)=2(L1L0)+2
probabilidad
2
Para una ilustración de por qué AIC no resuelve el problema, ver: Mundry, R. (2011). Problemas en la inferencia estadística basada en la teoría de la información: un comentario desde la perspectiva de un frecuentista. Behavioral Ecology and Sociobiology, 65 (1), 57-68.
Jan
70

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'o method='glmStepAIC'), y podría ayudarlo a comprender cómo este tipo de modelos tienden a tener un rendimiento predictivo deficiente. Además, puede usar la findCorrelationfunción en caret para identificar y eliminar variables colineales, y la rfefunción en caret para eliminar variables con una estadística t baja (uso rfeControl=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=glmnetargumento de caret y compare la precisión validada cruzada de ese modelo con el method=lmStepAICargumento. 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.

Zach
fuente
1
Las penalizaciones como el doble pareto son mejores que la cresta y el lazo desde una perspectiva estadística, ya que no reducen los coeficientes claramente distintos de cero. Pero desafortunadamente, siempre conducen a una penalización no convexa, por lo que son peores desde una perspectiva computacional. Creo que una penalización basada en la distribución de Cauchy sería buena . log(λ2+β2)
probabilityislogic
2
@probabilityislogic ¿Conoces alguna buena implementación de la penalización de doble pareto, en un lenguaje como ro python? Me encantaría probarlo.
Zach
1
Por lo que entiendo, la selección de modelos por AIC y la validación cruzada de dejar uno fuera es esencialmente lo mismo (equivalencia asintótica, ver Stone, 1977) , por lo que es probable que AIC y algunos tipos de validación cruzada conduzcan a una muy similar resultados. Sin embargo, no he usado el paquete caret, y de las llamadas al método parece que AIC se usa en algunos casos.
fileunderwater
38

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.

  1. Divida sus datos en conjuntos de capacitación, validación y prueba.
  2. Entrena modelos en tu set de entrenamiento.
  3. Mida el rendimiento del modelo en el conjunto de validación utilizando una métrica como la predicción RMSE, y elija el modelo con el error de predicción más bajo.
  4. Diseñe nuevos modelos según sea necesario, repita los pasos 2-3.
  5. Informe qué tan bien funciona el modelo en el conjunto de prueba.

Para un ejemplo del uso de este método en el mundo real, creo que se usó en la competencia del Premio Netflix.

Jack Tanner
fuente
15
La división de datos no es confiable a menos que . n>20000
Frank Harrell
55
@Frank: ¿Por qué crees que N necesita ser tan alto?
rolando2
14
Debido a la poca precisión. Si se vuelve a dividir, puede obtener resultados muy diferentes. Es por eso que las personas hacen 100 repeticiones de validación cruzada 10 veces, o arranque.
Frank Harrell
10
@FrankHarrell ¿De qué depende esa cifra n> 20000? ¿Se basa en el comentario del póster original acerca de tener " varios cientos de factores "? ¿O es independiente de cualquier aspecto de los datos?
Darren Cook el
33
El tipo de configuración en la que probé la división de datos fue n = 17000 con una fracción de 0.3 que tenía un evento y tenía aproximadamente 50 parámetros examinados o ajustados en un modelo logístico binario. Usé una división aleatoria 1: 1. El área ROC validada en la muestra de prueba cambió sustancialmente cuando volví a dividir los datos y comencé de nuevo. Busque en Estudios de métodos utilizados en el texto en biostat.mc.vanderbilt.edu/rms para obtener estudios de simulación y documentos relacionados que brinden más información.
Frank Harrell
15

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).

heran_xp
fuente
66
Tenga en cuenta que puede obtener un rendimiento diferente en los estudios de simulación de diferentes algoritmos de selección cambiando el proceso de generación de datos para favorecer (aunque no sea intencionalmente) una rutina particular. La cuestión de qué enfoque será más rápido o más lento es distinta, pero potencialmente sigue siendo importante.
Gung
2
De hecho, los ejemplos en el artículo original de Tibshirani sobre LASSO ilustran bien el punto de @gung. Lo mismo ocurre con los estudios comparativos de diferentes métodos sobre datos reales. Por cierto, ¿es tu última referencia correcta? El documento de Clements & Hendry con el DOI que usted da no afirma que los métodos automatizados superen a los expertos humanos, o que no utilicen las palabras "por un margen sustancial". (Sería bueno si
dieras
Lo encontré: Goodrich (2001), "Software comercial en la competencia M3", Int. J. Forecast., 17, págs. 560–565. Está bajo la misma colección "Comentarios sobre la competencia M3" que el artículo de Clements & Hendry, por lo que Google me envió allí.
Scortchi
De todos modos, no está nada claro que el comentario de Goodrich tenga algo que ver con la experiencia en el tema .
Scortchi
1
@Scortchi puede ser más claro en el artículo a partir de la página 581 sobre ese tema de la revista. Está más relacionado con la "Competencia M2" en la cual, los métodos de pronóstico automático se compararon con expertos humanos invitados (incluidos algunos nombres importantes en la literatura de series de tiempo) que conocían el contexto económico / industrial e incluso podían solicitar información adicional de las empresas que proporcionaron los datos.
heran_xp
6

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.

JenSCDC
fuente
3

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.

malvavisco
fuente
2
Eso seleccionaría las "mejores" variables en los datos , no necesariamente las mejores variables en el proceso de generación de datos / población, ya que solo tiene acceso a los datos. No es realmente tan diferente del método paso a paso que quería el OP.
Gung
0

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í?

Praveen
fuente
-51

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

  1. hacer todas las regresiones variables vs factores individuales
  2. ordenar la regresión por un criterio dado (digamos AIC)
  3. eliminar los factores que tienen un t-stat bajo: son inútiles para explicar nuestra variable
  4. con el orden dado en 2., intente agregar los factores uno por uno al modelo y guárdelos cuando mejoren nuestro criterio. iterar para todos los factores.

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!

S4M
fuente
47
(1) No he presenciado ningún "debate" en este hilo: todas las respuestas y comentarios presentan el mismo mensaje básico. (2) Su implementación parece ser una versión ad hoc de regresión gradual . Estoy de acuerdo en que puede ser útil como punto de partida, siempre que no se acepte automáticamente como un fin en sí mismo.
whuber
28
en realidad aceptaste tu propia respuesta que se mueve en contra de cada argumento presentado por la comunidad. No es sorprendente ver los negativos aquí ...
jank
23
Creo que es la primera vez que veo tantos votos negativos. @SAM, ¿por qué no acepta algunas de las otras excelentes respuestas y elimina su "respuesta"?
marbel
¿Es la respuesta más desestimada de este SE?
mkt
2
Parece haber respondido a la importante pregunta de @probabilityislogic diciendo su objetivo "encontrar los mejores n factores para explicar una variable dada". La construcción de modelos para explicar (para entender la causalidad) debe hacerse de manera más intencional y generalmente mucho más intensa que la construcción de modelos para predecir.
rolando2