Elastic:机器学习的实践 - single metric job

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 在 Elasticsearch 中,可以将机器学习视为搜索和分析的自然扩展。它是对时间序列数据的分析。 Elasticsearch 支持的机器学习功能可以通过运行 metric 任务来自动分析时间序列数据,该 metric 任务包含一个或多个定义了将要分析的字段的检测器。 它可以帮助我们识别单变量时间序列数据中的异常,并向我们显示正常情况。在 Elasticsearch 中,我们可以通过机器学习来检测时间系列中的异常情况。

简介:

先前,使用 Elasticsearch 时与机器学习有关的主要问题之一是解决异常检测的问题。基本上,异常检测是一个统计问题,可以通过从输入数据分布的常见统计属性中标记不规则性,以简单的方式解决。 但是,我们可以使用基于机器学习的方法来解决该问题,例如基于聚类的异常检测和基于支持向量机的异常检测。 Elastic Stack 提供的机器学习功能可以涉及 Kibana 的数据可视化工具,作业管理,计划程序以及来自Elasticsearch的统计任务的指标(metrics)聚合。 我们甚至可以使用Beats收集数据。 例如,使用Metricbeat 收集系统级资源使用情况统计信息。

文本作者:刘晓国,Elastic 公司社区布道师。新加坡国立大学硕士,西北工业大学硕士,曾就职于新加坡科技,康柏电脑,通用汽车,爱立信,诺基亚,Linaro,Ubuntu,Vantiq 等企业。

如果你想一站式快速体验 Elasticsearch 所有功能(免费提供机器学习、 X-pack 能力),开通 阿里云 Elasticsearch 1核2G,即可首月免费试用。

什么叫做异常

我们首先观察一下如下的一个时间系列的图:
image.png

我们首先看到绿色的那个统计图,明显地在2016年2月9号4点左右一个叫做 AAL 的航空公司的订票数据明显高于其它天的情况。那么这显然是一个异常的情况。但是如果这个规律是每周或每个月在某个固定的时间段都是这么反复出现,那么这种情况也应该算是正常的情况。另外一个例子就是,我们生活在一个大城市里,比如北京,每到周五晚上高峰期,出城的车辆非常多,明显高于每周的其它工作日,这显然是一个异常的情况,如果我们只拿一周的统计数据来说。然而如果是每周五都是这样的,那么这样的高峰期也就显得非常正常了。这个是需要机器来根据以往的数据来分析而的出来结论的。

另外一种情况是:

image.png

标如果某事物与总体中的其他事物截然不同,则该实体是异常的。
总体来说,如果我们说某个事情不正常,它是一下的一种或两种:

• 当实体的行为突然发生重大变化时
• 当实体与总体中的其他实体完全不同时

在机器学习中,他会根据实际数据自动帮我们选择适当的数据模型:

image.png

机器学习会自动分析数据选择适当的模型,并在地概率事件发生时检测出异常。大多数情况是第一种数据模型。

机器学习

机器学习是使用 Elasticsearch 集群中存在的数据,通过无监督的方法来构建数据模型。通过将(新的或替代的)数据与模型进行比较并识别数据中的异常模式或行为,它可以自动分析时间序列数据。在 Elasticsearch 的机器学习中,机器学习实习如下的功能:

• 异常检测
• 异常打分 (分数介于0到100之间,分数越高,代表越不正常)

在我们觉得是否使用机器学习之前,需要验证将使用的数据的适用性。在使用 Elasticsearch 机器学习之前,你必须考虑如下的三件事:

• 你的数据是否是一个时间系列的数据
• 数据需要包含对用例至关重要的关键性能指标(KPI)
• 数据的位置

事实上,你也可以通过机器学习的 API 接口来分析你的数据。这个工作并不一定小在 Kibana 中来完成。为了发现数据的异常,定义自己的数据的 KPI 是非常重要的一个环节。这些 KPI 指标,可以是:

• 在规定的一段时间里,日志的数量
• 在规定的一段时间里,所收到的 404 响应值
• 在规定的一段时间里,磁盘的使用量

IT组织选择用于跟踪和标记的 KPI 可以跨越各种指标,包括以下各项:

• 客户:影响指标,例如应用程序响应时间或错误计数
• 可用性:面向指标,例如正常运行时间或平均维修时间(MTTR)
• 业务:面向指标,例如每分钟订单数,收入或活跃用户数

定义了 KPI 后,将对此 KPI 进行分析(平均值,最大值,计数等)。 分析功能和KPI的组合将称为检测器。我们可以为数据定义 single metric 或 multi metric 的侦测器以检查数据中的异常情况。

机器学习另外一个很重要的功能就是预测所分析时序数据的未来发展趋势。一但我们建立了机器学习的作业之后,我们就可以进行预测。除了使用 Kibana 的界面进行预测之外,Elasticsearch 也提供 API 接口来实现。在使用这个功能时,你需要提供相应的时间段来进行预测。

机器学习分类:

image.png

机器学习是如何工作的

当将ML作业配置为运行时,ML会将所有这些片段排序在一起。 下图显示了此过程的简化版本:

image.png

image.png

image.png

通常,每个 bucket span 都执行一次上述过程,但是要进行其他优化以最小化 I/O。 这些细节超出了本文章的范围。 但是,关键要点在于,这种编排使 ML 可以联机(即不脱机/批处理),并不断学习新摄取的数据。 ML 也会自动处理此过程,因此用户不必担心实现这一切所需的复杂过程。

image.png

启用白金功能

在继续使用 Elasticsearch 中 的机器学习功能之前,请确保已安装Platinum许可证。 如果下载了 Elasticsearch 软件或使用了开源版本,它将是基本版本。我们必须激活30天试用许可证才能使用 Platinum 功能。

我们可以按照如下的步骤来启动白金功能:

image.png

我们按照上面的三个步骤,选择试用版,进而获得白金版功能。

image.png

机器学习的作业

Kibana 7.0 支持四种类型的机器学习作业,如下所述:

  1. Single-metric jobs:数据分析仅在一个索引字段上执行
  2. Multi-metric jobs:可以对多个索引字段执行数据分析; 但是,每个字段都分别进行分析
  3. Advanced jobs:可以对多个索引字段执行数据分析。提供检测器和影响者的完整配置设置
  4. Population jobs:对不常见数据(例如检测总体中的异常值)的分布行为的数据分析

在今天的练习中,我们来展示一个使用single-metric job的例子。

Sample 数据

在今天的机器学中,我们使用如下的方法下载我们的时序数据:

git clone https://github.com/liu-xiao-guo/machine_learning_data

等我们下载完数据后,我们运行一下的命令:

$./cf_rfem_hist_price_bulk_index.sh

它将会把我们所需要的数据读入到Elasticsearch中。我们可以在Kibana中查找这个数据。

GET cf_rfem_hist_price/_count

显示:

{
  "count" : 90,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}

它显示有90个数据。其中包括61个交易日和29个非交易日的数据。每一条数据的结构是:

"_source" : {
          "date" : "2018-12-26",
          "open" : 55.0803,
          "high" : 56.0999,
          "low" : 54.59,
          "close" : 55.89,
          "volume" : 27038,
          "change" : 0.971,
          "changePercent" : 1.768,
          "label" : "Dec 26, 18",
          "changeOverTime" : 0,
          "symbol" : "RFEM"
        }

这是一个股票代码为RFEM的交易信息。这里它含有每天的开盘价,最高价,最低价,闭市价,交易量等信息。

运行一个 single-metric 作业

基本上,single-metric 作业仅使用索引文档中的一个字段作为分析检测器。 下面介绍了针对 volume 字段运行 single-metric 作业的分步说明。

创建Index pattern

为了创建一个Index pattern,我们按照如下的步骤:
image.png

按照上面的1,2,3步骤:

image.png

输入 cf_rfem_hist_price *,然后选择 Next Step。

image.png

然后在 Time Filter field name 选择 date,然后再选择 Create index pattern。

image.png

这样 cf_rfem_hist_price* index pattern 已创建,可以在机器学习作业中使用。

创建一个新的机器学习工作
要创建单指标机器学习作业,我们需要执行以下操作:

1、单击左侧工具栏上的机器学习按钮,在以下屏幕截图中显示,右侧窗格将显示机器学习面板

image.png

2、从顶部菜单中,选择 “Anomaly Detection”。 点击 Create job 按钮,如以下屏幕截图所示:

image.png

3、该面板将让我们选择源数据,这些源数据来自于新的搜索,选定的索引或保存的搜索。 单击cf_rfem_hist_price索引,如以下屏幕截图所示:

image.png

4、有几种作业类型可用于定义机器学习作业。 让我们选择一个 single metric 作业,如以下屏幕截图所示:

image.png

5、选择 Use full cf_rfem_hist_price* data
image.png

6、然后选择 Next 按钮

image.png

7、 single-metric 作业必须使用聚合。 由于我们的数据是每日记录,而存储段跨度(间隔)是一天,因此无论我们选择 “Sum”,“Mean” 还是 “Median” 聚合,聚合都是相同的。我们选择 volume 字段的 Sum 聚合用来检查个异常。请注意这个也是我们之前谈到的 KPI 指标。我们的目的是通过检查 voume 的总和是否有异常的情况出现。

image.png

image.png

在上面,我们注意的一点是我们的 Bucket span 设置为15m,尽管我们的时序数据是每天一个数据。在实际的使用中可以根据自己的用例来进行调整。

8、点击 Next 按钮,这样我们可以看到如下的画面:

image.png

9、接下来选择 Next:
image.png

10、填好 Job ID,然后选择 Next 按钮
image.png

11、上面显示 Validation 信息。在这一步,如果有错误的话,它将会用红色的字显示错误信息。上面显示一切都好。然后,我们选择 Next 按钮:

image.png

12、我们再选择 Create job 按钮:

image.png

13、我们选择 View results:
image.png

在上面,在起始的部分,我们可以看见机器学习在学习,我们看不出有什么特别的地方。经过一段时间的学习,它侦测出一个异常的情况。

14、恭喜你。你已经创建了一个 single-metric 的机器学习的作业!我们可以点击下面的 Anomalies:

image.png

异常在上面的图表中,以不同的颜色来表示的:

• Warning (blue): 分数低于25

• Minor (yellow): 分数介于25和50之间
• Major (orange): 分数介于50和75之间
• Critical (red): 分数介于75和100之间

我们可以在上面点击 Severity threshold 选择不同的级别来进行显示。如下图,它显示的是只有 Critical (分数高于75的)的异常:

image.png

显然显示有很多异常的情况。点击最上面的那个January 10th 2019,我们可以看到详细的信息:

image.png

上面显示的实际值是304198,但是根据机器学习所预测的值应该在22499。显然这是一个异常。对于销售人员来说,他们可以根据这个情况来了解一下,为什么会出现这么一个异常的情况,是什么原因造成交易量的突然增加。是有人背后操作吗?

在上面的图中,由于我们的时间长度并不长,所以在一个画面中都显示完成。我们时间上可以通过调整左右的按钮来进行时间的选择:

image.png

这样我们可以专注查看我们所关心时间段的数据。
我们也可以针对我们的数据进行标注:

image.png

image.png

点击上面的 Create 按钮,我们就可以为这个事件进行标注:

image.png

我们也可以点击右上角的那个 Forecast (预测)按钮:

image.png

我们填入7天的预测。点击 Run 按钮:

image.png

这是最终预测后的结果。

关于机器学习的时间选择

在上面的练习中,我们选择了默认的15分钟作为 bucket_span 来对我们的数据进行分析。将 bucket span 视为分析前的聚合间隔,即为了进行分析而聚合一部分数据的时间窗口。 bucket_span 的持续时间越短,分析就越精细,但是数据中产生噪声伪像的可能性也就越高。下图显示了在三个不同时间间隔内聚合的同一数据集:

image.png

请注意,如果由于尖峰持续时间短(小于2分钟)而在60分钟间隔内聚集数据几乎消失了,则在5分钟间隔内聚集的版本中看到的突出异常。 实际上,在这60分钟的间隔内,峰值似乎不再显得异常。

声明:

本文版权归作者所有,未经许可不得擅自转载或引用。


image.png

