Si la red neuronal LSTM puede hacer (predicción lineal) predicción de stock (interpretación de código)

          Recientemente, alguien me ha preguntado si LSTM puede hacer predicciones de acciones. Mucha gente escribe códigos para predecir acciones. ¿Por qué no hay una aplicación específica para comprar? Si el método LSTM puede hacer predicciones lineales precisas. Para la solución del problema de predicción LSTM, resumiré el pensamiento actual de algunos códigos en Internet a partir de la solución de problemas de predicción de existencias y predicción lineal (por ejemplo: predicción PM2.5, predicción de flujo de tráfico) (esto es solo algunas ideas personales. Deja un comentario)

Directorio

Problemas de previsión de existencias:

Problema de predicción lineal:

Resumen:


Problemas de previsión de existencias:

        Resumiendo el código actual para los problemas de predicción de stock, podemos encontrar que hay dos tipos de métodos de predicción para la predicción de stock (o dos problemas de predicción diferentes para usar LSTM para resolver). 

        Una es usar las características relevantes del precio de apertura, el volumen, etc. para predecir el precio de cierre (también llamado pronóstico de series temporales multivariadas). Los datos y los resultados del pronóstico se muestran en la figura:

              

           Este es el tipo de datos que busco en Internet, y también es el primer método y tipo de datos que comencé a aprender sobre la predicción de existencias de LSTM. El uso de características de alta dimensión para el pronóstico de existencias ciertamente tiene una alta precisión (en teoría), pero el método aún tiene errores precisos. En la actualidad, al resolver dichos conjuntos de datos para la predicción de precios de cierre, las personas a menudo usan dos métodos para construir variables de características de entrada y etiquetas de predicción. Para facilitar la comprensión de todos, he dibujado la forma de la siguiente figura: (por ejemplo, use tres días de datos para ir a Predecir el precio de cierre del cuarto día)

                                                                

                         

       El método anterior de construcción dinámica de características a menudo se denomina ventana deslizante. Es utilizar las características de los datos históricos para predecir la salida futura de la etiqueta. Por supuesto, este método solo puede predecir la salida de un día a través de datos históricos. Los códigos de forma comúnmente utilizados para construir este tipo de datos se pueden describir como:

def multivariate_data(dataset, target, start_index, end_index, history_size,target_size, step, single_step=False):
  data = []
  labels = []
  start_index = start_index + history_size
  if end_index is None:
    end_index = len(dataset) - target_size
  for i in range(start_index, end_index):
    indices = range(i-history_size, i, step)
    data.append(dataset[indices])
    if single_step:
      labels.append(target[i+target_size])
    else:
      labels.append(target[i:i+target_size])
  return np.array(data), np.array(labels)

      El otro es predecir linealmente la tendencia futura del precio en función del precio de cierre de la acción (también llamada pronóstico de series de tiempo univariadas). Por ejemplo, recolecté aleatoriamente un lote de datos y el estilo normalizado se muestra en la figura. En esta figura, dibujé cómo construir variables de características de entrada y etiquetas de predicción.

                                                                         

         Es decir, se usa una función para entrenar el modelo, y el modelo entrenado se usa nuevamente para hacer predicciones para el valor futuro. La construcción de esta característica también a menudo se construye utilizando el método de ventana deslizante, y su código de implementación es el siguiente:

def univariate_data(dataset, start_index, end_index, history_size, target_size):
  data = []
  labels = []
  start_index = start_index + history_size
  if end_index is None:
    end_index = len(dataset) - target_size
  for i in range(start_index, end_index):
    indices = range(i-history_size, i)
    data.append(np.reshape(dataset[indices], (history_size, 1)))
    labels.append(dataset[i+target_size])
  return np.array(data), np.array(labels)

       Los dos métodos anteriores para predecir las existencias solo usan algunos datos históricos para aprender a predecir un determinado día en el futuro, o se puede decir que predicen datos que se retrasan un día en el futuro. La estructura de los datos de entrada que ingresan a la red neuronal LSTM se muestra en la figura:

                                                 

               El resultado de la predicción real indica que la estructura debería ser así:

                                                 

              Hasta ahora, se han descrito los formularios de entrada construidos por los dos tipos de datos diferentes de predicciones de acciones que sé. A juzgar por el formulario de entrada de datos, el modelo entrenado tiene la capacidad de predecir los precios de las acciones, es decir, la red neuronal LSTM entrenada puede hacer predicciones lineales, pero ¿por qué todos tienen una precisión tan alta en la predicción de códigos? ¿No funciona en una aplicación real? Entiendo que el problema del precio de las acciones incluye la influencia de varios factores característicos, como factores políticos, factores del entorno del mercado, etc. Estas características son difíciles de reflejar con precisión en forma de vectores, por lo que el modelo que capacitamos no puede aplicarse. Otra razón puede ser que nuestro modelo entrenado basado en datos históricos de características limitadas tendrá el problema de sobreajustar datos históricos, lo que resulta en varias razones, como una aplicación inexacta.

Problema de predicción lineal:

     Basado en la discusión anterior de los problemas de pronóstico de existencias, no es difícil encontrar que el modelo de red LSTM puede predecir problemas lineales. Solo necesitamos usar el llamado método de ventana deslizante para construir características de entrada y salida.

      Sin embargo, cómo hacer predicciones multipunto, es decir, para poder predecir valores de datos por un período de tiempo basado en los datos de puntos dados, esto requiere que hagamos cambios en la estructura de características de entrada y la salida del modelo.

     Por ejemplo, la salida de la última capa se puede configurar de la siguiente forma: Basado en el problema de predicción multipunto (prediciendo datos por un período de tiempo en el futuro), describiré el código de implementación en aplicaciones específicas.

                                                     

multi_step_model.add(tf.keras.layers.Dense(72))

Resumen:

     Si está interesado en este tipo de problema de pronóstico, también puede reproducir el pronóstico de stock basado en mi discusión. Si hay un problema o error en mi comprensión anterior, puede agregar Q525894654 para críticas, corrección o discusión. Como sabemos, el mercado de valores es muy volátil e impredecible. Sin embargo, el uso de métodos de aprendizaje profundo para la predicción de precios ciertamente tiene un cierto potencial de uso. Por lo tanto, creemos que el modelo de algoritmo puede (no siempre) predecir correctamente los movimientos del precio de las acciones en lugar de valores específicos (es mejor hacer problemas de clasificación). Por lo tanto, supongo que en base a un modelo de serie de tiempo probabilístico (he visto a alguien presentar un modelo de serie de tiempo probabilístico antes). Quizás un método más metafísico sea más adecuado para la previsión de existencias.

Publicó 40 artículos originales · elogió 203 · 190,000 visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_40651515/article/details/105571639
Recomendado
Clasificación