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

 
mytarmailS:


¿Cuál es el problema? Por favor, ayuda.


Funciona así:

test_vec <- numeric() # тут будем хранить показатели теста 


for(i in 151:ln){

print(i)

idx <- (i-150):i

#проводим линейную регрессию для определения правильного соотношения

x <- data[idx, ]

model <- lm(ri ~ si + 0, x)

#вычисляем разницу цен (спред)

spread <- x$ri - coef(model)[[1]] * x$si

#проводим тест Дики-Фуллера на стационарность

test <- adf.test(as.vector(spread), k = 0)

test_vec[i-150] <- test$p.value

}


plot(test_vec, type = 's')

 
Alexey Burnakov:

En primer lugar, R^2 0,55 puede conseguirse de forma realista aplicando alguna pequeña transformación funcional a la "metafunción". Otra cosa es que la función resulte un poco complicada en su forma.

Y otra cosa - tratar de tomar:

rowMeans(df[,1:10])

...

Añadí 10 nuevas columnas, no cambió nada para nnet, los resultados y las curvas de aprendizaje se mantuvieron más o menos igual, el modelo selecciona los mismos predictores.

Pero el árbol dio de repente resultados mucho mejores. El bosque también mejoró, pero un árbol lidera por sí mismo (pseudo r^2=0,39), aquí están los gráficos con traqueteo en los nuevos datos.

El árbol sólo eligió rowMeans[,1:50], recordando sus valores de los datos de entrenamiento. Por lo tanto, existe una relación muy estrecha pero no lineal entre rowMeans[,1:50], y el objetivo.

Aunque, si dejamos sólo estos 10 nuevos predictores, entonces nnet entrenará a r^2=0,22, también mejor.

 
Dr.Trader:

He añadido 10 nuevas columnas, no ha cambiado nada para nnet, los resultados y las curvas de aprendizaje son más o menos los mismos, el modelo selecciona los mismos predictores.

Pero el árbol dio de repente resultados mucho mejores. El bosque también mejoró, pero un árbol lidera por sí mismo (pseudo r^2=0,39), aquí están los gráficos con traqueteo en los nuevos datos.

El árbol sólo eligió rowMeans[,1:50], recordando sus valores de los datos de entrenamiento. Por lo tanto, existe una relación muy estrecha pero no lineal entre rowMeans[,1:50], y el objetivo.

Aunque, si dejamos sólo estos 10 nuevos predictores, entonces nnet entrenará a r^2=0,22, también mejor.



Exactamente. media(1:50). Buenos resultados. Ahora intentaré mejorar un poco la aproximación de la función. Si no te importa, publica el gráfico de dispersión de la solución encontrada frente a la salida simulada. Para NS o para el bosque al azar. Después publicaré el mío. Debería haber una no linealidad.

 

Alexey Burnakov:

Debería haber una no linealidad ahí.

A juzgar por el gráfico, hay una pequeña conexión. Pero tanto las neuronas como el árbol sólo detectan alguna tendencia general. Y este predictor por sí solo, obviamente, no se puede utilizar para entrenar el modelo, no se puede obtener más de un árbol.

 
Dr.Trader:

A juzgar por el gráfico, hay un poco de conexión. Pero tanto las neuronas como el árbol sólo muestran una tendencia general. Y este predictor por sí solo obviamente no ayuda a entrenar el modelo, es imposible obtener más del árbol.

Gracias, gracias.

Sí, estoy de acuerdo.

Mis gráficos:

minimizar la rmse

dependencia real:

modelo:

real y el modelo:

La concepción original es pura:

Cómo resultó el real teniendo en cuenta el ruido que ya has visto.


La mejor calidad de modelado posible:

 
Alexey Burnakov:

Funciona:

Gracias, no me lo habría imaginado...
 
Dr.Trader:

A juzgar por el gráfico, hay un poco de conexión. Pero tanto las neuronas como el árbol sólo muestran una tendencia general. Y este predictor por sí solo obviamente no ayuda a entrenar el modelo, es imposible obtener más del árbol.

Debemos resumir la tarea y escribir lo que hemos entendido.

