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

 

Recordad que he dicho que he recibido un modelo que ha ido ganando desde el 01.31.2018 hasta el día de hoy, y así es como se ha comportado este modelo estas dos semanas desde el 03.05.2018 hasta el día de hoy. Resultado de la prueba.

Bastante bien para una anciana entrenada en 40 puntos y que lleva como 1,5 meses en OOS.

Y este es su OOS completo desde el 31.01.2018

Y todavía piensas que es un fit???? Sólo un recordatorio de que las capturas de pantalla muestran la sección OOS

 

Daré cálculos que demuestran que todo es palabrería:

  • sin justificar cuidadosamente que los predictores afectan a la variable objetivo
  • El sobreentrenamiento (overfitting) sólo se determina en los archivos en TIEMPO fuera del tiempo de entrenamiento.

Datos iniciales:

Dos archivos temporales consecutivos con 54 predictores y una variable objetivo en el cambio de tendencia: corto-largo

Los cálculos se realizan en rattle, que el primer archivo R Rat_DF1a divide en tres partes: tren, prueba, validación. La división en partes se hace por muestreo, es decir, se hace una selección aleatoria de barras del archivo original.

Resultados del cálculo de RF: 500 árboles, 7 predictores por nodo.

Número de observaciones utilizadas para construir el modelo: 2491

La imputación de valores perdidos está activa.


Llama:

randomForest(formula = trainY ~ ,

data = crs$dataset[crs$sample, c(crs$input, crs$target)],

ntree = 500, mtry = 7, importance = TRUE, replace = FALSE, na.action = randomForest::na.roughfix)


Tipo de bosque aleatorio: clasificación

Número de árboles: 500

Número de variables probadas en cada división: 7


Estimación de la tasa de error OOB: 1,61%.

Matriz de confusión:

-1 0 1 class.error

-1 498 5 2 0.01386139

0 3 1067 17 0.01839926

1 1 12 886 0.01446051

¡Es un resultado maravilloso! ¡Un grial! Tenga en cuenta que el AOB es el trozo de archivo que no se utilizó en el entrenamiento.

Veamos el error de entrenamiento aquí. Vemos que no se necesitan 500, podemos arreglarnos con 50 o 100 árboles.



Vamos a comprobarlo en la sección de pruebas

Matriz de error para el modelo Random Forest en Rat_DF1a [test] (recuentos):


Predicción

Actual -1 0 1 Error

-1 110 3 0 2.7

0 3 221 2 2.2

1 0 2 194 1.0


Matriz de error para el modelo Random Forest en Rat_DF1a [test] (proporciones):


Predicción

Actual -1 0 1 Error

-1 20.6 0.6 0.0 2.7

0 0.6 41.3 0.4 2.2

1 0.0 0.4 36.3 1.0


Error global: 1,8%, error medio de clase: 1,96667%.


Rattle timestamp: 2018-03-14 10:57:23 user


Se confirma el resultado de la formación. ¡Grial!


Volvamos a comprobarlo en la sección de validación.

Matriz de error para el modelo Random Forest en Rat_DF1a [validar] (recuentos):


Predicción

Actual -1 0 1 Error

-1 105 1 0 0.9

0 1 218 2 1.4

1 0 1 205 0.5


Matriz de error para el modelo Random Forest en Rat_DF1a [validar] (proporciones):


Predicción

Actual -1 0 1 Error

-1 19.7 0.2 0.0 0.9

0 0.2 40.9 0.4 1.4

1 0.0 0.2 38.5 0.5


Error global: 0,9%, error medio de clase: 0,9333333%.


Rattle timestamp: 2018-03-14 10:59:52 user


¡Grial! Puedes ir corriendo a una microfinanciera y pedir todo el dinero que puedas.


Pero hay un PERO: la división del archivo se hizo mediante un muestreo aleatorio de barras, y se negociará estrictamente por tiempo creciente.

Comprobemos el archivo donde se ha guardado esta cronología - es Rat_DF1b

Y aquí está el resultado:

Matriz de error para el modelo Random Forest en Rat_DF1b (recuentos):


Predicción

Actual -1 0 1 Error

-1 0 324 237 100.0

0 0 633 540 46.0

1 0 152 697 17.9


Matriz de error para el modelo Random Forest en Rat_DF1b (proporciones):


Predicción

Actual -1 0 1 Error

-1 0 12.5 9.2 100.0

0 0 24.5 20.9 46.0

1 0 5.9 27.0 17.9


Error global: 48,5%, Error medio de clase: 54,63333%.


Rattle timestamp: 2018-03-14 11:02:16 user


¡CATÁSTROFE! ¡EL MODELO ESTÁ REENTRENADO! LOS PREDICTORES FRENTE A LA VARIABLE OBJETIVO ES SÓLO RUIDO, SÓLO CON RUIDO PUEDE MO GENERAR RESULTADOS TAN SORPRENDENTES.


