Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 361

 
SanSanych Fomenko:

El entrenamiento, el reentrenamiento y el sobreentrenamiento son cosas fundamentalmente diferentes.

Todo esto de la formación en cada bar nuevo se masca y se masca en este foro y en general dentro de AT.

En la lucha contra el sobreentrenamiento (overfitting) conozco dos métodos.

1. limpieza del conjunto de predictores de los predictores no relacionados con la variable objetivo - limpieza del ruido del conjunto de predictores de entrada. Los primeros 100 mensajes de este hilo lo discutieron en detalle.

2. Teniendo el conjunto de predictores limpios de ruido, empezamos a ajustar el modelo con la muestra de entrenamiento, luego con la muestra de prueba y de validación, que son muestras aleatorias de un archivo. El error en los tres conjuntos debería ser aproximadamente el mismo.

3. A continuación, tome un archivo separado del anterior y ejecute el modelo en él. De nuevo, el error debería ser más o menos el mismo que los anteriores.

4. Si estas comprobaciones se realizan con regularidad, la pregunta "un desplome del 20% es una señal para el reentrenamiento" no se planteará en absoluto, ya que los tres primeros pasos dieron como resultado un desplome como parámetro del modelo y superarlo dice que el modelo no funciona y que hay que empezar todo de nuevo.


Bueno, todo esto es un caso general, sí. Y en cada caso hay que trabajar más con cada TS en particular, y entonces la comprensión vendrá cuando esté bien entrenada, cuando esté reentrenada, y cuando tenga periodos. Por ejemplo, el ratio de compra/venta debe ser aproximadamente el mismo, y la muestra de entrenamiento debe contener tendencia alcista, tendencia bajista y plana, de lo contrario es un sorteo unidireccional. Lo principal en este caso es no "sobreentrenarse" :)

También hay que tener en cuenta el factor de estacionalidad, el factor de crisis y otras muchas regularidades diferentes

 
SanSanych Fomenko:

1. limpiar el conjunto de predictores de los irrelevantes para la variable objetivo - limpiar el ruido del conjunto de predictores de entrada. En los primeros 100 hitos de este hilo se discutió este tema con mucho detalle

¿Qué solución surgió finalmente: cómo identificar los predictores no relacionados con las órdenes de salida?
 
elibrarius:
¿Cuál fue la solución final: cómo definir los predictores que no están relacionados con las órdenes de salida?
¿Cómo? - Todo depende de los detalles. He tardado 2 días en resolver un simple problema. Ahora la solución parece obvia).
 
Yuriy Asaulenko:
¿Cómo? - Todo depende de los detalles. He tardado dos días en resolver un problema sencillo. Ahora la solución parece obvia)).
Supongo que también hay principios generales y universales. También es interesante conocer su ejemplo concreto.
 
Elibrarius:
Supongo que también hay principios generales y universales. También es interesante conocer su ejemplo particular.

Búscalo en mi blog.

Los principios, sí, son universales. Pero no hay soluciones generales. Excepto para algunas clases de tareas.

 

Un resumen de las cien páginas anteriores :)

Las neuronas y casi todos los demás modelos populares están muy lejos de la inteligencia artificial. Simplemente pueden encontrar esas combinaciones de valores de los predictores que logran la precisión de aprendizaje deseada, y en las previsiones futuras como que interpolan (o extrapolan) los resultados pasados para obtener una nueva previsión.

Esto significa que si tomamos, por ejemplo, Ma, Rci y Estocástico como predictores y entrenamos la red neuronal utilizando las inversiones en zigzag como objetivo de entrenamiento, le diremos a la red neuronal "estos tres predictores pueden predecir las inversiones". Y la propia red neuronal no podrá averiguar si estos predictores encajan realmente. Recordará estos datos con una precisión aceptable y en el trading esperaremos que se guarden las mismas combinaciones de Ma, Rci y Estocástico antes del retroceso. Pero no lo harán, y fracasará.

Un modelo basado en predictores inútiles fracasará, no importa si es gbm, neurona o regresión. Incluso puedes generar series aleatorias y utilizarlas como predictores, las neuronas encontrarán combinaciones recurrentes entre ellas y las recordarán.
La tarea de un minero de datos humano es seleccionar los predictores y el propósito del entrenamiento, utilizando otras herramientas. Y el entrenamiento del modelo (la neurona) es un minúsculo penúltimo paso.

Los predictores deben mantener la correlación con el objetivo en los datos de entrenamiento, tanto en el pasado como en el futuro. Por eso SanSanych habla de probar el modelo en diferentes archivos, para asegurarse de que las dependencias encontradas no desaparecen con los nuevos datos.
Es decir, estudiamos y recogemos cuidadosamente los predictores y el objetivo, entrenamos el modelo y lo probamos. Luego lo probamos con datos completamente nuevos para el modelo. Si la precisión del pronóstico en ambos casos no coincide, los predictores o el objetivo no son adecuados. Deberíamos buscar otros.


SanSanych Fomenko:

¿Puede el NS predecir series no estacionarias? En caso afirmativo, ¿qué tipos de no estacionariedad?

En mi opinión, la neurónica es completamente inadecuada para trabajar con el precio para predecir series temporales no estacionarias. El comportamiento de los precios cambia constantemente, los patrones encontrados dejan de funcionar a deshoras, todo es caótico. Y entonces alguien coge una neuroncu, le da precios durante un par de meses y pide encontrar las dependencias que se repiten durante este tiempo. Pero no hay dependencias que se repitan y lo que la neurona pueda encontrar y recordar será sólo una coincidencia 100% aleatoria.

Si vamos a utilizar la neurona, deberíamos darle sólo precios procesados (y no ohlc puro), por ejemplo, indicadores.

 

Gracias por el resumen, no tenía ganas de leer 100 páginas...)

El proceso de selección manual de los predictores, por ejemplo las combinaciones de 3, llevaría mucho tiempo. En MT5 hay 38 indicadores técnicos estándar. Combinaciones de 3 - número enorme. Además, tenemos que seleccionar los períodos, los tipos de precios y otros parámetros de entrada. Y si añadimos indicadores no estándar interesantes, el número de pruebas aumentará aún más.

Por lo tanto, debemos buscar una estimación automatizada de los indicadores. He encontrado 2 métodos comunes en los artículos de Vladimir Perervenko:

1) Eliminación de variables altamente correlacionadas - se implementa en R.

2) Selección de las variables más importantes - también resuelta en R.

Todavía estoy escribiendo directamente en MT5, ¿puede ser que haya soluciones listas para estas preguntas? ¿O un método para transferir soluciones de R a MT5, al menos en versión simplificada....?

Si buscamos la correlación de los indicadores, simplemente buscamos la diferencia entre cada par de indicadores -> la resumimos para cada barra -> la dividimos por el número de barras. (¿o de otra manera?)

Con los más importantes - no completamente resueltos...

¿Tal vez haya otros métodos para eliminar los predictores?

 
elibrarius:

Pero todavía estoy escribiendo directamente en MT5, tal vez ya hay soluciones listas para estos problemas? ¿O un método para transferir soluciones de R a MT5, al menos en una versión simplificada....?

Escribir todo de una vez en MQL, pero apoyarse en R no es la mejor opción. Es más fácil desarrollar una estrategia en R, y luego usar esta biblioteca https://www.mql5.com/ru/code/17468 para llamar al código R desde el Asesor Experto y probarlo en el probador.
Lo más probable es que se eliminen y cambien muchas cosas durante la creación y las pruebas, cambios de paquetes, modelos, etc., es más fácil cambiar y probar todo en el propio R.

Finalmente, cuando te guste y todo funcione, puedes intentar portar el código a mql a mano.
Muchos de los paquetes utilizados en R están escritos en realidad en C/C++ y puede encontrar el código fuente de los paquetes estándar aquíhttps://cran.r-project.org/web/packages/available_packages_by_name.html,

 
Dr. Trader:

Un resumen de las cien páginas anteriores :)

