在本课中,你将使用 SELECT 语句的 SELECT FROM <模型> PREDICTION JOIN (DMX) 形式基于第 2 课中创建的决策树模型创建两种不同类型的预测 :将挖掘模型添加到关联挖掘结构。 下面定义了这些预测类型。
单例查询
使用单例查询在进行预测时提供临时值。 例如,可以通过将输入(例如通勤距离、区号或客户的子女人数)传递给查询来确定某个客户是否可能是自行车买家。 单例查询返回一个数值,该数值指示根据这些输入,一个人购买自行车的可能性。
批量查询
使用批处理查询来确定潜在客户表中哪些客户可能会购买自行车。 例如,如果你的营销部门提供了客户和客户属性的列表,则可以使用批处理预测来确定表中可能购买自行车的人员。
SELECT 语句的 SELECT FROM <model> PREDICTION JOIN (DMX) 形式包含三个部分:
结果中返回的挖掘模型列和预测函数的列表。 结果中还可以包含源数据的输入列。
定义用于创建预测的数据的源查询。 例如,在批处理查询中,这可能是客户列表。
挖掘模型中的列与源数据之间的映射。 如果这些名称匹配,则可以使用 NATURAL 语法并省略列映射。
可以使用预测函数进一步增强查询。 预测函数提供其他信息,例如预测发生的概率,并为训练数据集中的预测提供支持。 有关预测函数的详细信息,请参阅函数(DMX)。
本教程中的预测基于 AdventureWorksDW2012 示例数据库中的 ProspectiveBuyer 表。 ProspectiveBuyer 表包含潜在客户及其相关特征的列表。 此表中的客户独立于用于创建决策树挖掘模型的客户。
还可以使用 SQL Server Data Tools (SSDT)中的预测查询生成器创建预测。
课程任务
在本课中,你将执行以下任务:
创建单一实例查询以确定特定客户是否可能购买自行车。
创建一个批处理查询,以确定客户表中列出的客户中,哪些可能购买自行车。
单一实例查询
第一步是在单一实例预测查询中使用SELECT FROM <模型> PREDICTION JOIN(DMX)。 下面是单一实例语句的一般示例:
SELECT <select list> FROM [<mining model name>]
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
代码的第一行定义查询应返回的挖掘模型中的列,并指定用于生成预测的挖掘模型:
SELECT <select list> FROM [<mining model name>]
代码的下一行定义用于创建预测的客户的特征:
NATURAL PREDICTION JOIN
(SELECT '<value>' AS [<column>], ...)
AS [<input alias>]
ORDER BY <expression>
如果指定 NATURAL PREDICTION JOIN,服务器将根据列名将模型中的每个列与输入中的列匹配。 如果列名不匹配,则这些列将被忽略。
创建单例预测查询
在 对象资源管理器中,右键单击 Analysis Services 实例,指向 “新建查询”,然后单击 “DMX”。
查询编辑器打开后,将包含一个新的空白查询。
将单一实例语句的泛型示例复制到空白查询中。
替换以下内容:
<select list>替换为:
[Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS StatisticsAS 语句用于给查询返回的列设置别名。 PredictHistogram 函数返回有关预测的统计信息,包括概率和支持。 有关可在预测语句中使用的函数的详细信息,请参阅 Functions (DMX)。
替换以下内容:
[<mining model>]替换为:
[Decision Tree]替换以下内容:
(SELECT '<value>' AS [<column name>], ...) AS t替换为:
(SELECT 35 AS [Age], '5-10 Miles' AS [Commute Distance], '1' AS [House Owner Flag], 2 AS [Number Cars Owned], 2 AS [Total Children]) AS t完整语句现在应如下所示:
SELECT [Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS Statistics FROM [Decision Tree] NATURAL PREDICTION JOIN (SELECT 35 AS [Age], '5-10 Miles' AS [Commute Distance], '1' AS [House Owner Flag], 2 AS [Number Cars Owned], 2 AS [Total Children]) AS t在“ 文件 ”菜单上,单击“ 保存 DMXQuery1.dmx As”。
在“ 另存为 ”对话框中,浏览到相应的文件夹,并命名该文件
Singleton_Query.dmx。在工具栏上,单击“ 执行 ”按钮。
该查询返回有关客户是否会购买自行车的预测,并提供该预测的统计信息。
批量查询
下一步是在批预测查询中使用SELECT FROM <模型> PREDICTION JOIN 【DMX】。 下面是批处理语句的一般示例:
SELECT TOP <number> <select list>
FROM [<mining model name>]
PREDICTION JOIN
OPENQUERY([<datasource>],'<SELECT statement>')
AS [<input alias>]
ON <on clause, mapping,>
WHERE <where clause, boolean expression,>
ORDER BY <expression>
与单一实例查询中一样,代码的前两行定义查询返回的挖掘模型中的列,以及用于生成预测的挖掘模型的名称。 TOP <number> 语句指定查询将仅返回数字>或数字<指定的结果。
代码的下一行定义预测所基于的源数据:
OPENQUERY([<datasource>],'<SELECT statement>')
AS [<input alias>]
对于检索源数据的方法,有几个选项,但在本教程中,将使用 OPENQUERY。 有关可用选项的详细信息,请参阅 <源数据查询>。
下一行定义挖掘模型中的源列与源数据中的列之间的映射:
ON <column mappings>
WHERE 子句筛选预测查询返回的结果:
WHERE <where clause, boolean expression,>
代码的最后一行(可以是可选行)指定按哪一列排序结果。
ORDER BY <expression> [DESC|ASC]
使用 ORDER BY 与 TOP <number> 语句结合,以筛选返回的结果。 例如,在此预测中,你将返回十大自行车购买者,按预测正确概率排序。 可以使用 [DESC|ASC] 语法,用于控制结果的显示顺序。
创建批量数据预测查询
在 对象资源管理器中,右键单击 Analysis Services 实例,指向 “新建查询”,然后单击 “DMX”。
查询编辑器打开后,将包含一个新的空白查询。
将批处理语句的泛型示例复制到空白查询中。
替换以下内容:
<select list>替换为:
SELECT TOP 10 t.[LastName], t.[FirstName], [Decision Tree].[Bike Buyer], PredictProbability([Bike Buyer])TOP 10 子句指定查询仅返回前十个结果。 此查询中的 ORDER BY 语句按预测正确概率对结果进行排序,因此将只返回十个最有可能的结果。
替换以下占位符:
[<mining model>]模型的名称:
[Decision Tree]替换以下通用的 OPENQUERY 语句:
OPENQUERY([<datasource>],'<SELECT statement>')使用引用当前 Adventureworks 数据仓库的语句,例如:
OPENQUERY([Adventure Works DW 2014], 'SELECT [LastName], [FirstName], [MaritalStatus], [Gender], [YearlyIncome], [TotalChildren], [NumberChildrenAtHome], [Education], [Occupation], [HouseOwnerFlag], [NumberCarsOwned] FROM [dbo].[ProspectiveBuyer] ') AS t替换以下泛型语法:
<ON clause, mapping,> WHERE <where clause, boolean expression,> ORDER BY <expression>使用此模型和输入数据集所需的列映射:
[Decision Tree].[Marital Status] = t.[MaritalStatus] AND [Decision Tree].[Gender] = t.[Gender] AND [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND [Decision Tree].[Total Children] = t.[TotalChildren] AND [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND [Decision Tree].[Education] = t.[Education] AND [Decision Tree].[Occupation] = t.[Occupation] AND [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned] WHERE [Decision Tree].[Bike Buyer] =1 ORDER BY PredictProbability([Bike Buyer]) DESC指定
DESC以先列出概率最高的结果。完整语句现在应如下所示:
SELECT TOP 10 t.[LastName], t.[FirstName], [Decision Tree].[Bike Buyer], PredictProbability([Bike Buyer]) FROM [Decision Tree] PREDICTION JOIN OPENQUERY([Adventure Works DW 2014], 'SELECT [LastName], [FirstName], [MaritalStatus], [Gender], [YearlyIncome], [TotalChildren], [NumberChildrenAtHome], [Education], [Occupation], [HouseOwnerFlag], [NumberCarsOwned] FROM [dbo].[ProspectiveBuyer] ') AS t ON [Decision Tree].[Marital Status] = t.[MaritalStatus] AND [Decision Tree].[Gender] = t.[Gender] AND [Decision Tree].[Yearly Income] = t.[YearlyIncome] AND [Decision Tree].[Total Children] = t.[TotalChildren] AND [Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND [Decision Tree].[Education] = t.[Education] AND [Decision Tree].[Occupation] = t.[Occupation] AND [Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND [Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned] WHERE [Decision Tree].[Bike Buyer] =1 ORDER BY PredictProbability([Bike Buyer]) DESC在“ 文件 ”菜单上,单击“ 保存 DMXQuery1.dmx As”。
在“ 另存为 ”对话框中,浏览到相应的文件夹,并命名该文件
Batch_Prediction.dmx。在工具栏上,单击“ 执行 ”按钮。
该查询返回一个表,包含客户名称、每位客户是否会购买自行车的预测,以及此预测的概率。
这是 Bike Buyer 教程中的最后一步。 现在,你有一组挖掘模型,可用于探索客户之间的相似之处,并预测潜在客户是否会购买自行车。
若要了解如何在市场篮方案中使用 DMX,请参阅 市场篮 DMX 教程。