[2人より1人?嘘つき2人が語る「増やしても意味がない」確率の罠]

要約

コイントスを見て20%嘘をつく友人が1人いると信頼して80%の正答率。もう1人を独立に追加しても、最良戦略では正答率は依然として$80\%$のまま変わらない、という逆説的な話。

この記事を読むべき理由

センサー融合やアンサンブル学習、バイアスのある人間の報告を扱う設計では「情報を増やせば改善する」は常識だが、条件次第で期待が裏切られる。本稿は直感に反する簡潔な確率論と実践的示唆を日本のエンジニア向けに整理する。

詳細解説

設定:コインは表裏同確率、Alice と Bob は独立にそれぞれ嘘をつく確率 $p=0.2$(真実を言う確率 $q=1-p=0.8$)。Alice だけ聞いて「そのまま信じる」戦略で正答率は $q=0.8$。

Bob を追加して「観測パターンごとに最もありそうな結果を推定する(MAP)」戦略を採るとどうなるか。

観測パターンと確率(コインが表だった場合):

同様にコインが裏のときは表と裏が入れ替わる。両者が一致する場合(確率 $0.68$)は一致側が正しい可能性が高く、実際にそのときに正解となる確率は \(\frac{0.64}{0.64+0.04}=0.94.\) 一方で意見が割れた場合は完全に無情報で確率 $0.5$ に戻る。

期待正答率は \(0.68\times 0.94 + 0.32\times 0.5 \approx 0.8.\) したがって、Bob を追加してもMAP による精度は変わらない。直感的には「同意した時は強い情報だが、割れた時は無情報になり、その平均が元と等しくなる」ため。

補足:3人目を入れて多数決にすれば改善する($q=0.8$ のとき3人では約 $0.896$)――偶数人数で生じる「引き分け」が2人の場合にちょうど効いている。

実践ポイント

簡単なシミュレーション(Python):

# python
import random
def trial(n_friends=2, p_lie=0.2, trials=200_000):
    correct=0
    for _ in range(trials):
        is_head = random.random() > 0.5
        reports = []
        for _ in range(n_friends):
            lied = random.random() < p_lie
            report = (not is_head) if lied else is_head
            reports.append(report)
        # MAP: pick majority if decisive, else random
        heads = sum(reports)
        if heads > n_friends/2:
            guess = True
        elif heads < n_friends/2:
            guess = False
        else:
            guess = random.choice([True, False])
        if guess == is_head:
            correct += 1
    return correct / trials

print("1 friend:", trial(1))
print("2 friends:", trial(2))
print("3 friends:", trial(3))

引用元

📌 引用元:
Are Two Heads Better Than One?
Hacker News Score: | Comments: