包除原理

3つ以上の「または」を、重なりを正しく処理して数える

難易度 Lv 3 / 10想定時間:約15

できるようになること


全体で何人にリーチできたのか?

あなたはWebマーケティングの担当者で、新商品のキャンペーンを3つの広告チャネルで展開しました。

「合計7,500人にリーチできた!」と報告したくなりますが、本当にそうでしょうか?

実際には、同じユーザーが複数のチャネルで広告を目にしていることがあります。重複を無視して足すだけでは、リーチ数を水増しすることになってしまいます。

この「重複のある数え上げ」を正確に処理する方法が、包除原理(inclusion-exclusion principle)です。

加法定理の振り返り

「加法定理」の単元で、2つの事象の「または」を次のように計算しました。

P(AB)=P(A)+P(B)P(AB)P(A \cup B) = P(A) + P(B) - P(A \cap B)

P(A)+P(B)P(A) + P(B) とそのまま足すと、共通部分 ABA \cap B が二重に数えられてしまいます。だから P(AB)P(A \cap B) を1回引いて修正する、という考え方でした。

では、事象が3つになるとどうなるでしょうか?

3事象の包除原理

3つの事象 AABBCC の「いずれかが起きる確率」は、次の式で計算します。

P(ABC)=P(A)+P(B)+P(C)P(AB)P(AC)P(BC)+P(ABC)P(A \cup B \cup C) = P(A) + P(B) + P(C) - P(A \cap B) - P(A \cap C) - P(B \cap C) + P(A \cap B \cap C)

なぜ「2つずつの重なりを引く」だけでなく、最後に P(ABC)P(A \cap B \cap C)足し戻すのでしょうか?3つの円が重なるベン図をイメージしながら、ステップごとに確認してみましょう。

ステップ1:全部足す

P(A)+P(B)+P(C)P(A) + P(B) + P(C) と足すと、ちょうど2つの事象だけに属する部分2回3つすべてに属する部分3回数えられてしまいます。

P(A)+P(B)+P(C) で各領域が何回カウントされるか

ステップ2:2つずつの重なりを引く

P(AB)+P(AC)+P(BC)P(A \cap B) + P(A \cap C) + P(B \cap C) を引きます。ちょうど2つだけに属する部分は、この3つの項のうち1つだけに含まれるため、二重計上が解消されて正しく1回になります。

しかし、3つすべてが重なる部分は ABA \cap BACA \cap CBCB \cap C3か所すべてに含まれているため、ステップ1で3回足されたものがここで3回引かれ、差し引き0回になってしまいます。

ステップ3:3つの重なりを足し戻す

3つすべてが重なる部分が消えてしまったので、P(ABC)P(A \cap B \cap C)1回足し戻して修正します。

この「足す → 引く → 足し戻す」のパターンが、包除原理の核心です。

Web広告の例を計算する

ここまでは確率 PP の式として包除原理を説明しましたが、「足して引いて足し戻す」ルールは人数(集合の要素数)を数えるときにもまったく同じ形で成り立ちます。

先ほどのキャンペーンで、チャネル間の重複について以下のデータが得られたとします。対象ユーザーは全体で10,000人です。

項目人数
SNS広告(AA3,000人
検索広告(BB2,500人
動画広告(CC2,000人
SNS ∩ 検索(ABA \cap B800人
SNS ∩ 動画(ACA \cap C500人
検索 ∩ 動画(BCB \cap C400人
3チャネルすべて(ABCA \cap B \cap C100人

包除原理を適用すると、少なくとも1つのチャネルに接触した人数は、

3,000+2,500+2,000800500400+1003{,}000 + 2{,}500 + 2{,}000 - 800 - 500 - 400 + 100

=7,5001,700+100=5,900= 7{,}500 - 1{,}700 + 100 = 5{,}900

となります。最初の「7,500人」は重複込みの数字であり、重なりを正しく処理すると5,900人が実際のリーチ数です。

確率で表すと、ランダムに選んだ1人のユーザーが少なくとも1つのチャネルに接触している確率は、

P(ABC)=5,90010,000=0.59P(A \cup B \cup C) = \dfrac{5{,}900}{10{,}000} = 0.59

です。つまり、4,100人(41%)はどの広告にも接触していなかったことが分かります。

余事象アプローチとの使い分け

「少なくとも1つが起きる確率」を求めたいとき、包除原理のほかに余事象を使う方法があります。

P(少なくとも1つ)=1P(どれも起きない)P(\text{少なくとも1つ}) = 1 - P(\text{どれも起きない})

先ほどのWeb広告の例では、各チャネルの重複データがすべて揃っていたので、包除原理で直接計算できました。一方、重複が分からなくても「どれにも接触しなかった人数」が分かっていれば、余事象の方がずっと簡単です。

余事象が特に有効な場面

3つのサイコロを同時に振って、少なくとも1つが6になる確率を求めてみましょう。1個目のサイコロが6になる事象を AA、2個目を BB、3個目を CC とします。

包除原理で計算してみます。サイコロの出目は互いに影響しないので、AABBCC は独立です(詳しくは「事象の独立」の単元を参照)。独立な事象では P(AB)=P(A)×P(B)=16×16=136P(A \cap B) = P(A) \times P(B) = \dfrac{1}{6} \times \dfrac{1}{6} = \dfrac{1}{36} のように掛け算で求められます。単独の事象は3つ、2つの重なりは3通り(ABA \cap BACA \cap CBCB \cap C)あるので、

P(ABC)=3×163×136+1216=10818+1216=91216P(A \cup B \cup C) = 3 \times \dfrac{1}{6} - 3 \times \dfrac{1}{36} + \dfrac{1}{216} = \dfrac{108 - 18 + 1}{216} = \dfrac{91}{216}

余事象で計算すると、

1P(どれも6でない)=1(56)3=1125216=912161 - P(\text{どれも6でない}) = 1 - \left(\dfrac{5}{6}\right)^3 = 1 - \dfrac{125}{216} = \dfrac{91}{216}

どちらも同じ答えですが、余事象の方が計算がずっと簡潔です。

ヒント

「少なくとも1つ」という問いが出たら、まず余事象を検討しましょう。特に事象が独立で数が多いとき、「すべて起きない確率」を掛け算で求められるので、包除原理より手早く計算できます。

一般のn事象への拡張

包除原理は、任意の nn 個の事象に拡張できます。

P(i=1nAi)=iP(Ai)i<jP(AiAj)+i<j<kP(AiAjAk)+(1)n1P(A1A2An)P\left(\bigcup_{i=1}^{n} A_i\right) = \sum_{i} P(A_i) - \sum_{i < j} P(A_i \cap A_j) + \sum_{i < j < k} P(A_i \cap A_j \cap A_k) - \cdots + (-1)^{n-1} P(A_1 \cap A_2 \cap \cdots \cap A_n)

ヒント

i<j\sum_{i < j} は「異なる2つの組み合わせをすべて足す」という意味です。たとえば n=3n = 3 なら i<jP(AiAj)=P(A1A2)+P(A1A3)+P(A2A3)\sum_{i < j} P(A_i \cap A_j) = P(A_1 \cap A_2) + P(A_1 \cap A_3) + P(A_2 \cap A_3) となります。

パターンは同じです。1つずつの確率を全部足す → 2つずつの重なりを全部引く → 3つずつの重なりを全部足す → …と、足す・引くの符号が交互に入れ替わります。

事象の数が増えると、1つずつ、2つずつ、3つずつ…と考えるべき項の総数が 2n12^n - 1 個に達するため、実務で4事象以上の包除原理を直接使うことは稀です。多くの場合、余事象アプローチや独立性の仮定を活用して計算を簡略化します。

よくある誤解

「2つずつの重なりを引けば十分」

3事象の場合、P(AB)P(A \cap B)P(AC)P(A \cap C)P(BC)P(B \cap C) を引いただけでは不十分です。3つすべてが重なる部分はステップ1で3回足され、ステップ2で3回引かれて消えてしまいます。P(ABC)P(A \cap B \cap C) の足し戻しを忘れると、答えが小さくなってしまいます。「引く」だけでなく「足し戻す」がセットであることを意識してください。

「独立だから P(AB)=P(A)P(B)P(A \cap B) = P(A) \cdot P(B) で計算すればよい」

包除原理を使うには各重なりの確率が必要ですが、データが手元にないとき「独立を仮定して掛け算で求めよう」と安易に進めてしまうことがあります。しかし、実際には事象が独立でないケースは多いです(例:SNS広告を見る人は動画広告も見やすい、など)。独立の仮定が大きな誤差を生むこともあるため、重なりのデータが揃っていないときは、その仮定が妥当かを慎重に検討するか、余事象アプローチで回避できないかを考えましょう。

まとめ

包除原理は、「加法定理」を3つ以上の事象に拡張したものです。2事象では「足して引く」だけで済みましたが、3事象では「足して引いて足し戻す」必要があります。これは、2つずつの重なりを引くと3つすべてが重なる部分まで消えてしまうことを修正するためです。「少なくとも1つ」の確率を求めるときは余事象アプローチも有力な選択肢で、特に事象が独立な場合は掛け算で簡潔に計算できます。問題を見て「包除原理で直接計算するか、余事象で回り道するか」を判断できるようになることが、この単元のゴールです。