次の方法で共有


予測クエリ (データ マイニング)

一般的なデータ マイニング プロジェクトの目標は、マイニング モデルを使用して予測を行うことです。 たとえば、あるサーバーの集まりのダウンタイムを予測したり、顧客区分が広告キャンペーンに反応するかどうかを示すスコアを生成したりする場合があります。 これらすべてを行うには、予測クエリを作成します。

クエリに対する入力の種類に応じて、さまざまな機能の予測クエリが SQL Server でサポートされています。

クエリの種類

クエリ オプション

単一予測クエリ

1 つまたは複数の新しいケースについて結果を予測する場合に、単一クエリを使用します。 入力値をクエリに直接指定し、クエリは単一セッションとして実行されます。

バッチ予測

外部データをモデルに供給して、予測のベースとして使用するときは、バッチ予測を使用します。 データ全体について予測するには、外部ソースのデータをモデルの列にマップしてから、出力する予測データの種類を指定します。

データセット全体のクエリが単一セッションで実行され、複数のクエリを繰り返すよりも効率が高くなります。

時系列予測

いくつかの期間に対して値を予測するときは、時系列クエリを使用します。 SQL Server データ マイニングでは、時系列クエリに次の機能も用意されています。

  • 新しいデータをクエリの一部として追加して、既存のモデルを拡張し、複合系列に基づいて予測を行うことができます。

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

  • クロス予測を実行することができます。

以下の各セクションで、予測クエリの一般的構文、さまざまな種類の予測クエリ、および予測クエリの結果の操作方法について説明していきます。

予測クエリの基本デザイン

  • 予測関数の追加

  • 単一クエリ

  • バッチ予測クエリ

  • 時系列クエリ

クエリ結果の操作

予測クエリの基本デザイン

予測を作成するときには、モデルに新しいデータを渡して、その新しいデータに基づいて予測を生成するように要求するのが一般的です。

  • バッチ予測クエリでは、予測結合を使用してモデルを外部ソースのデータにマップします。

  • 単一予測クエリでは、入力として使用する 1 つ以上の値を入力します。 単一予測クエリを使用して複数の予測を作成することができます。 ただし、多数の予測を作成する必要がある場合は、バッチ クエリを使用するとパフォーマンスが向上します。

単一クエリとバッチ予測クエリの両方で、PREDICTION JOIN 構文を使用して新規データを定義します。 違いは、予測結合の入力側の指定方法です。

  • バッチ予測クエリでは、データは OPENQUERY 構文を使用して指定する外部データ ソースから提供されます。

  • 単一予測クエリでは、データはクエリの一部としてインラインで提供されます。

時系列モデルの場合、入力データは常に必要となるわけではありません。モデルに既に含まれるデータのみを使用して予測することができます。 ただし、新しい入力データを指定した場合は、新しいデータ更新を使用してモデルを更新して拡張するか、モデルで使用されていた元の系列データを置換するかを決定する必要があります。 これらのオプションの詳細については、「タイム シリーズ モデルのクエリ例」を参照してください。

トップに戻る

予測関数の追加

予測クエリをカスタマイズすると、値を予測するだけでなく、その予測に関連するさまざまな種類の情報を取得することができます。 たとえば、予測によりある顧客に推奨する製品の一覧を作成する場合、各予測が当たる確率を取得するのも良いでしょう。各予測をランク付けし、上位の推奨品だけをその顧客に勧めます。

これを行うには、クエリに予測関数を追加します。 サポートされる関数は、モデルやクエリの種類ごとに決まっています。 たとえばクラスター モデルでは、モデルによって作成されたクラスターに関する追加情報を提供する特殊な予測関数がサポートされています。一方、時系列モデルには、時間経過に伴って生じる違いを計算する関数があります。 ほぼすべての種類のモデルで使用できる汎用の予測関数もあります。 さまざまな種類のクエリでサポートされる予測関数の一覧については、DMX リファレンスの「一般的な予測関数 (DMX)」を参照してください。

単一予測クエリの作成

単一予測クエリは、予測をリアルタイムですぐに作成する場合に便利です。 一般的な使用手順としては、Web サイトのフォームを使用して顧客から情報を取得し、そのデータを入力として単一予測クエリに提出します。 たとえば、顧客が一覧から製品を選択すると、その選択内容を、お勧め製品を予測するクエリの入力として使用できます。

単一予測クエリには、入力を格納する独立したテーブルは必要ありません。 代わりに、入力として 1 行以上の値をモデルに提供し、1 件以上の予測をリアルタイムに取得します。

注記注意

単一予測クエリでは、その名前にかかわらず、単一クエリのみが生成されるわけではありません。入力セットごとに複数の予測を生成できます。 入力ケースごとに SELECT ステートメントを作成し、それらを UNION 演算子で組み合わせて、複数の入力ケースを指定します。

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

トップに戻る

バッチ予測クエリ

バッチ予測クエリが役立つのは、予測の作成に使用できる外部データがある場合です。 たとえば、オンラインでの操作と購入履歴に基づいて顧客を分類するモデルを構築したとします。 このモデルを、新しく獲得した見込み客の一覧に適用すると、売上予測の作成、または提案されたキャンペーンの目標設定を行うことができます。

予測結合を実行するときは、モデルの列を新しいデータ ソースの列にマップする必要があります。 このため、入力用に選択するデータ ソースは、モデルのデータと類似したデータである必要があります。 新しい情報は、厳密に一致する必要はなく、完全でなくてもかまいません。 たとえば、モデルが所得と年齢に関する情報を使用してトレーニングされ、予測に使用する顧客リストには年齢情報があり、所得に関する情報はないとします。 この状況でも、新しいデータをモデルにマップし、各顧客の予測を作成できます。 ただし、所得がモデルの重要な予測子である場合、完全な情報がないことは予測の品質に影響します。

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

関連するすべての列のマップが終了したらクエリを実行します。Analysis Services によって、モデル内のパターンに基づいて新しいデータの各行の予測が行われます。 外部データを含むデータ ソース ビューの新しいテーブルに結果を保存することができます。あるいは、SQL Server データ ツール (SSDT) または SQL Server Management Studio を使用している場合は、データをコピーして貼り付けることができます。

注記注意

SQL Server データ ツール (SSDT) のデザイナーを使用する場合は、先に外部データ ソースをデータ ソース ビューとして定義しておく必要があります。

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

トップに戻る

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

時系列モデルは他の種類のモデルとは異なります。モデルをそのまま使用して予測を作成することも、モデルに新しいデータを渡し、モデルを更新して、最新の傾向に基づいて予測を作成することもできます。 新しいデータを追加する場合は、新しいデータの使用方法を指定できます。

  • モデル ケースの拡張では、時系列モデルの既存のデータ系列に新しいデータを追加します。 その後、新しい組み合わせの系列に基づいて予測が行われます。 このオプションは、既存のモデルに追加するデータ ポイントが少ないときに適しています。

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

  • モデル ケースの置換では、トレーニング済みのモデルは保持されますが、基になるケースが新しいケース データのセットで置換されます。 モデルの傾向を維持して、別のデータ系列に適用するときは、このオプションが便利です。

    たとえば、元のモデルが、売上高が非常に高いデータ セットでトレーニングされたとします。新しい系列 (売上高が低い店舗のデータ) で元のデータを置換すると、傾向は保持されますが、置換系列の値に基づいた予測が開始されます。

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

時系列モデルで予測結合を作成する方法の詳細については、「タイム シリーズ モデルのクエリ例」または「PredictTimeSeries (DMX)」を参照してください。

トップに戻る

予測クエリの結果の操作

データ マイニング予測クエリの結果を保存するオプションは、クエリの作成方法に応じて異なります。

  • SQL Server Management Studio または SQL Server データ ツール (SSDT) で予測クエリ ビルダーを使用してクエリを作成する場合は、予測クエリの結果を既存の Analysis Services データ ソースに保存できます。 詳細については、「予測クエリの結果の表示および保存」を参照してください。

  • SQL Server Management Studio の [クエリ] ペインで DMX を使用して予測クエリを作成する場合は、クエリの出力オプションを使用して結果をファイルに保存するか、[クエリ結果] ペインにテキストとして、またはグリッドに保存できます。 詳細については、「クエリおよびテキスト エディター (SQL Server Management Studio)」を参照してください。

  • Integration Services コンポーネントを使用して予測クエリを実行する場合、タスクでは、使用可能な ADO.NET 接続マネージャーまたは OLEDB 接続マネージャーを使用して結果をデータベースに書き込む機能が提供されます。 詳細については、「データ マイニング クエリ タスク」を参照してください。

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

1 つのクエリで複数の関数を組み合わせて使用した場合、返される結果は常に階層的な行セットとして結合されます。 たとえば、次の DMX ステートメントのようなクエリを使用して、時系列モデルを使用して売上高と販売数量の将来の値を予測するとします。

SELECT
  PredictTimeSeries([Forecasting].[Amount]) as [PredictedAmount]
, PredictTimeSeries([Forecasting].[Quantity]) as [PredictedQty]
FROM
  [Forecasting]

このクエリの結果には 2 つの列 (予測値を格納する入れ子になったテーブルを各行に含む予測系列ごとに 1 つの列) があります。

PredictedAmount

PredictedQty

$TIME

Amount

201101

172067.11

$TIME

Quantity

201101

77

$TIME

Amount

201102

363390.68

$TIME

Quantity

201102

260

階層的な行セットを処理できないプロバイダーを使用している場合は、予測クエリ内で FLATTEN キーワードを使用して結果をフラット化することができます。 フラットな行セットの例などの詳細については、「SELECT (DMX)」を参照してください。

トップに戻る

関連項目

概念

コンテンツ クエリ (データ マイニング)

データ定義クエリ (データ マイニング)