首页 > 其他分享 >prophet时间序列模型水质预测应用

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

时间:2024-05-25 15:33:28浏览次数:30  
标签:预测 prophet 模型 forecast 水质 Prophet 序列 model 数据

前言

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

Prophet 简介

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

Prophet 模型特点

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

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

Prophet python 安装

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

pip install prophet

image.png

Python Prophet 实践

环境准备

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 能够识别异常值,不用担心他会报错。

模型搭建预览结果

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

# 初始化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,预测时间少非常多,配置也更简单,真的很不错,如果有兴趣可以深入尝试。

相关文章

{% post_link 'ARIMA时间序列模型水质预测应用' %}
pexels-pixabay-50677.jpg

标签:预测,prophet,模型,forecast,水质,Prophet,序列,model,数据
From: https://www.cnblogs.com/chenwenmao/p/18212473

相关文章

  • ARIMA时间序列模型水质预测应用
    ARIMA时间序列模型简介时间序列是研究数据随时间变化而变化的一种算法,是一种预测性分析算法。它的基本出发点就是事物发展都有连续性,按照它本身固有的规律进行。ARIMA(p,d,q)模型全称为差分自回归移动平均模型(AutoregressiveIntegratedMovingAverageModel,简记ARIMA).......
  • 算法学习笔记——动态规划.最长上升/下降子序列 2024.5.24
    LanqiaoOJ 773这道题是一道动态规划的题目,主要考察最长上升/下降子序列,难度中等,但是对思维的考察比较重要,特别是如何解决其第二问题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以......
  • 数据子序列
    Description输入一个长度为n的整数序列(A1,A2,……An),从中找出一段连续的长度不超过m的子序列,使得这个子序列的和最大。Input有多组测试数据。对于每组测试数据的第一行,包含二个整数n和m,表示本组有n个测试数据,子序列长度为m,下一行为n个测试数据。Output对于每组测试数据,输出最......
  • P8765 [蓝桥杯 2021 国 AB] 翻转括号序列
    本文参考博客[蓝桥杯2021国AB]翻转括号序列(线段树上二分)一、问题简析线段树+二分初步分析令(的值为1,)的值为-1,则对于序列\(a_La_{L+1}a_{L+2}...a_R\),其为合法序列的条件为\[\begin{cases}\sum_{n=L}^R{a_n}=0\\\forall~k\in[L,R],\sum_{n=L}^k{a_n}\ge......
  • InfoTS: 具有信息感知增强的时间序列对比学习《Time Series Contrastive Learning wit
    现在是2024年5月23日,14:30,开始看论文。论文:TimeSeriesContrastiveLearningwithInformation-AwareAugmentations或者是:Timeseriescontrastivelearningwithinformation-awareaugmentationsGitHub:https://github.com/chengw07/InfoTSAAAI2023的论文。 摘要近年......
  • SCAU 19523 最长上升子序列长度
    19523 最长上升子序列长度时间限制:1000MS 代码长度限制:10KB题型:编程题   语言:不限定Description当元素ai1<ai2<……<aiK。就说这个序列是有序上升的。给定序列(a1,a2,……,aN),存在许多这样的子序列(ai1,ai2,……,aiK),其中1<=i1<i2<……<iK......
  • 优美子序列 题解
    有n个整数从左往右排成一行,构成一个序列a。如果通过删除原序列的若干个数(可以是删除0个),其他数保持位置不动,那么得到的序列就称为“子序列”。记sum表示序列a的所有数的总和,即sum=a[1]+a[2]+a[3]+...+a[n]。如果一个“子序列”的各个数加起来的和等于sum-1,那么这个“子序列”......
  • 类转词典 转json 序列化 魔术方法
      classTest:def__init__(self,totals,uniques,pre):self.totals=totalsself.uniques=uniquesself.cumulative_sum=totalsifpre:self.cumulative_sum+=pre.cumulative_sumpre=Test(......
  • NFLS NOI模拟 序列
    涉及知识点:分治、贪心前言没错……又是一道叫序列的题……题意有一个长为\(n\(\leq10^5)\)的序列\(a\),你可以花费\(x^2\)的代价将\(a_i\)变成\(a_i+x\),使得代价加上\(a\)两两数之差的绝对值乘以一个给定常数\(c\)的总和最小。思路拿到手觉得是一个贪心,但是直接......
  • DeepMTS深度学习神经网络多元时间序列预测宏观经济数据可视化|附数据代码
    原文链接:https://tecdat.cn/?p=36237原文出处:拓端数据部落公众号在数据科学领域,时间序列分析一直是一个至关重要的研究方向,尤其在金融、气象、医学以及许多其他科学和工业领域中,准确的时间序列预测对于制定策略、政策规划以及资源管理都具有极其重要的意义。随着技术的不断进步,......