WF-9 · Macro + ML
Feature point-in-time con release lag, robust z-score rolling, Global Economy Pulse, modelli Ridge/Elastic Net/Huber/PCA+Ridge/gradient boosting/random forest e selezione prequentiale.
Dettagli tecnici
Una lettura tecnica per sviluppatori, docenti, ricercatori e professionisti che vogliono valutare implementazione, correttezza temporale e affidabilità operativa.
Percorso progressivo
Ogni livello aggiunge dettaglio senza richiedere di ricominciare: si può entrare dal punto più adatto e proseguire verso il livello successivo.
Metodi aggiunti al laboratorio
Feature point-in-time con release lag, robust z-score rolling, Global Economy Pulse, modelli Ridge/Elastic Net/Huber/PCA+Ridge/gradient boosting/random forest e selezione prequentiale.
Gaussian Mixture a tre stati con fit causale; NetworkX per il grafo strutturale e propagazione smorzata. Bootstrap, intervalli conformal e graph ablation governano l'evidenza.
Avvezione cinematica oraria del vento a 700/500 hPa, distanza Haversine verso asset di trasporto e classi di allineamento. Non è un modello di cenere o concentrazione.
Isolation Forest descrive soltanto l'anomalia del contesto vento; GitHub Actions, source gate VONA, deduplicazione e AT Protocol/XRPC realizzano l'orchestrazione fail-closed.
Bilanci HHV/LHV, route SMR/CCS/elettrolisi, catena NH₃→urea, break-even e sensitività; Ridge/Gradient Boosting aggiungono il forecast M+1 separandolo dal calcolo fisico.
Capacity factor, meteo ECMWF, lag 1/24/168h, clear-sky e Gradient Boosting con intervalli empirici. Il proxy zero-secret resta distinto dagli actual osservati.
PCA T²/Q, residui di processo, CUSUM e voting per anomaly detection; PLS/Ridge/Random Forest/Gradient Boosting, split-conformal e Isolation Forest OOD per il soft sensor.
Bilanci HP/MP/LP, HiGHS LP/MILP, min-load, startup cost e perturb/re-opt per stimare valori marginali senza chiamarli duali MILP.
Pacchetti: WF-9 usa NumPy, pandas, scikit-learn, NetworkX, SciPy, Matplotlib, SQLite, PyYAML, requests, ReportLab/openpyxl. WF-10 usa pandas, NumPy, scikit-learn, Matplotlib, Pillow, BeautifulSoup, pypdf, pydantic, requests e integrazione Bluesky. WF-11–16 aggiungono SciPy HiGHS, scikit-learn per Gradient Boosting/PLS/Isolation Forest, SQLite e PyYAML.
Prima della matrice tecnica
Una previsione fatta lunedì non può usare un dato pubblicato martedì.
Un modello complesso va confrontato con una regola semplice, per esempio “domani sarà simile a oggi”.
Se molti eventi ricevono il 70% di probabilità, nel lungo periodo circa sette su dieci dovrebbero verificarsi.
Un modello può perdere affidabilità quando cambiano dati, contesto o relazioni.
Si rimuove una fonte o una variabile per verificare se contribuisce davvero.
Si descrive prima come il sistema può sbagliare, bloccarsi o risultare fuorviante.
Mappa architetturale
Data engineering
Ecosistema software
pandas, NumPy, SciPy, PyArrow, Pydantic, SQLite, JSON, CSV e Parquet supportano normalizzazione, tipi, timestamp, snapshot e audit.
scikit-learn, LightGBM, XGBoost, statsmodels, PyTorch opzionale e NetworkX coprono classificazione, regressione, anomalie, clustering, bootstrap e grafi.
requests, httpx, pandas-datareader, Beautiful Soup, lxml, pypdf, yfinance e ObsPy opzionale integrano API, pagine, PDF e serie pubbliche con retry e timeout.
Matplotlib, Pillow, Chart.js, Jinja2, ReportLab, openpyxl, HTML5, CSS e JavaScript producono card accessibili, dashboard e gallerie responsive.
GitHub Actions, cron, workflow_dispatch, pytest, Ruff, uv e Hatch orchestrano run, test, packaging e artifact.
AT Protocol/XRPC, TID, Bluesky, Cloudflare Pages e Worker gestiscono post standalone, sito statico e routing linguistico.
Pattern implementativi
fetch(source_date) -> RawPayload
parse(payload) -> TypedRecord
validate(record) -> QualityReportAcquisizione, parsing e controllo restano separati e testabili.
PUBLISHED | DRY_RUN
SKIPPED | BLOCKED
DEGRADED | FAILEDUn run verde non viene confuso con una pubblicazione effettiva.
feature_time <= prediction_time
source_time <= run_cutoff
outcome_time > prediction_timeTimestamp e lag espliciti riducono leakage e look-ahead.
key = hash(event_id,
source_time,
language,
content_version)Fingerprint e record key deterministici rendono sicuro il retry.
MLOps e osservabilità
pyproject.toml e lockfile;run_summary.json e provenance;NON ANCORA PRESENTATO COME IMPLEMENTATO
Model risk e validazione
| Area | Implementazione attesa | Errore evitato | Evidenza |
|---|---|---|---|
| Split temporale | train/validation/test ordinati, gap o purge quando necessario | look-ahead e contaminazione | date e numerosità dei fold |
| Baseline | naïve, climatologia, persistenza o modello semplice | skill apparente senza valore incrementale | metrica modello − baseline |
| Calibrazione | Brier, reliability curve, coverage o error bands | probabilità eccessivamente sicure | campione maturato e periodo |
| Ablation | rimozione di gruppi di feature o modalità | complessità non giustificata | delta metriche e stabilità |
| Robustezza | bootstrap, period analysis, sensitivity | risultato dipendente da pochi episodi | intervalli e worst period |
| Drift | monitoraggio di distribuzioni, errori e copertura | modello obsoleto non rilevato | serie storica e soglie |
Software e runtime
Adapter, processing, modelling, rendering e publishing rimangono separati e testabili. Le configurazioni non sono disperse nel codice.
Event ID, data-fonte, fingerprint e hash visuali impediscono doppi post e riuso involontario di card precedenti.
Gli esiti distinguono pubblicato, dry-run, saltato, bloccato e fallito; un run verde non equivale necessariamente a un post.
Lint, test unitari, test di integrazione offline, contratti strutturali e artifact precedono l’esecuzione schedulata.
Credenziali in environment protetti, permessi minimi, redazione dei log e separazione tra staging e produzione.
run_summary.json, provenance, versioni, timestamp e URI pubblicati consentono diagnosi e audit.
Matrice dei workflow
| WF | Dati e feature | Inferenza | Validazione | Stack caratterizzante | Failure mode |
|---|---|---|---|---|---|
| WF-1 | previsioni multi-città; escursione, vento, umidità, pioggia, pressione | indice rule-based con contributi limitati | controlli di coerenza e analisi di sensibilità; nessuna validazione clinica | Python, pandas, Open-Meteo, Pillow/Matplotlib | interpretare un indice educativo come previsione individuale |
| WF-2 | futures energetici, FX, lag e rolling; KPI crack 3-2-1 | modelli ad albero e forecast multi-orizzonte | split temporali, baseline, MAE/bias, bootstrap degli errori | pandas, scikit-learn/XGBoost, Parquet, report HTML | proxy di margine incompleto e relazioni instabili |
| WF-3 | serie cross-asset, rendimenti, volatilità, breadth e spread | regime, classificatore direzionale, Isolation Forest, indice composito | walk-forward, confronto baseline, stabilità per periodo | yfinance, pandas, scikit-learn, Chart.js | semplificazione di shock e dipendenze non stazionarie |
| WF-4 | basket della filiera AI, z-score, network e parametri di simulazione | indice composito, outlook 30 giorni, bootstrap, network analytics | model-vs-naïve, errori maturati e stabilità dei basket | NumPy/pandas, scikit-learn, NetworkX, Matplotlib | proxy finanziari non equivalenti a capacità industriale reale |
| WF-5 | evento GVP, gate INGV, sismi, FIRMS, venti 700/500 hPa | advezione lagrangiana, MLP di regime, DBSCAN e anomaly score opzionale | test sintetici, freshness gate, duplicate guard, fail-closed ufficiale | requests/httpx, BeautifulSoup, pypdf, Pydantic, scikit-learn, PyTorch opzionale | traiettoria del vento scambiata per concentrazione o hazard |
| WF-6 | Brent, TTF, volatilità, spread, tassi, fertilizzanti e shipping/proxy; z-score e confidence | indice pesato 0–100, EWM, ridge forecast e state machine | walk-forward OOS, Dynamic vs Static, sottoperiodi, stress window e risk analytics | pandas, SciPy, scikit-learn, statsmodels, SQLite, Jinja2/ReportLab | proxy di mercato scambiati per disponibilità fisica o segnale operativo |
| WF-7 | eventi INGV, sismicità FDSN, FIRMS, tremore e nuvole; feature point-in-time e censura | LightGBM per modalità, baseline climatologia/persistenza/Hawkes, blend e modality gate | purged walk-forward, embargo, holdout, Brier, calibrazione e scorecard maturata | pandas, PyArrow, SciPy, scikit-learn, LightGBM, pypdf, ObsPy opzionale | probabilità educativa scambiata per allerta; modalità incomplete non dichiarate |
| WF-8 | feed RSS/API, registro fonti, gruppi di indipendenza, testo e metadati di provenienza | sentiment e classificazione tema/entità/evento, similarità lessicale, event cluster o confronto tematico, templating facts-only | gate fonti, soglia di overlap 5-grammi, comunicabilità, idempotenza, verifica PDS/AppView e ricevute di audit | requests, transformers, PyTorch, pandas/NumPy, Pillow, regex, AT Protocol/XRPC, GitHub Actions | fonti non indipendenti o non ammesse, contenuto generico, riuso eccessivo, mancata pubblicazione di una lingua |
| WF-9 | World Bank WDI, FRED e OECD; lag di rilascio, lag/differenze/rolling, robust z-score, componenti del Global Pulse e feature propagate sul grafo | Ridge, Elastic Net, Huber, PCA+Ridge, HistGradientBoosting, Random Forest; ensemble robusto; GMM a 3 regimi; scenari con propagazione grafo smorzata | expanding backtest con purge gap, selezione prequentiale, baseline naive, bootstrap di skill, intervalli conformal 90%, ablation del grafo e audit anti-leakage/vintage | Python, NumPy, pandas, scikit-learn, NetworkX, SciPy, Matplotlib, SQLite, PyYAML, requests, ReportLab/openpyxl | confondere un grafo di ipotesi con causalità provata; revisioni macro, pochi OOS, break strutturali o forecast sperimentali interpretati come consiglio |
| WF-10 | INGV VONA, vento Open-Meteo 700/500 hPa, FIRMS e GIBS VIIRS; geometrie di aeroporti/strade/ferrovie/porti e provenance | avvezione cinematica oraria 12h, distanza Haversine e classi di allineamento; Isolation Forest sul contesto del vento; relay VONA rule-based | test unitari/end-to-end, data-quality e disclosure gates, deduplicazione/idempotenza, fail-closed su stato ufficiale incerto/positivo e history immutabile | Python, pandas, NumPy, scikit-learn, Matplotlib, Pillow, BeautifulSoup, pypdf, pydantic, requests, GitHub Actions, AT Protocol/XRPC | interpretare direzione/prossimità come plume, concentrazione, impatto o probabilità di disservizio; latenza o indisponibilità delle fonti |
| WF-11 | TTF EEX→BFE con gate di qualità e provenance, prezzo day-ahead per bidding zone italiana con catena Energy-Charts→euenergy/ENTSO-E, EUA e scenario di grid carbon intensity; parametri SMR/CCS/elettrolisi tipizzati HHV/LHV | calcolo deterministico; Current Variable Cost e LCOH; break-even con stato interpretativo | invarianti fisici/dimensionali, sourcing coerente, lineage, replay da snapshot | Python, NumPy, pandas, SciPy, Matplotlib, SQLite, PyYAML | confondere scenario PPA o boundary emissivi diversi con quotazioni/osservazioni reali |
| WF-12 | TTF, World Bank Pink Sheet, FX BCE, lag/stagionalità; HHV/LHV esplicito | catena NH₃/urea deterministica + Ridge/Gradient Boosting per forecast M+1 | walk-forward, persistenza, stagionalità, gas-only, baseline fisica, MAE/RMSE/bias/coverage/skill | Python, pandas, scikit-learn, SQLite, Matplotlib | confondere prezzo benchmark globale con costo europeo o nowcast con forecast |
| WF-13 | Terna Public API primaria e ENTSO-E fallback per generazione/capacità osservate; senza credenziali, proxy Open-Meteo non pubblicabile con vento a 100 m per nodi dichiarati, curva di potenza locale prima della media pesata, ECMWF D+1; lag 1/24/168h, stagionalità, clear-sky | Gradient Boosting su capacity factor; intervalli empirici | split temporale e persistenza; proxy separato da actual e mai maturato come forecast reale; baseline prospettica ENTSO-E A69 quando disponibile; nMAE/RMSE/bias/coverage/skill | Python, pandas, scikit-learn, requests, SQLite, Matplotlib | confondere proxy meteo/capacità con generazione osservata, vintage non archiviati o crescita capacità interpretata come skill |
| WF-14 | sensori multivariati CSTR generico, rumore, missing data, guasti step/drift/intermittent | ensemble drift-aware: PCA T²/Q ad alta specificità + residui bilancio vapore, raffreddamento e reazione + CUSUM lento sul residuo vapore; Isolation Forest/autoencoder come comparatori; classifier fault | parametri fissati su simulazione di sviluppo separata; stesso benchmark sintetico congelato di 28 giorni; event recall, missed rate, episodi di falso allarme/24h, delay P50/P90, confronto con ensemble v1.4.16 e anti-leakage | Python, NumPy, pandas, scikit-learn, SQLite, Matplotlib | prestazioni valide solo per il simulatore; residui di processo specifici del banco prova e classifier non calibrato richiedono validazione prima del trasferimento a impianto reale |
| WF-15 | sensori processo + laboratorio ritardato con rumore/QC | Linear, PLS, Ridge, Random Forest, Gradient Boosting; Isolation Forest OOD | RMSE/MAE/bias/coverage, skill vs ultimo lab, split-conformal e truth-vs-lab; risk-coverage solo diagnostico | Python, pandas, scikit-learn, SQLite, Matplotlib | leakage dal valore vero o soft sensor che risponde fuori dominio |
| WF-16 | domanda vapore sintetica, capacità/efficienze, TTF EEX, prezzo day-ahead per bidding zone italiana Energy-Charts con licenza verificata, EUA | HiGHS LP e MILP; dispatch e perturb/re-opt | fattibilità, bilanci, ottimalità, tempo soluzione, stabilità, reference policy | Python, SciPy HiGHS, NumPy, pandas, SQLite, Matplotlib | chiamare duali MILP i valori marginali o presentare saving simulato come risparmio reale |
Valutazione accademica e tecnica
Segnalazioni su metodologia, test, riproducibilità e possibili esperimenti sono benvenute.
Metodo multi-fonte per Bluesky
reply_to, immagini multiple per post.