10.6 Predittori ritardati

A volte l’impatto di un predittore incluso in un modello di regressione non è semplice e immediato. Una campagna pubblicitaria può avere, ad esempio, un impatto sulle vendite per un certo periodo di tempo dopo la fine della campagna, e le vendite in un mese dipenderanno dalla spesa pubblicitaria in ciascuno dei mesi precedenti. Allo stesso modo, un cambiamento nella politica di sicurezza di un’azienda può ridurre immediatamente gli incidenti, ma avere un effetto decrescente nel tempo, poiché i dipendenti potrebbero fare meno attenzione quando acquisiscono familiarità con le nuove condizioni di lavoro.

In queste situazioni, è necessario tenere conto degli effetti ritardati del predittore. Si supponga di avere un solo predittore nel modello. Un modello che permette di utilizzare effetti ritardati può essere scritto come \[ y_t = \beta_0 + \gamma_0x_t + \gamma_1 x_{t-1} + \dots + \gamma_k x_{t-k} + \eta_t, \] dove \(\eta_t\) segue un processo ARIMA. Il valore di \(k\) può essere selezionato usando l’AICc, insieme ai valori di \(p\) e \(q\) per l’errore ARIMA.

Esempio: Pubblicità televisiva e preventivi assicurativi

Una compagnia di assicurazioni statunitense fa pubblicità sulla televisione nazionale nel tentativo di aumentare il numero di preventivi assicurativi forniti (e di conseguenza il numero di nuove polizze). La figura 10.12 mostra il numero di preventivi e la spesa per la pubblicità televisiva della compagnia ogni mese da gennaio 2002 ad aprile 2005.

insurance %>%
  pivot_longer(Quotes:TVadverts) %>%
  ggplot(aes(x = Month, y = value)) +
  geom_line() +
  facet_grid(vars(name), scales = "free_y") +
  labs(x = "Mese", y = "", title = "Pubblicità e preventivi assicurativi")
Numero di preventivi assicurativi forniti mensilmente e spesa pubblicitaria mensile.

Figura 10.12: Numero di preventivi assicurativi forniti mensilmente e spesa pubblicitaria mensile.

Si considera l’inclusione delle spese pubblicitarie per un massimo di quattro mesi; questo significa che il modello includerà le spese pubblicitarie del mese corrente e dei tre mesi precedenti. Quando si confrontano i modelli, è importante che tutti utilizzino lo stesso insieme di dati per stimare i parametri. Nel codice seguente, si escludono pertanto i primi tre mesi per fare confronti tra i modelli considerati.

fit <- insurance %>%
  # Restrict data so models use same fitting period
  mutate(Quotes = c(NA, NA, NA, Quotes[4:40])) %>%
  # Estimate models
  model(
    lag0 = ARIMA(Quotes ~ pdq(d = 0) + TVadverts),
    lag1 = ARIMA(Quotes ~ pdq(d = 0) +
                 TVadverts + lag(TVadverts)),
    lag2 = ARIMA(Quotes ~ pdq(d = 0) +
                 TVadverts + lag(TVadverts) +
                 lag(TVadverts, 2)),
    lag3 = ARIMA(Quotes ~ pdq(d = 0) +
                 TVadverts + lag(TVadverts) +
                 lag(TVadverts, 2) + lag(TVadverts, 3))
  )

Si sceglie poi il ritardo ottimale con il quale includere la variabile pubblicità utilizzando il criterio dell’AICc.

glance(fit)
#> # A tibble: 4 × 8
#>   .model sigma2 log_lik   AIC  AICc   BIC ar_roots  ma_roots 
#>   <chr>   <dbl>   <dbl> <dbl> <dbl> <dbl> <list>    <list>   
#> 1 lag0    0.265   -28.3  66.6  68.3  75.0 <cpl [2]> <cpl [0]>
#> 2 lag1    0.209   -24.0  58.1  59.9  66.5 <cpl [1]> <cpl [1]>
#> 3 lag2    0.215   -24.0  60.0  62.6  70.2 <cpl [1]> <cpl [1]>
#> 4 lag3    0.206   -22.2  60.3  65.0  73.8 <cpl [1]> <cpl [1]>

Il modello migliore (con il valore dell’indice AICc più piccolo) è lag1 con due predittori; questo significa che il modello ottimo include solo la pubblicità nel mese corrente e nel mese precedente. Si stima ora nuovamente quel modello, usando questa volta tutti i dati disponibili.

fit_best <- insurance %>%
  model(ARIMA(Quotes ~ pdq(d = 0) +
              TVadverts + lag(TVadverts)))
report(fit_best)
#> Series: Quotes 
#> Model: LM w/ ARIMA(1,0,2) errors 
#> 
#> Coefficients:
#>          ar1     ma1     ma2  TVadverts  lag(TVadverts)  intercept
#>       0.5123  0.9169  0.4591     1.2527          0.1464     2.1554
#> s.e.  0.1849  0.2051  0.1895     0.0588          0.0531     0.8595
#> 
#> sigma^2 estimated as 0.2166:  log likelihood=-23.94
#> AIC=61.88   AICc=65.38   BIC=73.7

Il modello scelto ha errori ARIMA(1,0,2). Il modello può essere scritto come \[ y_t = 2.155 + 1.253 x_t + 0.146 x_{t-1} + \eta_t, \] dove \(y_t\) è il numero di preventivi fornite nel mese \(t\), \(x_t\) è la spesa pubblicitaria nel mese \(t\), \[ \eta_t = 0.512 \eta_{t-1} + \varepsilon_t + 0.917 \varepsilon_{t-1} + 0.459 \varepsilon_{t-2}, \] e \(\varepsilon_t\) è un white noise.

Si possono calcolare le previsioni usando questo modello assumendo di poter disporre dei valori futuri per la variabile pubblicità. Se si fissa la pubblicità mensile futura a 8 unità, si ottengono le previsioni mostrate in figura 10.13.

insurance_future <- new_data(insurance, 20) %>%
  mutate(TVadverts = 8)
fit_best %>%
  forecast(insurance_future) %>%
  autoplot(insurance) +
  labs(
    x = "Mese", y = "Preventivi",
    title = "Previsione dei preventivi fissando ad 8 la spesa futura per pubblicità"
  )
Previsione dei preventivi assicurativi mensili, ottenuta assumendo che la spesa futura per pubblicità sia pari ad 8 unità per ognuno dei mesi successivi.

Figura 10.13: Previsione dei preventivi assicurativi mensili, ottenuta assumendo che la spesa futura per pubblicità sia pari ad 8 unità per ognuno dei mesi successivi.