时序预测工具库(Prophet)介绍+代码

参考内容
时间序列模型Prophet使用详细讲解
初识Prophet模型(一)-- 理论篇

一、Prophet 简介

Prophet是Facebook开源的时间序列预测算法,可以有效处理节假日信息,并按周、月、年对时间序列数据的变化趋势进行拟合。根据官网介绍,Prophet对具有强烈周期性特征的历史数据拟合效果很好,不仅可以处理时间序列存在一些异常值的情况,也可以处理部分缺失值的情形。算法提供了基于Python和R的两种实现方式。

从论文上的描述来看,这个 prophet 算法是基于时间序列分解和机器学习的拟合来做的,其中在拟合模型的时候使用了 pyStan 这个开源工具,因此能够在较快的时间内得到需要预测的结果。

二、Prophet 适用场景

Prophet适用于具有明显的内在规律的商业行为数据,例如:有如下特征的业务问题:
● 有至少几个月(最好是一年)的每小时、每天或每周观察的历史数据;
● 有多种人类规模级别的较强的季节性趋势:每周的一些天和每年的一些时间;
● 有事先知道的以不定期的间隔发生的重要节假日(比如国庆节);
● 缺失的历史数据或较大的异常数据的数量在合理范围内;
● 有历史趋势的变化(比如因为产品发布);
● 对于数据中蕴含的非线性增长的趋势都有一个自然极限或饱和状态。

三、Prophet 算法的输入输出

在这里插入图片描述
上图为一个时间序列场景:
● 黑色表示原始的时间序列离散点
● 深蓝色的线表示使用时间序列来拟合所得到的取值
● 浅蓝色的线表示时间序列的一个置信区间,也就是所谓的合理的上界和下界
● prophet 所做的事情就是:

  • 输入已知的时间序列的时间戳和相应的值;
  • 输入需要预测的时间序列的长度;
  • 输出未来的时间序列走势。
  • 输出结果可以提供必要的统计指标,包括拟合曲线,上界和下界等。
    传入prophet的数据分为两列 ds 和 y ,ds表示时间序列的时间戳,y表示时间序列的取值

其中:
● ds是pandas的日期格式,样式类似与YYYY-MM-DD for a date or YYYY-MM-DD HH:MM:SS;
● y列必须是数值型,代表着我们希望预测的值。

通过 prophet 的计算,可以计算出:
● yhat,表示时间序列的预测值
● yhat_lower,表示预测值的下界
● yhat_upper,表示预测值的上界

四、Prophet 算法原理

算法模型:
在这里插入图片描述

模型整体由三部分组成:
● growth(增长趋势)
● seasonality(季节趋势)
● holidays(节假日对预测值的影响)
其中:
● g(t) 表示趋势项,它表示时间序列在非周期上面的变化趋势;
● s(t) 表示周期项,或者称为季节项,一般来说是以周或者年为单位;
● h(t) 表示节假日项,表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响;
● 即误差项或者称为剩余项,表示模型未预测到的波动, 服从高斯分布;
Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了时间序列的预测值。

五、与机器学习算法的对比

与先进的机器学习算法如LGBM相比,Prophet作为一个时间序列的工具。
优点就是不需要特征工程就可以得到趋势,季节因素和节假日因素。
但是这同时也是它的缺点之一,它无法利用更多的信息,如在预测商品的销量时,无法利用商品的信息,门店的信息,促销的信息等。

因此,寻找一种融合的方法是一个迫切的需求。

六、代码

6.1 依赖安装

# 安装pystan
conda install pystan

# 安装plotly
conda install plotly -y

# 安装prophet
sudo pip install fbprophet

6.2 预测demo

测试数据集
example_wp_log_peyton_manning.csv
在这里插入图片描述

import pandas as pd
from fbprophet import Prophet
import matplotlib.pyplot as plt

# 读入数据集
df = pd.read_csv('data/example_wp_log_peyton_manning.csv')
print(df.head())
# 拟合模型
m = Prophet()
m.fit(df)

# 构建待预测日期数据框,periods = 365 代表除历史数据的日期外再往后推 365 天
future = m.make_future_dataframe(periods=365)
future.tail()
# 预测数据集
forecast = m.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail()
# 展示预测结果
m.plot(forecast)
# 预测的成分分析绘图,展示预测中的趋势、周效应和年度效应
m.plot_components(forecast)
plt.show()

6.3 效果图

在这里插入图片描述
在这里插入图片描述

七、参考资料

时间序列模型Prophet使用详细讲解
Prophet官网
github项目
论文:Forecasting at scale
Facebook 时间序列预测算法 Prophet 的研究

八、官方链接:

● 论文:《Forecasting at scale》,https://peerj.com/preprints/3190/
● github:https://github.com/facebook/prophet
● 官网:https://facebook.github.io/prophet/

九、案例链接:

● 预测股价并进行多策略交易:https://mp.weixin.qq.com/s/bf_CHcoZMjqP6Is4ebD58g
● 预测Medium每天发表的文章数:https://mp.weixin.qq.com/s/1wujYYDP_P2uerZzZBaspg
● 预测网站流量:https://pbpython.com/prophet-overview.html
● 预测空气质量:https://mp.weixin.qq.com/s/S-NNG7BmviitBmMBJRJSRQ
● 预测客运量:https://www.analyticsvidhya.com/blog/2018/05/generate-accurate-forecasts-facebook-prophet-python-r/
● 疫情预测分析:https://mp.weixin.qq.com/s/fZpsy1bQ3Olhng1P5p5WAg
● 原理讲解:https://mp.weixin.qq.com/s/675ASxDSVH_8BX6W8WRRqg
● 知乎专栏:https://zhuanlan.zhihu.com/p/52330017
● 股票价格预测:https://mp.weixin.qq.com/s/78xpmsbC2N1oZ3UIMm29hg
● 高致病性传染病的传播趋势预测——时间序列预测算法Prophet:https://aistudio.baidu.com/aistudio/projectdetail/525311?channelType=0&channel=0

<think>好的,我现在需要解决用户提到的RepackageMojo类文件版本不兼容问题。错误信息是“incompatible class file version 61.0 with Java Runtime supporting up to 52.0”。首先,我需要理解这个错误的原因。 类文件版本61.0对应的是Java 17,而用户当前的Java运行时环境支持到52.0,也就是Java 8。这说明用户的项目中使用的Spring Boot Maven插件版本需要Java 17来编译,但运行环境是Java 8,导致版本不兼容。 接下来,我需要检查Spring Boot Maven插件版本与Java版本的对应关系。根据Spring Boot的官方文档,Spring Boot 3.x需要Java 17或更高版本,而Spring Boot 2.x支持Java 8到Java 19。因此,用户可能需要将Spring Boot版本降级到2.x系列,或者升级Java到17或更高版本。 另外,用户可能在pom.xml中配置了Spring Boot Maven插件但没有指定版本,导致Maven下载了最新的3.x版本,从而引发问题。需要检查pom.xml中的插件配置,确保版本与Java环境匹配。 可能的解决方案包括: 1. 升级Java版本至17或更高,以支持Spring Boot 3.x。 2. 如果坚持使用Java 8,将Spring Boot版本降级到2.x,并指定对应的插件版本。 3. 确保Maven配置正确,包括本地仓设置和镜像源,避免下载错误的依赖版本。 还需要考虑用户的Maven配置是否正确,例如是否使用了正确的本地仓路径,是否配置了阿里云镜像加速依赖下载。此外,用户可能需要清理本地仓中的旧版本插件,强制Maven重新下载正确的版本。 最后,建议用户验证解决方案,运行Maven命令如mvn clean install,并检查是否仍然存在错误。如果问题依旧,可能需要进一步检查其他依赖项的兼容性,或者项目配置中的其他问题。</think>### 解决方案:`RepackageMojo`类文件版本不兼容问题 #### 问题原因 错误`org.springframework.boot.maven.RepackageMojo incompatible class file version 61.0`表明以下矛盾: - **类文件版本61.0**:编译该插件的JDK版本为Java 17(Java 17对应类文件版本61.0)[^1]。 - **运行时Java版本支持到52.0**:当前运行环境仅支持Java 8(类文件版本52.0)[^2]。 根本原因是**Spring Boot Maven插件版本与本地Java版本不兼容**。例如: - Spring Boot 3.x需要Java 17+,但本地环境为Java 8。 - 插件未显式指定版本,Maven自动下载了高版本(如3.x)。 --- #### 解决步骤 1. **检查Java版本** ```bash java -version ``` - 若显示`1.8.x`,说明当前为Java 8。 - 若需要兼容Java 8,需将Spring Boot版本降级到**2.x系列**。 2. **修改`pom.xml`中的Spring Boot版本** ```xml <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <!-- 指定Spring Boot 2.x版本 --> <version>2.7.18</version> </parent> ``` 3. **显式指定插件版本** ```xml <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- 与Spring Boot主版本一致 --> <version>2.7.18</version> </plugin> </plugins> </build> ``` 4. **清理Maven本地仓缓存** - 删除本地仓中旧版本插件: ```bash rm -rf ~/.m2/repository/org/springframework/boot/spring-boot-maven-plugin/ ``` 5. **重新构建项目** ```bash mvn clean install ``` --- #### 验证是否解决 - 若错误消失,则版本兼容性已修复。 - 若仍报错,检查Maven配置是否指向正确的本地仓和镜像源(如阿里云镜像)[^5]。 --- #### 其他情况 - **升级Java环境**:若需使用Spring Boot 3.x,需安装JDK 17+并配置环境变量。 - **Maven配置检查**:确保IDEA中Maven设置指向本地安装的Maven,而非内置版本。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值