基于Python实现时间序列分析建模(ARIMA模型)项目实战

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: 基于Python实现时间序列分析建模(ARIMA模型)项目实战

说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。

image.png

image.png

1.项目背景

当今世界正处于一个数据信息时代,随着后续互联网的发展各行各业都会产生越来越多的数据,包括不限于商店、超市、便利店、餐厅等等那么这里面很多数据都是随着时间产生的,这就形成了时间序列数据,而且很多时间序列数据都是非平稳时间序列数据。目前对非平稳时间序列分析应用最多的模型就是ARIMA模型,本项目也是通过Python程序来进行数据探索性分析、数据预处理、构建ARIMA时序模型以及如何把模型预测的结果应用于日常的实际生活当中。

2.数据获取

本次建模数据来源于公司餐厅销售数据,其主要的数据基本统计概况如下:

数据项:2项(日期、销量),如下图所示

image.png

通过观察数据,发现一些空值和一些重复数据,后续章节进行处理。

3.数据预处理

真实数据中可能包含了大量的缺失值和噪音数据或人工录入错误导致有异常点存在,非常不利于算法模型的训练。数据清洗的结果是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计、数据挖掘等使用。数据预处理通常包含数据清洗、归约、聚合、转换、抽样等方式,数据预处理质量决定了后续数据分析挖掘及建模工作的精度和泛化价值。

3.1数据描述性统计与清洗 

(1)导入程序库:将所用到的程序库导入到Python程序中,如图所示。

image.png

(2)读取数据:使用Pandas库中read_excel方法读取Excel数据,并转为DataFrame类型。读取数据代码如图所示

image.png

(3)查看统计信息和空值,代码如下:

image.png

image.png

从上图可以看到,数据总数据量40条(不包括空值),以及未去除重复值的平均值、标准差、最小值、最大值、分位数。另外可以看到销量有2条空值。

(4)查看是否有重复数据以及清理重复数据,代码如下

image.png

image.png

从上图中的部分展示,可以看到是有重复数据,所以使用drop_duplicates()函数进行了重复数据清理。

(5)空值清理,本项目涉及2条空值数据 直接进行丢弃操作。空值的处理也可以用均值填充、分位数填充、拉格朗日插值填充等等(根据具体数据处理的需要进行即可)。代码如下:

image.png

(6)针对清洗后的数据进行统计分析,代码如下:

image.png

image.png

从上图可以看出,清洗后数据量为37条,平均值为3542.49、标准差为543.92

4.探索性数据分析

4.1数据分析

销量时间序列分析

image.png

关键代码如下:

image.png

 

5.构建ARIMA时序模型

5.1 ARIMA模型概念

在自然界中绝大部分序列都是非平稳的。因而非平稳时间序列的分析更普遍、更重要,创造出来的分析方法也更多。

非平稳时间序列的分析方法可以分为确定性因素分解的时序分析和随机时序分析两大类。

确定性因素分解的方法把所有序列的变化都归结为4个因素(长期趋势、季节变动、循环变动和随机波动)的综合影响,其中长期趋势和季节变动的规律性信息通常比较容易提取,而由随机因素导致的波动则非常难以确定和分析,对随机信息浪费严重会导致模型拟合精度不够理想。

随机时序分析法的发展就是为了弥补确定性因素分解方法的不足。根据时间序列的不同特点,随机时序分析可以建立的模型有ARIMA模型、残差自回归模型、季节模型、异方差模型等。

本项目重点介绍ARIMA模型对非平稳时间序列进行建模。

差分运算

(1) p阶差分

相距一期的两个序列值之间的减法运算称为1阶差分运算。

(2) k步差分

相距k期的两个序列值之间的减法运算称为k步差分运算。

差分运算具有强大的确定性信息提取能力,许多非平稳序列差分后会显示出平稳序列的性质,这时称这个非平稳序列为差分平稳序列。差分平稳序列可以使用ARMA模型进行拟合。ARIMA模型的实质就是差分运算与ARMA模型的组合。

5.2序列平稳性检验

image.png

图5.2-1 原始序列的时序图

此图显示该序列具有明显的单调递增趋势,可以判断为非平稳序列

image.png

图5.2-1 原始序列的自相关图

此图的自相关图显示自相关系数长期大于零,说明序列间具有很强的长期相关性

5.2-1 原始序列的单位根检验

adf

cValue

p值

1%

5%

10%

1.8138

-3.7112

-2.9812

-2.6301

0.9985

此表单位根检验统计量对应的p值显著大于0.05,最终将该序列判断为非平稳序列(非平稳序列一定不是白噪声序列)。 

5.3对原始序列进行一阶差分,并进行平稳性和白噪声检验

1)对一阶差分后的序列再次做平稳性判断。

image.png

5.3-1 一阶差分之后序列的时序图

image.png

5.3-2 一阶差分之后序列的自相关图

5.3-1 一阶差分之后序列的单位根检验

