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

相关文章
|
9月前
|
机器学习/深度学习 数据采集 数据挖掘
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
基于 GARCH -LSTM 模型的混合方法进行时间序列预测研究(Python代码实现)
325 2
|
7月前
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
581 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
8月前
|
数据采集 数据可视化 安全
基于python大数据的天气可视化分析预测系统
本研究探讨基于Python的天气预报数据可视化系统,旨在提升天气数据获取、分析与展示的效率与准确性。通过网络爬虫技术快速抓取实时天气数据,并运用数据可视化技术直观呈现天气变化趋势,为公众出行、农业生产及灾害预警提供科学支持,具有重要的现实意义与应用价值。
|
8月前
|
机器学习/深度学习 数据采集 并行计算
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合研究(Python代码实现)
904 2
|
11月前
|
存储 机器学习/深度学习 人工智能
稀疏矩阵存储模型比较与在Python中的实现方法探讨
本文探讨了稀疏矩阵的压缩存储模型及其在Python中的实现方法,涵盖COO、CSR、CSC等常见格式。通过`scipy.sparse`等工具,分析了稀疏矩阵在高效运算中的应用,如矩阵乘法和图结构分析。文章还结合实际场景(推荐系统、自然语言处理等),提供了优化建议及性能评估,并展望了稀疏计算与AI硬件协同的未来趋势。掌握稀疏矩阵技术,可显著提升大规模数据处理效率,为工程实践带来重要价值。
545 58
|
11月前
|
机器学习/深度学习 人工智能 PyTorch
200行python代码实现从Bigram模型到LLM
本文从零基础出发,逐步实现了一个类似GPT的Transformer模型。首先通过Bigram模型生成诗词,接着加入Positional Encoding实现位置信息编码,再引入Single Head Self-Attention机制计算token间的关系,并扩展到Multi-Head Self-Attention以增强表现力。随后添加FeedForward、Block结构、残差连接(Residual Connection)、投影(Projection)、层归一化(Layer Normalization)及Dropout等组件,最终调整超参数完成一个6层、6头、384维度的“0.0155B”模型
606 11
200行python代码实现从Bigram模型到LLM
|
8月前
|
算法 安全 新能源
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)
672 0
|
9月前
|
机器学习/深度学习 算法 调度
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
【切负荷】计及切负荷和直流潮流(DC-OPF)风-火-储经济调度模型研究【IEEE24节点】(Python代码实现)
418 0
|
8月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1325 102

推荐镜像

更多