Introduzione

Il presente è il risultato dell’analisi richiesta sul dataset Real Estate Texas.csv contentente 240 osservazioni mensili relative alle città di Beaumont, Bryan-College Station, Tyler e Wichita Falls negli anni dal 2010 al 2014 tramite un’ interpretazione economico-aziendale.


1. Analisi delle variabili

library(tidyverse)
library(readxl)
library(e1071)
library(scales)

# Impostazione della cartella di lavoro
setwd("C:/Users/Rosse/Desktop/master/primo progetto/Analisi di Mercato_Texas")

# Importazione del dataset
realestate_texas <- read_csv("realestate_texas.csv")

## Verifichiamo le dimensioni del dataset, i nomi delle variabili, la struttura e le principali statistiche descrittive.
dim(realestate_texas)
## [1] 240   8
names(realestate_texas)
## [1] "city"             "year"             "month"            "sales"           
## [5] "volume"           "median_price"     "listings"         "months_inventory"
head(realestate_texas)
## # A tibble: 6 × 8
##   city      year month sales volume median_price listings months_inventory
##   <chr>    <dbl> <dbl> <dbl>  <dbl>        <dbl>    <dbl>            <dbl>
## 1 Beaumont  2010     1    83   14.2       163800     1533              9.5
## 2 Beaumont  2010     2   108   17.7       138200     1586             10  
## 3 Beaumont  2010     3   182   28.7       122400     1689             10.6
## 4 Beaumont  2010     4   200   26.8       123200     1708             10.6
## 5 Beaumont  2010     5   202   28.8       123100     1771             10.9
## 6 Beaumont  2010     6   189   27.2       122800     1803             11.1
str(realestate_texas)
## spc_tbl_ [240 × 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ city            : chr [1:240] "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
##  $ year            : num [1:240] 2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ month           : num [1:240] 1 2 3 4 5 6 7 8 9 10 ...
##  $ sales           : num [1:240] 83 108 182 200 202 189 164 174 124 150 ...
##  $ volume          : num [1:240] 14.2 17.7 28.7 26.8 28.8 ...
##  $ median_price    : num [1:240] 163800 138200 122400 123200 123100 ...
##  $ listings        : num [1:240] 1533 1586 1689 1708 1771 ...
##  $ months_inventory: num [1:240] 9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   city = col_character(),
##   ..   year = col_double(),
##   ..   month = col_double(),
##   ..   sales = col_double(),
##   ..   volume = col_double(),
##   ..   median_price = col_double(),
##   ..   listings = col_double(),
##   ..   months_inventory = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>
summary(realestate_texas)
##      city                year          month           sales      
##  Length:240         Min.   :2010   Min.   : 1.00   Min.   : 79.0  
##  Class :character   1st Qu.:2011   1st Qu.: 3.75   1st Qu.:127.0  
##  Mode  :character   Median :2012   Median : 6.50   Median :175.5  
##                     Mean   :2012   Mean   : 6.50   Mean   :192.3  
##                     3rd Qu.:2013   3rd Qu.: 9.25   3rd Qu.:247.0  
##                     Max.   :2014   Max.   :12.00   Max.   :423.0  
##      volume        median_price       listings    months_inventory
##  Min.   : 8.166   Min.   : 73800   Min.   : 743   Min.   : 3.400  
##  1st Qu.:17.660   1st Qu.:117300   1st Qu.:1026   1st Qu.: 7.800  
##  Median :27.062   Median :134500   Median :1618   Median : 8.950  
##  Mean   :31.005   Mean   :132665   Mean   :1738   Mean   : 9.193  
##  3rd Qu.:40.893   3rd Qu.:150050   3rd Qu.:2056   3rd Qu.:10.950  
##  Max.   :83.547   Max.   :180000   Max.   :3296   Max.   :14.900
#controllo che non ci siano valori mancanti nel dataset
missing_values <- colSums(is.na(realestate_texas))
missing_values
##             city             year            month            sales 
##                0                0                0                0 
##           volume     median_price         listings months_inventory 
##                0                0                0                0

Il dataset è completo e non presenta valori mancanti.

Le variabili presenti nel dataset possono essere classificate in variabili qualitative, quantitative e temporali.

La variabile city è una variabile qualitativa nominale, in quanto rappresenta le città di riferimento (Beaumont, Bryan-College Station, Tyler e Wichita Falls) e non presenta un ordinamento naturale tra le modalità. Pertanto, può essere utilizzata per effettuare confronti tra le diverse città.

Le variabili sales, listings, volume, median_price e months_inventory sono variabili quantitative.

In particolare, sales e listings rappresentano conteggi e possono quindi essere considerate quantitative discrete, mentre volume, median_price e months_inventory sono quantitative continue.

Pertanto è possibile effettuare analisi descrittive, come il calcolo di media, mediana, deviazione standard, quartili, valori minimi e massimi oltre che individuare le eventuali correlazioni tra di loro.

Le variabili year e month richiedono invece rappresentano una dimensione temporale. Year può essere considerata una variabile temporale ordinata e può essere utilizzata principalmente per studiare l’evoluzione delle variabili nel tempo, ad esempio attraverso l’analisi dei trend annuali. Month rappresenta invece la componente mensile del tempo e può essere utilizzata per individuare eventuali fenomeni di stagionalità, confrontando i valori osservati nei diversi mesi dell’anno.

Pertanto, l’analisi del dataset può essere condotta combinando la dimensione territoriale, rappresentata da city, con quella temporale, rappresentata da year e month, e con le variabili quantitative relative al mercato.

In questo modo è possibile studiare sia le differenze tra le città sia l’evoluzione nel tempo e l’eventuale presenza di fenomeni stagionali.

Creo due nuove variabili per poter analizzare l’andamento delle variabili nel tempo.

#creo una variabile qualitativa ordinata per rappresentare i mesi nei grafici.
realestate_texas$month_factor <- factor(
  realestate_texas$month,
  levels = 1:12,
  labels = c(
    "January", "February", "March", "April",
    "May", "June", "July", "August",
    "September", "October", "November", "December"
  ),
  ordered = TRUE
)
#creo la variabile 'date' per poter analizzare l'andamento delle variabili nel tempo.

realestate_texas$date <- as.Date(
  paste(
    realestate_texas$year,
    realestate_texas$month,
    "01",
    sep = "-"
  )
)

head(realestate_texas$date)
## [1] "2010-01-01" "2010-02-01" "2010-03-01" "2010-04-01" "2010-05-01"
## [6] "2010-06-01"

Per la variabile qualitativa city, trattata come una qualitativa normale, è opportuno utilizzare una distribuzione di frequenza.

