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

 
SanSanych Fomenko:
Lo de los "objetos" en R es mucho más complicado que en muchos lenguajes de programación.
Los objetos no son diferentes, sólo las funciones str, plot, summary y similares se sobrecargan muchas veces, cada tipo tiene su propia implementación
 
Alexey Burnakov:
No entiendo muy bien por qué tarda tanto. ¿Cuál era el número de optim_var? Debería estar dentro de los 10. Ajústalo a 1200 segundos y debería ser algo.

Tengo muchos predictores (9602) y por eso tarda tanto. Están sacados para 2015 del eurusd d1, todo tipo de precios, tiempos e indicadores ahí. Todavía no he salido de d1, por lo que el número de ejemplos de formación es sólo 250+, por el número de días de negociación en un año. No hay saltos.

número_de_var_optimista = 0,8662363

Archivos adjuntos:
trainData.zip  14378 kb
 
Dr.Trader:

Tengo muchos predictores (9602) y por eso tarda tanto. Están sacados para 2015 del eurusd d1, todo tipo de precios, tiempos e indicadores ahí. Todavía no he salido de d1, por lo que el número de ejemplos de formación es sólo 250+, por el número de días de negociación en un año. No hay saltos.

número_de_var_optimista = 0,8662363

Jugaré con tu set. Todo debería volar.
 
SanSanych Fomenko:

La última tiene la primera columna que dice que si se toma sólo PC1 entonces se explica el 0,9761 de la variabilidad (proporción acumulada), si se toman DOS componentes - PC1 y PC2 entonces se explica el 0,99996, etc.

PC1 PC2 PC3 PC4 PC5

Desviación estándar 2,2092 0,34555 0,01057 0,008382 0,004236

Proporción de la varianza 0,9761 0,02388 0,00002 0,000010 0,000000

Proporción acumulada 0,9761 0,99996 0,99998 1,000000 1,000000

Este método sólo funciona si se trabaja con todos los componentes posibles. La función prcomp tiene un parámetro "tol", que es NULL por defecto. Pero se le puede asignar cualquier valor de 0 a 1, para reducir el número de componentes encontrados. Funciona así: al buscar un nuevo componente se toma el sdev del primero y se multiplica por tol. Cuando el sdev del nuevo componente sea inferior a este producto, no se generarán nuevos componentes. Por ejemplo, si tol = 0,1, se descartarán todos los componentes con sdev <0,22, por lo que sólo tendrá los dos componentes principales. Si tol=0,003, sólo quedarán los componentes con sdev > 0,0066276, es decir, sólo cuatro. Si tol=NULL (por defecto) la función generará el máximo número de componentes, pero lleva demasiado tiempo, por lo que quiero acortar este proceso. Si uso tol entonces todo funciona más rápido y hay menos componentes, pero en este caso se rompe. Se calcula de alguna manera basándose sólo en los componentes encontrados. La proporción acumulada del último componente encontrado será siempre 1. Incluso si sólo se encuentran 2 componentes en lugar de miles, la propagación acumulada del segundo componente cambiará a 1 (por ejemplo, desde 0,1 en caso de que se generen todos los componentes) y, en consecuencia, la propagación acumulada de PC1 también aumentará. Es posible que laProporción Acumulada también cambie incorrectamente al tamizar los predictores.

Así que no se puede confiar en la Proporción Acumulativa, si usted trabaja seriamente con el pca y, entonces usted debe escribir su propia función para calcular la variabilidad explicada.

 
Dr. Trader:

Resultó ser un poco malo - este método sólo funciona si se trabaja con todos los componentes posibles. La función prcomp tiene un parámetro "tol", que es NULL por defecto. Pero se puede establecer en cualquier valor de 0 a 1, para reducir el número de componentes encontrados. Funciona así: al buscar un nuevo componente se toma el sdev del primero y se multiplica por tol. En cuanto sdev del nuevo componente cae por debajo de este producto, no se generarán nuevos componentes. Por ejemplo, si tol = 0,1, se descartarán todos los componentes con sdev <0,22, por lo que sólo tendrá los dos componentes principales. Si tol=0,003, sólo quedarán los componentes con sdev > 0,0066276, es decir, sólo cuatro. Si tol=NULL (por defecto) la función generará el máximo número de componentes, pero lleva demasiado tiempo, por lo que quiero acortar este proceso. Si uso tol entonces todo funciona más rápido y hay menos componentes, pero en este caso se rompe. Se calcula de alguna manera basándose sólo en los componentes encontrados. La proporción acumulada del último componente encontrado será siempre 1. Incluso si sólo se encuentran 2 componentes en lugar de miles, la propagación acumulada del segundo componente cambiará a 1 (por ejemplo, desde 0,1 en caso de que se generen todos los componentes) y, en consecuencia, la propagación acumulada de PC1 también aumentará. Es posible que laProporción Acumulada también cambie incorrectamente al tamizar los predictores.

Así que no se debe confiar en la Proporción Acumulativa, si se trabaja seriamente con pca y, entonces se debe escribir una función propia para calcular la variabilidad explicada.

Es una idea interesante, no en vano te he estado agitando para que le eches un vistazo.
 
Dr.Trader:

Tengo muchos predictores (9602) y por eso tarda tanto. Están sacados para 2015 del eurusd d1, todo tipo de precios, tiempos e indicadores ahí. Todavía no he salido de d1, por lo que el número de ejemplos de formación es sólo de 250+, por el número de días de negociación en un año. No hay saltos.

número_de_var_optimista = 0,8662363

He mirado su conjunto. O no entiendo algo, por ejemplo que no entran todas las variables, o estás cometiendo un gran error. Tiene muchos valores de precios en bruto, por ejemplo, 1,1354 (MA y otros). No hay manera de hacerlo ya que son datos completamente no estacionarios. Todos los datos deben ser indicadores DIFERENTES u oscilantes, y ser omnidireccionales. Encontrar dependencias en esos datos es un trabajo completamente inútil.
 

Cierto, se me olvidaba, ya dijo que los datos tenían que ser especialmente preparados. Tomé los datos en bruto. Hay osciladores entre los indicadores también, voy a tratar de tomar sólo ellos.

Por cierto, el modelo PCA funciona con estos datos, pero necesita mucho centrado, escalado y cierta rotación de los datos de origen. Para la neurona es más fácil, sólo necesita la normalización de los datos en [0...1].

 
Dr.Trader:

Cierto, se me olvidaba, ya dijo que los datos tenían que ser especialmente preparados. Tomé los datos en bruto. Hay osciladores entre los indicadores también, voy a tratar de tomar sólo ellos.

Por cierto, el modelo PCA funciona con esos datos, pero necesita mucho centrado, escalado y cierta rotación de los datos de origen. Para la neurona es más fácil, sólo necesita la normalización de los datos en [0...1].

No, definitivamente no entiendes la importancia de la no estacionalidad. No importa si es un modelo NS o lineal o mi modelo, si sus datos son no estacionarios, las dependencias encontradas en ellos están garantizadas para no ocurrir fuera de la muestra. Todos los datos que tiene son precios brutos, MA(raw price), apertura de barra(raw price), etc. deben ser eliminados del modelo. Hay que tomar la diferencia con el último precio conocido.

En este caso no es posible escalar en un intervalo.

 
Alexey Burnakov:

Si tiene datos no estacionarios, está garantizado que las dependencias encontradas en ellos no se producirán fuera de la muestra.

Sólo hay un matiz interesante que siembra dudas sobre la idoneidad de la reproducción de esos datos (diferencias con los valores anteriores)

1) por ejemplo si tenemos un precio,

2) generamos su diferencia

3) tomamos dos segmentos de diferencias que están muy cerca el uno del otro por estructura (que sea euclidiana)

4) estas áreas pertenecen casi al 100% a un cluster en RF o a las mismas neuronas y se consideran situaciones idénticas

5) A continuación, tomamos estos dos tramos (diferencias) y los reducimos de nuevo a los precios iniciales, es decir, los acumulamos

Y vemos que estas secciones son totalmente diferentes, a menudo una sección tiende hacia arriba y la otra hacia abajo, es decir, no hay ninguna semejanza, mientras que el algoritmo piensa que son secciones idénticas...

¿Qué opinas al respecto, Alexey? Tus comentarios son interesantes como hombre con experiencia.

 
mytarmailS:

Sólo hay un matiz interesante que siembra dudas sobre la idoneidad de la reproducción de esos datos (diferencias con el valor anterior)

1) por ejemplo si tenemos un precio,

2) generamos su diferencia

3) tomamos dos segmentos de diferencias que están muy cerca el uno del otro por estructura (que sea euclidiana)

4) estas áreas pertenecen casi al 100% a un cluster en RF o a las mismas neuronas y se consideran situaciones idénticas

5) a continuación, tomamos estos dos tramos (diferencias) y los reducimos de nuevo a los precios iniciales, es decir, los acumulamos

Y vemos que estas secciones son totalmente diferentes, a menudo una sección tiende al alza y la otra a la baja, es decir, no hay ningún parecido, mientras que el algoritmo piensa que son secciones idénticas...

¿Qué opinas al respecto, Alexei? Es interesante escuchar tus comentarios como hombre con experiencia.

¿Por qué iba a ser así? Si las diferencias son iguales, entonces las series integrales coincidirán completamente. Si sólo son similares, las series integrales serán similares (por tendencia).

Quería decirle a Trader que leyera los fundamentos de la preparación de datos. Nadie presenta precios en bruto para la entrada. Esto ya se ha reproducido cien mil veces. Los datos inestables conducen a dependencias inestables.

Razón de la queja: