Skip to content

Commit 8f5d03e

Browse files
adachi-440claude
andcommitted
docs(adr): correct the B2 reading — opportunity did not dry up, and z is outlier-fragile
Three corrections to §5, all of them things the earlier write-up got wrong by reasoning from the summary line instead of from the run. **"Opportunity dried up" was wrong.** At 36 co-located agents the fill counts are cross-venue-arb 240, multi-arb 185, max-profit-arb 62 — and clean-arb 0. The opportunities existed; the agents that took them lost money (-61, -25, -28). clean-arb's zero was it correctly judging that nothing cleared the round trip, and the others' losses are the evidence that it was right. What density raises is the share of opportunities that are not worth taking, not the absence of them. **The noise measurement did not need its own sweep.** Identical strategies in the same run differ only by execution-order luck, so the spread between duplicates *is* the noise. It was already in the B2 data: 7.44 USDC at 36 agents against a 65 USDC signal range, a ratio of 7-9x. The two-hour repeat sweep I was about to run would have measured something already measured. **What actually breaks at density is the top of the field, and one cause is the metric itself.** In z units the top four at 36 agents are all copies of the same strategy, separated by 0.0002-0.0029 against a noise floor of 0.041 — the ordering is luck. Being copies, that is expected and says nothing about whether distinct good strategies separate; the field has no two near-equal distinct strategies to test with. But the reason the gaps are that small is worth its own issue (#55): the sd used for normalization is 181.5 across the field and 20.91 with `random` excluded, so **one blown-up participant compresses everyone else 8.7x**. At hundreds of participants there will be several. Filed separately because it is a defect in how measurements are combined, fixable now and cheaply, as opposed to the open question of which metric to measure — and median/MAD would fix it while keeping the "won by how much" property that z was chosen for. Ordered by cost, the levers for top-of-field resolution are: robust normalization (#55), averaging over ~140 scenarios (already in the design), then raising flow intensity (needs environment recalibration). Flow was my first suggestion; it should be the last resort. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent 72e6447 commit 8f5d03e

1 file changed

Lines changed: 46 additions & 14 deletions

File tree

docs/adr/0017-scenario-based-evaluation.md

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -391,18 +391,50 @@ cross-venue-arb / adaptive-arb / arb-bot / max-profit-arb / 既知の悪手 rand
391391
**負荷側も 36 体で健全。**360 ブロックを 718 秒 = ブロック生成に完全追随(理論値 720 秒)、
392392
agent プロセスの早期終了 0 件。**破綻点は 36 体では見つからなかった。**
393393

394-
読み取れること:
395-
396-
- **同居上限を決めるのは「識別力」ではなく「機会の総量」である。**密度が上がるほど核の全員が
397-
ゼロへ、あるいはマイナスへ寄っていく(clean-arb は 18 体以降まったく取引しなくなる = 往復コストを
398-
超えるスプレッドが消える)。順位は保たれるが、**差が縮む**
399-
- したがって上限は「順位が壊れる点」ではなく、**「勝者と敗者の差が run ノイズを上回っていられる点」**
400-
決めるべきである。それには ぶれ幅の実測(§5 の診断項目)と突き合わせる必要があり、
401-
そこがまだ埋まっていない
402-
- **`random` の −1100 は、機会が枯れても実力差が消えないことを示している。**下手な戦略は密度に
403-
関係なく負ける。識別が難しくなるのは「そこそこの戦略同士」の区別であって、良し悪しの区別ではない
404-
- 追加参加者(pad-*)は元の戦略とほぼ同値を出す(例 pad-venue-arb-0 = +2.84 対 venue-arb +2.14)。
405-
測定の一貫性の確認になっている
394+
読み取れること(**当初の読みは誤りだったので訂正した内容である**):
395+
396+
- **機会は枯れていない。**roster 36 の約定回数は cross-venue-arb 240 / multi-arb 185 /
397+
max-profit-arb 62 に対し **clean-arb は 0**。機会は存在し、**取りに行った agent が損をしている**
398+
(cross-venue-arb −61.0 / multi-arb −25.4 / max-profit-arb −27.9)。clean-arb の 0 回は
399+
「往復コストを超える機会が無い」という正しい判断で、その正しさを他の損失が裏付けている。
400+
密度が上げるのは「機会の消滅」ではなく「**取ると損をする機会の比率**」である
401+
- 首位のスコアは +10.3(9 体)→ +1.1(36 体)に崩れる一方、noop を上回る agent は 4/35 残る。
402+
順位全体は保たれ、壊れるのは**首位付近の解像度**である
403+
- **`random` の −1100 は密度に依らない。**下手な戦略は人数が増えても罰せられる。
404+
難しくなるのは「そこそこ」と「良い」の区別であって、良し悪しの区別ではない
405+
406+
#### ノイズは別途測る必要がなかった(複製が実測値になっている)
407+
408+
同一戦略の複製が同じ run にいるので、**その差がそのままノイズである**(同じコードなので実力差は
409+
ゼロ、差は着順の運だけ)。§5 が「診断項目」として挙げていた ぶれ幅の測定は、この形で済んでいる。
410+
411+
| ロスター | 同一戦略間の差(ノイズ) | 実力差の幅(random 除く) ||
412+
|---------|----------------------:|----------------------:|---:|
413+
| 18 | 1.23 | 61.3 | 50 |
414+
| 27 | 11.49 | 83.3 | 7.2 |
415+
| 36 | 7.44 | 65.4 | 8.8 |
416+
417+
**信号はノイズの 7〜9 倍あり、36 体でも順位全体は意味を持つ。**
418+
419+
#### 首位の解像度は単一シナリオでは失われている
420+
421+
roster 36 を z 単位で見ると、上位 4 体は**すべて venue-arb の複製**で、z の差は 0.0002〜0.0029。
422+
同一戦略間の z ノイズは 0.041 なので、**単一シナリオの首位順は完全に運**である。
423+
ただしこれは同じコードなので当然の結果であり、**「異なる良い戦略同士が分離できるか」の証拠には
424+
ならない**(この field に拮抗した別戦略が無いため未検証)。
425+
426+
#### z-score が外れ値に脆い(本測定で見つかった採点方式の欠陥)
427+
428+
roster 36 の sd は **181.5**`random`(−1113)を除くと **20.91**
429+
**壊滅的に負ける参加者が 1 体いるだけで、残り 34 体の z が 1/8.7 に圧縮される。**
430+
数百人規模ならそうした参加者は必ず出るので、**1 人が残り全員を統計的に区別不能にする**
431+
432+
首位の解像度を回復する手段は、コストの安い順に:
433+
434+
1. **z-score の頑健化** — 中央値/MAD 正規化、winsorize、または軸 2 の B 案(順位ベース)への変更。
435+
`random` を除くだけで解像度が 8.7 倍になるので、費用対効果が最も高い
436+
2. **140 シナリオの平均**(既に設計にある)— 単一シナリオのノイズは √140 ≈ 12 倍薄まる
437+
3. **flow 強度の増強** — 機会の総量を増やして実力差そのものを広げる。環境の再較正を伴い最も高コスト
406438

407439
**残る限界**: 詰めた参加者は核と同じ戦略の複製なので、本物の参加者フィールドより機会の食い合いが
408440
強く出ている可能性がある。また 1 レジーム・1 シードの測定である。
@@ -446,13 +478,13 @@ WETH 売りを提案し続ける)。パイロットで「既知の強弱」の
446478

447479
| 較正値 | 測り方 | 既定(暫定) |
448480
|--------|--------|-------------|
449-
| **同居可能なロスターサイズ** | 再測定済み: 36 体まで順位は崩れず(Spearman ρ 0.905-1.000)、負荷も健全。**制約は識別力ではなく機会の総量**で、密度とともに勝者と敗者の差が縮む。上限は「差が run ノイズを上回る点」で決めるべきで、ぶれ幅の実測と突き合わせが要る | **36 体以上**(破綻点は未発見。差の縮小が実質の制約|
481+
| **同居可能なロスターサイズ** | 再測定済み: 36 体まで順位全体は崩れず(Spearman ρ 0.905-1.000、信号/ノイズ 7〜9 倍)、負荷も健全。壊れるのは**首位付近の解像度**のみ。回復手段は z の頑健化 → シナリオ数の平均 → flow 増強の順(コスト昇順) | **36 体以上**(破綻点は未発見) |
450482
| **R(1 シナリオのブロック数)** | 充足性で決める(下記)。R=180 / 360 / 720 で、crash 窓の回数と LLM 型の判断回数が戦略の発揮に足りるかを見る | 360 |
451483
| シード数(Public 5 / Private 20〜40) | 順位がシードをまたいで安定するか。ヒート数の確定後、余剰予算はすべてここへ振る | 5 / 20 |
452484
| `run.blockTimeSec` | LLM 型とルール型の成績差が判断頻度に起因するか(§6 のリスク) | 2 秒(現行) |
453485
| レジームあたりのイベント回数 | 1 run 内で複数回起きることで、1 回の巡り合わせが成績を決めない構造になっているか | レジームごとに 3〜4 回 |
454486
| `--score-every N` | 採点断面を間引いても equity curve の診断価値が保てる N | 8 |
455-
| 同一シナリオのぶれ幅(診断のみ) | 同じ (r,s) を数回回して run ノイズの大きさを実測する。採点には使わないが、シナリオ内スコアがどの程度信頼できるかを知るために必要 | R=40 で符号・桁は一致、値はぶれる。本番 R で再測 |
487+
| ~~同一シナリオのぶれ幅~~ | **測定済み**。同一戦略の複製が同じ run にいれば、その差がそのままノイズになる(実力差ゼロなので)。専用の反復 run は不要だった | R=360・36 体で 7.44 USDC / z 0.041 |
456488
| `whale` レジームの magnitude | 30 ブロックのスモークで同梱 arb が 25,000 の資本に対し 1,600〜2,800 USDC を稼いだ。大きすぎて「居るだけで儲かる」可能性があり、識別力で較正し直す | [25, 60] WETH |
457489

458490
**R とシード数は役割が違う。R は「充足性」で決め、余った予算はすべてシード数へ振る。**

0 commit comments

Comments
 (0)