Mining Model Content for Decision Tree Models (Analysis Services - Data Mining)
適用対象:SQL Server 2019 以前の Analysis Services Azure Analysis Services Fabric/Power BI Premium
重要
データ マイニングは SQL Server 2017 Analysis Services で非推奨となり、SQL Server 2022 Analysis Services で停止されました。 非推奨および停止された機能については、ドキュメントの更新は行われません。 詳細については、「Analysis Services 下位互換性」を参照してください。
このトピックでは、Microsoft デシジョン ツリー アルゴリズムを使用するモデルに固有のマイニング モデル コンテンツについて説明します。 すべてのモデルの種類のマイニング モデル コンテンツの一般的な説明については、「 マイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。 Microsoft デシジョン ツリー アルゴリズムは、まったく機能の異なる多様なモデルを作成できる複合アルゴリズムであることに注意してください。デシジョン ツリーでは、アソシエーションやルールのほか、線形回帰も表すことができます。 ツリーの構造は本質的には同じですが、モデルを作成した目的によって情報を解釈する方法が異なります。
デシジョン ツリー モデルの構造について
デシジョン ツリー モデルには、モデルとそのメタデータを表す 1 つの親ノードがあります。 その親ノードの下には、選択した予測可能な属性を表す独立したツリーがあります。 たとえば、顧客が購入を行うかどうかを予測するためのデシジョン ツリー モデルを設定し、性別と収入の入力を指定した場合、モデルでは購入の属性に対して 1 つのツリーが作成され、その中に性別と収入に関連する条件で分割される多数の分岐が含まれます。
一方、その後で顧客報酬プログラムへの参加についての別の予測可能な属性を追加した場合、アルゴリズムによって、親ノードの下に 2 つの個別のツリーが作成されます。 1 つは購入についての分析を含むツリーで、もう 1 つは顧客報酬プログラムについての分析を含むツリーです。 デシジョン ツリー アルゴリズムを使用してアソシエーション モデルを作成する場合、アルゴリズムでは、予測される製品ごとの個別のツリーと、対象の属性の選択に役立つその他のすべての製品の組み合わせを含むツリーが作成されます。
注意
モデルに複数のツリーが含まれる場合、 Microsoft ツリー ビューアーで同時に表示できるツリーは 1 つだけです。 ただし、 汎用コンテンツ ツリー ビューアー では、同じモデル内のすべてのツリーを同時に表示することができます。
予測可能な属性ごとに作成されるツリーには、選択した入力列が特定の予測可能な属性の結果にどのように影響するかを示す情報が含まれます。 各ツリーの先頭に予測可能な属性を格納するノード (NODE_TYPE = 9) があり、その下に入力属性を表す一連のノード (NODE_TYPE = 10) があります。 属性は、ケース レベルの列か、入れ子になったテーブル列の値 (通常は入れ子になったテーブルの キー 列の値) のいずれかに対応します。
内部ノードおよびリーフ ノードは分割条件を表します。 ツリーは、同じ属性で複数回分割できます。 たとえば、 TM_DecisionTree モデルを [Yearly Income] および [Number of Children] で分割し、さらにツリーの下位にある [Yearly Income] で再度分割することができます。
Microsoft デシジョン ツリー アルゴリズムでは、ツリー全体またはツリーの一部に線形回帰を含めることができます。 モデル化する属性が連続する数値データ型であり、属性間のリレーションシップを線形でモデル化できる場合は、モデルで回帰ツリー ノード (NODE_TYPE = 25) を作成できます。 この場合、ノードには回帰式が含まれます。
ただし、予測可能な属性に不連続の値が含まれている場合や、数値がバケット化 (分離) されている場合は、モデルでは常に分類ツリー (NODE_TYPE =2) が作成されます。 分類ツリーには、属性の値ごとに複数の分岐または内部ツリー ノード (NODE_TYPE =3) を含めることができます。 ただし、必ずしも属性の値ごとに分割されるとは限りません。
Microsoft デシジョン ツリー アルゴリズムでは、連続するデータ型が入力として許可されないため、連続する数値データ型の列があると値が分離されます。 アルゴリズムによって、すべての連続属性の分割のポイントで独自の分離が実行されます。
注意
SQL Server Analysis Servicesは、連続属性をバケット化する方法を自動的に選択します。ただし、マイニング構造列のコンテンツ タイプを Discretized に設定し、 または DiscretizationMethod プロパティを設定することで、入力の連続値の分離方法をDiscretizationBucketCount制御できます。
デシジョン ツリー モデルのモデル コンテンツ
ここでは、マイニング モデル コンテンツの列のうち、デシジョン ツリー モデルに関連する列についてのみ詳細と例を紹介します。 スキーマ行セットの汎用列とマイニング モデルの用語の説明については、「 マイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
MODEL_CATALOG
モデルが格納されているデータベースの名前。
MODEL_NAME
モデルの名前。
ATTRIBUTE_NAME
このノードに対応する属性の名前。
NODE_NAME
常に NODE_UNIQUE_NAME と同じです。
NODE_UNIQUE_NAME
モデル内のノードの一意の識別子。 この値は変更できません。
デシジョン ツリー モデルでは、次の規則に従って一意の名前が付けられます。この規則は、すべてのアルゴリズムに適用されるわけではありません。
特定のノードの子ノードでは、共通の 16 進数のプレフィックスの後に、親ノード内における子のシーケンスを表す別の 16 進数が付加されます。 プレフィックスからパスを推測することができます。
NODE_TYPE
デシジョン ツリー モデルでは、次の種類のノードが作成されます。
ノードの種類 | 説明 |
---|---|
1 (モデル) | モデルのルート ノードです。 |
2 (ツリー) | モデル内の分類ツリーの親ノードです。 "すべて"というラベルが付けられます。 |
3 (内部) | 内部分岐の先頭です。分類ツリーまたは回帰ツリー内に存在します。 |
4 (分布) | リーフ ノードです。分類ツリーまたは回帰ツリー内に存在します。 |
25 (回帰ツリー) | モデル内の回帰ツリーの親ノードです。 "すべて"というラベルが付けられます。 |
NODE_CAPTION
表示名。
モデルを作成すると、NODE_UNIQUE_NAME の値が自動的にキャプションとして使用されます。 ただし、NODE_CAPTION の値を変更してクラスターの表示名を更新することもできます。この値は、プログラムで変更することも、ビューアーを使用して変更することもできます。 キャプションはモデルによって自動的に生成されます。 キャプションの内容は、モデルの種類およびノードの種類によって異なります。
デシジョン ツリー モデルの NODE_CAPTION と NODE_DESCRIPTION の情報は、ツリー内のレベルによって異なります。 詳細と例については、「 ノードのキャプションとノードの記述」を参照してください。
CHILDREN_CARDINALITY
ノードの子の推定数。
親ノード モデル化された予測可能な属性の数を示します。 予測可能な属性ごとにツリーが作成されます。
ツリー ノード 各ツリーの [すべて] ノードから、対象の属性に使用された値の数がわかります。
対象の属性が不連続属性の場合、値は個別の値に 1 ( Missing 状態の分) を加算した数になります。
予測可能な属性が連続属性の場合、値は連続属性をモデル化するために使用されたバケットの数を示します。
リーフ ノード 常に 0 です。
PARENT_UNIQUE_NAME
ノードの親の一意な名前です。 ルート レベルのノードには NULL を返します。
NODE_DESCRIPTION
ノードの説明です。
デシジョン ツリー モデルの NODE_CAPTION と NODE_DESCRIPTION の情報は、ツリー内のレベルによって異なります。
詳細と例については、「 ノードのキャプションとノードの記述」を参照してください。
NODE_RULE
直接の親ノードから現在のノードへのパスを示すルールの XML 記述。
詳細と例については、「 ノード ルールとマージナル ルール」を参照してください。
MARGINAL_RULE
モデルの親ノードから現在のノードへのパスを示すルールの XML 記述。
詳細については、「 ノード ルールとマージナル ルール」を参照してください。
NODE_PROBABILITY
このノードに関連付けられている確率。
詳細については、「 確率」を参照してください。
MARGINAL_PROBABILITY
親ノードからノードに到達する確率です。
詳細については、「 確率」を参照してください。
NODE_DISTRIBUTION
ノードの確率ヒストグラムが含まれているテーブル。 このテーブルの情報は、予測可能な属性が連続変数か不連続変数かによって異なります。
モデル ルート ノード このテーブルは空です。
[(すべて)] ノード モデル全体の概要が含まれます。
内部ノード そのリーフ ノードについて集計された統計が含まれます。
リーフ ノード 現在のリーフ ノードまでのパスに含まれるすべての条件から予測される結果のサポートおよび確率が含まれます。
回帰ノード 入力と予測可能な属性のリレーションシップを表す回帰式が含まれます。
詳細については、「 不連続属性のノード分布 」および「 連続属性のノード分布」を参照してください。
NODE_SUPPORT
このノードをサポートするケースの数。
MSOLAP_MODEL_COLUMN
予測可能な属性を格納する列を示します。
MSOLAP_NODE_SCORE
ノードに関連付けられたスコアが表示されます。 詳細については、「 ノード スコア」を参照してください。
MSOLAP_NODE_SHORT_CAPTION
表示目的で使用されるラベル。
注釈
デシジョン ツリー モデルには、Naive Bayes またはニュートラル ネットワーク モデルに含まれるマージナル統計ノードのような、モデル全体の統計を格納する独立したノードはありません。 代わりに、予測可能な属性ごとに、最上位ノードを [(すべて)] ノードとする個別のツリーが作成されます。 各ツリーは互いに独立しています。 モデルに含まれる予測可能な属性が 1 つしかない場合、ツリーは 1 つだけ、つまり [(すべて)] ノードだけになります。
出力属性を表す各ツリーは、分割を表す内部分岐 (NODE_TYPE = 3) にさらに分割されます。 それらのツリーのそれぞれに、対象の属性の分布に関する統計が含まれます。 さらに、各リーフ ノード (NODE_TYPE = 4) に、属性と値の各ペアをサポートするケース数と共に、入力属性とその値を表す統計が含まれます。 したがって、デシジョン ツリーの分岐では、ソース データに対してクエリを実行しなくても、確率やデータの分布を簡単に確認できます。 ツリーの各レベルは、必ずその直接の子ノードの合計を表します。
これらの統計情報を取得する方法の例については、「 デシジョン ツリー モデルのクエリ例」を参照してください。
デシジョン ツリー構造の例
デシジョン ツリーの動作を理解するために、AdventureWorks の自転車購入者のシナリオの例を考えてみます。 予測可能な属性が顧客の購入である場合、デシジョン ツリー アルゴリズムでは、指定されたすべての入力の中から、自転車を購入する可能性が高い顧客と自転車を購入する可能性が低い顧客を最も効果的に検出できる 1 列のデータを見つけようとします。 たとえば、モデルから、購入行動の最善の指標が Age であるとわかったとします。 具体的には、31 歳以上の顧客が自転車を購入する可能性が非常に高く、それ以外のすべての顧客は購入する可能性が低いなどです。 この場合、モデルでは Age 属性について 分割 が作成されます。 つまり、ツリーが 2 つの分岐に分割され、1 つには 30 歳以上の顧客が含まれ、もう 1 つには 30 歳未満の顧客が含まれます。 新しい分岐は、モデル構造で 2 つの新しい内部ツリー (NODE_TYPE = 3) として表されます。
各分岐について、モデルでは引き続き顧客の区別に使用するその他の属性を探します。 顧客のサブグループの作成を継続するための十分な根拠となるデータがなくなると、モデルでツリーの作成が中止されます。 また、分割が適切であってもノード内のケース数が少なすぎて継続できない場合や、NULL 値または不足値があった場合にも、ツリーの作成が中止されます。 ツリーの拡大を早い段階で中止することによって、モデルで 1 つの特定のデータセットに対して過度のトレーニングが行われることを防止します。
各内部ツリー ノードには、現在の分類結果から得られる結果の内訳を示すリーフ ノードが含まれます。 たとえば、Age >= 30 と Gender = Male を表す内部ノードがあるとします。 このグループのノードには、このカテゴリに含まれる購入した顧客または購入しなかった顧客の数が示されます。 たとえば、分類には次のようなツリーの分割が含まれます。
内部ツリー | Split |
---|---|
Age >= 30 | 年齢 >= 30、性別 = 男性 |
年齢 >= 30、性別 = 女性 | |
30 歳< | 30 歳 < と性別 = 男性 |
30 歳 < と性別 = 女性 |
デシジョン ツリー モデルを使用して予測を行う場合、モデルでは、引数として指定された属性を受け取り、ツリーの下位方向にその属性のパスをたどります。 一般に、すべての予測はリーフまで進み、内部ノードは分類のためだけに使用されます。
リーフ ノードの NODE_TYPE は常に 4 (分布) であり、このノードには、指定した属性から得られるそれぞれの結果 (購入するかしないか) の確率を示すヒストグラムが含まれます。 たとえば、60 歳以上の男性である新しい顧客の予測を求める場合、モデルは対応するノード (Age > 30 と Gender = Male) を検索し、指定した結果の確率を返します。 これらの確率は、ノードの NODE_DISTRIBUTION テーブルに格納されます。
予測可能な属性が連続する数値である場合、アルゴリズムでは、予測可能な属性と入力のリレーションシップをモデル化する回帰式の作成が試行されます。
ノードのキャプションとノードの記述
デシジョン ツリー モデルでは、ノードのキャプションとノードの記述に同様の情報が含まれます。 ただし、ノードの記述の方が含まれる情報が多く、その情報はリーフ ノードに近いほど詳細になります。 ノードのキャプションとノードの記述の文字列は、どちらもローカライズされます。
列 | 説明 |
---|---|
親ノードを基準に特定のノードを区別する属性が表示されます。 ノードのキャプションでは、分割条件の基になる設定のサブセグメントが定義されます。 たとえば、分割が [Age] にあり、3 方向の分割であった場合、3 つの子ノードのノード キャプションは "[Age] < 40"、"40 <= [Age] < 50"、"[Age] = 50" >になります。 | |
NODE_DESCRIPTION | ノードを他のノードと区別するすべての属性を示す、モデルの親ノードから始まる一覧が含まれます。 たとえば、Product name = Apple かつ Color = Red のようになります。 |
ノード ルールとマージナル ルール
NODE_RULE 列と MARGINAL_RULE 列には、NODE_CAPTION 列および NODE_DESCRIPTION 列と同じ情報が格納されますが、これらの列では情報が XML フラグメントとして表現されます。 ノード ルールは XML バージョンの完全なパスであるのに対し、マージナル ルールは最新の分割を示します。
XML フラグメントで表現される属性は、単純な属性または複雑な属性のいずれかになります。 単純な属性には、モデル列の名前、および属性の値が含まれます。 モデル列に入れ子になったテーブルが含まれる場合は、入れ子になったテーブルの属性は、テーブル名、キー値、および属性を連結して表現されます。
注意
SQL Server SQL Server Analysis Servicesでは、PMML 標準のバージョン 2.0 と、入れ子になったテーブルの使用をサポートする拡張機能がサポートされています。 入れ子になったテーブルがデータに含まれている場合に PMML バージョンのモデルを生成すると、述語を含むモデル内のすべての要素に拡張機能であることを示すマークが付けられます。
不連続属性のノード分布
デシジョン ツリー モデルの NODE_DISTRIBUTION テーブルには、役立つ統計が含まれています。 ただし、統計の種類は、ツリーで連続属性と不連続属性のどちらを予測するかによって異なります。 ここでは、不連続属性のノード分布統計の意味について説明します。
属性名と属性値
分類ツリーでは、属性名には必ず予測可能列の名前が含まれます。 この値から、ツリーで予測する対象がわかります。 1 つのツリーは必ず 1 つの予測可能な属性を表すため、この値はツリー全体で繰り返し使用されます。
不連続のデータ型の場合、属性値のフィールドに、予測可能列が取り得る値の一覧と Missing 値が表示されます。
サポート
各ノードのサポート値は、そのノードに含まれるケースの数を示します。 "(すべて)" レベルでは、モデルのトレーニングに使用されたすべてのケースの数が示されます。 ツリー内の各分割では、サポート値は、ツリーのそのノードにグループ化されたケースの数になります。 リーフ ノードのケースの合計は、必ずツリーの親ノードのケース数と等しくなります。
連続属性を表すノードの場合、データに NULL が存在すると、やや直観に反する結果になることがあります。 たとえば、ケース数を m とすると、平均値の計算式は sum(すべてのケース)/n (n は m より小さい数値) になり、m-n は不足値を含むケースの数を示します。 また、サポートは n で表されます。
確率
各ノードに関連付けられた確率は、データセット全体のすべてのケースがこの特定のノードで終了する確率を示します。 確率スコアは、ツリー全体および直接の分割の両方について計算されます。
たとえば次の表は、ケース数が 100 の非常に単純なモデルを示しています。
内部ツリー | ケース | リーフ ノード | ケース | 親ノードに対する確率 | 最上位ノードに対する確率 |
---|---|---|---|---|---|
Age >= 30 | 60 | 年齢 >= 30、性別 = 男性 | 50 | 50/60 = .83 | 50/100 = .5 |
年齢 >= 30、性別 = 女性 | 10 | 10/60 = .16 | 10/100 = .10 | ||
30 歳< | 40 | 30 歳 < と性別 = 男性 | 30 | 30/40 = .75 | 30/100 = .30 |
30 歳 < と性別 = 女性 | 10 | 10/40 = .25 | 10/100 = .10 |
すべてのモデルで、考えられる不足値を計算に含めるためにわずかな調整が行われます。 連続属性の場合、値の各値または範囲は状態 (たとえば、Age 30、Age <= 30、Age >30) として表され、確率は次のように計算されます。状態は存在します (値 = 1)、他の状態が存在する (値 = 0)、状態は Missing です。 欠損値を表すために確率を調整する方法の詳細については、「 欠損値 (Analysis Services - データ マイニング)」を参照してください。
各ノードの確率は、次のように分布からほぼ直接的に計算されます。
確率 = (状態のサポート + 前の状態のサポート) / (ノード サポートと前のノード サポートの合計)
SQL Server Analysis Servicesは、各ノードの確率を使用して、格納された確率を以前の確率と比較して、親ノードから子ノードへのパスが強い推論を示しているかどうかを判断します。
予測を行うときは、分布の確率とノードの確率のバランスをとって、確率を滑らかに調整する必要があります。 たとえば、ツリー内の分割で 9000/1000 の比率でケースが分割されている場合、ツリーは非常に不均衡な状態です。 そのため、小さい分岐から得られる予測を、ケースが多い分岐から得られる予測と同じ重みで考えることはできません。
分散
分散は、予想される分布でサンプル内の値がどのぐらい分散しているかを示す尺度です。 不連続値の場合は、定義上、分散は 0 になります。
連続値の分散の計算方法については、「 線形回帰モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
値の型
値の型の列には、NODE_DISTRIBUTION テーブル内の他の列で指定された数値の意味に関する情報が示されます。 クエリで値の型を使用すると、入れ子になったテーブルから特定の行を取得できます。 例については、「 デシジョン ツリー モデルのクエリ例」を参照してください。
MiningValueType 列挙に含まれる型のうち、分類ツリーでは以下の型が使用されます。
値の型 | 説明 |
---|---|
1 (Missing: 不足) | 不足値に関連する数、確率、またはその他の統計を示します。 |
4 (Discrete: 不連続) | 不連続値または分離された値に関連する数、確率、またはその他の統計を示します。 |
モデルに連続する予測可能な属性が含まれる場合は、ツリーに回帰式特有の値の型も含まれることがあります。 回帰ツリーで使用される値型の一覧については、「 線形回帰モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
ノード スコア
ノード スコアは、ツリーのレベルごとに少しずつ異なる情報を表します。 一般に、スコアは、条件での分割によって行われた分割がどの程度適切かを示す数値です。 値は倍精度浮動小数点数で表され、値が大きいほど適切であることを示します。
定義上、モデル ノードおよびすべてのリーフ ノードのノード スコアは 0 です。
各ツリーの最上位を表す [(すべて)] ノードの場合、MSOLAP_NODE_SCORE 列には、ツリー全体で最も高い分割スコアが含まれます。
ツリーのその他のすべてのノード (リーフ ノードを除く) では、各ノードのスコアは、現在のノードの最も高い分割スコアから親ノードの分割スコアを引いた値になります。 通常、親ノードの分割スコアは、必ずどの子ノードの分割スコアよりも高くなります。 これは、デシジョン ツリー モデルを重要な属性から分割するのが理想的であるためです。
注意
予測可能な属性として連続属性と不連続属性の両方を含むデシジョン ツリー モデルを作成する場合、それぞれのツリーの種類を表す [(すべて)] ノードでまったく異なるスコアが表示されます。 各モデルは独立していると見なされ、回帰のスコアリングと分類のスコアリングでそれぞれまったく異なる方法が使用されます。 ノード スコアの値を比較することはできません。
デシジョン ツリー モデル内の回帰ノード
デシジョン ツリー モデルに連続する数値データを持つ予測可能な属性が含まれる場合、Microsoft デシジョン ツリー アルゴリズムでは、予測された状態と入力変数のリレーションシップが線形になるデータ内の領域を特定するためにシークが行われます。 アルゴリズムで線形のリレーションシップを特定できると、線形回帰を表す特殊なツリー (NODE_TYPE = 25) が作成されます。 これらの回帰ツリーのノードは、不連続値を表すノードよりも複雑になります。
一般に、回帰では、連続する従属側 (予測可能な変数) の変化が入力の変化の関数としてマップされます。 従属変数に連続する入力があり、入力と予測値のリレーションシップが十分に安定していて線グラフで処理できる場合、回帰のノードに式が含まれます。
一方、入力と予測値のリレーションシップが 非線形の場合は、代わりに、標準のデシジョン ツリーと同様に分割が作成されます。 たとえば、A という予測可能な属性と B および C という入力があり、C の値の型が連続値であるとします。 A と C のリレーションシップがデータの一部では非常に安定し、別の部分では安定していない場合、アルゴリズムでは、それらのデータの領域を別々に表すために分割が作成されます。
分割条件 | ノードの結果 |
---|---|
n < 5 の場合 | リレーションシップを式 1 で表現可能 |
n が 5 ~ 10 の場合 | 式なし |
n > 10 の場合 | リレーションシップを式 2 で表現可能 |
回帰ノードの詳細については、「 線形回帰モデルのマイニング モデル コンテンツ (Analysis Services - データ マイニング)」を参照してください。
参照
Mining Model Content (Analysis Services - Data Mining)
データ マイニング モデル ビューアー
データ マイニング クエリ
Microsoft デシジョン ツリー アルゴリズム