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

 
Dr.Trader:
No confíe en la importancia cuando lo utilice para el mercado de divisas. Iris son datos muy simples, hay patrones directos entre los datos disponibles y las clases. RF sólo tiene que encontrar un conjunto mínimo de predictores en el que se puedan definir las clases de iris y ya está.

¿Qué puede captar RF dependencias no lineales? Me parece que no funciona para el mercado sólo porque los predictores están podridos, si hubiera predictores normales funcionaría como con iris con una tasa de error del 95%

 

En el caso de los lirios es sencillo: si un pétalo tiene una longitud de tal a cual, es de clase 1, y si tiene una anchura de tal a cual, es de clase 2, etc. Lo que hace la RF es encontrar los intervalos de valores predictores que mejor se ajustan a los valores objetivo.

Ni siquiera necesito el bosque para esta tarea, un árbol es suficiente para una precisión del 90%:

 Rule number: 2 [Species=setosa cover=33 (31%) prob=1.00]
   Petal.Length< 2.6

 Rule number: 7 [Species=virginica cover=35 (33%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length>=4.85

 Rule number: 6 [Species=versicolor cover=37 (35%) prob=0.00]
   Petal.Length>=2.6
   Petal.Length< 4.85

Es decir, si una determinada clase se corresponde con un determinado intervalo de valores del predictor o sus combinaciones, y estos intervalos no se solapan, entonces el árbol o el bosque lo resolverá todo al 100%.

Las dependencias de Forex son mucho más complicadas, y un bosque necesita decenas de predictores para describir los valores objetivo. El bosque seguramente encontrará esos intervalos de predictores y sus combinaciones que describen los valores objetivo, pero serán simplemente combinaciones seleccionadas, sin ninguna lógica ni análisis. Lo que el bosque tomará para decidir - ruido, o un predictor realmente importante - es una cuestión de azar. Forest forex sólo funcionará correctamente si elimina de antemano los predictores inadecuados y deja sólo los necesarios para el aprendizaje. El problema es que hay que identificar o encontrar de alguna manera los predictores necesarios, y el bosque no ayuda a ello.

Todavía no he podido hacerlo.

La mayor parte del tiempo ha sido necesario tamizar los predictores con valor propio = 0 después de cov() de la tabla de entrenamiento (supongo que sólo son adecuados los predictores especialmente correlacionados). Al cabo de 24 horas, se trataba de entrenar el propio modelo ForeCA, que no se entrenó por un error:

unit-variance: Mean relative difference: 3.520041 e-06
Error in check_whitened(out$score, FALSE) : Data must be whitened:
         Each variable must have variance 1.

El paquete es muy exigente con los predictores, con muchas restricciones de todo tipo. Ni siquiera sé qué significa el último error, lo investigaré más a fondo.

Terminaré esto más tarde:
Google dice que no hay que borrar los predictores. Puedes transformarlos para que dejen de estar correlacionados, entonces la matriz de covarianza tendrá rango completo, lo que se requiere para ForeCA. Para el blanqueamiento hay algunas funciones en el propio paquete (no funcionó de inmediato, hay que averiguarlas), además de la teoría en los enlaces de abajo.
Para utilizar ForeCA correctamente, primero hay que entender y aprender cómo hacerlo:
http://stats.stackexchange.com/questions/23420/is-whitening-always-good
http://courses.media.mit.edu/2010fall/mas622j/whiten.pdf

 
Dr.Trader:

1) El bosque de divisas sólo funcionará correctamente si se eliminan de antemano los predictores inadecuados y se dejan sólo los necesarios para el entrenamiento. El problema es que hay que identificar o encontrar los predictores adecuados, y el bosque no ayuda a ello.

2) El paquete es muy exigente para los predictores, hay muchas limitaciones. Ni siquiera sé qué significa el último error, lo investigaré más a fondo.

1) Sugerí lo que creo que es una idea bastante buena de cómo hacer tal selección, pero nadie está interesado, y no puedo implementarla yo mismo.

2) No puedo hacerlo yo mismo. 2) Sólo puede reducir la cantidad de datos, si no lo sabrá usted mismo).

 

Ya he publicado este post pero nadie ha reaccionado, lo intentaré de nuevo.

Ya he publicado este post pero nadie reaccionó, lo intentaré de nuevo. Existe una noción en BP como la deformación dinámica del tiempo (DTW), con su ayuda se puede hacer el gráfico de precios más legible y por lo tanto más reconocible para el algoritmo

