周五福利日活动是电信为回馈老用户而做的活动,其主要回馈老用户的方式是让用户免费领取对应的优惠券,意在提升老用户的忠诚度和活跃度。今日,为保证仓库备货优惠券资源充足,特别是5元话费券等,需要对该类优惠券领取效果进行预测,从而指导备货。经研究选用ARIMA算法建立预测模型,对5元话费券进行日领取量的短期预测。数据集收集了2019年1月到2019年2月5元话费券的日领取量数据,并根据此数据做时间序列分析并建立预测模型。

  1、进行数据的加载

from statsmodels.tsa.stattools import acf, pacf
import statsmodels.api as sm
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdimport scipy.stats as statsreceive=pd.read_excel(r'E:\Ering\data\HF_5.xlsx')

  2、进行一阶差分和检验一阶差分的效果

#设置一下时间索引并进行一阶差分
receive.index=pd.Index(pd.date_range('1/1/2019','31/3/2019',freq='1D'))
receive['number'].plot()
receive['number'].diff(1).plot() 

  利用自相关系数的白噪声检验差分效果

# 利用自相关系数的白噪声检验差分后的数据是否是平稳序列:
r,q,p=sm.tsa.acf(receive['number'].diff(1).iloc[1:92].values.squeeze(),qstat=True) #squeeze: 除去size为1的维度
mat=np.c_[range(1,41),r[1:],q,p] #np.c_是按行连接两个矩阵,把两矩阵左右相加,要求行数相等,类似pandas的merge()
table=pd.DataFrame(mat,columns=['lag','AC','Q','Prob(>Q)'])
LB_result=table.iloc[[5,11,17]]
LB_result.set_index('lag',inplace=True)
LB_result

  上图是自相关系数白噪声检验的结果,P值均大于0.05,表明白噪声检验不显著,所以数据经过一阶差分后平稳,故此知道一阶差分后所形成的序列是平稳序列。ARIMA算法的一个重要应用前提是保证算法入口的数据是平稳的。差分阶次对应ARIMA(p,d,q)中的d数值,因此本文中的d可以设置为1。

  3、确定系数p和q

# 利用BIC最小的模型作为识别的依据,确定参数p和参数q:
order_p,order_q,bic=[],[],[]
model_order=pd.DataFrame()
for p in range(4):for q in range(4):arma_model=sm.tsa.ARMA(receive['number'].diff(1).iloc[1:89].dropna(),(p,q)).fit()order_p.append(p)order_q.append(q)bic.append(arma_model.bic)print('The BIC of ARMA(%s,%s) is %s'%(p,q,arma_model.bic))model_order['p']=order_p
model_order['q']=order_q
model_order['BIC']=bic
P=list(model_order['p'][model_order['BIC']==model_order['BIC'].min()])
Q=list(model_order['q'][model_order['BIC']==model_order['BIC'].min()])
print('最好的模型是ARMA(%s,%s)' %(P[0],Q[0]))

  

  根据BIC法则确定可知,当p值和q值分别为1和0的时候,可以取到模型的效果最好。

  4、建立ARIMA预测模型

#建立ARIMA模型
model=sm.tsa.ARMA(receive['number'].diff(1).iloc[1:89].dropna(),(1,0)).fit(method='css') #使用最小二乘,‘mle’是极大似然估计
#画图比较一下预测值和真实观测值之间的关系
fig=plt.figure(figsize=(8,6))
ax=fig.add_subplot(111)
ax.plot(receive['number'].diff(1).iloc[1:89],color='blue',label='number')
ax.plot(model.fittedvalues,color='red',label='Predicted number')
plt.legend(loc='lower right')

  

  5、差分值转化为原始值

# 差分数据转化为原始值
def forecast(step,var,modelname):diff=list(modelname.predict(len(var)-1,len(var)-1+step,dynamic=True))prediction=[]prediction.append(var[len(var)-1])seq=[]seq.append(var[len(var)-1])seq.extend(diff)for i in range(step):v=prediction[i]+seq[i+1]prediction.append(v)prediction=pd.DataFrame({'Predicted number':prediction})return prediction[1:]  #第一个值是原序列最后一个值,故第二个值是预测值。
forecast(15,receive['number'][1:89],model)

  如图是4月1-5号的预测值。

  6、模型残差项的白噪声检验及正态性检验

# 模型残差项的白噪声检验:
resid=model.resid
r,q,p=sm.tsa.acf(resid.values.squeeze(),qstat=True)
mat_res=np.c_[range(1,41),r[1:],q,p] #np.c_是按行连接两个矩阵,把两矩阵左右相加,要求行数相等,类似pandas的merge()
table=pd.DataFrame(mat_res,columns=['to lag','AC','Q','Prob(>Q)'])
LB_result_res=table.iloc[[5,11,17,23]]
LB_result_res.set_index('to lag',inplace=True)
LB_result_res

  

  如果ARMA模型估计的好,应当使得估计值后的残差项是白噪声。上图是预测结果的残差的白噪声检验结果,分析可知Prob值均较大,查阅资料显示Prob值较大时,接受原假设-残差是白噪声Prob值接近于0时拒绝原假设;接近于1时接受原假设;Prob值为10%时,表示10%置信区间下通过。

  至此模型建立完毕。