Te he mostrado un esquema normal, común, a nivel de estudiante universitario, para ajustar y validar el modelo. El principal inconveniente: no tiene en cuenta la relación entre los predictores y la variable objetivo.

Pero el esquema debería ser SIEMPRE al menos eso, y todavía NO está completo - necesitamos otra ejecución del probador, que confirmará el resultado de la prueba en un archivo secuencial ordinario. Bueno, y luego a la empresa de microfinanzas.



 
SanSanych Fomenko:

Daré cálculos que demuestran que todo es palabrería:

  • El sobreentrenamiento (overfitting) sólo se determina en los archivos por el TIEMPO fuera del tiempo de entrenamiento.

Es extraño que hayas obtenido tan buenos resultados en tu prueba. En mis experimentos y allí fue mucho peor. Al hacer una inicialización diferente del RNG antes de la mezcla obtuve resultados diferentes en la prueba y en la validación - muy diferentes en diferentes RNG, tanto por error como por número de operaciones.

Como resultado, llegué a la conclusión de que la prueba y la validación no son necesarias en absoluto, y es necesario entrenar en un sitio y evaluar en el otro (lo tienes como un archivo separado). De este modo, se excluye el factor aleatorio de la "buena suerte" de la mezcla.

 

Chicos, ¿está listo el grial?

 
SanSanych Fomenko:

Daré cálculos que demuestran que todo es palabrería:

  • sin justificar cuidadosamente que los predictores afectan a la variable objetivo
  • El sobreentrenamiento (overfitting) sólo se determina en los archivos en TIEMPO fuera del tiempo de entrenamiento.

Datos iniciales:

Dos archivos temporales consecutivos con 54 predictores y una variable objetivo en el cambio de tendencia: corto-largo

Los cálculos se realizan en rattle, que el primer archivo R Rat_DF1a divide en tres partes: tren, prueba, validación. La división en partes se hace por muestreo, es decir, se hace una selección aleatoria de barras del archivo fuente.



Pero hay un PERO: la división del archivo se hace por selección aleatoria de barras mientras que la negociación se hará estrictamente por tiempo creciente.

Comprobemos el archivo donde se guardó esta cronología - Rat_DF1b



Error global: 48,5%, Error medio de clase: 54,63333%.


Rattle timestamp: 2018-03-14 11:02:16 user


¡CATÁSTROFE! ¡EL MODELO ESTÁ REENTRENADO! LOS PREDICTORES CONTRA LA VARIABLE OBJETIVO ES SÓLO RUIDO, SÓLO CON RUIDO PUEDE MO GENERAR RESULTADOS TAN SORPRENDENTES.


Te he mostrado un esquema normal, común, a nivel de estudiante universitario, para ajustar y validar el modelo. El principal inconveniente: no tiene en cuenta la relación entre los predictores y la variable objetivo.

Pero el esquema debería ser SIEMPRE al menos eso, y todavía NO está completo - necesitamos otra ejecución del probador, que confirmará el resultado de la prueba en un archivo secuencial ordinario. Pues bien, a la microfinanciera.



Se trata de un error básico en la división en subconjuntos (tren/val/prueba). El orden debe ser el siguiente:

  1. Dividir el conjunto de datos ordenados en el tiempo en tren/val/prueba.
  2. Al entrenar, sólo se debe barajar el conjunto de entrenamiento (nunca el conjunto de validación y el conjunto de prueba). Me refiero a la clasificación, por supuesto.
  3. Todos los parámetros de la transformación y la transformación de los predictores se obtienen sólo en el conjunto de entrenamiento. Los usamos en val/test.
  4. Evaluación, selección y creación de predictores sólo en el conjunto de entrenamiento.

Buena suerte,

 

Cuando se trata de estimar predictores mediante modelos, creo que el paquete más avanzado es RandomUniformForest. Trata con gran detalle la importancia de los predictores desde diferentes puntos de vista. Te recomiendo que le eches un vistazo. En uno de mis artículos lo describí con detalle.

Me negué a utilizar la selección de modelos de predictores. Limitado a las particularidades del modelo utilizado.

Buena suerte

 
Vladimir Perervenko:
  1. Al entrenar, sólo mezclamos el conjunto de entrenamiento (nunca el conjunto de validación y el conjunto de prueba). Hablando de clasificación, por supuesto.

De Nikopenko S., Kadurin A., Arkhangelskaya E. "Aprendizaje profundo" p. 139.


Para que los datos de validación sean de la misma naturaleza que los de entrenamiento, hay que mezclarlos. De lo contrario, puede aparecer allí un trozo de tendencia al azar o un piso. En consecuencia, no evaluaremos el modelo por su capacidad de generalización, sino que lo ajustaremos a un determinado trozo de historia continua en un determinado periodo de tiempo (al fin y al cabo, nos detendremos ahí).

Pero, como escribí arriba, después de experimentar con diferentes inicializaciones de GSF, en las que se obtuvieron diferentes por éxito conjuntos válidos, - llegué a la conclusión, que el lote válido probablemente no es necesario. Además, es posible utilizar otros métodos de regularización. Sin embargo, estos experimentos se realizaron con una pequeña cantidad de datos (5 días), y si el número de ejemplos se multiplica por 10, quizá la mezcla sea más uniforme y los datos de estas secciones sean homogéneos (es decir, de la misma naturaleza); en ese caso, la validez puede ser útil.

Actualización: Si hay muchos datos y se incluyen varios giros y tendencias en ambas direcciones en el gráfico válido, entonces la mezcla con el conjunto de entrenamiento podría no ser necesaria.
 
Vladimir Perervenko:

Cuando se trata de estimar predictores mediante modelos, creo que el paquete más avanzado es RandomUniformForest. Trata con gran detalle la importancia de los predictores desde diferentes puntos de vista. Te recomiendo que le eches un vistazo. En uno de mis artículos lo describí con detalle.

Me negué a utilizar la selección de modelos de predictores. Limitado a las particularidades del modelo utilizado.

Buena suerte

Y creo que el más avanzado es un producto completamente diferente ;-).... En el que se implementa de una manera ligeramente diferente.

Dos redes, donde la muestra se divide en 2 submuestras de entrenamiento y prueba, donde para la red B (el segundo polinomio), el traynomio es la prueba y la prueba es el traynomio. Esto cuenta exclusivamente la muestra de prueba, donde la mitad es trabajada por un polinomio, y la otra por el otro. Y las clases se dividen por igual. Es decir, los unos se dividen por igual en bandeja y prueba, y en consecuencia los ceros también se dividen por igual. Por desgracia, no hay tiempo para ello. El archivo puede establecerse en cualquier orden de vectores. Tal vez esta sea la clave para reducir el rebasamiento.


La verdad no entiendo muy bien, ¿tal vez hablando del área de validación es un rastro en mi optimizador favorito?

Y en su caso la sección de prueba es un control, cuando dejamos que la red funcione durante algún tiempo... Me confunden los conceptos...

 

En cualquier caso, creo que la sección de prueba no puede influir de ninguna manera en la sección de entrenamiento y debe formarse lo más aleatoriamente posible para las tareas de clasificación, donde la sección de prueba, aunque esté ordenada por tiempo, no dependerá de este mismo tiempo. ¿Por qué? Porque al mezclar todos los datos estamos tratando de sacar el verdadero potencial de este conjunto, y no una afortunada coincidencia de circunstancias en forma de orden. Así que cuando barajas tus datos, ves realmente lo que tus datos pueden hacer... Así....

Con múltiples optimizaciones, el resultado debería saltar dentro del 10-20% es justo el mismo debido a la ordenación de los datos, una vez bien ordenados, la otra un poco peor, etc etc.... ¡¡¡IMHO!!!

 
elibrarius:

De Nikopenko S., Kadurin A., Arkhangelskaya E. "Aprendizaje profundo" p. 139.


Para que los datos de validación sean de la misma naturaleza que los de entrenamiento, hay que mezclarlos. De lo contrario, podría haber un trozo de tendencia al azar o plano. En consecuencia, no evaluaremos el modelo por su capacidad de generalización, sino que lo ajustaremos a un determinado trozo de historia continua en un determinado periodo de tiempo (al fin y al cabo, nos detendremos en él).

Pero, como escribí arriba, después de experimentar con diferentes inicializaciones de GSF, en las que se obtuvieron diferentes por éxito conjuntos válidos, - llegué a la conclusión, que el lote válido probablemente no es necesario. Además, es posible utilizar otros métodos de regularización. Sin embargo, estos experimentos se realizaron con una pequeña cantidad de datos (5 días), y si el número de ejemplos se multiplica por 10, quizá la mezcla sea más uniforme y los datos de estos gráficos sean más homogéneos (es decir, de la misma naturaleza).

Actualización: Si hay muchos datos y el gráfico válido incluye varias flautas y tendencias en ambas direcciones, entonces la mezcla con el conjunto de entrenamiento puede no ser necesaria en este caso.

El espíritu de contradicción juvenil es indomable :)

Me refería a la clasificación de las series temporales. Por ejemplo para M15 dos semanas para entrenar aproximadamente 1000 bares. La próxima semana para la validación es de 500 bares. Durante el entrenamiento mezclamos el conjunto de entrenamiento, pero no el de validación.

La mezcla de todo el conjunto antes de la separación es necesaria en dos casos: conjuntos estratificados y validación cruzada. También en este caso, el muestreo debe realizarse sin sustitución para evitar incluir los mismos ejemplos en ambos conjuntos.

Dado que no tenemos límite en el número de ejemplos y que se trata de series temporales, es mejor dividir antes de mezclar. IMHO

Razón de la queja: