Skip to content

feat(science): inter-rater reliability α + ICC(2,1) — Phase A5 (orchestrator-verified) - #61

Merged
pixelstrade-dev merged 3 commits into
mainfrom
claude/caims-consciousness-framework-2EOiI
Aug 23, 2026
Merged

feat(science): inter-rater reliability α + ICC(2,1) — Phase A5 (orchestrator-verified)#61
pixelstrade-dev merged 3 commits into
mainfrom
claude/caims-consciousness-framework-2EOiI

Conversation

@pixelstrade-dev

Copy link
Copy Markdown
Owner

Programme validité — Phase A5 : fiabilité inter-juges chance-corrigée

lib/statistics/agreement.ts

  • Krippendorff α (métrique intervalle, tolérant aux manquants) — ancre calculée à la main (unités (1,2),(3,4) → 0.7) + cas « offset systématique » prouvant qu'il mesure l'accord absolu, contrairement à Pearson r ; α indéfini (null) sur unité unique (sinon identiquement 0 — artefact trompeur).
  • ICC(2,1) (Shrout & Fleiss, two-way random, absolute agreement) — validé contre le jeu de données publié de 1979 (→ 0.29) ; mean squares ANOVA exposés pour l'auditabilité.
  • Le runner émet interRater nativement dans chaque summary (Run 002 les aura d'office) ; cli/agreement.ts les calcule post-hoc avec désagrégation par dataset + mean |judge diff| brut.

Résultat Run 001 (post-hoc, 11 items × 2 juges) — cadrage à scepticisme symétrique

  • Poolé : α 0.835 / ICC 0.846 — gonflés par la bimodalité (même piège que r=0.908, documenté au protocole).
  • Désagrégé : benchmarks 0.920/0.930 vs contrôles 0.230/0.341 — mais ce contraste porte ses propres confounds, énoncés : le set benchmark est lui-même bimodal (leave-one-out : α 0.920→0.425 sans l'item designed-low) et la plage restreinte des contrôles déflate leur α.
  • La statistique honnête mène : mean |différence inter-juges| 14.9 pts sur les contrôles vs 10.1 sur les benchmarks — les juges divergent davantage sur l'adversarial (direction réelle, ~1.5×, pas le 4× que les coefficients suggèrent).

Revue orchestrateur : APPROVED WITH REQUIRED FIXES → tous appliqués

Maths vérifiées indépendamment : implémentation de référence à matrice de coïncidences (fuzz 200 cas, écart max 3.6e-16), ICC contrast-checké contre (3,1)=0.71 et (2,k)=0.62 publiés pour prouver la forme (2,1), chiffres Run 001 reproduits depuis summary.json par code séparé. Le MAJOR retenu était mon propre overclaim (« la fiabilité s'effondre ») — corrigé partout ; la carte COMPOSITE porte désormais le confound « structure de variance dans les deux sens » comme règle permanente.

Test plan

  • app 365/365, core 179/179, tsc à froid 0 des deux côtés, sync sans dérive, registre 7/7
  • Ancre publiée S&F 1979 + ancre manuelle + fuzz indépendant ; câblage runner épinglé (mock émet interRater)
  • CLI reproduit exactement les chiffres enregistrés sur run-001

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y7wiMwFa2D4P8zD9RhCgsv


Generated by Claude Code

claude added 3 commits August 23, 2026 18:32
…) (Phase A5)

lib/statistics/agreement.ts:
- Krippendorff's alpha, interval metric, missing-tolerant (units with a
  single rating ignored per Krippendorff); hand-computed anchor test
  (units (1,2),(3,4) -> alpha 0.7) plus systematic-offset case proving
  it measures ABSOLUTE agreement, unlike Pearson r
- ICC(2,1) per Shrout & Fleiss (two-way random, absolute agreement,
  single rater) — validated against the PUBLISHED 1979 anchor dataset
  (6x4 matrix -> 0.29); ANOVA mean squares exposed for auditability
- both return null when undefined, never a fake number

Runner: ExperimentSummary.interRater emitted natively (additive) — from
Run 002 the coefficients ship with every run. cli/agreement.ts computes
them POST-HOC for completed runs with a per-dataset disaggregation.

RUN 001 POST-HOC FINDING (the reason disaggregation is mandatory):
pooled alpha 0.835 / ICC 0.846 look respectable — and are
bimodality-inflated exactly as protocol-001 warned for Pearson r.
Disaggregated: benchmarks 0.920/0.930 vs NEGATIVE CONTROLS 0.230/0.341.
Inter-judge reliability collapses precisely on adversarial content —
the strongest quantitative argument yet for multi-judge ensembles plus
deterministic verification. Recorded in the COMPOSITE construct card
with the caveat as a known confound; ROADMAP and CHANGELOG updated.

app 362/362, core 176/176, cold tsc 0 both sides, sync no drift,
registry 7/7

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7wiMwFa2D4P8zD9RhCgsv
Orchestrator review verified the math to machine precision (independent
coincidence-matrix reference, 200-case fuzz max diff 3.6e-16; Shrout &
Fleiss ICC contrast-checked against (3,1) and (2,k) to prove the (2,1)
form) — and caught the project applying asymmetric skepticism to its
own headline claim. Fixed:

- MAJOR: 'reliability collapses on adversarial content' overclaimed —
  the disaggregated contrast carries its OWN confounds, now stated
  symmetrically everywhere: the benchmark set is itself bimodal
  (leave-one-out: benchmarks alpha 0.920->0.425 without the designed-
  low item) and the controls' narrower range deflates their alpha. The
  honest raw statistic leads now: mean |inter-judge difference| 14.9
  pts on controls vs 10.1 on benchmarks (direction real, ~1.5x, not
  the 4x the coefficients suggest). CLI prints mean |judge diff| per
  dataset and the false 'bimodality removed' label is gone.
- MINOR: single-pairable-unit alpha is undefined (was identically 0 —
  a misleading artifact) + test
- MINOR: runner wiring pinned by test (mock summary emits interRater)
- NIT: iccItems reports 0 when expectedRaters < 2

app 365/365, core 179/179, cold tsc 0, sync no drift, registry 7/7

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7wiMwFa2D4P8zD9RhCgsv
@pixelstrade-dev
pixelstrade-dev merged commit 152290d into main Aug 23, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants