时间序列分析python实践

时间序列分析python实践

题目

03年到19年第一季度分季度的数据,13年之前只有传统汽车的销量,13年之后是传统汽车+新能源汽车的销量,需要预测未来三期传统汽车的销量

分析过程

# 数据处理
df = pd.read_excel(r'D:\统计学python实践\时序数据.xlsx',index_col=0)
 # 将index的name取消
df.index.name = None 
df.reset_index(inplace=True)
df.drop(df.index[64], inplace=True)

 # # 把一个时间字符串解析为时间元组
start = datetime.datetime.strptime("2003-01", "%Y-%m") 
date_list = [start + relativedelta(months=x*3) for x in range(0, 64)]  # 从2003-01-01开始逐月增加组成list
df['index'] = date_list
df.set_index(['index'], inplace=True)

## 观察趋势
dta = np.array(df['传统汽车销量'], dtype=np.float)
# 生成时间序列并画图
dta = pd.Series(dta)
dta.index = df.index
# 趋势
dta.plot(figsize=(12, 8), title='Monthly Total Traditional Car')

在这里插入图片描述
图像显示传统汽车销量有明显的递增趋势,判断为非平稳的,再观察是否为季节性的

decomposition = seasonal_decompose(df['传统汽车销量'], freq=12)
fig = plt.figure()
fig = decomposition.plot()
fig.set_size_inches(15, 8)

在这里插入图片描述
可以看到有明显季节性波动,需要将数据平稳化,这里我用简单的二阶差分进行(这里可以配合季节性差分进行测试(shift(12) ),最终选择差分方式)

fig = plt.figure(figsize=(12, 8))
ax2 = fig.add_subplot(111)
diff2 = dta.diff(2)
diff2.plot(ax=ax2)

在这里插入图片描述
可以看到效果还可以。基础上还可以进行根检验:

sm.tsa.stattools.adfuller(diff2[2:]

寻找最优p,q值组合:

arma_mod70 = sm.tsa.ARMA(dta, (7, 0)).fit()
print(arma_mod70.aic, arma_mod70.bic, arma_mod70.hqic)
arma_mod30 = sm.tsa.ARMA(dta, (0, 1)).fit()
print(arma_mod30.aic, arma_mod30.bic, arma_mod30.hqic)
arma_mod80 = sm.tsa.ARMA(dta, (8, 0)).fit()
print(arma_mod80.aic, arma_mod80.bic, arma_mod80.hqic)

结果如下:
在这里插入图片描述
可以看出ARMA(8,0) 和ARMA(7,0) 是差不多的 ,这里选择两个对结果没有太大影响。

预测:

predict_dta = arma_mod80.predict('2019', '2021', dynamic=True)

print(predict_dta)

fig, ax = plt.subplots(figsize=(12, 8))

ax = dta.ix['2000':].plot(ax=ax)

fig = arma_mod80.plot_predict('2019', '2021', dynamic=True, ax=ax, plot_insample=False)

预测结果:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值