使用Python进行异常检测

时间:2019-04-11 19:19:16

标签: python machine-learning data-science anomaly-detection

我必须创建这种机制:我有一个数据集,其中包含Git存储库的统计信息(例如,每天的提交数,每天编辑的代码行数,等等。不超过4或5个字段)。我必须使用异常检测算法来分析此数据集,并在检测到与正常值不同的值时发出警报。

例如:我每天结束时启动此算法,如果这一天的提交次数比平时多,则必须触发警报。

我必须用Python实现这个系统。

根据我在互联网上所读到的内容,要使该系统成为可能,您需要使用无监督机器学习。 在过去的几个月中,我一直在学习机器学习课程,并且知道如何使用Python库的Sklearn(有点)。但是我不是真正的机器学习专家,也不知道该怎么办。 不幸的是,在互联网上,我只能找到非常理论的教程(由数据科学家编写),而且我不理解我在实践中必须要做的事情。

有人可以建议我做什么和使用什么吗?

是否有解决我问题的简单方法? 谢谢。

2 个答案:

答案 0 :(得分:1)

检测异常/异常值的简单方法是使用集中趋势的度量,前提是给定的方式在正态分布的条件下。

import numpy as np

inputs = list(map(int, input().rstrip().split()))
print('inputs = ', inputs)
print('---------------')

mean = np.mean(inputs)
std = np.std(inputs)
print('mean = {0} \nstd = {1}'.format(mean, std))
print('---------------')

thresh = float(input('Input threshold ? '))
print('---------------')

for i in range(len(inputs)):
    if inputs[i] > (mean + thresh*std) or inputs[i] < (mean - thresh*std):
        print('{0} is an outlier '.format(inputs[i]))
    else:
        print('{0} is not an outlier '.format(inputs[i]))

输出:

-998 1989 67624 -178187817 -9876 179827863
inputs =  [-998, 1989, 67624, -178187817, -9876, 179827863]
---------------
mean = 283130.8333333333 
std = 103350924.95590967
---------------
Input threshold ? 1.5
---------------
-998 is not an outlier 
1989 is not an outlier 
67624 is not an outlier 
-178187817 is an outlier 
-9876 is not an outlier 
179827863 is an outlier 

答案 1 :(得分:0)

在数据上建立Gaussian Mixture ModelIsolation Forest模型,并为要考虑的异常选择阈值。

与所有此类问题一样,召回率和精确度之间需要权衡。为了评估您的解决方案,您应该通过检查识别一些异常并将其标记为异常。然后,这些可以成为您的验证和测试集中的一部分。训练集将不包含异常(或仅包含少量异常)。