Todo bajo el supuesto de que en la vida real no sabemos nada del tipo de dependencia.

Según tengo entendido:

1) Sacar una dependencia de una serie de fics simples como las devoluciones de precios es difícil y muchos métodos no funcionan bien. Pero por principios generales se puede obtener una solución aproximada a través de la convolución.

2) si genera muchas características por adelantado, hay muchas posibilidades de que los métodos convencionales funcionen bien.

3) la mejor métrica de calidad en los chips sin procesar, después de la NS convolucional, es la NS convencional, seguida de otros métodos con aproximadamente el mismo resultado.

4) en muchas fichas generadas potencialmente, bosque, NS funciona bien.

5) Si es preferible dejar que el propio NS convolucional recoja las fichas, en lugar de un humano, sigue siendo una cuestión abierta. Encontrar la arquitectura de convolución adecuada es probablemente tanto trabajo como generar un montón de características por adelantado.

¿Qué puede añadir, Dr.?

 

Intenté generar fics cuando publicaste el problema por primera vez, el algoritmo pasó por diferentes combinaciones matemáticas toda la noche, seleccionando los mejores predictores nuevos a través de la estimación de vtreat. No hubo ningún resultado positivo, el modelo ni siquiera pudo aprender correctamente de los nuevos predictores. Así que, o bien es aleatorio y se adivinan los predictores adecuados y las operaciones matemáticas sobre ellos, o no. Puedes pasarte días generando y probando variantes y aun así será inútil. Dado que la red convolucional con predictores originales obtuvo mejores resultados que la red habitual con rowmeans, probablemente sea mejor quedarse con la red convolucional.

 
Dr.Trader:

Intenté generar fics cuando publicaste el problema por primera vez, el algoritmo pasó por diferentes combinaciones matemáticas toda la noche, seleccionando los mejores predictores nuevos a través de la estimación de vtreat. No hubo ningún resultado positivo, el modelo ni siquiera pudo aprender correctamente de los nuevos predictores. Así que, o bien es aleatorio y se adivinan los predictores adecuados y las operaciones matemáticas sobre ellos, o no. Puedes pasarte días generando y probando variantes y aun así será inútil. Dado que la red convolucional con predictores originales ha obtenido mejores resultados que la red habitual con rowmeans, creo que es mejor utilizar la red convolucional.

Gracias, Dr.

Sí, ese es un buen punto también. Es que tengo la costumbre de deducir las sumas con una ventana de aumento deslizante, así como las diferencias con un retraso deslizante y todas las demás cosas deslizantes en el pasado.

Veo que tengo la idea de que para modelar casi todo (¡casi!) basta con tomar predictores de la forma:

precio_actual - precio(lag1)

precio_actual - precio(lag2)

...

precio_actual - precio(lag_n)

Se pueden tratar como sumas móviles (que se convierten fácilmente en medias), y se puede reproducir cualquier configuración de la tendencia: inflexiones en diferentes lugares, velocidad, aceleración.

Hablando de la red convolucional, te sugiero que intentes hacer algo práctico con el código que he citado. Y centrarse en el análisis de los pesos y los núcleos de la red. El núcleo mostrará el tipo de convolución. Las ponderaciones pueden mostrar importancia y no linealidad.

Personalmente, me estoy tomando un descanso de mi experimento principal por ahora, aunque ya hay algunos resultados tolerables. Me estoy aburriendo... He decidido intentar predecir un instrumento bursátil con una red de convolución. Los gastos generales son bastante bajos (un orden de magnitud inferior al diferencial de las divisas) y existe la fantasía de que funcione. Ya te contaré más adelante.

Curso rápido en la CNN: http://cs231n.github.io/convolutional-networks/

 

Estas conferencias en vídeo solían estar también en YouTube, luego fueron retiradas, pero permanecen en archive.org - https://archive.org/details/cs231n-CNNs

En inglés, pero muy informativo y útil. Principalmente sobre el reconocimiento de imágenes mediante redes convolucionales, pero hay mucha información útil sobre las neuronas en general.

Razón de la queja: