第 5 课:扩展时序模型

在 SQL Server 2008 Enterprise 中,可以向时序模型中添加新数据,并自动将新数据合并到模型中。 您可以通过下列两种方式之一向时序挖掘模型添加新数据:

  • 使用 PREDICTION JOIN 将外部源中的数据联接到定型数据。

  • 使用单独预测查询每次向数据提供一个切片。

例如,假定您已经在几个月之前为现有销售数据的挖掘模型定型。 当您获得新的销售数据时,您可能希望更新销售预测以合并新数据。 这可以通过一个步骤来完成,即提供新销售数字作为输入数据并基于复合数据集生成新预测。

使用 EXTEND_MODEL_CASES 进行预测

下面是几个使用 EXTEND_MODEL_CASES 进行时序预测的一般示例。 第一个示例使您能够从原始模型的最后一个时间步长开始指定预测数:

SELECT [<model columns>,] PredictTimeSeries(<table column reference>, n, EXTEND_MODEL_CASES) 
FROM <mining model>
PREDICTION JOIN <source query>
[WHERE <criteria>]

第二个示例使您能够指定预测的起始时间步长和结束时间步长。 当您扩展模型事例时,此选项非常重要,这是因为在默认情况下用于预测查询的时间步长始终从原始序列的末尾开始。

SELECT [<model columns>,] PredictTimeSeries(<table column reference>, n-start, n-end, EXTEND_MODEL_CASES) 
FROM <mining model>
PREDICTION JOIN <source query>
[WHERE <criteria>}

在本教程中,您将创建两种查询。

针对时序模型创建单独预测查询

  1. 对象资源管理器中,右键单击 Analysis Services 实例,指向**“新建查询”**,再单击 DMX

    将打开查询编辑器,其中包含一个新的空白查询。

  2. 将单独语句的一般示例复制到空白查询中。

  3. SELECT [<model columns>,] PredictTimeSeries(<table column reference>, n, EXTEND_MODEL_CASES) 
    

    替换为

    SELECT [Model Region],
    PredictTimeSeries([Quantity],6, EXTEND_MODEL_CASES) AS PredictQty
    

    第一行从模型中检索用来标识序列的值。

    第二行包含预测函数,该函数针对 Quantity 获得 6 个预测。 系统会向预测结果列分配一个别名 (PredictQty),使结果更易于理解。

  4. FROM <mining model>
    

    替换为

    FROM [Forecasting_MIXED]
    
  5. PREDICTION JOIN <source query>
    

    替换为

    NATURAL PREDICTION JOIN 
    (
       SELECT 1 AS [Reporting Date],
       '10' AS [Quantity],
       'M200 Europe' AS [Model Region]
       UNION SELECT
       2 AS [Reporting Date],
       15 AS [Quantity]),
       'M200 Europe' AS [Model Region]
    ) AS t
    
  6. [WHERE <criteria>]
    

    替换为

    WHERE [ModelRegion] = 'M200 Europe' OR
    [ModelRegion] = 'M200 Pacific'
    

    现在,完整的语句应该如下所示:

    SELECT [Model Region],
    PredictTimeSeries([Quantity],6, EXTEND_MODEL_CASES) AS PredictQty
    FROM
       [Forecasting_MIXED]
    NATURAL PREDICTION JOIN 
    (
       SELECT 1 AS [ReportingDate],
      '10' AS [Quantity],
      'M200 Europe' AS [ModelRegion]
    UNION SELECT
      2 AS [ReportingDate],
      15 AS [Quantity]),
      'M200 Europe' AS [ModelRegion]
    ) AS t
    WHERE [ModelRegion] = 'M200 Europe' OR
    [ModelRegion] = 'M200 Pacific'
    
  7. 在**“文件”菜单中,单击“DMXQuery1.dmx 另存为”**。

  8. 在**“另存为”**对话框中,浏览到适当的文件夹,并将文件命名为 Singleton_TimeSeries_Query.dmx。

  9. 在工具栏中,单击**“执行”**按钮。

    该查询将返回 Europe 和 Pacific 地区 M200 自行车的销售量预测。

了解以 EXTEND_MODEL_CASES 开始的预测

现在,您已经基于原始模型用新数据创建了预测,现在可以对结果进行比较,以了解销售数据更新对预测的影响。 在这样做之前,请检查刚创建的代码,并注意以下事项:

  • 您仅为 Europe 地区提供了新数据。

  • 您只提供了两个月的新数据。

下表显示了为 M200 Europe 提供的新值对预测的影响。 您没有为 Pacific 地区的 M200 产品提供任何新数据,只是为了进行比较而提供此序列:

产品和地区

现有模型 (PredictTimeSeries)

具有更新销售数据的模型(具有 EXTEND_MODEL_CASES 的 PredictTimeSeries)

M200 Europe

M200 Europe7/25/2008 12:00:00 AM77
M200 Europe8/25/2008 12:00:00 AM64
M200 Europe9/25/2008 12:00:00 AM59
M200 Europe10/25/2008 12:00:00 AM56
M200 Europe11/25/2008 12:00:00 AM56
M200 Europe12/25/2008 12:00:00 AM74
M200 Europe7/25/2008 12:00:00 AM10
M200 Europe8/25/2008 12:00:00 AM15
M200 Europe9/25/2008 12:00:00 AM72
M200 Europe10/25/2008 12:00:00 AM69
M200 Europe11/25/2008 12:00:00 AM68
M200 Europe12/25/2008 12:00:00 AM89

M200 Pacific

M200 Pacific7/25/2008 12:00:00 AM41
M200 Pacific8/25/2008 12:00:00 AM44
M200 Pacific9/25/2008 12:00:00 AM38
M200 Pacific10/25/2008 12:00:00 AM41
M200 Pacific11/25/2008 12:00:00 AM36
M200 Pacific12/25/2008 12:00:00 AM39
M200 Pacific7/25/2008 12:00:00 AM41
M200 Pacific8/25/2008 12:00:00 AM44
M200 Pacific9/25/2008 12:00:00 AM38
M200 Pacific10/25/2008 12:00:00 AM41
M200 Pacific11/25/2008 12:00:00 AM36
M200 Pacific12/25/2008 12:00:00 AM39

从这些结果中,可以得出以下两个结论:

  • M200 Europe 序列的前两个预测与您提供的新数据完全相同。 在设计上,Analysis Services 返回实际的新数据点,而不进行预测。 这是因为您扩展模型事例时,用于预测查询的时间步长始终从原始序列的末尾开始。 因此,如果添加两个新数据点,返回的前两个预测将会与新数据重叠。

  • 用完所有新数据点之后,Analysis Services 将基于更新后的模型进行预测。 因此,可以看出,从 2004 年 9 月份开始,基于原始模型的 M200 Europe 预测(位于左列)和基于使用 EXTEND_MODEL_CASES 的模型的 M200 Europe 预测(位于右侧)之间的区别。 由于模型用新数据进行了更新,因此预测有所不同。

使用开始时间步长和结束时间步长控制预测

扩展模型时,新数据始终附加到序列的末尾。 但是,为了进行预测,用于预测查询的时间段始终从原始序列的末尾开始。 如果您只想在添加新数据时获得新预测,则必须将起始点指定为许多时间段。 例如,如果要添加两个新数据点并希望进行四个新预测,您需要执行下列操作:

  • 针对时序模型创建一个 PREDICTION JOIN,然后指定两个月的新数据。

  • 请求对四个时间段进行预测,其中起点是时间片 3,终点是时间片 6。

换言之,如果您的新数据包含 n 个时间段,并且您请求对时间步长 1 至 n 进行预测,则预测将与新数据的时间段一致。 若要获取对数据未覆盖的时间段的新预测,您必须从新数据序列之后的时间段 n+1 处开始预测,或者确保您请求了其他的时间段。

注意注意

添加新数据时不能进行历史预测。

下面的示例显示了一条 DMX 语句,使用该语句可仅获得对上例中两个序列的新预测。

SELECT [Model Region],
PredictTimeSeries([Quantity],3,6, EXTEND_MODEL_CASES) AS PredictQty
FROM
   [Forecasting_MIXED]
NATURAL PREDICTION JOIN 
(
   SELECT 1 AS [ReportingDate],
  '10' AS [Quantity],
  'M200 Europe' AS [ModelRegion]
UNION SELECT
  2 AS [ReportingDate],
  15 AS [Quantity]),
  'M200 Europe' AS [ModelRegion]
) AS t
WHERE [ModelRegion] = 'M200 Europe'

预测结果从时间段 3 开始,该时间段在您提供的 2 个月的新数据之后。

产品和地区

具有更新数据的模型(具有 EXTEND_MODEL_CASES 的 PredictTimeSeries)

M200 Europe

M200 Europe9/25/2008 12:00:00 AM72
M200 Europe10/25/2008 12:00:00 AM69
M200 Europe11/25/2008 12:00:00 AM68
M200 Europe12/25/2008 12:00:00 AM89

使用 REPLACE_MODEL_CASES 进行预测

如果您想对一组事例的某个模型定型,然后将该模型应用到不同的数据序列,则替换模型事例非常有用。 第 2 课:生成预测方案(数据挖掘中级教程)中提供了此方案的详细演练。