Python用Transformer、Prophet、RNN、LSTM、SARIMAX时间序列预测分析用电量、销售、交通事故数据
原文链接: tecdat.cn/?p=42219
在数据驱动决策的时代,时间序列预测作为揭示数据时序规律的核心技术,已成为各行业解决预测需求的关键工具。从能源消耗趋势分析到公共安全事件预测,不同领域的数据特征对预测模型的适应性提出了差异化挑战。本文基于某咨询项目的实际需求,通过对比分析五种主流预测模型(SARIMAX、RNN、LSTM、Prophet、Transformer)在多类数据集上的表现,探讨模型选择逻辑与参数调优策略,为行业应用提供可落地的解决方案(点击文末“阅读原文”获取完整智能体、代码、数据、文档)。
作为数据科学领域的从业者,我们在为客户构建预测系统时发现:单一模型难以适配多样化的数据场景。例如,能源领域的月度消耗数据呈现强季节性,而公共安全领域的事件数据则可能包含突发异常值。因此,系统性对比模型在不同数据特征下的表现,成为提升预测准确性的必要前提。本文所涉及的专题项目文件已分享至行业交流社群,欢迎扫码进群与500+从业者共同探讨技术细节与应用场景。
流程图:研究脉络概览
一、研究目标与数据场景
时间序列预测的核心是通过历史数据捕捉规律以预测未来。本文聚焦以下五类模型的实际效能:
- SARIMAX
:适用于包含季节性和外部变量的线性时序数据,通过差分处理非平稳性。
- RNN(循环神经网络)
:擅长处理序列依赖关系,通过隐藏状态记忆历史信息。
- LSTM(长短期记忆网络)
:优化RNN的长期依赖问题,通过门控机制过滤无效信息。
- Prophet
:由Meta开发的集成模型,自动处理趋势、季节和节假日效应,对数据缺失鲁棒。
- Transformer
:基于自注意力机制的新兴模型,理论上可捕捉复杂时序模式。
实验数据覆盖四大真实场景:
- 能源消耗数据(Electric Production)
:某地区月度工业用电量,含397条记录,存在显著季节性。
- 零售销售数据(Sales-of-Shampoo)
:三年月度洗发水销量,共36条记录,反映消费趋势。
- 公共安全数据(Crime Data)
:某城市2020年至今的每日犯罪记录,包含726条数据,需处理非平稳性与异常值。
- 交通事故数据(Crash Reporting)
:某郡月度交通事故驾驶员信息,60条记录,用于分析道路安全趋势。
数据截图
二、数据预处理与特征分析
2.1 数据检验与平稳性分析
采用Dickey-Fuller检验判断数据平稳性,通过**自相关函数(ACF)和偏自相关函数(PACF)**识别周期性与滞后阶数。以能源消耗数据为例,Python代码实现如下:
ini
体验AI代码助手
代码解读
复制代码
# 读取数据并聚合为月度均值
data = pd.read_csv("eneta.csv")
monthly_data = data['consumption'].resample('M').mean()
# 绘制时序图
monthly_data.plot()
plt.title("月度能源消耗趋势")
plt.show()
# 平稳性检验与相关性分析
adf_result = adfuller(monthly_data)
print(f"ADF统计量: {adf_result[0]:.2f}, p值: {adf_result[1]:.4f}")
结果解读:
能源消耗数据的ADF检验p值>0.05,表明非平稳,需差分处理;ACF呈拖尾、PACF一阶截尾,初步确定ARIMA(1,1,0)模型。
各数据集的预处理结论汇总如下(表1):
数据类型 | 频率 | 样本量 | 平稳性 | ARIMA阶数 | 季节阶数 |
---|---|---|---|---|---|
能源消耗 | 月度 | 397 | 否 | (1,1,0) | (1,1,1,12) |
洗发水销售 | 月度 | 36 | 否 | (1,1,1) | (1,1,1,12) |
犯罪数据 | 每日 | 726 | 是 | (1,0,1) | (1,1,1,7) |
交通碰撞 | 月度 | 60 | 否 | (1,1,1) | (1,1,1,12) |
图1:能源消耗数据月度趋势
图2:ACF与PACF函数图像
三、核心模型实现与参数调优
3.1 SARIMAX:季节性线性建模
针对能源消耗数据,使用SARIMAX捕捉季节效应,代码如下:
ini
体验AI代码助手
代码解读
复制代码
from statsmodels.tsa.statespace.sarimax import SARIMAX
# 划分训练集与测试集(保留最后3个月验证)
train = monthly_data[:-3]
test = monthly_data[-3:]
# 拟合SARIMAX(1,1,0)(1,1,1,12)模型
model = SARIMAX(train, order=(1,1,0), seasonal_order=(1,1,1,12))
result = model.fit()
# 预测与评估
forecast = result.forecast(steps=3)
mape = np.mean(np.abs((test - forecast)/test)) * 100
print(f"MAPE: {mape:.2f}%") # 输出:MAPE: 4.42%
3.2 RNN与LSTM:序列特征学习
以交通碰撞数据为例,构建RNN模型时需先进行季节分解与归一化:
ini
体验AI代码助手
代码解读
复制代码
import torch
from sklearn.preprocessing import MinMaxScaler
# 季节分解(加法模型,周期12个月)
decomposed = seasonal_decompose(data, model='additive', period=12)
deseasonalized = decomposed.trend + decomposed.resid
# 数据归一化与序列生成
3.3 Prophet:自动化季节建模
Prophet通过内置参数自适应调整季节效应,适用于含明显周期的数据集
3.4 Transformer:注意力机制探索
尝试将NLP领域的Transformer应用于时序预测,通过位置编码保留序列顺序信息
scss
体验AI代码助手
代码解读
复制代码
pe = torch.zeros(max_len, 1, d_model)
position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2) * (-math.log(10000.0) / d_model))
pe[:, 0, 0::2] = torch.sin(position * div_term)
pe[:, 0, 1::2] = torch.cos(position * div_term)
四、模型性能对比与行业启示
4.1 关键指标:MAPE值对比
通过平均绝对百分比误差(MAPE)评估模型准确性,结果如下(表2):
数据类型 | SARIMAX | RNN | LSTM | Prophet | Transformer |
---|---|---|---|---|---|
能源消耗 | 4.42% | 2.17% | 2.29% | 3.65% | 4.55% |
洗发水销售 | 9.62% | 13.35% | 39.12% | 13.11% | 38.15% |
犯罪数据 | 25.31% | 10.32% | 13.81% | 22.06% | 196.10% |
交通碰撞 | 7.43% | 5.05% | 5.49% | 4.97% | 5.71% |
图3:各模型在不同数据集上的MAPE分布
4.2 核心发现
- RNN的泛化能力
:在能源消耗、交通碰撞等复杂数据中表现最佳,尤其适合捕捉非线性依赖关系。
- Prophet的季节适应性
:在洗发水销售数据(强季节性)中MAPE仅为13.11%,显著优于LSTM(39.12%)。
- Transformer的局限性
:在时序领域尚未展现NLP中的优势,犯罪数据中MAPE高达196.10%,可能与注意力机制对短序列的低效性有关。
- 计算效率权衡
:SARIMAX和Prophet的训练时间仅为RNN/LSTM的1/5-1/3,适合实时性要求高的场景。
4.3 行业应用建议
- 能源与零售
:优先使用Prophet或SARIMAX,结合业务周期(如季度、节假日)调整季节参数。
- 公共安全与交通
:采用RNN/LSTM捕捉突发模式,通过数据增强(如合成异常样本)提升模型鲁棒性。
- 新兴场景
:Transformer可作为探索性工具,但需结合时序特性优化架构(如引入卷积预处理)。
五、结论与展望
本研究通过多场景实证分析,揭示了时间序列预测模型的“数据-模型适配法则”:没有最优模型,只有最适合特定数据特征的方案。例如,RNN在含噪声的长序列中表现稳定,而Prophet凭借自动化季节建模成为商业场景的首选。
未来研究可聚焦以下方向:
- 混合模型
:结合传统时序分析与深度学习(如SARIMA-LSTM),提升复杂模式捕捉能力。
- 实时预测
:优化RNN的推理速度,或采用轻量级模型(如Temporal Fusion Transformer)满足流式数据需求。
- 可解释性
:通过SHAP值等工具解析Prophet与Transformer的决策逻辑,增强行业信任度。
注:文中部分代码为简化示意,实际应用需根据数据规模调整批次大小、训练轮次等参数。数据名称已做脱敏处理,具体业务场景可联系作者进一步探讨。
本文中分析的完整智能体、数据、代码、文档分享到会员群,扫描下面二维码即可加群!
资料获取
在公众号后台回复“领资料”,可免费获取数据分析、机器学习、深度学习等学习资料。
点击文末“阅读原文”
获取完整智能体、
代码、数据和文档。
点击标题查阅往期内容
SARIMA-LSTM融合模型对太阳黑子数量预测分析|附智能体数据代码
【视频讲解】线性时间序列原理及混合ARIMA-LSTM神经网络模型预测股票收盘价研究实例
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测
视频:Python深度学习量化交易策略、股价预测:LSTM、GRU深度门控循环神经网络|附代码数据
【视频讲解】Python用LSTM长短期记忆网络GARCH对SPX指数金融时间序列波动率滚动预测
【视频讲解】Python用LSTM、Wavenet神经网络、LightGBM预测股价|数据分享
Python股票预测:注意力多层Attention RNN LSTM应用
Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
用PyTorch机器学习神经网络分类预测银行客户流失模型
PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据
Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化
Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析
R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告
R语言深度学习:用keras神经网络回归模型预测时间序列数据
Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类
R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)
MATLAB中用BP神经网络预测人体脂肪百分比数据
Python中用PyTorch机器学习神经网络分类预测银行客户流失模型
R语言实现CNN(卷积神经网络)模型进行回归数据分析
SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型
【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析
Python使用神经网络进行简单文本分类
R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
R语言基于递归神经网络RNN的温度时间序列预测
R语言神经网络模型预测车辆数量时间序列
R语言中的BP神经网络模型分析学生成绩
matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类
R语言实现拟合神经网络预测和结果可视化
用R语言实现神经网络预测股票实例
使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测
python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译
用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类
相关文章:

