首页技术文章正文

时间序列实战之销量预测【大数据培训】

更新时间:2022年12月22日 15时07分07秒 来源:黑马程序员

1. 大数据预测销量前置知识

什么是时间序列数据?

按时间顺序排列的一组随机变量X1,X2,…,Xt 表示一个随机事件的时间序列。

 

时间序列数据分析的目的是什么?

时间序列数据的分析目的是给定一个已被观测了的时间序列,预测该序列的未来值。

2. 代码实战
项目简介:

在生产和科学研究中,对某一个或者一组变量进行观察测量,将一系列时刻所得到的离散数字组成的序列集合,称之为时间序列。时间序列分析是根据系统观察得到的时间序列数据,通过曲线拟合和参数估计来建立数学模型的理论和方法。时间序列分析常用于国名宏观经济控制、市场潜力预测、气象预测、农作物害虫灾害预报等各个方面。本项目实战为时间序列ARIMA 算法建模进行销量预测。

数据集:

https://github.com/huang027/ARIMA/raw/master/arima_data.xls 下载

1566528435729_未标题-1.jpg


环境需求:
Anaconda3 +Pycharm + Scikitlearn + statsmodels + arima

运行结果:

1566528385456_未标题-2.jpg


实现代码:

时间序列建模基本步骤:

1.获取被观测系统时间序列数据;

2.观测是否为平稳时间序列;对于非平稳时间序列要先进阶差分运算,化为平稳时间序列

3.经过第二步处理,得到平稳时间序列数据.要对平稳时间序列分别求得其自相关系数ACF 和偏相关系数PACF,通过对自相关和偏相关图的分析,得到最佳的阶层p 和阶数q

4.由以上得到的参数用来进行训练,从而得到ARIMA 模型.然后开始对得到的模型进行检验

 

 

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf
from statsmodels.graphics.tsaplots import plot_pacf
from statsmodels.tsa.stattools import adfuller as ADF
filename='arima_data.xls'
forrecastnum=5
data=pd.read_excel(filename,index_col=u'日期')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data.plot()
plt.title('Time Series')
plt.show()
plot_acf(data)
plt.show()
print(u'原始序列的ADF 检验结果为:',ADF(data[u'销量']))
D_data=data.diff(periods=1).dropna()
D_data.columns=[u'销量差分']
D_data.plot()
plt.show()
plot_acf(D_data).show()
plot_pacf(D_data).show()
print(u'1 阶差分序列的ADF 检验结果为:',ADF(D_data[u'销量差
分']))
from statsmodels.stats.diagnostic import acorr_ljungbox
print(u'差分序列的白噪声检验结果为:
',acorr_ljungbox(D_data,lags=1))
from statsmodels.tsa.arima_model import ARIMA
data[u'销量'] = data[u'销量'].astype(float)
pmax=int(len(D_data)/10)
qmax=int(len(D_data)/10)
bic_matrix=[]
for p in range(pmax+1):
tmp=[]
for q in range(qmax+1):
try:
tmp.append(ARIMA(data,(p,1,q)).fit().bic)
except:
tmp.append(None)
bic_matrix.append(tmp)
bic_matrix=pd.DataFrame(bic_matrix)
print(bic_matrix)
p,q=bic_matrix.stack().idxmin()
print(u'bic 最小的P 值和q 值为:%s、%s'%(p,q))
model=ARIMA(data,(p,1,q)).fit()
model.summary2()
#预测最后5 天的数据
forecast,fcasterr,conf_int=model.forecast(5)
print("预测5 天的销量数据:",forecast)
print("预测的标准差:",fcasterr)
print("预测所处的置信区间:",conf_int)





黑马中级程序员课程


推荐了解热门学科

java培训Python人工智能Web前端培训PHP培训
智能机器人软件开发影视制作培训C++培训产品经理培训
UI设计培训新媒体培训产品经理培训Linux运维
大数据培训



以下是黑马程序员热门视频教程,欢迎学习关注!


Python入门教程完整版(懂中文就能学会)【点击】

零起点打开Java世界的大门【点击】
C++| 匠心之作 从0到1入门学编程【点击】

PHP|零基础入门开发者编程核心技术【点击】
Web前端入门教程_Web前端html+css+JavaScript【点击】

软件测试入门到精通【点击】

分享到:
在线咨询 我要报名
和我们在线交谈!