realestate_texas$city <- as.factor(realestate_texas$city)

table(realestate_texas$city)
## 
##              Beaumont Bryan-College Station                 Tyler 
##                    60                    60                    60 
##         Wichita Falls 
##                    60
#frequenze relative

round(
  prop.table(table(realestate_texas$city)),
  4
)
## 
##              Beaumont Bryan-College Station                 Tyler 
##                  0.25                  0.25                  0.25 
##         Wichita Falls 
##                  0.25

La distribuzione delle osservazioni rispetto alla variabile city risulta perfettamente uniforme. Ciascuna delle quattro città presenti nel dataset — Beaumont, Bryan-College Station, Tyler e Wichita Falls — rappresenta il 25% del totale delle osservazioni. Questo indica che il dataset è bilanciato rispetto alla dimensione geografica considerata e che nessuna città risulta sovra o sottorappresentata.

Viene calcolata anche la distribuzione per ‘year’ e per ‘month_factory’

table(realestate_texas$year)
## 
## 2010 2011 2012 2013 2014 
##   48   48   48   48   48

La distribuzione della variabile year mostra una perfetta uniformità anche rispetto agli anni. Per ciascuno degli anni compresi tra 2010 e 2014 sono presenti 48 osservazioni. Complessivamente, quindi, ogni anno rappresenta il 20% delle osservazioni. Non emergono pertanto squilibri nella copertura temporale del dataset, rendendo possibile un confronto tra gli anni senza che uno di essi sia maggiormente rappresentato rispetto agli altri.

table(realestate_texas$month_factor)
## 
##   January  February     March     April       May      June      July    August 
##        20        20        20        20        20        20        20        20 
## September   October  November  December 
##        20        20        20        20

Anche la variabile month_factor presenta una distribuzione perfettamente uniforme: per ciascuno dei 12 mesi dell’anno sono presenti 20 osservazioni. Ogni mese rappresenta quindi circa l’8,33% del totale. Questo evidenzia che il dataset è bilanciato anche dal punto di vista della componente mensile e consente di analizzare eventuali variazioni stagionali senza che la numerosità delle osservazioni nei singoli mesi influenzi il confronto.

Pertanto, i risultati mostrano che il dataset è perfettamente bilanciato rispetto alla dimensioni geografiche (city) e temporali(year e month_factory). In particolare, la presenza dello stesso numero di osservazioni per città, anno e mese costituisce un elemento positivo per le successive analisi statistiche, poiché riduce il rischio che eventuali differenze osservate nelle variabili di interesse siano dovute a una diversa numerosità delle categorie considerate.


2. Indici di posizione, variabilità e forma

Per le variabili quantitative vengono calcolati:

variabili_quantitative <- c(
  "sales",
  "volume",
  "median_price",
  "listings",
  "months_inventory"
)

calcola_statistiche <- function(x) {
  
  x <- x[!is.na(x)]
  
  c(
    Media = mean(x),
    Mediana = median(x),
    Minimo = min(x),
    Q1 = quantile(x, 0.25),
    Q3 = quantile(x, 0.75),
    Massimo = max(x),
    Range = max(x) - min(x),
    Varianza = var(x),
    Deviazione_Standard = sd(x),
    CV_percentuale = sd(x) / mean(x) * 100,
    Asimmetria = skewness(x),
    Curtosi = kurtosis(x)
  )
}

statistiche <- sapply(
  realestate_texas[variabili_quantitative],
  calcola_statistiche
)

statistiche <- round(statistiche, 3)

statistiche
##                        sales  volume  median_price   listings months_inventory
## Media                192.292  31.005    132665.417   1738.021            9.193
## Mediana              175.500  27.062    134500.000   1618.500            8.950
## Minimo                79.000   8.166     73800.000    743.000            3.400
## Q1.25%               127.000  17.660    117300.000   1026.500            7.800
## Q3.75%               247.000  40.893    150050.000   2056.000           10.950
## Massimo              423.000  83.547    180000.000   3296.000           14.900
## Range                344.000  75.381    106200.000   2553.000           11.500
## Varianza            6344.300 277.271 513572983.089 566568.966            5.307
## Deviazione_Standard   79.651  16.651     22662.149    752.708            2.304
## CV_percentuale        41.422  53.705        17.082     43.308           25.060
## Asimmetria             0.714   0.879        -0.362      0.645            0.041
## Curtosi               -0.336   0.151        -0.643     -0.810           -0.198
for (v in variabili_quantitative) {
  
  media <- mean(realestate_texas[[v]], na.rm = TRUE)
  mediana <- median(realestate_texas[[v]], na.rm = TRUE)
  
  cat("\nVariabile:", v, "\n")
  cat("Media:", round(media, 2), "\n")
  cat("Mediana:", round(mediana, 2), "\n")
  
  if (media > mediana) {
    cat(
      "Interpretazione: la media è superiore alla mediana, ",
      "possibile indicazione di asimmetria positiva.\n"
    )
    
  } else if (media < mediana) {
    cat(
      "Interpretazione: la media è inferiore alla mediana, ",
      "possibile indicazione di asimmetria negativa.\n"
    )
    
  } else {
    cat(
      "Interpretazione: media e mediana sono molto simili, ",
      "indicando una distribuzione relativamente simmetrica.\n"
    )
  }
}
## 
## Variabile: sales 
## Media: 192.29 
## Mediana: 175.5 
## Interpretazione: la media è superiore alla mediana,  possibile indicazione di asimmetria positiva.
## 
## Variabile: volume 
## Media: 31.01 
## Mediana: 27.06 
## Interpretazione: la media è superiore alla mediana,  possibile indicazione di asimmetria positiva.
## 
## Variabile: median_price 
## Media: 132665.4 
## Mediana: 134500 
## Interpretazione: la media è inferiore alla mediana,  possibile indicazione di asimmetria negativa.
## 
## Variabile: listings 
## Media: 1738.02 
## Mediana: 1618.5 
## Interpretazione: la media è superiore alla mediana,  possibile indicazione di asimmetria positiva.
## 
## Variabile: months_inventory 
## Media: 9.19 
## Mediana: 8.95 
## Interpretazione: la media è superiore alla mediana,  possibile indicazione di asimmetria positiva.

Commento complessivo degli indici

L’analisi degli indici descrittivi evidenzia caratteristiche differenti tra le variabili considerate.

Per quanto riguarda ‘sales’, il numero medio di vendite è pari a 192,292, mentre la mediana è 175,5. Il fatto che la media sia superiore alla mediana, insieme al valore di asimmetria positivo pari a 0,714, indica una distribuzione moderatamente asimmetrica a destra. La deviazione standard è pari a 79,651 e il coefficiente di variazione è del 41,422%, evidenziando una variabilità piuttosto elevata dei valori. Le vendite variano da un minimo di 79 a un massimo di 423, con un range di 344. La curtosi pari a -0,336 indica una distribuzione leggermente più piatta rispetto a quella normale.

