Как прогнозировать дальнейшее с помощью модели LSTM?

#python #lstm #prediction

Вопрос:

У меня есть набор данных с датами и одной переменной продаж. Данные выглядят следующим образом: Набор данных

Я использую простую модель LSTM, чтобы сделать следующий прогноз из этого набора данных. Код такой:

 def create_dataset(dataset, look_back=6):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i look_back, 0])
    return numpy.array(dataX), numpy.array(dataY)
-------------------------------------------------------------------------
numpy.random.seed(7)

dataset = new_df.values
dataset = dataset.astype('float32')

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

train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
-------------------------------------------------------------------------
look_back = 6
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)

trainX = numpy.reshape(trainX, (trainX.shape[0], 1, trainX.shape[1]))
testX = numpy.reshape(testX, (testX.shape[0], 1, testX.shape[1]))
-------------------------------------------------------------------------
model = Sequential()
model.add(LSTM(2, input_shape=(1, look_back)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')

model.fit(trainX, trainY, epochs=60, batch_size=1, verbose=2)
-------------------------------------------------------------------------
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
 

Модель работает хорошо, я использую RMSE в качестве показателя, и он находится в диапазоне от 0,1 до 0,9, что для моего проекта приемлемо (на случай, если у кого-то есть какие-либо сомнения в том, насколько хорошо работает модель).

Что нужно для того, чтобы иметь возможность предсказать 2, 3, 4 или даже 5 шагов в будущее?

Комментарии:

1. Я думаю, вы могли бы изменить свои данные (удалить первое значение, добавить предсказанное значение в конце) и предсказать снова n раз. Один вопрос: не должны ли данные содержать набор данных[i обратная связь, 0] вместо набора данных[i, 0] ? может быть, я что-то неправильно понял.

2. Я попробую это сделать, удалю первое значение, увеличу все на единицу и добавлю предсказанное значение и снова спрогнозирую, верно? Спасибо, я не думал об этом в таком ключе.

3. хорошо, отлично. Проблема с вашими данными заключается в том, что та же информация содержится в DataX (первое значение). Итак, вы пытаетесь предсказать данный… не очень сложный/интересный.

4. Да, я совершенно упустил это из виду. Извините за многочисленные вопросы, но после изменения и увеличения RMSE, знаете ли вы, как я могу его уменьшить? Чтобы сделать прогнозы модели более точными?

5. Нетривиальный ответ. Некоторые идеи: добавьте больше данных, если у вас их больше, и попробуйте улучшить модель (например, с дополнительным слоем LSTM, как в towardsdatascience.com/… ), или используйте более совершенную модель, такую как трансформатор, как есть towardsdatascience.com/…