トップページ | ひとつ上のページ | 目次ページ | このサイトについて | ENGLISH

ベイジアンネットワークによる構造探索のノウハウ

ベイジアンネットワークによるデータの構造解析 を、実務のデータ分析で使う時のノウハウについて、筆者の気が付いたものをまとめました。

分析の方法

サンプル数は多過ぎないようにする

サンプル数は、多くても10000個くらいが良いです。 多ければ多いほど、本来あるはずのない辺が、作られやすくなります。

量的変数は、質的変数に変換

構造解析のソフトは、量的変数が使えるものもありますが、量的変数は質的変数に変換してから実行した方が良いです。

質的変数にした方が、間違いが起きにくい分析になります。 量的変数のままの時の、間違いの例は、 ベイジアンネットワークによる構造探索のアルゴリズムの違い のページにあります。

グラフの見方

分析の結果、下記のグラフができたとします。 このグラフの意味は、「AとBを使うと、ABができる」ということになります。 例えば、
A + B = AB

A * B = AB
の式が背後にあると、このグラフになります。 この式を表すのに、矢印が役に立っています。
BN

または、分析の結果、下記のグラフができたとします。 このグラフの意味は、「AとAC、ACとACD、AとACDは似た構造を持っている」ということになります。
BN

因果関係と、グラフの構造の関係

上の例では、矢印だけ見ると、「AとBが原因で、ABが結果」に見えます。 AとBからABを作っているので、そう考えた場合は、矢印が因果関係の向きを表しています。

ただ、「ABの値で、AやBの値が決まる」という現象の場合は、矢印の向きと因果関係の向きは逆です。

分析の豆知識

出すことができない構造

データの背後に
A + B =AB
というものがあったとしても、「B」の変数がなく、「A」と「AB」しかない場合、ベイジアンネットワークによる構造解析では、矢印が一方向になりません。
BN
が正解になります。 アルゴリズムによっては、矢印が一方向の結果が出ることもありますが、その場合は、変数の並び方が逆になると、矢の向きが逆になることもあります。

ちなみに、 量的変数に限定ですが、 LiNGAM や、 正規化による有向相関分析 だと、「A」と「AB」だけの時に、
BN
という結果を導けることがあります。

同じ値の変数が入っている時

下の例は
AとBは独立、
AとA2とA3は、同じ値の変数、
ABという変数は、A + B で計算されてt作られている。
という量的変数のデータを、質的変数にしてから、構造を調べた結果です。
BN
BとABは結び付いているのですが、A、A2、A3はABと結び付いていません。

ここでA2とA3を除くと、結果は下になり、元のデータの背景が見える結果になります。
BN
重回帰分析 などで、 変数の選択 が必要なことはよく言われていますが、 ベイジアンネットワークで構造を調べる時にも、まったく同じであったり、相関が非常に高い変数のグループがある場合は、 前処理として、そのグループの中のひとつに絞った方が良いようです。

似た値の変数が入っている時

上の例に加えて ACという変数が混ざっていたとします。 Cという変数があって、AC = A + Cという式で作られていますが、Cがデータに含まれていない場合です。

BN

ここでBを除くと、A、AB、ACの3者の間には、一方向で矢印が付かないことがわかります。
BN

また、BやACを除いた時も結果が変わります。
BN BN

4種類のグラフを作りましたが、AとACについては、ABやBとの関係について、同じになっています。 ただし、AとACがまったく同じだと、ひとつ前のノウハウから、ABとは結び付かないはずですので、AとACは似ている部分があるけれども同じではないことまではわかります。

実務の中で、こうした分析をする時は、ベイジアンネットワークによる結果と、実際に起きていることを比べながら、本当の因果関係について、 考察を進めて結論を出すのがベストのようです。 ベイジアンネットワークだけで結論を出せないもどかしさはありますが。ベイジアンネットワークは考察のヒントとして使えます。

因果関係のモデルとして

構造解析のソフトでは、 「この変数とこの変数は、因果関係がないから結び付かない」をブラックリストとして、 「この変数とこの変数は、因果関係があるから結び付く」をホワイトリストして用意して、 その情報も参考にしながら、情報のない部分をソフトが推定する機能があります。

ソフトウェア

R

Rによるベイジアンネットワーク のページがあります。

R-EDA1

R-EDA1 では、RのbnlearnというライブラリをGUIで使えるようになっています。
R-EDA1

上記の例は、 Hill_Climbingで作っています。アルゴリズムが変わると、矢印の向きが逆になることもあります。

「Change integer variable into」を、 「numeric」にすると、「integer(正の整数)」になっている変数は、量的変数として扱います。 「categorical」にすると、質的変数として扱います。 数字のデータでも、数字の内容が使われないです。 この機能は、integerになっている変数の数字は、その数字が表している数字の大きさに特に意味がない場合がある場合や、 integerになっている変数は、原因側の変数として扱った方が良いことがあるために付けています。 ベイジアンネットワークでは、質的変数と量的変数があった場合には、質的変数から量的変数側に矢印を引くようになっています。

「Number of ranges」が、 例えば、「5」にすると、それぞれの量的変数について、最大値と最小値の間を5個の範囲に均等に分割して、 それぞれの範囲の範囲の名前をカテゴリとする質的変数に変換されます。 1以下の場合は、変換をしません。

Weka

Wekaでは、
起動直後のページ → エクスプローラー → 前処理でデータの読み込み、
→ Classifyのタブ →  Chooseボタンを押して、小さな選択画面を出す
→ classifiers(分類) → bayes → BayesNetを選択後、Closeで選択画面を閉じる
→ Chooseボタンの右側に「BayesNet」で始まる文字列が出ているので、この文字列の辺りをダブルクリックして、選択画面を出す。
→ serchAlgorithmの右のChooseを押してHillClimberを選択
→  serchAlgorithmのChooseボタンの右側に「HillClimber」で始まる文字列が出ているので、この文字列の辺りをダブルクリックして、選択画面を出す。
→ maxNrOfParentsを変える。(1だと、ナイーブベイズモデルです。 ネットワークっぽくするには、2以上が良いです。
→ 「OK」で選択画面をそれぞれ閉じる。
→ Startで計算
→ Startボタンの下のResult listの中に計算の名前が出ているので、その文字列を右クリック
→ Visualize Graph
と進むと、グラフが描けます。

詳しい内容は、シナジーマーケティング株式会社様のブログにもあります。 (ダブルクリックで小窓を出すところが、このブログではわからなかったので、上記で書きました。) http://lab.synergy-marketing.co.jp/blog/statistic/weka-bayesnet2

Wekaの場合は、質的変数が最低ひとつ必要です。 上記のHillClimberの場合は、一番元の親ノードは、解析者が指定する必要があります。また、そのノードは質的変数にしておく必要があります。




順路 次は 条件付き独立による探索

データサイエンス教室