データ マイニング モデルのクエリ (Analysis Services - データ マイニング)

データ マイニング モデルのトレーニングが完了したら、SQL Server Management Studio または Business Intelligence Development Studio で提供されているカスタム ビューアを使用してモデルを調べることができます。ただし、予測を行う場合や、モデルからより詳細な情報を取得する場合は、データ マイニング モデルに対するクエリを作成する必要があります。クエリを使用すると、モデルの情報をさらに詳しく調べて有効に活用できます。たとえば次のようなことが可能になります。

  • 単一予測やバッチ予測を行う。

  • モデルによって検出されたパターンをより詳しく調べる。

  • モデルの特定のパターンやサブセットについて、詳細やトレーニング ケースを表示する。

  • マイニング モデルのケースの詳細へのドリルスルーを行う。

  • すべてのモデルとデータまたはそのサブセットに関する式、ルール、または統計を抽出する。

SQL Server Analysis Services には、クエリを作成するためのグラフィカル デザイン インターフェイスと、データ マイニング拡張機能 (DMX) というクエリ言語が用意されています。DMX は、カスタム予測や複雑なクエリを作成する場合に便利です。DMX 予測クエリの作成は、SQL Server Management Studio および Business Intelligence Development Studio に用意されているクエリ ビルダから開始できます。SQL Server Management Studio には一連の DMX クエリ テンプレートも用意されています。

クエリ ビルダの使用方法の詳細については、「予測クエリ ビルダを使用した DMX 予測クエリの作成」を参照してください。

DMX クエリ テンプレートの使用方法の詳細については、「SQL Server Management Studio での DMX クエリの作成」または「SQL Server Management Studio でテンプレートを使用する方法」を参照してください。

ここでは、作成できるクエリの種類と、それぞれの種類のクエリで取得できる情報について説明し、特定の種類のデータ マイニング モデルに対するクエリの例を紹介します。

  • 予測クエリ

    • 単一予測クエリ

    • バッチ予測クエリ

    • 時系列予測

  • コンテンツ クエリ

  • データ定義クエリ

予測クエリ

多くのデータ マイニング プロジェクトの主な目的は、マイニング モデルを使用して予測を行うことです。たとえば、来年 12 月の製品の販売数を予測したり、潜在顧客が広告キャンペーンに反応して製品を購入するかどうかを予測したい場合があります。

予測を作成するときには、モデルに何らかの新しいデータを渡して、その新しいデータに基づいて予測を生成するように要求するのが一般的です。予測結合でモデルを外部データ ソースにマップしてバッチ予測を行うことも、単一クエリを作成して一度に 1 つずつ値を渡すこともできます。

単一予測クエリとバッチ予測クエリはどちらも、PREDICTION JOIN 構文を使用して新しいデータを定義します。違いは、予測結合の入力側を指定する方法です。単一クエリでは、データはクエリの一部としてインラインで提供されます。バッチ クエリでは、データは OPENQUERY 構文を使用して指定する外部データ ソースから提供されます。詳細については、「OPENQUERY (DMX)」を参照してください。

さらに時系列モデルでは、モデルのみに基づいて予測を行うことができます。この場合、新しいデータを渡す必要はなく、そのまま既存の系列に基づく予測を要求できます。

次のセクションでは、これらの種類のクエリを作成する方法について説明します。

クエリの種類

クエリ オプション

単一予測クエリ

クエリに入力した 1 つまたは複数の新しいケースについて予測を行います。

バッチ予測

外部データ ソースの新しいケースをモデルにマップして予測を行います。

時系列予測

既存のモデルに基づいて、指定した数の期間について予測を行います。

新しいデータを追加して既存のモデルを拡張し、その複合系列に基づいて予測を行います。

REPLACE_MODEL_CASES オプションを使用して既存のモデルを新しいデータ系列に適用します。

予測クエリをカスタマイズすると、翌月の売上高や顧客に提案すべき製品など、特定の値を予測するだけでなく、予測に関連するさまざまな種類の情報を取得することができます。たとえば、その予測が正当である確率がわかれば、その提案をユーザーに提示すべきかどうかの判断に役立ちます。

予測クエリによって返される情報をカスタマイズするには、クエリに予測関数を追加します。サポートされる関数は、モデルやクエリの種類ごとに決まっています。たとえばクラスタ モデルでは、モデルによって作成されたグループに関する追加情報を提供する特殊な予測関数がサポートされています。時系列モデルでは、時間ごとの違いを計算する予測関数がサポートされています。ほぼすべての種類のモデルで使用できる汎用の予測関数もあります。さまざまな種類のクエリでサポートされる予測関数の一覧については、「クエリ型への関数のマップ (DMX)」を参照してください。すべての予測関数の一覧については、「データ マイニング拡張機能 (DMX) 関数リファレンス」を参照してください。

トップに戻る

単一クエリ

単一クエリは、単純な予測をリアルタイムで作成する場合に便利です。たとえば、Web サイトを使用して顧客から情報を入手し、そのデータを使用して取得した予測をその顧客用の提案として提示することも、電子メールの内容を分析し、既存の分類モデルを使用してカテゴリを割り当てて、それに従ってメッセージをルーティングすることもできます。

単一クエリには、入力を格納する独立したテーブルは必要ありません。1 行のデータをモデルに渡すと、単一予測がリアル タイムで返されます。1 つのケースを含む SELECT ステートメントを入力し、UNION 演算子を追加してから、別の SELECT ステートメントを入力して別のケースを指定することで、複数の予測が行われるように単一クエリを拡張することもできます。

既存のモデルに対する単一クエリを作成する方法は次のとおりです。

  • データ マイニング デザイナを使用します。

  • 単一クエリ テンプレートを使用します。

  • DMX ステートメントをプログラムで作成するか、別の Analysis Services クライアントで作成します。

単一クエリを作成するときには、新しいデータを PREDICTION JOIN の形式でモデルに渡す必要があります。したがって、実際のテーブルにマップするわけではなくても、新しいデータをマイニング モデルの既存の列に必ず一致させる必要があります。新しいデータ列と新しいデータが完全に一致する場合は、それらの列が自動的にマップされます。これを NATURAL PREDICTION JOIN と呼びます。一方、列が一致しない場合 (モデルに含まれているのと同じ種類および量のデータが新しいデータに含まれていない場合) は、モデルのどの列を新しいデータにマップするのかを指定するか、不足値を指定する必要があります。

データ マイニング デザイナで単一クエリを作成する方法については、「データ マイニング デザイナで単一クエリを作成する方法」および「予測クエリ ビルダを使用した DMX 予測クエリの作成」を参照してください。

DMX を使用して単一クエリを作成する方法については、「予測クエリ (DMX)」を参照してください。

SQL Server Management Studio の DMX クエリ テンプレートの使用例については、「テンプレートから単一予測クエリを作成する方法」を参照してください。

トップに戻る

バッチ予測クエリ

予測結合を実行する場合、モデルを新しいデータ ソースにマップすると、モデル内のパターンに基づいて新しいデータの各行の予測が行われます。予測結合は、テーブルやその他の外部データ ソースに大量の情報がある場合に、トレーニング済みのモデルを使用して予測を行うのに便利です。

既存のモデルに対するバッチ予測クエリを作成する方法は次のとおりです。

  • データ マイニング デザイナを使用します。

  • テンプレートを使用します。

  • DMX ステートメントをプログラムで作成するか、別の Analysis Services クライアントで作成します。

  • データ マイニング デザイナを使用してバッチ予測クエリを作成する場合は、先に外部データ ソースをデータ ソース ビューとして定義しておく必要があります。

DMX を使用して予測結合を作成する場合は、OPENQUERY、OPENROWSET、または SHAPE の各コマンドを使用して外部データ ソースを指定できます。DMX テンプレートの既定のデータ アクセス メソッドは OPENQUERY です。これらのメソッドの詳細については、「<source data query>」を参照してください。

外部データを定義する方法に関係なく、指定するデータ ソースには、モデル内のデータに似たデータを含む列が含まれている必要があります。ただし、新しい情報は不完全でもかまいません。たとえば、顧客リストには "年齢" 列があるかもしれませんが、収入に関する情報は含まれないかもしれません。モデルのトレーニング時に収入データが使用された場合であっても、その新しいデータをモデルにマップして予測を作成できます。ただし、この情報の不足が予測の質に影響する場合もあります。

最良の結果を得るためには、新しいデータとモデルの間で一致する列をできるだけ多く結合する必要があります。ただし、一致する列がなくてもクエリは成功します。結合されている列がない場合は、マージナル予測が返されます。これは、PREDICTION JOIN 句を含まない SELECT <predictable-column> FROM <model> ステートメントと同じです。

予測クエリの結果の操作

予測クエリでは、リレーショナル データベースに対するクエリとは異なり、クエリに追加した予測関数からそれぞれ独自の行セットが返されます。このため、単一のケースについて予測を行った結果、予測値と共に、入れ子になったテーブルの複数列が返され、余分な詳細が含まれていることもあります。

1 つのクエリで複数の関数を組み合わせて使用した場合、返される結果は常に階層的な行セットとして結合されます。階層的な行セットを処理できないプロバイダを使用している場合は、予測クエリ内で FLATTEN キーワードを使用して結果をフラット化することができます。

フラットな行セットの例などの詳細については、「SELECT (DMX)」を参照してください。

時系列マイニング モデルの予測

時系列モデルでは、より柔軟な方法で新しいデータを使用して予測を作成できます。モデルをそのまま使用して予測を作成することも、モデルに新しいデータを渡して最新の傾向に基づいて予測を更新することもできます。新しいデータを追加する場合は、その新しいデータの使用方法 (モデル ケースを拡張するか置換するか) を指定できます。

モデル ケースを拡張すると、新しいファクト データが時系列モデルに追加され、以降の予測はその新しい複合系列に基づいて行われるようになります。モデル ケースを置換すると、トレーニング済みのモデルは保持されますが、基になるケースが新しいケース データのセットで置換されます。

どちらの方法を使用する場合も、予測の開始位置は常に元の系列の末尾になります。

たとえば、前年の売上データでトレーニングされた既存の時系列モデルがあったとします。新しい売上データを数か月にわたって収集した後、現在の年の売上予測を更新します。この場合は、予測結合を作成して、新しいデータを追加してモデルを更新し、新しい予測が行われるようにモデルを拡張します。

また、既存のデータに基づいてモデルを作成した後に、予測結合を作成してケース データを新しいデータで置換することもできます。この方法は、たとえば、大量のデータが不足している店舗があるために、他の店舗のデータに基づいて作成されたモデルを使用して予測を行う場合などに便利です。時系列モデルで予測結合を作成する方法の詳細については、「タイム シリーズ モデルの照会」または「PredictTimeSeries (DMX)」を参照してください。

トップに戻る

コンテンツ クエリ

コンテンツ クエリは、マイニング モデルの内部の統計および構造に関する情報を抽出するための手段です。コンテンツ クエリを使用すると、ビューアでは簡単に得られない詳細な情報がわかる場合があります。また、コンテンツ クエリの結果を利用して、他の用途のためにプログラムで情報を抽出できます。たとえば、独自の計算を行うための式および確率の抽出や、モデル内のケースに関する実用的な情報の取得などを行うことができます。

ここでは、コンテンツ クエリを使用して取得できる情報の種類に関する一般的な情報を紹介します。コンテンツ クエリでは、次の表に示す DMX 構文を使用します。

クエリの種類

クエリ オプション

SELECT FROM <model>.CASES

モデルのトレーニングやテストに使用されたケースを見つけます。基になるマイニング構造の列などのデータにドリルスルーします。

SELECT FROM <structure>.CASES

特定のマイニング モデルには含まれていない列も含め、構造に含まれているデータをすべて表示します。

SELECT FROM <model>.CONTENT

モデルの特定のノードに関する詳細情報 (ルールと式、サポート、分散の統計など) を取得します。

SELECT FROM <model>.DIMENSIONCONTENT

データ マイニング ディメンションに対するクエリをサポートします。

この種類のクエリは主に、内部で使用するためのものです。独自のプラグイン アルゴリズムを開発する場合は、この構文を使用してモデルをテストすることがあります。

この機能はすべてのアルゴリズムでサポートされているわけではありません。サポートされているかどうかは、MINING_SERVICES スキーマ行セット内のフラグで示されます。

すべてのアルゴリズムに対して標準であるようなモデル コンテンツもありますが、通常、各モデルのコンテンツは、そのモデルの作成に使用したアルゴリズムによって異なります。したがって、コンテンツ クエリを作成する際には、そのモデルで最も有用な情報はどのような種類の情報かを把握しておく必要があります。

