Я внедряю авторегрессивную модель для прогнозирования временных рядов (я начинаю изучать временные ряды).
Используемые данные - загруженные 5-летние данные по ценам акций для одной компании из здесь .
Моя путаница связана с перекрестной проверкой. Я знаю о TimeSeriesSplit, и я использую то же самое. У меня нет отдельного набора тестов. Я только пытаюсь предсказать набор проверок для каждой итерации, чтобы увидеть, как работает модель.
folds = TimeSeriesSplit(n_splits=10)
for tr,tt in folds.split(CSCO):
model = AR(CSCO['Close']) #considering just one attribute- Close
model_fit = model.fit()
yhat = model_fit.predict(start=tt[0],end=tt[-1])
comparedf = pd.concat([yhat, CSCO['Close'][tt]], axis=1)
comparedf.columns=['Predicted','Actual']
comparedf.plot()
model.fit () is подгонка модели ко всем моим данным.
model_fit.predict предсказывает на части данных, на которых модель уже обучалась. Таким образом, даже относительно простая модель AR будет хорошо работать (как показано на рисунке). Но если я изменил код на:
folds = TimeSeriesSplit(n_splits=10)
for tr,tt in folds.split(CSCO):
traindata, testdata = CSCO['Close'].iloc[tr],CSCO['Close'].iloc[tt]
model = AR(traindata)
model_fit = model.fit()
yhat = model_fit.predict(start=tt[0],end=tt[-1])
comparedf = pd.concat([yhat, CSCO['Close'][tt]], axis=1)
Аргументы, которые принимает model_fit.predict, это только начальный и конечный индексы. Но я не уверен, как он может получить доступ к тестовым данным , так как модель подходила / тренировалась на traindata .
Также,
comparedf.columns=['Predicted','Actual']
comparedf.plot()
дает:
Прогнозируемые и фактические значения полностью относятся к разным часовым поясам. Я не мог понять, почему это происходит. Я не уверен, как делать прогнозы каждый раз на проверочном наборе во время обучения на тренировочном наборе.