私たちが測り間違えた六つのこと
フィールドの読み間違い、ネットワーク切断が評価結果として数えられたこと、極限に退化した rng シード、`defected <= BUDGET` を同一予算とみなしたこと、端点のきれいな数字、そしてデフォルトでオフになっていたルール——六つの実際の測定の落とし穴とその教訓です。
この記事では、本研究で測り間違えたことをすべてまとめます。どれも実際に起きたことで、どれも危うく偽の肯定的または否定的な結論になるところでした。
#一、フィールドを読み間違えて偽の結果を作った
E10 実モデル実験の最初の分析:
audit.passed を読む | アームの外の判定を使う | |
|---|---|---|
| off アーム | 0 / 11 | 7 / 12 |
| on アーム | 5 / 10 | 5 / 10 |
| 差 | 有意(on の圧勝) | 消える |
正しいやり方:品質判定はアームと無関係でなければなりません——アームの外の compile_check(t.check)(answer) で独立に判定します。
この件は典型的な落とし穴として examples/realmodel_suite.py のコメントに残してあります。}}
#二、ネットワーク切断が「評価合格」として数えられた
2026-06-30、集団ルーティングの再検証。最初のラウンドで a2hard は ✓ を出力しましたが、呼び出しごとの I/O 監査が次のことを捕まえました。
- 第 20–23 回の呼び出し(ちょうど good_1 に対する 4 つのピアレビュー)が
Connection refused/reset by peerにぶつかっていた。 - 応答は空文字列で、照合ルールは
\bYES\bの否定形のマッチだった——空文字列は「YES ではない」、つまり「不合格」として数えられた。 - 結果:good_1 のピア評判は誤って 0.50 まで押し下げられ、ピアの真値に対する的中率は 88% から 75% に、捕捉率は 71% に下がった。
見かけの効果は −4% でした。
#三、一つのオプションのパラメータが、すべての数字を黙って動かした
SimConfig.digest() は同時に二つのものでした。
- RNG のシード。
- すべてのフィールドのハッシュ。
そのため開発者が「オプションのパラメータを一つ足す」と、E1 から E16 のすべての数字が変わり、しかもエラーメッセージは一つも出ませんでした。
直し方:
- 後から加えたフィールドは、デフォルト値を取る場合は digest に含めない。
- 三つの config digest を固定し、15/15 個のカウントをビット単位で再現できるようにする。
#四、「予算を超えない」を「同一予算」とみなした
私たちの E19 は「どの攻撃戦略がより節約的か」を比べようとして、悪事の総回数の上限を 12 に設定しました。
| アーム | 縛られていたか | 実際の悪事の回数 |
|---|---|---|
| whitewash | 29 / 30 | 11.97 |
| sybil | 30 / 30 | 6.13 |
| pulse(5,20) | 1 / 30 | 4.30 |
| pulse(3,10) | 1 / 30 | 4.23 |
| patient | 1 / 30 | 3.73 |
直し方:defected == BUDGET に変え、どのアームも本当に縛られていることを事前に検証する。
budget = 1(五つのアームすべてが縛られる唯一の点)で再実行すると、順位は逆転しました。
| アーム | 効率 | whitewash に対して |
|---|---|---|
| pulse(3,10) | 0.900 | +0.367、p = 0.0074 |
| pulse(5,20) | 0.900 | +0.367、p = 0.0074 |
| patient | 0.867 | +0.333、p = 0.0309 |
| sybil | 0.533 | 0.000(30 個のシードがすべて同じ) |
| whitewash | 0.533 | — |
whitewash は最も強いのではなく、最も弱いのです。}}
#五、退化した端点で効果を測った
blindspot = 1.0 のとき、30 個のシードは一本の軌跡に潰れます。
| 標準偏差 | 0.0 |
| 有効な n | 1(30 ではない) |
そして私たちの見出しの数字——pulse 21.0、patient 79.0——はまさにこの端点でした。それを除くと、盲点の効果は 8.9 倍から 3.28 倍に、54 倍から 5.68 倍に下がります。
#六、デフォルト値がオフになっていたのに、オンだと思っていた
arm_off5 はプログラムの中で accepted = True を固定で書いていました——拒否という道がなかったのです。
したがって R437 の「ON vs OFF5」の三アーム比較は、実際には次のものでした。
無料のゲートを持つアーム vs 拒否を禁じられたアーム
#七(付記):拒否されたルールも落とし穴になる
E15 の選択的攻撃の最初のラウンドでは、20 個のシードで高価値の的中が 0.00 でした——ベースラインが 20% なので、これは数学的にありえません。
根本原因:タスクの価値はラウンド番号の決定的な関数で、見習いの割り当ては「10 ラウンドごとに一回、見習いにルーティングする」もので、攻撃者の見習い期間はちょうど 10 ラウンドごとに満了していました。この二つは 20 個のシードすべてで完全に相関していました。
sha256(seed, round) に直した後、30 個のシードで再実行すると 18–20% になりました。
#この七つのことの共通点
| 嘘をついた人は一度もいない | すべて設計か実装の問題 |
| 出てきた数字の大部分は正常に見える | どこにもエラーは出ない |
| すべて一件ずつの監査で捕まえた | 出力されたことと、本当に実行されたことは別のこと |
#次に
- 四つの正式な分析の規律:実験の方法と判定値
- E10 の完全な数字:e10-paired-null