data_driven_time_warp <- function (y) {
  cbind(
    x = cumsum(c(0, abs(diff(y)))),
    y = y
  )
}

y <- cumsum(rnorm(200))+1000

i <- seq(1,length(y),by=10)
op <- par(mfrow=c(2,1), mar=c(.1,.1,.1,.1))
plot(y, type="l", axes = FALSE)
abline(v=i, col="grey")
lines(y, lwd=3)
box()
d <- data_driven_time_warp(y)
plot(d, type="l", axes=FALSE)
abline(v=d[i,1], col="grey")
lines(d, lwd=3)
box()
par(op)

y todo parece estar bien, pero lo triste es que como resultado de esta transformación, obtenemos dos coordenadas x e y temporales(sintéticas) y valores

d
                x        y
  [1,]   0.000000 1001.393
  [2,]   1.081118 1002.474
  [3,]   2.799970 1004.193
  [4,]   3.706653 1005.100
  [5,]   3.867351 1005.260
  [6,]   4.654784 1004.473
  [7,]   5.000202 1004.127
  [8,]   6.665623 1005.793
  [9,]   7.415255 1005.043
 [10,]   7.956572 1005.584
 [11,]   8.403185 1005.138
 [12,]   9.352230 1004.189
 [13,]   9.913620 1004.750
 [14,]  10.249985 1004.414

la cuestión es cómo devolver esta transformación a un vector para que no pierda sus propiedades

así es como se ve - arriba ordinario, abajo dtw

DTW

 
mytarmailS:

1) Sugerí lo que me pareció una idea bastante buena para hacer dicha selección, pero nadie está interesado, y no puedo ponerla en práctica yo mismo.

2) Sólo reduce la cantidad de datos o se conoce a sí mismo)

¿Qué sugieres? Resulta que me he perdido... ¿Puedo repetir su idea?
 
SanSanych Fomenko:
¿Qué sugieres? Resulta que ¿qué me he perdido? ¿Puedo repetir su idea?
Mira donde escribí sobre la agrupación, lo expliqué con mucho detalle
 
mytarmailS:

la cuestión es cómo devolver esta transformación a un vector normal sin perder sus propiedades

Entonces, ¿alguna opinión sobre esto?
 

He hecho un ejemplo más con ForeCA, en archivo pequeña tabla para la prueba y el código para trabajar con él.
Esta vez he acertado.
Puedes usar tu propia tabla con datos de entrenamiento para el modelo, lo principal es que debe ser matricial, sin factores (entrenamiento con lm, puedes usar sólo regresión). El número de filas debe ser mucho mayor que el número de predictores, de lo contrario habrá errores en ForeCA.
Tengo 0 y 1 valores objetivo, con otra precisión no se determinará correctamente, si eso, por favor corrija el código en RegressionToClasses01(regr) para su caso en el lugar donde el resultado de la regresión se redondea a las clases.
trainData - datos para el entrenamiento
trainDataFT - datos para el fronttest

Resultado:
lm en datos brutos: 75% de precisión en datos de entrenamiento y 57% en datos nuevos.
lm en los 14 componentes de foreCA: 75% en los datos de entrenamiento y 61% en los nuevos datos. Un poco mejor, pero en este caso +4% es sólo +1 resultado correcto, la tabla es bastante pequeña :)

Es decir, si los predictores ya están preseleccionados, no debería ser peor después de ForeCA, incluso podría añadir un par de puntos porcentuales a la precisión.

También he añadido un gráfico con la dependencia de la precisión del número de componentes de ForeCA. Parece que cuanto mayor es el número de componentes, más precisos son los resultados. Número máximo permitido de componentes = número de predictores.


Archivos adjuntos:
 

La segunda parte del experimento es.

Tenía 14 predictores previamente seleccionados, añadí otros 14 con valores aleatorios. El número máximo permitido de componentes de ForeCA es ahora de 28.

La precisión de la predicción con los 28 componentes en los datos de entrenamiento en ambos casos (con y sin foreCA) es del 76%, la precisión en los nuevos datos en ambos casos es del 57%.

No creo que foreCA haya podido con la basura de los pronósticos, no he visto el milagro esperado.

 
mytarmailS:
¿Y qué?
Parece un gráfico renko. Los rencos se dibujan de alguna manera en las barras en el terminal mt5, se necesita un algoritmo similar aquí.
Razón de la queja: