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

 

Aquí está el código para encontrar los parámetros de arym, lo puedes encontrar en el post de atacha en el enlace. He corregido un poco ese primer post, he sustituido el primer ejemplo más fallido por uno normal.

  arimaModel <- auto.arima(y = ts(DT$value[trainIndexes],frequency=48),
                           seasonal.test = "ocsb",
                           trace=TRUE,
                           stepwise = FALSE,
                           max.q = 48, 
                           max.order = 48+5
                         )

La función auto.arima busca por sí misma los parámetros p d q P D Q adecuados
ts(DT$value[trainIndexes],frequency=48) # los datos se convierten a algún formato del paquete de previsión, lo principal es especificar la frecuencia, de lo contrario no se utilizará la estacionalidad
seasonal.test = "ocsb" # google dice que es mejor, no estoy seguro
stepwise = FALSE #false permite una búsqueda más exhaustiva. el valor por defecto de true significaría que la búsqueda probablemente se atascaría en el mínimo local y se detendría
max.q =48 #valor máximo de q en la búsqueda. valor por defecto == 5, para estos datos es bajo
max.order = 48+5 # suma máxima p+q+P+Q. valor por defecto == 5, no es suficiente para estos datos

La función tardará mucho tiempo, pero al final debería recuperar los mismos parámetros que usé yo, e incluso podría encontrar otros mejores.

No esperé a que esta función lo encontrara todo, sino que elegí intuitivamente los parámetros adecuados. Los datos tienen tendencia, por lo que p = 1 y P = 1. Y el gráfico muestra los periodos predominantes 24 y 48, por lo que q = 24, y Q = 48 / frecuencia = 1
Ya no pude insertar el periodo 336 en arim, requiere una segunda estacionalidad, el paquete de previsión no sabe cómo hacerlo.

Arima con parámetros ya conocidos p d q P D Q se crea así:

Arima(y = ts(DT$value[trainIndexes],frequency=48), order = c(1, 0, 24), seasonal = c(1, 0, 1))

la estacionalidad no es en realidad (1,0,1), sino (1,0,48) porque Q está dominado por



SanSanych Fomenko:

Discutir sobre el arima sin analizar el residuo en el ARCO es un ejercicio totalmente vacío. Hay algunas series que tienen un residuo estacionario después de una simulación ARCH. Pero discutir el error de predicción suponiendo que es estacionario no es serio. Este residuo es extremadamente facetado.

Sí, estoy de acuerdo, es que estos datos son muy cíclicos y sencillos, por lo que arima funciona sin problemas. Si pego eurusd m30 en el mismo código, el modelo no entra en saltos bruscos de precios con los nuevos datos.
 
Dr. Trader:

Aquí está el código para encontrar los parámetros de arym, lo puedes encontrar en el post de atacha en el enlace. He corregido un poco ese primer post, he sustituido el primer ejemplo más fallido por uno normal.

la función auto.arima busca por sí misma los parámetros p d q P D Q adecuados
ts(DT$value[trainIndexes],frequency=48) # los datos se convierten a algún formato del paquete de previsión, lo principal es especificar la frecuencia, de lo contrario no se utilizará la estacionalidad
seasonal.test = "ocsb" # google dice que es mejor, no estoy seguro
stepwise = FALSE #false permite una búsqueda más exhaustiva. el valor por defecto de true significaría que la búsqueda probablemente se atascaría en el mínimo local y se detendría
max.q =48 #valor máximo de q en la búsqueda. valor por defecto == 5, para estos datos es bajo
max.order = 48+5 # suma máxima p+q+P+Q. valor por defecto == 5, no es suficiente para estos datos

La función tardará mucho tiempo, pero al final debería recuperar los mismos parámetros que usé yo, e incluso podría encontrar otros mejores.

No esperé a que esta función lo encontrara todo, sino que elegí intuitivamente los parámetros adecuados. Los datos tienen tendencia, por lo que p = 1 y P = 1. Y el gráfico muestra los periodos predominantes 24 y 48, por lo que q = 24, y Q = 48 / frecuencia = 1
Ya no pude insertar el periodo 336 en arim, para eso necesito la segunda estacionalidad, la previsión de paquetes no puede hacerlo.

Arima con parámetros ya conocidos p d q P D Q se crea así:

la estacionalidad no es en realidad (1,0,1), sino (1,0,48) porque Q está dominada por la frecuencia



Sí, estoy de acuerdo, es que estos datos son muy cíclicos y sencillos, por lo que arima funciona sin problemas. Si pego el eurusd m30 en el mismo código, el modelo no entra en los picos de precios con los nuevos datos.
No me interesan estos parámetros "óptimos", los parámetros que los coeficientes de la ecuación de regresión - imprime después de ajustar
 
summary(arimaModel)
Series: ts(DT$value[trainIndexes], frequency = period) 
ARIMA(1,0,24)(1,0,1)[48] with non-zero mean 

Coefficients:
         ar1     ma1     ma2     ma3     ma4     ma5     ma6     ma7     ma8     ma9    ma10    ma11    ma12    ma13    ma14    ma15    ma16    ma17    ma18
      0.8531  0.3469  0.3324  0.3512  0.3564  0.3176  0.2676  0.2223  0.1904  0.2015  0.2241  0.2529  0.2424  0.2383  0.2408  0.2507  0.2279  0.1701  0.1418
s.e.  0.0316  0.0350  0.0413  0.0462  0.0506  0.0542  0.0559  0.0554  0.0537  0.0514  0.0494  0.0481  0.0477  0.0469  0.0455  0.0451  0.0448  0.0439  0.0415
        ma19    ma20   ma21     ma22     ma23     ma24    sar1     sma1       mean
      0.0813  0.0525  0.028  -0.0152  -0.0226  -0.0159  0.9899  -0.4300  1816.9447
s.e.  0.0390  0.0358  0.032   0.0280   0.0224   0.0180  0.0015   0.0132   687.9652

sigma^2 estimated as 1442:  log likelihood=-23883.84
AIC=47825.68   AICc=47826.05   BIC=48012.95

Training set error measures:
                     ME     RMSE      MAE         MPE     MAPE      MASE         ACF1
Training set -0.1648644 37.86381 25.64976 -0.07217873 1.573367 0.1610166 0.0002493082
Archivos adjuntos:
arimaModel.zip  140 kb
 
Dr. Trader:

Es una mesa extraña.

No obstante.

Compara el valor del coeficiente con el e.s. Con pocas excepciones más del 10%. Por alguna razón no veo una estimación vía t, pero de frente, ese 10% significa:

Hipótesis nula sobre la estimación del coeficiente: probabilidad de que el coeficiente no sea significativo. Una desviación superior al 10% indica que todos esos coeficientes NO son significativos, es decir, que NO tienes una ecuación de regresión.


PS.

Normalmente, los coeficientes que son significativos están marcados con asteriscos. Como los coeficientes NO son significativos, todos los demás números son sólo números.

hist(residuals(arimaModel), breaks= 100)


La razón por la que los coeficientes NO son significativos es porque la cola de la izquierda es más gruesa que la de la derecha.

Hay pruebas que permiten identificar los problemas cuantitativamente, no a ojo, y recoger las herramientas para resolverlos.

Conclusión:

El modelo ARIMA no es aplicable a las series temporales utilizadas.

 
Maxim Dmitrievsky:

En el mercado, cualquier clasificador se reentrena porque el mercado no es estacionario. Si queremos que no sobreaprenda, tenemos que enseñar el NS para toda la historia. De lo contrario, siempre ocurrirá que el ciclo del mercado ha cambiado y el modelo se ha equivocado. El único enfoque sabio es el sobreentrenamiento o el reentrenamiento en el proceso de comercio :) No creemos en los carretes, que constantemente dan 1000% de beneficio mensual en la historia de 15 años sin ninguna intervención.

En general, todavía no veo esa ventaja - lo que hace NM sobreentrenado en forex. ¿Es cuando no se gana en una muestra de prueba? nah nah... no no no... se trata de la no estacionalidad. Si no sabes cómo comprobarlo, no es práctico, no es realista.


Aquí tienes toda la razón, cómo se puede hablar de recalificación cuando no se conoce el concepto en sí???? ¿Qué quiere decir con "NS reentrenado"? Que cada uno tire como lo ve, y yo iré primero.

1. NS no funciona bien con datos nuevos. Implícitamente no divide las señales de forma consistente, no importa si está bien o mal, lo que importa es la estabilidad de separar lo malo de lo bueno.... Puede drenar sistemáticamente (inversión del modelo), pero el hecho mismo de separar lo malo de lo bueno está a la vista.

2. El modelo ha funcionado bien durante menos de la mitad del intervalo de entrenamiento. La implicación de este enfoque es que un modelo bien entrenado debe recorrer el 50% o más del intervalo de entrenamiento.

3.La curva de balance sobre los nuevos datos tiene fuertes altibajos (el modelo aleatorio funciona en un periodo de tiempo específico y dio lugar a la rentabilidad debido a 1-2 grandes acuerdos, pero en general el hundimiento)

Y sobre el tema de la clasificación, esta es mi respuesta.

NO ESTACIONARIO es un valor que cambia suavemente, tan pronto como una barra se ha cerrado, comienza a alejarse lentamente. Y cuanto más lejos esté la barra en la historia, más lejos estará este notorio valor ESTACIONARIO (símbolo de algún caos o valor etéreo que cambia el mercado en general), por lo que si enseñamos el modelo de clasificación, obtendremos que este valor depende directamente de la calidad del modelo. Cuanto más antiguo sea el modelo, menor será su calidad, de acuerdo con el cambio de este mismo NO ESTACIONARIO. El objetivo es construir un modelo de este tipo, que funcione lo suficiente como para poder sacarle un par de pips :-)

 
Mihail Marchukajtes:

¿A qué se refiere con lo de "reciclar" a la SN?

Los datos para el entrenamiento, especialmente en el mercado de divisas, suelen ser ruidosos, y al entrenar el modelo con una precisión del 100% le enseñamos a reproducir ese ruido junto con el resultado deseado. Y necesitamos que el entrenamiento se detenga en el momento en que el NS empiece a predecir el resultado correctamente, pero no empiece a memorizar las respuestas correctas junto con el ruido. En mis propias palabras. Científicamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

He aquí una buena ilustración. Dos modelos,
la primera (la línea del pasillo) aprendió estos datos con una precisión del 100%. A ojo podemos ver que muchos puntos de la frontera del espacio rojo y azul están desplazados un poco hacia un lado (ruido), y de hecho la frontera de estos dos espacios no debería ser una línea discontinua, sino una especie de línea promediada.
El primer modelo se vuelve a entrenar.
Y hay un segundo modelo (línea negra) que ignora el ruido, y claramente por sentido divide el plano.

 
Dr. Trader:

Los datos para el entrenamiento, especialmente en el mercado de divisas, suelen ser ruidosos, y al entrenar el modelo con una precisión del 100% le enseñamos a reproducir ese ruido junto con el resultado deseado. Y necesitamos que el entrenamiento se detenga en el momento en que el NS empiece a predecir el resultado correctamente, pero no empiece a memorizar las respuestas correctas junto con el ruido. En mis propias palabras. Científicamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

He aquí una buena ilustración. Dos patrones,
la primera (línea del pasillo) ha aprendido estos datos con una precisión del 100%. A ojo podemos ver que muchos de los puntos en el límite del espacio rojo y azul están desplazados ligeramente hacia un lado (ruido), y de hecho el límite de estos dos espacios no debería ser una línea discontinua, sino una especie de línea promediada.
El primer modelo se vuelve a entrenar.
Y hay un segundo modelo (línea negra) que ignora el ruido, y que claramente por sentido divide el plano.

A veces el cerebro comienza a descomponerse... sobre el ruido en forex, no es una señal de radio, ¿verdad? ¿Por qué habría ruido en el mercado de divisas? Si el modelo de Michael realizaba 30-50 operaciones al mes, 1-2 al día, ¿era ruido comercial o qué? De alguna manera esta definición no encaja aquí :)

El sobreaprendizaje en forex tiene que ver con patrones (temporales) mal clasificados. Pero no hay otros patrones en forex, así que cualquier patrón se sobreentrenará en un grado u otro

p.s. Así que hay que hacer una clasificación de instrumentos y elegir los BPs más persistentes del momento, como las acciones o los índices alcistas

 

¡¡¡¡Todos true!!!! Pero el sobreentrenamiento también tiene una explicación matemática......

