Discusión sobre el artículo "Uso de modelos ONNX en MQL5" - página 2

 
Quantum #:

En el 1er comentario del vídeo, tenga en cuenta que debe especificar explícitamente la versión 2.10.0 de tensorflow

Gracias, me refiero a

Maxim Dmitrievsky #:
No tiene sentido experimentar ahí, porque tal previsión no difiere de una ingenua (se toma como previsión el valor del precio de cierre anterior). En este caso, realmente se obtiene casi el menor error de aprendizaje (RMS), lo que no dice nada sobre la capacidad de predicción del modelo. Se trata más bien de un ejemplo didáctico sobre ONNX de que incluso una arquitectura compleja puede trasladarse fácilmente al terminal. No sé qué se estaban fumando los autores de ese artículo sobre la investigación de arquitecturas de redes neuronales para la predicción de series temporales :) aquí o se necesita una estimación correcta, o una clasificación en lugar de una regresión.

Por favor, explica el ejemplo de la imagen en el que interviene el otro 20% de velas de prueba. ¿Es una previsión? ¿Por qué el pronóstico coincide casi completamente con los precios reales (a juzgar por la imagen, parecen dos velas, sólo una está desplazada una barra), pero el probador está un poco triste?

[Eliminado]  
Ivan Butko #:

Por favor, explique el ejemplo de la imagen en el que interviene el otro 20% de las velas de prueba. ¿Se trata de una previsión? ¿Por qué la previsión coincide casi totalmente con los precios reales (a juzgar por la imagen, parecen dos velas, sólo una está desplazada una barra), pero en el probador hay cierta tristeza?

Usted respondió a su propia pregunta, que se obtiene un retraso MA como un pronóstico (por lo general con un solo desplazamiento hacia atrás). Este es un truco bien conocido cuando se entrena a través de métricas estándar, se minimizan con este resultado.

Arriba he añadido un enlace donde leer sobre otras métricas.
 

https://stackoverflow.com/questions/65316205/implementation-os-nmae-as-metric-with-keras

from keras import backend as K
def NMSE_metric(y_true, y_pred):
    nmse = K.square(y_true - y_pred)/K.square(y_true+1 e-8)
    return nmse
#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss= 'mse' , metrics = [NMSE_metric])


Implementation os NMAE as metric with Keras
Implementation os NMAE as metric with Keras
  • 2020.12.16
  • Patrick Luiz Patrick Luiz 1
  • stackoverflow.com
To do so, I'm trying with this code: The NNet I'm building is this: The problem is that NMSE_metric just gave inf. Any hint?
 
Maxim Dmitrievsky #:

Usted respondió a su propia pregunta, que se obtiene un MA rezagado como una predicción (por lo general con un solo desplazamiento hacia atrás). Este es un truco bien conocido cuando se entrena a través de métricas estándar, se minimizan con este resultado.

Arriba he añadido un enlace donde leer sobre otras métricas.

Se necesita un artículo sobre este tema.

[Eliminado]  
Quantum #:

Se necesita un artículo sobre este tema.

Al parecer, las métricas de la energía no son adecuados tampoco :) no sé una buena solución, así que me cambié a la clasificación.
 
Maxim Dmitrievsky #:
Aparentemente las métricas de la industria energética tampoco encajan :) no conozco una buena solución, así que me he pasado a la clasificación.

En google para la mejor métrica de previsión, sale MAPE (Mean absolute percentage error).

La gente también pregunta a
¿Cuál es la métrica más utilizada para la precisión de las previsiones
?
MAPE: El error porcentual medio absoluto es la medida más utilizada para comprobar la precisión de las previsiones. Se trata de errores porcentuales que son independientes de la escala y pueden utilizarse para comparar series en diferentes escalas.

Para utilizar explícitamente las métricas en la optimización de modelos keras, deben especificarse explícitamente como una función de pérdida, no como en #13.

Se puede encontrar una implementación de más de 100 métricas de regresión en Python aquí (Criterio de Información de Akaike, distancia de Aitchison, R-cuadrado ajustado de Amemiya, Criterio de Predicción de Amemiya, Sesgo como y dado por Gupta, Criterio de Información Bayesiano, puntuación de Brier, coeficiente de correlación de Pearson, diferencia raíz-media-cuadrada (RMS) centrada, MSE descompuesto desarrollado por Kobayashi y Salam...).

Ejemplo con optimización de la métrica MAPE (se debe usar keras en lugar de funciones matemáticas de numpy, porque tensores).

# example from https://github.com/AtrCheema/SeqMetrics/blob/master/SeqMetrics/_rgr.py
# Mean Absolute Percentage Error (MAPE)
# The MAPE is often used when the quantity to predict is known to remain way above zero_.
# It is useful when the size or size of a prediction variable is significant in evaluating the accuracy of a prediction_.
# It has advantages f scale-independency and interpretability.
# However, it has the significant disadvantage that it produces infinite or undefined values for zero or close-to-zero actual values_.
# .. _zero:
# https://doi.org/10.1016/j.neucom.2015.12.114 // Mean Absolute Percentage Error for regression models
# .. _prediction:
# https://doi.org/10.1088/1742-6596/930/1/012002 // Forecasting Error Calculation with Mean Absolute Deviation and Mean Absolute Percentage Error
# .. _values:
# https://doi.org/10.1016/j.ijforecast.2015.12.003 // A new metric of absolute percentage error for intermittent demand forecasts

from keras import backend as K
def MAPE_metric(y_true, y_pred):
    return (K.mean(K.abs((y_true - y_pred) / (y_true+1e-8)) * 100))