Python用Transformer、Prophet、RNN、LSTM、SARIMAX时间序列预测分析用电量、销售、交通事故数据
原文链接: tecdat.cn/?p42219 在数据驱动决策的时代,时间序列预测作为揭示数据时序规律的核心技术,已成为各行业解决预测需求的关键工具。从能源消耗趋势分析到公共安全事件预测,不同领域的数据特征对预测模型的适应性提出了差异…...

java基础(面向对象进阶高级)泛型(API一)
认识泛型 泛型就等于一个标签(比如男厕所和女厕) 泛型类 只能加字符串: 把别人写好的东西,自己封装。 泛型接口 泛型方法、泛型通配符、上下限 怎么解决下面的问题? API object类 toString: equals: objects类 包装类 为什么上面的Integer爆红…...

学习心得(17--18)Flask表单
一. 认识表单:定义表单类 password2中末端的EqualTo(password)是将密码2与密码1进行验证,看是否相同 二.使用表单: 运行 如果遇到这个报错,就在该页面去添加 下面是举例: 这就是在前端的展示效…...
AI测试和敏捷测试有什么联系与区别?
AI测试与敏捷测试作为软件质量保障领域的两种重要方法,既有紧密联系也存在显著区别。以下是两者的联系与区别分析: 一、联系 共同目标:提升测试效率与质量 敏捷测试强调通过快速迭代、持续反馈和团队协作确保交付价值,而AI测试通…...

