你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
从 2023 年 9 月 20 日开始,将无法创建新的异常检测器资源。 异常检测器服务将于 2026 年 10 月 1 日停用。
可以选择批量推理 API 或流式推理 API 进行检测。
批量推理 API | 流式推理 API |
---|---|
更适合用于以下批处理用例:客户不需要立即获取推理结果,并希望检测更长时间段内的异常,然后获得结果。 | 如果客户希望立即获取推理结果并希望实时检测多变量异常,建议使用此 API。 还适用于执行之前的压缩和上传过程以进行推理时遇到问题的客户。 |
API 名称 | 方法 | 路径 | 说明 |
---|---|---|---|
批量推理 | 帖子 | {endpoint} /anomalydetector/v1.1/multivariate/models/{modelId} :detect-batch |
使用在批处理场景中工作的 modelId 触发异步推理 |
获取批量推理结果 | GET | {endpoint} /anomalydetector/v1.1/multivariate/detect-batch/{resultId} |
使用 resultId 获取批量推理结果 |
流式推理 | 帖子 | {endpoint} /anomalydetector/v1.1/multivariate/models/{modelId} : detect-last |
使用 modelId 触发同步推理,这适用于流式处理方案 |
触发流式推理 API
请求
通过同步 API,可以实时逐点获取推理结果,而无需像训练和异步推理一样压缩和上传任务。 下面是同步 API 的一些要求:
- 需要将 JSON 格式的数据放入 API 请求正文中。
- 由于有效负载限制,请求正文中的推理数据大小受到限制,最多支持
2880
个时间戳 *300
个变量,至少支持1 sliding window length
。
可将多个变量的多个时间戳以 JSON 格式提交到请求正文中,API 调用方式如下:
{{endpoint}}/anomalydetector/v1.1/multivariate/models/{modelId}:detect-last
示例请求:
{
"variables": [
{
"variable": "Variable_1",
"timestamps": [
"2021-01-01T00:00:00Z",
"2021-01-01T00:01:00Z",
"2021-01-01T00:02:00Z"
//more timestamps
],
"values": [
0.4551378545933972,
0.7388603950488748,
0.201088255984052
//more values
]
},
{
"variable": "Variable_2",
"timestamps": [
"2021-01-01T00:00:00Z",
"2021-01-01T00:01:00Z",
"2021-01-01T00:02:00Z"
//more timestamps
],
"values": [
0.9617871613964145,
0.24903311574778408,
0.4920561254118613
//more values
]
},
{
"variable": "Variable_3",
"timestamps": [
"2021-01-01T00:00:00Z",
"2021-01-01T00:01:00Z",
"2021-01-01T00:02:00Z"
//more timestamps
],
"values": [
0.4030756879437628,
0.15526889968448554,
0.36352226408981103
//more values
]
}
],
"topContributorCount": 2
}
必需的参数
- variableName:此名称应与训练数据中的名称完全相同。
- timestamps:时间戳的长度应等于“1 个滑动窗口”,因为每个流式推理调用都将使用 1 个滑动窗口来检测滑动窗口中的最后一个时间点。
- values:上面输入的每个时间戳中每个变量的值。
可选参数
- topContributorCount:该数字可以指定 N 从“1 到 30”,它将提供异常结果中前 N 个参与变量的详细信息。 例如,如果模型中有 100 个变量,但只关注检测结果中的前 5 个参与变量,则应用数字 5 填充此字段。 默认数字为 10。
响应
示例响应:
{
"variableStates": [
{
"variable": "series_0",
"filledNARatio": 0.0,
"effectiveCount": 1,
"firstTimestamp": "2021-01-03T01:59:00Z",
"lastTimestamp": "2021-01-03T01:59:00Z"
},
{
"variable": "series_1",
"filledNARatio": 0.0,
"effectiveCount": 1,
"firstTimestamp": "2021-01-03T01:59:00Z",
"lastTimestamp": "2021-01-03T01:59:00Z"
},
{
"variable": "series_2",
"filledNARatio": 0.0,
"effectiveCount": 1,
"firstTimestamp": "2021-01-03T01:59:00Z",
"lastTimestamp": "2021-01-03T01:59:00Z"
},
{
"variable": "series_3",
"filledNARatio": 0.0,
"effectiveCount": 1,
"firstTimestamp": "2021-01-03T01:59:00Z",
"lastTimestamp": "2021-01-03T01:59:00Z"
},
{
"variable": "series_4",
"filledNARatio": 0.0,
"effectiveCount": 1,
"firstTimestamp": "2021-01-03T01:59:00Z",
"lastTimestamp": "2021-01-03T01:59:00Z"
}
],
"results": [
{
"timestamp": "2021-01-03T01:59:00Z",
"value": {
"isAnomaly": false,
"severity": 0.0,
"score": 0.2675322890281677,
"interpretation": []
},
"errors": []
}
]
}
响应包含结果状态、变量信息、推理参数和推理结果。
variableStates:列出推理请求中每个变量的信息。
setupInfo:为此次推理提交的请求正文。
results:包含检测结果。 有三种典型类型的检测结果。
isAnomaly:
false
指示当前时间戳不存在异常。true
指示当前时间戳有异常。severity
指示异常情况的相对严重性;对于异常数据,它始终大于 0。score
是模型在做出决策时所依据的原始模型输出。severity
是从score
派生的值。 每个数据点都有score
。
interpretation:此字段仅在检测到时间戳异常时才会显示,其中包含
variables
、contributionScore
、correlationChanges
。contributors:一个列表,其中包含每个变量的贡献分数。 贡献分数越高表示根本原因的可能性越高。 此列表通常用于解释异常情况以及诊断根本原因。
correlationChanges:此字段仅在检测到时间戳异常时才会显示,它包含在 interpretation 中。 它包含
changedVariables
和changedValues
,用于解释变量之间的相关性发生了变化。changedVariables:此字段将显示哪些变量具有与
variable
相关的重大更改。 此列表中的变量按相关更改程度进行排序。
注意
一个常见失误是将 isAnomaly
=true
的所有数据点视为异常。 这最终可能导致出现过多的误报。
应同时使用 isAnomaly
和 severity
(或 score
)筛选出不严重的异常情况,并(选择性地)使用组合来检查异常情况的持续时间,以消除随机干扰。
有关 与 severity
之间的差异,请参阅最佳做法文档中的score
。