La variabile volume presenta una media di 31,005 e una mediana di 27,062. Anche in questo caso la media è maggiore della mediana e l’indice di asimmetria (0,879) conferma una asimmetria positiva, più marcata rispetto a quella osservata per sales. I valori sono compresi tra 8,166 e 83,547, con un range di 75,381. La deviazione standard è 16,651, mentre il coefficiente di variazione raggiunge il 53,705%, il valore più elevato tra le variabili analizzate. Questo indica che volume presenta la maggiore variabilità relativa. La curtosi, pari a 0,151, è molto vicina a quella di una distribuzione normale, anche se leggermente superiore rispetto al valore di riferimento dell’eccesso di curtosi pari a zero.

Per median_price, la media è pari a 132.665,417, mentre la mediana è 134.500. In questo caso la media è leggermente inferiore alla mediana, suggerendo una possibile asimmetria negativa, coerentemente con il valore di asimmetria pari a -0,362. La variabilità relativa è invece più contenuta: il coefficiente di variazione è pari al 17,082%, il valore più basso tra le variabili considerate. I prezzi variano da 73.800 a 180.000, con un range di 106.200 e una deviazione standard di circa 22.662. La curtosi pari a -0,643 indica una distribuzione più piatta rispetto alla distribuzione normale.

La variabile listings presenta una media di 1.738,021 e una mediana di 1.618,5. La media superiore alla mediana è coerente con il valore di asimmetria positivo (0,645), indicando una moderata asimmetria a destra. La variabilità è abbastanza elevata: la deviazione standard è pari a 752,708 e il coefficiente di variazione raggiunge il 43,308%. I valori oscillano tra 743 e 3.296, con un range di 2.553. La curtosi negativa (-0,810) indica una distribuzione relativamente più piatta rispetto alla normale.

Infine, months_inventory presenta una media di 9,193 mesi e una mediana di 8,950 mesi. La differenza molto contenuta tra i due valori suggerisce una distribuzione abbastanza equilibrata. L’indice di asimmetria, pari a 0,041, è infatti molto vicino a zero e indica una distribuzione quasi perfettamente simmetrica. La deviazione standard è 2,304, mentre il coefficiente di variazione è del 25,060%, indicando una variabilità relativa moderata. I valori sono compresi tra 3,4 e 14,9 mesi. La curtosi pari a -0,198 è prossima allo zero e indica una forma abbastanza vicina a quella di una distribuzione normale, sebbene leggermente più piatta.

Nel complesso,pertanto, le variabili sales, volume e listings mostrano una moderata asimmetria positiva, con valori della media superiori alla mediana. Tra queste, volume presenta l’asimmetria più accentuata (0,879) e anche la maggiore variabilità relativa, con un CV del 53,705%.

Al contrario, median_price presenta una lieve asimmetria negativa, mentre months_inventory risulta la variabile più simmetrica, con un indice di asimmetria praticamente nullo (0,041).

Dal punto di vista della variabilità relativa, median_price è la variabile più omogenea (CV = 17,082%), mentre volume è quella maggiormente eterogenea (CV = 53,705%). Questo confronto è particolarmente utile perché il coefficiente di variazione consente di confrontare la dispersione di variabili espresse in unità di misura differenti.

Per quanto riguarda la forma, tutte le variabili presentano valori di curtosi relativamente contenuti e nessuna mostra una curtosi particolarmente elevata. I valori negativi osservati per sales, median_price, listings e months_inventory indicano distribuzioni leggermente più piatte rispetto alla normale.

In sintesi, il dataset presenta una buona varietà nei livelli di dispersione delle variabili: volume e listings risultano relativamente più variabili, median_price è più stabile, mentre months_inventory mostra una distribuzione particolarmente equilibrata e simmetrica. Inoltre, la variabile volume presenta anche la distribuzione più asimmetrica a destra (0,879). Ciò significa che la maggior parte dei mesi registra volumi ordinari, ma esistono mesi eccezionali di picco estivo che allungano la coda verso destra.


3. Variabilità e asimmetria

Per confrontare variabili espresse in unità di misura diverse, non è corretto utilizzare direttamente la deviazione standard o la varianza, perché dipendono dalla scala di misura della variabile. È quindi opportuno utilizzare il coefficiente di variazione (CV) per confrontare la variabilità relativa.

Si riportano i risultati ottenuti in precedenza:

statistiche

Pertanto, la distribuzione più asimmetrica è quindi quella di volume, con un indice di asimmetria pari a 0,879. Il valore positivo indica che l’asimmetria è verso destra, cioè sono presenti valori relativamente elevati che tendono a spostare la coda della distribuzione verso destra.

Per confrontare la variabilità tra variabili con diverse unità di misura è stato utilizzato il coefficiente di variazione, che evidenzia volume come la variabile maggiormente variabile (CV = 53,705%).

Per confrontare l’asimmetria è stato considerato il valore assoluto dell’indice di asimmetria. Anche in questo caso volume presenta il valore più elevato (|0,879|), risultando quindi la variabile con la distribuzione maggiormente asimmetrica, con asimmetria positiva.

4. Classificazione del prezzo

La variabile quantitativa ‘median_price’, che rappresenta il prezzo mediano degli immobili, è stata suddivisa in cinque classi utilizzando i quintili. Questa scelta permette di ottenere gruppi con un numero di osservazioni pressoché uguale, facilitando il confronto tra le diverse fasce di prezzo.

quantili_prezzo <- quantile(
  realestate_texas$median_price,
  probs = seq(0, 1, 0.2),
  na.rm = TRUE
)

quantili_prezzo
##     0%    20%    40%    60%    80%   100% 
##  73800 110000 130700 141220 152360 180000
breaks_prezzo <- unique(quantili_prezzo)

if (length(breaks_prezzo) < 2) {
  stop(
    "Non è possibile creare classi di prezzo."
  )
}

realestate_texas$price_class <- cut(
  realestate_texas$median_price,
  breaks = breaks_prezzo,
  include.lowest = TRUE,
  labels = c(
    "Molto Basso",
    "Basso",
    "Medio",
    "Alto",
    "Molto Alto"
  )
)

Le classi di prezzo vengono suddivise in:

Tramite la distribuzione di frequenza controlliamo l’uniformità delle classi

freq_price <- table(realestate_texas$price_class)

freq_price_rel <- prop.table(freq_price)

freq_price_percent <- freq_price_rel * 100

freq_price
## 
## Molto Basso       Basso       Medio        Alto  Molto Alto 
##          49          48          47          48          48
tabella_prezzo <- data.frame(
  Classe = names(freq_price),
  Frequenza = as.vector(freq_price),
  Frequenza_relativa =
    round(as.vector(freq_price_rel), 3),
  Percentuale =
    round(as.vector(freq_price_percent), 3)
)

tabella_prezzo
##        Classe Frequenza Frequenza_relativa Percentuale
## 1 Molto Basso        49              0.204      20.417
## 2       Basso        48              0.200      20.000
## 3       Medio        47              0.196      19.583
## 4        Alto        48              0.200      20.000
## 5  Molto Alto        48              0.200      20.000

La distribuzione delle frequenze evidenzia una sostanziale uniformità tra le cinque classi con una media di 48 osservazioni pari a circa il 20% delle stesse.

La classe “Molto Basso” presenta la frequenza più elevata, con 49 osservazioni, mentre la classe “Medio” presenta la frequenza più bassa, con 47 osservazioni.

grafico_classi_prezzo <- ggplot(
  realestate_texas,
  aes(x = price_class)
) +
  geom_bar(fill = "steelblue") +
  labs(
    title = "Distribuzione degli immobili per classe di prezzo",
    subtitle = "Classificazione basata sui quintili",
    x = "Classe di prezzo",
    y = "Frequenza"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_classi_prezzo

L’uniformità delle classi viene confermata graficamente dal grafico a barre. Le stesse hanno altezze pressoché identiche, indicando che nessuna classe raccoglie una quota nettamente superiore di osservazioni rispetto alle altre.

Questo risultato è coerente con il metodo dei quintili, che mira a ripartire le osservazioni in cinque gruppi di dimensione simile. Le piccole differenze nelle frequenze possono dipendere dalla presenza di valori ripetuti in corrispondenza dei limiti delle classi.

p <- prop.table(freq_price)

Gini <- 1 - sum(p^2)

cat(
  "Indice di eterogeneità di Gini:",
  round(Gini, 3)
)
## Indice di eterogeneità di Gini: 0.8
k <- length(freq_price)

gini_norm <-
  Gini / ((k - 1) / k)

cat(
  "\nIndice di Gini normalizzato:",
  round(gini_norm, 3)
)
## 
## Indice di Gini normalizzato: 1

L’indice di Gini pari a 0,80 (valore vicino a 0) e l’indice di Gini normalizzato pari a 1 indicano che una maggiore concentrazione delle osservazioni in poche classi e che la distribuzione delle osservazioni tra le classi è massimamente eterogenea rispettivamente.

Questo risultato è in parte atteso, poiché la suddivisione mediante quintili è stata scelta proprio per ottenere gruppi di numerosità simile. Pertanto, l’indice di Gini descrive efficacemente l’equilibrio della distribuzione tra le classi, ma non deve essere interpretato come una misura della dispersione dei prezzi in termini monetari.

Inoltre, è importante precisare che questo risultato descrive l’equilibrio delle frequenze tra le classi, non la variabilità dei prezzi all’interno delle classi.


5. Calcolo delle probabilità

P_Beaumont <-
  mean(
    realestate_texas$city == "Beaumont",
    na.rm = TRUE
  )

cat(
  "P(city = Beaumont) =",
  round(P_Beaumont, 3),
  "\n"
)
## P(city = Beaumont) = 0.25
cat(
  "Percentuale =",
  round(P_Beaumont * 100, 2),
  "%"
)
## Percentuale = 25 %

Presa una riga a caso del dataset, la probabilità che riporti la città “Beaumont” è del 25%.

P_Luglio <-
  mean(
    realestate_texas$month == 7,
    na.rm = TRUE
  )

cat(
  "P(month = Luglio) =",
  round(P_Luglio, 3),
  "\n"
)
## P(month = Luglio) = 0.083
cat(
  "Percentuale =",
  round(P_Luglio * 100, 2),
  "%"
)
## Percentuale = 8.33 %

Presa una riga a caso del dataset, la probabilità che riporti il mese di ‘Luglio’ è dell’8,33%.

P_Dicembre_2012 <-
  mean(
    realestate_texas$month == 12 &
      realestate_texas$year == 2012,
    na.rm = TRUE
  )

cat(
  "P(month = Dicembre AND year = 2012) =",
  round(P_Dicembre_2012, 3),
  "\n"
)
## P(month = Dicembre AND year = 2012) = 0.017
cat(
  "Percentuale =",
  round(P_Dicembre_2012 * 100, 2),
  "%"
)
## Percentuale = 1.67 %

Presa una riga a caso del dataset, la probabilità che riporti il mese di Dicembre dell’anno 2012 è dell’ 1.67 %.

6. Creazione di nuove variabili

Per arricchire l’analisi del dataset realestate_texas sono state create due nuove variabili: total_sales_value, ottenuto dal prodotto tra sales e median_price, che fornisce una stima del valore complessivo delle vendite e non rappresenta il valore reale delle singole transazioni e listing_effectiveness_pct, ottenuto dal rapporto tra vendite e numero di annunci moltiplicato per 100, che rappresenta un indicatore descrittivo dell’efficacia degli annunci immobiliari e non come vera probabilità di vendita di un singolo immobile, poiché gli annunci possono rimanere presenti per più periodi.

realestate_texas$total_sales_value <-
  realestate_texas$sales *
  realestate_texas$median_price

realestate_texas$listing_effectiveness <-
  realestate_texas$sales /
  realestate_texas$listings

realestate_texas$listing_effectiveness_pct <-
  realestate_texas$sales /
  realestate_texas$listings *
  100
summary(realestate_texas$total_sales_value)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##  7173200 15270250 23501800 26570396 35216950 69557800
summary(
  realestate_texas$listing_effectiveness_pct
)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   5.014   8.980  10.963  11.874  13.492  38.713

Le statistiche descrittive di total_sales_value mostrano che la media, pari a circa 26,57 milioni, è superiore alla mediana, pari a circa 23,50 milioni. Questa differenza suggerisce che la distribuzione presenti una possibile asimmetria positiva, dovuta alla presenza di alcune osservazioni con valori stimati particolarmente elevati. Anche l’ampio intervallo tra il valore minimo e quello massimo evidenzia differenze significative nel valore economico stimato delle vendite tra le osservazioni considerate. È importante precisare che questa variabile rappresenta una stima indicativa e non il valore reale delle transazioni immobiliari. Infatti, il prezzo mediano non coincide necessariamente con il prezzo effettivo di ciascun immobile venduto. Per questo motivo, il prodotto tra vendite e prezzo mediano è utile per confrontare indicativamente il volume economico dei diversi periodi o mercati, ma non deve essere interpretato come un dato contabile esatto.

Mentre quelle di listing_effectiveness_pct mostrano che la media dell’indicatore è pari all’11,87%, mentre la mediana è pari al 10,96%. Ciò significa che, in media, il rapporto tra vendite e annunci è di circa 11,87 vendite ogni 100 annunci, secondo le definizioni e il periodo di riferimento dei dati utilizzati. La media superiore alla mediana suggerisce una possibile asimmetria positiva: alcune osservazioni presentano rapporti particolarmente elevati, che contribuiscono ad aumentare il valore medio. Si osserva inoltre una certa variabilità tra le osservazioni. Il 50% centrale dei valori è compreso tra il 8,98% e il 13,49%, mentre il valore massimo raggiunge il 38,71%. Questo indica che in alcune osservazioni il rapporto tra vendite e annunci è decisamente superiore rispetto ai livelli più comuni. È tuttavia necessario interpretare l’indicatore con cautela: non rappresenta la probabilità che un singolo immobile venga venduto, perché gli annunci possono rimanere attivi per più periodi e le vendite registrate in un determinato intervallo potrebbero non corrispondere agli annunci presenti nello stesso momento. Per misurare una vera efficacia degli annunci sarebbe necessario disporre di informazioni collegate sui singoli immobili, sulle date di pubblicazione e di vendita e sulla durata degli annunci.

Pertanto, le nuove variabili permettono di osservare il mercato immobiliare da due prospettive complementari. La variabile total_sales_value fornisce una stima del valore economico associato alle vendite, mentre listing_effectiveness_pct consente di confrontare il rapporto tra vendite e annunci disponibili. I risultati evidenziano una notevole variabilità del valore stimato delle vendite e differenze nell’indicatore relativo agli annunci. In entrambi i casi, la media superiore alla mediana suggerisce che alcune osservazioni presentino valori elevati rispetto a quelli più centrali della distribuzione.


7. Analisi condizionata

L’analisi condizionata consente di approfondire le caratteristiche del mercato immobiliare del Texas considerando separatamente le diverse città, gli anni e i mesi. L’obiettivo è individuare eventuali differenze territoriali, tendenze temporali e variazioni stagionali attraverso il confronto delle medie, delle deviazioni standard e delle distribuzioni rappresentate graficamente.

La prima analisi confronta le principali variabili quantitative tra Beaumont, Bryan-College Station, Tyler e Wichita Falls (city).

summary_city <- realestate_texas %>%
  group_by(city) %>%
  summarise(
    n = n(),
    media_sales = mean(sales, na.rm = TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    media_price = mean(median_price, na.rm = TRUE),
    sd_price = sd(median_price, na.rm = TRUE),
    media_volume = mean(volume, na.rm = TRUE),
    sd_volume = sd(volume, na.rm = TRUE),
    media_listings = mean(listings, na.rm = TRUE),
    sd_listings = sd(listings, na.rm = TRUE),
    media_inventory =
      mean(months_inventory, na.rm = TRUE),
    sd_inventory =
      sd(months_inventory, na.rm = TRUE),
    media_total_value =
      mean(total_sales_value, na.rm = TRUE),
    .groups = "drop"
  )

summary_city
## # A tibble: 4 × 13
##   city        n media_sales sd_sales media_price sd_price media_volume sd_volume
##   <fct>   <int>       <dbl>    <dbl>       <dbl>    <dbl>        <dbl>     <dbl>
## 1 Beaumo…    60        177.     41.5     129988.   10105.         26.1      6.97
## 2 Bryan-…    60        206.     85.0     157488.    8852.         38.2     17.2 
## 3 Tyler      60        270.     62.0     141442.    9337.         45.8     13.1 
## 4 Wichit…    60        116.     22.2     101743.   11320.         13.9      3.24
## # ℹ 5 more variables: media_listings <dbl>, sd_listings <dbl>,
## #   media_inventory <dbl>, sd_inventory <dbl>, media_total_value <dbl>

Per ciascuna città sono disponibili 60 osservazioni, pertanto il confronto avviene sulla base di gruppi con la stessa numerosità.

Anche il volume medio (media_volume) segue un andamento simile: Tyler raggiunge 45,8, Bryan-College Station 38,2, Beaumont 26,1 e Wichita Falls 13,9. La coerenza tra questi risultati suggerisce che Tyler sia il mercato più dinamico in termini di vendite e volume, mentre Wichita Falls presenta livelli inferiori.

Le differenze territoriali emergono anche dai prezzi. Bryan-College Station presenta il prezzo mediano medio più elevato, pari a circa 157.488, seguita da Tyler con 141.442, Beaumont con 129.988 e Wichita Falls con 101.743. È quindi importante distinguere tra dimensione del mercato e livello dei prezzi: Tyler registra il maggior numero medio di vendite, mentre Bryan-College Station presenta i prezzi medi più elevati.

Le deviazioni standard evidenziano inoltre differenze nella variabilità. Per le vendite, Bryan-College Station presenta una deviazione standard di 85,0, superiore a quella delle altre città, mentre Wichita Falls registra il valore più contenuto, pari a 22,2. Questo indica che a Bryan-College Station il numero di vendite è maggiormente variabile tra le osservazioni, mentre a Wichita Falls è relativamente più stabile.

Nel complesso, l’analisi suggerisce la presenza di mercati immobiliari con caratteristiche differenti: Tyler si distingue per l’intensità delle vendite, Bryan-College Station per i livelli di prezzo e la variabilità delle vendite, mentre Wichita Falls presenta prezzi e volumi medi più bassi.

L’analisi temporale (variabile year) considera il periodo compreso tra il 2010 e il 2014.

summary_year <- realestate_texas %>%
  group_by(year) %>%
  summarise(
    n = n(),
    media_sales = mean(sales, na.rm = TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    media_price = mean(median_price, na.rm = TRUE),
    sd_price = sd(median_price, na.rm = TRUE),
    media_volume = mean(volume, na.rm = TRUE),
    sd_volume = sd(volume, na.rm = TRUE),
    media_listings = mean(listings, na.rm = TRUE),
    sd_listings = sd(listings, na.rm = TRUE),
    media_inventory =
      mean(months_inventory, na.rm = TRUE),
    sd_inventory =
      sd(months_inventory, na.rm = TRUE),
    media_total_value =
      mean(total_sales_value, na.rm = TRUE),
    .groups = "drop"
  )

summary_year
## # A tibble: 5 × 13
##    year     n media_sales sd_sales media_price sd_price media_volume sd_volume
##   <dbl> <int>       <dbl>    <dbl>       <dbl>    <dbl>        <dbl>     <dbl>
## 1  2010    48        169.     60.5     130192.   21822.         25.7      10.8
## 2  2011    48        164.     63.9     127854.   21318.         25.2      12.2
## 3  2012    48        186.     70.9     130077.   21432.         29.3      14.5
## 4  2013    48        212.     84.0     135723.   21708.         35.2      17.9
## 5  2014    48        231.     95.5     139481.   25625.         39.8      21.2
## # ℹ 5 more variables: media_listings <dbl>, sd_listings <dbl>,
## #   media_inventory <dbl>, sd_inventory <dbl>, media_total_value <dbl>

Per ciascun anno sono presenti 48 osservazioni, quindi anche in questo caso la numerosità dei gruppi è uniforme.

Il numero medio di vendite mostra una tendenza complessivamente crescente: si passa da circa 169 vendite nel 2010 a 164 nel 2011, per poi aumentare a 186 nel 2012, 212 nel 2013 e 231 nel 2014. Dopo una lieve flessione nel 2011, si osserva dunque una crescita progressiva negli anni successivi.

Anche il volume medio aumenta nel tempo, passando da 25,7 nel 2010 a 39,8 nel 2014. Questo andamento è coerente con quello delle vendite e suggerisce un’intensificazione dell’attività del mercato immobiliare nel periodo considerato.

Il prezzo mediano medio mostra invece una crescita più contenuta. Dopo essere sceso da 130.192 nel 2010 a 127.854 nel 2011, aumenta progressivamente fino a raggiungere 139.481 nel 2014. Si osserva quindi una ripresa dei prezzi dopo il 2011, accompagnata dall’incremento delle vendite e dei volumi.

Per quanto riguarda la variabilità, la deviazione standard delle vendite cresce da 60,5 nel 2010 a 95,5 nel 2014. Ciò indica che, oltre all’aumento del livello medio delle vendite, nel tempo aumenta anche la dispersione dei valori osservati.

Nel complesso, i risultati evidenziano un mercato caratterizzato da una crescita delle vendite e dei volumi nel periodo analizzato, accompagnata da un incremento più moderato dei prezzi. Queste evidenze descrivono un’associazione temporale, ma non sono sufficienti da sole a dimostrare le cause della crescita.

L’analisi mensile (variabile month) consente di verificare la presenza di possibili variazioni stagionali.

summary_month <- realestate_texas %>%
  group_by(month) %>%
  summarise(
    n = n(),
    media_sales = mean(sales, na.rm = TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    media_price = mean(median_price, na.rm = TRUE),
    sd_price = sd(median_price, na.rm = TRUE),
    media_volume = mean(volume, na.rm = TRUE),
    sd_volume = sd(volume, na.rm = TRUE),
    media_listings = mean(listings, na.rm = TRUE),
    sd_listings = sd(listings, na.rm = TRUE),
    media_inventory =
      mean(months_inventory, na.rm = TRUE),
    sd_inventory =
      sd(months_inventory, na.rm = TRUE),
    media_total_value =
      mean(total_sales_value, na.rm = TRUE),
    .groups = "drop"
  )

summary_month
## # A tibble: 12 × 13
##    month     n media_sales sd_sales media_price sd_price media_volume sd_volume
##    <dbl> <int>       <dbl>    <dbl>       <dbl>    <dbl>        <dbl>     <dbl>
##  1     1    20        127.     43.4      124250   25151.         19.0      8.37
##  2     2    20        141.     51.1      130075   22823.         21.7     10.1 
##  3     3    20        189.     59.2      127415   23442.         29.4     12.0 
##  4     4    20        212.     65.4      131490   21458.         33.3     14.5 
##  5     5    20        239.     83.1      134485   18796.         39.7     19.0 
##  6     6    20        244.     95.0      137620   19231.         41.3     21.1 
##  7     7    20        236.     96.3      134750   21945.         39.1     21.4 
##  8     8    20        231.     79.2      136675   22488.         38.0     18.0 
##  9     9    20        182.     72.5      134040   24344.         29.6     15.2 
## 10    10    20        180.     75.0      133480   26358.         29.1     15.1 
## 11    11    20        157.     55.5      134305   24691.         24.8     11.2 
## 12    12    20        169.     60.7      133400   22810.         27.1     12.6 
## # ℹ 5 more variables: media_listings <dbl>, sd_listings <dbl>,
## #   media_inventory <dbl>, sd_inventory <dbl>, media_total_value <dbl>

Per ciascun mese sono presenti 20 osservazioni.

Il numero medio di vendite presenta un andamento variabile nel corso dell’anno. A gennaio si registra il valore più basso, pari a 127, mentre le vendite aumentano nei mesi successivi, raggiungendo 239 a maggio e il massimo di 244 a giugno. Da luglio si osserva una graduale riduzione: le vendite medie passano da 236 a luglio a 182 a settembre e 157 a novembre. A dicembre si registra una lieve ripresa, con 169 vendite medie.

Anche il volume medio segue un andamento simile: cresce da 19,0 a gennaio fino a raggiungere 41,3 a giugno, per poi diminuire nei mesi successivi. Questa corrispondenza tra vendite e volume rafforza l’evidenza di una maggiore attività del mercato nella parte centrale dell’anno.

I prezzi mostrano invece un andamento meno marcato. Il prezzo mediano medio varia da 124.250 a gennaio a 137.620 a giugno, mentre nei mesi successivi rimane su livelli relativamente simili, con alcune oscillazioni. Il massimo delle vendite coincide quindi con un periodo in cui anche il prezzo medio risulta relativamente elevato.

Questi risultati suggeriscono una possibile componente stagionale, con maggiore attività immobiliare tra la primavera e l’estate e livelli più contenuti nei mesi invernali. Per confermare questa interpretazione sarebbe opportuno confrontare gli stessi mesi nei diversi anni e nelle diverse città, distinguendo la stagionalità dalle variazioni generali del mercato.

L’analisi congiunta permette di osservare come si siano evoluti i mercati delle quattro città tra il 2010 e il 2014. (variabili: city e year)

summary_city_year <- realestate_texas %>%
  group_by(city, year) %>%
  summarise(
    n = n(),
    media_sales = mean(sales, na.rm = TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    media_price = mean(median_price, na.rm = TRUE),
    sd_price = sd(median_price, na.rm = TRUE),
    media_total_value =
      mean(total_sales_value, na.rm = TRUE),
    .groups = "drop"
  )

summary_city_year
## # A tibble: 20 × 8
##    city   year     n media_sales sd_sales media_price sd_price media_total_value
##    <fct> <dbl> <int>       <dbl>    <dbl>       <dbl>    <dbl>             <dbl>
##  1 Beau…  2010    12        156.     36.9     133117.   13354.         20475667.
##  2 Beau…  2011    12        144      22.7     125642.    9603.         18189383.
##  3 Beau…  2012    12        172.     28.4     126533.    7973.         21881350 
##  4 Beau…  2013    12        201.     37.7     132400     7785.         26740500 
##  5 Beau…  2014    12        214.     36.5     132250     9835.         28504700 
##  6 Brya…  2010    12        168.     70.8     153533.    5474.         25539775 
##  7 Brya…  2011    12        167.     62.2     151417.    3709.         25259617.
##  8 Brya…  2012    12        197.     74.3     153567.    7096.         30297950 
##  9 Brya…  2013    12        238.     95.8     159392.    5429.         38162042.
## 10 Brya…  2014    12        260.     86.7     169533.    7776.         44115525 
## 11 Tyler  2010    12        228.     49.0     135175     4782.         30812450 
## 12 Tyler  2011    12        239.     49.6     136217.    8505.         32775808.
## 13 Tyler  2012    12        264.     46.4     139250     7983.         36918483.
## 14 Tyler  2013    12        287.     53.0     146100     6726.         42223217.
## 15 Tyler  2014    12        332.     56.9     150467.    8543.         50099317.
## 16 Wich…  2010    12        123.     26.6      98942.   10361.         12328017.
## 17 Wich…  2011    12        106.     19.8      98142.   10632.         10531908.
## 18 Wich…  2012    12        112.     14.2     100958.   12347.         11409800 
## 19 Wich…  2013    12        121.     26.0     105000    10383.         12722517.
## 20 Wich…  2014    12        117      21.1     105675    12444.         12419900

I risultati evidenziano differenze territoriali significative.

Tyler mantiene il livello più elevato di vendite medie in tutti gli anni e passa da circa 228 vendite nel 2010 a 332 nel 2014.

Bryan-College Station presenta una crescita altrettanto evidente, passando da 168 a 260 vendite medie. Beaumont mostra un incremento da 156 a 214, mentre Wichita Falls rimane su livelli più contenuti, senza una crescita continua.

Anche i prezzi confermano le differenze tra città. Bryan-College Station mantiene i livelli più elevati, raggiungendo una media di circa 169.533 nel 2014. Tyler passa da 135.175 nel 2010 a 150.467 nel 2014, mentre Beaumont mostra oscillazioni più contenute. Wichita Falls presenta i prezzi più bassi, sebbene in lieve crescita nel periodo.

La variabile media_total_value, relativa al valore totale stimato delle vendite, rafforza queste differenze. Tyler passa da circa 30,8 milioni nel 2010 a 50,1 milioni nel 2014, mentre Bryan-College Station cresce da circa 25,5 a 44,1 milioni. Beaumont registra un incremento da circa 20,5 a 28,5 milioni, mentre Wichita Falls rimane su valori decisamente inferiori.

Si evidenzia pertanto una crescita particolarmente marcata a Tyler e Bryan-College Station. Occorre tuttavia ricordare che total_sales_value è una stima ottenuta moltiplicando le vendite per il prezzo mediano e non corrisponde al valore effettivo delle transazioni.

L’analisi congiunta permette di osservare come si siano evoluti i mercati delle quattro città tra il 2010 e il 2014 distinta per mesi. (variabili: city, year e month)

summary_city_year_month <- realestate_texas %>%
  group_by(city, year, month) %>%
  summarise(
    n = n(),
    media_sales = mean(sales, na.rm = TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    media_price = mean(median_price, na.rm = TRUE),
    sd_price = sd(median_price, na.rm = TRUE),
    media_total_value =
      mean(total_sales_value, na.rm = TRUE),
    .groups = "drop"
  )

summary_city_year_month
## # A tibble: 240 × 9
##    city      year month     n media_sales sd_sales media_price sd_price
##    <fct>    <dbl> <dbl> <int>       <dbl>    <dbl>       <dbl>    <dbl>
##  1 Beaumont  2010     1     1          83       NA      163800       NA
##  2 Beaumont  2010     2     1         108       NA      138200       NA
##  3 Beaumont  2010     3     1         182       NA      122400       NA
##  4 Beaumont  2010     4     1         200       NA      123200       NA
##  5 Beaumont  2010     5     1         202       NA      123100       NA
##  6 Beaumont  2010     6     1         189       NA      122800       NA
##  7 Beaumont  2010     7     1         164       NA      124300       NA
##  8 Beaumont  2010     8     1         174       NA      136800       NA
##  9 Beaumont  2010     9     1         124       NA      121100       NA
## 10 Beaumont  2010    10     1         150       NA      138500       NA
## # ℹ 230 more rows
## # ℹ 1 more variable: media_total_value <dbl>

I risultati evidenziano differenze territoriali e temporali nell’andamento del mercato immobiliare.

Per ciascuna combinazione di città, anno e mese è presente una sola osservazione.

Di conseguenza, le vendite medie e i prezzi medi riportati nella tabella coincidono con i valori registrati per quello specifico mese. Le deviazioni standard risultano invece non disponibili (NA), poiché non è possibile misurare la dispersione dei dati quando si dispone di una sola osservazione per gruppo.


8. Analisi grafica

##8.1 Boxplot del prezzo mediano per città

Il boxplot consente di confrontare la distribuzione dei prezzi mediani nelle quattro città, evidenziando differenze nella posizione centrale, nella variabilità e nella presenza di eventuali valori anomali.

grafico_box_price <- ggplot(
  realestate_texas,
  aes(
    x = city,
    y = median_price
  )
) +
  geom_boxplot(
    fill = "steelblue",
    alpha = 0.7
  ) +
  labs(
    title = "Distribuzione del prezzo mediano per città",
    x = "Città",
    y = "Prezzo mediano"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_box_price

8.2 Boxplot del valore totale stimato delle vendite per città

Il boxplot confronta la distribuzione del valore totale stimato delle vendite (total_sales_value) nelle quattro città.

grafico_box_value_city <- ggplot(
  realestate_texas,
  aes(
    x = city,
    y = total_sales_value
  )
) +
  geom_boxplot(
    fill = "darkorange",
    alpha = 0.7
  ) +
  scale_y_continuous(
    labels = label_number(
      big.mark = ".",
      decimal.mark = ","
    )
  ) +
  labs(
    title = "Distribuzione del valore totale stimato delle vendite",
    x = "Città",
    y = "Valore totale stimato"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_box_value_city

8.3 Boxplot del valore totale stimato delle vendite per anno

Il boxplot permette di confrontare la distribuzione del valore totale stimato delle vendite nei cinque anni compresi tra il 2010 e il 2014, con l’obiettivo di individuare eventuali cambiamenti nel mercato immobiliare nel corso del tempo.

grafico_box_value_year <- ggplot(
  realestate_texas,
  aes(
    x = factor(year),
    y = total_sales_value
  )
) +
  geom_boxplot(
    fill = "seagreen",
    alpha = 0.7
  ) +
  labs(
    title = "Distribuzione del valore totale stimato per anno",
    x = "Anno",
    y = "Valore totale stimato"
  ) +
  theme_minimal()

grafico_box_value_year

8.4 Boxplot del valore totale stimato per città e anno

Il grafico confronta il valore totale stimato delle vendite tra le città, distinguendo le osservazioni relative ai diversi anni mediante colori differenti. Questa rappresentazione consente di esaminare contemporaneamente le differenze territoriali e l’evoluzione temporale del mercato.

grafico_box_city_year <- ggplot(
  realestate_texas,
  aes(
    x = city,
    y = total_sales_value,
    fill = factor(year)
  )
) +
  geom_boxplot() +
  labs(
    title = "Valore totale delle vendite per città e anno",
    x = "Città",
    y = "Valore totale stimato",
    fill = "Anno"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_box_city_year

8.5 Boxplot del valore totale stimato per città, suddiviso per anno

La rappresentazione mediante pannelli separati per anno permette di osservare più chiaramente le differenze tra le città all’interno di ciascun periodo, evitando la sovrapposizione delle informazioni cromatiche presenti nel grafico precedente.

grafico_box_facet_year <- ggplot(
  realestate_texas,
  aes(
    x = city,
    y = total_sales_value
  )
) +
  geom_boxplot(
    fill = "mediumpurple",
    alpha = 0.7
  ) +
  facet_wrap(~year) +
  labs(
    title =
      "Valore totale delle vendite per città nei diversi anni",
    x = "Città",
    y = "Valore totale stimato"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_box_facet_year

##8.6 Grafico a barre sovrapposte del totale delle vendite per mese e città

Creiamo una tabella contenente il totale delle vendite per mese e città.

Il grafico mostra il totale delle vendite per ciascun mese, distinguendo le città tramite colori differenti. Poiché il dataset contiene più anni, sommiamo le vendite dei diversi anni per ottenere il totale mensile per città.

sales_month_city <- realestate_texas %>%
  group_by(
    month,
    month_factor,
    city
  ) %>%
  summarise(
    total_sales =
      sum(sales, na.rm = TRUE),
    .groups = "drop"
  )

sales_month_city
## # A tibble: 48 × 4
##    month month_factor city                  total_sales
##    <dbl> <ord>        <fct>                       <dbl>
##  1     1 January      Beaumont                      608
##  2     1 January      Bryan-College Station         591
##  3     1 January      Tyler                         907
##  4     1 January      Wichita Falls                 442
##  5     2 February     Beaumont                      677
##  6     2 February     Bryan-College Station         628
##  7     2 February     Tyler                        1058
##  8     2 February     Wichita Falls                 454
##  9     3 March        Beaumont                      855
## 10     3 March        Bryan-College Station         949
## # ℹ 38 more rows
grafico_bar_month_city <- ggplot(
  sales_month_city,
  aes(
    x = month_factor,
    y = total_sales,
    fill = city
  )
) +
  geom_col(
    position = "stack"
  ) +
  labs(
    title = "Totale delle vendite per mese e città",
    x = "Mese",
    y = "Totale vendite",
    fill = "Città"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_bar_month_city

8.7 Grafico a barre sovrapposte normalizzate

In questo secondo grafico ogni barra rappresenta il 100% delle vendite del mese. Le diverse sezioni colorate mostrano la quota percentuale di ciascuna città sul totale delle vendite mensili.

grafico_bar_normalized <- ggplot(
  sales_month_city,
  aes(
    x = month_factor,
    y = total_sales,
    fill = city
  )
) +
  geom_col(
    position = "fill"
  ) +
  scale_y_continuous(
    labels = percent
  ) +
  labs(
    title = "Composizione percentuale delle vendite per mese",
    x = "Mese",
    y = "Percentuale",
    fill = "Città"
  ) +
  theme_minimal() +
  theme(
    axis.text.x =
      element_text(angle = 45, hjust = 1)
  )

grafico_bar_normalized

8.9. Analisi temporale sull’andamento delle vendite nel tempo

Il line chart permette di analizzare l’evoluzione temporale delle vendite e di individuare eventuali variazioni o fenomeni stagionali.

sales_time_city <- realestate_texas %>%
  group_by(date, city) %>%
  summarise(
    total_sales =
      sum(sales, na.rm = TRUE),
    .groups = "drop"
  )

grafico_line_sales <- ggplot(
  sales_time_city,
  aes(
    x = date,
    y = total_sales,
    color = city,
    group = city
  )
) +
  geom_line(linewidth = 1) +
  labs(
    title = "Andamento delle vendite nel tempo",
    x = "Periodo",
    y = "Vendite",
    color = "Città"
  ) +
  theme_minimal()

grafico_line_sales

9. Conclusioni

PIANO D’AZIONE PER TEXAS REALTY INSIGHTS

Sulla base dei risultati dell’analisi statistica, si forniscono le seguenti raccomandazioni strategiche:

  1. Focalizzazione Geografica sui Margini di Crescita:

• Tyler: Rappresenta il motore commerciale del Texas (270 vendite/mese e 45,8M$ di volume medio) ed è qui che devono concentrare la forza vendita ad alto volume.

• Bryan-College Station: È il mercato a maggior valore unitario (157.488$ di prezzo mediano). Bisognerebbe orientare il marketing su immobili di fascia alta e servizi premium per massimizzare le provvigioni unitarie.

  1. Pianificazione Temporale delle Campagne di Marketing:

• L’efficacia degli annunci e il volume di vendita seguono un forte ciclo stagionale con picchi tra Maggio e Luglio (efficacia al 15,1% e 244 vendite medie), toccando i minimi a Gennaio (7,8% di efficacia).

• Raccomandazione: Investire oltre il 60% del budget pubblicitario annuale nella finestra Aprile-Luglio per sfruttare la massima propensione all’acquisto del mercato.

  1. Monitoraggio degli Annunci e Gestione dell’Inventario:

• Con una giacenza media statale di 9,18 mesi (che sale a oltre 11 mesi a Wichita Falls), le agenzie devono applicare revisioni di prezzo dinamiche sugli annunci attivi da oltre 90 giorni per evitare il deperimento dell’offerta