Dettagli tecnici

Architettura, validazione, runtime e governance dei workflow.

Una lettura tecnica per sviluppatori, docenti, ricercatori e professionisti che vogliono valutare implementazione, correttezza temporale e affidabilità operativa.

Percorso progressivo

Dal risultato visibile all’implementazione.

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

World Economy Engine ed Etna Sentinel: due famiglie di calcolo diverse.

WF-10 · Modello fisico semplificato

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.

WF-10 · ML, RPA e gate

Isolation Forest descrive soltanto l'anomalia del contesto vento; GitHub Actions, source gate VONA, deduplicazione e AT Protocol/XRPC realizzano l'orchestrazione fail-closed.

WF-11/12 · Bilanci chimici + economics

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.

WF-13 · Forecast rinnovabili point-in-time

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.

WF-14/15 · Process AI controllata

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.

WF-16 · Ricerca operativa

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

Cinque domande per valutare un workflow in modo rigoroso.

  1. I dati erano realmente disponibili quando è stato prodotto il risultato?
  2. Il sistema è confrontato con un metodo più semplice?
  3. L’errore e l’incertezza sono misurati?
  4. Il comportamento cambia nel tempo?
  5. Il risultato può essere ricostruito?

Point-in-time

Una previsione fatta lunedì non può usare un dato pubblicato martedì.

Baseline

Un modello complesso va confrontato con una regola semplice, per esempio “domani sarà simile a oggi”.

Calibrazione

Se molti eventi ricevono il 70% di probabilità, nel lungo periodo circa sette su dieci dovrebbero verificarsi.

Data drift

Un modello può perdere affidabilità quando cambiano dati, contesto o relazioni.

Ablation

Si rimuove una fonte o una variabile per verificare se contribuisce davvero.

Failure mode

Si descrive prima come il sistema può sbagliare, bloccarsi o risultare fuorviante.

Mappa architetturale

Dieci livelli separano fonte, inferenza e pubblicazione.

01Source adaptersAPI, feed, file, HTML/PDF
02Data contractschema, unità, timezone, licenza
03Quality layerfreschezza, range, missing, duplicati
08Decision gatepublish, skip, block, degraded
09Renderingcard, alt text, watermark, metadata
10DeliveryActions, artifact, Bluesky, sito

Data engineering

Correttezza del dato prima della complessità del modello.

Tempo e point-in-time

  • separazione tra timestamp della fonte, acquisizione, run e pubblicazione;
  • normalizzazione UTC con timezone locale solo nella presentazione;
  • feature costruite usando esclusivamente dati disponibili alla data di previsione;
  • as-of join e lag espliciti per ridurre leakage.

Contratto e lineage

  • schema e unità attese per ogni adapter;
  • identificativo della fonte e URL di provenienza;
  • versione del parser e fingerprint numerico;
  • stato della cache e motivazione dei fallback.

Dati mancanti

  • distinzione tra zero osservato e informazione assente;
  • missing masks quando il modello deve conoscere la copertura;
  • graceful degradation solo se semanticamente sicura;
  • fail-closed per gate ufficiali o fonti critiche.

Persistenza

  • CSV/JSON/Parquet in base a audit, volume e compatibilità;
  • scritture atomiche e nomi deterministici;
  • storico ex ante distinto dagli esiti maturati;
  • stato anti-duplicazione separato dagli artifact temporanei.

Ecosistema software

Framework, librerie e protocolli per livello architetturale.

Data layer

pandas, NumPy, SciPy, PyArrow, Pydantic, SQLite, JSON, CSV e Parquet supportano normalizzazione, tipi, timestamp, snapshot e audit.

Source layer

requests, httpx, pandas-datareader, Beautiful Soup, lxml, pypdf, yfinance e ObsPy opzionale integrano API, pagine, PDF e serie pubbliche con retry e timeout.

Presentation layer

Matplotlib, Pillow, Chart.js, Jinja2, ReportLab, openpyxl, HTML5, CSS e JavaScript producono card accessibili, dashboard e gallerie responsive.

Automation layer

GitHub Actions, cron, workflow_dispatch, pytest, Ruff, uv e Hatch orchestrano run, test, packaging e artifact.

Publishing layer

AT Protocol/XRPC, TID, Bluesky, Cloudflare Pages e Worker gestiscono post standalone, sito statico e routing linguistico.

Pattern implementativi

Quattro contratti riducono l’ambiguità del runtime.

Adapter contract

fetch(source_date) -> RawPayload
parse(payload) -> TypedRecord
validate(record) -> QualityReport

Acquisizione, parsing e controllo restano separati e testabili.

Outcome state

PUBLISHED | DRY_RUN
SKIPPED | BLOCKED
DEGRADED | FAILED

Un run verde non viene confuso con una pubblicazione effettiva.

Point-in-time

feature_time <= prediction_time
source_time <= run_cutoff
outcome_time > prediction_time

Timestamp e lag espliciti riducono leakage e look-ahead.

Idempotency key

key = hash(event_id,
           source_time,
           language,
           content_version)

Fingerprint e record key deterministici rendono sicuro il retry.

MLOps e osservabilità

Il ciclo di vita include dati, modello, esecuzione e pubblicazione.

Versionamento

  • Git per codice, configurazioni e documentazione;
  • versione del package e release contract;
  • hash dei dati e della card;
  • record ex ante separati dagli esiti maturati.

Riproducibilità

  • pyproject.toml e lockfile;
  • fixture offline e seed dove applicabile;
  • snapshot di input e configurazioni;
  • artifact scaricabili dal run.

Osservabilità

  • run_summary.json e provenance;
  • timestamp di fonte, run e pubblicazione;
  • URI dei record e stato persistente;
  • messaggi espliciti per skip, block e degraded.

Evoluzione possibile

  • container OCI/Docker e registry;
  • DVC o MLflow per lineage sperimentale;
  • OpenTelemetry e Prometheus/Grafana;
  • FastAPI per servizi controllati.

NON ANCORA PRESENTATO COME IMPLEMENTATO

Model risk e validazione

Il modello complesso deve battere una baseline pertinente fuori campione.

Protocollo di valutazione
AreaImplementazione attesaErrore evitatoEvidenza
Split temporaletrain/validation/test ordinati, gap o purge quando necessariolook-ahead e contaminazionedate e numerosità dei fold
Baselinenaïve, climatologia, persistenza o modello sempliceskill apparente senza valore incrementalemetrica modello − baseline
CalibrazioneBrier, reliability curve, coverage o error bandsprobabilità eccessivamente sicurecampione maturato e periodo
Ablationrimozione di gruppi di feature o modalitàcomplessità non giustificatadelta metriche e stabilità
Robustezzabootstrap, period analysis, sensitivityrisultato dipendente da pochi episodiintervalli e worst period
Driftmonitoraggio di distribuzioni, errori e coperturamodello obsoleto non rilevatoserie storica e soglie

Software e runtime

Affidabilità operativa come parte del risultato.

Modularità

Adapter, processing, modelling, rendering e publishing rimangono separati e testabili. Le configurazioni non sono disperse nel codice.

Idempotenza

Event ID, data-fonte, fingerprint e hash visuali impediscono doppi post e riuso involontario di card precedenti.

State machine

Gli esiti distinguono pubblicato, dry-run, saltato, bloccato e fallito; un run verde non equivale necessariamente a un post.

CI/CD

Lint, test unitari, test di integrazione offline, contratti strutturali e artifact precedono l’esecuzione schedulata.

Secrets e sicurezza

Credenziali in environment protetti, permessi minimi, redazione dei log e separazione tra staging e produzione.

Osservabilità

run_summary.json, provenance, versioni, timestamp e URI pubblicati consentono diagnosi e audit.

Matrice dei workflow

Metodi implementati e criteri specifici.

Architetture e metodi per workflow
WFDati e featureInferenzaValidazioneStack caratterizzanteFailure mode
WF-1previsioni multi-città; escursione, vento, umidità, pioggia, pressioneindice rule-based con contributi limitaticontrolli di coerenza e analisi di sensibilità; nessuna validazione clinicaPython, pandas, Open-Meteo, Pillow/Matplotlibinterpretare un indice educativo come previsione individuale
WF-2futures energetici, FX, lag e rolling; KPI crack 3-2-1modelli ad albero e forecast multi-orizzontesplit temporali, baseline, MAE/bias, bootstrap degli erroripandas, scikit-learn/XGBoost, Parquet, report HTMLproxy di margine incompleto e relazioni instabili
WF-3serie cross-asset, rendimenti, volatilità, breadth e spreadregime, classificatore direzionale, Isolation Forest, indice compositowalk-forward, confronto baseline, stabilità per periodoyfinance, pandas, scikit-learn, Chart.jssemplificazione di shock e dipendenze non stazionarie
WF-4basket della filiera AI, z-score, network e parametri di simulazioneindice composito, outlook 30 giorni, bootstrap, network analyticsmodel-vs-naïve, errori maturati e stabilità dei basketNumPy/pandas, scikit-learn, NetworkX, Matplotlibproxy finanziari non equivalenti a capacità industriale reale
WF-5evento GVP, gate INGV, sismi, FIRMS, venti 700/500 hPaadvezione lagrangiana, MLP di regime, DBSCAN e anomaly score opzionaletest sintetici, freshness gate, duplicate guard, fail-closed ufficialerequests/httpx, BeautifulSoup, pypdf, Pydantic, scikit-learn, PyTorch opzionaletraiettoria del vento scambiata per concentrazione o hazard
WF-6Brent, TTF, volatilità, spread, tassi, fertilizzanti e shipping/proxy; z-score e confidenceindice pesato 0–100, EWM, ridge forecast e state machinewalk-forward OOS, Dynamic vs Static, sottoperiodi, stress window e risk analyticspandas, SciPy, scikit-learn, statsmodels, SQLite, Jinja2/ReportLabproxy di mercato scambiati per disponibilità fisica o segnale operativo
WF-7eventi INGV, sismicità FDSN, FIRMS, tremore e nuvole; feature point-in-time e censuraLightGBM per modalità, baseline climatologia/persistenza/Hawkes, blend e modality gatepurged walk-forward, embargo, holdout, Brier, calibrazione e scorecard maturatapandas, PyArrow, SciPy, scikit-learn, LightGBM, pypdf, ObsPy opzionaleprobabilità educativa scambiata per allerta; modalità incomplete non dichiarate
WF-8feed RSS/API, registro fonti, gruppi di indipendenza, testo e metadati di provenienzasentiment e classificazione tema/entità/evento, similarità lessicale, event cluster o confronto tematico, templating facts-onlygate fonti, soglia di overlap 5-grammi, comunicabilità, idempotenza, verifica PDS/AppView e ricevute di auditrequests, transformers, PyTorch, pandas/NumPy, Pillow, regex, AT Protocol/XRPC, GitHub Actionsfonti non indipendenti o non ammesse, contenuto generico, riuso eccessivo, mancata pubblicazione di una lingua
WF-9World Bank WDI, FRED e OECD; lag di rilascio, lag/differenze/rolling, robust z-score, componenti del Global Pulse e feature propagate sul grafoRidge, Elastic Net, Huber, PCA+Ridge, HistGradientBoosting, Random Forest; ensemble robusto; GMM a 3 regimi; scenari con propagazione grafo smorzataexpanding backtest con purge gap, selezione prequentiale, baseline naive, bootstrap di skill, intervalli conformal 90%, ablation del grafo e audit anti-leakage/vintagePython, NumPy, pandas, scikit-learn, NetworkX, SciPy, Matplotlib, SQLite, PyYAML, requests, ReportLab/openpyxlconfondere un grafo di ipotesi con causalità provata; revisioni macro, pochi OOS, break strutturali o forecast sperimentali interpretati come consiglio
WF-10INGV VONA, vento Open-Meteo 700/500 hPa, FIRMS e GIBS VIIRS; geometrie di aeroporti/strade/ferrovie/porti e provenanceavvezione cinematica oraria 12h, distanza Haversine e classi di allineamento; Isolation Forest sul contesto del vento; relay VONA rule-basedtest unitari/end-to-end, data-quality e disclosure gates, deduplicazione/idempotenza, fail-closed su stato ufficiale incerto/positivo e history immutabilePython, pandas, NumPy, scikit-learn, Matplotlib, Pillow, BeautifulSoup, pypdf, pydantic, requests, GitHub Actions, AT Protocol/XRPCinterpretare direzione/prossimità come plume, concentrazione, impatto o probabilità di disservizio; latenza o indisponibilità delle fonti
WF-11TTF 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/LHVcalcolo deterministico; Current Variable Cost e LCOH; break-even con stato interpretativoinvarianti fisici/dimensionali, sourcing coerente, lineage, replay da snapshotPython, NumPy, pandas, SciPy, Matplotlib, SQLite, PyYAMLconfondere scenario PPA o boundary emissivi diversi con quotazioni/osservazioni reali
WF-12TTF, World Bank Pink Sheet, FX BCE, lag/stagionalità; HHV/LHV esplicitocatena NH₃/urea deterministica + Ridge/Gradient Boosting per forecast M+1walk-forward, persistenza, stagionalità, gas-only, baseline fisica, MAE/RMSE/bias/coverage/skillPython, pandas, scikit-learn, SQLite, Matplotlibconfondere prezzo benchmark globale con costo europeo o nowcast con forecast
WF-13Terna 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-skyGradient Boosting su capacity factor; intervalli empiricisplit temporale e persistenza; proxy separato da actual e mai maturato come forecast reale; baseline prospettica ENTSO-E A69 quando disponibile; nMAE/RMSE/bias/coverage/skillPython, pandas, scikit-learn, requests, SQLite, Matplotlibconfondere proxy meteo/capacità con generazione osservata, vintage non archiviati o crescita capacità interpretata come skill
WF-14sensori multivariati CSTR generico, rumore, missing data, guasti step/drift/intermittentensemble 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 faultparametri 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-leakagePython, NumPy, pandas, scikit-learn, SQLite, Matplotlibprestazioni 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-15sensori processo + laboratorio ritardato con rumore/QCLinear, PLS, Ridge, Random Forest, Gradient Boosting; Isolation Forest OODRMSE/MAE/bias/coverage, skill vs ultimo lab, split-conformal e truth-vs-lab; risk-coverage solo diagnosticoPython, pandas, scikit-learn, SQLite, Matplotlibleakage dal valore vero o soft sensor che risponde fuori dominio
WF-16domanda vapore sintetica, capacità/efficienze, TTF EEX, prezzo day-ahead per bidding zone italiana Energy-Charts con licenza verificata, EUAHiGHS LP e MILP; dispatch e perturb/re-optfattibilità, bilanci, ottimalità, tempo soluzione, stabilità, reference policyPython, SciPy HiGHS, NumPy, pandas, SQLite, Matplotlibchiamare duali MILP i valori marginali o presentare saving simulato come risparmio reale

Valutazione accademica e tecnica

Domande utili per una revisione indipendente.

  • La data di origine di ogni dato è ricostruibile?
  • Le feature rispettano la disponibilità point-in-time?
  • La baseline è appropriata al problema?
  • Gli iperparametri sono selezionati senza contaminare il test?
  • Il campione di esiti maturati è sufficiente?
  • Le metriche includono denominatore e periodo?
  • I dati mancanti causano blocco o degradazione esplicita?
  • I risultati sono riproducibili da configurazione e versione?
  • I failure mode sono testati o solo descritti?
  • La pubblicazione è idempotente e auditabile?
  • La licenza delle fonti consente il riuso previsto?
  • È chiaro cosa è implementato e cosa è estensione di ricerca?

Metodo multi-fonte per Bluesky

Componenti tecniche del workflow WF-8.

Source policy e copyright

  • registro domini con source_class, risk_tier e reuse_mode;
  • solo fatti comunicabili e immagini renderizzate localmente;
  • gate anti-riuso con controllo di overlap su 5-grammi.

NLP e confronto

  • classificazione di sentiment, tema, entità ed evento;
  • allineamento fra fonti tramite similarità lessicale e firme di dominio;
  • distinzione esplicita tra event cluster e confronto tematico.

Templating e pubblicazione

  • template facts-only per titolo, takeaway, “perché conta” e lente tecnica;
  • post root separati per italiano e inglese;
  • facets verso le fonti, nessun reply_to, immagini multiple per post.

Pacchetti usati

  • requests per raccolta feed e API;
  • transformers e torch per l’arricchimento NLP;
  • Pillow, matplotlib, pandas, numpy, regex per rendering, dati e limiti Bluesky.