7.4 Alcuni predittori utili

Esistono diversi predittori utili che si presentano frequentemente quando si utilizza la regressione per dati in serie storica.

Trend

È piuttosto comune per i dati in serie storica manifestare un trend o tendenza. Un trend lineare può essere modellato usando semplicemente \(x_{1,t}=t\) come predittore, \[ y_{t}= \beta_0+\beta_1t+\varepsilon_t, \] dove \(t=1,\dots,T\). Una variabile trend può essere specificata nella funzione TSLM() utilizzando la specifica trend(). Nel paragrafo 7.7 si discuterà anche come è possibile modellare trend non lineari.

Variabili dummy

Fino ad ora, si è ipotizzato che ogni predittore assumesse valori numerici. Tuttavia, che cosa accade quanto un predittore è una variabile categoriale che assume solo due valori (ad esempio “sì” e “no”)? Questa variabile si può presentare, ad esempio, quando si prevedono serie storiche delle vendite e si vuole tener conto del fatto che un determinato giorno sia o meno una festa nazionale. In un caso come questo il predittore assume il valore “sì” ogni volta che si presenta una festa nazionale, ed il valore “no” altrimenti.

Questa situazione può comunque essere gestita all’interno del quadro generale dei modelli di regressione multipla attraverso la creazione di una “variabile dummy” che assume il valore 1 in corrispondenza di “sì” ed il valore 0 in corrispondenza di “no”. Una variabile dummy è anche nota con il termine “variabile indicatrice”.

Una variabile dummy può essere anche utilizzata per tenere in considerazione dell’eventuale presenza di valori anomali nei dati. Piuttosto di omettere il valore anomalo, una variabile dummy rimuove il suo effetto. In questo caso, la variabile dummy assume valore 1 per quell’osservazione e 0 altrove. Un esempio è rappresentato dal caso in cui si è verificato un evento speciale. Per esempio, nel prevedere l’arrivo di turisti in Brasile, si vuole tenere conto dell’effetto esercitato dai Giochi Olimpici che si sono tenuti a Rio de Janeiro nell’estate del 2016.

Se ci sono più di due categorie, allora la variabile può essere codificata utilizzando diverse variabili dummy (una in meno del numero totale di categorie). TSLM() gestirà automaticamente questo caso se si specifica la variabile fattore come predittore. Solitamente non c’è quindi bisogno di creare le corrispondenti variabili dummy.

Variabili dummy stagionali

Si supponga di voler prevedere dati giornalieri e che si voglia tener conto del giorno della settimana come predittore. In questo caso possono essere create le seguenti variabili dummy.

\(d_{1,t}\) \(d_{2,t}\) \(d_{3,t}\) \(d_{4,t}\) \(d_{5,t}\) \(d_{6,t}\)
Lunedì 1 0 0 0 0 0
Martedì 0 1 0 0 0 0
Mercoledì 0 0 1 0 0 0
Giovedì 0 0 0 1 0 0
Venerdì 0 0 0 0 1 0
Sabato 0 0 0 0 0 1
Domenica 0 0 0 0 0 0
Lunedì 1 0 0 0 0 0

Si può notare che sono necessarie soltanto sei variabili dummy per codificare sette categorie. Questo accade perché la settima categoria (in questo caso quella corrispondente alla domenica) è catturata dall’intercetta, ed è specificata quando tutte le variabili dummy assumono valore zero.

Molti principianti cercano di aggiungere la settima variabile dummy corrispondente alla settima categoria. Questo è conosciuto come la “trappola della variabile dummy”, perché è causa del fatto che la regressione fallisce. La ragione del fallimento va ricercata nel fatto che c’è un parametro di troppo da stimare se nella regressione è inclusa anche l’intercetta. La regola generale è quella di includere una variabile dummy in meno rispetto al numero di categorie. Quindi per dati trimestrali, si useranno tre variabili dummy; per dati mensili, si useranno 11 variabili dummy; e per dati giornalieri, si useranno sei variabili dummy, e così via.

L’interpretazione del coefficiente associato a ciascuna variabile dummy è semplice: esso rappresenta una misura dell’effetto di quella categoria relativamente alla categoria omessa. Nell’esempio precedente, il coefficiente di \(d_{1,t}\) associato al lunedì misurerà l’effetto esercitato dal lunedì sulla variabile da prevedere in deviazione rispetto all’effetto esercitato dalla domenica. Segue un esempio di interpretazione della stima dei coefficienti delle variabili dummy utilizzando i dati trimestrali della produzione di birra in Australia.

La funzione TSLM() gestisce automaticamente questa situazione specificando il parametro season().

Esempio: produzione trimestrale di birra in Australia

Si utilizzano di seguito i dati sulla produzione trimestrale di birra in Australia, mostrati nuovamente in figura 7.14.

recent_production <- aus_production %>%
  filter(year(Quarter) >= 1992)
recent_production %>%
  autoplot(Beer) +
  labs(y = "Megalitri",
       title = "Produzione trimestrale di birra in Australia")
Produzione trimestrale di birra in Australia.

Figura 7.14: Produzione trimestrale di birra in Australia.

Si vogliono prevedere i valori futuri della produzione di birra. È possibile modellare questi dati utilizzando un modello di regressione con un trend lineare e una variabile dummy trimestrale, \[ y_{t} = \beta_{0} + \beta_{1} t + \beta_{2}d_{2,t} + \beta_3 d_{3,t} + \beta_4 d_{4,t} + \varepsilon_{t}, \] dove \(d_{i,t} = 1\) se \(t\) è nel trimestre \(i\) e 0 altrimenti. La prima variabile trimestrale è stata omessa, quindi i coefficienti associati ai restanti trimestri sono misure della differenza tra quei trimestri e il primo trimestre.

fit_beer <- recent_production %>%
  model(TSLM(Beer ~ trend() + season()))
report(fit_beer)
#> Series: Beer 
#> Model: TSLM 
#> 
#> Residuals:
#>    Min     1Q Median     3Q    Max 
#> -42.90  -7.60  -0.46   7.99  21.79 
#> 
#> Coefficients:
#>               Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)   441.8004     3.7335  118.33  < 2e-16 ***
#> trend()        -0.3403     0.0666   -5.11  2.7e-06 ***
#> season()year2 -34.6597     3.9683   -8.73  9.1e-13 ***
#> season()year3 -17.8216     4.0225   -4.43  3.4e-05 ***
#> season()year4  72.7964     4.0230   18.09  < 2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 12.2 on 69 degrees of freedom
#> Multiple R-squared: 0.924,   Adjusted R-squared: 0.92
#> F-statistic:  211 on 4 and 69 DF, p-value: <2e-16

Si noti che trend() e season() non sono funzioni standard ma sono funzioni “speciali” da utilizzare all’interno delle formule del modello TSLM().

Si osserva un trend verso il basso di -0.34 megalitri per trimestre. In media, il secondo trimestre ha una produzione di 34.7 megalitri in meno rispetto al primo trimestre, il terzo trimestre ha una produzione di 17.8 megalitri in meno rispetto al primo trimestre, e il quarto trimestre ha una produzione di 72.8 megalitri in più rispetto al primo trimestre.

augment(fit_beer) %>%
  ggplot(aes(x = Quarter)) +
  geom_line(aes(y = Beer, colour = "Data")) +
  geom_line(aes(y = .fitted, colour = "Fitted")) +
  scale_colour_manual(
    values = c(Data = "black", Fitted = "#D55E00")
  ) +
  labs(y = "Megalitri",
       title = "Produzione trimestrale di birra in Australia") +
  guides(colour = guide_legend(title = "Series"))
Plot temporale della produzione di birra effettiva e predetta.

Figura 7.15: Plot temporale della produzione di birra effettiva e predetta.

augment(fit_beer) %>%
  ggplot(aes(x = Beer, y = .fitted,
             colour = factor(quarter(Quarter)))) +
  geom_point() +
  labs(y = "Valori stimati", x = "Valori osservati",
       title = "Produzione trimestrale di birra in Australia") +
  geom_abline(intercept = 0, slope = 1) +
  guides(colour = guide_legend(title = "Quarter"))
Produzione effettiva di birra rappresentata contro la corrispondente produzione predetta dal modello.

Figura 7.16: Produzione effettiva di birra rappresentata contro la corrispondente produzione predetta dal modello.

Variabili di intervento

Risulta spesso necessario modellare interventi che possono influenzare la variabile da prevedere. Ad esempio, le attività di un concorrente, la spesa per pubblicità, un processo industriale e così via, possono esercitare un effetto.

Quando l’effetto dura per un solo periodo, si utilizza una variabile “spike”. Questa è una variabile dummy che assume valore uno in corrispondenza del periodo di intervento e zero altrove. Una variabile spike è equivalente ad una variabile dummy per gestire un valore anomalo.

Altre variabili di intervento hanno un effetto istantaneo e permanente. Se un intervento causa uno spostamento del livello (ovvero, il valore della serie cambia improvvisamente e permanentemente a partire dall’epoca dell’intervento), si utilizza allora una variabile “step”. Una variabile step assume valore zero prima dell’intervento e valore uno dall’epoca dell’intervento in avanti.

Un’altra forma di effetto permanente è il cambio della pendenza. Qui l’intervento è gestito usando un trend lineare a tratti; un trend che curva al tempo dell’intervento e che quindi è non lineare. Si discuterà questo tipo di trend nel paragrafo 7.7.

Giorni di negoziazione

Il numero di giorni di negoziazione in un mese può variare considerevolmente e può avere un effetto sostanziale sulle vendite. Al fine di tener conto di questo aspetto, il numero di giorni di negoziazione in ogni mese può essere incluso come predittore.

Un’alternativa che consente di tener conto degli effetti dei diversi giorni della settimana è quella di costruire i seguenti predittori: \[\begin{align*} x_{1} &= \text{numero di lunedì nel mese;} \\ x_{2} &= \text{numero di martedì nel mese;} \\ & \vdots \\ x_{7} &= \text{numero di domeniche nel mese.} \end{align*}\]

Ritardi distribuiti

È spesso utile includere la spesa per pubblicità come predittore. Tuttavia, visto che la spesa per pubblicità può durare ben oltre la campagna pubblicitaria in corso, si può includere un effetto ritardato della spesa per pubblicità. Quindi possono essere usati i seguenti predittori: \[\begin{align*} x_{1} &= \text{pubblicità per il mese precedente;} \\ x_{2} &= \text{pubblicità per i due mesi precedenti;} \\ & \vdots \\ x_{m} &= \text{pubblicità per gli $m$ mesi precedenti.} \end{align*}\]

È comune richiedere che i coefficienti decrescano all’aumentare del ritardo temporale, sebbene questo vada oltre lo scopo di questo libro.

Pasqua

La Pasqua differisce da molte delle festività perché non ricorre ogni anno nella stessa data, e il suo effetto può durare per diversi giorni. In questo caso, può essere utilizzata una variabile dummy che assume il valore uno nel particolare periodo nel corso del quale cade la festività ed il valore zero altrimenti.

Con dati mensili, se la Pasqua cade nel mese di Marzo la variabile dummy assumerà valore 1 in Marzo, e se questa cade invece in Aprile la variabile dummy assumerà valore 1 in Aprile. Quando la Pasqua inizia in Marzo e finisce in Aprile, la variabile dummy sarà divisa equamente tra i due mesi.

Serie di Fourier

Un’alternativa all’uso di variabili dummy stagionali, specialmente per stagionalità di periodo lungo, è quella di usare termini di Fourier. Jean-Baptiste Fourier è stato un matematico francese, nato nel ’700, che ha mostrato come una serie di termini seno e coseno della giusta frequenza può approssimare una qualsiasi funzione periodica. Si possono quindi utilizzare questi termini per modellare comportamenti stagionali.

Se \(m\) indica il periodo della stagionalità, allora i primi termini di Fourier sono dati da \[ x_{1,t} = \sin\left(\textstyle\frac{2\pi t}{m}\right), x_{2,t} = \cos\left(\textstyle\frac{2\pi t}{m}\right), x_{3,t} = \sin\left(\textstyle\frac{4\pi t}{m}\right), \] \[ x_{4,t} = \cos\left(\textstyle\frac{4\pi t}{m}\right), x_{5,t} = \sin\left(\textstyle\frac{6\pi t}{m}\right), x_{6,t} = \cos\left(\textstyle\frac{6\pi t}{m}\right), \] e così via. Se si ha una stagionalità mensile, e si utilizzano i primi 11 termini di questa successione come predittori, si ottengono allora esattamente le stesse previsioni che si otterrebbero impiegando 11 variabili dummy.

Impiegando i termini di Fourier è spesso necessario un numero di predittori inferiore rispetto a quelli impiegati usando l’approccio alternativo basato sulle variabili dummy, specialmente quando \(m\) è grande. Questo rende i termini di Fourier utili per dati settimanali,, dove \(m\approx 52\). Per periodi stagionali più corti (ovvero, dati trimestrali), c’è poco vantaggio nell’utilizzare i termini di Fourier rispetto all’uso delle variabili dummy.

Questi termini di Fourier sono prodotti utilizzando la funzione fourier(). Per esempio, i dati sulla produzione di birra in Australia possono essere modellati come di seguito riportato.

fourier_beer <- recent_production %>%
  model(TSLM(Beer ~ trend() + fourier(K = 2)))
report(fourier_beer)
#> Series: Beer 
#> Model: TSLM 
#> 
#> Residuals:
#>    Min     1Q Median     3Q    Max 
#> -42.90  -7.60  -0.46   7.99  21.79 
#> 
#> Coefficients:
#>                    Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)        446.8792     2.8732  155.53  < 2e-16 ***
#> trend()             -0.3403     0.0666   -5.11  2.7e-06 ***
#> fourier(K = 2)C1_4   8.9108     2.0112    4.43  3.4e-05 ***
#> fourier(K = 2)S1_4 -53.7281     2.0112  -26.71  < 2e-16 ***
#> fourier(K = 2)C2_4 -13.9896     1.4226   -9.83  9.3e-15 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 12.2 on 69 degrees of freedom
#> Multiple R-squared: 0.924,   Adjusted R-squared: 0.92
#> F-statistic:  211 on 4 and 69 DF, p-value: <2e-16

L’argomento K della funzione fourier() specifica quanti termini seno (sin) e coseno (cos) includere. Il massimo numero di termini ammissibile è \(K=m/2\) dove \(m\) è il periodo stagionale. Visto che in questo caso è stato utilizzato il massimo, i risultati saranno identici a quelli che si sarebbero ottenuti utilizzando l’approccio basato sulle variabili dummy stagionali.

Se invece si fossero utilizzati soltanto i primi due termini della sequenza di Fourier (\(x_{1,t}\) e \(x_{2,t}\)), il comportamento stagionale ottenuto sarebbe stato quello di una semplice onda sinusoidale. Un modello di regressione che contiene termini di Fourier è spesso chiamato regressione armonica perché i termini di Fourier successivi ai primi due rappresentano le armoniche dei primi due termini di Fourier.