背景
我在网络运营中心工作,我们监视计算机系统及其性能。要监视的关键指标之一是当前连接到我们服务器的访问者/客户数量。为了使其可见,我们(Ops团队)收集了诸如时间序列数据之类的指标并绘制了图表。Graphite允许我们做到这一点,它有一个非常丰富的API,我可以用它来构建警报系统,以便在突然(主要是)突然下降和其他更改发生时通知我们的团队。目前,我已基于avg值设置了一个静态阈值,但是由于白天和一周中的不同负载(季节性因素),它不能很好地工作(存在很多假阳性)。
看起来像这样:
实际数据(一个度量标准的示例,时间范围为15分钟;第一个数字是用户数,第二个-时间戳):
[{"target": "metric_name", "datapoints": [[175562.0, 1431803460], [176125.0, 1431803520], [176125.0, 1431803580], [175710.0, 1431803640], [175710.0, 1431803700], [175733.0, 1431803760], [175733.0, 1431803820], [175839.0, 1431803880], [175839.0, 1431803940], [175245.0, 1431804000], [175217.0, 1431804060], [175629.0, 1431804120], [175104.0, 1431804180], [175104.0, 1431804240], [175505.0, 1431804300]]}]
我要完成的工作
我创建了一个Python脚本,该脚本接收最近的数据点,将它们与历史平均值进行比较,并在发生突然变化或下降时发出警报。由于季节性因素,“静态”阈值无法正常运行,脚本会生成误报警报。我想提高警报算法的准确性,使其在不不断调整警报阈值的情况下工作。
我需要什么建议和发现的东西
通过谷歌搜索,我发现我正在寻找用于异常检测的机器学习算法(无监督算法)。进一步的调查表明,其中有很多,很难理解哪种情况适用于我的情况。由于我的数学知识有限,我无法阅读复杂的学者论文,并且正在寻找对该领域的初学者来说简单的东西。
我喜欢Python并且对R有点熟悉,因此很高兴看到这些语言的示例。请推荐一本好书或文章,这将有助于我解决问题。谢谢您的时间,请原谅我这么长时间的描述
有用的链接
类似问题:
外部资源:
auto.arima
R的出色forecast
软件包提供的功能通过建立连续的定期预测来设置警报(请参阅jstatsoft.org/v27/i03/paper)。您可以通过调整level
参数来调整置信度,例如data.model <- auto.arima(data.zoo, ic = c("bic")); data.prediction.warningLimits <- forecast(data.model, h=1, level=0.99)
。