回测和研究
A backtest 逐步运行一个工作流,回顾过去,并根据接下来实际发生的情况,对每一步的决定进行评分。
A study 同时运行多个回测,以比较不同的设置或提示,并真实地对它们进行排名。两者都位于工作流的 Backtest 标签下。
回测所运行的所有内容都标记为 HISTORICAL,因此重放的决定永远不会与实时决策混淆。
- 你选择一个 config:时间范围、步骤大小(例如一天)以及要重放的历史数据。
- 工作流每一步运行一次。在每一步,它只能看到当时可以知晓的内容——不能看到之后的信息。
- 每个决定都根据接下来发生的事情进行评分。运行卡显示结果和整个运行的摘要。
回测的花费与正常运行的方式相同:每个模型调用都会被计入你的 workspace。运行卡和 Settings → Usage 显示了其成本。
一个研究是一个 search。你描述要尝试的内容——一组参数值、一定数量的随机抽样,或一个步骤的替代提示——然后研究会对多个时间窗口内的每一个候选者作为回测运行。接着,它会在未调优的窗口上对候选者进行排名,并减少尝试许多事物的运气影响。
排行榜显示每个候选者的:
| 列 | 意义 |
|---|---|
| Adjusted | 在纠正尝试的候选者数量后的分数。这是排名。 |
| Out-of-sample | 在候选者未调优的窗口上的分数。 |
| In-sample | 在候选者调优的窗口上的分数——以便你可以看到差距。 |
| Overfit gap | In-sample 减去 Out-of-sample。较大的差距意味着候选者学习了噪声。 |
| Cost | 该候选者的运行成本(以美元计)。 |
标题还显示预定的候选者数量、实际运行的候选者数量以及丢弃的候选者数量,并显示在这些候选者中纯粹运气可能获得的最佳分数——在或低于该分数的顶级分数意味着搜索没有找到任何内容。
最佳候选者将再次在 holdout 上进行评分:一个最终的时间片段,任何候选者都没有在其上调过优。这个分数是值得信赖的。
每个研究都有上限
Section titled “每个研究都有上限”研究的花费是乘法:每个候选者 × 每个折叠 × 两个窗口 × 每个步骤。所以研究必须在开始前有一个预算,并且没有“无限”选项。
始终需要两个上限:
| 上限 | 约束内容 |
|---|---|
| 最大候选者 | 允许运行的候选者数量。 |
| 最大总步骤 | 整个研究可运行的工作流步骤数。 |
第三个是可选的:
| 上限 | 约束内容 |
|---|---|
| 预算(美元) | 整个研究的最大费用。 |
任何一个上限首先被达到时将停止研究。已经运行的内容不会被丢弃:研究会被标记为 Budget reached,已运行的候选者会被排名,并从中选出一个赢家。
如何工作及其美元估算
Section titled “如何工作及其美元估算”当你输入美元预算时,表单会显示估算——例如 ≈ $0.01 对于 2 个候选者 × 2 个折叠 × 2 个窗口 + holdout。这个估算来自 真实运行:你在 workspace 中此工作流版本的最近完成的回测,除以它运行的步骤,再乘以研究将运行的步骤。因此,这包括一次运行实际花费的所有内容——工具、重试和评分审核——而不仅仅是模型价格。
因此,未在你的 workspace 中进行过回测的版本无法给出美元预算。先运行一个回测,或者创建没有美元预算的研究。表单会告诉你你处于哪个情况。
低于估算的预算是允许的。研究只会在将超出预算的运行之前停止,保留已经运行的内容,并在排行榜上告知你——包括当 holdout 是它无法负担的运行时。
研究的成本及查看位置
Section titled “研究的成本及查看位置”随着每次运行的完成,其成本被添加至研究和对应的候选者。排行榜标题显示 Spend——研究迄今为止的成本,在设有预算时显示在其预算旁边的估算。Cost 列显示每个候选者的分摊金额。创建在这一特性之前的研究显示没有费用,而不是误导性的 $0。
按计划运行研究
Section titled “按计划运行研究”研究回答“哪些设置在过去有效”。按计划运行它会回答下一个问题:赢家在新数据到达时是否 保持 赢家?
从回测标签的研究部分中打开:选中 Re-run on a schedule,选择已完成的研究来重新运行,并设置节奏。所选的研究必须有 USD budget——计划中的研究是相同的花费,会重复,因此上限不是可选的。每次重新运行都复制该预算。
每次重新运行:
- 保持与其所依赖的研究相同的搜索空间,并将之前的赢家作为候选者,以便它有一个要战胜的目标;
- 仅对在之前研究的 holdout 之后到达的数据进行评分。之前的 holdout 已被用于选择赢家,因此再也无法成为公平测试;重新运行的折叠可能会从中学习,但其 holdout 始终是新的。这使得链中的每个 holdout 都成为诚实的、独立的样本——并让 lineage 面板可以说明是否通过所有重新运行的最佳结果优于运气所能产生的结果。
研究的排行榜下方的 lineage 面板列出了每个重新运行,显示其评分窗口、赢家、holdout 分数以及赢家是否变更。Expected best of k under noise 这一行是纯粹的机会会产生的最佳候选者的结果。如果你的最佳 holdout 达到或低于这一分数,那么赢家没有显示出持续性——当出现这种情况时,面板会这样说明。
当按计划的重新运行选出与之前不同的赢家时,设置计划的人会收到 “A scheduled study changes its winner” 通知(可在设置中调整 → Notifications)。
为什么我的计划研究被跳过了?
Section titled “为什么我的计划研究被跳过了?”在数据到达之间,计划的正常状态是 skipped,并且研究部分会显示为何在计划控制下:
| 消息 | 意义 | 该做什么 |
|---|---|---|
| 还没有足够的未见数据:20 步中有 7 步 | 自最后一个 holdout 以来,新的步骤到达数量少于研究的最低限制(在创建研究时设置:Min. unseen steps for a re-run)。 | 无需任何操作——只要有足够的数据存在就会运行。它从不评分较短的窗口。 |
| 有一个研究或回测正在进行中 | 每个工作流只能有一个研究。 | 它会在下一个到期时间重试。 |
| 上一项研究在次时代未完成 | 上一次重新运行被取消或失败,因此没有可以重新运行的赢家。 | 取消计划并从已完成的研究中重新启用。 |
| 根研究没有 USD 预算 | 你选择的研究是在没有预算的情况下创建的。 | 创建一个具有 USD 预算的研究,然后从中安排。 |
| 根研究已被删除 | 计划自动关闭。 | 选择一个新研究并重新启用。 |
| 工作区订阅已过期 / 使用预算耗尽 | 在工作区恢复之前,计划的工作将被拒绝。 | 修复工作区;计划会自行恢复。 |
排行榜的 Promote winner 按钮通过正常激活路径激活获胜候选者的版本,因此你的评估门仍然适用。获胜者仅在参数(而非提示)发生变化的情况下没有内容可激活:将其参数应用于配置即可。
为什么我输入预算时研究被拒绝?
这个版本在你的 workspace 中没有完成的回测以供估算。运行一次,然后重试——或者将美元预算留空。
为什么研究提前停止了?
达到了一个上限:候选者、步骤或美元。研究会说明是哪一项,并保留并排名所有已运行的内容。
为什么 holdout 消失了?
预算在赢家的 holdout 运行之前已达到。排名仍然有效;holdout 分数不存在。增加预算并重新运行研究以获取它。
我可以同时在一个工作流上运行两个研究吗?
不可以。每个工作流一次只能有一个研究;取消正在运行的一个,或等候它完成。
我的计划研究持续说“未见数据不足”。它坏了吗?
不。重新运行只评分在之前 holdout 之后到达的数据,并会等待至少你设置的最低数量。向数据集添加数据(或扩展配置的时间范围),它将在下一个到期时间运行。
为什么 lineage 警告说最佳结果在“噪声范围内”?
在 k 次重新运行中,k 个诚实分数的最佳分数仍然是一个最大值,而仅凭运气会产生一个最大值。面板会减去这一点。如果你的最佳 holdout 未超越这一点,赢家并没有表明存在持久性——继续收集数据。