ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

时间序列分析实例

2022-03-02 12:31:47  阅读:263  来源: 互联网

标签:分析 plt ARIMA value 实例 Value 序列 output data


时间序列分析简介

可参考链接:
时间序列详解
时间序列针对不同曲线情况的预测方式
时间序列python实例
python建立时间序列分析
理解ACF 和PACF
ADF检验理解
ADF检验补充

实例

某段时间日活预测
历史数据为2022-01-13至2022-02-27的日活数据,大致画出曲线,该曲线不够平滑
历史数据
1、进行ADF检验

from statsmodels.tsa.stattools import adfuller  #adf检验
temp = np.array(data['日活'])
t = adfuller(temp)  # ADF检验
output=pd.DataFrame(index=['Test Statistic Value', "p-value", "Lags Used", "Number of Observations Used","Critical Value(1%)","Critical Value(5%)","Critical Value(10%)"],columns=['value'])
output['value']['Test Statistic Value'] = t[0]
output['value']['p-value'] = t[1]
output['value']['Lags Used'] = t[2]
output['value']['Number of Observations Used'] = t[3]
output['value']['Critical Value(1%)'] = t[4]['1%']
output['value']['Critical Value(5%)'] = t[4]['5%']
output['value']['Critical Value(10%)'] = t[4]['10%']
output

得到一下结果,p值较大,原假设为曲线为非平稳曲线,接受原假设,且t-statistic 为 -2.28747大于5%,此曲线非平稳
ADF检验具体参数见 时间序列分析之ADF检验
在这里插入图片描述
2、进行白噪声检验,曲线非白噪声

#白噪声检验,如果序列是白噪声,则没有研究意义,返回的是统计量和p值,原假设是有白噪声
from statsmodels.stats.diagnostic import acorr_ljungbox
print(acorr_ljungbox(data["日活"], lags=1)) 

3、对日活值进行一阶差分
画出差分处理后的曲线图并进行ADF检验,该差分曲线为平稳曲线
在这里插入图片描述
在这里插入图片描述
4、画出acf和pacf图来确定p、q值

AR模型对应p,根据偏自相关图的截尾位置确定p,ACF与PACF图的横轴均从0开始,如果PACF在2时还在置信区间以外,从3开始之后均在置信区间以内,则定p为2。MA模型对应q,根据自相关图的截尾位置确定q,确定方法同p

确定p、q皆为7。详细可见 ARIMA算法解析与Python实现

import statsmodels.api as sm     #acf,pacf图

fig = plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
fig = sm.graphics.tsa.plot_acf(data2,lags=18,ax=ax1)
ax2 = fig.add_subplot(212)
fig = sm.graphics.tsa.plot_pacf(data2,lags=18,ax=ax2)
plt.show()

在这里插入图片描述
5、建立ARIMA模型

注意日期要改为索引不然后面会报错
data = data.set_index(['日期'],drop=True)
data['日活'] = data['日活'].astype('float64')

from statsmodels.tsa.arima_model import ARIMA  
model=ARIMA(data,(7,1,7)).fit(method='css')  #ARIMA(data, (p, 1, q))

画出预测出来的差分和实际差分作比较

predictions_ARIMA_diff = pd.Series(model.fittedvalues, copy=True)
plt.figure(figsize=(10, 6))
plt.plot(data2,label = 'real')
plt.plot(predictions_ARIMA_diff,label = 'forecast')
plt.legend()
plt.show()

在这里插入图片描述
6、将预测值加到实际值上去预测后一天
这里注意差分值和实际值的匹配

predictions = [i + j for i, j in zip(list(predictions_ARIMA_diff), list(data["日活"][7:45]))]
prediction_sales = pd.DataFrame(data=predictions,index=data.index[8:46],columns=['差分'])

plt.figure(figsize=(10, 6))
plt.plot(prediction_sales,label="forecast")
plt.plot(data,label="real")
plt.xlabel('日期',fontsize=12,verticalalignment='top')
plt.ylabel('销量',fontsize=14,horizontalalignment='center')
plt.legend()
plt.show()

在这里插入图片描述
对后续进行预测
返回预测结果, 标准误差, 和置信区间

pridict = list(model.forecast(5)[0])

在这里插入图片描述

标签:分析,plt,ARIMA,value,实例,Value,序列,output,data
来源: https://blog.csdn.net/wazmen/article/details/123226358

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有