PYTHON中用PROPHET模型对天气时间序列进行预测与异常检测

简介: PYTHON中用PROPHET模型对天气时间序列进行预测与异常检测

方法

Prophet异常检测使用了Prophet时间序列预测。基本的Prophet模型是一个可分解的单变量时间序列模型,结合了趋势、季节性和节假日效应。该模型预测还包括一个围绕估计的趋势部分的不确定性区间。另外,完全的贝叶斯推断也可以以增加计算量为代价。然后,不确定性区间的上限和下限值可以作为每个时间点的离群点阈值。首先,计算从观测值到最近的不确定度边界(上限或下限)的距离。如果观察值在边界内,离群点得分等于负距离。因此,当观测值与模型预测值相等时,离群点得分最低。如果观察值在边界之外,得分等于距离测量,观察值被标记为离群点。然而,该方法的一个主要缺点是,当新的数据进来时,你需要重新调整模型。这对于具有实时检测的应用来说是不可取的。

数据集

这个例子使用了地球化学研究所记录的天气时间序列数据集。该数据集包含14个不同的特征,如空气温度、大气压力和湿度。这些都是在2003年开始,每10分钟收集一次。我们只使用2009年至2016年期间收集的数据。

import matplotlib.pyplot as plt
import numpy as np
import os
import pandas as pd
import tensorflow as tf

加载数据集

df = pd.read\_csv(csv\_path)
df\['Date Time'\] = pd.to_datetime(df\['Date Time'\], format='%d.%m.%Y %H:%M:%S')
df.head()

选择子集来测试Prophet模型。

``````
n_prophet = 10000

Prophet模型需要得到一个有两列的DataFrame:一列名为ds,包含时间戳,一列名为y,包含要评估的时间序列。我们只看温度数据。

print(df_T.shape)
df_T.head()

plt.plot(df\_T\['ds'\], df\_T\['y'\])

加载或定义离群检测

你可以将预训练的模型保存在本地目录的文件路径中,并加载检测模型。或者,你也可以从头开始训练一个检测模型。

filepath = 'my_path'  # 改为下载模型的目录
if outlier_detector:  # 加载预训练的离群检测器
    filepath = os.path.join(filepath, detector_name)
else:  # 初始化、拟合并保存离群检测
    od.fit(df_T)

请查看文档以及原始的Prophet文档,了解如何定制基于Prophet的异常值检测器,并添加季节性因素、假期、选择饱和逻辑增长模型或应用参数正则化。

预测测试数据中的异常值

定义测试数据。重要的是,测试数据的时间与训练数据一致。下面我们通过比较测试数据框的前几行和训练数据框的最后几行来检查这一点。

df\_T\_test = pd.DataFrame(data=d)

df_T.tail()

预测测试数据的异常值。

predict(
    df\_T\_test
)

结果可视化

我们可以用Prophet将我们的预测结果可视化。包括历史预测。

model.predict(future)
model.plot(forecast)

我们还可以绘制预测中不同成分的细分。预测的不确定性区间是由外推趋势的MAP估计值决定的。

plot_component(forecast)

很明显,我们对未来的预测越远,决定离群值阈值的不确定性区间就越大。

让我们把实际数据与离群点阈值的上限和下限预测值叠加起来,检查我们预测的离群点在哪里。

plot(x='ds', y=\['y', 'yhat', 'yhat\_upper', 'yhat\_lower'\])

异常点的得分和预测。

np.zeros(n_periods)
plot(x='ds', y=\['score', 'threshold'\])

当我们进一步预测未来时,随着不确定性的增加,离群点的分数自然呈下降趋势。

让我们来看看一些个别的离群值。

outlier = fcst.loc\[fcst\['score'\] > 0\]
print((outlier.shape\[0\]))

相关文章
|
3天前
|
Python
python对象模型
这篇文章介绍了Python中的对象模型,包括各种内置对象类型如数字、字符串、列表、字典等,以及如何使用`type()`函数来查看变量的数据类型。
|
3天前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能森林火灾预警系统
使用Python实现深度学习模型:智能森林火灾预警系统
25 5
|
3天前
|
机器学习/深度学习 分布式计算 大数据
几行 Python 代码就可以提取数百个时间序列特征
几行 Python 代码就可以提取数百个时间序列特征
|
1天前
|
机器学习/深度学习 PHP 开发者
探索PHP中的面向对象编程构建你的首个机器学习模型:以Python和scikit-learn为例
【8月更文挑战第30天】在PHP的世界中,面向对象编程(OOP)是一块基石,它让代码更加模块化、易于管理和维护。本文将深入探讨PHP中面向对象的魔法,从类和对象的定义开始,到继承、多态性、封装等核心概念,再到实战中如何应用这些理念来构建更健壮的应用。我们将通过示例代码,一起见证PHP中OOP的魔力,并理解其背后的设计哲学。
|
2天前
|
机器学习/深度学习 数据采集 Python
利用Python实现简单的线性回归模型
【8月更文挑战第29天】本文将引导你了解并实践如何使用Python编程语言实现一个简单的线性回归模型。我们将通过一个实际的数据集,一步步地展示如何进行数据预处理、建立模型、训练及评估模型性能。文章旨在为初学者提供一个易于理解且实用的编程指南,帮助他们快速入门机器学习领域。
|
3天前
|
机器学习/深度学习 数据采集 传感器
使用Python实现深度学习模型:智能水质监测与管理
使用Python实现深度学习模型:智能水质监测与管理
15 1
|
1天前
|
JSON IDE API
探索Python编程:打造你的第一个天气查询工具
【8月更文挑战第30天】在这篇文章中,我们将一起踏上Python编程的奇妙旅程,从零基础开始,逐步构建出属于自己的天气查询工具。文章将引导你了解Python语言的魅力,通过实际的项目操作,让你体验到编程的乐趣和成就感。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供宝贵的经验和知识。让我们一起探索代码的世界,解锁新技能,让技术改变生活!
|
3天前
|
机器学习/深度学习 数据采集 人工智能
深入浅出:用Python打造你的第一个机器学习模型
【8月更文挑战第28天】在数字浪潮汹涌的今天,机器学习不再是高不可攀的技术。本文将通过Python这把钥匙,解锁机器学习的大门。无论你是编程新手,还是想探索AI奥秘的好奇者,都能在这里找到入门的路径。我们将一起搭建一个简单的线性回归模型,并理解背后的数学原理。准备好了吗?让我们开始吧!
|
3天前
|
SQL Shell API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
python Django教程 之 模型(数据库)、自定义Field、数据表更改、QuerySet API
|
4天前
|
机器学习/深度学习 数据采集 测试技术
利用Python实现简单的机器学习模型软件测试的艺术与科学:探索自动化测试框架的奥秘
【8月更文挑战第27天】在本文中,我们将一起探索如何通过Python编程语言创建一个简单的机器学习模型。我们将使用scikit-learn库中的线性回归模型作为示例,并通过一个实际的数据集来训练我们的模型。文章将详细解释每一步的过程,包括数据预处理、模型训练和预测结果的评估。最后,我们会用代码块展示整个过程,确保读者能够跟随步骤实践并理解每个阶段的重要性。
下一篇
云函数