欠損値を正しく処理することは、効果的なモデリングの重要な部分です。 このセクションでは、欠損値とは何かについて説明し、データ マイニング構造とマイニング モデルを構築するときに欠損値を処理するために Analysis Services で提供される機能について説明します。
データ マイニングでの欠損値の定義
欠損値は、さまざまなことを意味する可能性があります。 フィールドが適用されなかった、イベントが発生しなかった、またはデータが使用できなかった可能性があります。 データを入力したユーザーが適切な値を知らなかったり、フィールドが入力されていない場合は気にしなかったりする可能性があります。
ただし、欠損値が重要な情報を提供する多くのデータ マイニング シナリオがあります。 欠損値の意味は、コンテキストによって大きく異なります。 たとえば、請求書の一覧の日付の欠損値は、従業員の雇用日を示す列に日付がない場合とは大きく異なる意味を持ちます。 一般に、Analysis Services は欠損値を情報として扱い、その計算に欠損値を組み込むように確率を調整します。 これにより、モデルのバランスが取れ、既存のケースの重み付けをあまり大きくしないようにすることができます。
したがって、Analysis Services には、欠損値を管理および計算するための 2 つの明確に異なるメカニズムが用意されています。 最初のメソッドは、マイニング構造のレベルで null の処理を制御します。 2 番目の方法はアルゴリズムごとに実装が異なりますが、一般的に、NULL 値を許可するモデルで欠損値がどのように処理およびカウントされるかを定義します。
Null の処理の設定
データ ソースでは、欠損値は、null、スプレッドシート内の空のセル、値 N/A またはその他のコード、または 9999 などの人為的な値として、さまざまな方法で表される場合があります。 ただし、データ マイニングの目的上、null 値のみが欠損値と見なされます。 データに null ではなくプレースホルダー値が含まれている場合は、モデルの結果に影響を与える可能性があるため、NULL に置き換えるか、可能であれば正しい値を推論する必要があります。 SQL Server Integration Services の参照変換やデータ プロファイラー タスク、Excel のデータ マイニング Add-Ins で提供される Fill By Example ツールなど、適切な値を推測して入力するために使用できるさまざまなツールがあります。
モデリングするタスクで、列に欠損値を含めてはならないことが指定されている場合は、マイニング構造を定義するときに、 NOT_NULL
モデリング フラグを列に適用する必要があります。 このフラグは、ケースに適切な値がない場合に処理が失敗することを示します。 モデルの処理中にこのエラーが発生した場合は、エラーをログに記録し、モデルに提供されたデータを修正する手順を実行できます。
欠落状態の計算
データ マイニング アルゴリズムでは、欠損値は有益です。 テーブルの場合、 Missing
は他と同様に有効な状態です。 さらに、データ マイニング モデルでは、他の値を使用して、値が不足しているかどうかを予測できます。 つまり、値が不足しているという事実はエラーではありません。
マイニング モデルを作成すると、すべての不連続列の Missing
状態がモデルに自動的に追加されます。 たとえば、入力列 [Gender] に男性と女性の 2 つの有効な値が含まれている場合、3 番目の値が自動的に追加され、 Missing
値を表します。列のすべての値の分布を示すヒストグラムには、常に Missing
値を持つケースの数が含まれます。 Gender 列に欠損値がない場合、ヒストグラムは不足状態が 0 件であることを示します。
既定で Missing
状態を含める理由は、データに使用可能なすべての値の例がない可能性があり、データに例が存在しないからといってモデルから除外したくない場合に明確になります。 たとえば、ある店舗の売上データで、特定の製品を購入したすべての顧客が女性であることが示された場合、女性のみが製品を購入できると予測するモデルを作成することは望まれません。 代わりに、Analysis Services は、可能な他の状態に対応する方法として、 Missing
と呼ばれる、未知の値のプレースホルダーを追加します。
たとえば、次の表は、Bike Buyer チュートリアル用に作成されたデシジョン ツリー モデルの (All) ノードの値の分布を示しています。 この例のシナリオでは、[Bike Buyer] 列が予測可能な属性です。1 は "Yes" を示し、0 は "No" を示します。
価値 | 場合 |
---|---|
0 | 9296 |
1 | 9098 |
行方不明 | 0 |
このディストリビューションでは、顧客の約半分が自転車を購入しており、半分は購入していないことを示しています。 この特定のデータセットは非常にクリーンです。したがって、すべてのケースには [Bike Buyer] 列に値があり、 Missing
値の数は 0 です。 ただし、[Bike Buyer] フィールドに null がある場合、Analysis Services はその行を Missing
値を持つケースとしてカウントします。
入力が連続列の場合、モデルは属性に対して Existing
と Missing
の 2 つの状態を表します。 つまり、列には数値データ型の値が含まれているか、まったく値が含まれていないかのどちらかです。 値がある場合、モデルは平均値、標準偏差、およびその他の意味のある統計を計算します。 値がない場合、モデルは Missing
値のカウントを提供し、それに応じて予測を調整します。 予測を調整する方法はアルゴリズムによって異なり、次のセクションで説明します。
注
入れ子になったテーブル内の属性の場合、欠損値は有益ではありません。 たとえば、顧客が製品を購入していない場合、入れ子になった Products テーブルにはその製品に対応する行は含まれません。マイニング モデルでは、不足している製品の属性は作成されません。 ただし、特定の製品を購入していない顧客に関心がある場合は、モデル フィルターで NOT EXISTS ステートメントを使用して、入れ子になったテーブル内の製品が存在しない場合にフィルター処理されたモデルを作成できます。 詳細については、「 マイニング モデルにフィルターを適用する」を参照してください。
欠落状態に対する確率の調整
Analysis Services は、値のカウントに加えて、データ セット全体の任意の値の確率を計算します。
Missing
値についても同様です。 たとえば、次の表は、前の例のケースの確率を示しています。
価値 | 場合 | 確率 |
---|---|---|
0 | 9296 | 50.55% |
1 | 9098 | 49.42% |
行方不明 | 0 | 0.03% |
ケースの数が 0 の場合、 Missing
値の確率が 0.03%として計算されるのは奇妙に思えるかもしれません。 実際、この動作は仕様であり、モデルが不明な値を適切に処理できるようにする調整を表します。
一般に、確率は、すべての可能なケースで割った好ましいケースとして計算されます。 この例では、アルゴリズムは特定の条件 ([Bike Buyer] = 1、または [Bike Buyer] = 0) を満たすケースの合計を計算し、その数を行の合計数で除算します。 ただし、 Missing
ケースを考慮するために、可能なすべてのケースの数に 1 が追加されます。 その結果、不明なケースの確率は 0 ではなく、非常に小さい数値であり、状態が単なるあり得ない、不可能ではないことを示します。
小さい Missing
値を追加しても予測器の結果は変わりませんが、履歴データに考えられるすべての結果が含まれていないシナリオでは、より優れたモデリングが可能になります。
注
データ マイニング プロバイダーは、欠損値の処理方法が異なります。 たとえば、一部のプロバイダーでは、入れ子になった列にデータが存在しないのはスパース表現ですが、入れ子になっていない列のデータがランダムに欠落していると想定しているプロバイダーもあります。
すべての結果がデータで指定されていて、確率が調整されないようにしたい場合は、マイニング構造の列にNOT_NULLモデリング フラグを設定する必要があります。
注
サードパーティのプラグインから取得した可能性のあるカスタム アルゴリズムを含む各アルゴリズムは、欠損値を異なる方法で処理できます。
デシジョン ツリー モデルでの欠損値の特別な処理
Microsoft デシジョン ツリー アルゴリズムは、欠損値の確率を他のアルゴリズムとは異なる方法で計算します。 デシジョン ツリー アルゴリズムは、ケースの合計数に 1 を追加するのではなく、少し異なる数式を使用して Missing
状態に合わせて調整します。
デシジョン ツリー モデルでは、 Missing
状態の確率は次のように計算されます。
StateProbability = (NodePriorProbability)* (StateSupport + 1) / (NodeSupport + TotalStates)
さらに、SQL Server 2014 Analysis Services (SSAS) では、デシジョン ツリー アルゴリズムは、モデルにフィルターが存在することをアルゴリズムが補正するのに役立つ追加の調整を提供します。これにより、トレーニング中に多くの状態が除外される可能性があります。
SQL Server 2014 では、トレーニング中に状態が存在するが、特定のノードでその状態のサポートがゼロの場合、標準的な調整が行われます。 ただし、トレーニング中に状態が検出されない場合、アルゴリズムは確率を正確に 0 に設定します。 この調整は、 Missing
状態だけでなく、トレーニング データに存在するが、モデルのフィルター処理の結果としてサポートがゼロである他の状態にも適用されます。
この追加の調整の結果は、次の数式になります。
StateProbability = 0.0 (その状態でトレーニング セットでサポートが 0 の場合)
ELSE 状態確率 = (ノード事前確率) * (状態サポート + 1) / (ノードサポート + 非ゼロサポートの全状態)
この調整の正味の効果は、ツリーの安定性を維持することです。
関連タスク
次のトピックでは、欠損値の処理方法について詳しく説明します。
タスク | リンクス |
---|---|
個々のモデル列にフラグを追加して、欠損値の処理を制御する | モデリング フラグの表示または変更 (データ マイニング) |
マイニング モデルのプロパティを設定して、欠損値の処理を制御する | マイニング モデルのプロパティを変更する |
DMX でモデリング フラグを指定する方法について説明します | モデリングフラグ(DMX) |
マイニング構造が欠損値を処理する方法を変更する | マイニング構造のプロパティを変更する |
こちらもご覧ください
マイニング モデル コンテンツ (Analysis Services - データ マイニング)
モデリング フラグ (データ マイニング)