前言
本文主要记录使用时间序列模型进行预测及异常值检测的相关笔记
1. 简介
在数据分析中,常常有根据时间变化而变化的数据,这时难免会出现一些异常数据,比如突然增大、突然变小等情况,此时我们就可以使用Facebook提出的Prohpet算法进行异常值检测。这个方法主要是激昂数据波动情况拟合值的置信区间作为判断是否为异常值的上下界。本文将利用此算法在一个数据集上进行检测。
2. 步骤
本次判断的异常值主要为PM2.5的浓度变化随时间变化情况,并判断异常值。下面是具体步骤:
1、首先我们读入数据,将数据存储到一个时序数据变量中,然后输出时间序列数据的波动情况;
2、通过时序数据获得时序数据拟合模型,然后对数据变化趋势和波动情况进行拟合(其中包含了默认置信度95%下的上下界);
3、通过第2步获得的置信区间的上下界,来确定样本中那些数据为异常值,并赋值新建的一个变量。最后根据第2步获得的预测值与第3步获得的异常值还有原始数据进行可视化。
计算某一列值从第一行到当前行的累计和
表table1中有id列和num列,计算从第一行的num值到当前行的num值累计和。
3. 代码
import matplotlib
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pmdarima as pm
from fbprophet import Prophet
matplotlib.rcParams['axes.unicode_minus'] = False
# 解决图像显示中文的问题
sns.set(font="Kaiti", style="ticks", font_scale=1.4)
# 判断并返回异常值
def outlier_detection(forecast):
index = np.where((forecast["y"] <= forecast["yhat_lower"]) |
(forecast["y"] >= forecast["yhat_upper"]), True, False)
return index
if __name__