Filtro Hodrick-Prescott (HP): Guida Completa, Formula ed Esempi Python (ISTAT Incluso)

Cerca:

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors
come usare filtro hodrick-prescott

Il Filtro di Hodrick-Prescott: Un’Analisi Approfondita

Introduzione

Quando osserviamo una serie temporale economica, come l’andamento del PIL, notiamo due comportamenti distinti:

  • un trend di lungo periodo, che mostra la crescita o decrescita strutturale dell’economia;
  • delle oscillazioni di breve periodo, legate a crisi, riprese, eventi politici o finanziari.

Come possiamo distinguere queste due componenti? Una risposta viene dal filtro di Hodrick-Prescott, uno degli strumenti più usati in macroeconomia per analizzare il ciclo economico.

Cos’è il Filtro di Hodrick-Prescott?

Il filtro di Hodrick-Prescott (HP) è un metodo statistico per scomporre una serie temporale in:

  • Trend: la componente che riflette l’andamento di lungo periodo.
  • Ciclo: le fluttuazioni attorno al trend, che rappresentano il ciclo economico.

 È uno strumento di “levigatura” della serie: non spiega perché l’economia si comporta in un certo modo, ma aiuta a vederlo meglio.

La Formula Matematica

L’idea alla base del filtro HP è semplice ma potente. Dato un insieme di osservazioni [math]\{ y_t \}[/math], si vuole trovare una sequenza [math]\{ \tau_t \}[/math] che rappresenti il trend minimizzando:

[math]\begin{align*} \min_{\{\tau_t\}} \left( \sum_{t=1}^T (y_t – \tau_t)^2 \right. \\ \left. + \lambda \sum_{t=2}^{T-1} \left[(\tau_{t+1} – \tau_t) – (\tau_t – \tau_{t-1})\right]^2 \right) \end{align*}[/math]

Cosa significano i due termini?

  • Fedeltà ai dati: il primo termine fa in modo che il trend [math]\tau_t[/math] sia vicino ai dati osservati [math]y_t[/math].
  • Regolarità del trend: il secondo termine penalizza le variazioni brusche della pendenza del trend.

Il parametro [math]\lambda[/math] regola il compromesso tra questi due obiettivi:

  • Se [math]\lambda[/math] è basso: il trend segue da vicino la serie (meno levigato).
  • Se [math]\lambda[/math] è alto: il trend è più regolare (più levigato), ma meno aderente ai dati.

Come si Sceglie [math]\lambda[/math]?

La scelta di [math]\lambda[/math] è empirica, non teorica. Si basa su studi che cercano di catturare cicli di 2–8 anni:

  • Dati annuali: [math]\lambda = 6.25[/math]
  • Dati trimestrali: [math]\lambda = 1600[/math]
  • Dati mensili: [math]\lambda = 129600[/math]

 Questi valori non sono “magici”, ma funzionano bene nella pratica secondo la frequenza dei dati.

Quando Usarlo (e i suoi limiti)

✅ Utilizzo consigliato:

  • Analisi descrittiva di cicli economici.
  • Scomposizione di serie storiche (es. PIL, occupazione).
  • Costruzione di grafici o modelli che separano trend e ciclo.

⚠️ Limiti da conoscere:

  • Il filtro non ha basi teoriche economiche profonde, è uno strumento puramente statistico.
  • Sensibile alla scelta di [math]\lambda[/math].
  • Soffre di edge effects: agli estremi della serie (inizio e fine), le stime possono essere meno affidabili.
  • Non adatto a previsioni, perché non è un modello dinamico.
Forse potrebbe interessarti anche:  2026: L'Era di PyArrow

Conclusione

Il filtro di Hodrick-Prescott è uno strumento potente e intuitivo per chi vuole analizzare i dati economici senza costruire modelli troppo complessi. Pur con i suoi limiti, permette di rispondere a una domanda essenziale: quanto di ciò che vediamo è crescita strutturale e quanto è solo un ciclo temporaneo?

Pubblicità

Esempio pratico

Immagina il PIL di un paese che ogni trimestre sale un po’, ma ogni tanto ha dei salti o dei cali per crisi, eventi speciali, ecc.

l filtro HP ti aiuta a:

  • Disegnare la curva “di lungo termine” che rappresenta dove sta andando davvero l’economia.
  • Isolare le oscillazioni cicliche (es. una crisi temporanea o un boom passeggero).

 Implementazione del Filtro Hodrick-Prescott in Python

