SELECT FROM <model> PREDICTION JOIN (DMX)
マイニング モデルを使用して、外部データ ソース内の列の状態を予測します。PREDICTION JOIN ステートメントは、ソース クエリからモデルまでの各ケースに一致します。
構文
SELECT [FLATTENED] [TOP <n>] <select expression list>
FROM <model> | <sub select> [NATURAL] PREDICTION JOIN
<source data query> [ON <join mapping list>]
[WHERE <condition expression>]
[ORDER BY <expression> [DESC|ASC]]
引数
n
省略可。返す行数を指定する整数値です。select expression list
マイニング モデルから派生する、列の識別子と式のコンマ区切りのリストです。model
モデル識別子です。sub select
埋め込まれた select ステートメントです。source data query
ソース クエリです。join mapping list
省略可。モデルの列とソース クエリの列を比較する論理演算子です。condition expression
省略可。列のリストから返される値を制限する条件です。expression
省略可。スカラ値を返す式です。
説明
ON 句は、ソース クエリの列とマイニング モデルの列の間のマッピングを定義します。このマッピングは、作成する予測の入力として列を使用できるように、ソース クエリからマイニング モデルへ列を指定するために使用します。そのため、次の例に示すように、<join mapping list> の列は、等号 (=) を使用して関連付けられています。
[MiningModel].ColumnA = [source data query].Column1 AND
[MiningModel].ColumnB = [source data query].Column2 AND
...
入れ子になったテーブルを ON 句にバインドする場合、入れ子になった列のレコードが所属するケースをアルゴリズムが正しく識別できるように、キー列をすべての非キー列とバインドします。
予測結合のソース クエリは、テーブルまたは単一クエリのどちらかにできます。
<select expression list> と <condition expression> にテーブル式を返さない予測関数を指定できます。
NATURAL PREDICTION JOIN は、モデル内の列名に一致するソース クエリの列名と共に、自動的にマップされます。NATURAL PREDICTION を使用する場合、ON 句を省略できます。
WHERE 条件は、予測可能列または関連列のみに適用できます。
ORDER BY 句で引数として使用できるのは 1 つの列だけです。つまり、複数の列を基準にして並べ替えを行うことはできません。
例 1: 単一クエリ
次の例は、特定の人物が実際に自転車を購入するかどうかを予測するクエリの作成方法を示します。このクエリでは、データはテーブルまたはその他のデータ ソースに格納されませんが、クエリに直接入力されます。クエリ内の人物は、次の特徴を持ちます。
35 才
持ち家所有
2 台の自家用車を所有
子供は 2 名
クエリでは、TM Decision Tree マイニング モデルおよび対象についての既知の特徴を使用することにより、その人物が自転車を購入したかどうかを示すブール値と一連の表形式の値を返します。これらの値は、PredictHistogram (DMX) 関数から返されたもので、どのように予測が行われたかを示しています。
SELECT
[TM Decision Tree].[Bike Buyer],
PredictHistogram([Bike Buyer])
FROM
[TM 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
例 2: OPENQUERY の使用
次の例は、外部データセットに格納されている潜在的な顧客の一覧を使用して、バッチ予測クエリを作成する方法を示します。テーブルは Analysis Services のインスタンスで定義されているデータ ソース ビューに含まれているため、クエリでは OPENQUERY を使用してデータを取得できます。テーブルの列名はマイニング モデルの列名と異なるため、テーブルの列をモデルの列にマップするには ON 句を使用する必要があります。
クエリは、テーブル内の各人物の氏名と共に、各人物が自転車を購入しそうかどうかを示すブール型の列を返します。この場合、0 は "自転車を購入する可能性が低い" こと、1 は "自転車を購入する可能性が高い" ことを示します。最後の列には、予測結果の確率が含まれます。
SELECT
t.[LastName],
t.[FirstName],
[TM Decision Tree].[Bike Buyer],
PredictProbability([Bike Buyer])
From
[TM Decision Tree]
PREDICTION JOIN
OPENQUERY([Adventure Works DW],
'SELECT
[LastName],
[FirstName],
[MaritalStatus],
[Gender],
[YearlyIncome],
[TotalChildren],
[NumberChildrenAtHome],
[Education],
[Occupation],
[HouseOwnerFlag],
[NumberCarsOwned]
FROM
[dbo].[ProspectiveBuyer]
') AS t
ON
[TM Decision Tree].[Marital Status] = t.[MaritalStatus] AND
[TM Decision Tree].[Gender] = t.[Gender] AND
[TM Decision Tree].[Yearly Income] = t.[YearlyIncome] AND
[TM Decision Tree].[Total Children] = t.[TotalChildren] AND
[TM Decision Tree].[Number Children At Home] = t.[NumberChildrenAtHome] AND
[TM Decision Tree].[Education] = t.[Education] AND
[TM Decision Tree].[Occupation] = t.[Occupation] AND
[TM Decision Tree].[House Owner Flag] = t.[HouseOwnerFlag] AND
[TM Decision Tree].[Number Cars Owned] = t.[NumberCarsOwned]
自転車を購入することが予測される顧客のみにデータセットを制限してから、顧客名で一覧を並べ替えるには、上記の例に WHERE 句と ORDER BY 句を追加します。
WHERE [BIKE Buyer]
ORDER BY [LastName] ASC
例 3: アソシエーションの予測
次の例は、Microsoft アソシエーション アルゴリズムから作成したモデルを使用して予測を作成する方法を示します。アソシエーション モデルの予測は、関連する製品を推奨するために使用できます。たとえば、次のクエリでは、次の 3 つの製品と共に購入される可能性が最も高い製品を 3 つ返します。
マウンテン ボトル ケージ
マウンテン タイヤ チューブ
マウンテン 200
Predict (DMX) 関数は多様性があるため、すべての種類のモデルで使用できます。この関数の引数に値 3 を使用して、クエリから返される項目の数を制限します。NATURAL PREDICTION JOIN 句に続く SELECT リストでは、予測の入力として使用する値を提供します。
SELECT FLATTENED
PREDICT([Association].[v Assoc Seq Line Items], 3)
FROM
[Association]
NATURAL PREDICTION JOIN
(SELECT (SELECT 'Mountain Bottle Cage' AS [Model]
UNION SELECT 'Mountain Tire Tube' AS [Model]
UNION SELECT 'Mountain-200' AS [Model]) AS [v Assoc Seq Line Items ]) AS t
例の結果を次に示します。
Expression.Model |
---|
HL Mountain Tire |
Water Bottle |
Fender Set - Mountain |
予測可能な属性 [v Assoc Seq Line Items] が含まれている列はテーブル列であるため、クエリは、入れ子になったテーブルを含む 1 つの列を返します。既定では、入れ子になったテーブルの列の名前は Expression になります。使用しているプロバイダで階層的な行セットがサポートされていない場合は、この例に示すように、FLATTENED キーワードを使用すると、結果を見やすくすることができます。