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

 
También me pregunto cómo define el paquete foreca la relación entrada-salida. Tal vez sea trivial, tal vez no.
 
Alexey Burnakov:
Yo también me pregunto cómo determina el paquete foreca la relación entrada-salida. Puede que sea trivial allí o puede que no.

Acabo de revisar la línea, permítanme que me corrijan o confirmen, pero según tengo entendido el paquete basado en algún algoritmo interno evalúa la capacidad de predicción de una variable aleatoria en particular, es decir, la capacidad de extrapolar sus valores de una variable aleatoria en el futuro. Si se trata de un gráfico de tendencia, obtenemos uno, y si se trata de incrementos de precio, obtenemos un 0,83%, lo que para mí es bastante obvio. Y todo depende del método en sí, y en la práctica ocurre lo contrario, ya que los incrementos se predicen mucho mejor: están mucho más cerca de la estacionariedad que las tendencias en las series temporales no estacionarias. Tenemos que entender la herramienta en sí misma y aplicar la herramienta a los objetos a los que se ajusta la herramienta.

En general, hay errores en el análisis de sistemas.

Error nº 1.

Aplicar el método correcto al problema equivocado.

Es muy común en las estadísticas.

 
SanSanych Fomenko:

En general, creo que el mensaje original se ha perdido. Para mí, la idea original era que necesitamos métodos que sean independientes del modelo para determinar la capacidad de cada uno de los predictores utilizados para predecir la variable objetivo.

Un ejemplo de selección independiente del modelo es el paquete vtreat. De alguna manera, analiza los datos y luego los compara con los valores objetivo.

data(iris)
iris[,5] <- as.numeric(iris[,5]) #пакет  не умет факторы, их нужно сконвертировать в числа
iris_rand <- runif(nrow(iris)*10, min(iris[,1:4]), max(iris[,1:4])) #новых 10 предикторов со случайными значениями
dim(iris_rand) <- c(nrow(iris), 10)
colnames(iris_rand) <- paste0("rand_", c(1:10))
iris <- cbind(iris_rand, iris)
library(vtreat)
treatments <- designTreatmentsN(dframe = iris, varlist = colnames(iris)[1:(ncol(iris)-1)], outcomename = colnames(iris)[ncol(iris)], verbose = TRUE)
treatments
format(treatments)
significance <- treatments$scoreFrame[,"sig"]
names(significance) <- treatments$scoreFrame[,"origName"]
barplot(significance)

Se crean 10 nuevos predictores con valores aleatorios para la tabla del iris. designTreatmentsN puntuará cada predictor, cuanto menor sea la puntuación, mejor. En este ejemplo, los 4 predictores originales (los últimos del gráfico) destacan claramente, tienen una puntuación casi nula, lo cual es muy bueno. Al seleccionar los predictores, lo primero que hay que eliminar es el que tiene los valores más altos.
Si sólo hay 2 valores objetivo (0/1, TRUE/FALSE, -1/1, factor con 2 niveles, etc...), existe la función designTreatmentsC para tal caso.


Este paquete también se utiliza en el pca y-aware. El paquete vtreat escala los predictores en un intervalo consciente de y y los componentes se crean además de forma casi habitual (sólo que sin reescalar y centrar). Así que, si quieres, puedes hacer cosas tan interesantes como un bosque aleatorio consciente de y, por ejemplo, con este paquete.
Más información:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

 
Dr.Trader:

Un ejemplo de selección independiente del modelo es el paquete vtreat. De alguna manera, analiza los datos y luego les da una puntuación de valor objetivo.

Se crean 10 nuevos predictores con valores aleatorios para la tabla del iris. designTreatmentsN puntuará cada predictor, cuanto menor sea la puntuación, mejor. En este ejemplo, los 4 predictores originales (los últimos del gráfico) destacan claramente, tienen una puntuación casi nula, lo cual es muy bueno. Al seleccionar los predictores, lo primero que hay que eliminar es el que tiene los valores más altos.
Si sólo hay 2 valores objetivo (0/1, TRUE/FALSE, -1/1, factor con 2 niveles, etc...), existe la función designTreatmentsC para tal caso.


