# インフルエンス・ダイアグラムの構築方法

このチュートリアルは，Huginグラフィカル・ユーザー・インタフェースで小規模なインフルエンス・ダイアグラムを実装する方法を示します．これは， すでにベイジアンネットワークの構築方法からベイジアンネットワークを構築している必要があります．実装しようとしているインフルエンス・ダイアグラムは，インフルエンス・ダイアグラムのチュートリアルでモデルされたものです．これは，農園主Apple Jackが，葉が落ちている彼のリンゴの木に，処置を施すかどうかの決定をすることを支援します．このインフルエンス・ダイアグラムの質的表現を図１に示します．

図 1: Apple Jacks 農園の意思決定に使用されるインフルエンス・ダイアグラムの質的表現.

## 編集するネットワークを開く

まず，BNの構築方法のチュートリアルで構築してネットワークを，もしそれが開かれていなければ，開く必要があります．その方法は，次のとおりです:

- ”ファイル”メニューの"開く"を選択．
- ネットワークの名前("apple.net")を入力．ネットワーク・ファイル（拡張子”net”がついている）の一覧から選択して，これを行う．

図 2では，ネットワークが開かれて，Huginグラフィカル・ユーザー・インタフェースが現在，編集モードで動作しています．もじネットワーク・ウィンドウが，実行モードでネットワークを表示しているなら，ネットワークを編集するために編集モードにする必要があります．編集モードでこれえを開いた場合は，何もする必要はありません．

図 2: BNの構築方法のチュートリアルのネットワークを表示する編集モードのネットワーク・ウィンドウ．

## ノードをコピー

図１のインフルエンス・ダイアグラムでは，我々が既に持っているものととてもよく似た3つのノードがあります．この場合，Huginグラフィカル・ユーザー・インタフェースは，ノードのグループをコピーして，それらをネットワーク・パネルの他の領域に貼り付けることができます． その方法は，以下のとおりです:

- 3つのノードすべての周辺をマウス・カーソルで長方形選択（左マウス・ボタンを押し下げて長方形にドラッグ）．
- メイン・ウィンドウのメニューバーの”編集”メニューから”コピー”を選択．
- メイン・ウィンドウのメニューバーの”編集”メニューから”貼り付け”を選択．
- ノードの新しいグループを隙間のある場所に移動．

Huginグラフィカル・ユーザー・インタフェースは，新しいノードの名前とラベルを生成します．名前を保持して，ラベルをSick', Dry', Loses' に変更できます（"Sick'" は，名前で禁じられているダッシュ記号を含むので名前としては使えません．）:

- マウス・カーソルでノードを選択．
- ノードのプロパティ・ツール（ネットワーク・ウィンドウのツールバーの左から2番目）を押して "ノードのプロパティ"に入る．
- "ラベル" フィールドを変更．
- "OK" ボタンを押す．

3つのすべてのノードについて上記のステップを実行します．ネットワークは，図３のようになるはずです．

図 3: Sick', Dry', Loses'で拡張されたネットワーク

次のステップは， Sick から Sick' へ，そして Dry から Dry'へ，因果リンクを追加することです:

- リンク・ツールを押す．
- 左マウス・ボタンで（SHIFTキーを押しながら）Sick からSick' へリンクをドラッグ．
- Dry から Dry'について繰り返す．

SHIFT キーを押したままにすると，リンク・ツールを起動せずに，連続的にさらに因果リンクを作成できます．

## 効用ノードを追加

今のところ，我々が構築したネットワークは，まだベイジアンネットワークです．ここで，これをインフルエンス・ダイアグラムにする最初の変更を行います．その変更は，効用ノードの追加です．我々は追加しようとする効用ノードは，収穫から得られる効用を表現する Harv ノード（図１）です．追加の方法は，次のとおりです:

- 効用ツール （リンク・ツールの右）を押す．
- ネットワーク・パネルのどこかをクリック（Loses' ノードのそばの右下隅あたりがよいでしょう）．
- 新しい効用ノードの名前を "Harv"に変更．

収穫は，Sick' のステートに依存するので，Sick' から Harvにリンクがあります．このリンクを追加します:

- リンク・ツールを押す．
- Sick' から Harvにリンクをドラッグ．

収穫の効用は，表１のように指定されます．

Sick'="sick" | Sick'="not"
3000 | 20000
表 1: U(Harv).

以下のようにして，表１の値をHarv の効用表に入力します:

- 左マウス・ボタンでクリックして，Harvノードを選択．
- 表パネルの効用表で，表1 の値を入力．

## １つの決定ノードと複数の効用ノード

ここで，決定ノードTreat （図1）を追加します．それは，確率ノードや効用ノードを追加するのと同様な方法で行います:

- 決定ツール (効用ツールの右）を押す．
- ネットワーク・パネルのどこかをクリック（Dryノードの右側がよいでしょう）．
- 新しい決定ノードの名前とラベルを "Treat"に変更．

確率ノードにステートを追加するのと同じ方法で，決定ノードにアクションを追加します:

- 左マウス・ボタンでTreat ノードを選択．
- ステートを追加ツールを押す．
- アクションの名前を"treat" と "not"に変更．

Treat 決定ノードは，Sick' ノードに影響を持つので:

- Treat からSick' にリンクを追加．

新しい決定ノードは，木に処置を施すかどうかの決定を表現します． 農園主 (Apple Jack)が処置を施すことを選んだ場合， Cost 効用ノードでモデルされるコストがかかります． Cost ノードは，図２に示す効用表を持ちます．

Treat="treat" | Treat="not"
-8000 | 0
表 2: U(Cost).

ここで，インフルエンス・ダイアグラムに Cost 効用ノードを追加します:

- 新しい効用ノードを追加（Treat ノードの右側でよいでしょう）．
- このノードの名前とラベルを "Cost"に変更．
- Treat から Costへのリンクを追加．
- Costの効用表で表２を記入．

## CPTの記入

ノード Sick' と Dry' をコピーしたとき，それらは,Sick と DryのCPTを継承しています．しかしながら，これらのノードは，他のノードの子になるので，それらのCPTはもはや正しくありません．それらの新しいCPTは，表３および表４のように指定されました．

- Sick' のCPTとして表３を記入．
- Dry' のCPTとして表４を記入．

| Treat="treat" | Treat="not"
Sick="sick" | Sick="not" | Sick="sick" | Sick="not"
Sick'="sick" | 0.20 | 0.01 | 0.99 | 0.02
Sick'="not" | 0.80 | 0.99 | 0.01 | 0.98
表 3: P(Sick' | Sick, Treat).

| Dry="dry" | Dry="not"
Dry'="dry" | 0.60 | 0.05
Dry'="not" | 0.40 | 0.95
表 4: P(Dry' | Dry).

ここで，このインフルエンス・ダイアグラムは完了し，それは図４のようになります．この時点で，インフルエンス・ダイアグラムを保存しておくとよいでしょう．

図e 4: 完成したインフルエンス・ダイアグラム．

## インフルエンス・ダイアグラムのコンパイル

これでインフルエンス・ダイアグラムを試すことができます．まず，インフルエンス・ダイアグラムをコンパイルします:

- コンパイル・ツールを押す（ネットワーク・ウィンドウのツールバーの一番見ごのツール・ボタン）．

BNの構築方法のチュートリアルで説明されたエラーに加えて，インフルエンス・ダイアグラムの場合，コンパイラーは，すべての決定ノードで有向パスがあるかどうかを確認します． - もしなければ，エラー・メッセージを返します．インフルエンス・ダイアグラムがコンパイルされない場合，ユーザーはたぶんいくつかの小さな間違いをしています．まず，因果リンクが正しいことを確認するべきです．そして，各ノードのCPT／効用表を見直します．

## Apple Jack は何をするべきか?

インフルエンス・ダイアグラムがコンパイルできたら，まず，葉をなくしているJackの木について彼が知ることのみを想像します．そして，彼は何をするのが最も良いのか? これを知るために，次のステップに従います:

- 左のノードリスト・パネルで Loses 確率ノードと Treat 決定ノードを開く（単にそれらを選択するだけ）．
- Loses が"yes" であるエビデンスを入力（"yes" ステートをダブル・クリック）．
- インフルエンス・ダイアグラムを伝播（自動伝播に設定されている場合以外はSum伝播ツールを押す）．
- 決定ノードで"treat" と "not" の期待効用を読む．

図５のようになるはずです．

図 5: Loses="yes"のエビデンスを伝播したインフルエンス・ダイアグラム

処置を行う場合の期待効用は 10234 で，処置を行わない場合の期待効用は 11514 のはずです．これは， Apple Jack が木に処置を行わないのが最善であることを示唆しています．

上記とは異なる値が示されるとしたら，CPTを記入するときに何かミスタイプがあったものと思われます．そして，すべてのノードの CPT／効用表を確認します．

意思決定の場面では，状況についてのより多くの事実を知った場合，何をするべきかについてのユーザーの意見が変わることもあるでしょう．最近たくさん雨が降って，木が日照りに苦しんでいるはずがない，ということをJackが知っている場合，何が起きるかを見てみましょう．そして，Dry のステートが"not"に設定されます:

- Dryが"not"であるエビデンスを入力．
- インフルエンス・ダイアグラムを伝播．
- Treat 決定ノードで "treat" と"not" の期待効用を読む．

処置を施す場合の期待効用は9138.33 で，何もしない場合の期待効用は5918.33 になるはずです．この場合，明らかにJackはいくらかの処置を施すのが最善でしょう．

これらの２つのケースの間の違いの理由は，木が日照りに苦しんでいるようであり，そして，もちろん，病気の木に処置を施すコストは，元がとれないということです．

これでこのチュートリアルを終わります．独自のインフルエンス・ダイアグラムを構築するために，Hugin グラフィカル・ユーザー・インタフェースを使用できるようになったことでしょう．ただし，大規模で複雑なモデルを再生したい場合は，このチュートリアルよりも他のところを勉強しなければなりません．また，インフルエンス・ダイアグラムの意味 および，それらの活用で課せられる関連の制約についても，もっと知りたいことでしょう．

Back