確率で未来を予測する?初心者のためのベイジアンネットワーク入門

こんにちは。ゆうせいです。

皆さんは、朝起きて空がどんより曇っていたら、どうしますか。おそらく、今日は雨が降るかもしれないなと思って、傘を持って家を出るのではないでしょうか。

実はそのとき、皆さんの頭の中では高度な確率の計算が行われているのです。

空が曇っているという事実から、雨が降るという未来を予測する。この人間にとって当たり前の思考プロセスを、数学とコンピュータを使って再現しようとするのが、今回ご紹介するベイジアンネットワークです。

名前だけ聞くと、なんだか難しそうで身構えてしまいますよね。でも、安心してください。その基本となっているのは、高校数学で習った確率のルールだけなんです。今日は、そんな確率の世界を旅しながら、ベイジアンネットワークの仕組みについて一緒に学んでいきましょう。

すべては2つの定理から始まる

ベイジアンネットワークを理解するには、まず土台となる確率のルールをおさらいしておく必要があります。それが加法定理と乗法定理です。

数学の授業を思い出して頭が痛くなった方もいるかもしれませんが、大丈夫です。記号を使わずにイメージで掴んでいきましょう。

足し算のルール、加法定理

まずは加法定理です。これは、AまたはBが起きる確率はどれくらい?というときに使う足し算のルールです。

例えば、トランプを1枚引くときを想像してください。ハートが出るか、またはエースが出る確率はどれくらいでしょうか。

単純にハートの枚数とエースの枚数を足せばよさそうですが、ここで注意が必要です。ハートのエースは両方に含まれていますよね。そのまま足すと2回カウントしてしまいます。だから、最後に重なっている部分を引く必要があります。

これを数式っぽく書くとこうなります。

AまたはBの確率 = Aの確率 + Bの確率 - AかつBの確率

この重なりを引くという感覚、なんとなく思い出してきましたか。

掛け算のルール、乗法定理

次に、今回の主役とも言える乗法定理です。これは、AかつBが起きる確率はどれくらい?というときに使う掛け算のルールです。

例えば、袋の中に赤玉と白玉が入っていて、2回続けて引くときを考えてみましょう。1回目に赤が出て、かつ、2回目も赤が出る確率です。

これは、1回目に赤が出る確率と、1回目に赤が出たという条件のもとで2回目にも赤が出る確率を掛け合わせることで求められます。

AかつBの確率 = Aの確率 \times Aが起きたときのBの確率

ここで重要なのが、後半のAが起きたときのという部分です。これを専門用語で条件付き確率と呼びます。前の出来事が、後の出来事の確率に影響を与えているんですね。

条件付き確率がカギを握る

さて、ここからが本番です。ベイジアンネットワークを理解する上で一番大切なのが、先ほど出てきた条件付き確率です。

これは、ある情報が分かったことで、確率が変化することを意味します。

冒頭の天気の例に戻りましょう。

特に何の情報もないとき、今日雨が降る確率は過去の統計から 30\% くらいだとしましょう。でも、今、窓の外を見たら空が真っ暗でした。この空が暗いという情報を手に入れた瞬間、雨が降る確率は 30\% から 80\% くらいに跳ね上がりますよね。

これが条件付き確率の考え方です。新しい情報(証拠)が得られるたびに、確率(確信度)が更新されていくのです。

ベイジアンネットワークって何?

では、いよいよベイジアンネットワークの登場です。

世の中の出来事は、単純なAとBの関係だけではありません。

天気が悪ければ、電車が遅れるかもしれない。

電車が遅れれば、会議に遅刻するかもしれない。

会議に遅刻すれば、上司に怒られるかもしれない。

このように、たくさんの出来事がドミノ倒しのように連鎖し、複雑に絡み合っています。この因果関係のつながりを、ネットワークの図として表現したのがベイジアンネットワークです。

ベイズの定理とベイジアンネットワーク

ベイジアンネットワークという名前の由来は「ベイズの定理」です。

この記事で「結果から原因を確率的に推測できる」とお話ししましたよね。例えば「熱がある(結果)」という情報から「インフルエンザ(原因)」である確率を計算する場面です。この「結果から原因へ」という逆向きの確率計算を行うための公式が、まさにベイズの定理なのです。

つまり、ベイジアンネットワークとは、たくさんの出来事を線でつなぎ、そのネットワーク全体でベイズの定理を何度も使って計算する仕組みのこと。「ベイズの定理の集合体」とイメージすると分かりやすいですよ!

専門用語で見てみよう

ここで少しだけ専門用語を使わせてください。ベイジアンネットワークは、主にノードとエッジという要素で構成されています。

  • ノードこれは結び目という意味で、事象そのものを表します。先ほどの例で言えば、天気、電車の遅延、上司の怒りといったひとつひとつの出来事がノードになります。図で描くときは、丸や四角で囲って表します。
  • エッジこれは結び目をつなぐ線、つまり矢印のことです。原因から結果に向かって矢印を引きます。天気が電車の遅延の原因になるなら、天気から電車へ矢印が伸びます。

そして、それぞれのノードには、条件付き確率表(CPT)という表が備わっています。これは、親(原因)の状態によって、子(結果)がどうなるかの確率をまとめた表です。

つまり、ベイジアンネットワークとは、たくさんのノードをエッジでつなぎ、それぞれの関係性を乗法定理を使って計算できるようにした確率の地図のようなものなんです。

どんなときに役立つの?

この確率の地図には、素晴らしいメリットがあります。

メリット:理由がわからなくても推測できる

最大のメリットは、一部の情報が欠けていても、確率的に一番ありそうな答えを導き出せることです。

例えば、お医者さんの診断を考えてみてください。熱がある、咳が出るという症状(結果)から、インフルエンザかもしれないという病名(原因)を確率的に推測できます。これを確率的推論と呼びます。

確定的な証拠がなくても、状況証拠を積み上げて犯人を絞り込む名探偵のようなことができるのです。

また、図として可視化されるので、人間にとって直感的に理解しやすいという点も大きな魅力ですね。どこが原因でトラブルが起きているのか、一目で追いかけることができます。

デメリット:計算が大変すぎる

一方で、デメリットもあります。それは、ノードの数が増えると計算量が爆発的に増えてしまうことです。

関連する要素が10個、20個と増えていくと、その組み合わせは天文学的な数字になります。これをまともに計算しようとすると、スーパーコンピュータでも悲鳴を上げてしまいます。これを組み合わせ爆発なんて呼んだりします。

また、そもそも最初の地図(ネットワーク構造)を作るのが大変だという問題もあります。どれが原因でどれが結果か、人間が正しく設定してあげないといけない場合も多いからです。

まとめと次のステップ

いかがでしたか。ベイジアンネットワークは、加法定理と乗法定理というシンプルな数学の基礎から出発して、複雑な現実世界を確率で捉えるための強力なツールだということがお分かりいただけたでしょうか。

不確実な未来を予測するために、私たちは無意識のうちにこのネットワークを頭の中に描いているのかもしれませんね。

もし、この記事を読んで少しでも面白いなと感じたら、次は実際に手を動かしてみることをお勧めします。

Pythonというプログラミング言語には、この計算を簡単に行えるライブラリがたくさんあります。まずは小さなネットワーク、例えば今日のおやつは何になるかといった身近なテーマで、確率モデルを作ってみてはいかがでしょうか。

数学は、ただの記号の羅列ではありません。世界をクリアに見るためのレンズです。ぜひ、そのレンズを磨いてみてくださいね。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。