判定樹模型查詢範例
適用於: 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 取得模型中樹狀結構的詳細數據
從模型 擷取子樹
預測查詢
尋找判定樹模型的相關信息
若要針對判定樹模型的內容建立有意義的查詢,您應該瞭解模型內容的結構,以及哪些節點類型會儲存何種資訊。 如需詳細資訊,請參閱 判定樹模型的採礦模型內容(Analysis Services - 數據採礦)。
範例查詢 1:從數據採礦架構數據列集擷取模型參數
藉由查詢數據採礦架構數據列集,您可以尋找模型的相關元數據,例如建立模型時、上次處理模型時、模型所依據的採礦結構名稱,以及用來作為可預測屬性的數據行名稱。 您也可以傳回第一次建立模型時所使用的參數。
select MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'TM_Decision Tree'
範例結果:
MINING_PARAMETERS
COMPLEXITY_PENALTY=0.5,MAXIMUM_INPUT_ATTRIBUTES=255,MAXIMUM_OUTPUT_ATTRIBUTES=255,MINIMUM_SUPPORT=10,SCORE_METHOD=4,SPLIT_METHOD=3,FORCE_REGRESSOR=
範例查詢 2:使用 DMX 傳回模型內容的詳細數據
下列查詢會傳回您在 基本數據採礦教學課程中建立模型時所建立之判定樹的一些基本資訊。 每個樹狀結構都會儲存在自己的節點中。 由於此模型包含單一可預測屬性,因此只有一個樹狀節點。 不過,如果您使用判定樹演算法建立關聯模型,則每個產品可能會有數百個樹狀結構。
此查詢會傳回類型 2 的所有節點,也就是表示特定可預測屬性之樹狀結構的最上層節點。
注意
數據行CHILDREN_CARDINALITY必須以括弧括住,才能與相同名稱的 MDX 保留關鍵詞區別。
SELECT MODEL_NAME, NODE_NAME, NODE_CAPTION,
NODE_SUPPORT, [CHILDREN_CARDINALITY]
FROM TM_DecisionTrees.CONTENT
WHERE NODE_TYPE = 2
範例結果:
MODEL_NAME | NODE_NAME | NODE_CAPTION | NODE_SUPPORT | CHILDREN_CARDINALITY |
---|---|---|---|---|
TM_DecisionTree | 000000001 | 都 | 12939 | 5 |
這些結果會告訴您什麼? 在判定樹模型中,特定節點的基數會告訴您該節點具有多少個立即子系。 此節點的基數為5,這表示模型會將潛在自行車購買者的目標母體分成5個子群組。
下列相關查詢會傳回這五個子群組的子系,以及子節點中的屬性和值分佈。 因為支援、機率和變異數等統計數據會儲存在巢狀數據表中,NODE_DISTRIBUTION,所以此範例會使用 FLATTENED
關鍵詞來輸出巢狀數據表數據行。
注意
巢狀數據表數據行 SUPPORT 必須以括弧括住,才能與相同名稱的保留關鍵詞區別。
SELECT FLATTENED NODE_NAME, NODE_CAPTION,
(SELECT ATTRIBUTE_NAME, ATTRIBUTE_VALUE, [SUPPORT]
FROM NODE_DISTRIBUTION) AS t
FROM TM_DecisionTree.CONTENT
WHERE [PARENT_UNIQUE_NAME] = '000000001'
範例結果:
NODE_NAME | NODE_CAPTION | T.ATTRIBUTE_NAME | T.ATTRIBUTE_VALUE | 支援 |
---|---|---|---|---|
00000000100 | 擁有的數字汽車 = 0 | Bike Buyer | 失蹤 | 0 |
00000000100 | 擁有的數字汽車 = 0 | Bike Buyer | 0 | 1067 |
00000000100 | 擁有的數字汽車 = 0 | Bike Buyer | 1 | 1875 |
00000000101 | 擁有的數字汽車 = 3 | Bike Buyer | 失蹤 | 0 |
00000000101 | 擁有的數字汽車 = 3 | Bike Buyer | 0 | 678 |
00000000101 | 擁有的數字汽車 = 3 | Bike Buyer | 1 | 473 |
從這些結果中,您可以告訴購買自行車的客戶([Bike Buyer] = 1),1067個客戶有0輛車,473個客戶有3輛車。
範例查詢 3:從模型擷取子樹
假設您想要深入瞭解購買自行車的客戶。 您可以使用查詢中的 IsDescendant (DMX) 函式,檢視任何子樹狀結構的其他詳細數據,如下列範例所示。 此查詢會從樹狀結構中擷取分葉節點(NODE_TYPE = 4)來傳回自行車購買者的計數,其中包含超過42歲的客戶。 此查詢會將巢狀數據表中的數據列限制為 Bike Buyer = 1 的數據列。
SELECT FLATTENED NODE_NAME, NODE_CAPTION,NODE_TYPE,
(
SELECT [SUPPORT] FROM NODE_DISTRIBUTION WHERE ATTRIBUTE_NAME = 'Bike Buyer' AND ATTRIBUTE_VALUE = '1'
) AS t
FROM TM_DecisionTree.CONTENT
WHERE ISDESCENDANT('0000000010001')
AND NODE_TYPE = 4
範例結果:
NODE_NAME | NODE_CAPTION | t.SUPPORT |
---|---|---|
000000001000100 | 年收入 >= 26000 和 < 42000 | 266 |
00000000100010100 | Total Children = 3 | 75 |
0000000010001010100 | 家中子係數 = 1 | 75 |
使用判定樹模型進行預測
因為判定樹可用於各種工作,包括分類、回歸甚至關聯,因此當您在判定樹模型上建立預測查詢時,有許多選項可供您使用。 您必須瞭解建立模型的目的,以了解預測的結果。 下列查詢範例說明三個不同的案例:
傳回分類模型的預測,以及預測正確的可能性,然後依機率篩選結果:
建立單一查詢來預測關聯;
擷取判定樹部分的回歸公式,其中輸入和輸出之間的關聯性是線性的。
範例查詢 4:傳回機率的預測
下列範例查詢會使用在 基本數據採礦教學課程中建立的判定樹模型。 查詢會從數據表 dbo 傳入一組新的範例數據。AdventureWorks2012 DW 中的 PredictBuyers,預測新數據集中的哪些客戶將購買自行車。
此查詢會使用預測函式 PredictHistogram (DMX),它會傳回巢狀數據表,其中包含模型所發現機率的實用資訊。 查詢的最終 WHERE 子句會篩選結果,只傳回預測為可能購買自行車的客戶,機率大於 0%。
SELECT
[TM_DecisionTree].[Bike Buyer],
PredictHistogram([Bike Buyer]) as Results
From
[TM_DecisionTree]
PREDICTION JOIN
OPENQUERY([Adventure Works DW Multidimensional 2012],
'SELECT
[FirstName],
[LastName],
[MaritalStatus],
[Gender],
[YearlyIncome],
[TotalChildren],
[NumberChildrenAtHome],
[HouseOwnerFlag],
[NumberCarsOwned]
FROM
[dbo].[ProspectiveBuyer]
') AS t
ON
[TM_DecisionTree].[First Name] = t.[FirstName] AND
[TM_DecisionTree].[Last Name] = t.[LastName] AND
[TM_DecisionTree].[Marital Status] = t.[MaritalStatus] AND
[TM_DecisionTree].[Gender] = t.[Gender] AND
[TM_DecisionTree].[Yearly Income] = t.[YearlyIncome] AND
[TM_DecisionTree].[Total Children] = t.[TotalChildren] AND
[TM_DecisionTree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
[TM_DecisionTree].[House Owner Flag] = t.[HouseOwnerFlag] AND
[TM_DecisionTree].[Number Cars Owned] = t.[NumberCarsOwned]
WHERE [Bike Buyer] = 1
AND PredictProbability([Bike Buyer]) >'.05'
根據預設,SQL Server Analysis Services 會傳回具有數據行卷標的巢狀數據表,Expression。 您可以藉由將傳回的數據行別名來變更此標籤。 如果您這樣做,別名 (在此案例中,Results) 會作為數據行標題和巢狀數據表中的值使用。 您必須展開巢狀數據表,才能看到結果。
Bike Buyer = 1 的範例結果:
Bike Buyer | $SUPPORT | $PROBABILITY | $ADJUSTEDPROBABILITY | $VARIANCE | $STDEV |
---|---|---|---|---|---|
1 | 2540 | 0.634849242045644 | 0.013562168281562 | 0 | 0 |
0 | 1460 | 0.364984174579377 | 0.00661336932550915 | 0 | 0 |
0 | 0.000166583374979177 | 0.000166583374979177 | 0 | 0 |
如果您的提供者不支援階層式數據列集,例如此處所示的數據列集,您可以使用查詢中的 FLATTENED 關鍵詞,將結果傳回為包含 Null 的數據表,以取代重複的數據行值。 如需詳細資訊,請參閱 巢狀數據表(Analysis Services - 數據採礦) 或 瞭解 DMX Select 語句。
範例查詢 5:從判定樹模型預測關聯
下列範例查詢是以關聯採礦結構為基礎。 若要遵循此範例,您可以將新的模型新增至此採礦結構,然後選取 [Microsoft判定樹] 作為演算法。 如需如何建立關聯採礦結構的詳細資訊,請參閱 第 3 課:建置購物籃案例(元數據採礦教學課程)。
下列範例查詢是單一查詢,您可以藉由選擇欄位,然後從下拉式清單中選取這些字段的值,輕鬆地在 SQL Server Data Tools 中建立查詢。
SELECT PredictAssociation([DT_Association].[v Assoc Seq Line Items],3)
FROM
[DT_Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Patch kit' AS [Model]) AS [v Assoc Seq Line Items]) AS t
預期的結果:
型 |
---|
Mountain-200 |
山輪胎管 |
導覽輪胎管 |
結果會告訴您三個最佳產品,以建議已購買 Patch Kit 產品的客戶。 您也可以在提出建議時提供多個產品做為輸入,方法是輸入值,或使用 [單一查詢輸入] 對話框並新增或移除值。 下列範例查詢示範如何提供多個值,以便進行預測。 值是由 SELECT 語句中定義輸入值的 UNION 子句所連接。
SELECT PredictAssociation([DT_Association].[v Assoc Seq Line Items],3)
From
[DT_Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Racing Socks' AS [Model]
UNION SELECT 'Women''s Mountain Shorts' AS [Model]) AS [v Assoc Seq Line Items]) AS t
預期的結果:
型 |
---|
Long-Sleeve 標誌澤西 |
Mountain-400-W |
傳統背心 |
範例查詢 6:從判定樹模型擷取回歸公式
當您建立包含連續屬性回歸的判定樹模型時,您可以使用回歸公式進行預測,也可以擷取回歸公式的相關信息。 如需回歸模型查詢的詳細資訊,請參閱 線性回歸模型查詢範例。
如果判定樹模型包含回歸節點和在離散屬性或範圍上分割的節點混合,您可以建立只傳回回歸節點的查詢。 NODE_DISTRIBUTION數據表包含回歸公式的詳細數據。 在此範例中,數據行會扁平化,且NODE_DISTRIBUTION數據表的別名,以方便檢視。 不過,在此模型中,找不到與其他連續屬性相關的回歸輸入變數。 在這種情況下,SQL Server Analysis Services 會傳回該屬性的平均值和模型中的總變異數。
SELECT FLATTENED NODE_DISTRIBUTION AS t
FROM DT_Predict. CONTENT
WHERE NODE_TYPE = 25
範例結果:
t.ATTRIBUTE_NAME | t.ATTRIBUTE_VALUE | t.SUPPORT | t.PROBABILITY | t.VARIANCE | t.VALUETYPE |
---|---|---|---|---|---|
每年收入 | 失蹤 | 0 | 0.000457142857142857 | 0 | 1 |
每年收入 | 57220.8876687257 | 17484 | 0.999542857142857 | 1041275619.52776 | 3 |
57220.8876687257 | 0 | 0 | 1041216662.54387 | 11 |
如需回歸模型中使用之實值類型和統計數據的詳細資訊,請參閱 線性回歸模型(Analysis Services - 數據採礦)的採礦模型內容。
預測函式清單
所有Microsoft演算法都支援一組常見的函式。 不過,Microsoft判定樹演演算法支援下表所列的其他函式。
預測函數 | 用法 |
---|---|
IsDescendant (DMX) | 判斷某個節點是否為模型中另一個節點的子系。 |
IsInNode (DMX) | 指出指定的節點是否包含目前的案例。 |
PredictAdjustedProbability (DMX) | 傳回加權機率。 |
PredictAssociation (DMX) | 預測關聯數據集中的成員資格。 |
PredictHistogram (DMX) | 傳回與目前預測值相關的值數據表。 |
PredictNodeId (DMX) | 傳回每個案例的Node_ID。 |
PredictProbability (DMX) | 傳回預測值的機率。 |
PredictStdev (DMX) | 傳回指定數據行的預測標準偏差。 |
PredictSupport (DMX) | 傳回指定狀態的支援值。 |
PredictVariance (DMX) | 傳回指定數據行的變異數。 |
如需所有Microsoft演算法通用的函式清單,請參閱 一般預測函數 (DMX)。 如需特定函式的語法,請參閱 數據採礦延伸模組 (DMX) 函式參考。
另請參閱
數據採礦查詢
Microsoft 判定樹演算法
Microsoft 判定樹演演算法技術參考
判定樹模型的採礦模型內容 (Analysis Services - 數據採礦)