Прогнозируемые значения VAR - Python - Statsmodels

Я использую учебник по векторным авторегрессиям на сайте statsmodels.org. В руководстве не рассматривается, как преобразовать обратно спрогнозированные значенияnp.log(mdata).diff(). Вопрос в том, как преобразовать обратно прогнозируемые значения, а не исходные значения на тестовом наборе. Я думаю, что иногда об этом плохо сообщают...

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

inverted(ts) = differenced(ts) + observation(ts-1)

reverted(ts) = pred_df.cumsum() + X_test

Итак, перейдем к корню проблемы, преобразовав прогнозные значения np.log(mdata).diff(), а не значения тестового набора.

import numpy as np
import pandas
import statsmodels.api as sm
from statsmodels.tsa.api import VAR

mdata = sm.datasets.macrodata.load_pandas().data
mdata = mdata[['realgdp','realcons','realinv']]
mdata.tail(2)

realgdp realcons    realinv
201 12901.504   9189.0  1456.678
202 12990.341   9256.0  1486.398

Нам нужно нормализовать и вычесть тренд, вычитая предыдущее значение из каждого значения в серии, что является разностью первого порядка. Чтобы не усложнять задачу, мы сделаем дифференцирование первого порядка.

mdata = np.log(mdata).diff().dropna()

# Create VAR model
model = VAR(mdata)
model_results = model.fit(2)

Возврат значений прогноза.

print(model_results.forecast(model_results.y, 5)) 
[[ 0.00502587  0.0053712   0.0051154 ]
 [ 0.00593683  0.00784779 -0.00302473]
 [ 0.00662889  0.00764349  0.00393308]
 [ 0.00731516  0.00797044  0.00657495]
 [ 0.00732726  0.00808811  0.00649793]]

Эти значения необходимо преобразовать с помощью np.exp.

print(np.exp(model_results.forecast(model_results.y, 5)))
[[1.00503852 1.00538565 1.0051285 ]
 [1.00595449 1.00787867 0.99697984]
 [1.00665091 1.00767278 1.00394083]
 [1.00734198 1.00800229 1.00659661]
 [1.00735417 1.00812091 1.00651908]]

Они не близки к исходным значениям (которые находятся в диапазоне 10000 с), поэтому мне нужно отменить diff() в np.log(mdata).diff() в прогнозных значениях с использованием cumsum()

print(np.exp(model_results.forecast(model_results.y, 5)).cumsum())
[ 1.00503852  2.01042417  3.01555267  4.02150716  5.02938582  6.02636567
  7.03301658  8.04068935  9.04463018 10.05197216 11.05997445 12.06657106
 13.07392524 14.08204615 15.08856523]

Почему прогнозируемые значения неправильно масштабируются?

0 ответов

Другие вопросы по тегам