时间序列与 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_prediction
    train=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 sm

def 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)  

    # Forecast
    forecast = fitted.forecast(lags_for_forecast)

    # Plot
    plt.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_forecast
    print("\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.mfbz.cn/a/164583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

算法设计与分析复习--求解最大子段和问题(分支法、动态规划)

文章目录 问题描述分治法动态规划法 问题描述 最大子段和问题; 洛谷P1115.最大子段和 分治法 利用归并排序的方法,但是由于是算最大子段和所以,并不能将它变成有序的,左边和右边的最大子段和通过调用函数,而中间的要…

SpringCloudAlibaba系列之Nacos服务注册与发现

目录 说明 认识注册中心 Nacos架构图 Nacos服务注册与发现实现原理总览 SpringCloud服务注册规范 服务注册 心跳机制与健康检查 服务发现 主流服务注册中心对比 小小收获 说明 本篇文章主要目的是从头到尾比较粗粒度的分析Nacos作为注册中心的一些实现,很…

「Tech初见」对epoll的理解

一、Motivation 通常,操作系统会为每个进程划分一个时间片的,在这个时间片内进程可以合法占有 cpu 进行一些计算任务。并当时间片结束后自动退回至就绪状态待命,等待下一次的调度 但是,有一种情况会使进程提前(时间片…

Web实战:基于Django与Bootstrap的在线计算器

文章目录 写在前面实验目标实验内容1. 创建项目2. 导入框架3. 配置项目前端代码后端代码 4. 运行项目 注意事项写在后面 写在前面 本期内容:基于Django与Bootstrap的在线计算器 实验环境: vscodepython(3.11.4)django(4.2.7)bootstrap(3.4.1)jquery(3…

1、cvpr2024

CVPR2024官网: Overleaf模板: 更改作者(去掉CVPR标识) % \usepackage{cvpr} % To produce the CAMERA-READY version \usepackage[review]{cvpr} % To produce the REVIEW version改成 \usepackage{cvpr} …

性格懦弱怎么办?如何改变懦弱的性格?

性格懦弱是一个比较常见的话题了,懦弱带来的苦恼和困扰,深深影响着我们的生活,人际关系,以及事业的发展。然后如何摆脱懦弱,却并非易事,尤其是对于成年人来说,这种懦弱的性格特征,已…

Prometheus+Grafana监控

Prometheus是一种开源监控系统,可用于收集指标和统计数据,并提供强大的查询语言,以便分析和可视化这些数据。它被广泛用于云原生和容器化环境中,可以嵌入到Kubernetes集群中,并与其他Kubernetes工具进行集成。 Grafan…

大模型的交互能力

摘要: 基础大模型显示出明显的潜力,可以改变AI系统的开发人员和用户体验:基础模型降低了原型设计和构建AI应用程序的难度阈值,因为它们在适应方面的样本效率,并提高了新用户交互的上限,因为它们的多模式和生…

代码随想录算法训练营|五十六天

回文子串 647. 回文子串 - 力扣(LeetCode) dp含义:表示区间内[i,j]是否有回文子串,有true,没有false。 递推公式:当s[i]和s[j]不相等,false;相等时,情况一,…

图书管理系统 保姆级教学 手把手教你图书管理系统设计!

天梯无捷径,唯有苦攀登。 一起加油,小伙伴们!! 目录 1. 实现思路: 2. 那么如何找对象呢? 3. Book类的实现 Book类总代码: 4. BookList类的实现 BookList类总代码: 5. 用户的操作 5.1 AddOperation类…

在线识别二维码工具

具体请前往:在线二维码识别解码工具--在线识别并解码二维码网址等内容

10、背景分离 —— 大津算法

上一节学习了通过一些传统计算机视觉算法,比如Canny算法来完成一个图片的边缘检测,从而可以区分出图像的边缘。 今天再看一个视觉中更常见的应用,那就是把图片的前景和背景的分离。 前景和背景 先看看什么是前景什么是背景。 在图像处理和计算机视觉中,"前景"…

Go——一、Go语言安装及介绍

Go 一、Windows下安装Go1、下载Go2、配置环境变量3、下载Jetbrain下的GoLang4、编写hello world5、编译和执行 二、Go语言介绍1、开发文档2、Go语言核心开发团队3、为什么要创建Go4、Go语言发展史5、Go语言特点6、Golang执行过程6.1 执行过程分析6.2 编译是什么 7、开发注意事项…

线性变换概论

线性变换 定义 设 V V V 和 W W W 都是在域 K K K上定义的向量空间, T : V → W T :V \rightarrow W T:V→W 对任二向量 x , y ∈ V x,y \in V x,y∈V,与任何标量 a ∈ K a \in K a∈K,满足: T ( x y ) T ( x ) T ( y ) T(xy)T(x)T(…

c语言:解决数组有关的删除,排序,合并等问题。

题目1&#xff1a;判断数组是否有序&#xff08;升序或者降序&#xff09; 思路和代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int a 0;scanf("%d", &a);int arr[50];int flag1 0;//是降序int flag2 0;//是升序…

系列十一、你平时工作用过的JVM常用基本配置参数有哪些?

一、常用参数 1.1、-Xms 功能&#xff1a;初始内存大小&#xff0c;默认为物理内存的1/64&#xff0c;等价于 -XX:InitialHeapSize 1.2、-Xmx 功能&#xff1a;最大分配内存&#xff0c;默认为物理内存的1/4&#xff0c;等价于 -XX:MaxHeapSize 1.3、-Xss 功能&#xff1a;设置…

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

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

项目点使用Redis作为缓存技术-自用

在spring boot项目中&#xff0c;使用缓存技术只需在项目中导入相关缓存技术的依赖包&#xff0c;并在启动类上使用EnableCaching开启缓存支持即可。 例如&#xff0c;使用Redis作为缓存技术&#xff0c;只需要导入Spring data Redis的maven坐标即可。 描述 使用Redis缓存高频数…

趣学python编程 (三、计算机基础知识)

如果不了解些计算机的基础知识上来就编程&#xff0c;往往容易“不识庐山真面目&#xff0c;只缘身在此山中”。因此对于计算机的一些基础知识&#xff0c;在开始编程前&#xff0c;需要理解和掌握。 计算机软件系统 计算机软件是控制计算机实现用户需求的计算机操作以及管理计…