Netflix异常检测工具Surus初探
Surus简介
Surus是NetFlix开源的UDFs,是基于pig和hive的数据分析工具。Surus中的功能能够解决多种多样的问题,例如评分预测模型、异常检测与模式匹配等。目前开源的UDF功能主要包括两个,包括ScorePMML和Robust Anomaly Detection (RAD)。
ScorePMML
预测模型的应用随处可见,然而这些应用都不相同,唯独相同的是模型的创建和部署是相同的。PMML是一个开源的预测模型标记语言,ScorePMML中利用PMML作为一种标准解决自定义评分方法在hadoop环境中的扩散问题。
RobustAnomaly Detection (RAD)
RAD主要用于异常检测,尤其是大数据集异常检测。RAD利用Robust Principal Component Analysis (RPCA) 算法检测异常。RPCA通过反复迭代计算SVD(SingularValue Decomposition),并将每次计算的奇异值和误差作为阈值来标识低等级的代表(a low rank representation)、 随机噪声和异常值。此算法已打包成一个pig的UDF,只需在pig代码中增加一些代码就可以调用此方法。
RAD在Netflix有两个重要的应用场景,并取得了重大的成功:
- 场景一:Netflix利用RAD在银行级别的支付网络故障中检测异常。
- 场景二:网站的注册流程也是一个重要的应用场景。全世界的用户通过上百种浏览器和设备进行注册。当用户注册出现问题时,工程师能够通过识别用户使用不同设备与浏览器的组合及时查明原因帮助用户解决问题。
Robust PCA简介
PCA
主成分分析(PCA)可以有效的找出数据中最重要的元素和结构,去除噪音和冗余,能将原有的复杂数据进行降维。最简单的主成分分析方法就是PCA,从线性代数的角度看,PCA的目标就是使用另一组基去重新描述得到的新的数据空间,通过这组新的基,能揭示与原有的数据间的关系,即这个维度最重要的“主元”。PCA的目标就是找到这样的“主元”,最大程度的去除冗余和噪音的干扰。
Robust PCA
与经典PCA一样,Robust PCA(鲁棒主成分分析)本质上也是寻找数据在低维空间上的最佳投影问题。当观测数据较大时,PCA无法给出理想的结果,而Robust PCA能够从较大的且稀疏噪声污染的观测数据中恢复出本质上低秩的数据。Robust PCA考虑的是这样一个问题:一般的数据矩阵D包含结构信息,也包含噪声。那么可以将这个矩阵分解为两个矩阵相加:D = A + E,A是低秩的(由于内部有一定的结构信息造成各行或列间是线性相关的),E是稀疏的(含有噪声,则是稀疏的),则Robust PCA可以写成以下的优化问题:
$$\min _{A, E} \quad \text{rank}(A)+\lambda\|E\|_{0} \quad \text{s.t.} \quad A+E=D$$
由于rank和L0范数在优化上存在非凸和非光滑特性,所以一般将这个NP问题转换成求解一个松弛的凸优化问题:
$$\min _{A, E}\|A\|_{*}+\lambda\|E\|_{1,1} \quad \text {s.t.} \quad A+E=D$$
Robust PCA主要用于解决以下特征定义的问题:
- 高纬度。数据集纬度高,数据间相互交织,人工检测基本不可能。
- 最低假阳性。作为异常检测问题,我们不希望有过多的假阳性报警来干扰监控人员。
- 周期性。每小时/每天/每周/每月这样的周期性数据如果不妥善处理,某些周期性的行为可能误报为异常。实际数据中,每天固定时段的峰值数据相对于大部分采样点都可能被判定为异常,但实际为周期性正常现象。
- 数据并不是均匀分布的。像Netflix在两年中实现了高增长,算法需要足够健壮来处理非均匀分布的数据集(增长性数据是一个普遍现象,如长期来看的股市指数等)。
对于低秩数据观测矩阵D,假如D受到随机(稀疏)噪声的影响,则D的低秩性就会破坏,使D变成满秩的。所以就需要将D分解成包含其真实结构的低秩矩阵A和稀疏噪声矩阵E之和。找到了低秩矩阵,实际上就找到了数据的本质低维空间,那么Robust PCA的Robust在哪呢?因为PCA前提假设的数据的噪声是高斯的,对于大的噪声或者严重的离群点,PCA会被它影响,导致其无法正常工作。而Robust PCA则不存在这个假设(Robust PCA假设噪声是稀疏的,而不管噪声的强弱)。
Surus的使用
1、下载源码,进入Surus的主目录进行编译,执行命令mvn clean package。命令执行成功之后会在Surus根目录中出现一个target文件夹,进入target文件夹中会有一个surus-xxx.jar的jar包。
3、将surus-xxx.jar放在pig/hive的lib目录中,并且将surus-xxx.jar导入到运行环境中。例如,在pig脚本中将surus-xxx.jar注册到运行环境中,代码为:REGISTER surus-xxx.jar
参考链接:
Related posts: