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

 
Dr.Trader:

El "archivo CSV" y el "conjunto de datos R" en la pestaña de evaluación son simplemente formas diferentes de especificar la fuente de datos. Si introduces los mismos datos en ellos, obtendrás el mismo resultado al probar el modelo.

Si antes del traqueteo se ejecuta

entonces este dataset_validate estará ahora disponible en la pestaña evaluar como dataset R. Pero el resultado de la comprobación del modelo acabará siendo el mismo, ya que si sólo selecciona la opción de archivo csv y especifica el archivo C:/dummy_set_validation.csv, los datos para la prueba serán idénticos en ambos casos.

El entrenamiento en sí se realizó en un archivo diferente, dummy_set_features.csv, por lo que mirar hacia adelante es imposible aquí, porque los datos en ambos archivos son diferentes, y no dependen del tiempo en absoluto (sino de la fórmula). Creo que la neurona hizo un gran trabajo y encontró 6 entradas que determinan el resultado, redujo la influencia de otras entradas y describió la fórmula deseada con algo de lógica neuronal propia.

Por si acaso he comprobado ambos archivos para encontrar cadenas duplicadas si es que las hay. Aquí está el código en R:

Si esto se hace antes de rattle, las tablasdataset_train ydataset_validate estarán disponibles para el entrenamiento y la comprobación del modelo, y no habrá duplicados. Glory R.

el archivo de validación del modelo contenía 23 repeticiones de la muestra de entrenamiento, pero aparte de eso tiene otras 3000 filas únicas, por lo que la evaluación del modelo no pudo verse afectada de forma significativa.

Parece que soy incapaz de explicar lo que quiero.

1. ¿Podría indicar las fechas de inicio y fin de ambos archivos?

2.No se puede eliminar nada del archivodataset_validate, ya que este archivo simula la llegada de barra tras barra.

 

He estado pensando en esto un poco más esta mañana, realmente no es tan simple.

Según su fórmula, sólo hay 2^6 = 64 combinaciones de entradas en uso. Si el algoritmo de aprendizaje determina de alguna manera la importancia de estas 6 entradas, entonces bien puede recordar las 64 combinaciones. Y entonces no importa que la combinación de todas las entradas en la muestra de validación sea única, el modelo tomará sólo esas 6 entradas significativas y determinará la respuesta ya conocida. Así es como me funcionó con la neurona. Ahora he eliminado un par de combinaciones de entradas 1,3,5,7,9,11 del archivo de entrenamiento, pero he dejado combinaciones similares en el archivo de validación. El error durante el entrenamiento se mantuvo en el 0%, pero durante la validación aumentó al 50% en esas nuevas combinaciones. Y esto es malo, en forex el spread habría llevado el depósito a menos. SanSanych tiene razón, todo es cuestión de reciclaje, reconozco que me equivoqué.

Por lo visto, esa es la razón por la que muchos modelos no funcionan en forex, simplemente recuerdan ciertas combinaciones pero no pueden hacer frente a otras nuevas.

 
SanSanych Fomenko:

Al parecer, soy incapaz de explicar lo que quiero.

1. ¿Podría indicar las fechas de inicio y fin de ambos archivos?

2.No se puede eliminar nada del archivodataset_validate, ya queeste archivo simula la entrada barra tras barra.

No, es cierto, lo entiendo. Lo que dices se aplica al forex, y estoy de acuerdo con ello. Pero yo me refería a los archivos de Alexey y al entrenamiento del modelo sobre ellos.

https://c.mql5.com/3/96/dummy_set_features.zip - formación

https://c.mql5.com/3/96/dummy_set_validation.zip - validación

el resultado en los archivos está definido por la fórmula "1-mod(suma(entrada_1 ; entrada_3 ; entrada_5 ; entrada_7 ; entrada_9 ; entrada_11);2)"

Por favor, dame un enlace a esos archivos que mencionas e intentaré entrenar la neurona con ellos.

 
Chicos,

He acertado con la idea de que el bosque está sobreentrenado en todos los datos, aunque he resaltado las características importantes. Necesita borrar los datos y entrenar de nuevo.

¿La NS sin limpieza de datos aprendió bien?

Gracias
 
Dr.Trader:

No, es cierto, lo entiendo. Lo que dices se aplica al forex, y estoy de acuerdo con ello. Pero me refería a los archivos de Alexei, y a la formación de modelos en ellos.

https://c.mql5.com/3/96/dummy_set_features.zip - formación

https://c.mql5.com/3/96/dummy_set_validation.zip - validación

el resultado en los archivos está definido por la fórmula "1-mod(suma(entrada_1 ; entrada_3 ; entrada_5 ; entrada_7 ; entrada_9 ; entrada_11);2)"

Por favor, dame un enlace a esos archivos que mencionas, intentaré entrenar neuronas con ellos.

Aquí tienes, en el archivo.

Esto es RData. Abra R, cargue el traqueteo y desde él los marcos de datos están disponibles

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - esto es para el entrenamiento, tiene diferentes variables objetivo que están marcadas con Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" es para pruebas

"Rata_DF1" "Rata_DF2" "Rata_DF3" es el archivo que contiene todas las variables de destino

Archivos adjuntos:
ALL_cod.zip  3281 kb
 
Alexey Burnakov:
Chicos,

He acertado con la idea de que el bosque está sobreentrenado en todos los datos, aunque he resaltado las características importantes. Necesita borrar los datos y entrenar de nuevo.

¿La NS sin limpieza de datos aprendió bien?

Gracias
Sí, para esta tarea desde el primer puesto es así. Pero si se aplica NS para forex, entonces NS en la basura también se sobreentrenará y funcionará peor en los nuevos datos, por lo que la selección de datos de entrada también es relevante allí.
 
Dr.Trader:
Sí, para esta tarea desde el primer puesto es así. Pero si aplicas el NS a la divisa, el NS sobre la basura también se sobreentrenará y funcionará peor con los nuevos datos, así que la selección de los datos de entrada también es relevante en este caso.

d Los datos de la prueba están limpios. Así que hay un patrón en cualquier sitio. En datos reales, no se puede prescindir de dividir la muestra de entrenamiento en varias partes y controlar el rendimiento en una submuestra o varias submuestras al entrenar el modelo. Esto es explícitamente una regla general.

Pero para probar la capacidad de reentrenamiento de los modelos "out of the box", como los bosques aleatorios, sólo sirvió para ver que aprenden sin tapujos el ruido, en la validación un completo desastre. Aunque sí seleccionan correctamente los predictores importantes.

Pero, incluso en datos limpios, donde 14 predictores son puro ruido (números introducidos al azar sin conexión y salida) el bosque comenzó a utilizarlos para el entrenamiento. y esto es algo que me he encontrado antes.

Y un aspecto más, uno muy importante. El ejemplo de prueba contiene observaciones independientes entre sí. Cada fila no depende de ninguna otra. En realidad, en una serie temporal, las observaciones vecinas serán dependientes. Por ejemplo, dos valores vecinos de una bola ondulante estarán muy correlacionados. Por lo tanto, cualquier método -recalco, CUALQUIER método- fracasará con los datos reales en bruto. La forma correcta, idealmente, de preparar los datos reales para el entrenamiento es seleccionarlos de forma que las observaciones vecinas no estén relacionadas físicamente. En el caso de las series temporales, esto significa que si se toman indicadores con una ventana de 20, entonces las observaciones vecinas en la muestra de entrenamiento deben tomarse con al menos 20 pasos de diferencia. Para que no se relacionen entre sí. Entonces empieza a funcionar la estadística y el aprendizaje adecuado de patrones y no las acumulaciones aleatorias de datos similares. Espero que entiendas lo que quiero decir.

Cuando vuelva de mi viaje de negocios también haré un experimento en público utilizando datos reales de Forex. Y tal vez lo hagan juntos ya con el objetivo práctico de beneficiarse de los patrones.

Alexey

 
Dr.Trader:

Pero como la NS es como una caja negra, no es posible conocer la lógica de la solución. Puedes mirar los pesos, determinar el valor absoluto medio de cada entrada y dibujar un diagrama. Y descubre que 1, 3, 5, 7, 9, 11 son más importantes que el resto. Sin embargo, el resto de entradas también se utilizan por alguna razón; los pesos cero no se encuentran en ninguna parte. En otras palabras, es viceversa, primero aprendemos y luego podemos identificar las entradas importantes.

Prueba algún tipo de algoritmo de contraste NS. El algoritmo puede autoexaminar tanto las entradas (no hay que seleccionarlas por exploración "manual") como las conexiones (y las neuronas de la capa oculta, por supuesto). La salida será un resumen de la lógica de funcionamiento.
 
SanSanych Fomenko:

Aquí tienes, en el archivo.

Esto es RData. Abra R, cargue el traqueteo y a partir de él los marcos de datos están disponibles

"R1.F1" "R1.F3" "R1.F4" "R1.F5" "R1.F6" - esto es para el entrenamiento, tiene diferentes variables objetivo que están marcadas con Fi

"R2.F1" "R2.F3" "R2.F4" "R2.F5" "R2.F6" - esto es para probar

"Rat_DF1" "Rat_DF2" "Rat_DF3" es el archivo que contiene todas las variables de destino

Gracias, lo he intentado. Veo que has hecho mucho para seleccionar los predictores, para que las neuronas se entrenen fácilmente con ellos, y has guardado el resultado en el conjunto de datos de comprobación también.

Los resultados siguientes se refieren a la formación en R1.F3

1) Hay un resultado curioso con Rattle. Los HH con configuración estándar mostraron errores de tren/validación/prueba del 30%/29%/33%. El error en R2.F3 es del 35%. Pero todo esto es sólo un caso de suerte en realidad, en otra configuración habría fácilmente sub- o sobre-entrenado, aquí sólo tuvo suerte.

