инвертировать log / diff преобразование для построения графиков - PullRequest
0 голосов
/ 23 октября 2018

tl-dr;

for app in endog:
    min_nonzero = series[series[app] > 0].min()[0]
    series.loc[series[app] == 0, app] = min_nonzero
    series[app + '_log_diff'] = np.log(series[app]).diff()

series = series.replace([np.inf, -np.inf], np.nan).dropna()    

как инвертировать это для черчения?

полный текст

У меня проблемы с инвертированием транспонирования лога для удаления стационарности,Вот транспонирование:

series = u[columns].copy()

endogdiffs = []
for app in endog:
    min_nonzero = series[series[app] > 0].min()[0]
    series.loc[series[app] == 0, app] = min_nonzero
    series[app + '_log'] = np.log(series[app])
    series[app + '_log_diff'] = series[app + '_log'].diff()
    endogdiffs.append(app + '_log_diff')

series = series.replace([np.inf, -np.inf], np.nan).dropna()    

Итак, я моделирую app_log_diff .Моя серия разбита на группы по обучению и тестированию, и прогнозы загружаются обратно в DF с именем y .

Как я понимаю, .diff ()инвертировано .cumsum ().это дает мне логи..log () инвертируется .exp ()

При выводе, я думаю, я должен построить график следующим образом:

построить вывод

for i, app in enumerate(endog):
    plt.plot(np.exp(train[app + '_log_diff'].append(y[app + '_log_diff']).cumsum()), color=[(i/10)+0.5, (i/10)+0.5, (i/10)+0.5])
    plt.plot(np.exp(train[app + '_log_diff'].append(test[app + '_log_diff']).cumsum()), color=appColors[i])

Но - мойначальные значения (все они, а не только эндогенные) находятся в диапазоне 0-1.Мои выходные значения составляют около 1-50 или около 60 для y-предсказаний.

enter image description here

Как инвертировать преобразование?

подробности в разделе прогноза:

обучаем и запускаем модель

train, test = series[:size], series[size:size+(28*4*24)]

train = train.loc[:, (train != train.iloc[0]).any()] # https://stackoverflow.com/questions/20209600/panda-dataframe-remove-constant-column
test = test.loc[:, (test != test.iloc[0]).any()]
#print(train.var(), X.info())

# train autoregression
model = VARMAX(train[endogdiffs], exog=train[exog])

model_fit = model.fit(model='cg')
#print(model_fit.mle_retvals)

model_fit.plot_diagnostics()

##window = model_fit.k_ar
coef = model_fit.params

predictions = pd.DataFrame()
predictions = model_fit.forecast(steps=len(test), exog=test[exog])
y = predictions.copy()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...