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\]))

相关文章
|
27天前
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
567 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
在现代数据分析中,高维时间序列数据的处理和预测极具挑战性。基于矩阵分解的长期事件(MFLEs)分析技术应运而生,通过降维和时间序列特性结合,有效应对大规模数据。MFLE利用矩阵分解提取潜在特征,降低计算复杂度,过滤噪声,并发现主要模式。相比传统方法如ARIMA和深度学习模型如LSTM,MFLE在多变量处理、计算效率和可解释性上更具优势。通过合理应用MFLE,可在物联网、金融等领域获得良好分析效果。
132 0
使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
|
3月前
|
数据采集 数据可视化 数据挖掘
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
本文探讨了金融资产波动率建模中的三种主流方法:GARCH、GJR-GARCH和HAR模型,基于SPY的实际交易数据进行实证分析。GARCH模型捕捉波动率聚类特征,GJR-GARCH引入杠杆效应,HAR整合多时间尺度波动率信息。通过Python实现模型估计与性能比较,展示了各模型在风险管理、衍生品定价等领域的应用优势。
513 66
金融波动率的多模型建模研究:GARCH族与HAR模型的Python实现与对比分析
|
2月前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
3月前
|
数据可视化 算法 数据挖掘
Python时间序列分析工具Aeon使用指南
**Aeon** 是一个遵循 scikit-learn API 风格的开源 Python 库,专注于时间序列处理。它提供了分类、回归、聚类、预测建模和数据预处理等功能模块,支持多种算法和自定义距离度量。Aeon 活跃开发并持续更新至2024年,与 pandas 1.4.0 版本兼容,内置可视化工具,适合数据探索和基础分析任务。尽管在高级功能和性能优化方面有提升空间,但其简洁的 API 和完整的基础功能使其成为时间序列分析的有效工具。
142 37
Python时间序列分析工具Aeon使用指南
|
4月前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
255 73
|
3月前
|
机器学习/深度学习 运维 数据可视化
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
157 16
Python时间序列分析:使用TSFresh进行自动化特征提取
|
4月前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现智能食品消费偏好预测的深度学习模型
使用Python实现智能食品消费偏好预测的深度学习模型
194 23
|
4月前
|
机器学习/深度学习 数据采集 供应链
使用Python实现智能食品消费需求分析的深度学习模型
使用Python实现智能食品消费需求分析的深度学习模型
132 21
|
4月前
|
机器学习/深度学习 数据采集 数据挖掘
使用Python实现智能食品消费模式预测的深度学习模型
使用Python实现智能食品消费模式预测的深度学习模型
127 2