Este paquete también se utiliza en el pca y-aware. El paquete vtreat escala los predictores en un intervalo consciente de y y los componentes se crean además de forma casi habitual (sólo que sin reescalar y centrar). Así que, si quieres, puedes hacer cosas tan interesantes como un bosque aleatorio consciente de y, por ejemplo, con este paquete.
Más información:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Bueno, ya está, volvemos a lo básico.

Siguiente.

Utilizar cualquier modelo SÓLO después de haber sido procesado para ellos por estos paquetes. La esperanza es que los modelos, al ser preprocesados de esta manera, NO sufran de sobreentrenamiento.

 
SanSanych Fomenko:

Aplicar los métodos correctos al problema equivocado.

No he conseguido entender las series temporales de CaretFA, hay muchas fórmulas en la descripción. Sí que pillé algo sobre la correlación de los nuevos valores con los antiguos, y el análisis del gráfico de frecuencias tras la transformada de Fourier, el análisis de cómo cambia este gráfico en los nuevos datos. Ahí hay que entender más de radiofísica que de forex :)

Hay ejemplos en la descripción del paquete, donde se aplica a los índices DAX, SMI, CAC, FTSE, exactamente se utilizan incrementos en D1, es decir, tanto el paquete como las tareas son correctas.
Un pequeño matiz es que en el ejemplo la serie temporal de precios se procesa primero con la función logarítmica log() y sólo después se encuentran los deltas. diff(log(EuStockMarkets[c(100:200),]) * 100
Pero no he notado ninguna diferencia si uso o no uso log(), el resultado de la estimación no ha cambiado, se ha hecho más bien para una visualización más cómoda de los datos en el gráfico.

 
Dr.Trader:

No he conseguido entender las series temporales de CaretFA, hay muchas fórmulas en la descripción. Sí que pillé algo sobre la correlación de los nuevos valores con los antiguos, y el análisis del gráfico de frecuencias tras la transformada de Fourier, el análisis de cómo cambia este gráfico en los nuevos datos. Ahí hay que entender más de radiofísica que de forex :)

Hay ejemplos en la descripción del paquete donde se aplica a los índices DAX, SMI, CAC, FTSE, son los incrementos D1 los que se utilizan, es decir, tanto el paquete como los objetivos son correctos.
Un pequeño matiz es que en el ejemplo la serie temporal de precios se procesa primero con la función logarítmica log() y sólo después se encuentran los deltas. diff(log(EuStockMarkets[c(100:200),]) * 100
Pero no he notado ninguna diferencia si uso o no uso log(), el resultado de la estimación no ha cambiado; se hizo más bien para la visualización de los datos en el gráfico.

En lo que respecta a este paquete, la cuestión para mí es una cuestión de principios:

  • da el poder de predicción del predictor individual,
  • o la capacidad de predicción de la variable objetivo mediante los predictores?

 
SanSanych Fomenko:

Con respecto a este paquete, la cuestión para mí es una cuestión de principios:

  • da el poder de predicción del predictor individual,
  • o la capacidad de predicción de la variable objetivo mediante los predictores?

No busca una relación entre la variable objetivo y los predictores. El autor del paquete escribe sobre dos aplicaciones -.

1) Evaluar una serie temporal para ver si es predictiva en absoluto (en una escala de 0% = "ruido blanco" a 100% = sinusoidal) con Omega(). Si el resultado es 0%, entonces no es posible intentar predecir el comportamiento de la serie temporal, sean cuales sean los predictores utilizados.
2) Tomar algunos predictores, evaluarlos con la misma función, crear nuevos predictores similares a pca para que los nuevos predictores tengan un resultado de Omega() aún mejor que los originales. Si esto ayuda a predecir mejor los valores objetivo o no, depende de su suerte, el paquete no está interesado en lo que estos predictores tienen que predecir. La cuestión es que si el predictor no es ruido, los modelos que lo utilicen predecirán de forma más estable.

 
Dr.Trader:

