4.5 Analisi dei dati australiani sul turismo

Tutte le caratteristiche incluse nel package feasts possono essere calcolate utilizzando poche righe di codice.

tourism_features <- tourism %>%
  features(Trips, feature_set(pkgs = "feasts"))
tourism_features
#> # A tibble: 304 × 51
#>    Region         State          Purpose trend_strength seasonal_strength_year
#>    <chr>          <chr>          <chr>            <dbl>                  <dbl>
#>  1 Adelaide       South Austral… Busine…          0.464                  0.407
#>  2 Adelaide       South Austral… Holiday          0.554                  0.619
#>  3 Adelaide       South Austral… Other            0.746                  0.202
#>  4 Adelaide       South Austral… Visiti…          0.435                  0.452
#>  5 Adelaide Hills South Austral… Busine…          0.464                  0.179
#>  6 Adelaide Hills South Austral… Holiday          0.528                  0.296
#>  7 Adelaide Hills South Austral… Other            0.593                  0.404
#>  8 Adelaide Hills South Austral… Visiti…          0.488                  0.254
#>  9 Alice Springs  Northern Terr… Busine…          0.534                  0.251
#> 10 Alice Springs  Northern Terr… Holiday          0.381                  0.832
#> # ℹ 294 more rows
#> # ℹ 46 more variables: seasonal_peak_year <dbl>, seasonal_trough_year <dbl>,
#> #   spikiness <dbl>, linearity <dbl>, curvature <dbl>, stl_e_acf1 <dbl>,
#> #   stl_e_acf10 <dbl>, acf1 <dbl>, acf10 <dbl>, diff1_acf1 <dbl>,
#> #   diff1_acf10 <dbl>, diff2_acf1 <dbl>, diff2_acf10 <dbl>,
#> #   season_acf1 <dbl>, pacf5 <dbl>, diff1_pacf5 <dbl>, diff2_pacf5 <dbl>,
#> #   season_pacf <dbl>, zero_run_mean <dbl>, nonzero_squared_cv <dbl>, …

Si ottengono in questo modo 48 indici per ciascuna combinazione delle tre variabili considerate (Region, State e Purpose) in una tabella in formato tibble. A partire da questo dataset, è possibile analizzare i dati alla ricerca di osservazioni (o gruppi di osservazioni) interessanti.

Nei precedenti paragrafi è stato già mostrato come rappresentare graficamente due (o più) indicatori contemporaneamente (paragrafo 4.3). È pertanto possibile costruire dei grafici per ogni coppia di indicatori analizzati. Ad esempio, in figura 4.3, sono mostrate, insieme alla variabile Purpose, tutte le caratteristiche relative alla stagionalità.

library(glue)
tourism_features %>%
  select_at(vars(contains("season"), Purpose)) %>%
  mutate(
    seasonal_peak_year = seasonal_peak_year +
      4*(seasonal_peak_year==0),
    seasonal_trough_year = seasonal_trough_year +
      4*(seasonal_trough_year==0),
    seasonal_peak_year = glue("Q{seasonal_peak_year}"),
    seasonal_trough_year = glue("Q{seasonal_trough_year}"),
  ) %>%
  GGally::ggpairs(mapping = aes(colour = Purpose))
Rappresentazione grafica per tutte le possibili coppie di variabili delle caratteristiche relative alla stagionalità per i dati sul turismo austrialiano.

Figura 4.3: Rappresentazione grafica per tutte le possibili coppie di variabili delle caratteristiche relative alla stagionalità per i dati sul turismo austrialiano.

La rappresentazione grafica a coppie fornisce un’ampia quantità di informazioni aggregate. Ad esempio, i possibili esiti della variabile Purpose sono stati rappresentati mediante diversa colorazione nelle figure. Di seguito saranno descritte alcune delle caratteristiche principali che si possono ricavare dall’analisi dei grafici.

  • Le tre misure numeriche legate alla stagionalità (seasonal_strength_year, season_acf1 e season_pacf) sono correlate positivamente.
  • Il grafico in basso a sinistra e quello in alto a destra evidenziano che le serie storiche con una maggiore stagionalità sono quelle legate ai viaggi per vacanza (come mostrato nei precedenti paragrafi).
  • I grafici a barre nell’ultima riga relativi alle colonne seasonal_peak_year e seasonal_trough_year mostrano che i picchi stagionali legati ai viaggi per affari (Business) sono maggiormente frequenti nel terzo trimestre e, al contrario, più rari nel primo.

La rappresentazione grafica a coppie riesce a fornire una visione d’insieme delle caratteristiche di un dataset complesso composto, come in questo caso, da variabili eterogenee, ma non è uno strumento particolarmente efficace nel caso si vogliano esplorare le caratteristiche “aggregate” di molte variabili. A tale scopo si può fare uso delle tecniche di riduzione della dimensionalità (dimensionality reduction), le quali permettono di combinare le informazioni correlate allo scopo di sintetizzare più variabili in un numero ridotto di variabili di sintesi.

L’analisi delle componenti principali (Principal Component Analysis, PCA) è una tecnica di analisi multivariata che consente di ottenere, a partire dai dati originari, una combinazione lineare delle variabili di partenza in una o più nuove variabili, dette Componenti Principali, ottenute massimizzando la varianza tra le componenti stesse. Si ottiene così un insieme ridotto di variabili in grado di sintetizzare l’eterogeneità espressa dagli indicatori selezionati, minimizzandone allo stesso tempo la perdita di informazione. Le componenti principali legate ai dati sul turismo sono così ottenute:

library(broom)
pcs <- tourism_features %>%
  select(-State, -Region, -Purpose) %>%
  prcomp(scale = TRUE) %>% 
    augment(tourism_features)
pcs %>%
  ggplot(aes(x = .fittedPC1, y = .fittedPC2, col = Purpose)) +
  geom_point() +
  theme(aspect.ratio = 1)
Rappresentazione grafica dei dati relativi ai 48 indicatori trimestrali relativi al turismo australiano sul piano determinato dalle prime due componenti principali.

Figura 4.4: Rappresentazione grafica dei dati relativi ai 48 indicatori trimestrali relativi al turismo australiano sul piano determinato dalle prime due componenti principali.

Ciascun punto della figura 4.4 rappresenta una serie storica ed il suo posizionamento nel grafico cartesiano è basato su tutte le 48 variabili considerate. Le componenti principali sono tra di loro ortogonali, quindi incorrelate, e sono estratte in maniera sequenziale fino ad esaurire la variabilità totale dei dati. La prima componente (.fittedPC1) consiste in una combinazione lineare dei dati e cattura la quota più alta possibile di varianza. La seconda componente (.fittedPC2) agisce allo stesso modo, operando però sulla varianza residua (ovvero quella non spiegata dalla componente precedente) e così via per le restanti componenti.

In questo esempio, alla prima componente principale è associato il 24.5 % circa della variabilità totale, mentre la seconda componente principale spiega il 20.4 % della variabilità totale. Quindi, le due componenti principali rappresentano, congiuntamente, circa il 45 % della variabilità totale.

Nella seguente tabella (importance) sono mostrati i risultati relativi alla percentuale di variabilità spiegata delle singole componenti (seconda riga) e alla percentuale cumulata di variabilità spiegata (terza riga) delle prime componenti principali. Per informazioni aggiuntive legate alla PCA, e più in generale alle tecniche di dimensionality reduction, si rimanda a Izenman (2008).

tourism_features %>%
  select(-State, -Region, -Purpose) %>%
  prcomp(scale = TRUE) %>% 
  summary() %>%
  extract("importance") %>% 
  as_tibble()

La figura 4.4 mostra anche una serie di caratteristiche peculiari riguardanti i dati del turismo. Le serie storiche relative alle vacanze si comportano in modo differente rispetto alle altre: la maggior parte di esse è posizionata nella regione superiore destra del grafico, mentre le rimanenti serie sono posizionate in maniera opposta. Tale risultato evidenzia che la seconda componente principale ha la capacità di caratterizzare se una serie storica è legata ai viaggi per vacanza oppure se il viaggio è legato ad una qualsiasi delle altre motivazioni.

Attraverso l’analisi del grafico è possibile identificare potenziali andamenti anomali, detti anche outlier — si tratta di serie storiche che presentano delle combinazioni inusuali degli indici. Serie storiche anomale sono identificabili dal grafico in figura 4.4 come quei punti che risultano essere separati rispetto alla maggior parte delle altre serie. In questo caso ci sono quattro punti che presentano un andamento anomalo ed è possibile identificare a quali serie corrispondono utilizzando le seguenti righe di codice.

outliers <- pcs %>%
  filter(.fittedPC1 > 10) %>%
  select(Region, State, Purpose, .fittedPC1, .fittedPC2)
outliers
#> # A tibble: 4 × 5
#>   Region                 State             Purpose  .fittedPC1 .fittedPC2
#>   <chr>                  <chr>             <chr>         <dbl>      <dbl>
#> 1 Australia's North West Western Australia Business       13.4    -11.3  
#> 2 Australia's South West Western Australia Holiday        10.9      0.880
#> 3 Melbourne              Victoria          Holiday        12.3    -10.4  
#> 4 South Coast            New South Wales   Holiday        11.9      9.42
outliers %>%
  left_join(tourism, by = c("State", "Region", "Purpose")) %>%
  mutate(
    Series = glue("{State}", "{Region}", "{Purpose}",
                  .sep = "\n\n")
  ) %>%
  ggplot(aes(x = Quarter, y = Trips)) +
  geom_line() +
  facet_grid(Series ~ ., scales = "free") +
  labs(title = "Serie storiche anomale nello spazio delle Componenti Principali")
Quattro serie storiche anomale, dati del turismo australiano.

Figura 4.5: Quattro serie storiche anomale, dati del turismo australiano.

Il passaggio successivo è quindi tentare di analizzare il motivo per cui queste serie sono identificate come anomale.

  • La serie storica delle vacanze verso la costa meridionale del New South Wales è fortemente stagionale e presenta un trend quasi nullo, mentre la maggior parte delle destinazioni turistiche in Australia è in genere dotata di un trend temporale.
  • Melbourne è una destinazione turistica insolita dato che non presenta alcuna stagionalità, mentre la maggior parte delle destinazioni turistiche in Australia è caratterizzata da un turismo altamente stagionale.
  • La regione nord-occidentale della Western Australia mostra un aumento insolito del turismo d’affari, apparentemente non stagionale negli ultimi anni considerati.
  • La zona sud-occidentale della Western Australia mostra un aumento del turismo negli ultimi anni (per motivi turistici) simile al caso precedente, ma in questo caso la serie è dotata di una forte stagionalità.

Bibliografia

Izenman, A. J. (2008). Modern multivariate statistical techniques: Regression, classification and manifold learning. Springer. [Amazon]