"""Readout-matched comparison and the campaign's final result record. Everything above used the frozen probe on the MAE side, which is what EAT's own proxy ranking used and so is the like-for-like comparison against +0.630. This adds the arm the user asked for: the MAE side scored with the same AS-20K LoRA readout at 3 pinned seeds that produced the EAT base ground truth, so proxy and target differ in objective and scale but not in how they are read out. """ import csv import glob import json import statistics as st from pathlib import Path import numpy as np from scipy import stats spec = json.loads(Path("/workspace/analysis/canonical64.json").read_text()) curve = json.loads(Path("/workspace/analysis/transfer_curve.json").read_text()) lora = json.loads(Path("/workspace/runs/mae-64/lora_summary.json").read_text()) final = max(r["step"] for r in curve) eat_proxy = {} for r in csv.DictReader(open("/workspace/analysis/eat-map-regmix/tables/runs.csv")): if r.get("campaign") != "regmix256": continue try: if float(r["pretrain_seed"]) == 0.0: eat_proxy[int(float(r["dist_id"]))] = float(r["as20k_map"]) except (ValueError, KeyError): pass ART = "/workspace/artifacts/audio-mixture-scaling/artifacts/audioset-dasheng-0.6b-k20-r31d6389" train_prop = np.array(json.loads( Path("/workspace/data/asmel_flat/train.cluster_index.json").read_text())["proportions"]) ev = np.load(f"{ART}/test_cluster_index.npy") delta = np.bincount(ev, minlength=20) / len(ev) - train_prop dids = sorted(d for d in (int(v["dist_id"]) for v in spec.values()) if d in eat_proxy and f"d{d}-s0" in lora) base = np.array([spec[str(d)]["lora_mean"] for d in dids]) eatp = np.array([eat_proxy[d] for d in dids]) mae_probe = np.array([json.loads(Path(glob.glob( f"/workspace/runs/mae-64/d{d}-s0/exports/step_{final:08d}/probe.json")[0] ).read_text())["probe/map"] for d in dids]) mae_lora = np.array([lora[f"d{d}-s0"]["mean"] for d in dids]) lora_sd = np.array([lora[f"d{d}-s0"]["sd"] for d in dids]) em = np.array([float(np.array(spec[str(d)]["weights"]) @ delta) for d in dids]) def rho(a, b): return stats.spearmanr(a, b).statistic def z(x): return (x - x.mean()) / x.std(ddof=1) sigma_ft = float(np.sqrt(np.mean(lora_sd**2))) between = float(mae_lora.std(ddof=1)) rel_lora = (between**2 - (sigma_ft / np.sqrt(3))**2) / between**2 print(f"n = {len(dids)} arms\n") print("MAE-side LoRA readout (4 epochs, lr 3e-3, seeds 0/1/2 pinned):") print(f" mean {mae_lora.mean():.5f} between-arm sd {between:.5f}") print(f" sigma_ft (pooled within arm) {sigma_ft:.5f} " f"SE of 3-seed mean {sigma_ft/np.sqrt(3):.5f}") print(f" reliability of the 3-seed mean {rel_lora:.3f}") print(f" max within-arm sd {lora_sd.max():.5f} (collapse screen threshold 0.02)") print(f"\n{'predictor -> EAT base (LoRA x3)':<38}{'rho':>9}") rows = { "EAT proxy, frozen probe": eatp, "MAE proxy, frozen probe": mae_probe, "MAE proxy, LoRA x3 (readout-matched)": mae_lora, "eval-match (no training)": em, "EAT probe + MAE LoRA": z(eatp) + z(mae_lora), "EAT probe + MAE LoRA + eval-match": z(eatp) + z(mae_lora) + z(em), } for name, v in rows.items(): print(f"{name:<38}{rho(v, base):>+9.3f}") print(f"\nMAE probe vs MAE LoRA agreement: {rho(mae_probe, mae_lora):+.3f}") print(f"EAT proxy vs MAE LoRA agreement : {rho(eatp, mae_lora):+.3f}") rng = np.random.default_rng(0) d = np.array([rho(mae_lora[i], base[i]) - rho(eatp[i], base[i]) for i in (rng.integers(0, len(dids), len(dids)) for _ in range(4000))]) print(f"\nDelta rho (MAE LoRA - EAT probe): {rho(mae_lora, base)-rho(eatp, base):+.3f} " f"95% CI [{np.percentile(d,2.5):+.3f}, {np.percentile(d,97.5):+.3f}] " f"P(>0) = {(d>0).mean():.3f}") out = { "n_arms": len(dids), "rho": {k: float(rho(v, base)) for k, v in rows.items()}, "mae_lora": {"mean": float(mae_lora.mean()), "between_sd": between, "sigma_ft": sigma_ft, "reliability_3seed": float(rel_lora)}, "agreement": {"mae_probe_vs_mae_lora": float(rho(mae_probe, mae_lora)), "eat_vs_mae_lora": float(rho(eatp, mae_lora))}, "recipe": {"objective": "mae", "scale": "15m", "patch": "16x16", "lr": 5e-4, "budget_clips": 1912024, "mask_prob": 0.75, "clone_batch": 1, "compile": False, "readout_lora_epochs": 4, "readout_lora_lr": 3e-3, "node": "4x RTX 3090", "floor_p16": 0.03861}, } Path("/workspace/analysis/FINAL_RESULT.json").write_text(json.dumps(out, indent=1)) print("\nwrote /workspace/analysis/FINAL_RESULT.json")