たとえば、SELECT FROM <model>.CONTENT という構文を使用するクエリを作成する場合、そのクエリによって返される情報は、モデルがシーケンス クラスタ モデルか、デシジョン ツリー モデルか、時系列モデルかによって大きく異なります。アソシエーション モデルでは、特定のルールをカスタム アプリケーションで使用できるようにそのルールの説明を取得することができるのに対し、時系列モデルやシーケンス クラスタ モデルでは、モデルによって検出された時間的パターンに関する詳細情報を取得できます。

以降では、コンテンツ クエリで取得できる情報の幅と深さを示すいくつかの例を紹介します。マイニング モデル コンテンツ、およびそれぞれのモデルの種類に固有のコンテンツについては、「マイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。

例 1: アソシエーション モデルに対するコンテンツ クエリ

SELECT FROM <model>.CONTENT ステートメントを使用すると、クエリの対象となるモデルの種類に応じてさまざまな種類のコンテンツを取得できます。アソシエーション モデルの場合、ルールを表すノードは NODE_TYPE の値が 8 で、アイテムセットは NODE_TYPE の値が 7 です。したがって、次のクエリでは、サポートで順位付けされた (既定の順序) 上位 10 個のアイテムセットが返されます。

SELECT TOP 10 NODE_DESCRIPTION, NODE_PROBABILITY, SUPPORT
FROM <model>.CONTENT WHERE NODE_TYPE = 7

次の例では、ノードの ID、完全なルール、およびアイテムセットの右辺の製品 (アイテムセットの一部として他の製品と関連すると予測された製品) の 3 つの列が返されます。

FLATTENED キーワードは、入れ子になった行セットをフラット テーブルに変換することを示します。ルールの右辺の製品を表す属性は、NODE_DISTRIBUTION テーブルに含まれています。したがって、長さが 2 より大きいという要件を追加して、属性名を含む行のみを取得しています。また、単純な文字列関数を使用して、3 番目の列からモデルの名前を削除しています。モデル名は通常、入れ子になった列の値の先頭に常に含まれています。WHERE 句で NODE_TYPE の値を 8 として指定して、ルールのみを取得しています。

SELECT FLATTENED NODE_UNIQUE_NAME , NODE_DESCRIPTION,
     (SELECT RIGHT(ATTRIBUTE_NAME, (LEN(ATTRIBUTE_NAME)-LEN('Association model name'))) 
FROM NODE_DISTRIBUTION
WHERE LEN(ATTRIBUTE_NAME)>2
) 
AS RightSideProduct
FROM [<Association model name>].CONTENT
WHERE NODE_TYPE = 8 
ORDER BY NODE_SUPPORT DESC

その他の例については、「アソシエーション モデルのクエリ (Analysis Services - データ マイニング)」を参照してください。

例 2 : デシジョン ツリー モデルに対するコンテンツ クエリ

モデル コンテンツのクエリは、特定の状態が予測された理由を説明するルールを取得して予測クエリを徹底的に調査する場合にも役に立ちます。たとえば、クエリに予測関数 PredictNodeId (DMX) を追加すると、そのルールを含むノードの ID を取得できます。次の構文を使用します。

SELECT  Predict([Bike Buyer]), PredictNodeID([Bike Buyer]) 
FROM [<decision tree model name>]
PREDICTION JOIN 
<input rowset> 

デシジョン ツリー モデルの場合、キャプションに結果へのパスの説明が含まれています。したがって、結果を含むノードの ID がわかれば、次のようなコンテンツ クエリを作成して、その予測を説明するルール (パス) を取得できます。

SELECT NODE_CAPTION
FROM [<decision tree model name>] 
WHERE NODE_UNIQUE_NAME= '<node id>'

その他の例については、「デシジョン ツリー モデルのクエリ (Analysis Services - データ マイニング)」を参照してください。

トップに戻る

データ定義クエリ

Analysis Services には、マイニング構造やマイニング モデルを作成および管理するためのさまざまなデータ定義ステートメントが用意されています。詳細については、「データ マイニング構造とデータ マイニング モデルの管理」を参照してください。