SQL — variazione % anno su anno (window function)
WITH prezzo_annuo_provincia AS (
SELECT Prov, Anno,
ROUND(AVG(Prezzo_medio_mq), 0) AS Prezzo_medio_annuo
FROM omi_qi_vcn
GROUP BY Prov, Anno
)
SELECT
Prov, Anno, Prezzo_medio_annuo,
LAG(Prezzo_medio_annuo) OVER (
PARTITION BY Prov ORDER BY Anno
) AS Prezzo_Anno_Precedente,
ROUND(
(Prezzo_medio_annuo - LAG(Prezzo_medio_annuo) OVER (
PARTITION BY Prov ORDER BY Anno
)) * 100.0 / LAG(Prezzo_medio_annuo) OVER (
PARTITION BY Prov ORDER BY Anno
), 2
) AS Variazione_Percentuale
FROM prezzo_annuo_provincia
ORDER BY Prov, Anno;
Python — selezione del miglior ordine SARIMAX per AIC
def trova_miglior_ordine(y_train, esogene_train, ordini):
miglior_aic = float('inf')
miglior_ordine = None
for ordine, ordine_stagionale in ordini:
try:
modello = SARIMAX(
y_train,
exog=esogene_train,
order=ordine,
seasonal_order=ordine_stagionale,
enforce_stationarity=False,
enforce_invertibility=False,
)
risultato = modello.fit(disp=False)
if risultato.aic < miglior_aic:
miglior_aic = risultato.aic
miglior_ordine = ordine
except Exception:
continue
return miglior_ordine, miglior_aic