共用方式為


第5課:執行預測查詢

在這一課,您將使用 SELECT FROM <模型> PREDICTION JOIN (DMX) 形式的 SELECT 語句,根據您在 第 2 課:將採礦模型新增至關聯採礦結構中建立的判定樹模型,建立兩種不同類型的預測。 以下定義這些預測類型。

單例查詢
使用單例查詢提供臨時值以進行預測。 例如,您可以藉由將輸入值傳遞至查詢,例如通勤距離、區域代碼或客戶的孩子數目,來判斷單一客戶是否可能是自行車購買者。 單一查詢會傳回一個值,指出該人根據輸入的數據購買自行車的可能性。

批次查詢
使用批次查詢來判斷潛在客戶數據表中可能購買自行車的人員。 例如,如果您的行銷部門提供客戶和客戶屬性的清單,您可以使用批次預測來判斷數據表中誰可能會購買自行車。

SELECT 語句的 SELECT FROM <模型> PREDICTION JOIN (DMX) 形式包含三個部分:

  • 結果中傳回的採礦模型數據行和預測函式清單。 結果也可以包含來源資料的輸入欄位。

  • 定義用來建立預測之數據的來源查詢。 例如,在批次查詢中,這可能是客戶清單。

  • 採礦模型欄位與源資料之間的對應。 如果這些名稱相符,您可以使用NATURAL語法並排除數據行對應。

您可以使用預測函數進一步增強查詢。 預測函式會提供其他資訊,例如預測發生的機率,並提供定型數據集中預測的支援。 如需預測函式的詳細資訊,請參閱函式(DMX)。

本教學課程中的預測是以 AdventureWorksDW2012 範例資料庫中的 ProspectiveBuyer 數據表為基礎。 PotentialBuyer 資料表包含潛在客戶及其相關特性的清單。 此數據表中的客戶與用來建立判定樹採礦模型的客戶無關。

您也可以使用 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,則伺服器會根據數據行名稱,比對模型中的每個數據行與輸入中的數據行。 如果數據行名稱不相符,則會忽略數據行。

建立單一預測查詢

  1. 物件總管 中,以滑鼠右鍵點擊 Analysis Services 實例,指向 新增查詢,然後按一下 DMX

    查詢編輯器隨即開啟,並包含新的空白查詢。

  2. 將單一語句的泛型範例複製到空白查詢中。

  3. 取代下列項目:

    <select list>   
    

    取代為:

    [Bike Buyer] AS Buyer, PredictHistogram([Bike Buyer]) AS Statistics  
    

    AS 語句用來將查詢所傳回的數據行別名。 PredictHistogram 函式會傳回有關預測的統計數據,包括機率和支援。 如需可用於預測語句之函式的詳細資訊,請參閱 Functions (DMX)

  4. 取代下列項目:

    [<mining model>]   
    

    取代為:

    [Decision Tree]  
    
  5. 取代下列項目:

    (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  
    
  6. 在 [檔案] 功能表上,按一下 [另存新檔 DMXQuery1.dmx]。

  7. 在 [ 另存新檔 ] 對話框中,瀏覽至適當的資料夾,並將檔案 Singleton_Query.dmx命名為 。

  8. 在工具列上,按兩下 [ 執行] 按鈕。

    此查詢會傳回針對具指定特性的客戶是否會購買自行車的預測,以及該預測的相關統計數據。

批次查詢

下一個步驟是在批次預測查詢中使用 SELECT FROM <模型> PREDICTION JOIN (DMX)。 以下是 batch 語句的泛型範例:

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> 語句指定查詢只會傳回<number>所指定的結果。

程式代碼的下一行會定義預測所依據的源數據:

OPENQUERY([<datasource>],'<SELECT statement>')  
  AS [<input alias>]  

您有數個選項可用來擷取源數據,但在本教學課程中,您將使用 OPENQUERY。 如需可用選項的詳細資訊,請參閱 <源數據查詢>

下一行定義採礦模型中源數據行與源數據行之間的對應:

ON <column mappings>  

WHERE 子句會篩選預測查詢所傳回的結果:

WHERE <where clause, boolean expression,>  

程式代碼的最後一行(選擇性)指定結果將依據的排序欄位。

ORDER BY <expression> [DESC|ASC]  

搭配 TOP <number> 語句使用 ORDER BY 來篩選傳回的結果。 例如,在此預測中,您將傳回前十名自行車購買者,並依預測正確機率排序。 您可以使用 [DESC|ASC] 語法,可控制顯示結果的順序。

建立批次預測查詢

  1. 物件總管 中,以滑鼠右鍵點擊 Analysis Services 實例,指向 新增查詢,然後按一下 DMX

    查詢編輯器隨即開啟,並包含新的空白查詢。

  2. 將批次語句的泛型範例複製到空白查詢中。

  3. 取代下列項目:

    <select list>   
    

    取代為:

    SELECT  
      TOP 10  
      t.[LastName],  
      t.[FirstName],  
      [Decision Tree].[Bike Buyer],  
      PredictProbability([Bike Buyer])  
    

    TOP 10 子句指定查詢只會傳回前十個結果。 此查詢中的 ORDER BY 語句會依預測正確機率排序結果,因此只會傳回十個最有可能的結果。

  4. 替換以下佔位符:

    [<mining model>]   
    

    使用模型名稱:

    [Decision Tree]  
    
  5. 替換以下一般的 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  
    
  6. 取代下列泛型語法:

    <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  
    
  7. 在 [檔案] 功能表上,按一下 [另存新檔 DMXQuery1.dmx]。

  8. 在 [ 另存新檔 ] 對話框中,瀏覽至適當的資料夾,並將檔案 Batch_Prediction.dmx命名為 。

  9. 在工具列上,按兩下 [ 執行] 按鈕。

    此查詢會傳回包含客戶名稱的數據表、每個客戶是否會購買自行車的預測,以及預測的機率。

這是 Bike Buyer 教學課程的最後一個步驟。 您現在有一組採礦模型,可用來探索客戶之間的相似性,並預測潛在客戶是否會購買自行車。

若要瞭解如何在購物籃案例中使用 DMX,請參閱 購物籃 DMX 教學課程