我必须创建这种机制:我有一个数据集,其中包含Git存储库的统计信息(例如,每天的提交数,每天编辑的代码行数,等等。不超过4或5个字段)。我必须使用异常检测算法来分析此数据集,并在检测到与正常值不同的值时发出警报。
例如:我每天结束时启动此算法,如果这一天的提交次数比平时多,则必须触发警报。
我必须用Python实现这个系统。
根据我在互联网上所读到的内容,要使该系统成为可能,您需要使用无监督机器学习。 在过去的几个月中,我一直在学习机器学习课程,并且知道如何使用Python库的Sklearn(有点)。但是我不是真正的机器学习专家,也不知道该怎么办。 不幸的是,在互联网上,我只能找到非常理论的教程(由数据科学家编写),而且我不理解我在实践中必须要做的事情。
有人可以建议我做什么和使用什么吗?
是否有解决我问题的简单方法? 谢谢。
答案 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 Model或Isolation Forest模型,并为要考虑的异常选择阈值。
与所有此类问题一样,召回率和精确度之间需要权衡。为了评估您的解决方案,您应该通过检查识别一些异常并将其标记为异常。然后,这些可以成为您的验证和测试集中的一部分。训练集将不包含异常(或仅包含少量异常)。