シーケンス クラスタ モデルのクエリ (Analysis Services - データ マイニング)
データ マイニング モデルに対するクエリを作成する際には、コンテンツ クエリを作成することも、予測クエリを作成することもできます。コンテンツ クエリでは、モデルに格納されている情報の詳細を取得できます。予測クエリでは、モデル内のパターンを使用して、指定した新しいデータに基づく予測を行うことができます。シーケンス クラスタ モデルでコンテンツ クエリを使用すると、一般に、検出されたクラスタやクラスタ内の遷移に関する追加情報を取得できます。クエリを使用してモデルに関するメタデータを取得することもできます。
シーケンス クラスタ モデルで予測クエリを使用すると、一般に、シーケンスと遷移、モデル内の非シーケンス属性、またはシーケンス属性と非シーケンス属性の組み合わせに基づく提案が行われます。
ここでは、Microsoft シーケンス クラスタ アルゴリズムに基づいたモデルに対するクエリの作成方法について説明します。クエリの作成に関する一般的な情報については、「データ マイニング モデルのクエリ (Analysis Services - データ マイニング)」を参照してください。
コンテンツ クエリ
データ マイニング スキーマ行セットを使用してモデル パラメータを取得する
状態に対するシーケンス一覧を取得する
システム ストアド プロシージャを使用してモデルにクエリを実行する
クラスタのプロファイルとサンプル ケース
クラスタの特性とクラスタの識別
予測クエリ
次の状態を予測する
シーケンス クラスタ モデルに関する情報の入手
マイニング モデルのコンテンツに対して意味のあるクエリを作成するには、モデル コンテンツの構造や、各種類のノードに格納されている情報の種類を把握しておく必要があります。詳細については、「シーケンス クラスタ モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
トップに戻る
サンプル クエリ 1 : データ マイニング スキーマ行セットを使用してモデル パラメータを取得する
データ マイニング スキーマ行セットに対してクエリを実行すると、モデルに関する各種の情報を取得できます (基本的なメタデータ、モデルが作成された日時、モデルが最後に処理された日時、基になるマイニング構造の名前、予測可能な属性として使用されている列など)。
次のクエリでは、[Sequence Clustering] モデルの作成とトレーニングに使用されたパラメータが返されます。このモデルは、「基本的なデータ マイニング チュートリアル」のレッスン 5 で作成できます。
SELECT MINING_PARAMETERS
from $system.DMSCHEMA_MINING_MODELS
WHERE MODEL_NAME = 'Sequence Clustering'
例の結果を次に示します。
MINING_PARAMETERS |
---|
CLUSTER_COUNT=15,MINIMUM_SUPPORT=10,MAXIMUM_STATES=100,MAXIMUM_SEQUENCE_STATES=64 |
このモデルは、CLUSTER_COUNT の既定値 10 を使用して作成されています。CLUSTER_COUNT にゼロ以外のクラスタ数を指定した場合、アルゴリズムで取得するクラスタの概数のヒントとして、この数が使用されます。ただし、アルゴリズムによる分析処理時に取得されるクラスタ数は、これより上下する場合があります。ここでは、アルゴリズムによって、15 個のクラスタがトレーニング データに対し最適であると判断されました。したがって、完成したモデルのパラメータ値の一覧では、モデルの作成時に渡された値ではなく、アルゴリズムによって決定されたクラスタ数が報告されます。
最適なクラスタ数をアルゴリズムで決定する場合と、この動作はどのように違うのでしょうか。試しに、同じデータを使用する別のクラスタ モデルを作成し、CLUSTER_COUNT を 0 に設定してみます。この場合、アルゴリズムでは 32 個のクラスタが検出されます。したがって、CLUSTER_COUNT の既定値 10 を使用することによって、結果の数が制限されていることがわかります。
既定値として 10 が使用されているのは、多くの人にとって、クラスタ数が少ない方が、データのグループ化を参照および理解しやすいためです。ただし、それぞれのモデルとデータのセットは異なります。クラスタ数を増減してみて、最も正確なモデルが作成されるパラメータ値を探すようお勧めします。
トップに戻る
サンプル クエリ 2 : 状態に対するシーケンス一覧を取得する
マイニング モデル コンテンツには、トレーニング データで検出されたシーケンスが、最初の状態とそれに関連する 2 番目の状態の一覧の組み合わせとして格納されます。最初の状態がシーケンスのラベルとして使用され、関連する 2 番目の状態は遷移と呼ばれます。
たとえば、次のクエリでは、モデルにある最初の状態の完全な一覧が返された後、シーケンスがクラスタにグループ化されます。この一覧を取得するには、モデルのルート ノードを親 (PARENT_UNIQUE_NAME = 0) とするシーケンスの一覧 (NODE_TYPE = 13) を取得します。FLATTENED キーワードによって、結果が読み取りやすくなります。
注意 |
---|
PARENT_UNIQUE_NAME、Support、Probability の各列名は、同名の予約済みキーワードと区別するために角かっこで囲む必要があります。 |
SELECT FLATTENED NODE_UNIQUE_NAME,
(SELECT ATTRIBUTE_VALUE AS [Product 1],
[Support] AS [Sequence Support],
[Probability] AS [Sequence Probability]
FROM NODE_DISTRIBUTION) AS t
FROM [Sequence Clustering].CONTENT
WHERE NODE_TYPE = 13
AND [PARENT_UNIQUE_NAME] = 0
結果の一部 :
NODE_UNIQUE_NAME |
製品 1 |
シーケンス サポート |
シーケンス確率 |
---|---|---|---|
1081327 |
Missing |
0 |
####### |
1081327 |
All-Purpose Bike Stand |
17 |
0.00111 |
1081327 |
Bike Wash |
64 |
0.00418 |
1081327 |
(行 4 ~ 36 は省略) |
|
|
1081327 |
Women's Mountain Shorts |
506 |
0.03307 |
モデル内のシーケンスの一覧は、常にアルファベットの昇順で表示されます。シーケンスの順序番号によって関連する遷移を検索するため、シーケンスの順序は重要です。Missing の値は常に遷移 0 です。
たとえば、上の結果のモデルでは、製品 "Women's Mountain Shorts" のシーケンス番号が 37 です。この情報を使用して、"Women's Mountain Shorts" の後に購入されたすべての製品を表示することができます。
そのためには、まず、上のクエリで NODE_UNIQUE_NAME に対して返された値を参照し、モデルのすべてのシーケンスを含むノードの ID を取得します。この値を親ノードの ID としてクエリに渡し、このノードに含まれている遷移だけを取得します。このノードには、モデルのすべてのシーケンスの一覧が含まれています。一方、特定のクラスタの遷移の一覧を表示するには、クラスタ ノードの ID を渡します。これにより、そのクラスタに関連するシーケンスだけを表示できます。
SELECT NODE_UNIQUE_NAME
FROM [Sequence Clustering].CONTENT
WHERE NODE_DESCRIPTION = 'Transition row for sequence state 37'
AND [PARENT_UNIQUE_NAME] = '1081327'
例の結果を次に示します。
NODE_UNIQUE_NAME |
---|
1081365 |
この ID のノードには、製品 "Women's Mountain Shorts" に続くシーケンス、およびサポートと確率の値の一覧が含まれます。
SELECT FLATTENED
(SELECT ATTRIBUTE_VALUE AS Product2,
[Support] AS [P2 Support],
[Probability] AS [P2 Probability]
FROM NODE_DISTRIBUTION) AS t
FROM [Sequence Clustering].CONTENT
WHERE NODE_UNIQUE_NAME = '1081365'
例の結果を次に示します。
t.Product2 |
t.P2 サポート |
t.P2 確率 |
---|---|---|
Missing |
230.7419 |
0.456012 |
Classic Vest |
8.16129 |
0.016129 |
Cycling Cap |
60.83871 |
0.120235 |
Half-Finger Gloves |
30.41935 |
0.060117 |
Long-Sleeve Logo Jersey |
86.80645 |
0.171554 |
Racing Socks |
28.93548 |
0.057185 |
Short-Sleeve Classic Jersey |
60.09677 |
0.118768 |
このモデルでは、"Women's Mountain Shorts" に関連するさまざまなシーケンスに対するサポートが 506 です。遷移に対するサポートの値も 506 まで加算されます。ただし、これらの数は整数ではありません。サポートが単に各遷移を含むケースの数を表すと考えると、少々変な感じがするかもしれません。しかし、クラスタを作成する方法では部分的なメンバシップが計算されるため、クラスタ内の任意の遷移の可能性は、その特定のクラスタに属する可能性によって重み付けされる必要があります。
たとえば、クラスタが 4 つある場合、あるシーケンスがクラスタ 1 に属する可能性は 40%、クラスタ 2 に属する可能性は 30%、クラスタ 3 に属する可能性は 20%、クラスタ 4 に属する可能性は 10% です。アルゴリズムでは、遷移が属する可能性が最も高いクラスタが特定された後、クラスタ内での確率がクラスタの事前確率によって重み付けされます。
トップに戻る
サンプル クエリ 3 : システム ストアド プロシージャを使用してモデルにクエリを実行する
これらのクエリ サンプルから、モデルに格納された情報が複雑であることと、必要な情報を取得するために複数のクエリを作成する必要が生じる場合があることがわかります。ただし、Microsoft シーケンス クラスタ ビューアには、シーケンス クラスタ モデルに含まれている情報をグラフィカルに表示する、一連の強力なツールが用意されています。このビューアを使用して、モデルにクエリやドリル ダウンを実行することもできます。
Microsoft シーケンス クラスタ ビューアに表示される情報は、ほとんどの場合、モデルにクエリを実行する Analysis Services システム ストアド プロシージャを使用して作成されます。モデル コンテンツに対するデータ マイニング拡張機能 (DMX) クエリを記述することによっても、同じ情報を取得できますが、Analysis Services システム ストアド プロシージャを使用すると、探索やモデルのテストをすばやく行うことができます。
注意 |
---|
システム ストアド プロシージャは、Analysis Services サーバーによって、また Analysis Services サーバーとの対話用に Microsoft が提供するクライアントによって、内部処理に使用されます。したがって、Microsoft はその引数や動作を随時変更する場合があります。ここでは便宜上、これらについて説明しますが、運用環境での使用はサポートされません。運用環境での安定性と互換性を保つには、常に DMX を使用してクエリを記述してください。 |
ここでは、シーケンス クラスタ モデルに対するクエリを作成するシステム ストアド プロシージャの使用例を紹介します。
トップに戻る
クラスタのプロファイルとサンプル ケース
[クラスタのプロファイル] タブには、モデル内のクラスタの一覧、各クラスタのサイズ、およびクラスタに含まれる状態を示すヒストグラムが表示されます。同様の情報を取得するクエリで使用できるシステム ストアド プロシージャには、次の 2 種類があります。
GetClusterProfile では、クラスタの特性と、クラスタの NODE_DISTRIBUTION テーブルにあるすべての情報が返されます。
GetNodeGraph では、[シーケンス クラスタ] ビューの最初のタブに表示される、クラスタの数学グラフ表現の作成に使用できるノードとエッジが返されます。ノードがクラスタを、エッジが重み (強さ) を表します。
次の例は、システム ストアド プロシージャ GetClusterProfiles を使用して、モデル内のすべてのクラスタとそのプロファイルを取得する方法を示しています。このストアド プロシージャは、モデル内のプロファイルの完全なセットを返す、一連の DMX ステートメントを実行します。ただし、このストアド プロシージャを使用するには、モデルのアドレスを知っている必要があります。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('Sequence Clustering', 2147483647, 0)
次の例は、システム ストアド プロシージャ GetNodeGraph でクラスタ ID を指定して、特定のクラスタ (クラスタ 12) のプロファイルを取得する方法を示しています。クラスタ ID は、通常、クラスタ名に含まれる番号と同じです。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','12',0)
次のクエリに示すようにクラスタ ID を省略した場合、GetNodeGraph では、すべてのクラスタ プロファイルの順序付けされフラット化された一覧が返されます。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','',0)
[クラスタのプロファイル] タブには、モデルのサンプル ケースのヒストグラムも表示されます。これらのサンプル ケースは、モデルの理想的なケースを表しています。これらのケースは、トレーニング データと同じようにはモデルに格納されません。モデルのサンプル ケースを取得するには、特別な構文を使用する必要があります。
SELECT * FROM [Sequence Clustering].SAMPLE_CASES WHERE IsInNode('12')
詳細については、「SELECT FROM <model>.SAMPLE_CASES (DMX)」を参照してください。
トップに戻る
クラスタの特性とクラスタの識別
[クラスタの特性] タブには、各クラスタの主要な属性が、確率で順位付けされて表示されます。クラスタに属するケースの数と、クラスタ内のケースの分布について確認できます。各特性には、特定のサポートがあります。特定のクラスタの特性を確認するには、クラスタの ID を知っている必要があります。
次の例では、システム ストアド プロシージャ GetClusterCharacteristics を使用して、確率スコアが指定したしきい値 0.0005 よりも高い、クラスタ 12 の特性をすべて取得します。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','12',0.0005)
すべてのクラスタの特性を取得するには、クラスタの ID を空のままにします。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','',0.0005)
次の例では、システム ストアド プロシージャ GetClusterDiscrimination を呼び出して、クラスタ 1 とクラスタ 12 の特性を比較します。
CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('Sequence Clustering','1','12',0.0005,true)
独自のクエリを DMX で記述して、2 つのクラスタの比較や、あるクラスタと他のすべてのクラスタとの比較を行う場合、まず一方のセットの特性を取得してから、対象の特定クラスタの特性を取得して、2 つのセットを比較する必要があります。このシナリオは比較的複雑で、通常、クライアント処理を必要とします。
状態と遷移
Microsoft シーケンス クラスタの [状態遷移] タブでは、さまざまなクラスタに関する統計情報を取得および比較する複雑なクエリを、バックエンドで実行します。これらの結果を再現するには、比較的複雑なクエリとクライアント処理とを必要とします。
ただし、サンプル クエリ 2 で説明した DMX クエリを使用すると、シーケンスまたは個々の遷移の確率と状態を取得できます。
トップに戻る
シーケンス クラスタ モデルの予測クエリ
シーケンス クラスタ モデルの予測クエリでは、他のクラスタ モデルで使用される予測関数の多くを使用できます。さらに、特別な予測関数 PredictSequence (DMX) を使用すると、次の状態についての提案や推測を行うことができます。
トップに戻る
サンプル クエリ 4 : 次の状態を予測する
PredictSequence (DMX) 関数を使用すると、ある値に対して、最も可能性の高い次の状態を予測できます。また、複数の次の状態を予測することもできます。たとえば、顧客が購入する可能性のある上位 3 製品の一覧を取得して、推奨製品一覧を提供することができます。
次のサンプル クエリは、上位 5 つの予測とその確率を返す単一予測クエリです。入れ子になったテーブルがモデルに含まれているため、予測の実行時には、入れ子になったテーブル [v Assoc Seq Line Items] を列参照として使用する必要があります。また、入れ子になった SELECT ステートメントに示されているように、入力として値を指定するときは、ケース テーブルと入れ子になったテーブルの両方の列を結合する必要があります。
SELECT FLATTENED PredictSequence([v Assoc Seq Line Items], 7)
FROM [Sequence Clustering]
NATURAL PREDICTION JOIN
(SELECT (SELECT 1 as [Line Number],
'All-Purpose Bike Stand' as [Model]) AS [v Assoc Seq Line Items])
AS t
例の結果を次に示します。
Expression.$Sequence |
Expression.Line 番号 |
Expression.Model |
---|---|---|
1 |
|
Cycling Cap |
2 |
|
Cycling Cap |
3 |
|
Sport-100 |
4 |
|
Long-Sleeve logo Jersey |
5 |
|
Half-Finger Gloves |
6 |
|
All-Purpose Bike Stand |
7 |
|
All-Purpose Bike Stand |
1 列だけを予期したにもかかわらず、結果には 3 列が含まれています。これは、クエリが常にケース テーブルに対する列を返すためです。ここでは結果がフラット化されています。フラット化しないと、クエリは、入れ子になったテーブル列 2 列を含む 1 つの列を返します。
$sequence 列は、予測結果を並べ替えるために、PredictSequence 関数から既定で返される列です。[Line Number] 列は、モデルのシーケンス キーに一致させる必要がありますが、これらのキーは出力ではありません。
興味深いことに、All-Purpose Bike Stand の後の最上位に予測されたシーケンスは、Cycling Cap と Cycling Cap です。これはエラーではありません。顧客に対するデータの提示方法や、モデルのトレーニング時のグループ化方法によっては、このようなシーケンスが返されることは珍しくありません。たとえば、1 人の顧客がサイクリング キャップ (赤) の次にもう 1 つサイクリング キャップ (青) を購入することがあります。また、数を指定する方法がない場合、2 つを連続して購入することもあります。
行 6 と行 7 の値はプレースホルダです。可能な遷移のチェーンの最後に達しても、予測結果が終了されることはなく、入力として渡された値が結果に追加されます。たとえば、予測の数を 20 に増やした場合、行 6 ~ 20 の値はすべて同じ All-Purpose Bike Stand となります。
トップに戻る
関数一覧
すべての Microsoft アルゴリズムでは、共通の関数セットがサポートされています。ただし、Microsoft シーケンス クラスタ アルゴリズムでは、次の表のような追加の関数がサポートされています。
すべての Microsoft アルゴリズムに共通の関数の一覧については、「クエリ型への関数のマップ (DMX)」を参照してください。特定の関数の構文については、「データ マイニング拡張機能 (DMX) 関数リファレンス」を参照してください。
変更履歴
変更内容 |
---|
クエリ サンプルを簡単に確認できるようにナビゲーション リンクを追加しました。 |
サンプル クエリ 2 で返されるデータのエラーを修正しました。 |