7.6版本的Elastic Stack提供了端到端机器学习管道所需的最后一块拼图。此前,机器学习专注于无监督技术与异常检测。然而,在7.x版本中,已经发布了几个功能。在7.2中,Elasticsearch发布了用于将原始索引转化为特征索引的Transforms。然后7.3、7.4和7.5分别发布了异常值检测、回归和分类。最后在7.6中,你可以使用回归和分类模型与推理ingest处理器来丰富文档。所有这些一起为端到端机器学习管道建立起了闭环。所有这些都可以在Elastic Stack中进行。

为什么要进行有监督的机器学习?

有监督式机器学习从标记的数据中训练模型。这与无监督学习不同,在无监督学习中,模型从尚未标记的数据中学习。在data frame analytics中,我们为您提供了创建监督模型的工具集,而无需了解底层算法。然后,您可以使用训练后的模型对未观察到的数据进行预测(通过推理)。模型应用它通过训练学到的东西来提供预测。

为什么要用这个而不是异常检测?异常检测是无监督学习的一个例子,它在学习模式和预测基于时间序列数据的指标方面非常出色。这对于许多用例来说都很强大,但如果我们想通过检测可疑域来识别不良行为者呢?自动检测语言并应用适当的分析器来更好地搜索呢?

这些用例需要更丰富的特征集来提供准确的预测。它们使用已知的例子从中学习。意思是,存在一个训练数据集,其中的数据被标记为正确的预测。Transforms提供了构建复杂特征集所需的工具。data frame analytics可以训练有监督的机器学习模型。我们可以使用这两者来部署流数据上的特征生成和监督模型的生产使用。

有监督学习实例:二元分类

让我们从头开始建立和使用一个二元分类模型。不要被吓到,这里数据科学的学位不是必要的。我们将使用Elastic Stack中的构建模块来创建我们的特征集,训练我们的模型,并将其部署在一个摄取管道中执行推理。使用 ingest 处理器可以让我们的数据在被索引之前被模型的预测所丰富。

在这个例子中,我们将根据客户元数据和通话记录的特征来预测电信客户是否有可能流失。我们将使用已流失和未流失客户的例子作为训练数据集。

设置您的环境

首先,我们要获得原始数据集。下载calls.csv和customers.csv文件,并通过CSV上传功能加载但ES中。数据来源于不同来源引用的数据集:openml、kaggle、Larose 2014。这个数据集被分解成行,并添加了随机特征。电话号码和其他数据都是捏造的,与真实数据的任何相似之处都是巧合。

上传后,你的数据应该是这样的。

customers索引:

{"column1" : 0,"number_vmail_messages" : 25,"account_length" : 128,"churn" : 0,"customer_service_calls" : 1,"voice_mail_plan" : "yes","phone_number" : "415-382-4657","state" : "KS","international_plan" : "no"
}

call索引:

{"column1" : 20000,"dialled_number" : "408-408-6496","call_charges" : 0.1980211744513012,"call_duration" : 2.0445331385440126,"@timestamp" : "2019-08-08T13:49:06.850-04:00","phone_number" : "408-365-9011","timestamp" : "2019-08-08 13:49:06.850150"
}

建立特征集

首先,我们要构建出我们的特征集。我们有两个数据来源:客户元数据和通话记录。这就需要使用Transforms和enrich processor。这种组合使我们能够将元数据与呼叫信息一起合并到另一个索引中。

以下是enrich的策略和pipeline。(在Kibana开发控制台中执行命令)

# Enrichment policy for customer metadata
PUT /_enrich/policy/customer_metadata
{"match": {"indices": "customers","match_field": "phone_number","enrich_fields": ["account_length", "churn", "customer_service_calls", "international_plan","number_vmail_messages", "state", "voice_mail_plan"]}
}
# Execute the policy so we can populate with the metadata
POST /_enrich/policy/customer_metadata/_execute
# Our enrichment pipeline for generating features
PUT _ingest/pipeline/customer_metadata
{"description": "Adds metadata about customers by phone_number", "processors": [{"enrich": {"policy_name": "customer_metadata","field": "phone_number","target_field": "customer","max_matches": 1}}]
}

接下来,我们可以建立一个利用我们新的Transform任务。下面是Transform的定义。

# transform for enriching the data for training
PUT _transform/customer_churn_transform
{"source": {"index": ["calls"]},"dest": {"index": "churn","pipeline": "customer_metadata"},"pivot": {"group_by": {"phone_number": {"terms": {"field": "phone_number"}}},"aggregations": {"call_charges": {"sum": {"field": "call_charges"}},"call_duration": {"sum": {"field": "call_duration"}},"call_count": {"value_count": {"field": "dialled_number"}}}}
}

现在创建了transform,我们可以启动它,并在堆栈管理下的transform页面上查看它的进度。


我们已经建立了通话费、通话次数和通话时长的总和。这些特征与我们的客户元数据结合起来,应该足以建立一个流失预测模型。

我们的特征集中一共有九个特征,其中三个是分类特征。此外,我们还有customer.churn这个字段。这代表了过去流失的客户的历史数据。它将是我们的监督学习利用的标签,以建立我们的预测模型。

建立模型

一旦我们有了我们的特征集,我们就可以开始建立我们的监督模型。我们将根据我们的客户呼叫数据来预测流失率。

注意:需要一个索引模式来引用新的透视数据(pivot data)。可用index pattern为churn*。

导航到Kibana中机器学习应用中的Data Frame Analytics标签。

要创建作业,我们需要:

  • 选择 "classification "工作类型,预测两类 "流失 "情况
  • 给工作一个独特的ID
  • 添加一个漂亮的描述
  • 指定训练数据的存放位置
  • 指定我们的预测将被写在哪里

现在我们的任务的元数据已经出来了,让我们选择我们的特征值和training:

  • 因变量是 “customer.churn”,因为这正是我们要预测的。
  • 保持默认的80%的训练百分比就可以了。
  • 我们应该排除我们知道不会添加信息的字段。在这种情况下,"customer.phone_number "和 "phone_number "是每个条目唯一的,不包含有用的信息。
  • 保持模型的内存限制不变。这允许作业执行器在至少能支持这个内存量的节点上执行。

这个分析作业将确定以下内容:

  • 每个特征值的最佳编码
  • 哪些特征值可以提供最好的信息,哪些应该被忽略?
  • 建立最佳模型的最佳超参数(hyperparameters)

一旦它完成运行,我们可以看到给定其测试和训练数据的模型错误率

准确率相当高! 如果你跟着做这个例子,你的数据可能会略有不同。因为当模型被训练时,它使用数据的随机子集进行训练和测试,会有偏差。

我们现在有一个模型,可以在ingest pipeline中使用。

使用该模型

因为我们知道是哪个数据框架分析作业创建了这个模型,所以我们可以通过这个API调用看到它的ID和各种设置。

GET _ml/inference/customer_churn*?human=true

有了模型ID,我们现在可以进行预测了。我们通过transform建立了原始特征集。我们将对所有通过inference processor发送的数据进行同样的处理。

# Enrichment + prediction pipeline
# NOTE: model_id will be different for your data
PUT _ingest/pipeline/customer_churn_enrich_and_predict
{"description": "enriches the data with the customer info if known and makes a churn prediction", "processors": [{"enrich": {"policy_name": "customer_metadata","field": "phone_number","target_field": "customer","max_matches": 1,"tag": "customer_data_enrichment"}},{"inference": {"model_id": "customer_churn-1581693287679","inference_config": {"classification": {}},"field_map": {},"tag": "chrun_prediction"}}]
}

然后对所有的流进行连续的transform:

PUT _transform/continuous-customer-churn-prediction
{"sync": {"time": {"field": "@timestamp","delay": "10m"}},"source": {"index": ["calls"]},"dest": {"index": "churn_predictions","pipeline": "customer_churn_enrich_and_predict"},"pivot": {"group_by": {"phone_number": {"terms": {"field": "phone_number"}}},"aggregations": {"call_charges": {"sum": {"field": "call_charges"}},"call_duration": {"sum": {"field": "call_duration"}},"call_count": {"value_count": {"field": "dialled_number"}}}}
}

当transform看到新的数据时,它会创建我们的特征集,并针对模型进行推断。预测与丰富的数据一起被索引到churn_predictions中。这一切都在持续发生。随着新的客户呼叫数据的到来,transform会更新我们的流失预测。这些预测是索引中的数据。这意味着我们可以通过警报进行操作,用Lens构建可视化,或者构建一个自定义的仪表板。

结论

现在可以在Elastic内部进行数据管道化,用于创建特征、模型训练和模型推理。这意味着Elastic APM、SIEM或日志中的数据可以用来构建监督式机器学习模型。这为安全、可观察性、物流或好奇心方面的许多用例打开了大门。今天就使用免费试用版中尝试一下新的机器学习功能吧。