微信小程序进阶第2篇__事件类型_冒泡_非冒泡
在小程序中, 事件分为两种类型: 冒泡事件, 当一个组件上的事件被触发后,该事件会向父节点传递非冒泡事件, 当一个组件上的事件被触发后, 该事件不会向父节点传递。 一 冒泡事件 tap, touchst…...

电机控制学习笔记
文章目录 前言一、电机二、编码器三、开环控制和闭环控制总结 前言 学习了解电机控制技术的一些原理和使用的方法。 一、电机 直流有刷电机 操作简单 使用H桥驱动直流有刷电机 直流有刷电机驱动板 电压检测 电流检测以及温度检测 直流无刷电机 使用方波或者正弦波进行换向…...
什么是前端工程化?它有什么意义
前端工程化是指通过工具、流程和规范,将前端开发从手工化、碎片化的模式转变为系统化、自动化和标准化的生产过程。其核心目标是 提升开发效率、保障代码质量、增强项目可维护性,并适应现代复杂 Web 应用的需求。 一、前端工程化的核心内容 1. 模块化开发 代码模块化:使用 …...

企业网站架构部署与优化-Nginx性能调优与深度监控
目录 #1.1Nginx性能调优 1.1.1更改进程数与连接数 1.1.2静态缓存功能设置 1.1.3设置连接超时 1.1.4日志切割 1.1.5配置网页压缩 #2.1nginx的深度监控 2.1.1GoAccess简介 2.1.2nginx vts简介 1.1Nginx性能调优 1.1.1更改进程数与连接数 (1)进程数 进程数…...