No busca vínculos entre la variable objetivo y los predictores. El autor del paquete escribe sobre dos aplicaciones -

1) Evaluar si la serie temporal es predecible en absoluto (en una escala de 0% = "ruido blanco" a 100% = sinusoidal) con Omega(). Si el resultado es 0%, entonces es imposible intentar predecir el comportamiento de la serie temporal, sean cuales sean los predictores utilizados.
2) Tomar algunos predictores, evaluarlos con la misma función, crear nuevos predictores similares a pca para que los nuevos predictores tengan un resultado de Omega() aún mejor que los originales. Si esto ayuda a predecir mejor los valores objetivo o no, depende de su suerte, el paquete no está interesado en lo que estos predictores tienen que predecir. La cuestión es que si el predictor no es ruido, los modelos que lo utilicen predecirán de forma más estable.

Has confirmado sustancialmente mis sospechas.

Gracias.

Creo que el paquete es inútil para la clasificación.

Pero para la predicción de tipo extrapolación puede ser útil.

Por ejemplo, tomemos el paquete de previsiones. Descompone la serie en tres componentes, luego extrapola hacia adelante y suma. Consigue una previsión un paso o más adelante.

Ahora la pregunta es: ¿qué par de divisas tomar? TomamosCaretFA y lo utilizamos para calcular la capacidad de predicción de varios pares de divisas. Sospecho que en una ventana limitada esa capacidad de predicción cambia a medida que la ventana se mueve. Elegimos un par de divisas, lo predecimos (u otro paquete - hay muchos), lo operamos, después de cerrar todas las posiciones elegimos el par de divisas de nuevo.

 
Dr.Trader:

Un ejemplo de selección independiente del modelo es el paquete vtreat. De alguna manera, analiza los datos y luego los evalúa con respecto a los valores objetivo.

Para la tabla del iris, se crean 10 nuevos predictores con valores aleatorios. designTreatmentsN evaluará cada predictor, cuanto menor sea la puntuación, mejor. En este ejemplo, los 4 predictores originales (los últimos del gráfico) destacan claramente, tienen una puntuación casi nula, lo cual es muy bueno. Al seleccionar los predictores, lo primero que hay que eliminar es el que tiene los valores más altos.
Si sólo hay 2 valores objetivo (0/1, TRUE/FALSE, -1/1, factor con 2 niveles, etc...), existe la función designTreatmentsC para tal caso.


Este paquete también se utiliza en el pca y-aware. El paquete vtreat escala los predictores en un intervalo consciente de y y los componentes se crean además de forma casi habitual (sólo que sin reescalar y centrar). Así que, si quieres, puedes hacer cosas tan interesantes como un bosque aleatorio consciente de y, por ejemplo, con este paquete.
Más información:https://cran.r-project.org/web/packages/vtreat/vignettes/vtreatScaleMode.html

Miro tu código con iris y predictores aleatorios y entiendo que no sé programar en absoluto, lo que me costó 10 líneas en tu código cabe en tres....

Y esta selección por parte de vtreat, ¿se diferencia de la misma importense incorporada en RF?

 
mytarmailS:

¿es esta selección de vtreat diferente de la importense incorporada en RF?

Vtreat es mejor. Evalúa todo estadísticamente, lo bueno/malo que es el predictor en general para predecir la variable objetivo, sin ajustarse a un modelo de predicción concreto. Se recomienda utilizar predictores con una puntuación máxima de 1/(número de predictores). Por ejemplo, si hay 200 predictores, puede tomar de ellos sólo los que tengan una evaluación inferior a 1/200. Es posible estimar los predictores y, si todas las estimaciones son superiores al umbral, en lugar de intentar infructuosamente enseñar el modelo y predecir nuevos datos, es mejor empezar a buscar otros predictores.

Hay un par de desventajas: el paquete trabaja con los predictores uno por uno, y no tiene en cuenta su interacción. Tampoco me gusta que incluso con predictores totalmente idénticos, o altamente correlacionados, vtreat no elimine los repetitivos, a veces esto es muy molesto.

Razón de la queja: