9. 时序算法(Microsoft Time Series Algorithm)
a.
目的
Microsoft 时序算法提供了一些针对连续值(例如一段时间内的产品销售额)预测进行了优化的回归算法。 虽然其他 Microsoft 算法(如决策树)也能预测趋势,但是他们需要使用其他新信息列作为输入才能进行预测,而时序模型则不需要。 时序模型仅根据用于创建该模型的原始数据集就可以预测趋势。 进行预测时您还可以向模型添加新数据,随后新数据会自动纳入趋势分析范围内。
下面的关系图显示了一个用于预测一段时间内某一产品在四个不同销售区域的销售额的典型模型。 该关系图中的模型以红色、黄色、紫色和蓝色线条分别显示每个区域的销售额。 每个区域的线条都分为两部分:
- 历史信息显示在竖线的左侧,表示算法用来创建模型的数据。
- 预测信息显示在竖线的右侧,表示模型所做出的预测。
源数据和预测数据的组合称为“序列”。
Microsoft 时序算法的一个重要功能就是可以执行交叉预测。 如果用两个单独但相关的序列为该算法定型,则可以使用生成的模型来根据一个序列的行为预测另一个序列的结果。 例如,一个产品的实际销售额可能会影响另一个产品的预测销售额。在创建可应用于多个序列的通用模型时,交叉预测也很有用。 例如,由于序列缺少高质量的数据,造成对某一特定区域的预测不稳定。您可以根据所有四个区域的平均情况来为通用模型定型,然后将该模型应用到各个序列,以便为每个区域生成更稳定的预测。
b. 原理
在 SQL Server 2005 中,Microsoft 时序算法使用单个算法,即 ARTXP。 ARTXP 算法针对短期预测进行了优化,因此可预测序列中下一个可能的值。 从 SQL Server 2008 开始,Microsoft 时序算法同时使用 ARTXP 算法和另一种算法 ARIMA。 ARIMA 算法针对长期预测进行了优化。
默认情况下,Microsoft 时序算法在分析模式和进行预测时混合使用这两种算法。 该算法使用相同的数据为两个单独的模型定型:一个模型采用 ARTXP 算法,另一个模型采用 ARIMA 算法。然后,该算法结合这两个模型的结果来产生可变数量时间段的最佳预测。 因为 ARTXP 最适合于短期预测,所以在一系列预测的开始时它十分重要。 但是,随着预测的时间段不断地向将来延伸,ARIMA 就比较重要了。
您还可以控制这两种算法的混合方式,以在时序中优先采用短期预测或长期预测。 从 SQL Server 2008 Standard 开始,可指定 Microsoft 时序算法使用以下设置之一:
·
对短期预测仅使用 ARTXP。
·
对长期预测仅使用 ARIMA。
·
使用这两种算法的默认混合。
从 SQL Server 2008 Enterprise 开始,可以自定义 Microsoft 时序算法混合预测模型的方式。 采用混合模型时,Microsoft 时序算法按以下方式混合这两种算法:
·
在进行前几步预测时始终只使用 ARTXP。
·
完成前几步预测后,结合使用 ARIMA 和 ARTXP。
·
随着预测步骤数的增加,预测越来越多地依赖 ARIMA,直至不再使用 ARTXP。
·
您可以通过设置 PREDICTION_SMOOTHING 参数来控制混合点,即减小 ARTXP 权重和增大 ARIMA 权重的速率。
这两种算法都可以检测多个级别的数据的季节性。 例如,数据可能包含嵌套在年度周期内的月度周期。 若要检测这些季节性周期,可提供周期提示或指定算法应自动检测周期。
c. 方法
Microsoft 时序算法包括两个用于分析时序的独立的算法:
·
ARTXP 算法是在 SQL Server 2005 中引入的,针对预测序列中的下一个可能值进行了优化。
·
ARIMA 算法是在 SQL Server 2008 中添加的,用于提高长期预测的准确性。
默认情况下,Analysis Services 分别使用每个算法给模型定型,然后结合结果为数目可变的预测产生最佳预测。 也可以基于您的数据和预测要求选择仅使用其中的一个算法。 在 SQL Server 2008 Enterprise 中,还可以自定义用于在预测过程中控制算法混合的截止点。
Microsoft 研究院开发了在 SQL Server 2005 中使用的原始 ARTXP 算法,并且将该实现基于 Microsoft 决策树算法。 因此,该 ARTXP 算法可描述为用于表示周期性时序数据的自动回归树模型。 此算法将数目可变的过去项与要预测的每个当前项相关。 名称 ARTXP 派生自以下事实,即自动回归树方法(一种 ART 算法)应用于多个未知的先前状态。 有关 ARTXP 算法的详细说明,请参阅 Autoregressive
Tree Models for Time-Series Analysis(时序分析的自动回归树模型)。
该 ARIMA 算法已添加到 SQL Server 2008 的 Microsoft 时序算法中,用于提高长期预测的准确性。 它是 Box 和 Jenkins 描述的用于计算自动回归集成变动平均值的过程的实现。 通过 ARIMA 方法,可以确定按时间顺序进行的观察中的依赖关系,并且可以将随机冲量作为模型的一部分纳入。 该 ARIMA 方法还支持倍乘季节性。 想要了解有关 ARIMA 算法的详细信息的读者最好阅读 Box 和 Jenkins 在论坛上发布的内容;本节旨在提供关于 ARIMA 算法如何在 Microsoft 时序算法中实施的特定详细信息。
默认情况下,Microsoft 时序算法通过使用 ARIMA 和 ARTXP 这两种算法并混合所得到的结果来改进预测准确性。 如果您想要仅使用特定的方法,则可以将算法参数设置为仅使用 ARTXP 或仅使用 ARIMA,或者控制对算法结果进行组合的方式。 请注意,ARTXP 算法支持交叉预测,但 ARIMA 算法不支持。 因此,只有在使用混合算法或将模型配置为仅使用 ARTXP 时,交叉预测才可用。
d. 数据要求
时序模型中必须包含一个含有唯一值的 Key Time 列、输入列以及至少一个可预测列。Microsoft 时序算法支持特定的输入列内容类型、可预测列内容类型和建模标志。输入列支持Continuous、Key、Key Time 和 Table,可预测列支持Continuous、Key、Key Time 和 Table。另外该算法也支持
Cyclical 和 Ordered 的内容类型,但算法会将它们视为离散值,不会进行特殊处理。
换而言之,每个预测模型都必须包含一个事例序列,它是一个列,用于指定发生变化的时间段或其他序列。 例如,上一个关系图中的数据显示了在为期几个月的时间段内自行车的历史销售额和预测销售额的序列。 对于该模型,每个区域是一个序列,并且日期列包含时序,该列也是事例序列。 在其他一些模型中,事例序列可以是文本字段或某个标识符,如客户 ID 或事务 ID。 但是,时序模型必须始终对其事例序列使用日期、时间或某个其他唯一数值。
时序模型的要求如下:
·
单个键时间列 - 每个模型都必须包含一个用作事例序列的数值或日期列,该列定义了该模型将使用的时间段。 Key time 列的数据类型可以是 datetime 数据类型或 numeric 数据类型。 但是,该列必须包含连续值,并且这些值对各个序列而言必须是唯一的。 时序模型的事例序列不能存储在两列中,例如不能存储在一个 Year 列和一个 Month 列中。
·
可预测列 - 每个模型都必须至少包含一个可预测列,算法将根据这个可预测列生成时序模型。 可预测列的数据类型必须具有连续值。 例如,您可以预测在一段时间内数值属性(例如收入、销售额或温度)将如何变化。 但是,您不能使用包含离散值(例如采购状态或教育水平)的列作为可预测列。
·
可选序列键列 - 每个模型可包含一个附加的键列,该列包含标识序列的唯一值。 可选序列键列必须包含唯一值。 例如,只要在每个时间段内每个产品名称都只有一条记录,单个模型就可以包含多个产品型号的销售额。
您可以用若干种不同的方式定义 Microsoft 时序模型的输入数据。 但是,由于输入事例的格式会影响挖掘模型的定义,因此您必须考虑自己的业务需求并相应地准备数据。 下面两个示例说明了输入数据是如何影响模型的。 在这两个示例中,已完成的挖掘模型包含四个不同序列的模式:
·
产品 A 的销售额
·
产品 B 的销售额
·
产品 A 的数量
·
产品 B 的数量
在这两个示例中,您可以预测每个产品新的未来销售额和数量。 不能预测产品或时间的新值。
示例 1:具有表示为列值的序列的时序数据集
该示例使用下表中的输入事例:
TimeID |
Product |
Sales |
Volume |
1/2001 |
A |
1000 |
600 |
2/2001 |
A |
1100 |
500 |
1/2001 |
B |
500 |
900 |
2/2001 |
B |
300 |
890 |
表中的 TimeID 列包含一个时间标识符,每一天有两个条目。 TimeID 列变成事例序列。 因此,应将该列指定为时序模型的 key time 列。
Product 列定义数据库中的产品。 该列包含产品序列。 因此,应将该列指定为时序模型的第二个键。
Sales 列说明指定产品一天的毛利润,Volume 列说明仓库中存放的指定产品数量。 这两列包含用于为模型定型的数据。 Sales 和 Volume 都可以为 Product 列中的各个序列的可预测属性。
示例 2:各序列位于单独列中的时序数据集
尽管该示例使用的输入数据与第一个示例基本相同,但输入数据的结构不同,如下表所示:
TimeID |
A_Sales |
A_Volume |
B_Sales |
B_Volume |
1/2001 |
1000 |
600 |
500 |
900 |
2/2001 |
1100 |
500 |
300 |
890 |
在该表中, TimeID 列仍包含时序模型的事例序列,您将该列指定为 key time 列。 但是,先前的 Sales 和 Volume 列现在拆分为两列,并且拆分后的每个列前面都带有产品名称。 因此,TimeID 列中每天只有一个条目。 这将创建一个包含以下四个可预测列的时序模型:A_Sales、A_Volume、B_Sales 和 B_Volume。
此外,由于您已将产品分成不同的列,因此您不需要指定附加的序列键列。 该模型中的所有列都是事例序列列或可预测列。
e. 查看模型
为模型定型后,结果将存储为一组模式,您可以浏览该模型或利用它来作出预测。
若要浏览该模型,可以使用时序查看器。 该查看器包括一个显示未来预测的图表和一个数据周期性结构的树视图。
f. 预测
默认情况下,在您查看时序模型时,Analysis Services 将为您显示该序列的五种预测。 但是,您可以通过创建查询来返回可变数目的预测,并且可以向预测添加额外的列以返回说明性的统计信息。
使用 Microsoft 时序算法进行预测时,应注意下面的其他限制和要求:
·
只有在使用混合模型或基于 ARTXP 算法的模型时交叉预测才可用。 如果使用仅基于 ARIMA 算法的模型,则无法进行交叉预测。
·
服务器使用的 64 位操作系统不同,时序模型作出的预测也可能不同(有时差异会很大)。 出现这些差异的原因是基于 Itanium 的系统表示和处理浮点算术数字的方式与基于 x64 的系统处理这些计算的方式不同。 由于预测结果可能是特定于操作系统的,因此建议您在评估模型时使用与将用于生产的操作系统相同的操作系统。
g. 自定义算法与性能优化
注意:在所有版本的 SQL Server 中均提供 Microsoft 时序算法;但是,仅在 SQL Server 的特定版本中才支持某些高级功能,包括用于自定义时序分析的参数。 有关 SQL Server 各版本支持的功能列表,请参阅 SQL Server 2012 各个版本支持的功能 (http://go.microsoft.com/fwlink/?linkid=232473)
Microsoft 时序算法支持以下参数,这些参数会影响所生成挖掘模型的行为、性能和精确性。
i. 季节性检测
ARIMA 和 ARTXP 算法都支持季节性检测或周期检测。 Analysis Services 在定型之前使用快速傅立叶变换检测季节性。 但是,您可以通过设置算法参数,影响季节性检测以及时序分析的结果。
·
通过更改 AUTODETECT_SEASONALITY 的值,可以影响生成的时间段的可能数目。
·
通过为 PERIODICITY_HINT 设置一个值或多个值,可以为算法提供有关数据中预期周期的信息并有可能提高检测精度。
注意:ARTXP 和 ARIMA 算法都对季节性提示非常敏感。 因此,提供错误提示可能会对结果产生不利影响。
ii. 选择算法和指定算法混合
默认情况下,在选择 MIXED 选项时,Analysis Services 会将算法组合起来并向它们分配相等的权重。 不过,在 SQL Server 2008 Enterprise 中,可以指定特定的算法,或者可以通过设置参数来自定义结果中各算法的比例,该参数针对短期预测或长期预测为结果加权。 默认情况下,FORECAST_METHOD 参数将设置为 MIXED,Analysis Services 使用这两个算法,并对其值加权以最大化每个算法的强度。
·
若要控制算法选择,可以设置 FORECAST_METHOD 参数。
·
如果要使用交叉预测,则必须使用 ARTXP 或 MIXED 选项,原因是 ARIMA 不支持交叉预测。
·
如果您更看重短期预测,则将 FORECAST_METHOD 设置为 ARTXP。
·
如果您想要改进长期预测,则将 FORECAST_METHOD 设置为 ARIMA。
在 SQL Server 2008 Enterprise 中,还可以自定义 Analysis Services 混合使用 ARIMA 和 ARTXP 算法组合的方式。可以通过设置 PREDICTION_SMOOTHING参数控制混合的起点和变化速率:
·
如果将 PREDICTION_SMOOTHING 设置为 0,则模型将仅使用 ARTXP。
·
如果将 PREDICTION_SMOOTHING 设置为 1,则模型将仅使用 ARIMA。
·
如果将 PREDICTION_SMOOTHING 设置为 0 和 1 之间的某个值,则模型对 ARTXP 算法所加的权重将随着预测步长增加而按指数规律减小。 同时,模型还将 ARIMA 算法的权重设置为 ARTXP 权重的 1 补数。 模型使用规范化和一个稳定常量来平滑曲线。
一般来说,如果最多预测 5 个时间段,则 ARTXP 几乎总是最佳选择。 但是,当增加要预测的时间段的个数时,ARIMA 的性能通常会更好。
下图演示当 PREDICTION_SMOOTHING 设置为默认值 0.5 时模型如何混合使用这两个算法。 ARIMA 和 ARTXP 开始时权重相等,但随着预测步骤数增加,ARIMA 的权重越来越大。
而下图演示当 PREDICTION_SMOOTHING 设置为 0.2 时如何混合使用这两个算法。 对于步骤 0,模型为 ARIMA 加的权重为 0.2,为 ARTXP 加的权重为 0.8。此后,ARIMA 的权重将按指数规律增大,而 ARTXP 的权重将按指数规律减小。
iii. 设置算法参数
1. AUTO_DETECT_PERIODICITY
指定一个介于 0 和 1 之间的数值,用于检测周期。默认值为 0.6。
如果将此值设置为比较接近于 0 的数,则只检测周期性强的数据的周期。
如果将此值设置为比较接近于 1 的数,则往往会发现许多接近周期的模式并倾向于自动生成周期提示。
处理大量的周期提示可能会导致模型定型时间明显延长,不过模型会更精确。
2. COMPLEXITY_PENALTY
控制决策树的增长。 默认值为 0.1。
减少该值将增大拆分的几率。 增大该值将减小拆分的几率。此参数仅在某些版本的 SQL Server 中可用。
3. FORECAST_METHOD
指定要用于分析和预测的算法。 可能值为 ARTXP、ARIMA或 MIXED。 默认值为 MIXED。
4. HISTORIC_MODEL_COUNT
指定将要生成的历史模型的数量。 默认值为 1。此参数仅在某些版本的 SQL Server 中可用。
5. HISTORICAL_MODEL_GAP
指定两个连续的历史模型之间的时间间隔。 默认值为 10。 该值表示时间单位数,其中单位由模型定义。
例如,如果将此值设置为 g,则将导致按 g、2*g、3*g(依此类推)的间隔为被时间段截断的数据生成历史模型。此参数仅在某些版本的 SQL Server 中可用。
6. INSTABILITY_SENSITIVITY
控制预测方差超过特定阈值的点,在该点后 ARTXP 算法将禁止预测。 默认值为 1。控制预测方差超过特定阈值的点,在该点后 ARTXP 算法将禁止预测。 默认值为 1。
默认值 1 提供与 SQL Server 2005 相同的行为。 Analysis Services 监视每个预测的规范化标准偏差。 对于任何预测,只要该值超过阈值,时序算法就会返回 NULL 并停止预测过程。
值 0 将停止不稳定的检测。 这意味着无论方差为多少,都可以创建无限个预测
默认值 1 提供与 SQL Server 2005 相同的行为。 Analysis Services 监视每个预测的规范化标准偏差。 对于任何预测,只要该值超过阈值,时序算法就会返回 NULL 并停止预测过程。
值 0 将停止不稳定的检测。 这意味着无论方差为多少,都可以创建无限个预测
7. MAXIMUM_SERIES_VALUE
指定要用于预测的最大值。 此参数与 MINIMUM_SERIES_VALUE 一起用于将预测约束到某一预期范围。 例如,您可以指定任何一天的预测销售数量决不应超过库存产品数量。此参数仅在某些版本的 SQL
Server 中可用。
8. MINIMUM_SERIES_VALUE
指定可以预测的最小值。 此参数与 MAXIMUM_SERIES_VALUE 一起用于将预测约束到某一预期范围。 例如,可以指定预测的销售额决不应为负数。此参数仅在某些版本的 SQL
Server 中可用。
9. MINIMUM_SUPPORT
指定在每个时序树中生成一个拆分所需的最小时间段数。 默认值为 10。
10.MISSING_VALUE_SUBSTITUTION
指定如何填补历史数据中的空白。 默认情况下,不允许数据中存在空白。
Previous
- 重复前一时间段中的值。
Mean
- 使用定型时所用的时间段的变动平均值。
Numeric
constant - 使用指定的数字来替换所有缺失值。
None
- 用沿定型模型曲线绘制的值来替换缺失值。这是默认值。
如果数据中包含多个序列,则序列也不能有参差不齐的边缘。 也就是说,所有序列都应具有相同的起点和终点。
对时序模型执行 PREDICTION JOIN 时,Analysis Services 还使用此参数的值来填补新数据中的空白。
11.PERIODICITY_HINT
为算法提供关于数据周期的提示。 例如,如果销售额按年度变化,且序列中的度量单位是月,则周期为 12。 此参数采用{n [, n]} 格式,其中 n 为任意正数。
方括号 [] 中的 n 是可选项,并且可以按需多次重复。 例如,若要为按月提供的数据提供多个周期提示,则可以输入 {12, 3, 1} 来检测年度、季度和月的模式。 但是,周期对模型质量有重大影响。 如果给出的提示与实际周期不同,则会对结果造成不良影响。
默认值为 {1}。
需要使用大括号。 另外,此参数具有字符串数据类型。 因此,如果在数据挖掘扩展插件
(DMX) 语句中键入此参数,则必须用引号将数字和大括号括起来。
12.PREDICTION_SMOOTHING
指定应如何混合模型以优化预测。 可以键入 0 和 1 之间的任何值,也可以使用以下值之一:
0
- 指定预测仅使用 ARTXP。
针对较少的预测来优化预测。
1
- 指定预测仅使用 ARIMA。
针对多个预测来优化预测。
0.5
- (默认值)指定预测时两个算法都应使用并混合结果。
注意: 此参数仅在某些版本的 SQL Server 中可用。
iv. 建模标志
Microsoft
时序算法支持下列建模标志。 创建挖掘结构或挖掘模型时,可定义建模标志以指定分析期间如何处理每列中的值。
1. NOT NULL
指示该列不能包含 Null。
如果 Analysis Services 在模型定型过程中遇到 Null 值,则会导致错误。适用于挖掘结构列。
2. MODEL_EXISTENCE_ONLY
表示该列将被视为具有两个可能状态:Missing 和
Existing。 Null 表示缺失值。适用于挖掘模型列。
h. 示例
Adventure Works Cycles 的管理团队要预测来年的自行车月销售额。 该公司尤为关注一种自行车型号的销售额是否可用于预测另一种型号的销售额。 通过对过去三年的历史数据使用 Microsoft 时序算法,该公司可以建立一个数据挖掘模型,用于预测未来的自行车销售情况。 此外,该公司还可以进行交叉预测,以了解各个自行车型号的销售趋势是否相关。
每个季度,该公司都会计划用最近的销售数据来更新模型,并更新其预测以描绘出最近的趋势。 有些商店不能准确地或始终如一地更新销售数据,为了弥补这一点造成的误差,他们将创建一个通用预测模型,并用该模型对所有区域进行预测。