Output

Transclude of poc_forecasting_benchmark-1.py

Contesto

Con la validazione di molteplici modelli di forecasting (Chronos, Chronos-2, etc.), è emersa una domanda strategica fondamentale: qual è il modello migliore per il progetto FIRE? Una decisione basata unicamente sull’usabilità dell’API o sulla popolarità del modello sarebbe stata superficiale e rischiosa.

Era necessario un metodo oggettivo e riproducibile per confrontare i candidati secondo criteri multipli e pertinenti al nostro dominio:

  1. Accuratezza Predittiva: Quale modello produce le previsioni più vicine alla realtà?
  2. Accuratezza Direzionale: Al di là del valore esatto, quale modello è più bravo a prevedere la direzione del mercato (su/giù)?
  3. Impatto sulle Risorse: Qual è il costo in termini di tempo di calcolo (latenza) e memoria VRAM? Un modello estremamente accurato ma troppo lento o pesante potrebbe essere inutilizzabile in produzione.

Decisione

Abbiamo sviluppato una suite di benchmark automatizzata (poc_forecasting_benchmark.py) per eseguire un confronto rigoroso e “testa a testa” tra i modelli di forecasting candidati.

Lo script implementa un framework completo che gestisce l’intero ciclo di valutazione:

  • Flessibilità di Input: Accetta una watchlist di ticker personalizzata tramite argomenti da riga di comando, permettendo di testare i modelli sui dati più rilevanti per i nostri casi d’uso.
  • Separazione Train/Test: Utilizza una metodologia scientificamente valida, nascondendo al modello i dati futuri (test_df) e usandoli solo per la valutazione finale.
  • Confronto Multi-Modello: Integra la logica per interagire con le API molto diverse di Prophet (modello statistico che richiede fit), Chronos e TimesFM (modelli deep learning “zero-shot”).
  • Metriche Comprensive: Calcola non solo metriche di errore standard (MAE, MAPE), ma anche la Directional Accuracy, una metrica cruciale per applicazioni finanziarie.
  • Benchmarking delle Risorse: Misura in modo preciso il tempo di inferenza e il picco di utilizzo della VRAM per ogni combinazione modello/dataset.
  • Reportistica Automatica: Genera un report finale in formato Markdown, con una tabella riassuntiva che presenta tutti i risultati in modo chiaro e confrontabile.

Conseguenze

Positive

  • Decision-Making Basato su Dati: Abbiamo ora uno strumento che trasforma una decisione qualitativa (“quale modello sembra migliore?”) in una decisione quantitativa (“quale modello ha il miglior rapporto accuratezza/prestazioni sui nostri dati?”).
  • Riproducibilità e Scalabilità: Il benchmark può essere rieseguito in qualsiasi momento per validare nuovi modelli, testare su hardware diverso o valutare l’impatto di aggiornamenti delle librerie.
  • Visione Olistica: Il report finale fornisce una visione completa che bilancia l’accuratezza con i costi computazionali, permettendo di scegliere il modello giusto per il giusto contesto (es. un modello veloce ma meno accurato per analisi in tempo reale, un modello più pesante per reportistica offline).
  • Identificazione di Punti di Forza e Debolezza: Il confronto diretto permette di capire dove ogni modello eccelle o fallisce (es. Prophet potrebbe essere più veloce, ma TimesFM potrebbe avere una migliore accuratezza direzionale).

Negative / Limitazioni

  • Complessità dello Script: La suite di benchmark è un pezzo di software complesso a sé stante e richiede manutenzione per rimanere aggiornata con le nuove versioni delle API dei modelli.
  • Durata dell’Esecuzione: Eseguire il benchmark su una watchlist estesa e con più modelli può richiedere un tempo considerevole, specialmente su hardware meno performante.
  • Sensibilità ai Parametri: I risultati dipendono dai parametri scelti (CONTEXT_LENGTH, PREDICTION_LENGTH). Il benchmark non esegue un’ottimizzazione degli iperparametri, ma confronta i modelli con una configurazione fissa.