Predittori meteo (pioggia) ๐ฆ๏ธ
Modelli di predizione giornaliera della pioggia basato su dati meteorologici storici.
I modelli combinano preprocessing (come imputing, scaling, encoding...) per prevedere se il giorno successivo ci sarร pioggia significativa (>0.6 mm) o nulla/minima (<0.6 mm).
๐ Versioni
| Versione | Data | Note principali |
|---|---|---|
| v1.0 | 2025-08 | Modello base |
| v2.0 | 2025-12 | Migliore accuracy globale con trade-off controllato tra precisione e recall sulle classi |
๐ Novitร in V2
La versione v2 introduce miglioramenti mirati rispetto alla v1:
- accuracy globale migliorata
- recall piรน equilibrati tra classi (favoreggiando le classi piรน sbilanciate)
Modifiche principali
- uso di XGBClassifier invece che RandomForest, consentendo una modellazione piรน efficace di interazioni non lineari profonde tramite boosting sequenziale
- search dei iperparametri con GridSearch sui parametri principali
๐ Confronto Prestazioni (v1 vs v2)
| Metrica | v1 | v2 |
|---|---|---|
| Accuratezza | 71.35% | 73.21% |
| Recall (Sole) | 0.7128 | 0.7459 |
| Recall (Pioggia) | 0.7150 | 0.7009 |
| Precisione (Sole) | 0.8498 | 0.8494 |
| Precisione (Pioggia) | 0.5240 | 0.5495 |
| F1 (Sole) | 0.7753 | 0.7943 |
| F1 (Pioggia) | 0.6047 | 0.6160 |
๐ ๏ธ Task
- Tipo di problema: classificazione binaria.
- Output:
"Presente"(pioggia > 0.6 mm) o"Nulla/Minima"(pioggia โค 0.6 mm). - Input: valori meteorologici giornalieri:
- Anno
- Mese
- Fase del mese (Inizio, Meta, Fine)
- Direzione vento massimo (es. N, SO, NE)
- Temperatura minima, media e massima (ยฐC)
- Umiditร media e massima (%)
- Vento medio e massimo (km/h)
- Irradiamento solare (KJ/mยฒ)
- Pressione (Pa)
- Pioggia odierna (mm)
โ ๏ธ Nota importante: Se mancano dati per la giornata odierna, non lasciare il campo vuoto. Usare invece il valore del giorno precedente o il piรน recente disponibile.
โก Come usare il modello
V1
from huggingface_hub import hf_hub_download
import joblib
import pandas as pd
# Scarica il modello dal repo Hugging Face
model_path = hf_hub_download(repo_id="freyflyy/previsione-meteo-udine-modello", filename="model_v1.pkl") # modello base (v1)
model_dict = joblib.load(model_path)
imputer = model_dict["modello_imputer"]
encoder = model_dict["modello_encoder"]
model = model_dict["modello_predittivo"]
# Esempio input
input_dict = {
"Anno": 2025,
"Mese": "Ago",
"PosizioneMese": "Meta",
"DirVentoMax": "SO",
"TempMin [ยฐC]": 16.3,
"TempMed [ยฐC]": 23.1,
"TempMax [ยฐC]": 28.1,
"UmiditaMed [%]": 69,
"UmiditaMax [%]": 91,
"VentoMed [km/h]": 5,
"VentoMax [km/h]": 19,
"Radiazione [KJ/m2]": 25998,
"Pressione [Pa]": 100770,
"mmPioggia": 0
}
df_input = pd.DataFrame([input_dict])
# Preprocessing
numerical_cols = df_input.select_dtypes(include=[float, int]).columns.tolist()
categorical_cols = df_input.select_dtypes(include=["object"]).columns.tolist()
df_input[numerical_cols] = imputer.transform(df_input[numerical_cols])
encoded = encoder.transform(df_input[categorical_cols]).toarray()
encoded_df = pd.DataFrame(encoded, columns=encoder.get_feature_names_out(categorical_cols), index=df_input.index)
df_input_final = pd.concat([df_input.drop(columns=categorical_cols), encoded_df], axis=1)
# Predizione
pred = model.predict(df_input_final)[0]
print("Predizione pioggia:", pred)
V2
from huggingface_hub import hf_hub_download
import joblib
import pandas as pd
# Scarica il modello dal repo Hugging Face
model_path = hf_hub_download(repo_id="freyflyy/previsione-meteo-udine-modello", filename="model_v2.pkl") # modello aggiornato (v2)
model_dict = joblib.load(model_path)
imputer = model_dict["modello_imputer"]
encoder = model_dict["modello_encoder"]
model = model_dict["modello_predittivo"]
# Esempio input
input_dict = {
"Anno": 2025,
"Mese": "Ago",
"PosizioneMese": "Meta",
"TempMin_C_": 16.3,
"TempMed_C_": 23.1,
"TempMax_C_": 28.1,
"UmiditaMed_": 69,
"UmiditaMax_": 91,
"VentoMed_km_h_": 5,
"VentoMax_km_h_": 19,
"DirVentoMax": "SO",
"Radiazione_KJ_m2_": 25998,
"Pressione_Pa_": 100770,
"mmPioggia": 0,
# Lag 1
"Anno_lag_1": 2025,
"Mese_lag_1": "Lug",
"PosizioneMese_lag_1": "Fine",
"TempMin_C__lag_1": 15.8,
"TempMed_C__lag_1": 22.5,
"TempMax_C__lag_1": 27.4,
"UmiditaMed__lag_1": 71,
"UmiditaMax__lag_1": 90,
"VentoMed_km_h__lag_1": 6,
"VentoMax_km_h__lag_1": 21,
"DirVentoMax_lag_1": "O",
"Radiazione_KJ_m2__lag_1": 25200,
"Pressione_Pa__lag_1": 100820,
"mmPioggia_lag_1": 1
}
df_input = pd.DataFrame([input_dict])
# Preprocessing
numerical_cols = df_input.select_dtypes(include=[float, int]).columns.tolist()
categorical_cols = df_input.select_dtypes(include=["object"]).columns.tolist()
df_input[numerical_cols] = imputer.transform(df_input[numerical_cols])
encoded = encoder.transform(df_input[categorical_cols]).toarray()
encoded_df = pd.DataFrame(encoded, columns=encoder.get_feature_names_out(categorical_cols), index=df_input.index)
df_input_final = pd.concat([df_input.drop(columns=categorical_cols), encoded_df], axis=1)
# Predizione
preds_dict = {0:"Nulla o Minima", 1:"Presente"}
pred = model.predict(df_input_final)[0]
pred = preds_dict[pred]
print("Predizione pioggia:", pred)
IMPORTANTE
Se mancano dati per la giornata odierna, non lasciare il campo vuoto. Invece, usare quelli del giorno prima o i piรน recenti
๐ Fonte dati
I dati meteorologici possono essere prelevati dal sito dell'Arpa FVG
๐ Licenza
MIT
- Downloads last month
- -