关联模型查询示例
适用于:SQL Server 2019 及更早版本的 Analysis Services Azure Analysis Services Fabric/Power BI Premium
重要
数据挖掘在 SQL Server 2017 Analysis Services 中已弃用,现在在 SQL Server 2022 Analysis Services 中已停止使用。 对于已弃用和停止使用的功能,文档不会更新。 若要了解详细信息,请参阅 Analysis Services 后向兼容性。
在对数据挖掘模型创建查询时,可以创建内容查询,也可创建预测查询。内容查询提供有关在分析过程中发现的规则和项集的详细信息,预测查询使用在数据中发现的关联来做出预测。 对于关联模型来说,预测通常基于规则且可用来给出建议,而内容查询通常用于浏览项集之间的关系。 此外,还可检索有关模型的元数据。
本部分介绍如何为基于 Microsoft 关联规则算法的模型创建这些类型的查询。
内容查询
预测查询
查找有关模型的信息
所有挖掘模型都公开算法根据标准化架构(即挖掘模型架构行集)所了解的内容。 可以使用数据挖掘扩展插件 (DMX) 语句或使用SQL Server Analysis Services存储过程,针对挖掘模型架构行集创建查询。 在 SQL Server 2017 中,还可以使用类似于 SQL 的语法将架构行集直接查询为系统表。
示例查询 1:使用 DMX 获取模型元数据
以下查询返回有关关联模型 Association
的基本元数据,例如模型名称、存储模型的数据库以及模型中子节点的数目。 此查询使用 DMX 内容查询从模型的父节点中检索元数据:
SELECT MODEL_CATALOG, MODEL_NAME, NODE_CAPTION,
NODE_SUPPORT, [CHILDREN_CARDINALITY], NODE_DESCRIPTION
FROM Association.CONTENT
WHERE NODE_TYPE = 1
注意
必须将列名 CHILDREN_CARDINALITY 括在括号中,以便将它与同名的 MDX 保留关键字区分开来。
示例结果:
行 | 元数据 |
---|---|
MODEL_CATALOG | Association Test |
MODEL_NAME | 关联 |
NODE_CAPTION | Association Rules Model |
NODE_SUPPORT | 14879 |
CHILDREN_CARDINALITY | 942 |
NODE_DESCRIPTION | Association Rules Model; ITEMSET_COUNT=679; RULE_COUNT=263; MIN_SUPPORT=14; MAX_SUPPORT=4334; MIN_ITEMSET_SIZE=0; MAX_ITEMSET_SIZE=3; MIN_PROBABILITY=0.400390625; MAX_PROBABILITY=1; MIN_LIFT=0.14309369632511; MAX_LIFT=1.95758227647523 |
有关这些列在关联模型中的含义的定义,请参阅 关联模型的挖掘模型内容 (Analysis Services - 数据挖掘) 。
示例查询 2:从架构行集中获取其他元数据
通过查询数据挖掘架构行集,可以找到在 DMX 内容查询中返回的相同信息。 不过,架构行集还提供其他一些列,例如上次处理模型的日期、挖掘结构和用作可预测属性的列的名称。
SELECT MODEL_CATALOG, MODEL_NAME, SERVICE_NAME, PREDICTION_ENTITY,
MINING_STRUCTURE, LAST_PROCESSED
FROM $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'Association'
示例结果:
行 | 元数据 |
---|---|
MODEL_CATALOG | Adventure Works DW Multidimensional 2012 |
MODEL_NAME | 关联 |
SERVICE_NAME | Association Rules Model |
PREDICTION_ENTITY | v Assoc Seq Line Items |
MINING_STRUCTURE | 关联 |
LAST_PROCESSED | 9/29/2007 10:21:24 PM |
示例查询 3:检索模型的原始参数
以下查询返回一个列,该列包含有关创建模型时使用的参数设置的详细信息。
SELECT MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'Association'
示例结果:
MAXIMUM_ITEMSET_COUNT=200000,MAXIMUM_ITEMSET_SIZE=3,MAXIMUM_SUPPORT=1,MINIMUM_SUPPORT=9.40923449156529E-04,MINIMUM_IMPORTANCE=-999999999,MINIMUM_ITEMSET_SIZE=0,MINIMUM_PROBABILITY=0.4
查找有关规则和项集的信息
关联模型有两个常见用途:查找有关常见项集的信息以及提取有关特定规则和项集的详细信息。 例如,您可能希望提取评为当前特别受关注的规则的列表,或创建最常见项集的列表。 您可以使用 DMX 内容查询来检索此类信息, 也可使用 “Microsoft 关联查看器”浏览该信息。
示例查询 4:检索项集和产品列表
以下查询检索全部项集,同时还将检索列出每个项集中包含的产品的嵌套表。 NODE_NAME 列包含模型内项集的唯一 ID,而 NODE_CAPTION 给出项目的文本说明。 本例中对嵌套表进行了平展处理,这样,包含两个产品的项集在结果中生成了两行。 如果客户端支持分层数据,则可以忽略 FLATTENED 关键字。
SELECT FLATTENED NODE_NAME, NODE_CAPTION,
NODE_PROBABILITY, NODE_SUPPORT,
(SELECT ATTRIBUTE_NAME FROM NODE_DISTRIBUTION) as PurchasedProducts
FROM Association.CONTENT
WHERE NODE_TYPE = 7
示例结果:
行 | 元数据 |
---|---|
NODE_NAME | 37 |
NODE_CAPTION | Sport-100 = Existing |
NODE_PROBABILITY | 0.291283016331743 |
NODE_SUPPORT | 4334 |
PURCHASEDPRODUCTS.ATTRIBUTE_NAME | v Assoc Seq Line Items(Sport-100) |
示例查询 5:返回排在前 10 位的项集
本例演示如何使用 DMX 在默认情况下提供的某些分组和排序函数。 当按照每个节点的支持对项集排序时,该查询返回排在前 10 位的项集。 请注意,无需对结果进行显式分组,这与 Transact-SQL 中不同。不过,只能在每个查询中使用一个聚合函数。
SELECT TOP 10 (NODE_SUPPORT),NODE_NAME, NODE_CAPTION
FROM Association.CONTENT
WHERE NODE_TYPE = 7
示例结果:
行 | 元数据 |
---|---|
NODE_SUPPORT | 4334 |
NODE_NAME | 37 |
NODE_CAPTION | Sport-100 = Existing |
使用模型进行预测
关联规则模型通常用于生成建议,这些建议基于在项集中发现的相关性。 因此,基于关联规则模型创建预测查询时,您通常使用模型中的规则基于新数据进行猜测。 PredictAssociation (DMX) 是返回建议的函数,具有多个可用于自定义查询结果的参数。
另一个说明对关联模型的查询非常有用的示例是返回各种规则和项集的置信度,以便可以比较不同跨区销售策略的有效性。 以下示例说明如何创建这些查询。
示例查询 6:预测关联项目
此示例使用在 中间数据挖掘教程 (Analysis Services - 数据挖掘) 中创建的 关联模型。 它演示如何创建一个预测查询,该查询告诉您应向已购买某种特定产品的客户推荐哪些产品。 这种类型的查询,可在其中向 SELECT... 中的模型提供值 ...UNION 语句称为单一实例查询。 由于对应于新值的可预测模型列为嵌套表,因此必须使用某一 SELECT 子句将新值映射到嵌套表列 [Model]
,再使用另一 SELECT 子句将嵌套表列映射到事例级别列 [v Assoc Seq Line Items]
。 如果在该查询中添加 INCLUDE-STATISTICS 关键字,则可看到推荐的概率和支持。
SELECT PredictAssociation([Association].[vAssocSeqLineItems],INCLUDE_STATISTICS, 3)
FROM [Association]
NATURAL PREDICTION JOIN
(SELECT
(SELECT 'Classic Vest' as [Model])
AS [v Assoc Seq Line Items])
AS t
示例结果:
型号 | $SUPPORT | $PROBABILITY | $ADJUSTEDPROBABILITY |
---|---|---|---|
Sport-100 | 4334 | 0.291283 | 0.252696 |
Water Bottle | 2866 | 0.19262 | 0.175205 |
Patch kit | 2113 | 0.142012 | 0.132389 |
示例查询 7:确定相关项集的置信度
尽管规则可用于生成建议,但在对数据集内的模式的更深入分析中,项集作用更大。 例如,如果对前面示例查询返回的建议不满意,则可以检查包含产品 A 的其他项集,以更好地了解是否产品 A 是人们在购买各种产品时倾向于购买的附件,或者是否产品 A 与购买特定产品有很强的关联性。 浏览这些关系的最简单方法是筛选 Microsoft 关联查看器中的项集;但是,可以使用查询检索相同的信息。
以下示例查询返回包含 Water Bottle 项目(包括单项 Water bottle)的所有项集。
SELECT TOP 100 FROM
(
SELECT FLATTENED NODE_CAPTION, NODE_SUPPORT,
(SELECT ATTRIBUTE_NAME from NODE_DISTRIBUTION
WHERE ATTRIBUTE_NAME = 'v Assoc Seq Line Items(Water Bottle)') as D
FROM Association.CONTENT
WHERE NODE_TYPE = 7
) AS Items
WHERE [D.ATTRIBUTE_NAME] <> NULL
ORDER BY NODE_SUPPORT DESC
示例结果:
NODE_CAPTION | NODE_SUPPORT | D.ATTRIBUTE_NAME |
---|---|---|
Water Bottle = Existing | 2866 | v Assoc Seq Line Items(Water Bottle) |
Mountain Bottle Cage = Existing, Water Bottle = Existing | 1136 | v Assoc Seq Line Items(Water Bottle) |
Road Bottle Cage = Existing, Water Bottle = Existing | 1068 | v Assoc Seq Line Items(Water Bottle) |
Water Bottle = Existing, Sport-100 = Existing | 734 | v Assoc Seq Line Items(Water Bottle) |
该查询不仅返回嵌套表中符合此条件的行,还返回嵌套表外部或事例表中的所有行。 因此,必须添加一个条件来消除对目标属性名称具有 Null 值的事例表行。
函数列表
所有 Microsoft 算法都支持一组通用函数。 但是,Microsoft 关联算法支持下表中列出的其他函数。
预测函数 | 使用情况 |
---|---|
IsDescendant (DMX) | 确定一个节点是否是神经网络图中另一个节点的子节点。 |
IsInNode (DMX) | 指示指定的节点是否包含当前事例。 |
PredictAdjustedProbability (DMX) | 返回加权的概率。 |
PredictAssociation (DMX) | 预测关联数据集中的成员身份。 |
PredictHistogram (DMX) | 返回与当前预测值相关的值的表。 |
PredictNodeId (DMX) | 返回每个事例的 Node_ID。 |
PredictProbability (DMX) | 返回预测值的概率。 |
PredictSupport (DMX) | 返回指定状态的支持值。 |
PredictVariance (DMX) | 返回预测值的方差。 |
另请参阅
Microsoft 关联算法
Microsoft 关联算法技术参考
关联模型的挖掘模型内容(Analysis Services – 数据挖掘)