「等予算」は罠だった:私たちの順位は丸ごと逆転した
判定基準を defected <= BUDGET と書くと常に成り立つ上界になるので、「このアームはそもそも縛られていない」ことを捕まえられません。その結果、whitewash は 2.5 倍多く不正をしていたのに、私たちは「戦略が安上がり」と読みました。== に変えて検証すると、順位は逆転しました。
#私たちがしたかったこと
E19 はとても直観的な問いに答えようとしました。
攻撃者が同じ不正の予算を手にしたとき、どの時間配分が最も手間がかからないか?
そこで上限を設けました。総不正回数は 12 を超えてはならない。そのうえで五つの攻撃戦略の「効率」を比べました。
#測れたもの
| アーム | 判定基準のもとでの効率 | 縛られたか |
|---|---|---|
| whitewash(ずっと不正をし、捕まったら身元を替える) | 8.1667 | 29 / 30 |
| sybil | 6.1333 | 30 / 30 |
| pulse(5,20) | 4.30 | 1 / 30 |
| pulse(3,10) | 4.2333 | 1 / 30 |
| patient(ゆっくり不正をする) | 3.7333 | 1 / 30 |
私たちの結論:
等予算(各 12 件)+盲点 0.5 のもとでは、whitewash 8.17 がかえってパルス 4.23 に勝つ。
「だから乱暴な連続攻撃のほうが、リズムを工夫するパルスより安上がりだ。」この文は読んでみるとなかなか洞察があるように見えます。
#どこが誤っていたか
では、その予算 12 は結局誰を縛っていたのでしょうか?
| アーム | 予算 12 に達したシードの割合 |
|---|---|
| whitewash | 29 / 30 |
| sybil | 30 / 30 |
| patient | 1 / 30 |
| pulse(3,10) | 1 / 30 |
| pulse(5,20) | 0 / 30 |
しかも defected <= BUDGET は常に成り立つ上界です——不正回数が 12 を超えなければ通ります。だからこの判定基準は、設計上「縛られている」と「縛られていない」を区別することができません。
#修正後
defected == BUDGET に替え、さらに事前に各アームが本当に縛られていることを検証しました。
budget ∈ {1, 2, 3, 4, 6} を走査しました。
| 予算 | whitewash | patient | sybil | pulse(3,10) | pulse(5,20) |
|---|---|---|---|---|---|
| 1 | 1.00 / 0.533 | 1.00 / 0.867 | 1.00 / 0.533 | 1.00 / 0.900 | 1.00 / 0.900 |
| 2 | 1.00 / 0.967 | 0.87 / 1.667 | 1.00 / 0.967 | 0.90 / 1.667 | 0.90 / 1.667 |
| 3 | 1.00 / 1.667 | 0.77 / 2.300 | 1.00 / 1.600 | 0.77 / 2.300 | 0.77 / 2.300 |
| 4 | 1.00 / 2.233 | 0.60 / 2.900 | 1.00 / 2.033 | 0.63 / 2.933 | 0.63 / 2.900 |
| 6 | 1.00 / 3.667 | 0.27 / 3.600 | 1.00 / 3.233 | 0.47 / 3.833 | 実行中 |
五つのアームがすべて縛られるのは budget = 1 だけです。「80% が予算に達する」まで緩めても、追加で縛られるのは 1 と 2 だけです。
唯一縛られているその一点で(Wilcoxon exact、シードでグループ化):
| アーム | 効率 | whitewash との差 | p |
|---|---|---|---|
| pulse(3,10) | 0.900 | +0.367 | 0.0074(13/15/2) |
| pulse(5,20) | 0.900 | +0.367 | 0.0074 |
| patient | 0.867 | +0.333 | 0.0309 |
| sybil | 0.533 | 0.000 | 30 シードすべて同じ |
| whitewash | 0.533 | — | — |
順位の逆転:whitewash は最強ではなく、最弱でした。}}
#一貫性の確認
修正後に budget = 12 を再実行すると、元の E19 がビット単位で再現されました。
| 値 | |
|---|---|
| 予算に達した割合 | 29 / 30 = 0.9667 |
| 実際の不正 | 11.9667 |
| 主張された効率 | 8.1667 |
#この規則の四つの適用範囲
| 場面 | 誤った等予算 | 正しいもの |
|---|---|---|
| 攻撃戦略の比較 | defected <= 12 | == 1(すべてが縛られる唯一の点) |
| ON vs OFF5 | accepted が True にハードコードされていた | 分母をすべての問題に変える |
| 等予算アームの token 比較 | 呼び出し回数の上限だけを比べていた | 呼び出しごとの usage を合計する(上限 ≠ 実際のコスト) |
| V/GT 監査 | 非公開テストと照合する | 可視テストだけと照合する(それは出荷できる仕組みではない) |
#一般則
#次へ
- この規則の完全版:実験方法と判定値
- 私たちが測り間違えた六つのこと:measurement-traps

