TensorFlow / Python: Predicción de Series Temporales con Redes Neuronales Recurrentes (RNN)

La «predicción de series temporales» se refiere a la tarea de prever valores futuros en una secuencia de datos organizada en función del tiempo. En otras palabras, implica hacer estimaciones o pronósticos sobre cómo evolucionarán los datos en el futuro, basándose en patrones y tendencias observadas en el pasado.

Estos modelos pueden ser muy efectivos para tareas como predecir valores futuros en el mercado de valores, el clima, la demanda de productos, predicción del tráfico y mucho más.

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt

# Datos de ejemplo: serie temporal univariada (ajusta esto con tus datos)
series_temporales = np.sin(0.1 * np.arange(200)) + np.random.randn(200) * 0.1

# Función para crear secuencias de datos y sus etiquetas
def create_sequences(data, window_size):
    sequences = []
    labels = []
    for i in range(len(data) - window_size):
        sequences.append(data[i:i+window_size])
        labels.append(data[i+window_size])
    return np.array(sequences), np.array(labels)

# Dividir los datos en conjuntos de entrenamiento y prueba
window_size = 10
X, y = create_sequences(series_temporales, window_size)
split = int(0.8 * len(X))
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]

# Crear el modelo de la RNN
model = tf.keras.Sequential([
    tf.keras.layers.SimpleRNN(32, input_shape=(window_size, 1)),
    tf.keras.layers.Dense(1)
])

# Compilar el modelo
model.compile(optimizer='adam', loss='mse')  # Mean Squared Error

# Entrenar el modelo
model.fit(X_train, y_train, epochs=50, verbose=0)

# Evaluar el modelo
test_loss = model.evaluate(X_test, y_test)
print(f'Pérdida en el conjunto de prueba: {test_loss:.4f}')

# Predecir valores futuros
future = 50  # Número de puntos en el futuro para predecir
last_sequence = X[-1]  # Última secuencia de la serie temporal
predicted = []

for _ in range(future):
    next_value = model.predict(last_sequence.reshape(1, window_size, 1))
    predicted.append(next_value[0, 0])
    last_sequence = np.roll(last_sequence, shift=-1)
    last_sequence[-1] = next_value[0, 0]

# Visualizar la serie temporal original y las predicciones
plt.plot(np.arange(len(series_temporales)), series_temporales, label='Serie Temporal Original')
plt.plot(np.arange(len(series_temporales), len(series_temporales) + future), predicted, label='Predicciones Futuras')
plt.legend()
plt.show()

Explicación del código:

  1. Generación de Datos de Serie Temporal:
    • En el código, se crea una serie temporal univariada de ejemplo. Esta serie temporal se genera como una función seno con ruido aleatorio. Puedes modificar esta parte del código para utilizar tus propios datos de serie temporal. La serie temporal de ejemplo se almacena en la variable series_temporales.
  2. Creación de Secuencias y Etiquetas:
    • Para entrenar una RNN, es necesario crear secuencias de datos junto con sus etiquetas correspondientes. El código define una función llamada create_sequences que toma la serie temporal y una ventana deslizante y crea secuencias de datos (ventanas) junto con las etiquetas correspondientes. Estas secuencias y etiquetas se almacenan en las variables X y y.
  3. División de Datos en Conjuntos de Entrenamiento y Prueba:
    • Luego, el código divide los datos en conjuntos de entrenamiento (X_train y y_train) y prueba (X_test y y_test) para poder evaluar el modelo de manera efectiva. En este ejemplo, se utiliza el 80% de los datos como entrenamiento y el 20% restante como prueba.
  4. Construcción del Modelo RNN:
    • El modelo de RNN se construye utilizando la biblioteca Keras de TensorFlow. En este caso, se utiliza un modelo secuencial de Keras. El modelo consta de una capa RNN (una capa SimpleRNN) y una capa de salida densa. La capa RNN se utiliza para aprender patrones temporales en los datos. El número de unidades en la capa RNN se establece en 32.
  5. Compilación del Modelo:
    • El modelo se compila configurando el optimizador y la función de pérdida. En este ejemplo, se utiliza el optimizador ‘adam’ y la función de pérdida ‘mse’ (Mean Squared Error), que es comúnmente utilizada en problemas de regresión. El modelo se compila para minimizar la pérdida cuadrática media entre las predicciones y las etiquetas reales.
  6. Entrenamiento del Modelo:
    • El modelo se entrena en los datos de entrenamiento (X_train y y_train) durante un número específico de épocas (en este caso, 50). Durante el entrenamiento, el modelo ajusta sus pesos para aprender los patrones de la serie temporal.
  7. Evaluación del Modelo:
    • Después del entrenamiento, el modelo se evalúa en el conjunto de prueba (X_test y y_test) para medir su capacidad para hacer predicciones precisas. La pérdida en el conjunto de prueba se calcula y se muestra en la consola.
  8. Predicción de Valores Futuros:
    • Finalmente, el modelo se utiliza para hacer predicciones de valores futuros en la serie temporal. El código predice los próximos valores en la serie y los almacena en la variable predicted. Estas predicciones se generan a partir de la última secuencia de datos en la serie temporal.
  9. Visualización de Resultados:
    • Para visualizar los resultados, el código utiliza Matplotlib. La serie temporal original y las predicciones se trazan en un gráfico para permitir una comparación visual. Esto muestra cómo el modelo se desempeña en la tarea de predecir valores futuros en la serie temporal.