行列式的线性性质(仅限于单一行的加法拆分)
当然可以,以下是经过排版优化后的内容,保持了原始内容不变,仅调整了格式以提升可读性: 行列式的线性性质(加法拆分) 这个性质说的是:如果行列式的某一行(或某一列)的所有…...

JAVA基础编程练习题--50道
一:循环结构 1.1 for循环 水鲜花数 (1)题目 (2)难点 如何获取三位数的个位数 如何计算一个数的立方 判断两数值是否相等 (3)代码 最大公约数 (1)题目 (2&…...

leetcode 93. Restore IP Addresses
题目描述 93. Restore IP Addresses 代码 回溯法 class Solution {vector<string> res; public:vector<string> restoreIpAddresses(string s) {string IP;int part 0;backtracking(s,0,IP,part);return res;}void backtracking(const string &s,int start…...
【东枫科技】基于Docker,Nodejs,GitSite构建一个KB站点
Docker 安装桌面版本,安装Node镜像 运行node镜像 需求 和外部的某个文件夹地址可以绑定端口可以绑定,方便server的访问 docker run -itd --name node-test -v C:/Users/fs/Documents/GitHub:/home/node -p 3000:3000 node进入终端 docker exec -it …...

pytest+allure+allure-pytest 报告输出遇到的问题汇总
文章目录 前言问题一:module allure has no attribute severity_level问题二:ERROR:file or directory not found: ‐vs问题三:生成的 html 报告是空的,明明有测试用例执行完成,但报告没有显示数据 前言 pytestallure…...
Python基础语法(十四):Python常用内置模块及功能
Python标准库提供了丰富的内置模块,无需额外安装即可使用。以下是按功能分类的常用内置模块及其核心功能: 一、文件与操作系统交互 1. os 模块 功能:操作系统接口常用方法:os.getcwd() # 获取当前工作目录 os.listdir() …...

【Opencv+Yolo】_Day1图像基本处理
目录 一、计算机中的视觉: 二、Opencv基本操作: 图片基础处理: 视频基本处理: 图像截取(截取,合并,只保留一个元素) 图像填充 数值计算 图像融合 阈值判断 图像平滑 图像腐…...
MySQL各种日志类型介绍
概述 MySQL 提供了多种日志类型,用于记录数据库的运行状态、操作历史和错误信息等,这些日志对于故障排查、性能优化、安全审计和数据恢复等具有重要作用。以下是 MySQL 中常见的日志类型及其详细介绍资料已经分类整理好:https://pan.quark.c…...
15.2【基础项目】使用 TypeScript 实现密码显示与隐藏功能
在现代 Web 应用中,允许用户切换密码的可见性不仅提升了用户体验,也让表单填写更便捷。使用 TypeScript 来实现这个功能,不仅具备强类型检查优势,还能提升代码的可维护性。 ✨ 我们要实现的功能 在这篇文章中,我们将…...
Django压缩包形式下载文件
通过web将minio上的文件以压缩包-文件夹-文件的形式下载到本地 import os from bx_mes import settings from io import BytesIO import zipfile from django.http import StreamingHttpResponse class FileRemote(GenericAPIView):def post(self,request):# 压缩包名folder_n…...
晚期NSCLC临床试验终点与分析策略
1. 案例背景 1.1 研究设计 1.1.1 适应症与分组 晚期非小细胞肺癌一线治疗,干预组为新型免疫检查点抑制剂联合化疗,对照组为化疗单药,随机双盲安慰剂对照III期试验。 1.1.2 目标框架 基于FDA或ICH指南,终点定义和分析策略影响试验科学性及监管审评。 2. 终点定义 2.1 主要…...

从比分滚动到数据革命:体育数据如何重构我们的观赛体验?
当凌晨三点的欧冠决赛与闹钟冲突时,当世界杯小组赛因时差难以全程跟进时,当代体育迷早已不再依赖电视直播 —— 打开手机里的比分网,实时跳动的体育大数据正构建着全新的观赛宇宙。这些曾经被视为 "辅助工具" 的平台,如…...

华为网路设备学习-23(路由器OSPF-LSA及特殊详解 二)
OSPF动态路由协议要求: 1.必须有一个骨干区域(Area 0)。有且仅有一个,而且连续不可分割。 2.所有非骨干区域(Area 1-n)必须和骨干区域(Area 0)直接相连,且所有区域之间…...

VPet虚拟桌宠,一款桌宠软件,支持各种互动投喂等. 开源免费并且支持创意工坊
📌 大家好,我是智界工具库,每天分享好用实用且智能的开源项目,以及在JAVA语言开发中遇到的问题,如果本篇文章对您有所帮助,请帮我点个小赞小收藏小关注吧,谢谢喲!😘 工具…...

新书速览|ASP.NET MVC高效构建Web应用
《ASP.NET MVC高效构建Web应用》 本书内容 《ASP.NET MVC高效构建Web应用》以目前流行的ASP.NET MVC 5、HTML和Razor为主线,全面系统地介绍ASP.NET MVC Web应用开发的方法,配套提供实例源码、PPT课件与作者一对一QQ答疑服务。 《ASP.NET MVC高效构建Web…...

MySQL 9.3 超详细下载安装教程(Windows版)附图文说明
MySQL 9.3 超详细下载安装教程(Windows版)附图文说明 💡 本文适用于Windows 10/11系统,包含完整的安装流程、环境配置和疑难解答。建议收藏备用! 一、下载MySQL 1. 访问官网 进入MySQL官方下载页面:http…...

Linux之软件包管理器(CentOS系统) —— yum
目录 一、软件包管理器 1-1什么是软件包 1-2 Linux软件生态 Linux下载软件的过程(Ubuntu、Centos、other) 操作系统的好坏评估---生态问题 1. 应用软件生态 2. 硬件兼容性 3. 开发者社区与开源生态 4. 商业合作与盈利模式 5. 用户粘性与使用习惯 6. 安全与合规生态 …...

webpack吐环境分析
需要解决的问题 扣取下来的webpack文件过大 解决思路 用ast将需要的代码扣下来 结果展示 实现步骤 第一步:我们得知道需要哪些模块 在入口处,增加模块记录 第二步,分析ast代码 通过分析发现,key 有三种值 分别为NumbericLiteral、StringLi…...

Unity InputField 滑动滚轮 实现对文本的滚动
一。效果演示: 二。实现原理: 创建一个脚本KeInputScroll.cs 继承InputField类和IScrollHandler接口。如下面代码所示: using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI;public class KeInputScroll : InputFiel…...

机械设计插件
在进行机械设计的时候,很多厂家对我们开放了外购件的模型,方便我们进行设计选购,但是尽管如此,我们在使用的时候还是很麻烦,我目前使用的是Part data manager来管理这些厂家的模型,使用方法非常简单。 首先…...
Monorepo 管理
以下是设计可扩展的前端架构(Monorepo 管理)的核心知识点总结: 一、Monorepo 的核心概念与优势 1. 什么是 Monorepo? 定义:将多个相关项目(包、应用、库)存储在一个代码仓库中的代码管理模式。对比 Multirepo:传统每个项目独立仓库,Monorepo 统一管理依赖、配置和工具…...

RabbitMQ核心机制——延迟队列
一、 什么是延迟队列? 消息发送之后,不想让消费者马上收到消息,而是等待特定时间后消费者才能拿到这条消息进行消费。 二、 如何实现延迟队列 RabbitMQ并没有直接支持延迟队列这一功能,如果需要实现延迟队列,有两种方法…...