AutoML 中的预测方法概述
本文介绍 Azure 机器学习中的 AutoML 用于准备时序数据和生成预测模型的方法。 有关在 AutoML 中训练预测模型的说明和示例,请参阅为时序预测设置 AutoML。
AutoML 中的预测方法
AutoML 使用几种方法来预测时序值。 这些方法大致可以分为两类:
- 使用目标数量的历史值对未来进行预测的时序模型
- 使用预测变量预测目标值的回归或解释模型
假设你需要预测一家杂货店对特定品牌橙汁的每日需求。 对于表达式,用 $y_t$ 表示第 $t$ 天对该品牌的需求。 一个时序模型使用历史需求的某些函数预测在 $t+1$ 的需求,表达式如下:
$y_{t+1} = f(y_t, y_{t-1}, \ldots, y_{t-s})$
函数 $f$ 通常具有你使用过去观测到的需求进行优化的参数。 $f$ 用于进行预测的历史量 $s$ 也可以被视为模型的一个参数。
橙汁需求示例中的时序模型可能不够准确,因为它只使用了过去的需求信息。 还有许多其他因素可能会影响未来需求,如价格、星期几以及假期。 考虑一个使用以下预测变量的回归模型,表达式如下:
$y = g(\text{price}, \text{day of week}, \text{holiday})$
同样,函数 $g$ 通常有一组参数(包括管理正则化的值),AutoML 利用过去的需求值和预测变量的值进行调整。 从表达式中省略 $t$,以强调回归模型使用同期定义的变量之间的相关模式来进行预测。 要从 $g$ 预测 $y_{t+1}$,需要知道星期几对应于 $t+1$,这一天是否是节假日,以及 $t+1$ 当天的橙汁价格。 使用日历可轻松确认前两条信息。 零售价格通常是提前设定的,因此橙汁的价格很可能提前一天就知道了。 但是,未来 10 天的价格可能还不得而知。 请务必了解,这种回归的效用受限于你需要预测多远的未来(也称为“预测范围”),以及你对预测变量的未来值的了解程度。
重要
AutoML 的预测回归模型假设用户提供的所有特征在未来都是已知的,至少在预测范围内是已知的。
此外,还可以扩充 AutoML 的预测回归模型,以使用目标和预测变量的历史值。 由此得到一个具有时序模型和纯回归模型特征的混合模型。 历史数量是回归中的额外预测变量,称为“滞后数量”。 滞后的顺序是指该值可以追溯到多远以前。 例如,在橙汁需求示例中,目标的两个滞后顺序的当前值是两天前观测到的橙汁需求。
时序模型与回归模型之间的另一个显著区别在于它们生成预测的方式。 递归关系通常定义一次生成一个预测的时序模型。 为了预测未来的多个时段,它们会循环访问预测范围,将以前的预测反馈到模型中,以便在需要时生成下一个提前一个时段的预测。 相比之下,回归模型被认为是直接预测器,可在一次尝试中生成所有预测。 直接预测器可能比递归方法更好,因为递归模型在将以前的预测反馈到模型时,会将预测误差混淆在一起。 当包含滞后特征时,AutoML 会对训练数据进行一些重要的修改,让回归模型可充当直接预测器。 有关详细信息,请参阅 AutoML 中时序预测的滞后特征。
AutoML 中的预测模型
机器学习中的 AutoML 实现以下预测模型。 对于每个类别,模型大致按它们可纳入的模式的复杂性(也称为模型容量)排列。 朴素模型仅预测最后一个观测值,它的容量较低,而时域卷积网络 (TCNForecaster) 是可能具有数百万个可优化参数的深度神经网络 (DNN),具有较高的容量。
时序模型 | 回归模型 |
---|---|
Naive、Seasonal Naive、Average、Seasonal Average、ARIMA(X)、指数平滑法 | Linear SGD、LARS LASSO、弹性网络、Prophet、K 最近邻算法、决策树、随机森林、极度随机树、梯度提升树、LightGBM、XGBoost、TCNForecaster |
AutoML 还包括集成模型,这些模型创建性能最佳的模型的加权组合,进一步提高准确性。 对于预测,使用软投票集成,通过 Caruana 集成选择算法找到组成和权重。
注意
对于预测模型集成,有两个重要的注意事项:
- 目前,TCN 不能包含在集成中。
- 默认情况下,AutoML 禁用“堆栈集成”方法,它包含在 AutoML 中的默认回归和分类任务中。 堆栈集成对最佳模型预测进行元模型拟合,以找到集合权重。 在内部基准测试期间,此策略更倾向于过度拟合时序数据。 此结果可能会导致泛化不佳,因此默认情况下堆栈集成处于禁用状态。 可根据需要在 AutoML 配置中启用该集成。
AutoML 如何使用数据
AutoML 接受表格“宽”格式的时序数据。 每个变量必须具有其自己的对应列。 AutoML 要求一列作为预测问题的时间轴。 此列必须可分析为日期/时间类型。 最简单的时序数据集由时间列和数字目标列组成。 目标是你打算预测未来的变量。 下表显示此格式的示例值:
timestamp | quantity |
---|---|
2012-01-01 | 100 |
2012-01-02 | 97 |
2012-01-03 | 106 |
... | ... |
2013-12-31 | 347 |
在更复杂的情况下,数据集可能包含与时间索引对齐的其他列:
timestamp | SKU | price | 已播发 | quantity |
---|---|---|---|---|
2012-01-01 | JUICE1 | 3.5 | 0 | 100 |
2012-01-01 | BREAD3 | 5.76 | 0 | 47 |
2012-01-02 | JUICE1 | 3.5 | 0 | 97 |
2012-01-02 | BREAD3 | 5.5 | 1 | 68 |
... | ... | ... | ... | ... |
2013-12-31 | JUICE1 | 3.75 | 0 | 347 |
第二个示例包括一个 SKU、一个零售价格和一个标志,指示除了时间戳和目标数量外,是否播发了某个项。 第二个数据集显示两个序列:一个用于 JUICE1 SKU,另一个用于 BREAD3 SKU。 SKU 列是时序 ID 列,因为按这些列值分组会生成两个组,每个组包含一个序列。 在进行模型扫描之前,AutoML 会对输入配置和数据进行基本验证,并添加工程化特征。
数据长度要求
要训练预测模型,必须具有足够的历史数据量。 此阈值数量因训练配置而异。 如果你提供验证数据,则每个时序所需的最小训练观测数表示如下:
$T_{\text{user validation}} = H + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
在此表达式中,$H$ 是预测范围,$l_{\text{max}}$ 是最大滞后顺序,$s_{\text{window}}$ 是滚动聚合功能的窗口大小。 如果你使用交叉验证,则最小观测数表示如下:
$T_{\text{CV}} = 2H + (n_{\text{CV}} - 1) n_{\text{step}} + \text{max}(l_{\text{max}}, s_{\text{window}}) + 1$
在此版本中,$n_{\text{CV}}$ 是交叉验证折叠数,$n_{\text{step}}$ 是 CV 步长大小或 CV 折之间的偏移量。 这些公式背后的基本逻辑是,对于每个时序,应始终至少有一个训练观测范围,包括滞后和交叉验证拆分的一些填充。 有关用于预测的交叉验证的详细信息,请参阅 AutoML 中的模型选择。
缺少数据处理
AutoML 中的时序模型需要在时间上有规律的间隔观测,这包括每月或每年观测等情况,其中观测之间的天数可能会有所不同。 在建模过程启动之前,AutoML 必须确保序列的值没有缺失,且观测定期进行。 因此,存在两种数据缺失的情况:
- 表格数据中的某个单元格缺少一个值。
- 与给定时序频率的预期观测对应的一个行缺失。
在第一种情况下,AutoML 使用常见的可配置技术来插补缺失值。 下表显示缺少的预期行的示例:
timestamp | quantity |
---|---|
2012-01-01 | 100 |
2012-01-03 | 106 |
2012-01-04 | 103 |
... | ... |
2013-12-31 | 347 |
此序列表面上有每日频率,但没有 2012 年 1 月 2 日 (2012-01-02) 的观测结果。 在这种情况下,AutoML 为缺失值新增行以尝试填充数据。 然后,quantity
列的新值以及数据中的任何其他列像其他缺失值一样进行插补。 若要执行此过程,AutoML 必须识别序列频率才能填充观测间隙,如本例所示。 AutoML 会自动检测此频率,或者,用户也可以在配置中提供此频率。
可在输入中配置用于提供缺失值的插补方法。 下表列出了默认方法:
列类型 | 默认插补方法 |
---|---|
目标 | 前向填充(最后一个观测接后) |
数值特征 | 中值 |
分类特征的缺失值在数值编码过程中进行处理,方法是加上与缺失值对应的另一个类别。 在这种情况下,插补是隐式的。
自动化特征工程
AutoML 一般会向用户数据新增列,从而提高建模准确度。 工程特征可以包括默认项或可选项。
默认工程特征:
- 派生自时间索引(例如星期几)的 日历特征
- 派生自时序 ID 的分类特征
- 将分类类型编码为数值类型
可选工程特征:
- 与给定地区关联的节假日的指示器特征
- 目标数量滞后
- 特征列滞后
- 目标数量的滚动窗口聚合(例如滚动平均)
- 季节性分解([使用 Loess 的季节性趋势分解 (STL)])
可通过使用 ForecastingJob 类或 Azure 机器学习工作室 Web 界面 从 AutoML SDK 配置特征化。
非静态时序检测和处理
平均值和方差随时间变化的时序称为非平稳时序。 表现出随机趋势的时序本质上是非平稳的。
下图显示了此场景的可视化效果。 图表绘制一个通常呈上升趋势的序列。 如果你计算并比较该序列前半部分和后半部分的平均值,则可确定差异。 该图前半部分的序列平均值小于后半部分的平均值。 序列的平均值取决于所审查的时间间隔,这一事实就是时变矩的一个例子。 在此场景中,序列的平均值是第一个矩。
下一图像显示以一阶差分 ($\Delta y_{t} = y_t - y_{t-1}$) 绘制原始序列的图表。 序列的平均值在时间范围内大致恒定,而方差似乎会有所不同。 此场景演示了一阶平稳时序的示例:
AutoML 回归模型本身无法处理随机趋势,或与非平稳时序相关的其他已知问题。 因此,存在这种趋势时,样本外预测准确度会较差。
AutoML 自动分析时序数据集以确定其级别或平稳性。 检测到非平稳时序时,AutoML 自动应用差分转换以减轻非静态行为的影响。
模型扫描
在通过缺失数据处理和特征工程对数据进行准备后,AutoML 通过使用模型推荐服务扫描一组模型和超参数。
模型基于验证或交叉验证指标进行排名,然后可选择在集成模型中使用排名靠前的模型。 可以检查、下载或部署最佳模型或任何经过训练的模型,从而根据需要生成预测。 有关详细信息,请参阅 AutoML 中用于预测的模型扫描和选择。
模型分组
当一个数据集包含多个时序时,可通过多种方式为该数据建模。 可按时序 ID 列中的数据进行分组,并为每个序列训练独立的模型。 一个更通用的方法是将数据划分为若干组,每个组可包含多个(可能相关的)序列,并为每个组训练一个模型。
默认情况下,AutoML 预测使用混合方法进行模型分组。 时序模型,加上 ARIMAX 和 Prophet,将一个序列分配给一个组,而其他回归模型将所有序列分配给单个组。
下面是每个模型类型使用组的方式:
每个序列位于单独的组中 (1:1):Naive、Seasonal Naive、Average、Seasonal Average、指数平滑、ARIMA、ARIMAX、Prophet
所有序列位于相同的组中 (N:1):Linear SGD、LARS LASSO、弹性网络、K 最近邻算法、决策树、随机森林、极度随机树、梯度提升树、LightGBM、XGBoost,、TCNForecaster
可使用 AutoML 中的许多模型解决方案实现更通用的模型分组。 有关详细信息,请参阅许多模型 - 自动化 ML 笔记本。