零基础看懂 ARIMA 模型:从原理到实战

如果你完全没接触过 “时间序列预测”,也不懂复杂公式,这篇会用 “说人话” 的方式帮你搞懂 ARIMA 模型,以及文中代码到底在做什么。

一、先搞懂:ARIMA 是用来干嘛的?

简单说,ARIMA 是一种 “用过去猜未来” 的工具—— 比如用 1985-2021 年的年度销量数据,预测 2022-2026 年的销量,这就是它的核心用途。

生活中很多数据都是 “按时间排的”(比如每月工资、每天气温、每年销量),这些 “按时间顺序排列的数据” 就叫时间序列数据。ARIMA 的作用,就是从这些历史数据里找到规律(比如销量每年都涨一点),再用这个规律推未来。

二、ARIMA 模型的 3 个核心字母是什么意思?

模型名字里的 AR、I、MA,对应 3 个关键步骤,缺一不可:

  • AR(自回归):“自己和自己相关”。比如今年的销量,和去年、前年的销量有关系(去年卖得多,今年大概率也多),AR 就是用过去的销量数据来预测现在。
  • I(差分):“让数据变平稳”。什么是 “平稳”?简单说就是数据没有 “一直涨” 或 “一直跌” 的大趋势(比如房价年年涨,就是不平稳;每天的气温忽高忽低但整体没大趋势,就是平稳)。ARIMA 要求数据必须 “平稳” 才能找规律,所以如果数据不平稳(比如文中的销量一直涨),就用 “差分” 处理(比如用今年销量减去年销量,得到 “每年销量增长额”,这个增长额可能就平稳了)。
  • MA(移动平均):“修正误差”。用 AR 预测时难免有误差(比如实际销量比预测多了 50),MA 就是用过去的误差来修正现在的预测,让结果更准。

所以 ARIMA 的本质是:先把数据变平稳(I),再用过去数据(AR)+ 过去误差(MA)一起预测未来。

三、代码怎么写?(分步骤拆解)

文中的代码是用 Python 实现 ARIMA 预测的完整流程,我们一步一步看,每个步骤都对应 “怎么用 ARIMA 解决问题”:

第一步:准备工作(导入工具 + 数据)

就像做饭前要先准备锅碗瓢盆和食材,这里先 “导入工具”(处理数据、画图、建模型的库)和 “导入数据”(1985-2021 年的销量数据)。

# 导入工具库(不用记,用的时候复制就行)
import numpy as np  # 处理数字
import pandas as pd  # 处理表格数据
import matplotlib.pyplot as plt  # 画图
from statsmodels.tsa.arima.model import ARIMA  # ARIMA模型
from statsmodels.tsa.stattools import adfuller, pacf, acf  # 平稳性检验、相关性分析工具# 导入数据(从网上获取销量表格)
df = pd.read_excel('网上的销量数据文件地址')
df.head()  # 查看前5行数据

运行后看到的前 5 行数据是这样的:

年份年度销量
1985100.0
1986101.6
1987103.3
1988111.5
1989116.5

接着做了两个小操作:

  1. 中文列名转英文:因为 Python 对中文支持没那么好,把 “年份” 改成 “Year”,“年度销量” 改成 “Annual_Sales”,方便后续操作。
  2. 把 “年份” 设为时间索引:告诉 Python “这是按时间排的数据”,比如 1985 年对应 100.0 的销量,让数据有 “时间属性”。

第二步:平稳性检验(判断数据能不能直接用)

前面说过,ARIMA 要求数据必须 “平稳” 才能找规律。那怎么判断数据平不平稳?文中用了ADF 检验(一种常用的平稳性检测方法),核心看两个结果:

  • ADF Statistic(ADF 统计量):数值越小越好。
  • p-value(p 值):这是关键!如果 p 值<0.05,说明数据 “平稳”;如果 p 值≥0.05,说明数据 “不平稳”,需要处理。

文中运行结果是:

ADF Statistic: 1.8137710150945194
p-value: 0.9983759421514264