Al entrenar con un profesor, intentamos reducir el error de la red en el conjunto de entrenamiento. Y esta reducción del error puede ser infinita si tratamos con números reales. Pero llega un momento en que la reducción del error conduce a la degradación del modelo incluso en el conjunto de pruebas. De esto podemos sacar la siguiente conclusión

Teóricamente, para cada conjunto de datos existe un aprendizaje absoluto, es decir, una determinada línea en la escala de error en la que el modelo 0,00000000000000000001 no se reentrena y el 0,0000000000000000009 se reentrena, una especie de "cero absoluto", por decirlo en términos físicos. Todos los modelos cuyos errores están a la derecha de este punto se consideran no aprendidos, y los que están a la izquierda están sobreaprendidos. Permítanme recordar que esto es sólo una teoría de mi entendimiento personal.

Se trata de una especie de modelo ideal para un conjunto de datos concreto.

La tarea de cualquier IA es acercarse lo más posible al punto de aprendizaje absoluto, pero sin sobrepasarlo. EN MI OPINIÓN.


Esta teoría supone que no se trata de un punto, sino de un dominio de modelos totalmente entrenados y sobreentrenados. Una zona mixta, no lo suficientemente grande. Sólo... imagine...... ¿Por qué? Esto lo he identificado a partir de la observación.

De todos modos, lo primero que tiene que hacer la IA es asegurarse de llegar a esta zona de transición. Pero aquí está la cosa......

Si se divide la muestra de forma estacionaria, es probable que sea algún valor específico del límite de sobreentrenamiento (lo más probable), si la muestra se divide al azar cada vez, entonces es OVER.... transient.... IMHO

Si la IA no llega a esa región con garantías, es que no se ha hecho bien. ¡¡¡¡La otra cosa es qué modelo va a parar allí!!!!

Todo esto lo conseguí usando JPrediction.

Empezando a entrenar el mismo archivo, teniendo en cuenta el muestreo aleatorio, obtuve 10 resultados de entrenamiento diferentes, el peor fue el 75%, el mejor el 85% de generalización (ahora estamos tomando los números del optimizador, correctos o incorrectos NO importa, ahora...como ejemplo....) Así que podemos suponer que tenemos un área entre 75 y 85, que contiene un número infinito de variantes del modelo, una red neuronal. Por regla general, elijo una media de alrededor de 80-82 y entonces usted puede venir a través de un modelo de este tipo, que en OOS será débil. Porque determinar el polinomio definitivo no es una cuestión sencilla.

Aquí hay un video y ver a partir de 35 minutos, allí habla de it....

https://www.youtube.com/watch?v=qLBkB4sMztk

001. Вводная лекция - К.В. Воронцов
001. Вводная лекция - К.В. Воронцов
  • 2014.12.22
  • www.youtube.com
Курс "Машинное обучение" является одним из основных курсов Школы, поэтому он является обязательным для всех студентов ШАД. Лектор: Константин Вячеславович Во...
 
Mihail Marchukajtes:

Aquí tienes el vídeo y mira a partir del minuto 35, habla de ello....

https://www.youtube.com/watch?v=qLBkB4sMztk


Sí, he visto este tipo antes, lo veré de nuevo, thx).

Si usted no entiende el sentido matemático de la misma, pero el sentido real - el NS sobreentrenado en Forex tiene un significado completamente diferente, y no hay escape de tal sobreentrenamiento :) Por eso, la clasificación rígida y la búsqueda de instrumentos de tendencia o la NS adaptativa permanentemente recalificada, pero según qué criterios, es una cuestión creativa.

 
Maxim Dmitrievsky:

Sí, he visto a ese tipo antes, lo veré de nuevo, gracias).

El significado matemático es claro, pero el significado real - lo que es el sobreentrenamiento de NS en Forex tiene otro significado, y no hay que alejarse de tal sobreentrenamiento :) Esta es la razón por la que necesitamos o bien una estricta clasificación y búsqueda de instrumentos de tendencia o bien una NS adaptativa permanente, pero según qué criterios - es una cuestión creativa aquí.


Sin embargo, la verdadera cuestión es ésta. Si hay un mal desdoblamiento en la sección de prueba, NO importa si el desdoblamiento es correcto o no, el hecho de que el desdoblamiento sea débil. Y el modelo no ha trabajado más del 50% del intervalo de entrenamiento, entonces dicho modelo se considera sobreentrenado.... IMHO