次の方法で共有


アソシエーションの予測 (中級者向けデータ マイニング チュートリアル)

モデルの処理が完了したら、モデルに格納されているアソシエーションに関する情報を使用して予測を作成できます。このレッスンの最後の作業では、作成したアソシエーション モデルに対して予測クエリを作成する方法について学習します。このレッスンは、予測クエリ ビルダの使用方法について理解していることを前提に、アソシエーション モデルに対する予測クエリの作成方法について説明します。予測クエリ ビルダの使用方法の詳細については、「DMX 予測クエリの作成」を参照してください。

単一予測クエリの作成

結合型の予測は、顧客に商品を提案したり、製品間の関連を検出したりする場合など、さまざまな目的に利用できます。予測クエリを作成するには、まず使用するアソシエーション モデルを選択し、次に入力データを指定します。値の一覧などの外部データ ソースから入力を得ることも、単一クエリを作成して値を指定することもできます。

このシナリオでは、まずいくつかの単一予測クエリを作成して、予測がどのように機能するかについて確認します。次に、顧客の現在の購入状況に基づいて提案を行う場合に使用するバッチ予測用のクエリを作成します。

アソシエーション モデルに対する予測クエリを作成するには

  1. データ マイニング デザイナの [マイニング モデル予測] タブをクリックします。

  2. [マイニング モデル] ペインの [モデルの選択] をクリックします (適切なモデルが既に選択されている場合は、この手順と次の手順をスキップできます)。

  3. [マイニング モデルの選択] ダイアログ ボックスで、マイニング構造 [アソシエーション] を表すノードを展開し、[アソシエーション] モデルを選択します。[OK] をクリックします。

    ここでは、入力ペインは無視します。

  4. グリッドの [ソース] で空のセルをクリックし、[予測関数] を選択します。[フィールド] のセルで [PredictAssociation] を選択します。

    Predict 関数を使用してアソシエーションを予測することもできます。この関数を使用する場合は、引数としてテーブル列を受け取るバージョンの Predict 関数を選択してください。

  5. [マイニング モデル] ペインで、入れ子になったテーブル [vAssocSeqLineItems] を選択し、グリッドの [PredictAssociation] 関数の [条件と引数] ボックスにドラッグします。

    テーブル名と列名をドラッグ アンド ドロップすると、構文エラーを発生させずに複雑なステートメントを作成できます。ただし、PredictAssociation 関数のその他の省略可能な引数を含めて、セルの現在の内容が置き換わります。その他の引数を表示するには、関数の 2 番目のインスタンスを参照用として一時的にグリッドに追加します。

  6. [条件と引数] ボックスをクリックし、テーブル名の後に「,3」と入力します。

    [条件と引数] ボックスの全テキストは次のようになります。

    [Association].[v Assoc Seq Line Items],3

  7. 予測クエリ ビルダの上隅にある [結果] ボタンをクリックします。

結果には、[式] という見出しの単一の列が含まれると予想されます。[式] 列には、単一の列と次の 3 行から成る入れ子になったテーブルが含まれます。入力値を指定していないため、これらの予測は、モデル全体で最も可能性の高い製品のアソシエーションを表します。

モデル

Women's Mountain Shorts

Water Bottle

Touring-3000

次に、[単一クエリ入力] ペインを使用してクエリへの入力として製品を指定し、その製品との関連が最も高い製品を表示します。

入れ子になったテーブルの入力を使用する単一予測クエリを作成するには

  1. 予測クエリ ビルダの隅にある [デザイン] ボタンをクリックして、クエリ作成グリッドに戻ります。

  2. [マイニング モデル] メニューの [単一クエリ] をクリックします。

  3. [マイニング モデル] ダイアログ ボックスで [アソシエーション] モデルを選択します。

  4. グリッドの [ソース] で空のセルをクリックし、[予測関数] を選択します。[フィールド] のセルで、[PredictAssociation] を選択します。

  5. [マイニング モデル] ペインで、入れ子になったテーブル [vAssocSeqLineItems] を選択し、グリッドの [PredictAssociation] 関数の [条件と引数] ボックスにドラッグします。前の手順と同様に、入れ子になったテーブル名の後に「,3」と入力します。

  6. [単一クエリ入力] ダイアログ ボックスで、[vAssoc Seq Line Items] の横の [値] ボックスをクリックし、[...] ボタンをクリックします。

  7. [入れ子になったテーブルの入力] ダイアログ ボックスの [キー列] ペインで [Touring Tire] を選択し、[追加] をクリックします。

  8. [結果] ボタンをクリックします。