p 值接近 1(远大于 0.05),所以原始销量数据不平稳。这时候就需要用 “差分” 处理(文中建模型时用了 1 阶差分,对应 ARIMA 参数里的 “1”,后面会说)。

第三步:确定模型阶数(选 “最合适的 ARIMA 版本”)

ARIMA 有 3 个关键参数:(p, d, q),要先确定这 3 个数字,才能建模型:

  • p:AR 的阶数(用过去几期数据来预测)。
  • d:差分的阶数(需要做几次差分让数据平稳,文中用了 1 次,所以 d=1)。
  • q:MA 的阶数(用过去几期误差来修正)。

ACF 图和 PACF 图来确定 p 和 q(这两个图是判断阶数的常用工具):

  • ACF 图(自相关图):看数据和过去几期的 “直接相关性”。文中 ACF 图随着滞后步数增加慢慢下降,说明数据有持续的相关性。
  • PACF 图(偏自相关图):看数据和过去几期的 “间接相关性”(去除中间期的影响后)。文中 PACF 图在 “滞后 1 步” 后突然降到接近 0,说明用 “过去 1 期数据” 就够了(p=1)。

结合之前的 “d=1”,再通过其他准则(比如 AIC,越小模型越好),最终确定模型参数是(p=1,d=1,q=1)。

第四步:建模型 + 检验(看模型好不好用)

确定参数后,就可以建 ARIMA 模型了,代码很简单:

# 建ARIMA(1,1,1)模型,用销量数据训练
model = ARIMA(df['Annual_Sales'], order=(1, 1, 1))
model_fit = model.fit()  # 训练模型
print(model_fit.summary())  # 查看模型详细结果

运行后会输出一大段结果,重点看两个部分:

  1. 参数显著性(P>|z|):看 ar.L1(AR 的参数)和 ma.L1(MA 的参数)的 p 值:
    • ar.L1 的 p 值 = 0.002(<0.05),说明 AR 部分有效。
    • ma.L1 的 p 值 = 0.669(>0.05),说明 MA 部分效果不明显,但整体模型还是可用的。
  2. 残差检验(Ljung-Box Q 检验):残差就是 “预测值和实际值的差”。如果残差是 “白噪声”(没有规律的随机波动),说明模型已经把数据里的规律都捕捉到了,模型是好的。文中 Q 检验的 p 值 = 0.69(>0.05),说明残差是白噪声,模型合格

第五步:预测未来(用合格的模型猜未来)

模型合格后,就可以预测未来的销量了。文中预测了未来 5 年(2022-2026)的销量:

# 预测未来5步(5年)的销量
forecast = model_fit.forecast(steps=5)
print('预测值:', forecast)

运行结果是:

时间预测销量
2022-01-01282.80
2023-01-01284.74
2024-01-01285.85
2025-01-01286.49
2026-01-01286.85

然后用画图把 “历史数据” 和 “预测数据” 放一起:

  • 蓝色线:1985-2021 年的实际销量(一直在涨,但涨得越来越慢)。
  • 红色线:2022-2026 年的预测销量(继续涨,但涨幅更小,符合历史规律)。

从图上看,预测趋势和历史趋势一致,说明预测结果靠谱。

四、总结:ARIMA 预测的完整流程(小白也能记)

用 ARIMA 做时间序列预测,其实就 4 步,不管是销量、气温还是工资数据,都可以按这个流程来:

  1. 准备数据:把数据整理成 “时间 + 指标” 的格式,告诉 Python 这是时间序列数据。
  2. 平稳性检验:用 ADF 检验看数据平不平稳,不平稳就用差分处理(确定 d 值)。
  3. 选模型阶数:用 ACF/PACF 图确定 p 和 q 值,得到 ARIMA (p,d,q) 的具体参数。
  4. 建模型 + 预测:用数据训练模型,检验模型是否合格(残差是不是白噪声),合格了就预测未来。

最后:给小白的小提醒

  1. 不用死记公式:文中开头的复杂公式是 ARIMA 的数学原理,小白先会用工具(Python 代码)、能看懂结果就行,原理可以慢慢补。
  2. 关键看结果:判断模型好不好,重点看 p 值(平稳性、参数显著性)和残差检验,这些是 “硬指标”。
  3. 多练才会熟:第一次看可能觉得绕,但跟着代码跑一遍(比如用自己的数据改改),很快就能上手。

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

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

相关文章

【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法

【macOS】垃圾箱中文件无法清理的“含特殊字符文件名”的方法文件名包含特殊字符(如空格、中文符号等)导致终端无法正确识别文件路径。 可以尝试以下解决方法:使用文件路径自动补全输入 rm (注意 rm 后有空格)&#xf…

​​​​​​​Blender 重拓扑修改器实战指南:从基础操作到细节优化​

在 Blender 建模中,重拓扑是解决 “高模难编辑、低模细节差” 的关键。传统手动重拓扑效率低,重拓扑修改器能自动生成规整拓扑,保留模型外形,适合游戏资产、动画角色等场景。 一、核心作用与适用场景​ 重拓扑修改器并非 “一键完…

C/C++哆啦A梦

写在前面 用代码绘制童年记忆中的那个蓝胖子——哆啦A梦,是我对经典角色的一次深情致敬。这段程序不仅是一幅静态图像的生成,更是一次对童年幻想世界的数字重建。通过精确的几何控制与色彩搭配,我将那个圆润可爱、温暖可靠的机器人重新带回眼…

CSS入门指南:30字掌握核心技巧

1. CSS初体验 1.1. CSS定义 层叠样式表 (Cascading Style Sheets,缩写为 CSS) 用来描述 HTML 文档的呈现(美化内容) 1.2. CSS引入方式 内部样式表:学习使用 CSS 代码写在head里面的 style标签 里面 外部样式表&…

从实操到原理:一文搞懂 Docker、Tomcat 与 k8s 的关系(附踩坑指南 + 段子解疑)

