📧 ナイーブベイズを理解しよう

初心者と上級者の会話形式でわかりやすく解説

初心者
初心者

ナイーブベイズってよく「スパムフィルタ」の例で出てくるけど、結局何をやってるの?

上級者
上級者

ひとことで言うと、「このデータ、どっちのグループっぽい?」を確率で計算する手法だよ。

スパムフィルタの場合、メールに含まれる単語を見て「このメールがスパムである確率」と「スパムでない確率」を計算して、高い方に分類するんだ。

📮 スパムフィルタのイメージ

過去のメールから「どの単語がスパムに多いか」を学習しておく

初心者
初心者

確率で計算するって、具体的にどうやるの?

上級者
上級者

核になるのがベイズの定理だよ。「結果から原因を推測する」ための公式なんだ。流れを見てみよう:

ナイーブベイズの計算フロー

1
新しいメールが届く
件名:「無料会議ツールを試そう」
→ 含まれる単語:無料 会議
2
事前確率を確認する
過去のデータから「そもそもスパムはどれくらいの割合か」を見る
P(スパム) = 40%  P(正常) = 60%
3
各単語の出現確率を調べる
「スパムの中で"無料"が出る確率」「正常の中で"無料"が出る確率」をそれぞれ計算
4
⭐ ベイズの定理で確率を計算
事前確率 × 各単語の出現確率を掛け合わせて、スパム・正常それぞれのスコアを求める
P(スパム|単語たち) ∝ P(スパム) × P(無料|スパム) × P(会議|スパム)
P(正常|単語たち) ∝ P(正常) × P(無料|正常) × P(会議|正常)
5
確率が高い方に分類!
スパムのスコア vs 正常のスコアを比較して、高い方を採用する
初心者
初心者

なるほど…具体的な数字で見てみたい!

上級者
上級者

OK!まず過去のメール100通から、各単語がスパム・正常それぞれでどれくらい出てくるか調べた結果がこれだよ:

📊 過去の学習データ(メール100通)

単語 スパム中の出現率 正常中の出現率
無料 80% 5%
会議 10% 60%
当選 70% 1%
資料 5% 50%
今すぐ 60% 3%

「無料」「当選」「今すぐ」はスパムに多く、「会議」「資料」は正常メールに多い

🔢 「無料で会議ツールを試そう」を判定してみる

事前確率

P(スパム) = 0.4 (100通中40通がスパムだった)
P(正常) = 0.6 (100通中60通が正常だった)

スパムのスコア計算

スパム: P(スパム) × P(無料|スパム) × P(会議|スパム)
= 0.4 × 0.8 × 0.1
= 0.032

正常のスコア計算

正常: P(正常) × P(無料|正常) × P(会議|正常)
= 0.6 × 0.05 × 0.6
= 0.018

⚖️ 判定結果

スパム:0.032(64%)
正常:0.018(36%)

→ スパムの確率が高い → 🚫 スパムに分類!

「無料」のインパクトが「会議」を上回った

初心者
初心者

計算のイメージはつかめた!でもなんで「ナイーブ(素朴)」って名前なの?

上級者
上級者

ここがこの手法の最大の特徴で、「各単語(特徴量)は互いに独立」という素朴な仮定を置いているからなんだ。

さっきの計算で、各単語の確率をそのまま掛け算したよね?これは「"無料"と"会議"は関係がない」と仮定しているから成り立つ計算なんだ。

「ナイーブ(素朴)」な仮定とは?

無料 会議 資料
ナイーブベイズの仮定
各単語は独立!
関連性を無視して
単純に掛け算できる
無料 会議 資料
現実の世界
本当は「会議」と「資料」は
一緒に出やすいなど
関連性がある

現実には単語同士に関連性があるが、それを無視する(=ナイーブ)ことで計算がシンプルになり
それでも実用的にはかなり高い精度が出るのがこの手法のすごいところ

初心者
初心者

仮定が雑なのにうまくいくんだ…!メリットとデメリットをまとめて教えて!

上級者
上級者

まとめるとこんな感じだよ:

ナイーブベイズのメリット・デメリット

✅ メリット

  • 計算が非常に高速で軽い
  • 少ないデータでもそこそこの精度が出る
  • テキスト分類(スパム、感情分析など)に特に強い
  • 特徴量が多くても動作する

❌ デメリット

  • 特徴量間の相関を無視する(独立仮定)
  • 確率の絶対値が不正確になりやすい
  • 画像や数値データなど、テキスト以外ではあまり強くない
  • 学習データにない特徴が来ると確率が0になる(→ラプラス平滑化で対処)
上級者
上級者

G検定で押さえておくポイントをまとめるね!

💡 G検定で押さえるポイント