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
-
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Space using freyflyy/previsione-meteo-udine-modello 1