一般的なデータ マイニング プロジェクトの目的は、マイニング モデルを使用して予測を行うことです。 たとえば、特定のサーバー クラスターで予想されるダウンタイムの量を予測したり、顧客のセグメントが広告キャンペーンに応答する可能性があるかどうかを示すスコアを生成したりできます。 これらすべてのことを行うには、予測クエリを作成します。
機能的には、クエリへの入力の種類に応じて、SQL Server でサポートされる予測クエリの種類が異なります。
クエリの型 | [クエリ オプション] |
---|---|
シングルトン予測クエリ | 単一の新しいケースまたは複数の新しいケースの結果を予測する場合は、シングルトン クエリを使用します。 入力値はクエリで直接指定し、クエリは 1 つのセッションとして実行されます。 |
バッチ予測 | モデルにフィードする外部データがある場合は、バッチ予測を使用して、予測の基礎として使用します。 データ セット全体の予測を行うには、外部ソースのデータをモデル内の列にマップし、出力する予測データの種類を指定します。 データセット全体のクエリは 1 つのセッションで実行されるため、このオプションは複数の繰り返しクエリを送信するよりもはるかに効率的です。 |
時系列予測 | 将来のいくつかのステップで値を予測する場合は、時系列クエリを使用します。 SQL Server データ マイニングには、時系列クエリで次の機能も用意されています。 クエリの一部として新しいデータを追加して既存のモデルを拡張し、複合系列に基づいて予測を行うことができます。 REPLACE_MODEL_CASES オプションを使用して、既存のモデルを新しいデータ系列に適用できます。 クロス予測を実行できます。 |
次のセクションでは、予測クエリの一般的な構文、さまざまな種類の予測クエリ、および予測クエリの結果を操作する方法について説明します。
基本的な予測クエリの設計
予測を作成するときは、通常、新しいデータの一部を指定し、新しいデータに基づいて予測を生成するようにモデルに依頼します。
バッチ予測クエリでは、 予測結合を使用して、モデルをデータの外部ソースにマップします。
シングルトン予測クエリでは、入力として使用する 1 つ以上の値を入力します。 シングルトン予測クエリを使用して、複数の予測を作成できます。 ただし、多くの予測を作成する必要がある場合は、バッチ クエリを使用するとパフォーマンスが向上します。
シングルトンとバッチの両方の予測クエリでは、PREDICTION JOIN 構文を使用して新しいデータを定義します。 違いは、予測結合の入力側の指定方法です。
バッチ予測クエリでは、OPENQUERY 構文を使用して指定された外部データ ソースからデータが取得されます。
シングルトン予測クエリでは、データはクエリの一部としてインラインで提供されます。
時系列モデルの場合、入力データは必ずしも必要であるとは限りません。モデルに既に存在するデータのみを使用して予測を行うことができます。 ただし、新しい入力データを指定する場合は、新しいデータを使用してモデルを更新および拡張するか、モデルで使用された元の一連のデータを置き換えるかを決定する必要があります。 これらのオプションの詳細については、「 タイム シリーズ モデル クエリの例」を参照してください。
予測関数の追加
値を予測するだけでなく、予測クエリをカスタマイズして、予測に関連するさまざまな種類の情報を返すことができます。 たとえば、予測によって顧客に推奨される製品の一覧が作成される場合は、各予測の確率を返して、それらをランク付けし、上位の推奨事項のみをユーザーに提示することもできます。
これを行うには、 予測関数 をクエリに追加します。 各モデルまたはクエリの種類は、特定の関数をサポートします。 たとえば、クラスタリング モデルは、モデルによって作成されたクラスターに関する詳細を提供する特別な予測関数をサポートします。一方、時系列モデルには、時間の経過に伴う差を計算する関数があります。 ほぼすべてのモデル型で動作する一般的な予測関数もあります。 さまざまな種類のクエリでサポートされる予測関数の一覧については、このトピックの DMX リファレンス: 一般的な予測関数 (DMX) を参照してください。
シングルトン予測クエリの作成
シングルトン予測クエリは、リアルタイムで迅速な予測を作成する場合に便利です。 一般的なシナリオとして、Web サイト上のフォームを使用して顧客から情報を取得し、そのデータをシングルトン予測クエリへの入力として送信することが考えられます。 たとえば、顧客がリストから製品を選択した場合、その選択を、推奨する最適な製品を予測するクエリへの入力として使用できます。
シングルトン予測クエリでは、入力を含む別のテーブルは必要ありません。 代わりに、モデルへの入力として 1 行または複数行の値を指定すると、予測または予測がリアルタイムで返されます。
警告
名前にもかかわらず、シングルトン予測クエリは単一の予測を行うだけでなく、入力のセットごとに複数の予測を生成できます。 複数の入力ケースを指定するには、入力ケースごとに SELECT ステートメントを作成し、それらを UNION 演算子と組み合わせます。
シングルトン予測クエリを作成する場合は、PREDICTION JOIN の形式で新しいデータをモデルに提供する必要があります。 つまり、実際のテーブルにマッピングしていない場合でも、新しいデータがマイニング モデルの既存の列と一致していることを確認する必要があります。 新しいデータ列と新しいデータが正確に一致する場合、Analysis Services によって列がマップされます。 これは自然予測 結合と呼ばれます。 ただし、列が一致しない場合、または新しいデータにモデル内にあるデータの種類と量が同じでない場合は、モデル内のどの列を新しいデータにマップするかを指定するか、欠損値を指定する必要があります。
バッチ予測クエリ
バッチ予測クエリは、予測の作成に使用する外部データがある場合に便利です。 たとえば、顧客をオンライン アクティビティと購入履歴別に分類するモデルを構築したとします。 そのモデルを新しく獲得した潜在顧客の一覧に適用したり、売上予測を作成したり、提案されたキャンペーンのターゲットを特定したりできます。
予測結合を実行する場合は、モデルの列を新しいデータ ソースの列にマップする必要があります。 そのため、入力用に選択するデータ ソースには、モデル内のデータと多少似たデータが必要です。 新しい情報は正確に一致する必要がないため、不完全になる可能性があります。 たとえば、モデルが収入と年齢に関する情報を使用してトレーニングされたとしますが、予測に使用している顧客リストには年齢がありますが、収入に関するものはありません。 このシナリオでは、新しいデータをモデルにマップし、顧客ごとに予測を作成できます。 ただし、収入がモデルの重要な予測器であった場合、完全な情報が不足すると予測の品質に影響します。
最適な結果を得るには、新しいデータとモデルの間で、一致する列をできるだけ多く結合する必要があります。 ただし、一致がない場合でも、クエリは成功します。 結合された列がない場合、クエリは限界予測を返します。これは PREDICTION JOIN 句を使用せずに SELECT <predictable-column> FROM <model>
ステートメントと同じです。
関連するすべての列が正常にマップされたら、クエリを実行し、Analysis Services はモデル内のパターンに基づいて新しいデータの各行に対して予測を行います。 外部データを含むデータ ソース ビューの新しいテーブルに結果を保存するか、SQL Server Data Tools (SSDT) または SQL Server Management Studio を使用しているデータをコピーして貼り付けることができます。
警告
SQL Server Data Tools (SSDT) でデザイナーを使用する場合は、まず外部データ ソースをデータ ソース ビューとして定義する必要があります。
DMX を使用して予測結合を作成する場合は、OPENQUERY、OPENROWSET、または SHAPE コマンドを使用して外部データ ソースを指定できます。 DMX テンプレートの既定のデータ アクセス方法は OPENQUERY です。 これらのメソッドの詳細については、「 <source データ クエリ>を参照してください。
時系列マイニング モデルの予測
時系列モデルは、他のモデルの種類とは異なります。モデルをそのまま使用して予測を作成するか、新しいデータをモデルに提供してモデルを更新し、最近の傾向に基づいて予測を作成することができます。 新しいデータを追加する場合は、新しいデータの使用方法を指定できます。
モデル ケースを拡張すると 、時系列モデル内の既存のデータ系列に新しいデータが追加されます。 そのため、予測は新しい結合された系列に基づいています。 このオプションは、既存のモデルにいくつかのデータ ポイントを追加する場合に適しています。
たとえば、前年の売上データでトレーニングされた既存の時系列モデルがあるとします。 数か月の新しい売上データを収集した後、今年度の売上予測を更新することにします。 新しいデータを追加してモデルを更新し、モデルを拡張して新しい予測を行う予測結合を作成できます。
モデル ケースを置き換えると 、トレーニング済みのモデルは保持されますが、基になるケースは新しいケース データセットに置き換えられます。 このオプションは、モデル内で傾向を維持しながら、別のデータ セットに適用する場合に便利です。
たとえば、元のモデルは、販売量が非常に多い一連のデータでトレーニングされている可能性があります。基になるデータを新しい系列に置き換える場合 (販売量が少ない店舗の場合など)、傾向は維持されますが、予測は置換系列の値から始まります。
使用する方法に関係なく、予測の開始点は常に元の系列の末尾です。
時系列モデルで予測結合を作成する方法の詳細については、「 時系列モデル クエリの例 」または 「PredictTimeSeries (DMX)」を参照してください。
予測クエリの結果の操作
データ マイニング予測クエリの結果を保存するオプションは、クエリの作成方法によって異なります。
SQL Server Management Studio または SQL Server Data Tools (SSDT) で予測クエリ ビルダーを使用してクエリを作成する場合は、予測クエリの結果を既存の Analysis Services データ ソースに保存できます。 詳細については、「 予測クエリの結果を表示および保存する」を参照してください。
SQL Server Management Studio の [クエリ] ウィンドウで DMX を使用して予測クエリを作成する場合は、クエリ出力オプションを使用して、結果をファイルまたはクエリ結果ペインにテキストまたはグリッドとして保存できます。 詳細については、「 クエリエディターとテキスト エディター (SQL Server Management Studio)」を参照してください。
Integration Services コンポーネントを使用して予測クエリを実行すると、タスクは、使用可能な ADO.NET 接続マネージャーまたは OLEDB 接続マネージャーを使用してデータベースに結果を書き込む機能を提供します。 詳細については、「 データ マイニング クエリ タスク」を参照してください。
予測クエリの結果はリレーショナル データベースに対するクエリの結果とは異なり、常に 1 行の関連値が返されることを理解しておくことが重要です。 クエリに追加する各 DMX 予測関数は、独自の行セットを返します。 そのため、1 つのケースで予測を行う場合、結果は、追加の詳細を含む入れ子になったテーブルの複数の列と共に予測値になる可能性があります。
1 つのクエリで複数の関数を結合すると、結果は階層行セットとして結合されます。 たとえば、時系列モデルを使用して、次の DMX ステートメントなどのクエリを使用して、売上高と販売数量の将来の値を予測するとします。
SELECT
PredictTimeSeries([Forecasting].[Amount]) as [PredictedAmount]
, PredictTimeSeries([Forecasting].[Quantity]) as [PredictedQty]
FROM
[Forecasting]
このクエリの結果は、予測された系列ごとに 1 つずつ、2 つの列です。各行には、予測値を含む入れ子になったテーブルが含まれます。
PredictedAmount
$TIME | 金額 |
---|---|
201101 | 172067.11 |
$TIME | 金額 |
---|---|
201102 | 363390.68 |
PredictedQty
$TIME | 数量 |
---|---|
201101 | 77 |
$TIME | 数量 |
---|---|
201102 | 260 |
プロバイダーが階層的な行セットを処理できない場合は、予測クエリで FLATTEN キーワードを使用して結果をフラット化できます。 フラット化された行セットの例など、詳細については、 SELECT (DMX) を参照してください。