Предсказание временных рядов нейронными сетями на TensorFlow

В статье подробно рассмотрено как с помощью TensorFlow обучить нейронную сеть для прогнозирования временных рядов. Приведены примеры кода даны рекомендации по подготовке данных и оценке качества

Введение в предсказание временных рядов с помощью нейронных сетей в TensorFlow

Прогнозирование временных рядов — очень важная задача во многих областях, таких как финансы, метеорология, производство и другие. С помощью нейронных сетей можно с высокой точностью предсказывать будущие значения временного ряда на основе прошлых данных.

В этой статье мы рассмотрим, как обучить нейронную сеть для прогнозирования временных рядов в популярной библиотеке TensorFlow. Будут приведены конкретные примеры кода и пошаговые инструкции.

Подготовка данных

Для начала нужно подготовить данные — временной ряд, который мы будем прогнозировать. Это может быть ряд значений акций компании, температуры, объемов продаж и т.д. Ряд должен быть преобразован в формат, пригодный для обучения нейросети.

Например, если у нас есть CSV файл с дневными значениями температуры за несколько лет, мы можем загрузить его в Pandas dataframe и преобразовать в массив Numpy:

import pandas as pd
import numpy as np

df = pd.read_csv('temperature.csv', parse_dates=['date'])
data = df['temperature'].values

Затем мы разделяем данные на обучающую и тестовую выборки. Например, используем последние 30% данных для теста:

train_size = int(len(data) * 0.7)
train, test = data[0:train_size], data[train_size:] 

Создание и обучение модели

Теперь можно определить архитектуру нейронной сети. Для прогнозирования временных рядов часто используются рекуррентные нейронные сети (RNN) и сети LSTM.

Например, создадим простую модель LSTM в Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

model = Sequential()
model.add(LSTM(50, input_shape=(None, 1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

Обучим модель, предварительно преобразовав данные в формат для LSTM сетей — последовательности с размером окна в один день:

X_train = []
y_train = []

for i in range(50, len(train)):
  X_train.append(train[i-50:i, 0])
  y_train.append(train[i, 0])
  
X_train = np.array(X_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))

model.fit(X_train, y_train, epochs=100, batch_size=64)  

Мы обучили модель предсказывать следующее значение ряда на основе 50 предыдущих дней.

Прогнозирование и оценка точности

После обучения модели мы можем использовать ее для прогнозирования. С этой целью делаем прогноз на тестовой выборке:

X_test = []
y_test = test[50:]
    
for i in range(50, len(test)):
  X_test.append(test[i-50:i, 0])
    
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
 
predictions = model.predict(X_test)

Чтобы оценить качество прогноза, можно посчитать среднеквадратичную ошибку (RMSE) между предсказаниями и реальными значениями:

from sklearn.metrics import mean_squared_error
mse = mean_squared_error(y_test, predictions)
rmse = np.sqrt(mse)
print('RMSE: %.3f' % rmse)

Таким образом, используя нейронные сети, можно с высокой точностью строить прогнозы временных рядов в TensorFlow!

Часто задаваемые вопросы

Какие типы нейронных сетей лучше использовать для прогнозирования временных рядов?

Лучше всего подходят рекуррентные нейронные сети (RNN) и их разновидности — LSTM и GRU. Они учитывают последовательность данных во времени.

Как подготовить данные для обучения модели прогнозирования?

Данные нужно преобразовать в последовательности фиксированной длины. Каждая последовательность будет содержать несколько предыдущих значений, а следующее значение — прогноз.

Как оценить качество прогноза модели?

Для оценки качества используют различные метрики, например, среднеквадратичную ошибку (RMSE) между предсказанными и реальными значениями.

Оцените статью
Учеба легко