Nessuna stazione anomala rilevata
Tutte le stazioni sono entro i limiti di tolleranza
| Stazione | Fonte | Param | MAE 24h | Bias 24h | Motivo | Rilevato |
|---|---|---|---|---|---|---|
|
= htmlspecialchars($station['station_name'] ?? 'Station ' . $station['station_id']) ?>
= number_format($station['latitude'] ?? 0, 4) ?>, = number_format($station['longitude'] ?? 0, 4) ?> (= round($station['altitude'] ?? 0) ?>m) |
= htmlspecialchars($station['station_fonte'] ?? '-') ?> | = htmlspecialchars($station['shortname'] ?? '-') ?> | = number_format($mae, 2) ?>° | = number_format($bias, 2) ?>° INV? += number_format($bias, 2) ?>° | = htmlspecialchars($station['anomaly_reason'] ?? '-') ?> | = date('d/m H:i', strtotime($station['anomaly_detected_at'])) ?> - |
| Ora | Stazione | Param | Stato | MAE | Motivo |
|---|---|---|---|---|---|
| = date('d/m H:i', strtotime($change['updated_at'])) ?> | = htmlspecialchars($change['station_name'] ?? 'Station ' . $change['station_id']) ?> | = htmlspecialchars($change['shortname'] ?? '-') ?> | ANOMALA OK | = number_format($change['loocv_mae_24h'] ?? 0, 2) ?>° | = htmlspecialchars($change['anomaly_reason'] ?? '-') ?> |
Il sistema di controllo qualità spaziale opera su due livelli distinti:
station_loocv_history.update_loocv_qc.php analizza periodicamente le statistiche aggregate (ultime 24h) e decide se flaggare una stazione come anomala nella tabella station_loocv_stats.LOOCV (Leave-One-Out Cross-Validation) è una tecnica di validazione incrociata spaziale:
errore = valore_osservato - valore_interpolato.Vengono calcolati due indicatori aggregati sulle ultime 24 ore:
Non tutte le stazioni hanno lo stesso peso nell'interpolazione. Il sistema classifica le fonti in 5 livelli di affidabilità:
| Livello | Peso | Descrizione | Esempi |
|---|---|---|---|
| TIER 1 | 1.0 | Servizi meteorologici nazionali, reti WMO/SYNOP | AEMET, Météo-France, MeteoSwiss, METAR, Mistral |
| TIER 2 | 0.9 | Agenzie regionali, istituzioni di ricerca | ARPAE, ARPAL, SIR Toscana, ISPRA, FMACH |
| TIER 3 | 0.7 | PWS professionali (Davis/WeatherLink) | WeatherLink |
| TIER 4 | 0.5 | Reti PWS consumer | Ecowitt, Netatmo, Weather Underground |
| TIER 5 | 0.3 | Fonti non verificate | Sorgenti sconosciute |
Il peso influenza quanto una stazione contribuisce all'interpolazione dei vicini. Le stazioni TIER 1/2 hanno maggiore influenza spaziale.
Una stazione viene flaggata come anomala quando soddisfa TUTTE queste condizioni:
loocv_count_24h ≥ 6).MAEstazione > 3 × MAEglobale).Per il parametro temperatura, le stazioni con bias negativo consistente (leggono sistematicamente più freddo del previsto) non vengono flaggate, anche se il MAE supera la soglia. Questo perché un bias freddo spesso indica una stazione in zona di inversione termica reale (fondovalle, conche) dove le temperature sono genuinamente più basse di quanto l'interpolazione spaziale prevederebbe.
Le stazioni appartenenti a fonti istituzionali (TIER 1 e TIER 2) non vengono mai flaggate dal sistema automatico. Motivazione:
Se una stazione TIER 1/2 era stata precedentemente flaggata, viene automaticamente de-flaggata con motivo "Exempt: institutional source (TIER 1/2)".
Queste stazioni restano comunque nel calcolo LOOCV (gli errori vengono calcolati e storicizzati), ma il flag is_anomalous non viene mai impostato a TRUE.
Quando una stazione TIER 3-5 viene flaggata come anomala:
Una stazione flaggata viene automaticamente ri-inclusa dopo 24 ore di valori normali (MAE sotto soglia). Il campo last_ok_at traccia l'ultimo momento in cui la stazione ha avuto valori nella norma. Quando last_ok_at è più vecchio di 24h, il flag viene rimosso.
station_loocv_history: storico errori per ogni ciclo di interpolazione (retention: 7 giorni).station_loocv_stats: statistiche aggregate 24h, flag is_anomalous, motivo anomalia.| Parametro | Default | Descrizione |
|---|---|---|
threshold_multiplier | 3.0 | Moltiplicatore soglia (MAE > N × MAE globale) |
min_samples_24h | 6 | Campioni minimi per valutare anomalia |
auto_reset_after_hours | 24 | Ore di normalità prima del reset automatico |
protect_inversions | true | Non flaggare bias negativi (temperature) |
history_retention_days | 7 | Giorni di retention storico errori |