Прогнозируемые значения VAR - Python - Statsmodels - PullRequest
0 голосов
/ 07 апреля 2020

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

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

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

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

Итак, позволяет go до root задачи, преобразуя прогнозные значения 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]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...