开发者文档:/v1/forecast 与 /v1/clean 已开放,API 密钥在 SequenxAI 平台自助创建。

预测区间

/v1/forecast 默认只返回点预测 y_hat。在请求中传入 level,每个预测点会额外带上对应水平的区间。

1. level 参数

level 是 1 至 99 的整数列表,例如 [80, 90]。重复的值会合并,顺序不影响结果。

每个水平 L 对应模型的两个分位数:

边界分位数L = 80 时L = 90 时
lo0.5 − L / 2000.100.05
hi0.5 + L / 2000.900.95

2. 原生分位点

模型只能输出训练时固定的分位点,服务不做插值:

模型原生分位点可原样得到的 level
hora-1.00.01、0.05、0.10、0.15 … 0.90、0.95、0.9910、20 … 80、90、98

请求的分位数不在列表中时,由 quantile_policy 决定处理方式。

3. quantile_policy(Beta)

取值行为
nearest(默认)用最接近的原生分位点代替(距离相同时取更靠外的一个),区间键按实际使用的分位数标注,不沿用请求的水平。
strict只要有一个分位数不是原生的,就在推理和额度预占之前返回 422 QUANTILE_UNSUPPORTED,不计费。

例如请求 level: [80, 95]:80 对应 0.1 与 0.9,是原生的;95 需要 0.025 与 0.975,在 nearest 下分别由 0.01 与 0.99 代替,因此响应里是 "80" 与 "98" 两个键,不会出现 "95"。

strict 下的错误响应列出不支持的分位数与模型支持的分位数:

quantile-unsupported.json
{
"error": {
  "code": "QUANTILE_UNSUPPORTED",
  "message": "Model 'hora-1.0' does not natively produce quantile levels [0.025, 0.975]",
  "request_id": "req_…",
  "details": {
    "model": "hora-1.0",
    "level": [95],
    "unsupported": [0.025, 0.975],
    "supported": [0.01, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 0.99]
  }
}
}

4. 响应形状

intervals 是以水平字符串为键的对象,键是实际使用的两个分位数之间的覆盖水平 (hi − lo) × 100;不传 level 时,预测点上没有 intervals 字段。

forecast-point.json
{
"unique_id": "meter-001",
"ds": "2026-09-03T00:00:00Z",
"y_hat": 140.2,
"intervals": {
  "80": {"lo": 133.9, "hi": 146.8},
  "90": {"lo": 131.7, "hi": 148.9}
}
}
  • lo 总是不大于 hi。
  • 多个水平落到同一对原生分位数时只返回一次;两端都落到中位数的水平不返回区间。
  • 区间与点预测都来自同一次模型推理,不额外计费。

响应顶层还有 quantile_report(Beta),说明请求的分位数、实际使用的分位数以及每一处替换:

quantile-report.json
{
"quantile_report": {
  "policy": "nearest",
  "requested": [0.025, 0.1, 0.5, 0.9, 0.975],
  "used": [0.01, 0.1, 0.5, 0.9, 0.99],
  "substitutions": [
    {"requested": 0.025, "used": 0.01},
    {"requested": 0.975, "used": 0.99}
  ]
}
}

5. 点预测分位数 point_quantile(Beta)

y_hat 默认是模型的中位数(0.5 分位),不是期望值。需要偏保守或偏乐观的点预测时(例如备货用 P70),传入 point_quantile,y_hat 就改为该分位数:

  • 取值 0.01–0.99,最多 3 位小数(如 0.7、0.025);超出范围、更多小数、布尔值或字符串都返回 422 VALIDATION_ERROR,details.errors[].field 为 point_quantile。
  • 与 level 一样按 quantile_policy 映射到模型的原生分位点,不做插值:nearest 下取最接近的原生分位点(例如 0.33 由 0.35 提供),距离相同时取离中位数更远的一个;strict 下非原生值在额度预占之前返回 422 QUANTILE_UNSUPPORTED,details.point_quantile 为请求值。
  • 与 level 相互独立,所以 y_hat 可以落在区间之外(例如 point_quantile: 0.95 配 level: [80])。
  • 不传时行为与响应完全不变。传了时响应顶层回显实际使用的 point_quantile,quantile_report 的 requested、used、substitutions 包含它,并新增 point_forecast。不额外计费。
point-quantile-request.json
{
"model": "hora-1.0",
"series": [ … ],
"h": 24,
"level": [80],
"point_quantile": 0.33
}
point-quantile-response.json
{
"model_used": "hora-1.0",
"point_quantile": 0.35,
"forecast": [
  {"unique_id": "meter-001", "ds": "2026-09-03T00:00:00Z", "y_hat": 145.1,
   "intervals": {"80": {"lo": 133.9, "hi": 146.8}}}
],
"quantile_report": {
  "policy": "nearest",
  "requested": [0.1, 0.33, 0.5, 0.9],
  "used": [0.1, 0.35, 0.5, 0.9],
  "substitutions": [{"requested": 0.33, "used": 0.35}],
  "point_forecast": {"requested": 0.33, "used": 0.35, "method": "nearest"}
}
}