Ecco una semplice implementazione del filtro di Hodrick-Prescott in Python con un esempio pratico, utilizzando la libreria statsmodels, che ha già una funzione pronta per il filtro HP.

 1. Installazione della libreria (se non l’hai già)

Apri il terminale o il prompt dei comandi ed esegui:

pip install statsmodels

2. Esempio completo in Python

Questo script crea una serie temporale fittizia, le applica il filtro HP e visualizza i risultati:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.filters.hp_filter import hpfilter

# Creiamo una serie temporale fittizia (es. PIL trimestrale)
np.random.seed(0)
date_range = pd.date_range(start='2000-01-01', periods=80, freq='Q')
trend_real = np.linspace(100, 140, 80)  # Tendenza crescente
ciclo = 2 * np.sin(np.linspace(0, 10, 80))  # Ciclicità artificiale
noise = np.random.normal(scale=1.5, size=80)  # Rumore

# Serie osservata = trend + ciclo + rumore
serie = trend_real + ciclo + noise
serie = pd.Series(serie, index=date_range)

# Applichiamo il filtro di Hodrick-Prescott
ciclo_hp, trend_hp = hpfilter(serie, lamb=1600)

# Plot dei risultati
plt.figure(figsize=(12,6))
plt.plot(serie, label='Serie originale', color='lightgray')
plt.plot(trend_hp, label='Trend di lungo periodo (HP)', color='blue')
plt.plot(ciclo_hp, label='Componente ciclica (HP)', color='orange', alpha=0.6)
plt.title('Filtro Hodrick-Prescott su una serie simulata')
plt.legend()
plt.grid(True)
plt.show()

Filtro Hodrick-Prescott

l grafico rappresenta in modo chiaro l’applicazione del filtro di Hodrick-Prescott a una serie temporale simulata, ad esempio il PIL trimestrale.

Ecco l’analisi dettagliata:


Serie originale (grigio chiaro)

  • È la linea seghettata che oscilla attorno a un andamento crescente.

  • Simula l’andamento osservato di un dato macroeconomico (es. PIL) con:

    • una tendenza di fondo crescente,

    • delle oscillazioni cicliche (es. crisi, riprese),

    • e un po’ di rumore casuale.


🔵 Trend di lungo periodo (HP)

  • Rappresentato dalla linea blu liscia.

  • Mostra l’andamento strutturale dell’economia: una crescita costante dal 2000 al 2020.

  • È il risultato del filtro HP che, minimizzando la curvatura, smorza le fluttuazioni di breve periodo.

  • La sua forma “morbida” evidenzia l’effetto del parametro λ=1600\lambda = 1600: si privilegia una tendenza stabile piuttosto che adattarsi troppo ai dati rumorosi.

Forse potrebbe interessarti anche:  Test t Appaiato: Guida Pratica con Esempio, Calcoli e Codice Python (SciPy)

🟠 Componente ciclica (HP)

  • È la linea arancione vicino allo zero.

  • Mostra le deviazioni temporanee rispetto al trend, cioè:

    Ciclo=Serie osservata−Trend\text{Ciclo} = \text{Serie osservata} – \text{Trend}

  • Si notano piccoli cicli economici simulati (positivi e negativi), con una certa regolarità e ritorno verso lo zero, come tipico dei cicli economici.

Osservazioni conclusive

  • Il filtro ha svolto correttamente il suo compito: separare un trend stabile da una componente ciclica.

Spiegazione del codice

hpfilter(serie, lamb=1600) restituisce due serie:

  • ciclo_hp: la componente ciclica
  • trend_hp: la tendenza di lungo periodo

[math]\lambda = 1600[/math] è lo standard per dati trimestrali.

Varianti

  • Se hai dati annuali, imposta [math]\lambda = 100[/math].
  • Se hai dati mensili, usa [math]\lambda = 14400[/math].

Ecco un esempio completo di codice Python che puoi eseguire localmente per applicare il filtro di Hodrick-Prescott ai dati ISTAT relativi al PIL italiano:

Nota sull’uso dei dati ISTAT: Prezzi Correnti vs. Volumi (Prezzi Concatenati)

Nell’esempio ISTAT fornito, abbiamo utilizzato il PIL “ai prezzi di mercato”, che si riferisce ai prezzi correnti. Questo significa che il valore del PIL include sia la crescita reale (aumento delle quantità prodotte) sia l’effetto dell’inflazione (aumento dei prezzi nel tempo).

