时间序列预测实战(十八)利用Prophet实现长期预测(附代码+数据集+详细讲解)

时间序列预测算法---Prophet 本文探讨了Prophet算法在时间序列预测中的应用,分析了其优势及适用场景。通过实际数据验证,Prophet在处理季节性、趋势变化等方面表现出色,预测精度高。文章为时间序列预测领域提供了一种高效、实用的方法,对相关研究和实践具有指导意义。 阅读详情
AI摘要

本文详细讲解如何使用Facebook开源的Prophet模型进行时间序列长期预测,涵盖其加性模型结构(趋势、季节性、节假日效应)、核心参数配置、电力负荷数据集(ETTh)应用及完整Python代码实现。重点突出Prophet在业务场景中对缺失值、异常值和节假日建模的鲁棒性,以及其在小时级数据上24步预测的实际效果与MAE/MSE评估。

一、本文介绍 

Prophet是一个用于时间序列预测的经单模型。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要思想是将数据分解为如下三个部分:趋势、季节性、节假日和特殊事件。这个模型非常适合于处理具有强烈季节性和趋势变化的业务时间序列数据(这里为什么适合的是业务数据呢是因为它考虑了节假日等特殊事件,同时其面对数据中的缺失值和异常值时也能保持其性能)。Prophet通过这种方式,可以有效地预测未来的趋势和模式。需要注意的是Prophet是一种介于机器学习和传统的时间序列预测方法中间的一种方法,其中分解趋势、季节性这种属于是传统的方法,但是其又可以自动拟合属于机器学习的方法。

回顾内容:时间序列专栏->包含上百种时间序列预测模型以及基础讲解适合各种人群

预测类型:长期预测、单元预测。

预测效果图如下(未知数据)->

目录

一、本文介绍 

二、Prophet介绍 

2.1 Prophet的主要思想

2.2 Prophet的优缺点

三、数据集介绍

四、参数讲解

五、模型实战

5.1 模型完整代码块

5.2 模型训练和输出结果 

六、结果展示和分析

六、全文总结 


二、Prophet介绍 

2.1 Prophet的主要思想

Prophet的主要思想是:提供一个灵活且易于使用的工具,用于处理各种业务时间序列数据的预测。它基于一个加性模型,其中非线性趋势与年度、周度和日度季节性模式结合,还可以包括节假日效应。这个模型包括几个主要部分:

  1. 趋势模型:它捕捉数据的长期趋势,可以处理趋势的变化,如趋势中的拐点。

  2. 季节性模型:识别并拟合数据的季节性模式,如一周内或一年内的周期性变化。

  3. 节假日组件:用户可以指定影响模型的特定日期或事件,如公共假期或特别活动。

Prophet的目标是将这些复杂的时间序列分析技术变得更加易于理解和使用,即使是对于非专业人士来说。

下图为Prophet处理时间这一特征时其考虑时间的方法

 而且岂会将时间处理为不同的维度进行处理如下图所示:分别为年月周日等多个维度。

2.2 Prophet的优缺点

Prophet的优点

Prophet是一个由Facebook开发的开源工具,用于时间序列预测。这个工具特别适合于具有强季节性影响和多个历史数据季节的业务时间序列数据。Prophet的主要有点包括:

1. 易于使用:Prophet旨在为分析师和开发者提供一个简单、直观的接口,使他们能够快速做出高质量的预测。

2. 适应性强:它可以自动检测时间序列数据的变化趋势和季节性模式,甚至在存在缺失数据或历史数据的情况下也能进行有效的预测。

3. 可定制:用户可以调整模型来适应特定的业务需求,比如通过添加节假日效应或者考虑特定的事件。

4. 鲁棒性:它对异常值和缺失数据具有良好的抵抗力,能够生成准确的预测。

总结:Prophet在许多类型的时间序列数据上都表现出色,特别是在处理日常、周末和年度节假日的影响方面具有独特优势。

Prophet的缺点

尽管如此,Prophet也有其局限性,它可能不适用于处理非常不规则或复杂的时间序列数据。此外,Prophet在进行预测时可能需要大量的历史数据来识别模式。

三、数据集介绍

我们本文用到的数据集是官方的ETTh1.csv ,该数据集是一个用于时间序列预测的电力负荷数据集,它是 ETTh 数据集系列中的一个。ETTh 数据集系列通常用于测试和评估时间序列预测模型。以下是 ETTh1.csv 数据集的一些内容:

数据内容:该数据集通常包含有关电力系统的多种变量,如电力负荷、价格、天气情况等。这些变量可以用于预测未来的电力需求或价格。

时间范围和分辨率:数据通常按小时或天记录,涵盖了数月或数年的时间跨度。具体的时间范围和分辨率可能会根据数据集的版本而异。 

以下是该数据集的部分截图->

​

四、参数讲解

Prophet模型提供了多个参数,大家可以根据具体的数据集和业务需求调整模型。以下是这些参数及其接受的类型:

参数名称参数类型参数介绍
1growth字符串指定增长模型,通常是'linear'或'logistic'大家需要注意的是如果输入logistic则需要再输入数据中多加一个cap列表明你的数据可能的最大值,否则会报错。
2changepointsPython列表

python列表,指明数据什么时候会变化,这个一般不用输入,类似于某个特殊时间点。

3n_changepoints整数自动选择的潜在趋势变化点的数量,这两参数比较重要大家需要反复尝试
4changepoint_range浮点数用于选择变化点的数据历史比例,这两参数比较重要大家需要反复尝试
5yearly_seasonality布尔值或整数年度季节性组件,是否开启True自动计算按照一年来,否则可以输入整数2、3年等。
6weekly_seasonality布尔值或整数周季节性组件,和上面同理
7daily_seasonality布尔值或整数日季节性组件,和上面同理
8holidaysDataFrame包含假期信息的数据框
9seasonality_prior_scale浮点数季节性组件的平滑度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
10holiday_prior_scale浮点数假期组件的平滑度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
11changepoint_prior_scale浮点数趋势变化点的灵敏度,这个参数其实需要用一些交叉验证或者网格搜索进行求最优化。
12mcmc_samples整数MCMC采样的数量
13interval_width浮点数预测区间的宽度
14uncertainty_samples整数不确定性估计的模拟抽样数量

五、模型实战

5.1 模型完整代码块

下面的代码大家复制粘贴即可运行,本文的模型Prophet用法十分简单只需要调用官方的接口既可以。 

import pandas as pd
from matplotlib import pyplot as plt
from prophet import Prophet
from sklearn.metrics import mean_absolute_error, mean_squared_error

pre_length = 24  # 预测未来数据的长度,我的数据是一小时一间隔24等于一天

df = pd.read_csv('ETTh1.csv')[['date', 'OT']]  # 因为我的数据有多列,在这里我给这两列进行的单独提取出来


# 从数据的末尾提出来一部分数据用于后面的对比
train_df = df[:len(df) - pre_length]
test_df = df[-pre_length:]

# 这里需要将你的时间列和数据列进行重命名因为Prophet需要的两列名字固定是ds 和 y
train_df.rename(columns={'date': 'ds', 'OT': 'y'}, inplace=True)
test_df.rename(columns={'date': 'ds', 'OT': 'y'}, inplace=True)
test_df.reset_index(drop=True, inplace=True)

# 初始化Prophet模型
model = Prophet(
    yearly_seasonality=True,          # 启用年度季节性
    weekly_seasonality=True,          # 启用周季节性
    daily_seasonality=True,           # 启用日季节性
    changepoint_prior_scale=0.5,     # 调整趋势变化点的灵敏度
    seasonality_prior_scale=5.0,     # 调整季节性组件的灵敏度
)

# 拟合模型
model.fit(train_df)

# 创建未来日期的数据框,这里假设我们预测未来1天
future = model.make_future_dataframe(periods=pre_length)

# 进行预测
forecast = model.predict(future).tail(pre_length)

forecast.reset_index(inplace=True, drop=True)  # 将索引重新排序

