在 SQL Server 2014 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>}
在本教程中,将创建这两种类型的查询。
在时序模型上创建单例预测查询
在 对象资源管理器中,右键单击 Analysis Services 实例,指向 “新建查询”,然后单击 “DMX”。
查询编辑器打开后,将包含一个新的空白查询。
将单一实例语句的泛型示例复制到空白查询中。
替换以下内容:
SELECT [<model columns>,] PredictTimeSeries(<table column reference>, n, EXTEND_MODEL_CASES)替换为:
SELECT [Model Region], PredictTimeSeries([Quantity],6, EXTEND_MODEL_CASES) AS PredictQty第一行从标识序列的模型中检索值。
第二行包含了预测函数,该函数可以预测出 6 个关于 QUANTITY 的结果。 别名
PredictQty分配给预测结果列,以便更轻松地理解结果。替换以下内容:
FROM <mining model>替换为:
FROM [Forecasting_MIXED]替换以下内容:
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替换以下内容:
[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'在“ 文件 ”菜单上,单击“ 保存 DMXQuery1.dmx As”。
在“ 另存为 ”对话框中,浏览到相应的文件夹,并命名该文件
Singleton_TimeSeries_Query.dmx。在工具栏上,单击“ 执行 ”按钮。
该查询返回欧洲和太平洋地区 M200 自行车的销售量预测。
想要了解预测,首先从EXTEND_MODEL_CASES开始
现在,你已基于原始模型和新数据创建了预测,可以比较结果以查看更新销售数据对预测的影响。 在执行此作之前,请查看刚刚创建的代码,并注意以下事项:
你仅为欧洲区域提供了新数据。
你只提供了两个月的新数据。
下表显示了为 M200 欧洲提供的新值如何影响预测。 你未为太平洋地区的 M200 产品提供任何新数据,但此系列进行了比较:
产品和区域:M200 欧洲
现有模型 (PredictTimeSeries) |
使用更新的销售数据(PredictTimeSeries 和 EXTEND_MODEL_CASES)的模型 |
||
| M200 欧洲 | 2008/7/25 上午 12:00:00 | 77 | 10 |
| M200 欧洲 | 2008/8/25 上午 12:00:00 | 64 | 15 |
| M200 欧洲 | 2008/9/25 上午 12:00:00 | 59 | 72 |
| M200 欧洲 | 2008/10/25 上午 12:00:00 | 56 | 69 |
| M200 欧洲 | 2008/11/25 上午 12:00:00 | 56 | 68 |
| M200 欧洲 | 2008/12/25 上午 12:00:00 | 74 | 89 |
产品和区域:M200 Pacific
现有模型 (PredictTimeSeries) |
使用更新的销售数据(PredictTimeSeries 和 EXTEND_MODEL_CASES)的模型 |
||
| M200 Pacific | 2008/7/25 上午 12:00:00 | 41 | 41 |
| M200 Pacific | 2008/8/25 上午 12:00:00 | 44 | 44 |
| M200 Pacific | 2008/9/25 上午 12:00:00 | 三十八 | 三十八 |
| M200 Pacific | 2008/10/25 上午 12:00:00 | 41 | 41 |
| M200 Pacific | 2008/11/25 上午 12:00:00 | 36 | 36 |
| M200 Pacific | 2008/12/25 上午 12:00:00 | 39 | 39 |
从这些结果中,可以看到两个事项:
M200 欧洲系列的前两个预测与你提供的新数据完全相同。 根据设计,Analysis Services 返回实际的新数据点,而不是进行预测。 这是因为扩展模型事例时,用于预测查询的时间步骤始终从原始序列的末尾开始。 因此,如果添加了两个新数据点,则返回的前两个预测与新数据重叠。
使用完所有新数据点后,Analysis Services 会基于更新的模型进行预测。 因此,从 2005 年 9 月开始,您可以在左侧列中看到原始模型对 M200 欧洲的预测,与在右侧列中使用 EXTEND_MODEL_CASES 的模型之间的差异。 预测不同,因为模型已使用新数据进行更新。
使用开始和结束时间步骤控制预测
扩展模型时,新数据始终附加到序列的末尾。 但是,出于预测目的,用于预测查询的时间切片从原始序列的末尾开始。 如果只想在添加新数据时获取新预测,则必须将起点指定为多个时间切片。 例如,如果要添加两个新的数据点并想要进行四个新预测,请执行以下操作:
在时序模型上创建预测联接,并指定两个月的新数据。
为四个时间切片获取预测,其中起始时间切片为 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 开始,这个时间点是在你提供的新数据的两个月之后。
产品和区域:M200 欧洲
具有更新数据的模型(带有 EXTEND_MODEL_CASES 的 PredictTimeSeries)
| M200 欧洲 | 2008/9/25 上午 12:00:00 | 72 |
| M200 欧洲 | 2008/10/25 上午 12:00:00 | 69 |
| M200 欧洲 | 2008/11/25 上午 12:00:00 | 68 |
| M200 欧洲 | 2008/12/25 上午 12:00:00 | 89 |
使用 REPLACE_MODEL_CASES 进行预测
如果要在一组事例上训练模型,然后将该模型应用于不同的数据系列,则替换模型事例非常有用。 第 2 课介绍了此方案的详细演练:构建预测方案(中间数据挖掘教程)。