长表、频率与时区
本页说明 series 长表的写法、默认清洗路径接受的时间戳格式、freq 频率字符串,以及时区如何换算,末尾附数据格式速查。raw 预设的要求更严格,见 raw 预设。
1. 长表记录
series 是一个扁平数组,每行一条观测:
| 字段 | 类型 | 说明 |
|---|---|---|
unique_id | string | 实体标识,同一实体的行共享同一个值。一个请求可以包含多个实体。 |
ds | string | 时间戳,格式见下一节。 |
y | number | null | 观测值。null 表示该时刻缺失,不能是 NaN 或 Infinity。 |
[
{"unique_id": "grid_01", "ds": "2026-09-01T00:00:00Z", "y": 120.5},
{"unique_id": "grid_01", "ds": "2026-09-01T01:00:00Z", "y": null},
{"unique_id": "grid_02", "ds": "2026-09-01T00:00:00Z", "y": 88.0}
]- 行的顺序不限,也不必按实体分组;默认清洗会按时间排序,并在报告中记录。
- 同一行上的其他数值字段是历史协变量,会被对齐并逐列报告;目前没有模型使用它们,见协变量支持现状。
- 预测结果按实体返回,时间戳一律为 UTC,以
Z结尾。
2. 时间戳格式
default 与 strict 预设下,ds 可以是以下任一格式。同一实体内格式应保持一致;非 ISO 格式会在清洗报告中记为 timestamp_format 问题。
| 格式 | 示例 |
|---|---|
ISO 8601(日期与时间之间可用 T 或空格,可带 Z 或 ±HH:MM) | 2026-09-01T08:00:00+08:00、2026-09-01 08:00、2026-09-01 |
紧凑日期 YYYYMMDD | 20260901 |
斜杠日期 YYYY/M/D(可带时间) | 2026/9/1 08:00 |
D/M/YYYY 或 M/D/YYYY | 01/09/2026 |
| Unix 秒或毫秒(2000 年至 2100 年之间) | 1788220800 |
年月 YYYY-MM、YYYY/M、YYYYMM | 2026-09 |
| 中文日期 | 2026年9月1日、2026年9月 |
D/M/YYYY 与 M/D/YYYY 只有在数据能证明日月顺序时才会被接受(例如出现 13/09/2026);否则返回 AMBIGUOUS_DATE_FORMAT,这时请传 options.ds_format(dmy 或 mdy),或直接改用 ISO 8601。
3. 频率字符串
freq 是可选的。省略时服务会从数据推断,并在清洗报告的 series[].freq 中给出推断结果与置信度;推断失败返回 FREQ_INFERENCE_FAILED,多个实体推断出不同频率或存在多个候选时返回 FREQ_AMBIGUOUS。数据不规则时,建议总是显式传入。
| 写法 | 含义 |
|---|---|
s、S | 秒 |
min、T、m | 分钟(小写 m 是分钟,不是月) |
h、H | 小时 |
d、D | 天 |
w、W | 周(固定 7 天) |
MS | 月初 |
ME、M | 月末 |
QS | 季初 |
QE、Q | 季末 |
YS、AS | 年初 |
YE、Y、A | 年末 |
M@<day> | 每月固定的第 day 日(1 至 31),例如 M@15;大于当月天数时取月末 |
B | 工作日(周一至周五):周末不算缺口,预测时间戳跳过周末。仅在清洗策略版本 2026-11 及之后(含默认的 2026-13)可用,这些版本也会把没有周末日期的日频数据识别为 B;不带倍数;raw 预设不接受 |
- 除
B外,所有写法都可以带整数倍数前缀,例如15min、2h、3MS、3M@15。 - 大小写敏感:
M是月末,m是分钟。 freq字段会原样回显你传入的写法;省略时回显推断出的规范写法,例如min、h、d、w、MS、QE、M@15,带倍数时如15min。- 月、季、年等日历频率按本地时钟推进(时区见下一节),会自动处理大小月、闰年与夏令时。
raw预设只接受固定步长的频率(秒、分钟、小时、天、周),日历频率返回RAW_INPUT_INVALID。
4. 时区处理
- 带偏移的时间戳(
Z或±HH:MM)按自身偏移解析,options.timezone不会覆盖它。 - 不带偏移的时间戳按
options.timezone(IANA 时区名,例如Asia/Shanghai)解析;未提供时按 UTC 解析,并在报告中记一条naive_timestamps_assumed_utc(info 级别)。 - 无效的时区名返回
VALIDATION_ERROR。 - 输出:
model_input与forecast中的时间戳一律换算为 UTC,客户端需要时再换回本地时间。
清洗报告的 series[].timezone 记录每个实体实际使用的时区:
| 字段 | 说明 |
|---|---|
used | 实际使用的时区,例如 Asia/Shanghai、UTC。 |
source | explicit_offset(来自时间戳自带的偏移)、option(来自 options.timezone)或 default_utc。 |
naive_rows / explicit_rows | 不带偏移与带偏移的行数。 |
explicit_offsets | 数据中出现过的偏移,例如 ["+08:00"]。 |
下例把北京时间的月度数据按月初频率处理。每个月初是本地的 00:00,换算为 UTC 后落在前一天 16:00:
// 请求
{"series": [{"unique_id": "sales", "ds": "2025-01-01", "y": 101}, ...],
"h": 2, "freq": "MS", "options": {"timezone": "Asia/Shanghai"}}
// model_input[0].ds 为 "2024-12-31T16:00:00Z"
// forecast 的两个时间戳为 "2026-08-31T16:00:00Z" 与 "2026-09-30T16:00:00Z"
// cleaning_report.series[0].timezone
{"used": "Asia/Shanghai", "source": "option", "naive_rows": 20,
"explicit_rows": 0, "explicit_offsets": []}5. 数据格式速查
/v1/forecast 请求中与数据格式相关的字段一览。完整字段、默认值与校验顺序见 POST /v1/forecast。
| 字段 | 位置 | 说明 |
|---|---|---|
unique_id | series[] | 实体标识,见长表记录。 |
ds | series[] | 时间戳,见时间戳格式与时区处理。 |
y | series[] | 历史观测值,null 表示缺失。 |
h | 请求体 | 预测步数。 |
freq | 请求体 | 频率字符串,可省略由服务推断,见频率字符串。 |
level | 请求体 | 区间水平列表,见预测区间。 |
future_covariates | 请求体 | 预测窗口内的已知未来特征,不含目标列 y,见协变量支持现状。 |