转载于:https://www.cnblogs.com/HYLering/p/11194703.html

利用ARIMA算法建立短期预测模型相关推荐

  1. Math之ARIMA:基于statsmodels库利用ARIMA算法对太阳黑子年数据(来自美国国家海洋和大气管理局)实现回归预测(ADF检验+LB检验+DW检验+ACF/PACF图)案例

    Math之ARIMA:基于statsmodels库利用ARIMA算法对太阳黑子年数据(来自美国国家海洋和大气管理局)实现回归预测(ADF检验+LB检验+DW检验+ACF/PACF图)案例 目录

  2. Math之ARIMA:基于statsmodels库利用ARIMA算法(ADF检验+差分修正+ACF/PACF图)对上海最高气温实现回归预测案例

    Math之ARIMA:基于statsmodels库利用ARIMA算法(ADF检验+差分修正+ACF/PACF图)对上海最高气温实现回归预测案例 目录 基于statsmodels库利用ARIMA算法对上 ...

  3. 如何利用线性回归来建立收入预测模型?

    机器学习包含监督学习.非监督学习.以及强化学习三大部分.监督学习又分为分类和回归两大类.线性回归模型就属于监督学习里的回归模型.线性回归是通过属性的线性组合进行预测的函数,即 f(x)=w1.x1+w ...

  4. 「数据游戏」:使用 ARIMA 算法预测三日后招商银行收盘价

    作者:天琼,「数据游戏」优胜队伍成员 介绍 本文整理记录了参与的一次小型数据分析竞赛「数据游戏」,竞赛目标是预测2019年5月15日A股闭市时招商银行600036的股价. 主要思路是利用ARIMA算法 ...

  5. 【Python小竞赛】ARIMA算法预测三日后招商银行收盘价

    介绍 本文整理记录了参与的一次小型数据分析竞赛[数据游戏],竞争目标是预测2019年5月15日A股闭市时招商银行600036的股价. 主要思路是利用ARIMA算法做时间序列预测. 使用的数据是公开的数 ...

  6. ML之LiRLassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估

    ML之LiR&LassoR:利用boston房价数据集(PCA处理)采用线性回归和Lasso套索回归算法实现房价预测模型评估 目录 利用boston房价数据集(PCA处理)采用线性回归和Las ...

  7. 【8558】编写算法建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知存储空间)

    关注公众号程序猿从入门到入土查询更方便哦 编写算法建立的链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知存储空间) #include<bits/stdc++.h& ...

  8. 论文解析-基于图卷积神经网络的癌症基因预测模型,利用LRP算法增加模型可解释性

    论文解析:Integration of multiomics data with graph convolutional networks to identify new cancer genes a ...

  9. 利用WOE IV建立用户流失模型

    利用WOE & IV建立用户流失模型 现在流量红利越来越小,获新客的成本也越来越高,比如活动投资10万元,新客获客100个,获客成本就是100元/个,但是如果客单价平均50元,用户在整个生命周 ...

最新文章

  1. randperm--生成随机整数排列
  2. 5月29日阿里云开发者大会了解一下?
  3. 算法太多挑花眼?教你如何选择正确的机器学习算法
  4. C++ vector容器类型
  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action
  6. ATL WTL 实现分析(五)
  7. js 控制页面跳转的5种方法
  8. 自己动手,开发项目辅助工具
  9. 关于java中判断字符串相等==和equal 详解
  10. java 获取域名_Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
  11. asp获取计算机mac,ASP获取客户端MAC地址(源代码)
  12. 系统服务器iis如何启动不了,win7系统iis启动不了的详细解决步骤
  13. Mybatis Plus 3 oracle 自增序列
  14. 2018年什么编程语言最值得学习
  15. R7 7735HS参数 锐龙77735HS怎么样相当于什么水平级别
  16. vim 单行删除与多行删除
  17. 重启计算机按哪几个键,电脑键盘哪个键是重启键?
  18. 移动端测试=== adb 无线连接手机
  19. 为12306说几句好话
  20. 为什么当初很多人不看好的阿里云做起来了?

热门文章

  1. 连载 大学生求职七大昏招(六)说谎 5
  2. 华为云云速建站,助力企业搭建网站省心又省力
  3. chrome浏览器配置,地理位置模拟
  4. 5 仓储管理系统 运输端功能
  5. 巧用clang 的sanitize解决realloc,malloc,calloc失败
  6. (camtasia) 喀秋莎视频教程 素材
  7. java——百钱买百鸡
  8. 边缘保留滤波算法 EPF
  9. bim 水利枢纽 运维_BIM水坝工程技术案例:那棱格勒河水利枢纽工程BIM应用汇报...
  10. select下拉框默认选中selected属性不起作用的解决方法 ligerui