adf

cValue

p值

1%

5%

10%

-3.1561

-3.6327

-2.9485

-2.6130

0 0.0227

结果显示,一阶差分之后序列的时序图在均值附近比较平稳地波动、自相关图有很强的短期相关性、单位根检验p值小于0.05,所以一阶差分之后的序列是平稳序列。 

2)对一阶差分后的序列做白噪声检验

5.3-2 一阶差分之后序列的白噪声检验

stat

p值

11.3040

0.0007734

此表输出的p值远小于0.05,所以一阶差分之后的序列是平稳非白噪声序列。 

5.4对一阶差分后的序列拟合ARMA模型

下面进行模型定阶。模型定阶就是确定p和q。

第一种方法:人为识别,根据图5-25进行模型定阶。

image.png

图5.4-1 一阶差分后序列的偏自相关图

一阶差分后自相关图显示出1阶截尾,偏自相关图显示出拖尾性,所以可以考虑用MA(1)模型拟合1阶差分后的序列,即对原始序列建立ARIMA(0,1,1)模型。

第二种方法:相对最优模型识别。

计算ARMA(p,q) 当p和q均小于等于3的所有组合的BIC信息量,取其中BIC信息量达到最小的模型阶数。

计算完成BIC矩阵如下:

image.png

p值为0、q值为1时,最小BIC值为422.510082。p、q定阶完成。

AR(1)模型拟合一阶差分后的序列,即对原始序列建立ARIMA(0,1,1)模型。虽然两种方法建立的模型是一样的,但模型是非唯一的。ARIMA(1,1,0)和ARIMA(1,1,1)这两个模型也能通过检验。下面对一阶差分后的序列拟合AR(1)模型进行分析:

 

1) 参数检验和参数估计见表:

5.4-1 模型参数

Parameter

Coef.

Std.Err.

t

const

49.9561

20.1390

2.4806

ma.L1.D.销量

0.6710

0.1648

4.0712

 

2) 模型检验之残差检验: 

 

image.png

图5.4-2 残差自相关图

image.png

图5.4-3 残差偏自相关图

image.png

图5.4-4 残差偏自相关图

 

D-W检验

DW值显著的接近于0或4时,则存在自相关性,而接近于2时,则不存在(一阶)自相关性。

D-W检验的结果为:1.9735。因此,模型预测的残差不存在自相关性性,这说明拟合的模型预测效果很好。

残差序列的白噪声检验结果为:(array([0.00390439]), array([0.95017654])),可以看出p值为0.9502 P>0.05.说明原假设成立

5.5 ARIMA模型预测

应用ARIMA(0,1,1)对表某餐厅的销售数据做为期5天的预测,结果如下表所示

5.5-1 预测未来5天的销售额

 

2021/2/7

2021/2/8

2021/2/9

2021/2/10

2021/2/11

预测值

4874

4924

4974

5024

5074

预测误差

73.0857

142.3268

187.5428

223.8028

254.9571

需要说明的是,利用模型向前预测的时期越长,预测误差将会越大,这是时间预测的典型特点。

6.实际应用

通过上面的预测结果分析得到,此模型能够在误差允许的范围内进行预测未来的销量,可以将此模型应用于实际生产中,帮助企业更好地备货。

# 本次机器学习项目实战所需的资料,项目资源如下:
 
# 项目说明:
 
# 获取方式一:
 
# 项目实战合集导航:
 
https://docs.qq.com/sheet/DTVd0Y2NNQUlWcmd6?tab=BB08J2
 
# 获取方式二:
 
链接:https://pan.baidu.com/s/1fZoXTaJt1efesViuJTf4Kw 
提取码:tmf9
相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
6天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
24 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
8天前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
60 37
Python时间序列分析工具Aeon使用指南
|
4天前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
38 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
3天前
|
数据采集 缓存 API
python爬取Boss直聘,分析北京招聘市场
本文介绍了如何使用Python爬虫技术从Boss直聘平台上获取深圳地区的招聘数据,并进行数据分析,以帮助求职者更好地了解市场动态和职位需求。
|
1月前
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
80 15
|
1月前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
1月前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
1月前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
116 80
|
2月前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
161 59
|
22天前
|
Python
[oeasy]python055_python编程_容易出现的问题_函数名的重新赋值_print_int
本文介绍了Python编程中容易出现的问题,特别是函数名、类名和模块名的重新赋值。通过具体示例展示了将内建函数(如`print`、`int`、`max`)或模块名(如`os`)重新赋值为其他类型后,会导致原有功能失效。例如,将`print`赋值为整数后,无法再用其输出内容;将`int`赋值为整数后,无法再进行类型转换。重新赋值后,这些名称失去了原有的功能,可能导致程序错误。总结指出,已有的函数名、类名和模块名不适合覆盖赋新值,否则会失去原有功能。如果需要使用类似的变量名,建议采用其他命名方式以避免冲突。
39 14