2) Luego tomé un enfoque simple y crudo con aprendizaje no supervisado, 200 neuronas ocultas, la red fue entrenada hasta que dejó de mejorar. Errores de entrenamiento/validación/prueba/R2.F3 - 2%/30%/27%/45%. Evidentemente, la red está reentrenada.

3) Aprendizaje supervisado. Esto es diferente de los árboles, pero siempre hay que hacer esto con una neurona para no sobreentrenarla. La esencia de la misma es hacer una pausa en el entrenamiento de vez en cuando y comprobar los resultados del entrenamiento/validación/prueba. No conozco la regla de oro del cotejo de resultados, pero es bastante normal entrenar en el conjunto de datos de entrenamiento, luego buscar errores en los conjuntos de datos de validación y prueba, y dejar de entrenar cuando los errores en la validación/prueba dejan de caer. Esto ofrece una especie de garantía contra el sobreentrenamiento. R2.F3 se considera no disponible durante todo este proceso, y la prueba sólo se realiza después de la finalización del entrenamiento. En este caso, los errores de tren/validación/prueba/R2.F3 son del 27%/30%/31%/37%. Aquí también hay sobreentrenamiento, pero no mucho. Podrías haber detenido el proceso de aprendizaje antes de que el error del tren fuera notablemente menor que los errores de validación/prueba, pero eso es una suposición... puede o no haber ayudado.

La variable objetivo "R1.F1" tiene tres valores, Rattle no puede hacer eso con las neuronas y tienes que escribir tu propio código en R, me salté este conjunto de datos.

"R1.F4" "R1.F5" "R1.F6" dieron aproximadamente los mismos resultados para los 4 errores en Rattle neuronka, creo que una aproximación adecuada con neuronka también dará aproximadamente los mismos resultados, no los he tratado más.

 

Sobre la metodología de enseñanza.

Aquí he descrito un método estándar que suele ser aplicable y da buenos resultados: https://www.mql5.com/ru/blogs/post/661499

Me explico brevemente: dividir todos los datos en 2 partes: entrenamiento y validación. La validación debe ser tan grande como creas que necesitas. Hice lo siguiente. Llevo 15 años de citas de un minuto. Calculo las entradas y salidas, adelanto los datos para que las observaciones sean físicamente diferentes (las tomo a través de n barras, donde n no es menor que la ventana más grande utilizada en el indicador y no es menor que el lag más lejano). Reflexione sobre el motivo por el que esto es correcto. Los datos se vuelven mutuamente independientes.

A continuación, tomo la parte de la formación (la más grande) - 10 años más lejos en el pasado. Creo índices de fila para la validación cruzada. Es decir, divido los datos en 5 trozos iguales, rígidamente separados por fecha. Durante la validación cruzada, el modelo pasa por parámetros de entrenamiento como la profundidad, el número de iteraciones, etc., entrenando en cuatro trozos de entrenamiento puntuales y midiendo el error en una quinta parte del trozo de entrenamiento. Hace esto 5 veces, cada vez seleccionando una parte de prueba diferente de las cinco. Obtiene cinco métricas de error (para un conjunto de parámetros de entrenamiento). Se promedian y se dan como valor de error de prueba en los datos que no participan en el entrenamiento.

El modelo realiza entonces este trabajo n * m * s * d veces, donde n,m,s,d son los parámetros de entrenamiento. Esto es una fuerza bruta sobre la red. Puede alcanzar cientos de iteraciones. Puedes hacer una búsqueda aleatoria o genética. Ez yu vish.

A continuación, obtenemos una tabla de métricas de error de validación cruzada correspondiente al conjunto de parámetros de aprendizaje. Sólo debemos tomar el mejor resultado y estos parámetros. Y luego entrenar toda la muestra de entrenamiento con esos parámetros. También se especificará un límite en el número de iteraciones para NS para que no se produzca un sobreentrenamiento.

Y al final validar el modelo en 5 años de cotizaciones para evaluar el rendimiento fuera de la muestra.

En definitiva, la validación cruzada es, hasta el momento, la mejor opción para un entrenamiento eficaz del modelo. Te aconsejo que lo pruebes.

El paquete en R es caret.

Hasta pronto.

Alexei

СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
СОПРОВОЖДЕНИЕ ЭКСПЕРИМЕНТА ПО АНАЛИЗУ ДАННЫХ ФОРЕКСА: первое серьезное обучение модели и результаты
  • 2016.02.27
  • Alexey Burnakov
  • www.mql5.com
Начало по ссылкам: https://www.mql5.com/ru/blogs/post/659572 https://www.mql5.com/ru/blogs/post/659929 https://www.mql5.com/ru/blogs/post/660386 https://www.mql5.com/ru/blogs/post/661062