マイニング モデルでの入れ子になったテーブルのフィルター処理 (中級者向けデータ マイニング チュートリアル)
モデルの作成と検証が完了したら、顧客データのサブセットに焦点を絞ります。 たとえば、特定の品目が入っているバスケットのみを分析したり、一定期間に何も購入しなかった顧客の人口統計を分析したりすることができます。
SQL Server 2008 Analysis Services では、マイニング モデルで使用されているデータをフィルター処理できるので、別のデータを使用する新しいデータ ソース ビューを設定する必要がありません。「基本的なデータ マイニング チュートリアル」では、ケース テーブルに条件を適用することでフラット テーブルのデータをフィルター処理する方法について学習しました。 ここでは、入れ子になったテーブルに適用するフィルターを作成します。
入れ子になったテーブルとケース テーブルでのフィルターの違い
データ ソース ビューにケース テーブルと入れ子になったテーブルが含まれている場合は、Association モデルで使用されているデータ ソース ビューと同様に、ケース テーブルの値、入れ子になったテーブルでの値の有無、または両方の組み合わせをフィルター処理できます。
ここでは、まず Association モデルのコピーを作成し、関連する新しいモデルに IncomeGroup 属性と Region 属性を追加して、ケース テーブルでこれらの属性をフィルター処理できるようにします。
アソシエーション モデルのコピーを作成して変更するには
Business Intelligence Development Studio の [マイニング モデル] タブで、[アソシエーション] モデルを右クリックし、[新しいマイニング モデル] をクリックします。
[モデル名] に「Association Filtered」と入力します。 [アルゴリズム名] で [Microsoft アソシエーション ルール] を選択します。 [OK] をクリックします。
Association Filtered モデルの列で [IncomeGroup] 行をクリックし、値を [無視] から [入力] に変更します。
次に、新しいアソシエーション モデルでケース テーブルに対してフィルターを作成します。 このフィルターでは、対象の地域または収入レベルの顧客のみがモデルに渡されます。 さらに、買い物かごに 1 つ以上の品目が入っていた顧客のみがモデルで使用されるように指定する 2 番目のフィルター条件を追加します。
マイニング モデルにフィルターを追加するには
[マイニング モデル] タブで [Association Filtered] モデルを右クリックし、[モデル フィルターの設定] をクリックします。
[モデル フィルター] ダイアログ ボックスで、[マイニング構造列] ボックスのグリッドの先頭行をクリックします。
[マイニング構造列] ボックスで、[IncomeGroup] をクリックします。
テキスト ボックスの左側のアイコンが変化して、選択されたアイテムが列であることが示されます。
[演算子] ボックスをクリックし、一覧から [=] 演算子を選択します。
[値] ボックスをクリックし、ボックスに「High」と入力します。
グリッドの次の行をクリックします。
グリッドの次の行の [ルールの適用条件] ボックスをクリックし、[OR] をクリックします。
[マイニング構造列] ボックスで、[IncomeGroup] をクリックします。 [値] ボックスに「Moderate」と入力します。
作成したフィルター条件が [式] ボックスに自動的に追加され、次のように表示されます。
[IncomeGroup] = 'High' OR [IncomeGroup] = 'Moderate'
演算子を既定値の [AND] のままにしてグリッドの次の行をクリックします。
[演算子] を既定値の [値を含む] のままにします。 [値] ボックスをクリックします。
[フィルター] ダイアログ ボックスの [マイニング構造列] の最初の行で、[モデル] をクリックします。
[演算子] で [IS NOT NULL] をクリックします。 [値] ボックスは空白のままにします。 [OK] をクリックします。
[モデル フィルター] ダイアログ ボックスの [式] ボックスのフィルター条件が自動的に更新されて、入れ子になったテーブルに新しい条件が追加されます。 完成した式は次のようになります。
[IncomeGroup] = 'High' OR [IncomeGroup] = 'Moderate' AND EXISTS (SELECT * FROM [vAssocSeqLineItems] WHERE [Model] <> NULL)
[OK] をクリックします。
ドリルスルーを有効にして、フィルター選択されたモデルを処理するには
[マイニング モデル] タブで [Association Filtered] モデルを右クリックし、[プロパティ] をクリックします。
[AllowDrillThrough] プロパティを [True] に変更します。
[Association Filtered] マイニング モデルを右クリックし、[モデルの処理] をクリックします。
エラー メッセージで [はい] をクリックすると、新しいモデルが Analysis Services データベースに配置されます。
[マイニング構造の処理] ダイアログ ボックスで [実行] をクリックします。
処理が完了したら、[閉じる] をクリックして [処理の進行状況] ダイアログ ボックスを終了し、さらに [閉じる] をクリックして [マイニング構造の処理] ダイアログ ボックスを終了します。
Microsoft 汎用コンテンツ ツリー ビューアーで NODE_SUPPORT の値を参照すると、フィルター選択されたモデルに含まれているケースの数が元のモデルよりも少ないことを確認できます。
解説
ここで作成した入れ子になったテーブルのフィルターでは、そのテーブルに少なくとも 1 つの行があるかどうかのみがチェックされますが、特定の製品の有無を確認するフィルター条件を作成することもできます。 たとえば、次のようなフィルターを作成できます。
[IncomeGroup] = 'High' AND
EXISTS (SELECT * FROM [<nested table name>] WHERE [Model] = 'Water Bottle' )
このステートメントでは、ケース テーブルの顧客を水筒 (water bottle) の購入者のみに制限しています。 ただし、入れ子になったテーブルの属性数には制限がないため、Analysis Services では選択できる値の一覧が表示されません。 代わりに、値を正確に入力する必要があります。
[クエリの編集] をクリックすると、フィルター式を手動で変更できます。 ただし、フィルター式の一部を手動で変更すると、グリッドが無効になり、その後はテキスト編集モードのみでフィルター式を操作する必要があります。 グリッド編集モードに戻すには、フィルター式を消去して最初からやり直す必要があります。
また、入れ子になったテーブルには LIKE 演算子を使用できないことに注意してください。