07-模型运行与回测
article
2026年7月17日2 min read264 words
Updated 2026年7月17日
07 模型运行与回测端到端实现任务
执行要求:直接完成“模型运行与回测”只读治理页面。训练、回测和模型发布由调度链执行;HTTP 请求只展示运行、版本和已发布评估证据。
共同门禁:不执行数据库草案,不修改 V1,不 DROP/清库或插入客户测试数据;g5b2-mysql 仅用于 SHOW、SELECT 和 EXPLAIN。接口统一使用 X-Trace-Id,缺失时后端生成并写响应头;同一动作的前端日志、后端日志和错误响应必须同值。
1. 目标与完成判定
- 菜单:智能研判 / 模型运行与回测,仅 ROLE_ADMIN。
- 路由:/forecast/models。
- 支持按 CGI、metricCode、模型类型、运行/验证状态和时间范围筛选训练运行与模型版本,服务端分页和稳定排序。
- 展示训练范围/截止、样本数、完整率、特征覆盖、缺失特征、运行状态/失败原因、模型/特征版本、验证状态、MAE/RMSE/WAPE、发布时间和发布运行号。
- 选择运行后分页查看逐点回测证据。
2. 开工前必读与现状核对
- 设置 PowerShell UTF-8,阅读仓库门禁、需求 V2.0 第 5.2.2 节、数据库设计第 9.4/10/12 节及模型/回测 DDL。
- 阅读 ModelGovernancePage、types、api/http、PageFeedback、AppShell 和权限处理。
- 阅读 modelState/modelRuns/backtest Controller/Service/Mapper/XML、DTO 和授权测试。
- 用 rg 查找 modelRuns、publishedModelCount、backtestPoints 的全部调用方。
- 当前已有三个 GET 接口,但列表未分页,且必须核对所有接口是否统一 ROLE_ADMIN。
3. 现有接口基线
| 能力 | 当前接口 | 必补项 |
|---|---|---|
| 模型状态 | GET /api/v1/forecast/models/state | ROLE_ADMIN、稳定状态和原因 |
| 运行/版本列表 | GET /api/v1/forecast/models | 服务端分页、筛选、真实 total |
| 逐点回测 | GET /api/v1/forecast/models/{modelRunNo}/backtest | 分页、稳定排序、PUBLISHED 评估限制 |
4. 业务规则与降级
- 页面可以读取训练/调度运行状态用于治理,但任何预测值和回测结论只能来自 PUBLISHED 评估结果;不得查询 STAGED 结果冒充可用模型。
- 模型粒度为 CGI+metricCode;同一对象只有一个当前 PUBLISHED 且 validationStatus=PASSED 的模型。
- MAE、RMSE、WAPE 由 JOB_FORECAST_EVALUATION 计算并发布;同步请求不重算。
- 逐点只使用 MATCHED 有效预测/实际对;无实际值或无预测值保留 pointStatus 和 N/A 原因。
- WAPE 分母为 0 时返回 N/A,不能返回 0。
- 应收计划未确认时完整率可以是 N/A;不得从记录条数猜完整率。
- 模型验证阈值未发布时,新候选不能发布;页面显示验证未配置/未通过。
- 本任务不新增手工训练、模型发布、回滚或停用接口,除非需求文档已有明确状态和页面消费者。
5. 后端实施
- 三个接口统一后端 ROLE_ADMIN;前端菜单可见性不代替权限。
- 列表请求加入白名单筛选、page、size、sort、direction;响应使用 Page
或等价真实 total。 - 列表以 tb_model_run 为主表,LEFT JOIN tb_model_version、PUBLISHED tb_forecast_evaluation_result 和 tb_publish_run,使失败/未评估运行仍能显示自身状态和原因;不得返回堆栈。
- backtest 以 modelRunNo 定位,确认权限和存在性;只返回已发布评估点,支持分页和 targetTime+id 稳定排序。
- state 区分 NO_PUBLISHED_MODEL、VALIDATION_FAILED、TRAINING_INSUFFICIENT、NOT_CONFIGURED、NO_DATA 和 AVAILABLE。
- 中文日志记录筛选、页码、运行/点数、模型状态和降级原因。
6. 数据追溯
| 页面字段 | 主要来源 |
|---|---|
| 训练运行/特征/失败原因 | tb_model_run |
| 模型版本、状态、训练截止、特征版本 | tb_model_version |
| MAE/RMSE/WAPE、验证状态 | tb_forecast_evaluation_result |
| 逐点预测/实际/误差 | tb_forecast_evaluation_point |
| 验证阈值和训练门槛 | tb_analysis_config_item/version |
| 发布运行、时间、traceId | tb_publish_run |
7. 前端适配
- 全部筛选、分页和排序真实进入请求;选择运行后再请求逐点证据。
- 完整率、特征覆盖率、WAPE 只按后端单位元数据展示,不前端换算业务结论。
- 展示失败代码和中文摘要,不显示内部堆栈。
- 403、NO_DATA、无发布模型和验证失败分别显示;切换筛选时清空旧回测明细。
- 管理菜单是否隐藏按现有会话能力实现,但无论可见与否均以后端 403 为准。
8. 最小验证门禁
- 后端测试覆盖:普通用户 403、管理员空库、分页/筛选/稳定排序、WAPE 分母 0、失败运行脱敏、非发布评估不可见。
- 只读 EXPLAIN 模型列表/count 和回测点查询。
- 真实 HTTP 验证 401/403、NO_DATA、参数错误、成功读取和 traceId。
- 运行相关 Maven 测试、Mapper XML 检查和注解 SQL 禁止扫描。
- 运行 cd frontend; npm run build,验证权限态、分页、筛选和回测选择。
9. 交付报告
列出修改文件、契约、角色验证、追溯和实际测试结果。没有真实 PUBLISHED 模型/评估时,只能交付正确的不可用状态,不能声称模型训练或误差已验证。