You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Il piano wildfire prevede un motore V1 deterministico (FWI, #61) con fattori statici (#62). Come per le frane, la V1 resta champion e un challenger ML la sfida sul backtest — la pipeline esiste già tutta: feature store con CV spaziale a blocchi, MLflow, promotion gate operator-driven, shadow executor che non muta mai lo stato. Questa issue definisce il challenger incendi riusando quella infrastruttura, con le feature FIRMS/FWI.
Algoritmi candidati (letteratura mediterranea, in ordine di priorità):
Random Forest / XGBoost — costantemente i migliori nella wildfire susceptibility mediterranea; SHAP già in stack per la spiegabilità del breakdown.
Regressione logistica — baseline obbligatoria per il gate (come Caine per le frane).
MaxEnt — riferimento per dati presence-only; in pratica RF con background sampling ben fatto lo eguaglia: usarlo come confronto metodologico, non come dipendenza nuova.
ConvLSTM / U-Net spaziotemporali — esplicitamente fuori scope (V2+): costo/complessità non giustificati prima che il challenger tabellare batta la V1.
Design
1. Feature (estensione CANONICAL_FEATURES, gruppo nuovo fire.*)
Enricher dedicato stile rain_features.enrich_rain_features (idempotente: aggiorna solo righe senza blocco fire); proiezione serve-time in ml_engine._bundle_to_feature_row per la parità train/serve; feature mancanti ⇒ 0.0 (comportamento esistente).
CV spaziale a blocchi obbligatoria (round-robin sui blocchi in gradi, split_block assegnato all'estrazione) — nessuno split casuale, il leakage spaziale negli incendi è severo (ricorrenza sulle stesse celle).
Stagionalità: valutare anche uno split temporale bloccato (train ≤ anno X, test > X) come sanity check accanto alla CV spaziale.
Contesto
Il piano wildfire prevede un motore V1 deterministico (FWI, #61) con fattori statici (#62). Come per le frane, la V1 resta champion e un challenger ML la sfida sul backtest — la pipeline esiste già tutta: feature store con CV spaziale a blocchi, MLflow, promotion gate operator-driven, shadow executor che non muta mai lo stato. Questa issue definisce il challenger incendi riusando quella infrastruttura, con le feature FIRMS/FWI.
Algoritmi candidati (letteratura mediterranea, in ordine di priorità):
Design
1. Feature (estensione
CANONICAL_FEATURES, gruppo nuovofire.*)fire.density_hist(da archivio FIRMS),fire.fuel_class_norm,fire.wui_proximity_norm(da [Fase 2b] Wildfire: fattori statici (CORINE fuel, WUI), workflow MAF e backtest su perimetri EFFIS #62), riusoslope_deg.fire.fwi,fire.isi,fire.dcal giorno di valutazione (da [Fase 2a] Wildfire: motore FWI (Fire Weather Index) puro + wildfire.yaml #61: stato ricorsivo ricostruibile viafwi-backfill),rain.rain_30d_mmriusata.rain_features.enrich_rain_features(idempotente: aggiorna solo righe senza bloccofire); proiezione serve-time inml_engine._bundle_to_feature_rowper la parità train/serve; feature mancanti ⇒ 0.0 (comportamento esistente).CANONICAL_FEATURESper non invalidare i run frana esistenti — oppure, se il refactor [Fase 1] Refactor hazard-agnostic: hazard_type, registry dei motori, YAML per hazard #57 introduce feature-list per hazard, lista separatawildfire: decidere lì, questa issue si adegua.2. Training e labels
fire_eventsclusterizzati dagli hotspot FIRMS ([Fase 2d] Wildfire: archivio storico FIRMS (2000–oggi) — densità per cella e truth set per backtest/ML #66); campionamento case-control per le pseudo-assenze (stesso schema frane: stessa cella in giorni senza fuoco + celle mai bruciate, bilanciamento in YAML).split_blockassegnato all'estrazione) — nessuno split casuale, il leakage spaziale negli incendi è severo (ricorrenza sulle stesse celle).3. Gate e shadow (regole invariate)
mlflow models transition-stage); shadow scrive inmodel_runsconhazard_type='wildfire'(colonna da [Fase 1] Refactor hazard-agnostic: hazard_type, registry dei motori, YAML per hazard #57), mai sucell_results/alert.Acceptance criteria
make checkverde.Dipendenze e relazioni
Riferimenti
src/limen/ml/(feature_store, dataset.CANONICAL_FEATURES, train._check_promotion, shadow_challenger).