Volver a probar o validar de forma cruzada cuando el proceso de construcción del modelo fue interactivo


9

Tengo algunos modelos predictivos cuyo rendimiento me gustaría probar (es decir, tomar mi conjunto de datos, "rebobinarlo" a un punto anterior en el tiempo y ver cómo el modelo hubiera funcionado de manera prospectiva).

El problema es que algunos de mis modelos se construyeron a través de un proceso interactivo. Por ejemplo, siguiendo el consejo de las Estrategias de modelado de regresión de Frank Harrell , en un modelo utilicé splines cúbicas restringidas para manejar posibles asociaciones no lineales entre las características y la respuesta. Asigné los grados de libertad de cada spline en función de una combinación de conocimiento de dominio y medidas univariadas de fuerza de asociación. Pero los grados de libertad que quiero permitir a mi modelo obviamente dependen del tamaño del conjunto de datos, que varía drásticamente cuando se realiza una prueba inversa. Si no quiero seleccionar manualmente los grados de libertad por separado para cada vez que se realiza una prueba de retroceso del modelo, ¿cuáles son mis otras opciones?

Para otro ejemplo, actualmente estoy trabajando en la detección de valores atípicos mediante la búsqueda de puntos con un alto apalancamiento. Si estuviera contento de hacer esto a mano, simplemente miraría cada punto de datos de alto apalancamiento, comprobaría que los datos estaban limpios y los filtraría o los limpiaría a mano. Pero esto se basa en un montón de conocimientos de dominio, por lo que no sé cómo automatizar el proceso.

Agradecería consejos y soluciones tanto (a) al problema general de automatizar partes interactivas del proceso de construcción del modelo, o (b) consejos específicos para estos dos casos. ¡Gracias!

Respuestas:


4

Para su información, esto podría ser más apropiado para SE.DataScience, pero por el momento, lo responderé aquí.

Me parece que podría estar en una situación en la que no tendrá más remedio que escribir un script que implemente sus soluciones. Nunca he trabajado con splines, mi conocimiento de ellos es estrictamente teórico, así que por favor tengan paciencia conmigo y avíseme si hay algo que no esté viendo.

En términos generales, parece que tiene un par de elementos diferentes que tendrá que resolver para implementar esto.

1.) Determinar los parámetros del modelo de forma dinámica. Anteriormente ha mencionado que ha utilizado una combinación de conocimiento de dominio y medidas univariadas. Eso me parece algo que deberías poder manejar heurísticamente. Deberá acordar desde el principio un conjunto de reglas que implementará su programa. Esto puede o no ser una tarea trivial, ya que tendrá que pensar detenidamente sobre las posibles implicaciones de esas reglas. Esto puede requerir que vuelva a visitar cada paso de su proceso y catalogar no solo las decisiones, sino también las razones detrás de esas decisiones.