厉害了!使用Elastic的有监督机器学习进行二元分类相关推荐

  1. 机器学习 分类监督学习_地球科学中使用无监督机器学习的相分类

    机器学习 分类监督学习 石油和天然气数据科学 (Data science in Oil and Gas) Facies are uniform sedimentary bodies of rock w ...

  2. 机器学习做二元分类问题(二)

    一.二元分类问题 接着上一节我们举得例子,我们说机器学习的流程是什么呢?首先我们要有一个学习的演算法,我们叫做A,这个演算法会看资料,然后会看我们的假设函数集合,从集合中选择一个假设函数做为我们的银行 ...

  3. 机器学习中的无监督学习_无监督机器学习中聚类背后的直觉

    机器学习中的无监督学习 When it comes to analyzing & making sense of the data from the past and understandin ...

  4. c++实现决策树分类汽车评估数据集_R有监督机器学习-分类方法

    当我们说机器学习的的时候,我们在说什么? 来源于mlr3包的作者:https://mlr3book.mlr-org.com/basics.html 上图解释了完整的机器学习流程,包括构建任务.准备训练 ...

  5. 机器学习算法_无监督机器学习算法:主成分分析

    之前我们曾经讲过,无监督学习是一种不使用标记数据(无目标变量)的机器学习.因此,算法的任务是在数据本身中寻找模式.无监督机器学习算法的两种主要类型分别是使用主成分分析的降维算法和聚类算法(包括K-Me ...

  6. 【报告分享】2019移动互联网行业报告暨无监督机器学习下的2019行业价值人群聚类报告.pdf...

    今天给大家分享的报告是TalkingData于2020年3月31日发布的<2019移动互联网行业报告暨无监督机器学习下的2019行业价值人群聚类报告.pdf>,报告包含如下四大部分: 1. ...

  7. CCAI 2017 | 日本理化学研究所杉山将:弱监督机器学习的研究进展

    ​ 日本理化学研究所先进智能研究中心主任杉山将 记者 | JayZhang 7 月 22 - 23 日,在中国科学技术协会.中国科学院的指导下,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主 ...

  8. 9种有监督与3种无监督机器学习算法

    机器学习作为目前的热点技术广泛运用于数据分析领域,其理论和方法用于解决工程应用的复杂问题.然而在机器学习领域,没有算法能完美地解决所有问题(数据集的规模与结构.性能与便利度.可解释性等不可能三角),识 ...

  9. CCAI 2017 日本理化学研究所先进智能研究中心主任杉山将:弱监督机器学习的研究进展...

    7 月 22 - 23 日,在中国科学技术协会.中国科学院的指导下,由中国人工智能学会.阿里巴巴集团 & 蚂蚁金服主办,CSDN.中国科学院自动化研究所承办,云栖社区作为独家直播合作伙伴的 2 ...

最新文章

  1. Oracle针对SCOTT下EMP表的练习题
  2. 使用reserve函数避免vector和string的内存重新分配
  3. enfp工具箱怎么用_隐喻:你的工具箱
  4. 88. 合并两个有序数组 golang
  5. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
  6. 32时间片轮转_【解惑】到底是quot;时间片quot;?还是quot;分时轮询quot;?
  7. $(obj).each 和 $.each() 区别
  8. linux中grep命令,Linux下grep命令详解
  9. 同个网络找不到计算机打印机共享,局域网共享打印机搜索不到怎么办 局域网共享打印机搜索不到解决方法...
  10. linux查找文件内容 linux文件关键字搜索
  11. 最新的中国风歌曲——《颜如玉》
  12. mysql8.0初始化密码_MySQL 8.0 手动配置、修改初始化密码
  13. 快速下载 Android framework 源码
  14. 仿Excel冻结单元格效果
  15. 【目标检测】Receptive Field Block Net for Accurate and Fast Object Detection论文理解
  16. android微信qq分享,android 一键分享 QQ 微信
  17. AR红包Android端实现原理
  18. @Scheduled使用及讲解
  19. Spark 练习测试题(答案仅供参考)
  20. ArcGIS地面粗糙度提取

热门文章

  1. 微信小程序实现字体渐变
  2. 早上喝水较健康 喝法有学问!
  3. FPGA在AI时代的角色
  4. html网页表格怎么自动添加,Html表格自动生成工具
  5. 游戏辅助制作核心--植物大战僵尸逆向之召唤僵尸call(九)
  6. 使用burp进行网站爆破
  7. 天猫淘宝整合营销 为你的店铺点亮奇迹!
  8. 基于Python实现的孤立词语音识别系统
  9. Flash Switcher(一) - 快捷Tab切换器
  10. 触摸屏GT9xx移植