2017-01-05 68 views
1

我可以用这种方式分解的时间序列数据 -如何残差转换为原始值的Python statsmodels

from statsmodels.tsa.seasonal import seasonal_decompose 
decomposition = seasonal_decompose(ts) 

trend = decomposition.trend 
seasonal = decomposition.seasonal 
residual = decomposition.resid 

我的问题是如何隐蔽这个剩余价值原值。这样我就可以使用它们来预测未来的价值。

回答

0

如果你正在做一个可加模型,你只需将趋势图,季节图和残差图加起来就可以回到原始值。最终的结果是你的原始数据,所以没有太多的价值来支持它。剩余部分是考虑到趋势和季节性影响后原始数据的剩余部分。这就像线性回归,其中预测值加上残差返回了因变量的实际结果。

0

我尝试添加原始趋势和季节性,但效果不佳。所以当我将预测结果与原始结果进行比较时,我只是用残差预测结果。

efrom statsmodels.tsa.seasonal import seasonal_decompose 

# trend, seasonality are separated out from data, and we can model the residuals 
decomposition = seasonal_decompose(ts_log) 
trend = decomposition.trend 
seasonal = decomposition.seasonal 
residual = decomposition.resid 

# AR model 
model = ARIMA(ts_log, order=(2, 1, 0)) 
results_AR = model.fit(disp=-1) 
plt.figure(figsize=(20,10)) 
plt.plot(ts_log_decompose) 
plt.plot(results_AR.fittedvalues, color='red') 
result = (results_AR.fittedvalues-ts_log_decompose)**2 
result.dropna(inplace=True) 
plt.title('Decompose RSS: %.4f'% sum(result)) 
plt.show() 

我试过AR,MA,ARIMA模型,发现AR模型的RSS最低。所以现在,我正在用AR模型进行预测。

predictions_AR = pd.Series(results_AR.fittedvalues, copy=True) 
print predictions_AR.head() 
plt.figure(figsize=(20,10)) 
plt.plot(series, color='red') 
plt.plot(predictions_ARIMA, color='green') 
result = (predictions_AR-residual)**2 
result.dropna(inplace=True) 
plt.title('RMSE: %.4f'% np.sqrt(sum(result)/len(series))) 
plt.show() 

它运作良好: enter image description here

如果你想检查我的所有代码:https://github.com/hanhanwu/Hanhan_Data_Science_Practice/blob/master/sequencial_analysis/try_LSTM.ipynb

只需向下滚动即可分解方法