1. Analisi delle variabili

Il dataset contiene variabili di tipo categorico/temporale (città, anno, mese) e variabili quantitative (sales, volume, median_price, listings, months_inventory).

Queste ultime ci permettono di studiare vendite, prezzi e l’efficacia del mercato nel tempo.

str(dati)
## 'data.frame':    240 obs. of  8 variables:
##  $ city            : chr  "Beaumont" "Beaumont" "Beaumont" "Beaumont" ...
##  $ year            : int  2010 2010 2010 2010 2010 2010 2010 2010 2010 2010 ...
##  $ month           : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ sales           : int  83 108 182 200 202 189 164 174 124 150 ...
##  $ volume          : num  14.2 17.7 28.7 26.8 28.8 ...
##  $ median_price    : num  163800 138200 122400 123200 123100 ...
##  $ listings        : int  1533 1586 1689 1708 1771 1803 1857 1830 1829 1779 ...
##  $ months_inventory: num  9.5 10 10.6 10.6 10.9 11.1 11.7 11.6 11.7 11.5 ...
summary(dati)
##      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

Dalla sintesi emerge che:

Le vendite mensili variano da circa 80 a oltre 400 unità.

Il prezzo mediano varia tra 73.800 $ e 180.000 $.

Per quanto riguarda le specifiche città, Bryan-College Station è la città con il valore degli immobili mediamente più alto, mentre Tyler è la città dove avvengono più compravendite.

La città che risulta meno redditizia è Wichita.

  1. Indici di posizione, variabilità e forma

Si calcolano alcuni indici statistici per misurare la dispersione dei dati.

IQR(dati$sales)
## [1] 120
IQR(dati$median_price)
## [1] 32750
IQR(dati$months_inventory)
## [1] 3.15
skewness(dati$sales)
## [1] 0.718104
skewness(dati$median_price)
## [1] -0.3645529
skewness(dati$months_inventory)
## [1] 0.04097527

Le vendite hanno un intervallo interquartile di circa 120 unità.

I prezzi hanno un intervallo interquartile di circa 32.750 $.

La distribuzione delle vendite risulta più asimmetrica rispetto alle altre variabili.

  1. Variabili con maggiore variabilità e asimmetria

Per confrontare le variabili in termini di variabilità relativa, si utilizza il coefficiente di variazione (CV).

cv <- function(x){ sd(x) / mean(x) * 100 }
cv(dati$sales)
## [1] 41.42203
cv(dati$volume)
## [1] 53.70536
cv(dati$median_price)
## [1] 17.08218
cv(dati$listings)
## [1] 43.30833
cv(dati$months_inventory)
## [1] 25.06031

Il CV più alto si osserva per la variabile sales, indicando che il numero di vendite mensili è la più variabile.

La maggiore asimmetria invece si riscontra ancora nelle vendite, che presentano valori estremi in alcuni mesi.

  1. Creazione di classi per una variabile quantitativa

Si suddivide la variabile sales in classi da 50 unità.

dati$sales_cl <- cut(dati$sales, breaks = seq(50, 450, 50))
table(dati$sales_cl)
## 
##  (50,100] (100,150] (150,200] (200,250] (250,300] (300,350] (350,400] (400,450] 
##        21        72        56        32        34        13         9         3
ggplot(dati, aes(x = sales_cl)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Distribuzione delle vendite per classi", x = "Classi di vendite", y = "Frequenza") +
  theme_bw()

gini.index<-function(x){
  ni=table(x)
  fi=ni/length(x)
  fi2=fi^2
  J=length(table(x))
  gini=1-sum(fi2)
  gini.normalizzato=gini/((J-1)/J)
  return(gini.normalizzato)
}
gini.index(dati$sales)
## [1] 0.998379

Le classi mostrano che l’andamento delle vendite si concentra per lo pù tra i 100 e 200 immobili al mese.

Grazie all’indice di Gini si può evidenziare che le vendite sono una variabile molto eterogenea.

  1. Calcolo di probabilità

Si calcolano alcune probabilità di estrazione casuale di una riga dal dataset.

p_beaumont <- mean(dati$city == "Beaumont")
p_march <- mean(dati$month == "3")
p_dec2012 <- mean(dati$month == "12" & dati$year == 2012)
p_beaumont; p_march; p_dec2012
## [1] 0.25
## [1] 0.08333333
## [1] 0.01666667

Probabilità che la riga appartenga ad una città specifica (60 su 240): 25%

Probabilità che esca un mese specifico (20 su 240): 8,3%

Probabilità che sia di un mese e di un anno specifico (4 su 240): 1,6%

  1. Creazione di nuove variabili

Si introducono due nuove variabili:

mean_price: prezzo medio degli immobili (volume / numero vendite).

efficiency: efficacia degli annunci (listings / months_inventory).

dati$mean_price <- (dati$volume * 1e6) / dati$sales
dati$efficiency <- dati$listings / dati$months_inventory

summary(dati$mean_price)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   97010  132939  156588  154320  173915  213234
summary(dati$efficiency)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   106.8   140.1   176.0   187.3   236.0   329.3

Queste variabili aiutano a capire meglio il valore medio delle case e quanto rapidamente vengono smaltite le inserzioni.

Un locale in un annuncio medio si può stimare che venga venduto in 176 giorni.

  1. Analisi condizionata

Si calcolano statistiche descrittive per città e anno.

dati %>%
  group_by(city, year) %>%
  summarize(
    mean_sales = mean(sales),
    sd_sales = sd(sales),
    mean_price = mean(median_price),
    sd_price = sd(median_price)
  )
## # A tibble: 20 × 6
## # Groups:   city [4]
##    city                   year mean_sales sd_sales mean_price sd_price
##    <chr>                 <int>      <dbl>    <dbl>      <dbl>    <dbl>
##  1 Beaumont               2010       156.     36.9    133117.   13354.
##  2 Beaumont               2011       144      22.7    125642.    9603.
##  3 Beaumont               2012       172.     28.4    126533.    7973.
##  4 Beaumont               2013       201.     37.7    132400     7785.
##  5 Beaumont               2014       214.     36.5    132250     9835.
##  6 Bryan-College Station  2010       168.     70.8    153533.    5474.
##  7 Bryan-College Station  2011       167.     62.2    151417.    3709.
##  8 Bryan-College Station  2012       197.     74.3    153567.    7096.
##  9 Bryan-College Station  2013       238.     95.8    159392.    5429.
## 10 Bryan-College Station  2014       260.     86.7    169533.    7776.
## 11 Tyler                  2010       228.     49.0    135175     4782.
## 12 Tyler                  2011       239.     49.6    136217.    8505.
## 13 Tyler                  2012       264.     46.4    139250     7983.
## 14 Tyler                  2013       287.     53.0    146100     6726.
## 15 Tyler                  2014       332.     56.9    150467.    8543.
## 16 Wichita Falls          2010       123.     26.6     98942.   10361.
## 17 Wichita Falls          2011       106.     19.8     98142.   10632.
## 18 Wichita Falls          2012       112.     14.2    100958.   12347.
## 19 Wichita Falls          2013       121.     26.0    105000    10383.
## 20 Wichita Falls          2014       117      21.1    105675    12444.
  1. Visualizzazioni con ggplot2

Prezzi mediani per città

ggplot(data = dati, aes(x = city, y = median_price)) +
  geom_boxplot(fill = "green") +
  labs(title = "Prezzi mediani per città") +
  theme_bw()

Volume delle vendite per città e anno

ggplot(data = dati, aes(x = city, y = volume, fill = factor(year))) +
  geom_boxplot() +
  labs(title = "Volume vendite per città e anno") +
  theme_bw()

Vendite per mese e città

library(lubridate)
ggplot(data = dati, aes(x = factor(month), y = sales, fill = city)) +
  geom_col(position = "dodge") +
  facet_wrap(~year, scales="free", nrow=3) +
  labs(title = "Vendite mensili per città e anno",
       x = "Mese", y = "Numero di vendite") +
  theme_bw()

Vendite nel tempo

# Creazione della variabile data (primo giorno del mese)
dati$date <- ymd(paste(dati$year, dati$month, "01", sep = "-"))

# Line chart delle vendite nel tempo
ggplot(dati, aes(x = date, y = sales, color = city)) +
  geom_line(linewidth = 1) +
  labs(title = "Andamento delle vendite nel tempo per città",
       x = "Data", y = "Numero di vendite") +
  theme_bw()

  1. Conclusioni

I mesi estivi, in particolare agosto, registrano il numero più alto di vendite.

Tra le città, Bryan-College Station ha i prezzi mediani più elevati.

Tyler è la città con il maggior numero di compravendite.

Wichita Falls risulta la meno redditizia.

In generale, l’analisi evidenzia una forte stagionalità e differenze significative tra città, utili per ottimizzare le strategie di mercato.