# 展示预测结果
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']])

mae = mean_absolute_error(test_df['y'], forecast['yhat'])
mse = mean_squared_error(test_df['y'], forecast['yhat'])

print("预测值和真实值的MAE:", mae)
print("预测值和真实值的MSE:", mse)

# 设置主题
plt.style.use('ggplot')

# 创建图表
fig, ax = plt.subplots(figsize=(10, 6))
# 绘制真实值
ax.plot(test_df['y'], label='Actual', color='blue')

# 绘制预测值
ax.plot(forecast['yhat'], label='Forecast', color='cyan')

# 绘制预测的不确定性范围(上下界)
ax.fill_between(range(pre_length), forecast['yhat_lower'], forecast['yhat_upper'], color='grey', alpha=0.5)

# 设置标题和标签
ax.set_title('Prophet Forecast with Confidence Interval', fontsize=16)
ax.set_xlabel('Date', fontsize=12)
ax.set_ylabel('Value', fontsize=12)

# 添加图例
ax.legend()

# 显示图表
plt.show()

5.2 模型训练和输出结果 

当我们将上面的代码复制到一个py文件之后输入你的文件路径和要预测的数据周期之后,我们可以进行训练,控制台的输出如下图所示,其中的前两行为模型拟合过程,下面的结果为模型的预测输出结果,其中yhat就是模型的预测值。

​

六、结果展示和分析

下面的结果就是预测值和真实值的对比图,我这里的数据是按照小时为间隔,可以看到我这里预测了未来的24个时间点的数据也就是一天的数据,效果还可以吧只能说这个模型主要就是用法简单官方以只提供接口省去了很多训练的麻烦。

同时我们可以看到下面的MAE和MSE的结果在控制台输出如下->

六、全文总结 

到此本文已经全部讲解完成了,希望能够帮助到大家,在这里也给大家推荐一些我其它的博客的时间序列实战案例讲解,其中有数据分析的讲解就是我前面提到的如何设置参数的分析博客,最后希望大家订阅我的专栏,本专栏均分文章均分98,并且免费阅读。

 回顾内容:时间序列专栏->包含上百种时间序列预测模型以及基础讲解适合各种人群

​​​

prophet模型预测时间序列 prophet模型预测时间序列 prophet:facebook开源的的一个时间序列预测算法。 原理:基于时间序列分解和机器学习的拟合来做的。 把时间序列 分成不同时间间隔 和 整体趋势的组合。 间隔: 年 季度 月 周 日 介绍一个开源数据库-Quandl 库 注册网站: https://data.nasdaq.com/ 注册完之后,在你的个界面找到API pip install quandl 从quandl库中免费提取出特斯拉 和 通用 股票的数据 import quandl i 阅读详情

相关推荐

时间序列预测——Prophet模型

时间序列预测——Prophet模型 .

beiye_的博客 2万+

【Prophet快速入门】

'lower_window': -1, # 节假日前一天的影响'upper_window': 1, # 节假日后一天的影响})'lower_window': 0, # 节假日前0天的影响, 即不提前'upper_window': 1, # 节假日后一天的影响})# 初始化并配置Prophet模型# holidays_prior_scale参数是影响了模型对于节假日(包括特殊事件)所假设的重要性程度,可以被视为节假日组件的灵活性。

qq_40138890的博客 3036

使用Prophet 模型进行时间序列趋势特征提取和预测(一)

Prophet是由Facebook开发的时间序列预测工具,专为处理具有**趋势、季节性和节假日效应**的数据而设计。它能够捕捉数据的**整体趋势、考虑周期性模式,同时允许用户指定特殊日期的影响**。Prophet简单易用,具有自动检测变化点的功能,同时提供可解释的结果。无论是销售数据、股价还是其他时间序列数据,都可以用prophet进行预测,但更多的是通过prophet提取特征。

celiaweiwei的博客 5415

Prophet时间序列预测模型详解

