文章目录
adtk简介
智能运维数据基本上都是时间序列形成的,时间序列数据的异常检测是风控算法的重要组成部分,而可以调用ADTK库完成基本的算法,和大家分享该库的使用。
adtk(Anomaly Detection Toolkit)是无监督异常检测的python工具包,它提供常用算法和处理函数:
- 简单有效的异常检测算法
- 异常特征加工
- 处理流程控制
安装:
pip install sdtk
数据要求
时间序列的数据主要包括时间和相应的指标(cpu,内存等),python做数据分析一般都是pandas 的DataFrame,adtk要求输入数据的索引必须是DateimeIndex。
pandas提供了时间序列的时间生成和处理方法。
时间生成:
-
pd.date_range
-
pd.Timestamp
时间处理:
- pd.to_datetime
adtk提供是validate_series来验证时间序列数据的有效性,如是否按时间顺序
import pandas as pd
from adtk.data import validate_series
from adtk.visualization import plot
df=pd.read.read_csv('./data/nyc_taxi.csv', index_col="timestamp", parse_dates=True)
df = validate_series(df)
plot(df)
异常特征加工
时间序列特征加工方法包括:
1,对滑动窗口中的数据进行特征统计
2,对季节性趋势做分解,区分哪些是季节性的部分,哪些是趋势的部分
3,时间序列降维映射:主要应用于多维度时间序列
1.滑动窗口
adtk提供单个宽口RollingAggregate和2个窗口DoubleRollingAggregate的滑动方式。统计特征支持均值,中位数,汇总,最大值,最小值,分位数, 方差,标准差,偏度,峰度,直方图 等,[‘mean’, ‘median’, ‘sum’, ‘min’, ‘max’, ‘quantile’, ‘iqr’, ‘idr’, ‘count’, ‘nnz’, ‘nunique’, ‘std’, ‘var’, ‘skew’, ‘kurt’, ‘hist’]其中
‘iqr’: 是分位数 75% 和 25%差值
‘idr’: 是分位数 90% 和 10%插值
- RollingAggregate
import pandas as pd
from adtk.data import validate_series
from adtk.transformer import RollingAggregate
from adtk.transformer import DoubleRollingAggregate
s = pd.read_csv('./data/nyc_taxi.csv', index_col="timestamp", parse_dates=True)
s = validate_series(s)
s_transformed = RollingAggregate(agg='quantile',agg_params={"q": [0.25, 0.75]}, window=5).transform(s)
- DoubleRollingAggregate
计算两个窗口之间统计特征之间的差异特征,如前5分钟和后5分钟,均值的差值等。特征的二次加工和利用,参数diff主要衡量差距的函数:
import pandas as pd
from adtk.data import validate_series
from adtk.transformer import DoubleRollingAggregate
s = pd.read_csv('./data/ec2_cpu_utilization_53ea38.csv', index_col="timestamp"