Python数据挖掘实用案例——自动售货机销售数据分析与应用(二)+https://developer.aliyun.com/article/1384980
2.平稳性检验
在使用ARIMA模型进行销售额预测之前,需要查看时间序列是否平稳,若数据非平稳,在数据分析挖掘的时候,则可能会产生“伪回归”等问题,从而影响分析结果。通过时间序列的时序图、自相关图及其单位根查看时间序列平稳性,时序图如图16所示,自相关图如图17所示,单位根检验结果如图18所示。
图16 原始序列的时序图
图17 原始序列的自相关图
图18 原始序列的单位根检验结果
由图16可知,时序图显示该序列具有明显的递增趋势,可以判断为原始序列数据是非平稳序列;图17的自相关图显示的自相关系数大部分均大于零,说明序列间具有一定的长期相关性。由图18可知,在单位根检验统计量中,p值为0.251134,其值显著大于0.05,可以推断出该序列为非平稳序列(非平稳序列一定不是白噪声序列)。
绘制时序图、自相关图并进行单位根检验如代码清单15所示。
代码清单15 绘制时序图、自相关图并进行单位根检验
# 平稳性检验 # 判断是否为时间序列 plt.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文标签 plt.rcParams['axes.unicode_minus'] = False # 显示负号 plt.figure(figsize=(8, 5)) plt.plot(data_w) plt.tick_params(labelsize=14) # 设置坐标轴字体大小 plt.show() # 定义绘制自相关图函数 def draw_acf(ts): plt.figure(facecolor='white', figsize=(10, 8)) plot_acf(ts) plt.show() # 定义单位根检验函数 def testStationarity(ts): dftest = ADF(ts) # 对ADF求得的值进行语义描述 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 return dfoutput # 自相关 draw_acf(data_w) # 单位根检验 print('单位根检验结果为:\n', testStationarity(data_w))
3.差分处理
在进行平稳性检验后,发现原始序列数据属于非平稳序列,而在使用ARIMA模型进行销售额预测时,需要序列数据是平稳序列,以避免序列中的随机游走形势影响预测结果。在Python中,可以通过二阶差分处理对数据进行平稳化操作,并查看二阶差分之后序列的平稳性和白噪声,其中二阶差分后序列的时序图如图19所示,二阶差分后序列的自相关图如图20所示,二阶差分后序列的单位根检验结果如图21所示,二阶差分后序列的白噪声检验结果如图22所示。
图19 二阶差分后序列的时序图
图20 二阶差分后序列的自相关图
图21 二阶差分后序列的单位根检验结果
图22 二阶差分后序列的白噪声检验结果
由图19可知,该序列无明显趋势,较为稳定;图20的自相关图显示自相关系数较为均匀,且较为接近于0,有较强的短期相关性。由图21可知,二阶差分后序列的单位根检验p值远小于0.05,可以判断出差分处理后的序列是平稳序列。由图22可知,在白噪声检验结果中,输出的p值小于0.05,同时结合单位根检验结果可以判断二阶差分之后的序列是平稳非白噪声序列。
差分处理并查看序列平稳性和白噪声如代码清单16所示。
代码清单16 差分处理并查看序列平稳性和白噪声
# 二阶差分处理 data_w_T1 = data_w.diff().dropna() data_w_T2 = data_w_T1.diff().dropna() # 差分后的时间序列图 plt.figure(figsize=(8, 5)) plt.plot(data_w_T2) plt.tick_params(labelsize=14) plt.show() # 差分自相关 draw_acf(data_w_T2) # 差分单位根检验 print('差分单位根检验结果为:\n', testStationarity(data_w_T2)) # 白噪声检验 print('差分白噪声检验结果为:\n', acorr_ljungbox(data_w_T2, lags=1))
4.模型定阶
通常情况下,在进行模型预测前,需要寻找最优模型,以提高预测结果的准确性。针对ARIMA模型,可以通过BIC矩阵进行模型定阶。由于4.4.3小节进行了二阶差分处理,所以d=2。通过计算ARIMA(p,2,q)中所有组合的BIC信息量,取最小BIC信息量所对应的模型阶数,进而确定p值和q值,结果如图23所示。
图23 模型定阶
由操作结果可知,当p值为0、q值为1时,BIC值最小,到此p、q定阶完成。
模型定阶如代码清单17所示。
代码清单17 模型定阶
# 通过BIC矩阵进行模型定阶 data_w = data_w.astype(float) pmax = 3 qmax = 3 bic_matrix = [] # 初始化BIC矩阵 for p in range(pmax+1): tmp = [] for q in range(qmax+1): try: tmp.append(ARIMA(data_w, (p, 2, q)).fit().bic) except: tmp.append(None) bic_matrix.append(tmp) bic_matrix = pd.DataFrame(bic_matrix) # 找出最小值位置 p, q = bic_matrix.stack().idxmin() print('当BIC最小时,p值和q值分别为: ', p, q)
5.模型预测
应用ARIMA(0, 2, 1)模型对未来4周内商品的销售额进行预测,结果如图24所示。
图24预测未来4周的销售额
预测未来4周内商品的销售额如代码清单18所示。
代码清单18 预测未来4周内商品的销售额
# 构建ARIMA(0, 2, 1)模型 model = ARIMA(data_w, (p, 2, q)).fit() # 预测未来4周的销售额 print('预测未来4周的销售额,其预测结果、标准误差、置信区间如下。\n', model.forecast(4))
注:利用ARIMA模型向前预测的周期越长,其误差越大。
八、推荐阅读
正版链接:京东安全
《Python数据挖掘:入门、进阶与实用案例分析》是一本以项目实战案例为驱动的数据挖掘著作,它能帮助完全没有Python编程基础和数据挖掘基础的读者快速掌握Python数据挖掘的技术、流程与方法。在写作方式上,与传统的“理论与实践结合”的入门书不同,它以数据挖掘领域的知名赛事“泰迪杯”数据挖掘挑战赛(已举办10届)和“泰迪杯”数据分析技能赛(已举办5届)(累计1500余所高校的10余万师生参赛)为依托,精选了11个经典赛题,将Python编程知识、数据挖掘知识和行业知识三者融合,让读者在实践中快速掌握电商、教育、交通、传媒、电力、旅游、制造等7大行业的数据挖掘方法。
本书不仅适用于零基础的读者自学,还适用于教师教学,为了帮助读者更加高效地掌握本书的内容,本书提供了以下10项附加价值:
(1)建模平台:提供一站式大数据挖掘建模平台,免配置,包含大量案例工程,边练边学,告别纸上谈兵
(2)视频讲解:提供不少于600分钟Python编程和数据挖掘相关教学视频,边看边学,快速收获经验值
(3)精选习题:精心挑选不少于60道数据挖掘练习题,并提供详细解答,边学边练,检查知识盲区
(4)作者答疑:学习过程中有任何问题,通过“树洞”小程序,纸书拍照,一键发给作者,边问边学,事半功倍
(5)数据文件:提供各个案例配套的数据文件,与工程实践结合,开箱即用,增强实操性
(6)程序代码:提供书中代码的电子文件及相关工具的安装包,代码导入平台即可运行,学习效果立竿见影
(7)教学课件:提供配套的PPT课件,使用本书作为教材的老师可以申请,节省备课时间
(8)模型服务:提供不少于10个数据挖掘模型,模型提供完整的案例实现过程,助力提升数据挖掘实践能力
(9)教学平台:泰迪科技为本书提供的附加资源提供一站式数据化教学平台,附有详细操作指南,边看边学边练,节省时间
(10)就业推荐:提供大量就业推荐机会,与1500+企业合作,包含华为、京东、美的等知名企业
通过学习本书,读者可以理解数据挖掘的原理,迅速掌握大数据技术的相关操作,为后续数据分析、数据挖掘、深度学习的实践及竞赛打下良好的技术基础。