From afcae4fbf7ab658e25d439865274b2d05ad7fcbf Mon Sep 17 00:00:00 2001 From: Pietro Giacobazzi Date: Wed, 17 Jun 2026 09:59:35 +0000 Subject: [PATCH] PaPP v2 Modello: calibrazione rev (isotonic) + curva precisione/copertura + soglia operativa Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- PaPP v2/Modello/README_mean_reversion.md | 59 +++++-- .../results/mr_calibration_metrics.json | 33 ++++ .../results/mr_calibration_reliability.png | Bin 0 -> 47212 bytes .../Modello/results/mr_precision_coverage.csv | 11 ++ .../Modello/results/mr_precision_coverage.png | Bin 0 -> 48550 bytes PaPP v2/Modello/src/mr_calibrate.py | 166 ++++++++++++++++++ 6 files changed, 259 insertions(+), 10 deletions(-) create mode 100644 PaPP v2/Modello/results/mr_calibration_metrics.json create mode 100644 PaPP v2/Modello/results/mr_calibration_reliability.png create mode 100644 PaPP v2/Modello/results/mr_precision_coverage.csv create mode 100644 PaPP v2/Modello/results/mr_precision_coverage.png create mode 100644 PaPP v2/Modello/src/mr_calibrate.py diff --git a/PaPP v2/Modello/README_mean_reversion.md b/PaPP v2/Modello/README_mean_reversion.md index 03e137d..4cfe557 100644 --- a/PaPP v2/Modello/README_mean_reversion.md +++ b/PaPP v2/Modello/README_mean_reversion.md @@ -99,12 +99,15 @@ Modello/ ├── config_mr.yaml parametri del modello di mean-reversion ├── src/ │ ├── mr_labeling.py costruzione dei 3 target + maschere -│ └── mr_train.py pool + walk-forward + LOSO + modelli finali +│ ├── mr_train.py pool + walk-forward + LOSO + modelli finali +│ └── mr_calibrate.py calibrazione + curva precisione/copertura └── results/ - ├── mr_wf_.csv metriche walk-forward per anno - ├── mr_loso_.csv metriche leave-one-symbol-out - ├── mr_summary.json riepilogo medio - └── mr_model_.joblib modelli finali (non versionati) + ├── mr_wf_.csv metriche walk-forward per anno + ├── mr_loso_.csv metriche leave-one-symbol-out + ├── mr_precision_coverage.csv soglia -> copertura/precisione/lift + ├── mr_calibration_metrics.json Brier prima/dopo + LOSO + ├── mr_*.png grafici (affidabilita', precisione/copertura) + └── mr_*.joblib modelli (non versionati) ``` ```bash @@ -112,12 +115,48 @@ pip install -r requirements.txt # copia in ./data i CSV crosses+bars dei 4 simboli (vedi data/README.md), poi: cd src python mr_train.py # usa ../config_mr.yaml +python mr_calibrate.py # calibrazione + soglia operativa (sez. 8) ``` -## 8. Prossimi passi +## 8. Calibrazione e soglia operativa (`src/mr_calibrate.py`) + +Il modello `rev` **ordina** bene gli eventi, ma la probabilità grezza non è +"vera" (vedi curva rossa sotto: un 0.55 grezzo corrispondeva a ~46% di rientri +reali). La **calibrazione isotonica** la rende affidabile nella zona operativa +(0.7–0.9) e migliora il Brier score da **0.198 → 0.189** (più basso = meglio). + +Split temporale onesto: modello base su anni `< 2016`, calibratore su `2016–2017`, +valutazione su `2018+` (mai visto). LOSO calibrato: AUC 0.67–0.70 su simbolo mai +visto → regge. + +![Affidabilità](results/mr_calibration_reliability.png) + +### Curva precisione/copertura (test 2018+, base rate 73%) + +Per ogni soglia di probabilità: **copertura** = quanti segnali tieni, +**precisione** = tasso di rientro effettivo tra quelli tenuti. + +| soglia | copertura | precisione | lift | +|---|---|---|---| +| 0.50 | 99% | 73.1% | 1.00 | +| 0.70 | 85% | 76.2% | 1.04 | +| **0.75** | **51%** | **81.2%** | **1.11** | +| 0.80 | 42% | 82.2% | 1.13 | +| 0.85 | 28% | 83.3% | 1.14 | +| 0.90 | 6% | 87.0% | 1.19 | + +![Precisione vs Copertura](results/mr_precision_coverage.png) + +**Soglia consigliata: ~0.75** → l'EA opera su ~metà dei setup di mean-reversion +ma il tasso di rientro sale dal 73% all'**81%**. Chi vuole essere più selettivo +usa 0.80–0.85 (precisione ~82–83%, copertura 28–42%). La soglia è un parametro: +la tabella completa è in `results/mr_precision_coverage.csv`. + +Nota: tra 0.70 e 0.75 la copertura crolla (85%→51%) perché lì si concentra la +massa delle probabilità; è il punto in cui il filtro inizia a "mordere". + +## 9. Prossimi passi -- **Calibrazione** delle probabilità di `rev` e scelta soglia operativa - (precisione vs copertura) per l'EA. - Aggiungere altri major FX al pool per irrobustire ancora il LOSO. -- **Fase 4**: export del modello `rev` in **ONNX** (skl2onnx) e inferenza in MT5 - come filtro dei segnali di mean-reversion. +- **Fase 4**: export del modello `rev` **calibrato** in **ONNX** (skl2onnx) e + inferenza in MT5 come filtro dei segnali di mean-reversion (soglia ~0.75). diff --git a/PaPP v2/Modello/results/mr_calibration_metrics.json b/PaPP v2/Modello/results/mr_calibration_metrics.json new file mode 100644 index 0000000..cf4a4c7 --- /dev/null +++ b/PaPP v2/Modello/results/mr_calibration_metrics.json @@ -0,0 +1,33 @@ +{ + "method": "isotonic", + "brier_raw": 0.19825470393871938, + "brier_cal": 0.18872294228809272, + "auc": 0.6457651952507415, + "test_base_rate": 0.7297476759628154, + "loso": [ + { + "symbol": "EURUSD", + "brier": 0.1813803944436018, + "auc": 0.6746989606877932, + "base": 0.7324227355699628 + }, + { + "symbol": "USDJPY", + "brier": 0.19381118796660657, + "auc": 0.6742950427540226, + "base": 0.7028252001812962 + }, + { + "symbol": "USDCHF", + "brier": 0.16726747719373602, + "auc": 0.699568173561329, + "base": 0.7603328331741918 + }, + { + "symbol": "GBPUSD", + "brier": 0.17639890281257165, + "auc": 0.6957124361813346, + "base": 0.7374227714033539 + } + ] +} \ No newline at end of file diff --git a/PaPP v2/Modello/results/mr_calibration_reliability.png b/PaPP v2/Modello/results/mr_calibration_reliability.png new file mode 100644 index 0000000000000000000000000000000000000000..602529c977caaa4f9521317caabc039caa7e22b6 GIT binary patch literal 47212 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 K=VP;1Z2JfM7Bpo5 literal 0 HcmV?d00001 diff --git a/PaPP v2/Modello/results/mr_precision_coverage.csv b/PaPP v2/Modello/results/mr_precision_coverage.csv new file mode 100644 index 0000000..0f1ce83 --- /dev/null +++ b/PaPP v2/Modello/results/mr_precision_coverage.csv @@ -0,0 +1,11 @@ +soglia,copertura,precisione,n_tenuti,lift_vs_base +0.5,0.9932577382776586,0.7307929651342179,19446,1.0014323980820128 +0.55,0.9445295740116457,0.744646333549643,18492,1.02041617682053 +0.6,0.9440698743487588,0.7448466158091219,18483,1.0206906309449841 +0.65,0.8972826642149351,0.7543689873057438,17567,1.0337394857893085 +0.7,0.8463581571151292,0.7623415811707905,16570,1.0446646235152053 +0.75,0.509704770660946,0.8117045796171961,9979,1.1123085504126453 +0.8,0.42312800081724383,0.8221873491067118,8284,1.1266734738441382 +0.85,0.2760241086934314,0.8330866025166543,5404,1.1416091204641323 +0.9,0.0641025641025641,0.8701195219123506,1255,1.1923566878980891 +0.95,0.0,,0, diff --git a/PaPP v2/Modello/results/mr_precision_coverage.png b/PaPP v2/Modello/results/mr_precision_coverage.png new file mode 100644 index 0000000000000000000000000000000000000000..7843a813bf6119e6b7629d2e1d8873d78c408517 GIT binary patch literal 48550 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 literal 0 HcmV?d00001 diff --git a/PaPP v2/Modello/src/mr_calibrate.py b/PaPP v2/Modello/src/mr_calibrate.py new file mode 100644 index 0000000..a56e88e --- /dev/null +++ b/PaPP v2/Modello/src/mr_calibrate.py @@ -0,0 +1,166 @@ +"""Calibrazione delle probabilita' del modello `rev` + scelta soglia operativa. + +Perche': il modello `rev` ordina bene gli eventi (AUC ~0.68) ma la probabilita' +grezza puo' non essere "vera" (un 0.80 deve voler dire ~80% di rientri reali). +La calibrazione rende le probabilita' affidabili; la curva precisione/copertura +serve a scegliere la soglia per l'EA. + +Split temporale onesto (nessun leakage): + train_core : anni < calib_start -> addestra il modello base + calib : [calib_start, test_start) -> stima il calibratore + test : >= test_start -> valutazione (mai vista) + +Output (in ../results): + mr_calibration_reliability.png curva di affidabilita' (prima/dopo) + mr_precision_coverage.png precisione e copertura vs soglia + mr_precision_coverage.csv tabella soglia -> copertura/precisione/lift + mr_calibration_metrics.json Brier prima/dopo + LOSO + mr_rev_calibrated.joblib modello calibrato finale (non versionato) + +Uso: + python mr_calibrate.py [config_mr.yaml] [method] # method: isotonic|sigmoid +""" +from __future__ import annotations +import os, sys, json +import numpy as np, pandas as pd +import matplotlib +matplotlib.use("Agg") +import matplotlib.pyplot as plt + +HERE = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, HERE) +from mr_train import load_cfg, load_pool +from mr_labeling import make_targets +from features import select_xy +from model import make_model +from sklearn.calibration import CalibratedClassifierCV +from sklearn.frozen import FrozenEstimator +from sklearn.metrics import brier_score_loss, roc_auc_score + +RESULTS = os.path.normpath(os.path.join(HERE, "..", "results")) +CALIB_START = 2016 +TEST_START = 2018 + + +def reliability(y, p, bins=10): + edges = np.linspace(0, 1, bins + 1) + idx = np.clip(np.digitize(p, edges) - 1, 0, bins - 1) + xs, ys, ns = [], [], [] + for b in range(bins): + m = idx == b + if m.sum() > 0: + xs.append(p[m].mean()); ys.append(y[m].mean()); ns.append(int(m.sum())) + return np.array(xs), np.array(ys), np.array(ns) + + +def prec_cov(y, p, taus): + rows = [] + base = y.mean() + for t in taus: + keep = p >= t + cov = keep.mean() + prec = y[keep].mean() if keep.sum() > 0 else np.nan + rows.append({"soglia": round(float(t), 3), "copertura": float(cov), + "precisione": float(prec) if not np.isnan(prec) else np.nan, + "n_tenuti": int(keep.sum()), + "lift_vs_base": float(prec / base) if keep.sum() > 0 else np.nan}) + return pd.DataFrame(rows) + + +def run(cfg_path, method="isotonic"): + cfg = load_cfg(cfg_path) + num, cat = cfg["features_numeric"], cfg["features_categorical"] + df = load_pool(cfg) + y_all, mask = make_targets(df, cfg["horizon"], cfg["drop_trivial"], cfg["trivial_eps"])["rev"] + d = df[mask].reset_index(drop=True) + y = y_all[mask] + yr = d.time.dt.year.values + + tr = yr < CALIB_START + ca = (yr >= CALIB_START) & (yr < TEST_START) + te = yr >= TEST_START + print(f"train_core<{CALIB_START}: {tr.sum()} calib[{CALIB_START}-{TEST_START}): " + f"{ca.sum()} test>={TEST_START}: {te.sum()} base_rate test={y[te].mean():.3f}") + + base = make_model(cfg, num, cat) + base.fit(select_xy(d[tr], num, cat), y[tr]) + + Xte = select_xy(d[te], num, cat); yte = y[te] + p_raw = base.predict_proba(Xte)[:, 1] + + cal = CalibratedClassifierCV(FrozenEstimator(base), method=method) + cal.fit(select_xy(d[ca], num, cat), y[ca]) + p_cal = cal.predict_proba(Xte)[:, 1] + + b_raw, b_cal = brier_score_loss(yte, p_raw), brier_score_loss(yte, p_cal) + auc = roc_auc_score(yte, p_cal) + print(f"Brier grezzo={b_raw:.4f} calibrato={b_cal:.4f} (piu' basso = meglio) AUC={auc:.3f}") + + # ---- reliability plot ---- + os.makedirs(RESULTS, exist_ok=True) + xr, yr_, _ = reliability(yte, p_raw) + xc, yc, _ = reliability(yte, p_cal) + plt.figure(figsize=(5, 5)) + plt.plot([0, 1], [0, 1], "k--", lw=1, label="ideale") + plt.plot(xr, yr_, "o-", color="#c0392b", label=f"grezzo (Brier {b_raw:.3f})") + plt.plot(xc, yc, "o-", color="#27ae60", label=f"{method} (Brier {b_cal:.3f})") + plt.xlabel("probabilita' prevista"); plt.ylabel("frequenza reale di rientro") + plt.title(f"Affidabilita' rev (test >= {TEST_START})"); plt.legend(); plt.tight_layout() + plt.savefig(os.path.join(RESULTS, "mr_calibration_reliability.png"), dpi=110); plt.close() + + # ---- precisione/copertura ---- + taus = np.round(np.arange(0.50, 0.951, 0.05), 2) + pc = prec_cov(yte, p_cal, taus) + pc.to_csv(os.path.join(RESULTS, "mr_precision_coverage.csv"), index=False) + print("\nsoglia copertura precisione lift n") + for _, r in pc.iterrows(): + print(f" {r.soglia:.2f} {r.copertura*100:5.1f}% " + f"{r.precisione*100:5.1f}% {r.lift_vs_base:.2f} {int(r.n_tenuti)}") + + fig, ax1 = plt.subplots(figsize=(6, 4)) + ax1.plot(pc.soglia, pc.precisione * 100, "o-", color="#27ae60") + ax1.set_xlabel("soglia di probabilita'"); ax1.set_ylabel("precisione (% rientri)", color="#27ae60") + ax1.axhline(yte.mean() * 100, color="#7f8c8d", ls=":", label=f"base rate {yte.mean()*100:.0f}%") + ax2 = ax1.twinx() + ax2.plot(pc.soglia, pc.copertura * 100, "s--", color="#2980b9") + ax2.set_ylabel("copertura (% segnali tenuti)", color="#2980b9") + ax1.set_title("Precisione vs Copertura (rev calibrato)"); ax1.legend(loc="lower left") + fig.tight_layout(); fig.savefig(os.path.join(RESULTS, "mr_precision_coverage.png"), dpi=110) + plt.close() + + # ---- LOSO: Brier calibrato su simbolo mai visto ---- + loso = [] + for s in cfg["symbols"]: + m_tr = d.symbol.values != s; m_te = d.symbol.values == s + b = make_model(cfg, num, cat) + cv = CalibratedClassifierCV(b, method=method, cv=5) + cv.fit(select_xy(d[m_tr], num, cat), y[m_tr]) + pp = cv.predict_proba(select_xy(d[m_te], num, cat))[:, 1] + loso.append({"symbol": s, "brier": float(brier_score_loss(y[m_te], pp)), + "auc": float(roc_auc_score(y[m_te], pp)), "base": float(y[m_te].mean())}) + print("\nLOSO (calibrato, simbolo mai visto):") + for r in loso: + print(f" {r['symbol']:7s} Brier={r['brier']:.4f} AUC={r['auc']:.3f} base={r['base']:.3f}") + + with open(os.path.join(RESULTS, "mr_calibration_metrics.json"), "w") as f: + json.dump({"method": method, "brier_raw": b_raw, "brier_cal": b_cal, + "auc": auc, "test_base_rate": float(yte.mean()), "loso": loso}, f, indent=2) + + # ---- modello finale: base su (train+calib) + calibratore sull'ultimo blocco ---- + fit_mask = yr < TEST_START + base_f = make_model(cfg, num, cat); base_f.fit(select_xy(d[fit_mask], num, cat), y[fit_mask]) + final = CalibratedClassifierCV(base_f, method=method, cv=5) + final.fit(select_xy(d[fit_mask], num, cat), y[fit_mask]) + try: + import joblib + joblib.dump(final, os.path.join(RESULTS, "mr_rev_calibrated.joblib")) + except Exception as e: + print("modello non serializzato:", e) + print(f"\nsalvati grafici, tabella e modello in {RESULTS}") + return pc + + +if __name__ == "__main__": + cfg_path = sys.argv[1] if len(sys.argv) > 1 else os.path.join(HERE, "..", "config_mr.yaml") + method = sys.argv[2] if len(sys.argv) > 2 else "isotonic" + run(cfg_path, method)