Las neuronas y casi todos los demás modelos populares están muy lejos de la inteligencia artificial. Simplemente pueden encontrar esas combinaciones de valores de los predictores que logran la precisión de aprendizaje deseada, y en las previsiones futuras como que interpolan (o extrapolan) los resultados pasados para obtener una nueva previsión.

Esto significa que si tomamos, por ejemplo, Ma, Rci y Estocástico como predictores y entrenamos la red neuronal utilizando las inversiones en zigzag como objetivo de entrenamiento, le diremos a la red neuronal "estos tres predictores pueden predecir las inversiones". Y la propia red neuronal no sabrá si estos predictores encajan realmente. Recordará estos datos con una precisión aceptable y en el trading esperaremos que se guarden las mismas combinaciones de Ma, Rci y Estocástico antes del retroceso. Pero no lo harán, y fracasará.

Un modelo entrenado con predictores inútiles fracasará, ya sea gbm, neurona o regresión. Incluso puedes generar series aleatorias y utilizarlas como predictores, las neuronas encontrarán combinaciones recurrentes entre ellas y las recordarán.
La tarea de un minero de datos humano es seleccionar los predictores y el propósito del entrenamiento, utilizando otras herramientas. Y el entrenamiento del modelo (la neurona) es un minúsculo penúltimo paso.

Los predictores deben mantener la correlación con el objetivo en los datos de entrenamiento, tanto en el pasado como en el futuro. Por eso SanSanych habla de probar el modelo en diferentes archivos, para asegurarse de que las dependencias encontradas no desaparecen con los nuevos datos.
Es decir, estudiamos y recogemos cuidadosamente los predictores y el objetivo, entrenamos el modelo y lo probamos. Luego lo probamos con datos completamente nuevos para el modelo. Si la precisión del pronóstico en ambos casos no coincide, los predictores o el objetivo no son adecuados. Deberíamos buscar otro.


En mi opinión, las neuronas no son adecuadas para predecir series temporales no estacionarias. El comportamiento de los precios cambia constantemente, los patrones encontrados dejan de funcionar a deshoras, todo es caótico. Y entonces alguien coge una neuroncu, le da precios durante un par de meses y pide encontrar las dependencias que se repiten durante este tiempo. Pero no hay dependencias que se repitan y lo que la neurona pueda encontrar y recordar será sólo una coincidencia 100% aleatoria.

Si utilizamos una neurona, entonces podemos darle sólo precios procesados (no ohlc puro), por ejemplo, indicadores.

El problema no es la neurona en sí o cualquier otra cosa aplicable a los mercados. El problema es lo que se introduce en la herramienta de DM. Y es una pura locura utilizar un precio desnudo como entrada.

El problema son los predictores, como los llama CC. Es decir, el problema es cómo representar una serie no estacionaria como estacionaria. Quien esté más cerca de resolver este problema es el mejor.

 
Dr. Trader:

No es la mejor solución escribir todo en MQL, confiando en R al mismo tiempo. Es más fácil desarrollar la estrategia en R y luego, utilizando esta biblioteca https://www.mql5.com/ru/code/17468, llamar al código R desde el Asesor Experto y probarlo en el Probador de Estrategias.
Lo más probable es que durante la creación y las pruebas se eliminen y cambien muchas cosas, se sustituyan paquetes, se cambien modelos, etc. Es más fácil cambiar y probar todo en el propio R.

Finalmente, cuando te guste y todo funcione, puedes intentar portar el código a mql a mano.
Muchos de los paquetes utilizados en R están escritos en realidad en C/C++ y puede encontrar el código fuente de los paquetes estándar aquíhttps://cran.r-project.org/web/packages/available_packages_by_name.html,

Es complicado... Llevaría más tiempo que entender el algoritmo (como en el caso de la correlación K) y escribirlo. Creo que la función de probar todas las entradas, calcular la correlación y filtrar las altamente correlacionadas llevará un par de horas.

Espero que sea igual de fácil utilizar otras soluciones para cribar los predictores).

¿Existen otras soluciones para encontrar predictores innecesarios?