Pandas处理时间序列之预测

news2024/10/12 17:47:43
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
from matplotlib.pylab import rcParams
rcParams['figure.figsize'] = 15, 6

一、移动平均过程(MA)

移动平均过程(Moving Average process)是一种常见的时间序列模型,用于描述时间序列数据中的平稳随机变动。在移动平均过程中,当前时刻的观测值被认为是过去几个时刻的随机干扰项的加权和,因此它主要用于对数据中的短期波动进行建模。
移动平均过程模型可表示为:

示例如下:

#读取文件
air_passengers = pd.read_csv("/home/mw/input/demo2813/AirPassengers.csv", header = 0, parse_dates = [0], names = ['Month', 'Passengers'], index_col = 0)


#对原始乘客数量数据进行对数转换,并输出转换后的数据中索引为1到9的部分
log_air_passengers = np.log(air_passengers.Passengers)
log_air_passengers[1:10]

'''
Month
1949-02-01    4.770685
1949-03-01    4.882802
1949-04-01    4.859812
1949-05-01    4.795791
1949-06-01    4.905275
1949-07-01    4.997212
1949-08-01    4.997212
1949-09-01    4.912655
1949-10-01    4.779123
Name: Passengers, dtype: float64
'''


# 对时间序列数据进行差分,以便进行季节性调整或去除趋势
log_air_passengers_diff = log_air_passengers - log_air_passengers.shift()


# 对数乘客数量差分数据中删除缺失值,并输出删除缺失值后的数据中索引为1到9的部分
log_air_passengers_diff.dropna(inplace=True)
log_air_passengers_diff[1:10]

'''
Month
1949-03-01    0.112117
1949-04-01   -0.022990
1949-05-01   -0.064022
1949-06-01    0.109484
1949-07-01    0.091937
1949-08-01    0.000000
1949-09-01   -0.084557
1949-10-01   -0.133531
1949-11-01   -0.134733
Name: Passengers, dtype: float64
'''

二、自回归过程(AR)

自回归过程(Autoregressive process)是一种常见的时间序列模型,用于描述时间序列数据中的自相关性。在自回归过程中,当前时刻的观测值被认为是过去几个时刻的观测值的线性组合,因此它主要用于对数据中的长期趋势和自相关性进行建模。
自回归过程模型可表示为:

示例如下:

三、ARIMA模型

定义

ARIMA 模型是一种常用的时间序列分析和预测方法,它结合了自回归(AR)模型、差分(I)和移动平均(MA)模型的特性。ARIMA 模型适用于具有一定程度的趋势和季节性的时间序列数据。

基本思想

ARIMA 模型的基本思想是,通过差分操作使非平稳时间序列变成平稳序列,然后应用自回归和移动平均模型来拟合数据。通过调整 AR、I 和 MA 的阶数,可以有效地捕捉数据中的趋势和季节性,并进行有效的预测。

建模步骤

ARIMA 模型的建模过程通常包括以下步骤:
1.确定时间序列的平稳性:通过观察时间序列图和自相关图等方法来确定是否需要进行差分操作使时间序列平稳化。
2.确定 ARIMA 模型的参数:通过观察自相关图和偏自相关图来确定 AR 和 MA 的阶数,以及可能需要的差分次数。
3.拟合 ARIMA 模型:使用确定的参数对 ARIMA 模型进行拟合,并对模型进行评估。
4.预测未来值:利用拟合好的 ARIMA 模型进行未来值的预测。

注意:
1.自回归项的数量 (p)
2.移动平均项数 (q)
3.所采用的差异数

在使用ARIMA模型时,经常会用到自相关函数(ACF)和偏自相关函数(PACF)来帮助确定模型的参数。

# 计算对数乘客数量差分数据的自相关函数(ACF)和偏自相关函数(PACF)
from statsmodels.tsa.stattools import acf, pacf
lag_acf = acf(log_air_passengers_diff.values, nlags = 20)
lag_pacf = pacf(log_air_passengers_diff.values, nlags = 20)

注意查看图首次越过置信区间上限的位置

plt.subplot(121) 
plt.plot(lag_acf)
plt.axhline(y=0,linestyle='--')
plt.axhline(y=-1.96/np.sqrt(len(log_air_passengers_diff)),linestyle='--')
plt.axhline(y=1.96/np.sqrt(len(log_air_passengers_diff)),linestyle='--')

# 绘制 ACF 函数的图表,并在图表中添加参考线以及置信区间的边界线
plt.subplot(121) 
plt.plot(lag_pacf)
plt.axhline(y=0,linestyle='--')
plt.axhline(y=-1.96/np.sqrt(len(log_air_passengers_diff)),linestyle='--')
plt.axhline(y=1.96/np.sqrt(len(log_air_passengers_diff)),linestyle='--')

注意查看图首次越过置信区间上限的位置

from statsmodels.tsa.arima_model import ARIMA


# 拟合 ARIMA 模型到时间序列数据上,并将原始数据的差分值与模型拟合值进行可视化比较,并计算残差平方和作为模型拟合的评估指标
model = ARIMA(log_air_passengers, order=(2, 1, 0))  # 创建 ARIMA 模型对象
results_AR = model.fit(disp=-1)  # 使用 fit 方法拟合 ARIMA 模型到时间序列数据上,并将拟合结果存储在 results_AR 变量中
plt.plot(log_air_passengers_diff)  # 绘制原始时间序列数据的差分数据
plt.plot(results_AR.fittedvalues, color='red')  #绘制 ARIMA 模型拟合后的值
plt.title('RSS: %.4f'% sum((results_AR.fittedvalues-log_air_passengers_diff)**2)) # 计算残差平方和,将其显示在标题中

'''
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:191: FutureWarning: Creating a DatetimeIndex by passing range endpoints is deprecated.  Use `pandas.date_range` instead.
  start=index[0], end=index[-1], freq=freq)
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
/opt/conda/lib/python3.6/site-packages/pandas/plotting/_converter.py:129: FutureWarning: Using an implicitly registered datetime converter for a matplotlib plotting method. The converter was registered by pandas on import. Future versions of pandas will require you to explicitly register matplotlib converters.

To register the converters:
	>>> from pandas.plotting import register_matplotlib_converters
	>>> register_matplotlib_converters()
  warnings.warn(msg, FutureWarning)
Text(0.5, 1.0, 'RSS: 1.5023')
'''

# 拟合 ARIMA 模型到时间序列数据上,并将原始数据的差分值与模型拟合值进行可视化比较,并计算残差平方和作为模型拟合的评估指标
model = ARIMA(log_air_passengers, order=(0, 1, 2))  # 调整参数
results_MA = model.fit(disp=-1)  
plt.plot(log_air_passengers_diff)
plt.plot(results_MA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_MA.fittedvalues-log_air_passengers_diff)**2))

'''
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
Text(0.5, 1.0, 'RSS: 1.4721')
'''

model = ARIMA(log_air_passengers, order=(2, 1, 2))  #调整参数
results_ARIMA = model.fit(disp=-1)  
plt.plot(log_air_passengers_diff)
plt.plot(results_ARIMA.fittedvalues, color='red')
plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvalues-log_air_passengers_diff)**2))

'''
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
/opt/conda/lib/python3.6/site-packages/statsmodels/tsa/base/tsa_model.py:171: ValueWarning: No frequency information was provided, so inferred frequency MS will be used.
  % freq, ValueWarning)
Text(0.5, 1.0, 'RSS: 1.0292')

'''

# 获取 ARIMA 模型在训练数据上的预测结果
predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True)
print(predictions_ARIMA_diff.head())

'''
Month
1949-02-01    0.009580
1949-03-01    0.017491
1949-04-01    0.027670
1949-05-01   -0.004521
1949-06-01   -0.023890
dtype: float64
'''


# 将 ARIMA 模型的拟合值进行累积求和,以便更好地理解模型对时间序列数据的整体预测效果
predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum()
print(predictions_ARIMA_diff_cumsum.head())

'''
Month
1949-02-01    0.009580
1949-03-01    0.027071
1949-04-01    0.054742
1949-05-01    0.050221
1949-06-01    0.026331
dtype: float64
'''


# 将ARIMA模型的预测结果从对数尺度转换回原始数据尺度,以便更直观地理解模型对未来数据的预测情况
predictions_ARIMA_log = pd.Series(log_air_passengers.ix[0], index=log_air_passengers.index)
predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0)
predictions_ARIMA_log.head()

'''
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: 
.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

See the documentation here:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#ix-indexer-is-deprecated
  
Month
1949-01-01    4.718499
1949-02-01    4.728079
1949-03-01    4.745570
1949-04-01    4.773241
1949-05-01    4.768720
dtype: float64
'''


# 绘制原始时间序列数据和ARIMA模型的预测结果
predictions_ARIMA = np.exp(predictions_ARIMA_log) # 将之前转换回原始数据尺度的结果恢复成原始数据尺度
plt.plot(air_passengers) # 绘制原始的时间序列数据
plt.plot(predictions_ARIMA) # 绘制ARIMA模型的预测结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习——自动化机器学习(AutoML)

机器学习——自动化机器学习(AutoML) 自动化机器学习(AutoML)——2024年的新趋势什么是AutoML?AutoML的关键组成部分AutoML的优势AutoML 实例:使用Auto-sklearn进行回归分析AutoML的应用领域2024年值得关注…

webm格式怎么转换成mp4?这几种方法可以轻松完成视频转换!

webm格式怎么转换成mp4?WebM,作为一种新兴的视频文件格式,尽管携带了众多优势,却也不乏其固有的局限性,这些局限在实际应用中尤为凸显,成为了用户关注的焦点。本文将深入探讨WebM格式面临的挑战&#xff0c…

Compose第六弹 对话框与弹窗

1.compose中怎么使用对话框? 2.怎么显示Popup弹窗? 一、Compose显示对话框 二、Popup Popup就类似以前的Popupwindow,我们可以看到其实上面的DropdownMenu是Popup的一个具体实现。 2.1 Popup定义 Popup的定义如下: Composable…

ANSYS apdl界面频繁停止工作,需要卸载重装吗

如果经常出现以上报错界面,无需重装,一般是因为你在此图形显示界面滚动了鼠标滚轮,导致ANSYS停止工作 出现这个界面是因为前一次ANSYS非正常退出,再次进入就会出现

天塌了!「系分」新教程10月出版?11月软考会用到新内容吗?

软考教程改版相关事宜一直都有在关注,今天,发现“中国权威的出版物数据服务平台”网站更新了软考教程出版信息。 01、系统分析师新版教程 2024年8月,在“中国权威的出版物数据服务平台”网站搜索“系统分析师教程”显示的出版时间是2024年&a…

自动化运维:提升效率、降低风险的利器

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

【.net core使用minio大文件分片上传】.net core使用minio大文件分片上传以及断点续传、秒传思路

版本:.net core 7 需求:net限制了上传的大小,只能上传25M上下的文件,如果上传一个八十多兆的文件,swagger接口报错,如果前端调用上传接口,会报CORS跨域错误,这篇文章介绍怎么使用分片…

高德地图怎么定位自己的店铺?

随着科技的飞速发展,我们的生活也变得更加便利,很多时候只需要一台手机便能解决许多问题,出行方面同样如此。无论你想去哪里,只要在地图导航上输入相应地址,就能随时导航前往目的地。而高德地图作为国内首屈一指的地图…

基于yolov8、yolov5的果蔬检测系统(含UI界面、数据集、训练好的模型、Python代码)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…

行测刷题(1)

D D C 论据论点话题不一致优先考虑拆桥,要切断论点和论据之间的联系,一般拆桥的选项都要包含论点和论据不一样的关键词,也就是道德责任和舆论批评 体重变化较小可能也发生了体重减少的状况 主题词:人工培育的水稻 要表示文章对策,…

数学建模算法与应用 第11章 偏最小二乘回归及其方法

目录 11.1 偏最小二乘回归概述 11.2 Matlab 偏最小二乘回归命令 Matlab代码示例:偏最小二乘回归 11.3 案例分析:化学反应中的偏最小二乘回归 Matlab代码示例:光谱数据的PLS回归 习题 11 总结 偏最小二乘回归(Partial Least …

Python字符编码详解!

本文简单介绍了各种常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,请查阅其他相关文档。 文章开始前打个小广告——分…

ES创建文档,使用postman调用请求

请求的url 地址是http://192.168.1.108:9200/shopping/_doc,请求方式为post, 请求参数为: { "title":"小米手机", "category":"小米", "images":"http://www.gulixueyuan.com/xm.jpg", "price&…

系统移植一

使用设备是fs4412开发板 一、系统移植 系统移植是将一个操作系统或软件从一个硬件平台或处理器架构转移到另一个平台的过程。系统移植的主要目标是使软件在新的硬件环境下能够正常运行。在系统移植过程中,主要的改动集中在硬件相关的底层部分以及操作系统的核心模…

开源代码编译过程中遇到的问题(持续更新)

一、A-LOAM 地址:GitHub - HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM 1.error: ‘LocalParameterization’ is not a member of ‘ceres 原因:ceres 版本的问题,A-LOAM 使用的 ceres 版本过低。如果安装的是 ceres 2.2…

大模型微调方法总结(非常详细)零基础入门到精通,收藏这一篇就够了

大模型训练代价很高,国盛证券出过一个报告《ChatGPT需要多少算力》,指出GPT3(175B)训练一次成本约140万刀,大概是1千万人民币。GPT3已经是2020年的历史了,现在的训练成本可能更高。高昂的训练成本小公司难以…

【ARM汇编速成】零基础入门汇编语言(ARM架构+汇编的实际应用)

目录 一.汇编的前世今生 二.寄存器 三.ARM指令集 1.指令格式 2.寻址方式 3.伪指令 4.基本指令 4.1数据传输指令 4.2存储器访问指令 4.3压栈和出栈指令 4.4跳转指令 4.5算术运算指令 4.6逻辑运算指令 四.C语言与汇编混合编程 1.混合编程前置条件 2.混合编程优势 3.…

活码的3步生成技巧,多种内容快速在线做成二维码

二维码在很多应用场景中都有应用,很多内容可以通过生成活码二维码的方法来提供内容展示。活码可以将多种不同内容给组合展示,而且可以随时在图案不变情况下修改内容,使用起来更加的灵活,常见的活码类型有文本、文件、音视频、图片…

Spring Boot在B2B医疗平台中的病历管理创新

第4章 系统设计 4.1 系统总体设计 系统不仅要求功能完善,而且还要界面友好,因此,对于一个成功的系统设计,功能模块的设计是关键。由于本系统可执行的是一般性质的学习信息管理工作,本系统具有一般适用性,其…

[Git] git stash命令详解

前言 目录 git stash -m git stash list git stash pop git stash apply index git stash drop index git stash clear 特定范围文件储存 git stash [-S|--staged] git stash [-u|--include-untracked] git stash [-a|--all] 将当前未提交的修改(即工作区和暂存区的修…