xt正常值,xt代表什么疾病

首页 > 实用技巧 > 作者:YD1662024-02-14 01:29:04

设置的阈值区间为:

xt正常值,xt代表什么疾病(9)

在计算出阈值区间之后,我们需要将当天的指标Xt和阈值上、下限进行比较,判断当天的指标是否超出阈值上、下限而被认定为异常值。也就是说,一旦今天的数值超过了阈值区间,就报警。

上述公式中k代表预警的敏感程度,k越大,触发系统进行预警的阈值就越高,预警就越不敏感。k越小,触发系统进行预警的阈值就越低,预警就越敏感。我们在日常的数据指标预警过程中,一般用k=2或者k=3的阈值进行预警。在正态分布k=2的情况下,某一个指标数值出现异常的概率小于大约5%(4.6%)。在k=3的情况下,某一个指标数值出现异常的概率小于0.3%。

案例 Panda公司异常值预警

Panda APP分析师对日常的数据进行监控和预警,以安卓老用户的ARPPU为例,我们构建一套异常值发现系统。Panda公司安卓老用户的ARPPU数据趋势如图所示:

xt正常值,xt代表什么疾病(10)

Excel操作:

μ是使用公式average(),σ是使用公式stdev(),阈值区间就是[average() - 3* stdev() , average() 3* stdev() ],用if条件判断当天数据是否落入区间。

过去一段时间最好是比较稳健,如果有不稳健的因素(如大促、周中周末的趋势)建议剔除或分批来做。

即使Excel简单易用,但也奉上Python代码,可以实现对周末和周中的分别预警。

Python代码

# 导入相关的模块 import datetime import pandas as pd import numpy as np # 画图 import matplotlib.pyplot as plt import seaborn as sns import matplotlib import chinese_calendar as calendar # 导入日历包 from chinese_calendar import is_holiday ##是否节假日

这里值得注意的是,我们导入了日历分析和节假日分析的包。这是因为在我们日常工作中,数据指标在节假日和工作日表现通常不一样,需要分别构建预警区间。如果没有calendar包,可以通过如下命令安装:

!pip install chinese_calendar

我们首先读入数据。

data = pd.read_csv("Desktop/探索性数据分析和数据预警.csv") # 读入数据,如果需要相关数据,请点赞、喜欢、关注并私信 data.info()

我们可以看到该数据集汇总有数十个字段,我们选择ARPPU_adr_old_pay进行构建指标预警区间(大家也可以用其他字段自行练习)。

读入数据以后,我们对数据的时间进行加工

data["date"] = pd.to_datetime(data.date) # 将数据转化为日期 data["is_holiday"] = data.date.apply(is_holiday) # 找出日期中的节假日

再构建预警函数

# 定义预警函数 def alarm(data, col, time_col="date", z_value=2): """ data :数据框 col :str,关注的指标列名 time_col:时间名 z_value: 标准差的倍数 """ data = data.copy() data = data.sort_values(time_col) data.index = data[time_col] # 按周工作日记周末分别构建预警期间 mu_weekday = data.loc[data.is_holiday == False, col].rolling(22).mean() std_weekday = data.loc[data.is_holiday == False, col].rolling(22).std() mu_weekend = data.loc[data.is_holiday == True, col].rolling(10).mean() std_weekend = data.loc[data.is_holiday == True, col].rolling(10).std() mu = pd.concat([mu_weekday, mu_weekend], 0) std = pd.concat([std_weekday, std_weekend], 0) up = mu z_value * std up = up.sort_index() down = mu - z_value * std down = down.sort_index() # 画图 fig = plt.figure(figsize=(15, 6)) matplotlib.rcParams["font.family"] = ["Heiti TC"] # 需要显示的是汉语 plt.plot(data[col], "k-") plt.plot(up, "k--", linewidth=0.8) plt.plot(down, "k--", linewidth=0.8) plt.fill_between(up.index, up, down, alpha=0.1) plt.xlim(data.index[32], data.index[-1]) alarm_date = data.index[(data[col] < down)] for i in alarm_date: plt.axvline(i, color="r", alpha=0.4) plt.title( "{}趋势及预警:标准{}$\delta $,预警{}次".format(col, z_value, len(alarm_date)), fontsize="x-large", ) plt.xticks(fontsize="x-large") plt.yticks(fontsize="x-large") return alarm_date, up, down

开始进行预警

alarm_date, up, down = alarm(data, "ARPPU_adr_old_pay", z_value=2)

我们可以看到,在2020年7月至9月,一共有4次下降预警。

xt正常值,xt代表什么疾病(11)

2. 四分位差法

统计学中,除了西格玛法则之外,还可以通过四分位差法判断数据指标是否发生异常。四分位差就是四分位极差,前文在介绍探索性数据分析的离中趋势指标时做过简单的介绍。这个指标也代表着数据的波动水平。

我们在前文中介绍中位数的时候也扩展介绍过百分位数的概念。如果将一组数据从小到大排序,并计算相应的累计百分位,则某一百分位所对应数据的值就称为这一百分位的百分位数。一组n个观测值按数值大小排列,处于p%位置的值称第p百分位数。

在所有的百分位数中,有三个百分位数需要特别注意,我们称之为四分位数。四分位数(Quartile)是统计学中特殊的一组百分位数,即把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值就是四分位数。

1) 第一四分位数(Q1),
又称“下四分位数”,等于该样本中所有数值由小到大排列后第25%的数字;
2) 第二四分位数(Q2)
即“中位数”,等于该样本中所有数值由小到大排列后第50%的数字;
3) 第三四分位数(Q3)
又称“上四分位数”,等于该样本中所有数值由小到大排列后第75%的数字。

第三四分位数(Q3)与第一四分位数(Q1)的差距称为四分位差,又称四分位距(IQR)。

IQR=Q3-Q1

在四分位差法中,异常值被定义为小于Q1-1.5IQR或大于Q3 1.5IQR的值。

数据分析师常使用的箱线图,就是四分位差法可视化体现。箱线图(Box-plot)又称为盒须图、盒式图,如图6-30所示既是一个箱线图的案例,在这个箱线图中左侧的数字代表一个变量的取值范围。在这个箱线图中,下边缘和上边缘分别为变量的Q1-1.5IQR和Q3 1.5IQR。一旦超出上边缘或下边缘,就认为数据是异常值。

xt正常值,xt代表什么疾病(12)

上一页1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.