通过分层汇总减少预测偏差

本页面介绍什么是分层预测以及它的目标是什么,并介绍一些可减少预测模型中的偏差的训练策略。

如需详细了解如何在训练预测模型时使用 API 配置分层预测,请参阅训练预测模型

什么是分层预测

时序通常采用嵌套层次结构来构建。例如,零售商销售的所有商品可以分为不同的商品类别。类别可以进一步分为各个商品。在预测未来的销量时,某个类别的商品的预测结果总和应等于该类别本身的预测结果,整个层次结构向上以此类推。

商品和类别的层次结构。

同样,单个时序的时间维度也可以体现层次结构。例如,单件商品的预测每日销量的总和应等于该商品的预测每周销量。下图将整个组和时间层次结构显示为矩阵:

时序矩阵。

分层预测有三个目标:

  • 减少整体偏差以改善所有时序上的指标(总销量)。
  • 减少时间偏差以改善预测范围中的指标(季节性销量)。
  • 减少组级别偏差以改善一组时序上的指标(单个商品销量)。

在 Vertex AI 中,分层预测通过纳入汇总预测结果的额外损失项来考虑时序的层次结构。

Hierarchical loss = (1 x loss) +
                    (temporal total weight x temporal total loss) +
                    (group total weight x group total loss) +
                    (group temporal total weight x group temporal total loss)

例如,如果分层组为“类别”,则“类别”级别的预测结果是该类别中所有“商品”的预测结果的总和。如果模型的目标是平均绝对误差 (MAE),则损失将包括“商品”和“类别”级别的预测结果的 MAE。这有助于提高层次结构中不同级别的预测的一致性,在某些情况下,甚至可能改善最低级别的指标。

为模型训练配置分层汇总

您可以在训练预测模型时配置分层汇总,具体方法是在 Vertex AI SDK 中配置 AutoMLForecastingTrainingJob 时,或者在 Vertex AI API 中配置 hierarchyConfig

AutoMLForecastingTrainingJobhierarchyConfig 的可用参数包括:

  • group_columns
  • group_total_weight
  • temporal_total_weight
  • group_temporal_total_weight

这些参数支持组和时间汇总损失的不同组合。它们还允许您分配权重,以提高尽可能减少相对于单个损失的汇总损失的优先级。例如,如果权重设置为 2.0,则它的权重是单个损失的两倍。

group_columns

训练输入表中用于标识层次结构级别分组的列名。这些列必须为 time_series_attribute_columns。如果未设置组列,则所有时序将被视为同一组,并按所有时序汇总。

group_total_weight

组汇总损失相对于单个损失的权重。如果设置为 0.0 或未设置,则停用。

temporal_total_weight

时间汇总损失相对于单个损失的权重。如果设置为 0.0 或未设置,则停用。

group_temporal_total_weight

总(组 x 时间)汇总损失相对于单个损失的权重。如果设置为 0.0 或未设置,则停用。如果未设置组列,则所有时序将被视为同一组,并按所有时序汇总。

减少偏差的策略

假设从某一种汇总(组或时间)开始,权重为 10.0,然后根据结果将值减半或加倍。

减少整体偏差

在用于在门店中分布库存的精细预测中,如果将商品 x 门店 x 日期级别的加权绝对百分比误差 (WAPE) 用作预测指标,则预测在汇总级别通常会预测不足。要补偿此整体偏差,您可以尝试以下操作:

  • group_total_weight 设置为 10.0
  • 不设置 group_columns
  • 不设置其他权重。

这将汇总所有时序,并减少整体偏差。

减少时间偏差

在长期规划中,可能会在商品 x 区域 x 周级别进行预测,但相关指标可能会根据季节性总计进行衡量。要补偿此时间偏差,您可以尝试以下操作:

  • temporal_total_weight 设置为 10.0
  • 不设置 group_columns
  • 不设置其他权重。

这将汇总时序的预测范围中的所有日期,并减少时间偏差。

减少组级别偏差

对于库存补充流程中的多用途预测,商品 x 门店 x 日或周级别的精细预测结果可能会汇总到商品 x 分发中心 x 日级别(用于分布),或者汇总到商品类别 x 日级别(用于材料订购)。为此,请执行以下操作:

  • group_total_weight 设置为 10.0
  • 设置 group_columns,例如 ["region"] 或 ["region", "category"].。设置多个组列会使用它们的组合值来定义组。为获得最佳结果,请使用具有 100 个或更少的不同组合值的组列。
  • 不设置其他权重。

这将汇总同一天同一组中的所有时序,并减少组级别的偏差。

限制

  • 仅支持一个级别的时序汇总。如果指定了多个分组列(例如“product, store”),则只有在它们共用“product”和“store”的相同值时,时序才会位于同一组中。
  • 我们建议使用不超过 100 个组。

后续步骤