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

news2024/11/26 4:39:05

前言

此前已经分析了,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,预测时间少非常多,配置也更简单,真的很不错,如果有兴趣可以深入尝试。 
如果有帮助请关注我,点赞收藏支持下。我的微信公众号是[环境猫er],目前关注的人不多,请支持下,谢谢。

python 水质日历热力图_python日历热力图-CSDN博客

python 数据整理与清洗 在水质自动监测数据分析中的应用CSDN博客ChatGPT python 实现水环境可视化_-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1671584.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI算法-高数5.2-线性代数-向量间的线性相关、无关定义和结论

宋浩老师课程:3.2 向量间的线性关系(二)_哔哩哔哩_bilibili 线性相关、不相关结论: 判断线性有关\无关,转化成方程组: 判断条件> 向量线性相关、无关的本质是:除0外能不能找到非0的数据。

【吊打面试官系列】Java高并发篇 - 如何创建守护线程?

大家好,我是锋哥。今天分享关于 【如何创建守护线程?】面试题,希望对大家有帮助; 如何创建守护线程? 使用 Thread 类的 setDaemon(true)方法可以将线程设置为守护线程,需要注意的是,需要在调用 …

代码缺陷扫描神器——FindBugs

FindBugs目前,主要有三种形式使用,GUI形式、插件形式、Ant脚本形式,在这里只讲述FindBugs作为插件,在Android Studio中的应用。 目录 一、FindBugs基础知识 二、FindBugs使用进阶 网络安全学习路线 (2024最新整理&am…

nginx目录枚举修复手册

nginx目录枚举修复手册 漏洞背景 修复方式: ssh zujian2 sudo vi /data/apps/nginx/conf/conf.d/default.conf server {

软件测试,功能测试转测开容易吗?

一、从这个问题,我能读出一些信息如下: 1、不知道您从事测试工作多久了,可以看出您特别羡慕测试开发工程师; 2、 您可能一直从事功能测试工作,工作模式或大环境下,被中了草,想学习测试开发相关…

动手学深度学习18 预测房价竞赛总结

动手学深度学习18 预测房价竞赛总结 李沐老师代码AutoGluonh2o集成学习automlQA 视频: https://www.bilibili.com/video/BV15Q4y1o7vc/?vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 代码: https://www.bilibili.com/video/BV1rh411m7Hb/?vd_sourceeb04…

[C++核心编程-09]----C++类和对象之继承

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

python内置函数exec()和eval()区别

在Python中,eval() 和 exec() 都是内置函数,用于执行存储在字符串或对象中的Python代码,但它们之间也有一些区别。 eval() 语法:eval(expression, globalsNone, localsNone) expression:需要求值的字符串表达式。可…

【C++】 string类:应用与实践

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

自定义类型——结构体、枚举和联合

自定义类型——结构体、枚举和联合 结构体结构体的声明匿名结构体结构体的自引用结构体的初始化结构体的内存对齐修改默认对齐数结构体传参 位段枚举联合 结构体 结构是一些值的集合,这些值被称为成员变量,结构的每个成员可以是不同类型的变量。 数组是…

Python爬虫入门:网络世界的宝藏猎人

今天阿佑将带你踏上Python的肩膀,成为一名网络世界的宝藏猎人! 文章目录 1. 引言1.1 简述Python在爬虫领域的地位1.2 阐明学习网络基础对爬虫的重要性 2. 背景介绍2.1 Python语言的流行与适用场景2.2 网络通信基础概念及其在数据抓取中的角色 3. Python基…

线性表(2)

第二章、线性表(linear list) 线性表是第一个数据结构,再提一遍,学习一个具体的数据结构需要关注它的逻辑结构,物理结构和数据的运算,即三要素。 2.1、线性表的定义和基本操作 线性表的定义 需要注意的是…

如文所示:

影响 ConnectWise 的 ScreenConnect 远程桌面访问产品的严重漏洞已被广泛利用来传播勒索软件和其他类型的恶意软件。 ConnectWise 于 2 月 19 日通知客户,它已发布针对关键身份验证绕过缺陷和高严重性路径遍历问题的补丁。该安全漏洞当时没有 CVE 标识符。第二天&am…

Windows2016系统禁止关闭系统自动更新教程

目录 1.输入cmd--适合系统2016版本2.输入sconfig,然后按回车键3.输入5,然后按回车键4.示例需要设置为手动更新,即输入M,然后按回车键 1.输入cmd–适合系统2016版本 2.输入sconfig,然后按回车键 3.输入5,然后…

前端铺子-uniapp移动端:跨平台开发新篇章

一、引言 在移动应用开发领域,随着技术的不断进步,用户对应用的需求也日益多样化。如何快速、高效地开发跨平台应用成为了前端开发者面临的一大挑战。uni-app作为一款使用Vue.js开发所有前端应用的框架,凭借其一次编写、多端运行的特性&…

栈和队列的基础知识,C语言实现及经典OJ题

基础知识 一.栈 1.栈的概念 定义:堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。 压栈:向一个栈插入新…

爆款小红书免费流量体系课程(两周变现),小红书电商教程

课程下载:小红书电商教程-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载:关注我。 课程内容: 10-爆款标题(三段式取标题).mp3 11-爆款封面怎么作图.mp3 12-爆款内容的模板(三段式模板).mp3 13-小红书流量推荐背后的秘密(四大流…

【深度学习】探秘PSD:合成到真实去雾框架的实例解析

揭秘PSD:合成到真实去雾框架的革新 一、PSD框架的提出背景二、PSD框架的原理与网络结构三、PSD框架的实现与代码示例四、结论与展望 在图像处理领域,去雾技术一直是一个备受关注的研究热点。然而,传统的去雾方法在面对真实世界的模糊图像时&a…

UDP和TCP协议比较,TOE技术

如今在某些方面TCP超越UDP的主要原因如下 在硬件层面的TOE(TCP Offload Engine)功能,将越来越多的TCP功能卸载到网卡上。它极大地提升了TCP的性能,使其在高吞吐量场景下的表现更为出色。近年TCP的拥塞控制算法实现了显著进步。这些新算法显著提高了TCP在…

设计模式3——简单工厂模式

简单工厂模式 简单工厂模式是工厂方法模式的衍生,实现起来较容易,也是一种创建型模式。 目录 一、简短概述 二、优缺点 三、使用过程 四、举例 一、简短概述 当有一堆相似的对象需要被创建时,可以使用一个简单工厂去管理如何创建它们&…