#define the model
model = Sequential()
model.add(Conv1D(filters=256, kernel_size=2,activation='relu',padding = 'same',input_shape=(120,1)))
model.add(MaxPooling1D(pool_size=2))
model.add(LSTM(100, return_sequences = True))
model.add(Dropout(0.3))
model.add(LSTM(100, return_sequences = False))
model.add(Dropout(0.3))
model.add(Dense(units=1, activation = 'sigmoid'))
model.compile(optimizer='adam', loss=MAPE_metric , metrics = [MAPE_metric])

cómo es su optimización

gráfico predictivo:


Sin embargo, el uso de MAPE en la optimización aquí también produjo un desplazamiento.

Quizás tengamos que considerar direcciones más complejas de optimizaciones en forma de productos de métricas.

El tema requiere una investigación detallada.

Обсуждение статьи "Использование ONNX-моделей в MQL5"
Обсуждение статьи "Использование ONNX-моделей в MQL5"
  • 2023.03.29
  • www.mql5.com
Опубликована статья Использование ONNX-моделей в MQL5 : Автор: MetaQuotes...
 
Quantum #:

Google para la mejor métrica de previsión muestra MAPE (Mean absolute percentage error)

Para utilizar explícitamente las métricas en la optimización de modelos keras, deben especificarse explícitamente como una función de pérdida, no como en #13.

La implementación de más de 100 métricas de regresión en Python se puede encontrar aquí (Criterio de Información de Akaike, distancia de Aitchison, R-cuadrado ajustado de Amemiya, Criterio de Predicción de Amemiya, Sesgo como y dado por Gupta, Criterio de Información Bayesiano, puntuación de Brier, coeficiente de correlación de Pearson, diferencia centrada de la media cuadrática (RMS), MSE descompuesto desarrollado por Kobayashi y Salam...).

Sin embargo, cuando se utilizó MAPE en el proceso de optimización, también se obtuvo aquí un desplazamiento.

Quizá tengamos que considerar direcciones más complejas de optimizaciones en forma de productos de métricas.

El tema requiere un estudio detallado.

En mi opinión, el problema no siempre está en la métrica, sino en la estructura de los datos seleccionados para la previsión; en este caso, se tomó el conjunto de muestras más "sencillo" para el ejemplo. Intente, por ejemplo, muestrear vectores a través del espacio de incrustación (tome muestras con un paso en el que desaparezca la autocorrelación de la serie) - obtendrá una previsión más parecida a la real - significa no sólo la ausencia de retardo tipo MA, sino también que a veces estará muy equivocada ;-).

Si pica y pega partes de la serie sin fondo de noticias, el resultado debería ser aceptable.

 
Stanislav Korotky #:

En mi opinión, el problema no está siempre en la métrica, sino en la estructura de los datos seleccionados para la previsión; en este caso, se tomó el conjunto de muestras más "sencillo" para el ejemplo. Pruebe, por ejemplo, a muestrear vectores a través del espacio de incrustación (tome muestras con un paso en el que desaparezca la autocorrelación de la serie) - obtendrá una previsión más parecida a la previsión real - esto significa no sólo la ausencia de retardo tipo MA, sino también que a veces estará muy equivocada ;-).

Esto requiere procesos de preprocesamiento de datos más complejos y un tratamiento aparte del tema. Parece que aquí depende mucho de la naturaleza de las relaciones entre los datos (los mercados tienen relaciones complejas).

Por lo que tengo entendido, si no hay información nueva (o su papel es insignificante en el sentido de las transformaciones lineales Procesamiento óptimo de señales, 1.4 Cancelación de correlaciones 1.5 Ortogonalización de Gram-Schmidt), la mejor previsión será el valor pasado (pero si se tiene en cuenta correctamente, no debería equivocarse mucho, aunque hay que experimentar).

Sobre las métricas ("direcciones" de optimización de los pesos de la red) creo que es necesario entender (para series temporales financieras), la cuestión requiere un artículo aparte.

Invitamos a todos a compartir su experiencia.

[Eliminado]  
Necesidad de tomar incrementos/log de incrementos. Deshacerse de la autocorrelación/ciclos/agrupación de volatilidad. Entonces la métrica estándar debería funcionar correctamente, pero el error aumentará en consecuencia.
 

Cualquier proyecto de aprendizaje automático consta de tres etapas

  • preprocesamiento (muchas cosas)
  • selección del modelo, entrenamiento, optimización, etc.
  • implementación

El uso de modelos ONNX en µl resuelve el problema de la implementación. Es cierto que no todos los modelos son fáciles.

El entrenamiento y la optimización de los modelos se resuelven mediante un proceso independiente en Python.

Pero de todo lo anterior, la primera etapa es la que más tiempo consume, la más creativa y la más importante. Y es imposible realizarla en µl. No consideramos el escalado primitivo como preprocesamiento. Y la sabiduría popular dice: "Basura dentro - basura fuera". Hay demasiadas cosas que desarrollar e implementar adicionalmente en la ACM para utilizar plenamente la MO sólo en la ACM. No se puede abarcar lo inmenso, sobre todo porque está en constante expansión.

Por lo tanto, para ejecutar un preproceso, o se hace en otro lenguaje (quien domine R/Python/Julia, etc.) o se intenta convertirlo a ONNX.

La ventaja de implementar ONNX hasta ahora es que aprenderemos a convertir, crear, simplificar y optimizar modelos ONNX. Puede ser útil en el futuro.