时间序列与 statsmodels:预测所需的基本概念(2)

时间序列与 statsmodels:预测所需的基本概念(2)

维托米尔·约万诺维奇

走向发展

维托米尔·约万诺维奇

·

跟随

出版于

走向发展

·
4 分钟阅读
·
2022 年 1 月 31 日

8

一、说明

        在使时间序列平稳后,在本博客中我们应用 SARIMAX 预测并进行深入解释。

二、关于平稳性

        平稳性是一个重要的概念,它告诉我们我们已经“阅读”了时间序列中模式的所有组成部分。现在我们将使用简单的 statsmodels 包制作非常简单的 SARIMAX 模型,了解数据的所有参数。这基本上与 ARIMA 非常相似,但只有季节性成分。ARIMA 中的 AR 指的是自回归参数,它基本上告诉我们时间序列的“记忆”有多复杂。Yt 是我们的预测,而 b0 是截距,b1 是权重,与线性回归中相同,而 wt 是白噪声(时间序列的随机性)。

AR (1): Yt = b0 + b1 * Yt-1 + wt

AR (2): Yt = b0 + b1 * Yt-1 + b2 * Yt-2+ wt

        如果需要,也可以增加此 AR 参数。另一方面,ARIMA 中的 I 分量指的是差分参数,它告诉我们从一个时间点到另一个时间点减去时间序列的次数(即 pandas 平移方法)。具有强记忆成分的时间序列必须进行差分,有的甚至是两次(二阶差分)。差分应该使我们摆脱时间序列的随机游走,这是随机性,但取决于时间(即它有某种记忆=你可以在这里看到更多信息)。最后一个参数MA是移动平均线,与平滑有关,但这里我们没有篇幅特别关注他。SARIMAX 中的 S 表示季节性成分,而名称中的 X 还提供了包含外生预测变量的可能性,但在本例中该预测变量并不存在。

2.1 萨利麦克斯SARIMAX

        让我们看看如何使用 statsmodels 中 SARIMAX 实现的类来进行预测。但首先,我们将进行小火车测试分割功能,然后做出预测。然后我们将创建一个函数来预测所需的滞后数。我们想要对明年进行预测,因此我们将用 12 个月进行预测。

def train_test_split(timeseries, lags_for_prediction=12):split=len(timeseries)-lags_for_predictiontrain=timeseries[:split]test=timeseries[split:]return train, test
train_series, test_series = train_test_split(data, 12)

我们的差分参数必须是2,AR参数也是如此。我们这里没有空间来解释 MA 参数,所以我们只取 1。

#season - S (seasonal parameter)
#p - AR (autocorrelation parameter)
#d - I(differencing parameter)
#q - MA (moving average parameter)
#cov  - X (exogenous predictor) - not used
import statsmodels.api as smdef forecasting (p,d,q, season, lags_for_forecast):model = sm.tsa.statespace.SARIMAX(train_series, order=(p,d,q), seasonal_order=(p,d,q,season),simple_differencing=0, enforce_stationarity=True,enforce_invertibility=False)
fitted = model.fit(disp=-1)  # Forecastforecast = fitted.forecast(lags_for_forecast)# Plotplt.figure(figsize=(12,5), dpi=100)plt.plot(train_series, color='blue', label='train')plt.plot(test_series, color='green', label='test', alpha=0.6)plt.plot(forecast, color='red', label='forecast')plt.title('Forecast vs Actuals')plt.legend(loc='upper left', fontsize=8)plt.show()RSS=np.sqrt(sum(forecast.values-test_series.values.reshape(-1))**2)/lags_for_forecastprint("\n", '\033[1m' +'Root Squared Error (RSS) of SARIMAX model(p,d,q)(p,d,q,s)' + '\033[0m',(p,d,q),(p,d,q, season),':', round(RSS, 3),"\n")print(fitted.summary())
return fitted, forecast, model
fitted, forecast, model = forecasting (2,2,1, 12, 12)

        我们使用季节参数为 12 的此函数,因为我们有每月数据,并且我们的时间序列对年份水平有季节性影响(夏季旅行较多),并且我们还使用 12 作为 lags_for_forecast,因为我们想要预测明年(在这个例子中,我们将其与真实的测试数据进行比较,但在这一步之后,我们可以对未来进行真正的预测,而这无法通过某些准确性指标来真正评估)。

预测值与测试数据

        在这里我们可以看到,我们显然进行了良好的超参数调整,并成功地做出了相当令人满意的预测。摘要报告可以让我们更深入地了解模型参数的统计显着性,而 15 名乘客的误差直观上看起来相当不错:

SARIMAX 模型总结

        此输出可能表明我们也可以尝试使用 AR=1 作为可能的超参数。

        您还可以尝试 statsmodels 的一些很酷的特性和功能,例如检查残差的正态性并查看密度函数,以及一个模块中的相关图(拟合值上的plot_diagnostics ):

时间序列快速探索模块

        恭喜!这是单变量时间序列建模的基本方法。对于单变量时间序列来说,这可能是非常有效的模型。但也要记住,您还可以使用更先进的技术,包括使用外生预测变量进行建模、使用长短期神经网络 (LSTM),还可以使用集成方法,例如光梯度增强或其他依赖于决策树的技术。

        在下一篇博客中,我可以写关于超参数调整、Akaike 信息标准 (AIC) 的内容,它可以帮助我们找到高效且简约的模型。该标准可用于自动超参数调整,但让我们一步一步进行。这对于开始来说就足够了。完整的代码可以在这里找到。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口自动化测试中解决接口间数据依赖

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据。 因此通过自动化方式测试API_03接口时,需要预先请求API_02接口&a…

轻松掌控财务,分析账户花销,明细记录支出情况

随着科技的发展,我们的生活变得越来越智能化。然而,对于许多忙碌的现代人来说,管理财务可能是一件令人头疼的事情。复杂的账单、花销、收入,这些可能会让你感到无从下手。但现在,我们有一个全新的解决方案——一款全新…

[qemu逃逸] XNUCA2019-vexx

前言 这题没有去符合, 题目本身不算难. 用户名: root 密码: goodluck 设备逆向 题目没有去符合, 所以其实没啥好讲了, 就列一些笔者认为关键的地方 这里的定义了两块 mmio 内存区. 然后看下设备实例结构体: 可以看到 QEMUTimer, 所以多半就是劫持 dma_timer 了. 漏洞点在…

传输层协议-TCP协议

目录 TCP协议格式理解可靠性序号与确认序号16位窗口大小六个标志位连接管理机制三次握手四次挥手 确认应答机制(ACK)超时空重传机制流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP应用层协议TCP/UDP对比用UDP实现…

【STL】:反向迭代器

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关反向迭代器的模拟实现,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通…

吐血整理,金融银行测试的“火“到底在哪里?银行测试真正实施...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 银行里的软件测试…

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于金鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于金鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

千梦网创:外貌与内貌

一、怎样提高身价? 同样的商品或服务怎样卖得更贵? 要么通过更贵的渠道、要么通过更好的包装。 水还是那个水,放在星巴克可以卖很贵,印上不同的logo可以卖不同的价格。 拿线下的教育培训行业来说,真正让你去测评哪…

element中el-upload上传文件去掉文件列表

<template><el-uploadref"upload"action"/api/upload":limit"1"accept.xlsx:on-success"uploadSuccess":on-error"uploadError"><el-button size"small" type"primary">点击上传<…

程序的编译链接以及装载

目录 一、预处理 二、编译 三、汇编 四、链接 五、装载 一、预处理 读取c源程序&#xff0c;对其中的伪指令&#xff08;以#开头的指令&#xff09;和特殊符号进行处理&#xff0c; 伪指令主要包括以下五个方面&#xff1a; 宏定义指令&#xff0c;如#define Name Token…

解决在pycharm中使用matplotlib画图问题

第一&#xff0c;再导入包后直接绘图出现&#xff1a; AttributeError: module backend_interagg has no attribute FigureCanvas表明版本不兼容&#xff0c;我们需要加入&#xff1a;matplotlib.use(‘TkAgg’) 导入函数就变成了&#xff1a; import matplotlib matplotlib.…

js的高级

js js 的数组数组是什么为什么要使用数组数组的简单使用数组是按照顺序保存的&#xff0c;所以每个数据都有自己的编号数组的取值方法遍历数组数组的元素求和数组的最大值和最小值数组的增删改查操作数组的增加数组的筛选数组的删除js的函数 案例&#xff1a; 九九乘法表 数组…