Touring Tire との関連が最も高い製品の予測が結果として表示されます。

モデル

Touring Tire Tube

Sport-100

Water Bottle

ただし、Touring Tire Tube が Touring Tire と一緒に購入されることが多いのは、モデルの調査から既にわかっています。それよりも関心があるのは、これらの製品を同時に購入した顧客にどの製品を提案できるかということです。買い物かごに入っている 2 つの商品を基に関連する製品を予測するように、クエリを変更します。また、予測された製品ごとに確率を追加するようにクエリを変更します。

単一予測クエリに入力と確率を追加するには

  1. 予測クエリ ビルダの隅にある [デザイン] ボタンをクリックして、クエリ作成グリッドに戻ります。

  2. [単一クエリ入力] ダイアログ ボックスで、[vAssoc Seq Line Items] の横の [値] ボックスをクリックし、[...] ボタンをクリックします。

  3. [キー列] ペインで [Touring Tire] を選択し、[追加] をクリックします。

  4. グリッドの [ソース] で空のセルをクリックし、[予測関数] を選択します。[フィールド] のセルで、[PredictAssociation] を選択します。

  5. [マイニング モデル] ペインで、入れ子になったテーブル [vAssocSeqLineItems] を選択し、グリッドの [PredictAssociation] 関数の [条件と引数] ボックスにドラッグします。前の手順と同様に、入れ子になったテーブル名の後に「,3」と入力します。

  6. [入れ子になったテーブルの入力] ダイアログ ボックスの [キー列] ペインで [Touring Tire Tube] を選択し、[追加] をクリックします。

  7. グリッドの [PredictAssociation] 関数の行で [条件と引数] ボックスをクリックし、引数 INCLUDE_STATISTICS を追加して引数を変更します。

    [条件と引数] ボックスの全テキストは次のようになります。

    [Association].[v Assoc Seq Line Items], INCLUDE_STATISTICS, 3

  8. [結果] ボタンをクリックします。

入れ子になったテーブル内の結果が変更され、予測がサポートおよび確率と共に表示されます。これらの値の意味の詳細については、「アソシエーション モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。

モデル

$SUPPORT

$PROBABILITY

$ADJUSTEDPROBABILITY

Sport-100

4334

0.291…

0.252…

Water Bottle

2866

0.192…

0.175…

Patch Kit

2113

0.142…

0.132

結果の操作

結果に多数の入れ子になったテーブルが含まれている場合は、結果をフラット化して見やすくすることができます。そのためには、クエリを手動で変更し、FLATTENED キーワードを追加します。

予測クエリで入れ子になった行セットをフラット化するには

  1. 予測クエリ ビルダの隅にある [SQL] ボタンをクリックします。

    グリッドが開いたペインに変わり、予測クエリ ビルダで作成された DMX ステートメントを表示および変更できるようになります。

  2. SELECT キーワードの後に、「FLATTENED」と入力します。

    クエリの全テキストは次のようになります。

    SELECT FLATTENED
      PredictAssociation([Association].[v Assoc Seq Line Items],INCLUDE_STATISTICS,3)
    FROM
      [Association]
    NATURAL PREDICTION JOIN
    (SELECT (SELECT 'Touring Tire' AS [Model]
      UNION SELECT 'Touring Tire Tube' AS [Model]) AS [v Assoc Seq Line Items]) AS t
    
  3. 予測クエリ ビルダの上隅にある [結果] ボタンをクリックします。

クエリを手動で編集した後に [デザイン] ビューに戻ると、変更が失われることに注意してください。クエリを保存する場合は、手動で作成した DMX ステートメントをテキスト ファイルにコピーします。[デザイン] ビューに戻ると、クエリが [デザイン] ビューで有効であった最後のバージョンに戻ります。

複数の予測の作成

過去の購入記録を基に、各顧客に対して最も精度の高い予測を作成するとします。予測クエリには、顧客 ID と最近購入した製品が記録されているテーブルなどの外部データを入力として使用できます。その場合は、データ テーブルが Analysis Services データ ソース ビューとして既に定義されていることが条件となります。さらにモデルで使用されているものと同様のケース テーブルと入れ子になったテーブルが入力データに含まれている必要があります。テーブル名が同じである必要はありませんが、構造は類似している必要があります。このチュートリアルでは、モデルのトレーニングが行われた元のテーブルを使用します。

予測クエリの入力方法を変更するには

  1. [マイニング モデル] メニューの [単一クエリ] をもう一度クリックしてオフにします。

  2. 単一クエリが失われることを警告するエラー メッセージが表示されます。[はい] をクリックします。

    入力ダイアログ ボックスの名前が、[入力テーブルの選択] に変わります。

顧客 ID と製品一覧を入力として提供する予測クエリを作成することが目的であるため、ケース テーブルとして顧客テーブルを、入れ子になったテーブルとして購入記録テーブルをそれぞれ追加します。その後に、提案を作成するための予測関数を追加します。

入れ子になったテーブルの入力を使用する予測クエリを作成するには

  1. [マイニング モデル] ペインで、[Association Filtered] モデルを選択します。

  2. [入力テーブルの選択] ダイアログ ボックスで、[ケース テーブルの選択] をクリックします。

  3. [テーブルの選択] ダイアログ ボックスの [データ ソース] で、[AdventureWorksDW2008] を選択します。[テーブル名またはビュー名] ボックスの一覧で [vAssocSeqOrders] を選択し、[OK] をクリックします。

    テーブル vAssocSeqOrders がペインに追加されます。

  4. [入力テーブルの選択] ダイアログ ボックスで、[入れ子になったテーブルの選択] をクリックします。

  5. [テーブルの選択] ダイアログ ボックスの [データ ソース] で、[AdventureWorksDW2008] を選択します。[テーブル名またはビュー名] ボックスの一覧で [vAssocSeqLineItems] を選択し、[OK] をクリックします。

    テーブル vAssocSeqLineItems がペインに追加されます。

  6. [入れ子になった結合の指定] ダイアログ ボックスで、ケース テーブルの [OrderNumber] フィールドをドラッグし、入れ子になったテーブルの [OrderNumber] フィールド上にドロップします。

    [リレーションシップの追加] をクリックし、一覧から列を選択してリレーションシップを作成することもできます。

  7. [リレーションシップの指定] ダイアログ ボックスで、[OrderNumber] フィールドが正しくマップされていることを確認し、[OK] をクリックします。

  8. [OK] をクリックして [入れ子になった結合の指定] ダイアログ ボックスを閉じます。

    ケース テーブルと入れ子になったテーブルがデザイン ペインで更新され、外部データの列とモデル内の列を結ぶ結合が表示されます。このリレーションシップが正しくない場合は、結合線を右クリックし、[接続の変更] を選択して列マッピングを編集するか、[削除] を選択してリレーションシップを完全に削除することができます。

  9. グリッドに新しい行を追加します。[ソース][vAssocSeqOrders] テーブルを選択します。[フィールド] で [CustomerKey] を選択します。

  10. グリッドに新しい行を追加します。[ソース][vAssocSeqOrders] テーブルを選択します。[フィールド] で [Region] を選択します。

  11. グリッドに新しい行を追加します。[ソース][予測関数] を選択し、[フィールド][PredictAssociation] を選択します。

  12. [vAssocSeqLineItems] を [PredictAssociation] 行の [条件と引数] ボックスにドラッグします。[条件と引数] ボックスの末尾をクリックし、「INCLUDE_STATISTICS,3」と入力します。

    [条件と引数] ボックスの全テキストは、"[Association].[v Assoc Seq Line Items], INCLUDE_STATISTICS, 3" になります。

  13. [結果] ボタンをクリックして、顧客ごとの予測を表示します。

同様の予測クエリを複数のモデルに対して作成し、フィルタ処理によって予測結果が変わるかどうかを確認してみてください。予測およびその他の種類のクエリの作成の詳細については、「アソシエーション モデルのクエリ (Analysis Services - データ マイニング)」を参照してください。