prophet时间序列模型水质预测应用

前言

此前已经分析了,ARIMA 模型在水质预测中的应用,今天用 prophet 模型测试下再水质预测中的效果。

Prophet 简介

Prophet 是 Facebook 于2017年开源的一个时间序列预测框架,特别适合于处理具有明显趋势性和季节性的数据。该模型设计初衷是为了让非专业的数据科学家也能轻松上手进行复杂的时间序列分析,同时也能满足专业人士对于模型灵活性和准确性的需求,总之,就很香。

Prophet 模型特点

易用性:Prophet 提供了一个高度封装的 API,用户只需要提供时间戳(ds,通常为日期)和观测值(y,即随时间变化的目标变量),就可以快速构建预测模型,而无需深入理解复杂的统计或机器学习理论。
自动特征提取:模型自动识别并处理时间序列中的趋势(长期增长或下降)、季节性(如周、月、年等周期性模式)以及节假日效应。用户可以轻松地添加自定义的季节性模式和节假日信息。
灵活性:模型允许用户调整多种参数来控制预测的行为,比如趋势的平滑程度、季节性模式的复杂度等,以适应不同数据的特点。
异常值和缺失值处理:Prophet模型对于数据中的异常值和缺失值具有一定的鲁棒性,能够在不影响整体预测的情况下处理这些问题。
changepoints:模型能够自动检测并适应时间序列中的变化点,即数据中的非平稳部分,这对于预测具有突然变化的时间序列尤为重要。
可视化:Prophet还提供了丰富的可视化工具,帮助用户直观地理解模型的各个组成部分(如趋势、季节性)以及预测结果,便于模型诊断和结果解释。
Python 和 R 支持:Prophet 在 Python 和 R 两种语言中都有实现,方便不同背景的用户使用。

从上面的特点看出,完美适配水质预测。

Prophet python 安装

在网上能看到很多奇奇怪怪的安装指令,比如 fbprophet 库,已经不能用了,以我为准哈,下面是最新可用的安装方法。

1
pip install prophet

image.png

Python Prophet 实践

环境准备

1
2
3
4
5
import pandas as pd  
from prophet import Prophet
from prophet.plot import add_changepoints_to_plot
import numpy as np
import matplotlib.pyplot as plt

准备数据

每个项目的数据准备不一样,可以是在线数据,也可以是本地数据,具体略过。
数据结构为时间和值,Prophet 格式形式为 ds 和 y。

数据粒径和数据集尺寸

Prophet 非常适合做周期数据,也适应多种粒径,所以无需担心他无法识别小时或者日的尺度,
还有因为他适合做周期数据,因此给数据集时,应给他至少一个周期的数据,不然预测出来效果差很多。
比如同一个站点,同一个因子,给一个月的数据集和一年的数据集结果分别如下图所示:
一个月的数据集预测结果
Figure_5.png
一年的数据结果
Figure_2.png

由上面 2 个图可以看出,完全是天差地别,也能看出这个模型非常厉害,处理周期波动数据非常精准,在一年的尺度下准确的预测了 4 月后水质将继续升高,并没有被短期下降数据而干扰。

原始数据集预览

综上,我们选择一年的数据集,开始预测。原始数据如下:

可以看到数据集质量一般,这也是实际生成环境中的数据,但是 Prophet 能够识别异常值,不用担心他会报错。

模型搭建预览结果

模型接口非常简单,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 初始化Prophet模型  
model = Prophet()
# 拟合模型
model.fit(df)
# 定义未来预测的时间段,例如预测未来7天的水质
future = model.make_future_dataframe(periods=7) # 7天预测期
future.tail() # 查看预测数据框的末尾几行以确认预测时间段
# 进行预测
forecast = model.predict(future)
# 绘制预测结果
fig1 = model.plot(forecast)
plt.title('Water Quality Prediction')
plt.show()
# 添加变化点到图表中(如果需要)
fig2 = model.plot(forecast)
ax = fig2.gca()
add_changepoints_to_plot(ax, model, forecast)
plt.title('Water Quality Prediction with Changepoints')
plt.show()
# 打印预测数据框查看预测详情
print(forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']])

预测结果为图 2 所示,变化点如下图,模型将每次突变点都标记出来了。
Figure_3.png

预测结果 forecast
image.png

结束语

相比 arima,Prophet 更加简单易用,且成熟接口更多,出图预览更方便,本文还没有对添加节假日进行测试,但已经非常够用了。
对比 LSTM,预测时间少非常多,配置也更简单,真的很不错,如果有兴趣可以深入尝试。

相关文章

ARIMA时间序列模型水质预测应用

pexels-pixabay-50677.jpg


prophet时间序列模型水质预测应用
https://maoyu92.github.io/2024/05/13/01 时间序列/prophet时间序列模型水质预测应用/
作者
陈文茂
发布于
2024年5月13日
许可协议