Prophet模型是Facebook开发的一种时间序列预测工具,特别适合于处理具有年节性、周节性以及假日效应等复杂时间序列数据。它旨在为分析师提供一个能够快速实现准确预测的框架,因此在IT行业和相关领域广受欢迎。对于有五年以上经验的IT从业者来说,Prophet模型的灵活性和易用性使得它成为进行时间序列分析的首选工具之一。Prophet模型背后的设计理念是利用加法模型,其中时间序列被分解为多个组成部分,包括趋势、季节性和假期效应。每个组成部分通过不同的数学函数来建模,并能够结合到最终的预测中。

weixin_33363025的博客 2987

Prophet时间序列预测的深度评估与业务校准方法

时间序列预测模型的核心价值不仅在于精度,更在于可解释性与业务适配性。Prophet作为基于加法结构的趋势-季节-节假日分解模型,其预测能力依赖于对分段线性趋势、傅里叶季节项和脉冲式节假日效应的合理建模。理解其确定性数学结构(g(t)+s(t)+h(t)+ε(t))是开展有效评估的前提;而真正的模型健壮性,需通过预留测试集(Hold-Out Dataset)在真实时序约束下检验泛化能力,而非随机切分。评估必须超越RMSE,覆盖组件健康度、不确定性覆盖率及库存/调度等业务场景回测。本文聚焦Prophet在销售预

weixin_30755393的博客 357

【信息科学与工程学】【数据科学】数据科学领域 第十二篇 大数据主要算法07 任务工序(2)

工序类别工序名称工序描述处理时序输入输出控制点质量指标异常处理数据接入工序​流数据源连接连接到外部流数据源初始阶段流数据源配置流数据连接连接参数配置连接成功率重连机制,失败告警数据拉取从数据源拉取数据持续实时数据源连接原始数据流拉取频率,批大小数据延迟,吞吐量超时重试,流量控制反序列化将二进制数据反序列化数据到达时二进制数据结构化数据记录序列化格式反序列化成功率格式异常处理数据预处理工序​数据验证验证数据完整性和格式反序列化后原始数据记录验证后数据验证规则数据质量合格率丢弃无效数据,异常记录数据清洗清洗脏数

weixin_49199313的博客 783

基于Hadoop的豆瓣电影数据分析与可视化系统 毕业设计-附源码58347

关键词:Hadoop,豆瓣电影,KMeans聚类,数据可视化,Django 第一章 随着影视产业数据量的急剧增加,传统的手工统计以及单个数据库的方式已经不能很好地应对大量的电影评分和用户行为数据。设计出基于Hadoop生态的电影数据分析系统,给豆瓣平台影片价值挖掘提供了一条有效的技术途径。系统前端用Vue框架创建可视化的大屏,后端用Django框架提供RESTful API接口,业务数据存放在MySQL数据库里。数据处理层用Pandas库做清洗和聚合,用KMeans聚类算法分析用户的题材偏好

yuyuxun的博客 395

【信息科学与工程学】计算机科学与自动化——第一百九十八篇 高并发高可用的知识点01

以上补充约 110 行,涵盖分布式协调、服务网格细节、数据库高级特性、性能分析工具、混沌工程、安全渗透、合规审计、研发效能、新兴技术、架构模式、实用工具及经典论文。涵盖数据库索引与锁、NoSQL、前端性能、安全攻防、压测工具深入、监控深入、云原生存储、服务治理扩展、代码质量、DevOps 文化、行业标准、软技能及未来趋势。好的,继续补充更多高并发、高可用、高可靠的知识与技术,涵盖更深层的数据库内部机制、分布式事务、服务治理、运维自动化、安全与前沿技术等领域。

weixin_49199313的博客 736

Python实现Prophet时序预测模型

Python实现Prophet时序预测模型:Prophet模型的输入必须只包含两列数据。

m0_46670850的博客 1622

【信息科学与工程学】计算机科学与自动化——第十八篇 存储系统设计 10 存储器/存储软件/存储芯片/存储盘/存储系统/存储网络01