2.) Realmente implementando su programa. Para que las pruebas de rendimiento sean dinámicas y fáciles de mantener y modificar en el futuro, tendrá que pensar cómo va a estructurarlas. Es probable que desee utilizar algún tipo de bucle para la estimación predictiva del rendimiento de su modelo principal, preferiblemente con una longitud definible por el usuario para permitir una mayor flexibilidad en el futuro. También es probable que desee escribir funciones separadas para cada acción que desee que realice su programa, ya que esto hará que sea más fácil probar la funcionalidad y mantener y modificar su programa en el futuro. Probablemente, como mínimo, necesitará funciones para la selección del conjunto de datos (es decir, solo los períodos de tiempo que han "transcurrido" en el momento de la prueba inversa), la limpieza y la validación (en lo que realmente tendrá que pensar,

Su pregunta sobre la detección y el manejo de valores atípicos también se enmarca en esas dos inquietudes y me gustaría implementar implementando bucles más pequeños dentro de su bucle principal del programa que continuarían "limpiando" y reajustando el modelo hasta que llegue a un punto en el que estaría satisfecho con (que de nuevo, tendrás que definirte).

Si esto suena como una gran tarea, es porque lo es; la gente ha escrito bibliotecas de software completas (a veces de manera muy lucrativa) para realizar este tipo de tarea. Más allá de eso, es difícil ofrecer consejos más específicos sin saber más sobre sus procesos, estructura de datos y el lenguaje de programación en el que ha realizado su trabajo hasta ahora.

Si algo de esto le resulta útil y desea que amplíe algo de esto, comente, hágamelo saber, y estaré más que feliz de hacerlo.


No necesito ayuda para escribir el código, gracias, nuestra infraestructura de backtesting ya está implementada y es bastante sólida. Solo estoy interesado en los procedimientos estadísticos que uno podría usar. Con respecto a la automatización heurística de la parte interactiva de la construcción de modelos: ¿se ha escrito algo al respecto? No he visto ninguna mención de este tipo de proceso en la literatura. Menciona "la gente ha escrito bibliotecas de software completas". ¿Tiene alguna referencia?
Ben Kuhn

@BenKuhn: según tu comentario, no estoy muy claro sobre las dificultades exactas que estás teniendo; por favor, ayúdame a tener un poco más de claridad. El uso de la heurística en la construcción de modelos automatizados está bastante extendido; La aplicación más básica que se me ocurre en este momento es la humilde regresión gradual. Al carecer de los detalles exactos de su modelo, no puedo señalar las piezas exactas de literatura que podrían ayudarlo, pero una búsqueda rápida en Google muestra varios artículos que exploran métodos para la selección automática de parámetros, particularmente para suavizar y splines penalizadas. Vea mi próximo comentario para algunos enlaces
habu


@BenKuhn: ¿a qué te refieres específicamente cuando dices procedimientos estadísticos que podrías usar? En mi opinión, el backtest podría manejarse de manera bastante sencilla mediante el uso de muestreo de prueba de tren con una ventana de selección de datos en movimiento o en expansión. Todos los datos que haya adquirido hasta el punto del backtest serían su conjunto de entrenamiento, mientras que los datos que esperaría ver en el próximo período de tiempo, antes de tener la oportunidad de reajustar su modelo, serían su conjunto de prueba. Todas las medidas habituales de rendimiento predictivo y bondad de ajuste podrían utilizarse para realizar la evaluación real.
habu

@BenKuhn: la implementación de la parte de conocimiento comercial real requeriría que la codifique y se asegure de que los datos necesarios para realizar tales determinaciones estén disponibles cuando sea necesario. Además, utilizo el término "biblioteca de software" como un término general que abarca todo, desde extensiones hasta bibliotecas de modelado existentes que están destinadas a automatizar la construcción de modelos para ciertas aplicaciones, hasta sistemas de soporte de decisiones y expertos patentados de grado industrial.
habu

3

En lugar de tratar de descubrir cómo automatizar sus esfuerzos de ajuste manual del modelo, eludiría todo ese problema al analizar a los alumnos con variaciones más bajas que requieren mucho menos ajuste, incluso si eso conlleva un costo de mayor sesgo del modelo. Desea confianza en los resultados de su backtest, que en gran medida se reduce a una baja varianza de muestreo en sus predicciones, e introduce un proceso de ajuste automático además de un alumno que ya tiene una varianza de muestreo que está trabajando en contra de ese objetivo. Puede parecer que la cola está moviendo al perro aquí, pero cualquier cosa que requiera un ajuste cuidadoso (manual o automático) no es un gran candidato para un entorno de prueba verdaderamente honesto IMO.


¿Por qué la sintonización automática (con una ejecución de sintonización separada en cada punto de tiempo de prueba) sería un "entorno de prueba verdaderamente honesto"?
Ben Kuhn

La reducción de la varianza al dejar caer las estrías conduciría a una pérdida inaceptable en el poder predictivo, desafortunadamente. ¿Es eso en lo que estaba pensando cuando sugirió utilizar un alumno de menor variación? Si no, ¿en qué estabas pensando?
Ben Kuhn

@BenKuhn: comparto las preocupaciones de Andrew acerca de si una prueba inversa sería una prueba verdaderamente "honesta" del poder predictivo fuera de la muestra del modelo, aunque no sea por otra razón que el hecho de que parece haber desarrollado sus parámetros de ajuste en el conjunto de datos completo disponible para usted; incluso si "rebobina el reloj" y reconstruye su modelo dinámicamente, la metodología mediante la cual lo hará se habrá desarrollado por referencia a todo el conjunto de datos, por lo que existe el riesgo de que el modelo aún se ajuste demasiado, incluso si es reentrenado en un subconjunto de los datos disponibles.
habu

1
tt

1
Y en un dominio tan ruidoso como las finanzas, debe asegurarse de que si la historia se hubiera desarrollado de manera un poco diferente (pero aún extraída de alguna distribución subyacente) todavía llegaría a un modelo similar. Si está seguro de que su proceso es robusto a la varianza de muestreo, creo que es bueno. Pero en mi experiencia, los procedimientos de ajuste automático pueden ser muy sensibles a la variación de muestreo.
Andrew
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.