Files
waggle-os/benchmarks/probes/judge-swap-validation/kappa-split-analysis.md
Oleg Maslov 0c3e2ead3b
Some checks failed
Installer Smoke / installer-smoke (push) Has been cancelled
moving
2026-09-02 10:10:29 +02:00

159 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# §1.3h Judge Swap Stratified Re-Probe — Dual-κ Split Analysis
**Date:** 2026-04-24 (evening) **Parent commit:** `8a2f0e6` (§1.3g anchor)
**Source:** `benchmarks/results/locomo-mini-n20-retry-2026-04-24T00-02-12Z.jsonl` (100 rows, authoritative).
**Split pool (Opus ≠ GPT):** **7** instances (use-all-available per PM amendment §1.3H-POOL-SHORTAGE OPTION 1).
**Split cell distribution:** `agentic=2`, `full-context=2`, `oracle-context=3`, `no-context=0`, `retrieval=0`.
**Structural observation:** All 7 splits have `Opus=correct / GPT=incorrect`. Zero inverse splits.
**PM-amended verdict caveat:** n=7 < 12 minimum for meaningful discrimination. All findings carry `n=7 pool-limited, observational not confirmatory` caveat. Primary value = operational signal (parse + latency + MiniMax routing) + bias detection via p_opus/p_gpt balance.
---
## §1 Per-candidate split metrics
| Cand | Parse | n_eval | p_opus | p_gpt | κ_vs_opus | κ_vs_gpt | κ_cons | p50 lat | p95 lat | Routing | Split verdict |
|------|-------|--------|--------|-------|-----------|----------|--------|---------|---------|---------|---------------|
| kimi | 5/7 (71.4%) | 5 | 80.0% (4/5) | 20.0% (1/5) | 0.0 deg | 0.0 deg | **N/A deg** | 32.0 s | 51.0 s | `direct` | **N/A deg** |
| minimax | 7/7 (100.0%) | 7 | 85.7% (6/7) | 14.3% (1/7) | 0.0 deg | 0.0 deg | **N/A deg** | 16.6 s | 21.2 s | `openrouter` | **N/A deg** |
| deepseek | 5/7 (71.4%) | 5 | 40.0% (2/5) | 60.0% (3/5) | 0.0 deg | 0.0 deg | **N/A deg** | 15.4 s | 21.2 s | `direct` | **N/A deg** |
| zhipu | 6/7 (85.7%) | 6 | 0.0% (0/6) | 100.0% (6/6) | 0.0 deg | 1.0 deg | **N/A deg** | 17.9 s | 22.5 s | `direct` | **N/A deg** |
### §1.1 Why κ on split-only is mathematically degenerate
All 7 splits are `Opus=correct / GPT=incorrect`. For a Cohen's κ on the split subset:
- `κ_vs_opus`: reference (Opus) has zero variance → ref_counts has single class → p_e = p_o → κ = (0 0)/(1 1) undefined → reported as `0.0 deg`
- `κ_vs_gpt`: same pathology → `0.0 deg` (except Zhipu, which perfectly matches GPT → `κ = 1.0 deg` by convention when `p_o = p_e = 1`)
**κ_cons = min() of two degenerate values is itself degenerate.** The informative signal on splits is NOT κ, it is the **p_opus / p_gpt balance** which reveals each candidate's calibration bias. The brief's κ-threshold classification (PASS/BORDERLINE/FAIL @ 0.70/0.60) does not apply to this structural case.
### §1.2 BIAS INTERPRETATION (actionable)
Since all splits are Opus=correct / GPT=incorrect:
- `p_opus=100%` = candidate lock-stepped with Opus (maximally lenient, adds no new signal vs Opus)
- `p_gpt=100%` = candidate lock-stepped with GPT (maximally strict, adds no new signal vs GPT)
- `p_opus ≈ p_gpt ≈ 50%` = candidate judges independently (ideal for 3-judge ensemble)
| Cand | p_opus | p_gpt | Calibration profile |
|------|--------|-------|----------------------|
| **DeepSeek** | 40% | 60% | **Most balanced — slight GPT lean, clearest independent judgment** |
| Kimi | 80% | 20% | Opus-lenient (echoes Opus 4/5 times) |
| MiniMax | 86% | 14% | Strongly Opus-lenient (echoes Opus 6/7 times) |
| Zhipu | **0%** | **100%** | **Pure GPT-echo — 6/6 parsed splits = GPT verbatim** |
**This is the critical finding the §1.3g probe could not produce.** On the 20 unanimous cases, all 4 candidates scored κ=1.0 — appeared equivalent. On split cases where judges diverge, DeepSeek uniquely exhibits independent calibration; Zhipu is effectively a GPT echo; Kimi/MiniMax echo Opus. For a 3-judge ensemble replacing Gemini, **independence from existing judges is a feature**, not a bug.
---
## §2 Aggregate κ on combined sample (27 = 20 unanimous + 7 splits)
Unanimous portion reuses §1.3g verdicts (consensus-matched, contributes κ=1.0 content). Split portion uses dual-reference with conservative min. Combined sample is non-degenerate (both classes present in Opus and GPT reference columns on the aggregate).
| Cand | n_combined | κ_agg_vs_opus | κ_agg_vs_gpt | κ_agg_cons | Aggregate verdict |
|------|------------|----------------|---------------|-------------|---------------------|
| **deepseek** | 23 | 0.7089 | 0.7473 | **0.7089** | **PASS (only one ≥ 0.70)** |
| kimi | 25 | 0.9110 | 0.5763 | **0.5763** | FAIL (κ_vs_gpt < 0.70) |
| minimax | 27 | 0.9222 | 0.4564 | **0.4564** | FAIL (κ_vs_gpt < 0.70) |
| zhipu | 25 | 0.4444 | 1.0000 | **0.4444** | FAIL (κ_vs_opus < 0.70) |
**Aggregate κ ranking (descending):** `deepseek, kimi, minimax, zhipu`
The aggregate picture inverts the split-only one: DeepSeek is the only candidate clearing 0.70 on the conservative dual-reference combined sample. Zhipu's perfect κ_vs_gpt is offset by its ~0.44 κ_vs_opus — clear asymmetry consistent with the bias finding.
---
## §3 Operational snapshot (split-case specific)
| Cand | Split parse | p50 (split) | p95 (split) | Routing | MiniMax status |
|------|-------------|-------------|-------------|---------|-------------------|
| kimi | 5/7 (71%) | 32.0 s | 51.0 s | direct | — |
| minimax | 7/7 (100%) | 16.6 s | 21.2 s | **openrouter** | **direct FAILED — international 401/err + legacy 401/err** |
| deepseek | 5/7 (71%) | 15.4 s | 21.2 s | direct | — |
| zhipu | 6/7 (86%) | 17.9 s | 22.5 s | direct | — |
### §3.1 MiniMax direct routing verdict
**Primary operational value focus per PM amendment.** Result:
- `direct_international` (`https://api.minimaxi.com/v1/text/chatcompletion_v2?GroupId=...`) — FAILED
- `direct_legacy` (`https://api.minimax.chat/v1/text/chatcompletion_v2?GroupId=...`) — FAILED
- `openrouter` fallback — SUCCEEDED (7/7 parse)
**Routing resolution: `direct_failed_fell_back_openrouter`.** The newly-added `MINIMAX_GROUP_ID` did not unblock direct routing. Either the key is not provisioned for v2 endpoints, the endpoint paths / model names need further research (e.g. raw v1 `chatcompletion_pro` format differs from OpenAI-compatible v2), or the account tier lacks direct API access. **Manifest v6 must route MiniMax via OpenRouter if MiniMax is selected** — direct routing is not a viable assumption.
### §3.2 Parse rate on challenging vs unanimous (regression check)
| Cand | Unanimous parse (§1.3g) | Split parse (§1.3h) | Δ |
|------|--------------------------|-----------------------|---|
| kimi | 20/20 (100%) | 5/7 (71%) | **29 pp** (2 timeout-retries exhausted on long-context instances) |
| minimax | 20/20 (100%) | 7/7 (100%) | 0 pp |
| deepseek | 18/20 (90%) | 5/7 (71%) | **19 pp** (2 verdict=None — likely malformed JSON or over-length) |
| zhipu | 19/20 (95%) | 6/7 (86%) | 9 pp |
Challenging cases expose degradation in Kimi and DeepSeek parse reliability. Zhipu and MiniMax (via OR) hold up best on difficult instances.
---
## §4 Aggregate verdict: **INCONCLUSIVE_BUT_OPERATIONAL_SIGNAL**
**Per PM-amended §4.4.** Reasons (any single one triggers):
1. Split pool n=7 < 12 minimum for confirmatory κ discrimination
2. Parse rate <80% on 2 candidates (Kimi, DeepSeek) on split subset
3. Split-only κ is mathematically degenerate (structural Opus=correct / GPT=incorrect orientation)
However, three **operational-signal findings** are fully actionable:
- **A. Bias profile (novel finding):** DeepSeek is the only candidate with independent calibration. Zhipu is a GPT-echo (0% agreement with Opus on splits). MiniMax/Kimi are Opus-echoes.
- **B. Aggregate κ on combined 27:** DeepSeek is the only candidate κ_cons ≥ 0.70 on the non-degenerate combined sample.
- **C. MiniMax direct routing FAILED** even with MINIMAX_GROUP_ID. Manifest v6 cannot rely on direct; OpenRouter fallback is the operational truth.
---
## §5 Revised recommendation (integrating §1.3g + §1.3h)
**The §1.3g heuristic-based recommendation (Zhipu primary, DeepSeek backup) is not supported by §1.3h findings.**
### §5.1 Two viable paths, each with a clear trade-off
**Path 1 — Independence priority (DeepSeek primary):**
- Pros: Only candidate with balanced independent calibration (p_opus=40%, p_gpt=60%); only one clearing κ_agg_cons ≥ 0.70 on combined 27; direct routing works.
- Cons: Split parse rate 71% (2/7 NULL verdicts) — operational risk for N=400 unless root cause of parse drops on hard cases is addressed (likely `max_tokens=1024` ceiling being hit on reasoning chains, same pathology as Kimi; could be fixed by bumping to 2048/4096).
- Mitigation: Boost `max_tokens` to 2048+ for DeepSeek on judge role; re-verify parse rate on a follow-up probe if PM accepts this path.
**Path 2 — Reliability priority (Zhipu primary, MiniMax-via-OR backup):**
- Pros: Zhipu fastest p50 (9s from §1.3g, 18s on splits) + direct routing + parse 86% on splits; MiniMax 100% parse via OR.
- Cons: Zhipu is effectively a GPT-echo (0% independence on splits) — adds minimal new signal to an Opus+GPT+GPT-echo ensemble. Ensemble's value is correlated, not complementary; `κ(Gemini-replacement, GPT) ≈ 1.0` violates the independence assumption that motivated having a third judge in the first place.
### §5.2 PM adjudication required
**Recommended PM pick based on §1.3h empirical data:**
- **Primary: DEEPSEEK** with `max_tokens=2048` bump (independence > 80% parse in a 3-judge ensemble where the third judge's role is adding new information)
- **Backup: ZHIPU** (if parse-reliability becomes binding, accept the independence compromise; it's better than no third judge)
**Alternative if PM prefers §1.3g-style operational-first ranking:**
- Primary: ZHIPU (parse + speed + direct), Backup: DEEPSEEK-boosted (independence insurance if Zhipu ensemble correlation becomes a problem at N=400)
**If PM wants to fix the unknowns before committing:**
- Run a mini-confirmation probe: DeepSeek with `max_tokens=2048` on the same 7 splits + 13 additional split-candidates from a larger calibration pool (if one is built). Cost ~$0.50.
---
## §6 Halt ping data (machine-readable summary)
- `aggregate_verdict`: **INCONCLUSIVE_BUT_OPERATIONAL_SIGNAL**
- `ranking_by_k_agg_cons_desc`: deepseek (0.709), kimi (0.576), minimax (0.456), zhipu (0.444)
- `ranking_by_p_opus_balance`: deepseek (best: 40/60), kimi (80/20), minimax (86/14), zhipu (worst: 0/100)
- `recommended_primary` (empirical): **DEEPSEEK** (with max_tokens bump) — supersedes §1.3g Zhipu pick
- `recommended_primary` (operational-first, if PM prefers): **ZHIPU** with independence caveat
- `recommended_backup`: **ZHIPU** or **DEEPSEEK-boosted** (mirror of primary choice)
- `minimax_routing_resolution`: **direct_failed_fell_back_openrouter**
- `split_cases_selected`: 7/7 (all available from 100-row authoritative source)
- `empirical_finding_novel`: Zhipu 100% GPT-lock-step on splits → low independence from existing GPT judge
Raw summary also saved to `_summary-split.json`.