56 thoughts on “TensorFlow / Python: Predicción de Series Temporales con Redes Neuronales Recurrentes (RNN)

  1. I just wanted to say that your article is remarkable. The clarity and depth of your knowledge are truly refreshing. May I subscribe to keep up with your future posts? Keep up the fantastic work!

  2. Its like you read my mind You appear to know so much about this like you wrote the book in it or something I think that you can do with a few pics to drive the message home a little bit but other than that this is fantastic blog A great read Ill certainly be back

  3. Real Estate naturally like your web site however you need to take a look at the spelling on several of your posts. A number of them are rife with spelling problems and I find it very bothersome to tell the truth on the other hand I will surely come again again.

  4. Obrigado, estou procurando informações sobre esse tópico há algum tempo e a sua é a melhor que descobri até agora. Mas e em relação aos resultados financeiros? Você tem certeza sobre o fornecimento

  5. olá, gosto muito da sua escrita, tanto que mantemos uma correspondência extra sobre sua postagem na AOL. Preciso de um especialista neste espaço para desvendar meu problema. Talvez seja você. Estou ansioso para vê-lo

  6. Excellent blog here Also your website loads up very fast What web host are you using Can I get your affiliate link to your host I wish my web site loaded up as quickly as yours lol

  7. I loved as much as youll receive carried out right here The sketch is tasteful your authored material stylish nonetheless you command get bought an nervousness over that you wish be delivering the following unwell unquestionably come more formerly again since exactly the same nearly a lot often inside case you shield this hike

  8. I loved as much as youll receive carried out right here The sketch is attractive your authored material stylish nonetheless you command get bought an nervousness over that you wish be delivering the following unwell unquestionably come more formerly again as exactly the same nearly a lot often inside case you shield this hike

  9. helloI like your writing very so much proportion we keep up a correspondence extra approximately your post on AOL I need an expert in this space to unravel my problem May be that is you Taking a look forward to see you

  10. My brother was absolutely right when he suggested that I would like this website. You have no idea how much time I spent looking for this information, but this post made my day.

  11. Attractive section of content I just stumbled upon your blog and in accession capital to assert that I get actually enjoyed account your blog posts Anyway I will be subscribing to your augment and even I achievement you access consistently fast

  12. Recently I found this great website, they create engaging content for their audience. The site owner excels at informing customers. I’m excited and hope they keep up their magnificent skills.

  13. Just wish to say your article is as surprising The clearness in your post is just cool and i could assume youre an expert on this subject Fine with your permission allow me to grab your RSS feed to keep updated with forthcoming post Thanks a million and please keep up the enjoyable work

  14. Just wish to say your article is as surprising The clearness in your post is just cool and i could assume youre an expert on this subject Fine with your permission allow me to grab your RSS feed to keep updated with forthcoming post Thanks a million and please keep up the enjoyable work

  15. I loved as much as you will receive carried out right here The sketch is tasteful your authored subject matter stylish nonetheless you command get got an edginess over that you wish be delivering the following unwell unquestionably come further formerly again as exactly the same nearly very often inside case you shield this hike

  16. Magnificent beat I would like to apprentice while you amend your site how can i subscribe for a blog web site The account helped me a acceptable deal I had been a little bit acquainted of this your broadcast offered bright clear idea

  17. I simply had to leave your website before saying how much I appreciated the regular information you provided for your users. I will definitely be back frequently to see what new posts have been made.

  18. I loved as much as you will receive carried out right here The sketch is tasteful your authored subject matter stylish nonetheless you command get got an edginess over that you wish be delivering the following unwell unquestionably come further formerly again as exactly the same nearly very often inside case you shield this hike

Deja un comentario