В чем заключается ошибка? Python, tensorflow

Я написал код, который должен был предсказывать значения на следующие window_size дней после скачанных данных. После обучения я создал тестовый датасет (сначала прогнозируя одну точку, на основе скачанных 60 точек; потом брал уже 59 точек и 1 спрогнозированную и прогнозировал следующую точку...). В итоге после визуализации оказывается, что итоговые прогнозы в переменной prediction равно убывающие и не являются тем, что я изначально подразумевал.

import yfinance as yf
import numpy as np
import datetime
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM
import matplotlib.pyplot as plt

plt.style.use('fivethirtyeight')

# Временной промежуток
start = '2014-01-01'
end = '2023-01-01'

# Переменная прогноза
window_size = 60

# Скачивание данных
ticker = yf.Ticker('AAPL')
df = ticker.history(start = start, end = end)

# Создание датасета
data = df.filter(['Close'])
dataset = data.values

training_data_len = len(dataset) - window_size

scaler = MinMaxScaler(feature_range = (0, 1))
scaled_data = scaler.fit_transform(dataset)

# Создание тренировочный датасет
train_data = scaled_data
x_train, y_train = [], []

for i in range(training_data_len):
  x_train.append(train_data[i:i+window_size, 0])
  y_train.append(train_data[i+window_size, 0])

print(x_train[:100])
print(y_train[:100])
x_train, y_train = np.array(x_train), np.array(y_train)
x_train = np.reshape(x_train, (x_train.shape[0], x_train.shape[1], 1))

# Создать LSTM модель
model = Sequential()
model.add(LSTM(50, return_sequences = True, input_shape = (x_train.shape[1], 1)))
model.add(LSTM(50, return_sequences = False))
model.add(Dense(25))
model.add(Dense(1))

model.compile(optimizer = 'adam', loss = 'mean_squared_error')
model.fit(x_train, y_train, batch_size = 1, epochs = 1)

# Создание тестового датасета
test_data, predictions = scaled_data[training_data_len:, 0], []

for _ in range(window_size):
  _test = np.append(test_data[_:], predictions)

  pred_x = np.array([np.array(_test)])
  x_test = np.reshape(pred_x, (pred_x.shape[0], pred_x.shape[1], 1))

  predictions.append(model.predict(x_test))

prediction = [predictions[l][0][0] for l in range(len(predictions))]

# Визуализация
train = data[:training_data_len]
date_pred = end.split("-")

predict_date = datetime.date(int(date_pred[0]), int(date_pred[1]), int(date_pred[2]))
date_pred = [str(predict_date + datetime.timedelta(days = i)) for i in range(window_size)]

plt.title('Model')
plt.xlabel('Date')
plt.ylabel('Close Price USD ($)')
plt.plot(date_pred, prediction)
plt.show()

Также для удобства вот ссылка с этим же кодом на google colab: https://colab.research.google.com/drive/1kG87NSIqTZOGB_X3d_x8oQdyVAtKRa3D


Ответы (0 шт):