結合モデルのクエリ例
適用対象:
Azure Analysis Services Power BI Premiumを
SQL Server Analysis Servicesする
重要
データ マイニングは、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: モデルの元のパラメーターを取得する
次のクエリは、モデルの作成時に使用されたパラメーター設定の詳細を含む 1 つの列を返します。
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
ルールとアイテムセットに関する情報の入手
アソシエーション モデルの用途としては、頻度の高いアイテムセットに関する情報の検出と、特定のルールやアイテムセットに関する詳細の抽出の 2 つが一般的です。 たとえば、スコアによって特に興味深いとされたルールのリストを抽出したり、最も一般的なアイテムセットのリストを作成したりすることができます。 このような情報を取得するには、DMX コンテンツ クエリを使用します。 Microsoft アソシエーション ビューアーを使用してこの情報を参照することもできます。
サンプル クエリ 4: アイテムセットと製品のリストを取得する
次のクエリは、すべてのアイテムセットを、各アイテムセットに含まれる製品のリストから成る入れ子になったテーブルと共に取得します。 NODE_NAME 列にはモデル内のアイテムセットの一意の ID が、NODE_CAPTION 列にはアイテムの説明テキストが含まれています。 この例では、入れ子になったテーブルがフラット化されているため、アイテムセットに 2 つの製品が含まれている場合は結果に 2 つの行が生成されます。 使用しているクライアントが階層データをサポートしている場合は 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 の場合のように結果を明示的にグループ化する必要はなく、各クエリで集計関数を 1 つ使用するだけで済みます。
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 ステートメントは、シングルトン クエリと呼ばれます。 新しい値に対応する予測可能なモデル列は入れ子になったテーブルであるため、1 つの SELECT 句を使用して新しい値を入れ子になったテーブル列 [Model]にマップし、もう 1 つの 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: 関連するアイテムセットの信頼度を特定する
提案を生成するにはルールが便利ですが、データセット内のパターンをより深く分析するためにはアイテムセットの方が興味深い対象であると言えます。 たとえば、前のサンプル クエリで返された提案が満足できるものでなかった場合、Product A を含む他のアイテムセットを調べると、Product A があらゆる種類の製品と一緒に購入されるような付属品なのか、それとも特定の製品の購入との間に強い相関関係があるのかがわかります。 これらのリレーションシップを調べる最も簡単な方法は、Microsoft Association Viewer でアイテムセットをフィルター処理することです。ただし、クエリを使用して同じ情報を取得できます。
次のサンプル クエリは、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 Association アルゴリズムでは、次の表に示す追加の関数がサポートされています。
| 予測関数 | 使用 |
|---|---|
| IsDescendant (DMX) | あるノードがニューラル ネットワーク グラフ内の別のノードの子であるかどうかを示します。 |
| IsInNode (DMX) | 指定されたノードが現在のケースを含んでいるかどうかを示します。 |
| PredictAdjustedProbability (DMX) | 重み付け確率を返します。 |
| PredictAssociation (DMX) | 結合データセットのメンバーシップを予測します。 |
| PredictHistogram (DMX) | 現在の予測値に関連する値のテーブルを返します。 |
| PredictNodeId (DMX) | 各ケースの Node_ID を返します。 |
| PredictProbability (DMX) | 予測値の確率を返します。 |
| PredictSupport (DMX) | 指定された状態に対するサポート値を返します。 |
| PredictVariance (DMX) | 予測値の分散を返します。 |
関連項目
Microsoft アソシエーション アルゴリズム
Microsoft アソシエーション アルゴリズム テクニカル リファレンス
アソシエーション モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)