③ MTJ电阻 → 界面:TMR=(R_AP-R_P)/R_P = 2P₁P₂/(1-P₁P₂) (Julliere模型);③ 访问延迟模型 → 统计:平均访问延迟 = p_hot * t_dram + (1-p_hot) * t_nvm + t_migration_overhead;:① 储能电容计算 → 数学物理:所需能量 E = P * t_backup,电容 C = 2E / (V_start² - V_end²);:① B-tree平衡 → 代数:树高 h = log_m(N),m为扇出;

weixin_49199313的博客 264

【信息科学与工程学】【数据中心】 第十四篇 智算中心算法体系规划

每个节点独立计算本地对偶变量的次梯度,通过异步通信更新对偶变量,步长选择采用自适应策略(如ηt​=t​η0​​)。:采用L1(内存缓存)、L2(SSD缓存)、L3(磁盘缓存)三级缓存架构,结合LRU/LFU算法实现动态缓存管理。:靠近用户终端(如基站、小区),仅缓存高频访问内容,部署在用户最近的网络边缘,实现"最后一公里"加速。:存储完整内容库,负责内容注入与全局调度,部署在核心数据中心,具备高带宽和高可用性设计。:基于用户IP、运营商、节点负载等实时数据,动态选择最优边缘节点,实现全局负载均衡。

weixin_49199313的博客 830

Prophet:一种大规模时间序列预测模型

前言Prophet是由facebook开发的开源时间序列预测程序,擅长处理具有季节性特征大规模商业时间序列数据。本文主要介绍了Prophet模型的设计原理,并与经典的时间序列模型ARIMA...

LF_AI的博客 1万+

【信息科学与工程学】【通信工程】【云骨干网】第一百三十三篇 智算中心互联之云骨干网01

传统网络方向(如硬件防火墙、交换机)和安全产品方向(如传统防病毒软件)并未“完全”进入衰退期,但已处于深度转型阶段。市场对基础能力的需求仍在,但技术形态、价值重心和竞争逻辑已发生根本变化。

weixin_49199313的博客 1123

十大时间序列模型最强总结(一)自回归移动平均模型(ARMA)

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

老皮的博客 2688

【信息科学与工程学】计算机科学与自动化——第三百零四篇 高性能系统开发指南06

376: 分布式配置中心+配置加密+密钥管理+自动轮换+审计+回滚+健康检查+灰度+多集群+多租户+配置漂移检测+自动修复+合规+联邦学习+混沌工程+事件驱动+多语言SDK+配置可视化+配置模板+变量替换+配置对比+差异可视化+配置导入导出+配置订阅+WebHook+配置权限管理+RBAC+配置标签+配置搜索+配置依赖图+配置影响分析+配置历史趋势+配置预测+配置自动生成+配置推荐+配置健康评分+配置自愈+配置拓扑+配置热加载。故障恢复时,从上一个完成的checkpoint恢复,未提交的文件被丢弃。

weixin_49199313的博客 265

【企业管理】企业全岗位综合运营与组织知识矩阵体系04 产品线(1)

销售渠道中的灰色分利行为是侵蚀企业利润、破坏市场秩序的核心风险,需结合制度漏洞、人性博弈与监管失效三维度分析。

weixin_49199313的博客 1197

时间序列模型Prophet使用详细讲解

之前我们已经讲过了如何在Windows系统下安装Python版本的Prophet。详细见这里。 接下来的几个部分,我们说下如何使用Prophet,以此来体验下Prophet的丰富内容。内容会比较多,主要翻译自官方文档。教程中使用的数据集可在 Prophet 的 github 主页 中的 examples 文件夹 内下载得到。 目录 一、简易入门 二、饱和预测 2.1 预测饱和增长 2....

anshuai_aw1的博客 16万+

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 409
上一篇: YOLOv8改进 | EIoU、SIoU、WIoU、DIoU、FocusIoU等二十余种损失函数
下一篇: 时间序列预测实战(十七)PyTorch实现LSTM-GRU模型长期预测并可视化结果(附代码+数据集+详细讲解)
Snu77
Snu77 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄5年 11万+粉丝 934原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Snu77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值