目录 一、先分清:Docker、Tomcat、k8s 到底是 “干啥的”? 二、它们的 “合作关系”:从 Java 项目到集群部署的全流程 三、实际应用场景:什么时候该用谁? 1. 单独使用场景 2. 组合使用场景(最常见&…

测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击!

url: /posts/0577d0e24f48b3153b510e74d3d1a822/ title: 测试覆盖率不够高?这些技巧让你的FastAPI测试无懈可击! date: 2025-09-02T01:49:10+08:00 lastmod: 2025-09-02T01:49:10+08:00 author: cmdragon summary: FastAPI通过TestClient工具支持单元测试,模拟HTTP请求直接…

Qwen3-Reranker-0.6B 模型结构

模型加载 import torch from modelscope import AutoModel, AutoTokenizer, AutoModelForCausalLMtokenizer AutoTokenizer.from_pretrained("Qwen/Qwen3-Reranker-0.6B", padding_sideleft) model AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-Reranke…

无参 MOS 算法的评估方式

一、无参 MOS 算法 在音频处理和质量评估领域,MOS(Mean Opinion Score)是一种常用的主观评价指标,用于衡量音频质量。然而,获取主观 MOS 评分通常需要大量的人力和时间。因此,无参 MOS 算法应运而生&#…

Flowable——配置使用Flowable-UI

文章目录 前言 框架选型与版本 flowable-ui 搭建 依赖引入 springboot 主要版本 flowable 相关 log4j 日志配置项 配置文件 log4j配置文件 application.yml 增加启动类并启动程序 项目整体结构 前言 最近对工作流的flowable比较感兴趣,汇总记录一下相关的研究学习知识点。 框…

2025大学生必考互联网行业证书排名​

在互联网行业蓬勃发展的当下,大学生若想毕业后顺利投身其中,提前考取相关高含金量证书不失为明智之举。这些证书不仅能证明专业能力,还能在求职时为你增添竞争优势。接下来,为大家详细介绍 2025 年大学生必考的互联网行业证书排名…

【并发系列-01】高并发系统架构设计原理

【并发系列-01】高并发系统架构设计原理 1. 业务场景:当双11遇上技术挑战 1.1 问题场景描述 想象一下这样的场景:某电商平台在双11期间,短短30分钟内涌入了500万用户,同时发起了超过2000万次商品查询请求和100万次下单操作。而平时…

【Vue2 ✨】Vue2 入门之旅(八):过渡与动画

前几篇我们学习了事件处理。本篇将介绍 过渡与动画&#xff0c;让 Vue 页面更加生动。 目录 transition 组件进入与离开过渡过渡类名结合 CSS 动画JavaScript 钩子小结 transition 组件 Vue 提供了内置组件 <transition>&#xff0c;可以为元素或组件的进入和离开添加动…

【LeetCode】力扣刷题攻略路线推荐!适合新手小白入门~(含各类题目序号)

力扣上有许多数据结构及算法的练习&#xff0c;但是如果由第一题【两数之和】开始刷&#xff0c;会让50%的人倒在起点。所以我们刷题要讲究路线攻略以及技巧~大体路线方向由简入难数学数组链表字符串哈希表双指针递归栈队列树图与回溯算法贪心动态规划刷题技巧 建议刷题的时候分…

Windows 电脑发现老是自动访问外网的域名排障步骤

Windows 电脑发现老是自动访问外网的域名,如何排障 一、基础信息获取与进程定位 1.1、确认进程关键信息 1.2、进程合法性初步验证 二、网络连接深度分析 2.1、目的IP/域名溯源 2.2、端口与协议检查 三、进程行为与系统异常排查 3.1、进程启动与依赖分析 3.2、系统异常行为扫描…

curl、python-requests、postman和jmeter的对应关系

一、初识curlcurl 是一个功能强大的命令行工具&#xff0c;用于传输数据&#xff0c;支持多种协议&#xff08;如 HTTP、HTTPS、FTP 等&#xff09;。分析以下curl&#xff1a;curl "https://$HOST/mon/adm/au/opera" --header "Authorization: $AUTH" -X …

【MySQL】初识数据库基础

【MySQL】初识数据库基础 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;MySQL笔记 文章目录【MySQL】初识数据库基础前言一. 数据库基础&#xff08;重点&#xff09;1.1 什么是数据库1.2 主流数据库1.3 基本使用1.3.1 MySQL安装1.3.2 连接…

微服务Docker-compose之若依部署

目录 1.创建一个文件夹 2.上传压缩包 3.解压 4.执行ry1文件 5.执行ry2文件 6.进入nginx的html目录解压dist文件 7.执行ry3文件 8.访问nacos 9.访问若依 1.创建一个文件夹 2.上传压缩包 3.解压 4.执行ry1文件 5.执行ry2文件 6.进入nginx的html目录解压dist文件 7.执行ry…

《中国棒球》健将级运动员什么水平·棒球1号位

棒球国家健将级の神级科普&#xff5c;国内TOP1%⚾️国际能打吗&#xff1f;1. 什么是"国家健将级"&#xff1f;&#xff5c;What is "Master Sportsman"&#xff1f;中国运动员等级天花板&#xff1a;仅次"国际健将"的最高国家级荣誉&#xff0…

NAT与内网穿透

目录 一、为什么需要NAT&#xff1f; 二、NAT的核心&#xff1a;从“一对一”到“多对一” &#xff08;1&#xff09;静态NAT &#xff08;2&#xff09;动态NAT &#xff08;3&#xff09;NAPT 三、NAPT的双刃剑&#xff1a;安全与局 四、内网穿透 &#xff08;1&…

力扣222 代码随想录Day15 第四题

完全二叉树结点的数量class Solution { public:int countNodes(TreeNode* root) {if(rootNULL) return 0;TreeNode* leroot->left;TreeNode* riroot->right;int ld0;int rd0;while(le){lele->left;ld;}while(ri){riri->right;rd;}if(ldrd) return(2<<ld)-1;i…