z-score 的基础概念
这种方法基于原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。
将A的原始值x使用z-score标准化到x’,
x′=x−μδ ,μ为数据的均值, δ为方差。
z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。
将数据按其属性(按列进行)减去其均值,然后除以其方差。
最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。
Python使用平滑移动+z-score进行时序数据的异常值检测 (调参总结见代码注释及后续结果输出)
# -*- coding: utf-8 -*-
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import math
def smoothed_z_score_test(data):
""" 一点调参总结
平滑z-score 测试
:param y: 原DataFrame的数据列
:param lag: 滞后数(初始滑动窗口大小) , 建议设置为业务线的循环周期需要的天数, 看业务线的周期规律——估算出回归周期,乘上系数; 按天变化的设置为7*4天, 按周的设置为7*4*4天, 等
:param threshold: 阈值 = 当前值超出前面所有的值的平均水平的绝对值 除以 前面所有的值的标准差的倍数 的上限, 建议2倍
:param influence: 平滑系数,发生异常点时使用的平滑系数,(0,1),值越大越受当前值的影响,