Appearance
Level 5 _eval_batch 四段总览
Abstract
入口:
pythonForecastingStrategy.execute(...) -> RollingForecast._execute(...) -> RollingForecast._eval_batch(...)这一层解释:
_eval_batch(...)内部先按顺序怎么推进,再按逻辑分块怎样嵌套。
1. 上一层与当前层位置
上一层是:
当前层是:
- Level 5:第一次同时使用“顺序图 + 抽象索引树 + 逻辑分块”。
当前层对应上一层中的具体位置是:
4B-3 进入 _eval_batch(...)
1.5 这一层的关系类型说明
这一层的 5A / 5B / 5C / 5D 表示的是:
- 同一个函数
_eval_batch(...)的内部职责分块 - 不是四个独立对象
- 也不是外层壳和内层任务体的关系
所以这一层要这样读:
- 顺序图:
_eval_batch(...)执行时先后发生什么
- 抽象索引树:
- 为了理解这个函数,人脑把它拆成哪四块
这棵树是函数内部逻辑树,不是对象包含树。
2. 当前层第一性
_eval_batch(...) 的第一性是:
在一条序列上,按 rolling forecast 协议,完成“切数据 -> 训练 -> 批量预测 -> 打分收尾”。
这已经不是一个单一动作,而是一个完整业务主体,所以必须同时从两个维度看:
- 顺序
- 代码实际怎么往下执行
- 逻辑分块
_eval_batch(...)内部有哪些职责块
3. 当前命令的最小例子
这一层以下文这组参数为具体例子:
series.shape = (17420, 7)tv_ratio = 0.8train_ratio_in_tv = 0.75horizon = 24stride = 24num_rollings = 48target_channel = null或默认目标列集合
由此得到:
train_length = int(17420 * 0.8) = 13936test_length = 17420 - 13936 = 3484train_valid_data.shape = (13936, 7)test_data.shape = (3484, 7)
4. 先看顺序图
这张图回答的是:
代码执行时,大致先后顺序是什么。
5. 再看抽象索引树
Note
这里的
5A / 5B / 5C / 5D也是_eval_batch(...)函数内部的并列逻辑分块。它们表示的是:
- 同一个函数内部
- 可以按职责拆开的四段
它们不是:
- 四个彼此独立的外层对象
- 四个并列顶层模块
所以这一层的树,更像“函数内部逻辑分块树”,不是“外层对象关系树”。
这棵树回答的是:
为了理解
_eval_batch(...),人脑应该把它分成哪四块。
6. 四个逻辑分块的抽象意义
6.1 5A 配置与切数
抽象意义:
把“整条序列 + strategy 配置”转换成“后续训练和预测都能直接使用的数据块”。
6.2 5B 训练子块
抽象意义:
在 rolling 预测之前,先对模型完成一次 fit。
6.3 5C 预测子块
抽象意义:
用 rolling window 的方式,把测试区间变成若干预测请求,再批量送进模型。
6.4 5D 打分与收尾子块
抽象意义:
把模型预测结果和真实目标对齐,计算指标,并组装成统一结果格式。
7. 职责树
7.1 5A 配置与切数
负责生成:
train_valid_datatest_datatarget_train_valid_datatarget4batchcovariates_traincovariates4batch
7.2 5B 训练子块
负责生成:
- 训练好的模型内部状态
eval_scalerfit_time
7.3 5C 预测子块
负责生成:
index_listbatch_makerall_predictstotal_inference_time
7.4 5D 打分与收尾子块
负责生成:
targetsall_test_resultssingle_series_results
8. 输入输出接口
8.1 本层入口接口
python
_eval_batch(series, meta_info, model, series_name)输入:
series: pd.DataFramemeta_infomodelseries_name
8.2 关键配置变量
target_channelstridehorizonnum_rollingstrain_ratio_in_tvtv_ratio
8.3 本层输出
single_series_results: List
9. 函数 / 文件关系图
10. 当前例子的具体落地
10.1 配置与切数
series.shape = (17420, 7)train_valid_data.shape = (13936, 7)test_data.shape = (3484, 7)
10.2 训练
fit_method = model.forecast_fit- 在
target_train_valid_data上 fit 一次
10.3 预测
index_list = _get_index(13936, 3484, 24, 24)- 再截断为前
48个 rolling 位置
10.4 打分
- 每个 rolling 窗口拿到一个
predicts - 与同位置
target做指标计算 - 最终对所有 rolling 窗口指标取平均
11. 下一层怎么分
如果继续 BFS 往下走,最自然的顺序是:
- 先细分
5B 训练子块 - 再细分
5C 预测子块 - 最后细分
5D 打分与收尾子块
也就是先进入:
python
fit_method(...)再进入:
python
forecast_fit(...)这一层已经继续细分成三篇下层文档:
5B 训练子块5C 预测子块5D 打分与收尾子块
12. 只留一句
Level 5 要同时掌握两件事:
_eval_batch(...)的执行顺序,以及它内部的四个逻辑分块。