最近又有好些朋友来咨询掌柜关于使用ARIMA模型对时间序列进行预测的这篇博客 中遇到了一些问题,这里掌柜再次收集大家的问题来一一解答。
PS: 本博客假定大家已经具备ARIMA模型的基础知识!!!
问题汇总如下:
该篇博客先解决前面六个问题,
答:
一般需要遵循两点:
答:
首先思考一下,为何时序预测会出现负值?不同案例中可能存在多个客观因素干扰,但是大致会有这么几种情况:
那么如何处理这些负值? 一般来说,都会直接用0来替代负值。或许用numpy的absolute()函数也能处理。当然如果是第一种情况,建议换个模型来预测。
目前暂时想到这些办法,如果大家有更好的处理方式,欢迎评论区留言!谢谢。
第三和第四个问题都是同一个,所以一起回答。因为在经典模型那篇最后得到的是差分后的预测值,所以很多朋友在问如何获取原始时序的预测值?
答:
直接上代码(还是以经典模型那篇的示例数据来演示的)
#第六步:使用ARIMA模型进行未来10年预测
import warnings
warnings.filterwarnings('ignore', 'statsmodels.tsa.arima_model.ARMA',
FutureWarning)
warnings.filterwarnings('ignore', 'statsmodels.tsa.arima_model.ARIMA',
FutureWarning)
model = ARIMA(data,order=(7,0,0)) #导入ARIMA模型
result = model.fit()
#预测未来10年
pred = result.predict(start = 90, end = 99, dynamic = True)
#下面这句也可以
#pred = result.predict('1991', '2000')
pred
答:其实是需要的,只是当时的博客没有加入这段。
那么问题又来了,为何要做ADF检验? 或ADF检验的用处是什么?
当通过ADF检验计算,如何看ADF检验的结果?这里主要看p值:
Python中ADF检验的具体方法/代码:
from statsmodels.tsa.stattools import adfuller
def adf_test(timeseries):
print("Results of Dickey-Fuller Test:")
dftest = adfuller(timeseries, autolag="AIC")
dfoutput = pd.Series(
dftest[0:4],
index=[
"Test Statistic",
"p-value",
"#Lags Used",
"Number of Observations Used",
],
)
for key, value in dftest[4].items():
dfoutput["Critical Value (%s)" % key] = value
print(dfoutput)
答:
计算不同模型的AIC,最低的就是相对最优的时序模型。
剩余五个问题改天继续解答,如果大家还有疑问,可以继续评论区留言,谢谢。
PPS:
个人知识有限,也许文中存在理解错误,也欢迎大家捉虫!
参考资料:
Stationarity and detrending (ADF/KPSS)
negative-values-in-time-series-forecast
Unit root