Приведение преобразованных данных в исходную форму после подгонки моей модели ARIMA для прогнозирования - PullRequest
0 голосов
/ 25 апреля 2020

Я сделал 5-летние прогнозы для своих данных временных рядов, используя модель ARIMA.

Мои данные изначально были нестационарными, поэтому я преобразовал данные, чтобы сделать их стационарными, используя:

ts_trans = np.sqrt(np.log(ts))

Здесь я взял журнал исходного временного ряда и далее взял квадрат root преобразования журнала.

Моя модель ARIMA для преобразованных данных:

from statsmodels.tsa.arima_model import ARIMA

model = ARIMA(ts_trans, order=(2, 1, 5))
results_ARIMA = model.fit(disp = -1)
fig, ax = plt.subplots(figsize = (10,6))
sb.lineplot(data = ts_trans, ax = ax)
sb.lineplot(data = results_ARIMA.fittedvalues, ax = ax, palette = ['red'])

Однако я есть сомнения в том, чтобы преобразовать преобразованные данные в исходную форму после подгонки порядка модели для прогнозирования.

Код, который я написал для этой цели:


predictions_ARIMA= pd.Series(results_ARIMA.fittedvalues, copy=True)
print(predictions_ARIMA.head())

predictions_ARIMA_cumsum = predictions_ARIMA.cumsum()
print(predictions_ARIMA_cumsum.head())

predictions_ARIMA_log = pd.Series(ts_trans.iloc[0], index=ts_trans.index)
predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_cumsum,fill_value=0)
print(predictions_ARIMA_log.head())

predictions_ARIMA = np.exp(predictions_ARIMA_log)
figure, ax = plt.subplots(figsize = (10,6))
sb.lineplot(data = ts_trans, ax = ax)
sb.lineplot(data = predictions_ARIMA, ax = ax, palette = ['red'])
error_rmse = (predictions_ARIMA-ts_trans['Sales']).dropna()
plt.title('RMSE: %.4f'% np.sqrt(sum((error_rmse)**2)/len(error_rmse)))

Является ли приведенный выше блок кода правильным для приведения преобразованных данных в исходную форму, или я должен изменить строку:

predictions_ARIMA = np.exp(predictions_ARIMA_log)

как

predictions_ARIMA = (np.exp(predictions_ARIMA_log))**2

для учета первоначального взятия квадрата root?

...