87 lines
3.5 KiB
Python
87 lines
3.5 KiB
Python
"""Analyze inject_sn_battery_results.jsonl."""
|
|
import json, statistics
|
|
from collections import defaultdict
|
|
|
|
with open("/mnt/d/Resonance_Engine/sn_battery_results.jsonl") as f:
|
|
recs = [json.loads(l) for l in f]
|
|
|
|
baseline = next(r for r in recs if r.get("event") == "baseline_stats")
|
|
CHS = ["stress_xx", "stress_yy", "stress_xy", "asymmetry", "coherence",
|
|
"vel_var", "vorticity_mean"]
|
|
sigma = {ch: baseline["stats"][ch]["std"] for ch in CHS}
|
|
mean_b = {ch: baseline["stats"][ch]["mean"] for ch in CHS}
|
|
|
|
print(f"=== baseline (n={baseline['n_samples']} samples) ===")
|
|
for ch in CHS:
|
|
print(f" {ch:18s} mean={mean_b[ch]:+.6f} sigma={sigma[ch]:.6f}")
|
|
print()
|
|
|
|
trials = [r for r in recs if r.get("event") == "trial"]
|
|
print(f"=== {len(trials)} trials ===\n")
|
|
|
|
by_var_signed = defaultdict(lambda: {ch: [] for ch in CHS})
|
|
by_var_abs = defaultdict(lambda: {ch: [] for ch in CHS})
|
|
|
|
for t in trials:
|
|
v = t["variable"]
|
|
for ch in CHS:
|
|
if ch in t["peak_delta_signed"]:
|
|
by_var_signed[v][ch].append(t["peak_delta_signed"][ch])
|
|
by_var_abs[v][ch].append(t["peak_delta_abs"][ch])
|
|
|
|
# Per-variable mean S/N
|
|
print(f"{'variable':18s} {'n':>3} {'sxy SN':>8} {'sxx SN':>8} {'syy SN':>8} "
|
|
f"{'asym SN':>8} {'vort SN':>8} signed-sxy-mean")
|
|
print("-" * 100)
|
|
VARS = ["mid_price", "signed_flow_usd", "trade_count", "large_print_cnt",
|
|
"wallet_entropy", "vwap_drift"]
|
|
for v in VARS:
|
|
row = by_var_abs[v]
|
|
n = len(row["stress_xy"])
|
|
sn = lambda ch: statistics.mean(row[ch]) / sigma[ch] if sigma[ch] > 0 else 0
|
|
mss = statistics.mean(by_var_signed[v]["stress_xy"])
|
|
print(f"{v:18s} {n:>3} {sn('stress_xy'):>8.2f} {sn('stress_xx'):>8.2f} "
|
|
f"{sn('stress_yy'):>8.2f} {sn('asymmetry'):>8.2f} "
|
|
f"{sn('vorticity_mean'):>8.2f} {mss:+.6f}")
|
|
|
|
print()
|
|
print("=== Does response scale with strength magnitude (per-variable correlation)? ===")
|
|
print(f"{'variable':18s} {'corr(|str|, |sxy|)':>22} {'corr(str, signed_sxy)':>26}")
|
|
print("-" * 75)
|
|
for v in VARS:
|
|
rows = [t for t in trials if t["variable"] == v]
|
|
if len(rows) < 3:
|
|
continue
|
|
abs_str = [abs(r["strength"]) for r in rows]
|
|
abs_sxy = [r["peak_delta_abs"]["stress_xy"] for r in rows]
|
|
signed_str = [r["strength"] for r in rows]
|
|
signed_sxy = [r["peak_delta_signed"]["stress_xy"] for r in rows]
|
|
|
|
def corr(x, y):
|
|
n = len(x)
|
|
mx = sum(x) / n
|
|
my = sum(y) / n
|
|
num = sum((x[i] - mx) * (y[i] - my) for i in range(n))
|
|
denx = (sum((x[i] - mx) ** 2 for i in range(n))) ** 0.5
|
|
deny = (sum((y[i] - my) ** 2 for i in range(n))) ** 0.5
|
|
return num / (denx * deny) if denx > 0 and deny > 0 else float("nan")
|
|
|
|
print(f"{v:18s} {corr(abs_str, abs_sxy):>22.3f} {corr(signed_str, signed_sxy):>26.3f}")
|
|
|
|
print()
|
|
print("=== full trial dump sorted by sxy SN ===")
|
|
print(f"{'variable':18s} {'pct':>4} {'strength':>9} "
|
|
f"{'sxx Δ':>10} {'syy Δ':>10} {'sxy Δ':>10} {'sxy SN':>8} "
|
|
f"{'asym Δ':>9} {'coh Δ':>9}")
|
|
print("-" * 105)
|
|
ranked = sorted(trials, key=lambda r: -r["peak_delta_abs"]["stress_xy"] / sigma["stress_xy"])
|
|
for t in ranked:
|
|
sxy_sn = t["peak_delta_abs"]["stress_xy"] / sigma["stress_xy"]
|
|
print(f"{t['variable']:18s} {t['percentile']:>4} {t['strength']:>+9.4f} "
|
|
f"{t['peak_delta_signed']['stress_xx']:>+10.6f} "
|
|
f"{t['peak_delta_signed']['stress_yy']:>+10.6f} "
|
|
f"{t['peak_delta_signed']['stress_xy']:>+10.6f} "
|
|
f"{sxy_sn:>8.2f} "
|
|
f"{t['peak_delta_signed']['asymmetry']:>+9.4f} "
|
|
f"{t['peak_delta_signed']['coherence']:>+9.4f}")
|