次の方法で共有


レッスン 5: 予測クエリの実行

このレッスンでは、SELECT ステートメントの SELECT FROM <model> PREDICTION JOIN (DMX) フォームを使用して、「 レッスン 2: マイニング モデルを関連付けマイニング構造に追加する」で作成したデシジョン ツリー モデルに基づいて、2 種類の予測を作成します。 これらの予測の種類を以下に定義します。

シングルトン クエリ
シングルトン クエリを使用して、予測を行うときにアドホック値を指定します。 たとえば、1 人の顧客が自転車購入者になる可能性があるかどうかを判断するには、通勤距離、市区地区コード、顧客の子の数などの入力をクエリに渡します。 シングルトン クエリは、入力に基づいて自転車を購入する可能性を示す値を返します。

バッチ クエリ
バッチ クエリを使用して、潜在顧客のテーブルで自転車を購入する可能性が高いユーザーを特定します。 たとえば、マーケティング部門が顧客と顧客の属性の一覧を提供する場合、バッチ予測を使用して、テーブルから自転車を購入する可能性が高いユーザーを決定できます。

SELECT ステートメントの SELECT FROM <model> PREDICTION JOIN (DMX) 形式には、次の 3 つの部分が含まれています。

  • 結果で返されるマイニング モデル列と予測関数の一覧。 結果には、ソース データからの入力列を含めることもできます。

  • 予測の作成に使用されるデータを定義するソース クエリ。 たとえば、バッチ クエリでは、これは顧客の一覧になります。

  • マイニング モデル列とソース データ間のマッピング。 これらの名前が一致する場合は、NATURAL 構文を使用して列マッピングを除外できます。

予測関数を使用して、クエリをさらに強化できます。 予測関数は、予測が発生する確率などの追加情報を提供し、トレーニング データセット内の予測のサポートを提供します。 予測関数の詳細については、「 関数 (DMX)」を参照してください。

このチュートリアルの予測は、 AdventureWorksDW2012 サンプル データベースの ProspectiveBuyer テーブルに基づいています。 PotentialBuyer テーブルには、潜在顧客とその関連する特性の一覧が含まれています。 このテーブルの顧客は、デシジョン ツリー マイニング モデルの作成に使用された顧客とは無関係です。

SQL Server Data Tools (SSDT) の予測クエリ ビルダーを使用して予測を作成することもできます。

このレッスンの作業

このレッスンでは、次のタスクを実行します。

  • 特定の顧客が自転車を購入する可能性があるかどうかを判断するシングルトン クエリを作成します。

  • バッチ クエリを作成して、顧客の表に記載されている、自転車を購入する可能性が高い顧客を決定します。

シングルトン クエリ

最初の手順では、シングルトン予測クエリで SELECT FROM <model> 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 関数は、確率とサポートを含む予測に関する統計情報を返します。 予測ステートメントで使用できる関数の詳細については、「 関数 (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 As の保存] をクリックします。

  7. [ 名前を付けて保存 ] ダイアログ ボックスで、適切なフォルダーを参照し、ファイルに Singleton_Query.dmx名前を付けます。

  8. ツール バーの [ 実行 ] ボタンをクリックします。

    このクエリは、指定された特性を持つ顧客が自転車を購入するかどうかに関する予測と、その予測に関する統計情報を返します。

バッチ クエリ

次の手順では、バッチ予測クエリで SELECT FROM <model> 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>  

シングルトン クエリと同様に、コードの最初の 2 行では、クエリから返されるマイニング モデルからの列と、予測の生成に使用されるマイニング モデルの名前が定義されます。 TOP <number> ステートメントは、クエリが返す数値または結果のみを返すように指定します <number>。

コードの次の行では、予測の基になるソース データを定義します。

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

ソース データを取得する方法にはいくつかのオプションがありますが、このチュートリアルでは OPENQUERY を使用します。 使用可能なオプションの詳細については、「 <source データ クエリ>」を参照してください。

次の行では、マイニング モデルのソース列とソース データ内の列の間のマッピングを定義します。

ON <column mappings>  

WHERE 句は、予測クエリによって返される結果をフィルター処理します。

WHERE <where clause, boolean expression,>  

コードの最後の行は省略可能であり、結果が並べ替えられる列を指定します。

ORDER BY <expression> [DESC|ASC]  

TOP <number> ステートメントと組み合わせて ORDER BY を使用して、返される結果をフィルター処理します。 たとえば、この予測では、予測が正しい確率で並べ替えられた上位 10 人の自転車購入者を返します。 [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 句は、クエリによって上位 10 件の結果のみが返されるように指定します。 このクエリの ORDER BY ステートメントは、予測が正しい確率で結果を並べ替えるため、最も可能性の高い 10 個の結果のみが返されます。

  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 As の保存] をクリックします。

  8. [ 名前を付けて保存 ] ダイアログ ボックスで、適切なフォルダーを参照し、ファイルに Batch_Prediction.dmx名前を付けます。

  9. ツール バーの [ 実行 ] ボタンをクリックします。

    このクエリは、顧客名、各顧客が自転車を購入するかどうかの予測、および予測の確率を含むテーブルを返します。

これは、Bike Buyer チュートリアルの最後の手順です。 これで、顧客間の類似点を調べ、潜在顧客が自転車を購入するかどうかを予測するために使用できる一連のマイニング モデルが作成されました。

マーケット バスケット シナリオで DMX を使用する方法については、「 Market Basket DMX チュートリアル」を参照してください。