阿里云Elastic Stack】100%兼容开源ES,独有9大能力,提供免费 X-pack服务(单节点价值$6000)

相关活动


更多折扣活动,请访问阿里云 Elasticsearch 官网

阿里云 Elasticsearch 商业通用版,1核2G ,SSD 20G首月免费
阿里云 Logstash 2核4G首月免费
下载白皮书:Elasticsearch 八大经典场景应用


image.png

image.png

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从理论到实践的旅程
【8月更文挑战第26天】机器学习,这个听起来既神秘又充满无限可能的领域,实际上已经深入到我们生活的方方面面。本文将通过一次虚拟的“旅行”,带领读者了解机器学习的基本概念、主要技术和应用实例,同时提供一个简单的Python代码示例,帮助初学者迈出探索这一激动人心领域的第一步。无论你是科技爱好者,还是对未来充满好奇的学生,这篇文章都将成为你理解并应用机器学习技术的启航点。
|
1月前
|
机器学习/深度学习 数据采集 人工智能
AI与机器学习:从理论到实践
【10月更文挑战第2天】本文将深入探讨AI和机器学习的基本概念,以及它们如何从理论转化为实际的应用。我们将通过Python代码示例,展示如何使用机器学习库scikit-learn进行数据预处理、模型训练和预测。无论你是AI领域的初学者,还是有一定基础的开发者,这篇文章都将为你提供有价值的信息和知识。
|
10天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到Python代码实践
【10月更文挑战第36天】本文将深入浅出地介绍机器学习的基本概念、主要算法及其在Python中的实现。我们将通过实际案例,展示如何使用scikit-learn库进行数据预处理、模型选择和参数调优。无论你是初学者还是有一定基础的开发者,都能从中获得启发和实践指导。
25 2
|
11天前
|
机器学习/深度学习 数据采集 人工智能
探索机器学习:从理论到实践
【10月更文挑战第35天】在这篇文章中,我们将深入探讨机器学习的世界。我们将从基础理论开始,然后逐步过渡到实际应用,最后通过代码示例来展示如何实现一个简单的机器学习模型。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的信息和见解。
|
1月前
|
机器学习/深度学习 数据可视化 数据挖掘
机器学习中空间和时间自相关的分析:从理论基础到实践应用
空间和时间自相关是数据分析中的重要概念,揭示了现象在空间和时间维度上的相互依赖关系。本文探讨了这些概念的理论基础,并通过野火风险预测的实际案例,展示了如何利用随机森林模型捕捉时空依赖性,提高预测准确性。
51 0
机器学习中空间和时间自相关的分析:从理论基础到实践应用
|
1月前
|
机器学习/深度学习 算法 Python
探索机器学习中的决策树算法:从理论到实践
【10月更文挑战第5天】本文旨在通过浅显易懂的语言,带领读者了解并实现一个基础的决策树模型。我们将从决策树的基本概念出发,逐步深入其构建过程,包括特征选择、树的生成与剪枝等关键技术点,并以一个简单的例子演示如何用Python代码实现一个决策树分类器。文章不仅注重理论阐述,更侧重于实际操作,以期帮助初学者快速入门并在真实数据上应用这一算法。
|
1月前
|
机器学习/深度学习 算法 PyTorch
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
【机器学习】大模型环境下的应用:计算机视觉的探索与实践
56 1
|
1月前
|
机器学习/深度学习 算法 自动驾驶
探索机器学习:从理论到实践
本文将带你进入机器学习的世界,从基本概念出发,深入探讨其背后的数学原理,再通过Python代码示例,展示如何实际应用这些理论。无论你是初学者还是有经验的开发者,都能从中获益。
|
1月前
|
机器学习/深度学习 数据可视化 算法
机器学习中的回归分析:理论与实践
机器学习中的回归分析:理论与实践
|
2月前
|
机器学习/深度学习 算法 自动驾驶
探索机器学习:从理论到实践
【9月更文挑战第24天】本文将带你走进机器学习的世界,了解其基本概念,探索其背后的数学原理,并通过Python代码示例,展示如何实现一个简单的线性回归模型。无论你是初学者还是有经验的开发者,都能在这篇文章中找到新的视角和深入的理解。
42 9