检测地理数据中的异常位置
Elastic Stack Serverless
如果您的数据包含地理字段,您可以使用机器学习功能来检测异常行为,例如在不寻常位置发生的信用卡交易或具有不寻常源位置的 Web 请求。
要运行这种类型的异常检测作业,您必须设置机器学习功能。您还必须具有包含空间数据类型的时间序列数据。特别是,您必须具有
- 两个逗号分隔的数字,格式为
latitude,longitude
, - 一个
geo_point
字段, - 一个包含点值的
geo_shape
字段,或 - 一个
geo_centroid
聚合
纬度和经度必须在 -180 到 180 的范围内,并表示地球表面上的一个点。
此示例使用示例 eCommerce 订单和示例 Web 日志数据集。有关更多信息,请参见添加示例数据。
要从机器学习分析获得最佳结果,您必须了解您的数据。您可以为此使用 Machine Learning 应用中的 Data Visualizer。搜索特定的字段或字段类型,例如示例数据集中的 geo-point 字段。您可以查看在特定时间段和样本大小内有多少文档包含这些字段。您还可以看到不同值的数量、示例值列表,并在地图上预览它们。例如

在创建这种类型的作业之前,需要考虑一些限制
- 您无法为包含地理功能的异常检测作业创建预测。
- 您无法将带有条件的自定义规则添加到使用地理功能的检测器。
如果这些限制可以接受,请尝试创建一个使用 lat_long
函数来分析您自己的数据或示例数据集的异常检测作业。
要创建使用 lat_long
函数的异常检测作业,您必须在 Kibana 中单击 Machine learning > Anomaly detection > Jobs 页面上的 Create job,然后选择高级作业向导。或者,使用 创建异常检测作业 API。
例如,创建一个分析示例 eCommerce 订单数据集的作业,以查找相对于每个客户 (user
ID) 过去行为的具有不寻常坐标 (geoip.location
值) 的订单

API 示例
PUT _ml/anomaly_detectors/ecommerce-geo <1>
{
"analysis_config" : {
"bucket_span":"15m",
"detectors": [
{
"detector_description": "Unusual coordinates by user",
"function": "lat_long",
"field_name": "geoip.location",
"by_field_name": "user"
}
],
"influencers": [
"geoip.country_iso_code",
"day_of_week",
"category.keyword"
]
},
"data_description" : {
"time_field": "order_date"
},
"datafeed_config":{
"datafeed_id": "datafeed-ecommerce-geo",
"indices": ["kibana_sample_data_ecommerce"],
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
}
POST _ml/anomaly_detectors/ecommerce-geo/_open
POST _ml/datafeeds/datafeed-ecommerce-geo/_start
{
"end": "2022-03-22T23:00:00Z"
}
- 创建异常检测作业。
- 创建数据馈送。
- 打开作业。
- 启动数据馈送。由于示例数据集通常包含晚于当前日期的时标,因此最好为数据馈送指定适当的结束日期。
或者,创建一个分析示例 Web 日志数据集以检测具有不寻常坐标 (geo.coordinates
值) 或异常高的传输数据总和 (bytes
值) 的事件的作业

API 示例
PUT _ml/anomaly_detectors/weblogs-geo <1>
{
"analysis_config" : {
"bucket_span":"15m",
"detectors": [
{
"detector_description": "Unusual coordinates",
"function": "lat_long",
"field_name": "geo.coordinates"
},
{
"function": "high_sum",
"field_name": "bytes"
}
],
"influencers": [
"geo.src",
"extension.keyword",
"geo.dest"
]
},
"data_description" : {
"time_field": "timestamp",
"time_format": "epoch_ms"
},
"datafeed_config":{
"datafeed_id": "datafeed-weblogs-geo",
"indices": ["kibana_sample_data_logs"],
"query": {
"bool": {
"must": [
{
"match_all": {}
}
]
}
}
}
}
POST _ml/anomaly_detectors/weblogs-geo/_open
POST _ml/datafeeds/datafeed-weblogs-geo/_start
{
"end": "2022-04-15T22:00:00Z"
}
- 创建异常检测作业。
- 创建数据馈送。
- 打开作业。
- 启动数据馈送。由于示例数据集通常包含晚于当前日期的时标,因此最好为数据馈送指定适当的结束日期。
异常检测作业处理了一些数据后,您可以在 Kibana 中查看结果。
如果您使用 API 创建作业和数据馈送,则在按照提示同步必要的已保存对象之前,您无法在 Kibana 中看到它们。
当您在 Anomaly Explorer 泳道结果中选择包含异常的期间时,您可以看到典型和实际坐标的地图。例如,在 eCommerce 示例数据中,有一个具有异常购物行为的用户

“典型”值表示先前观察到的位置集群的质心,该质心最接近当时的“实际”位置。例如,可能有一个质心靠近用户的家,另一个靠近用户的工作场所,因为有许多记录与这些不同的位置相关联。
同样,在 Web 日志示例数据中,存在既有异常高的传输数据总和,又有不寻常地理坐标的时间段

您可以使用顶级影响因素值来进一步筛选结果并识别可能的促成因素或行为模式。
您还可以通过单击异常表中的操作菜单中的 View in Maps 在 Maps 中查看异常。

当您使用自己的数据尝试这种类型的异常检测作业时,可能需要进行一些实验才能找到桶、检测器和影响因素的最佳组合,以检测您正在寻找的行为类型。
有关异常检测概念的更多信息,请参见概念。有关可以在异常检测作业中使用的函数的完整列表,请参见函数参考。有关更多异常检测示例,请参见示例。
要在 Maps 中集成来自您的异常检测作业的结果,请单击 Add layer,然后选择 ML Anomalies。然后,您必须选择或创建一个使用 lat_long
函数的异常检测作业。
例如,您可以从构建地图以按国家或地区比较指标中扩展地图示例,以包含一个使用您的 Web 日志异常检测作业的图层
