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

 
Dr.Trader:

Gran parte de esto lo sabes tú mismo y lo has hecho, pero voy a escribir más detalladamente para excluir cualquier suposición de que hablamos de la misma manera pero lo hacemos de forma diferente.


Todo esto a partir de los consejos de este foro, y la experiencia.

Gracias.

Responderé punto por punto.

Es necesario contar con una función de aptitud cuidadosamente afinada para estimar los parámetros del modelo. Si la función evalúa los parámetros específicos del modelo y los predictores seleccionados con una alta puntuación, debería haber buenos resultados en la prueba sobre los nuevos datos.
(Tendré en cuenta para cualquier estimación que cuanto más alta sea, mejor será)

Existe esta función. No necesito R^2 (aunque al principio me propuse confirmar que el mercado es estúpidamente predecible en términos de regresión). Utilizo una función escrita para estimar la MO y la suma de puntos con la dispersión. Esta función se ejecuta dentro del bucle CV y selecciona los mejores parámetros para entrenar el modelo.

La función de aptitud debe repetirse al menos 50 veces en un ciclo:
1) dividir los datos en 2 partes, 50%/50%. Debe haber tanto un muestreo aleatorio con muestra como un muestreo secuencial (la pieza para la formación está en algún lugar del medio, y para la validación lo que la rodea al principio y al final de los datos brutos). Incluyendo versiones extremas, donde el entrenamiento en la primera mitad de la tabla y la validación en la última, y viceversa. Creo que es importante tener tanto muestras secuenciales como muestras aleatorias para el entrenamiento. En la imagen se pueden ver más claramente algunos ejemplos de partición aleatoria y secuencial, las líneas verdes son de entrenamiento, las amarillas son de validación.

No está muy claro. No entiendo a qué repeticiones se refiere.

De nuevo tengo 99 conjuntos de entrenamiento (10 años cada uno). Cada conjunto es único en cuanto a los ejemplos, pero todos están tomados del mismo periodo de tiempo "anterior".

En cada serie, ejecuto una CV con 2 a 10 faltas (también las recorro cíclicamente).

Pero tengo estrictamente todas las faltas separadas por tiempo. Creo que es un método inviolablemente correcto.

Así que 99 * número de combinaciones de parámetros CV (cientos) = cientos de modelos entrenados, que muestran la mejor métrica de calidad en las faltas de validación.

A continuación, hay el mismo número de muestras retardadas tomadas en el marco temporal del "después" (que es de 5 años). También son únicos. Hago un CV anidado: compruebo cada modelo resultante para la experiencia del CV en la muestra diferida. Obtengo dos vectores de valores de métricas de calidad: en CV y en muestra diferida.

Pregunta para los entendidos:

en caso de que tenga datos constantes y un modelo adecuado (paquete), ¿qué espero obtener en las muestras diferidas?

Respuesta: la métrica de calidad (QM) en las muestras diferidas debe estar correlacionada con la métrica de calidad en las faltas de validación.

En realidad, conseguirlo es un gran problema.

¿Por qué lo necesito? De modo que puedo seleccionar con confianza los mejores modelos simplemente confiando en mi validación cruzada. Como ya he comprobado que da resultados coherentes con el futuro.

Los comités y otros modelos de alto nivel también tienen que pasar la prueba de idoneidad en esa muestra diferida en la que no han sido entrenados de ninguna manera.

 
Dr.Trader:


2) entrenar el modelo en la muestra de entrenamiento (los parámetros del modelo y los predictores utilizados son los mismos durante todo el ciclo, los que se intentan estimar), luego predecir estos mismos datos con este modelo, y poner una puntuación en la predicción - precisión, r^2, o algo más. Yo, por ejemplo, redondeo el resultado de la regresión a las clases, y uso la función Kappa de Cohen para la estimación, es de caret, me gusta más que la precisión de la clasificación o la precisión de la regresión. Pero sólo funciona para dos clases. Para tres clases me parece difícil sugerir algo, es importante que la estimación tenga en cuenta la precisión de cada clase por separado, y dé alguna estimación global basada en esto.
3) Aplicar un modelo entrenado para predecir los datos de una muestra de validación, estimar la predicción con la misma función.
4) Ambas estimaciones (la de entrenamiento y la de validación) deben estar cerca la una de la otra, y ser lo más altas posible. Utilizo este código para la puntuación final - (min(puntuación1,puntuación2) - (max(puntuación1,puntuación2)-min(puntuación1,puntuación2)) - del valor mínimo se resta su delta.

Al final de cada iteración obtendremos alguna puntuación, y debido a la división aleatoria de los datos puede variar de -1 a 1 (o en otro intervalo, dependiendo de la función utilizada). Calculamos su valor medio y lo devolvemos como resultado de la función de aptitud. Además, resto un pequeño número (0,0001) del valor de aptitud para cada predictor utilizado para penalizar el modelo por un conjunto demasiado grande de datos requeridos.


Por favor, aclárese, ¿se refiere la formación a la evaluación de las faltas de validación cruzada?

La proximidad de la estimación de la formación y la validación: ¿significa la correlación del muestreo diferido con el resultado de la validación cruzada?

Si ese es el caso, entonces estamos cerca.

 
Alexey Burnakov:

Por favor, aclárese, ¿se refiere la formación a la evaluación de las faltas de validación cruzada?

La proximidad de la estimación de la formación y la validación: ¿significa la correlación del muestreo diferido con el resultado de la validación cruzada?

Si ese es el caso, entonces estamos cerca.

¿Qué significa "correlación"? "+1"? "-1"? ¿Con qué?

Aquí hay 50 resultados de la carrera que puedo entender. Con 50 resultados ya puedes aplicar la estadística, contar la media, las desviaciones y, sobre todo, el intervalo de confianza....

 
mytarmailS:

¿Puedo ver el resultado de las operaciones de ayer?

Ү No es perfecto, pero aún así el 80% del modelo está generalizado....

 
SanSanych Fomenko:

¿Qué significa "correlación"? "+1"? "-1"? ¿Con qué?

Aquí hay 50 resultados de la carrera que puedo entender. Con 50 resultados ya puedes aplicar la estadística, contar la media, la varianza y, sobre todo, el intervalo de confianza....

No, no lo conseguiste, CC.

Correlación de la métrica de calidad en la muestra diferida con la métrica de calidad en la validación cruzada (como, una muestra de prueba que evalúa el modelo entrenado). Si tenemos cientos de modelos entrenados, obtendremos dos vectores de métricas de calidad.

Ejemplo: la precisión de la clasificación en la validación cruzada es del 57%, en el muestreo diferido del 50%. Y hay cientos (miles) de estos valores. Pero hay cientos y miles de modelos entrenados. Así que surge la pregunta.

 
Alexey Burnakov:

Por favor, aclárese, ¿se refiere la formación a la evaluación de las faltas de validación cruzada?

La proximidad de la estimación de la formación y la validación: ¿significa la correlación del muestreo diferido con el resultado de la validación cruzada?

Si ese es el caso, entonces estamos cerca.

En código es algo así:

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё  нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо  TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
En la práctica se aplicaron elementos de aprendizaje automático no para aprender del historial de operaciones, sino del historial de uso de un conjunto de señales/opciones dentro de las propias sesiones de operaciones del robot para correlacionarlas con la activación de patrones particulares en el mercado "en vivo" en configuraciones/condiciones de mercado/señales particulares.
 
Dr.Trader:

En código, es algo así:

Sí, dígame con palabras, ¿comparan qué muestras? Hay entrenamiento, hay prueba (entrenamiento múltiple y prueba = validación cruzada). Hay validación (muestreo diferido).

Tengo tres columnas:

entrenar a todos. ---- prueba falta de validación cruzada. ----- observaciones pendientes

0,7 0,65 0,55

... .... ....

El hecho de que el entrenamiento se correlacione con la prueba no tiene sentido, porque el modelo elegido, como resultado, está entrenado en todo el conjunto, cuyas partes se incluyeron en la prueba.

Pero el hecho de que las estimaciones de las pruebas se correlacionen con las estimaciones aplazadas es importante para mí.

 

En sus términos, estoy comparando la formación y la prueba.
No tengo una muestra de validación (diferida) cuando entreno el modelo. La muestra diferida serán los nuevos datos que el modelo negociará después del entrenamiento.

El hecho de que el entrenamiento se correlacione con la prueba no tiene sentido

Por eso hago múltiples particiones de datos y múltiples reentrenamientos de modelos. Si los parámetros del modelo no tienen éxito, el resultado medio de las muestras de prueba será mucho más bajo que el resultado medio de las muestras de entrenamiento

 
Dr.Trader:

En sus términos, estoy comparando la formación y la prueba.
Resulta que no tengo muestreo de validación (diferido) al entrenar el modelo. Los nuevos datos con los que comerciará el modelo tras el entrenamiento serán de muestreo diferido.

Por eso hago múltiples particiones de los datos y múltiples entrenamientos del modelo de nuevo. Si los parámetros del modelo no tienen éxito, el resultado medio de las muestras de prueba será mucho más bajo que el resultado medio de las muestras de entrenamiento

Hay zimus en lo que estás haciendo.

Sin embargo, también debería probar el muestreo diferido. Esto es un clásico. Entrenamiento, prueba, validación.

Y hacer el procedimiento aún más complejo. Para cada modelo que funcione bien en términos de entrenamiento y prueba, llamémoslo modelo X, haga la validación en los datos retrasados. De este modo, podrá hacerse una idea de si está eligiendo el modelo correcto o no, utilizando únicamente el entrenamiento y las pruebas. Haz muchos modelos con diferentes parámetros, elige los mejores (10, 100, 1000). Falla. Comprenderá si su "mejor" métrica se refleja en los datos futuros o no. Sólo después de eso se entra en la batalla.