Per l’analisi del ciclo economico, che mira a isolare le fluttuazioni dell’attività economica reale, è spesso preferibile utilizzare dati a volumi concatenati (o a “prezzi costanti”, anche se la metodologia di concatenamento è più precisa). I dati a volumi concatenati rimuovono l’effetto dell’inflazione, fornendo una misura più accurata delle variazioni nelle quantità prodotte.

Mentre l’applicazione tecnica del filtro HP è identica per entrambe le serie (prezzi correnti o volumi), l’interpretazione della componente ciclica estratta sarà diversa: il ciclo basato sui prezzi correnti potrebbe riflettere in parte anche dinamiche inflazionistiche o deflazionistiche, mentre il ciclo basato sui volumi rifletterà più strettamente le fluttuazioni dell’attività produttiva reale.

Nell’esempio, l’uso dei prezzi correnti dimostra correttamente l’applicazione del filtro; tuttavia, in un’analisi economica formale del ciclo, si raccomanda l’uso dei dati a volumi concatenati (se disponibili nella stessa tabella ISTAT o in tabelle correlate).

Codice Python: Filtro Hodrick-Prescott su dati ISTAT (PIL trimestrale)

import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.filters.hp_filter import hpfilter

# === 1. Carica il CSV ISTAT ===
df = pd.read_csv("Prodotto interno lordo e principali componenti (IT1,163_184_DF_DCCN_PILQ_1,1.0).csv", sep=";", encoding="utf-8")

# === 2. Filtro per PIL, prezzi correnti, dati destagionalizzati ===
df_pil = df[
    (df["Aggregato"] == "Prodotto interno lordo ai prezzi di mercato") &
    (df["Correzione"] == "Dati destagionalizzati")
]

# === 3. Estrai date e valori ===
df_series = df_pil[["TIME_PERIOD", "Osservazione"]].copy()
df_series["TIME_PERIOD"] = pd.PeriodIndex(df_series["TIME_PERIOD"], freq='Q').to_timestamp()
df_series.columns = ["Data", "PIL"]
df_series = df_series.sort_values("Data").reset_index(drop=True)

# === 4. Applica il filtro Hodrick-Prescott ===
cycle, trend = hpfilter(df_series["PIL"], lamb=1600)  # 1600 è lo standard per dati trimestrali
df_series["Trend_HP"] = trend
df_series["Ciclo_HP"] = cycle

# === 5. Grafico ===
plt.figure(figsize=(12, 6))
plt.plot(df_series["Data"], df_series["PIL"], label="PIL reale (destagionalizzato)", color="lightgray")
plt.plot(df_series["Data"], df_series["Trend_HP"], label="Trend di lungo periodo (HP)", color="blue")
plt.plot(df_series["Data"], df_series["Ciclo_HP"], label="Componente ciclica (HP)", color="orange", alpha=0.6)
plt.title("Filtro Hodrick-Prescott sul PIL italiano (ISTAT)")
plt.xlabel("Anno")
plt.ylabel("Valore in milioni di euro")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.show()

Filtro Hodrick-Prescott sul PIL italiano destagionalizzato

Conclusione

Il Filtro di Hodrick-Prescott si conferma uno strumento fondamentale e largamente impiegato nell’analisi macroeconomica. La sua forza risiede nella capacità di fornire un metodo chiaro e replicabile per disaggregare una serie storica nelle sue componenti essenziali: il trend di lungo periodo e le fluttuazioni cicliche.

Attraverso un elegante problema di ottimizzazione, che bilancia il “fit” ai dati originali e la “regolarità” della linea di trend tramite la scelta del parametro , il filtro HP permette di visualizzare l’andamento strutturale di fenomeni come il PIL, isolando al contempo le oscillazioni temporanee tipiche del ciclo economico.

Pur essendo uno strumento statistico e non basato su un modello economico causale, e pur presentando limiti noti (come la gestione degli “edge effects” e la dipendenza dalla scelta di ), la sua semplicità d’uso e la sua interpretazione intuitiva lo rendono prezioso per analisi descrittive e comparative.

Come dimostrato dagli esempi in Python, applicare il filtro HP è un processo diretto grazie a librerie dedicate, rendendolo accessibile per chiunque voglia esplorare le dinamiche di trend e ciclo nei dati economici. Comprendere queste due componenti è un passo cruciale per interpretare correttamente lo stato di salute di un’economia e le forze che la modellano nel tempo.

Pubblicità