knitr::opts_chunk$set(
  echo = TRUE,         
  eval = TRUE,        
  warning = FALSE,     
  message = FALSE,
   comment = NA,
  fig.width = 7, fig.height = 4, dpi = 150
)

Librerie

library(dplyr)          
library(ggplot2)        
library(moments)         
library(zoo)
library(gridExtra)
library(gghalves)

# Funzione per l’indice di eterogeneità di Gini
gini.index <- function(x){
  ni <- table(x)
  fi <- ni / length(x)
  fi2 <- fi^2
  J <- length(ni)
  gini <- 1 - sum(fi2)
  gini.norm <- gini / ((J - 1) / J)
  return(gini.norm)
}

# Coefficiente di variazione
CV <- function(x){
  return( sd(x) / mean(x)*100 )
  }

STEP 0: CARICAMENTO DATASET

data <- read.csv("realestate_texas.csv")
DT::datatable(head(data,100)) #tabella interattiva

STEP 1: ANALISI DELLE VARIABILI

1. Tipologia variabili

glimpse(data)
Rows: 240
Columns: 8
$ city             <chr> "Beaumont", "Beaumont", "Beaumont", "Beaumont", "Beau…
$ year             <int> 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010, 2010,…
$ month            <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5,…
$ sales            <int> 83, 108, 182, 200, 202, 189, 164, 174, 124, 150, 150,…
$ volume           <dbl> 14.162, 17.690, 28.701, 26.819, 28.833, 27.219, 22.70…
$ median_price     <dbl> 163800, 138200, 122400, 123200, 123100, 122800, 12430…
$ listings         <int> 1533, 1586, 1689, 1708, 1771, 1803, 1857, 1830, 1829,…
$ months_inventory <dbl> 9.5, 10.0, 10.6, 10.6, 10.9, 11.1, 11.7, 11.6, 11.7, …

Il dataset utilizzato per l’analisi del mercato immobiliare del Texas raccoglie dati mensili relativi alle vendite di immobili in diverse città texane. Ogni osservazione rappresenta una combinazione di città, mese e anno, e include informazioni quantitative e qualitative sulle dinamiche di mercato.

Le variabili presenti sono:

  • city: nome della città (variabile qualitativa nominale)
  • year: anno dell’osservazione (variabile quantitativa discreta, scala intera)
  • month: mese dell’osservazione (1–12; variabile quantitativa discreta, scala intera)
  • sales: numero di vendite immobiliari (quantitativa discreta, conteggio)
  • volume: valore totale delle vendite in milioni di dollari (quantitativa continua, scala reale)
  • median_price: prezzo mediano delle case vendute in dollari (quantitativa continua, scala reale)
  • listings: numero totale di annunci attivi (quantitativa discreta, conteggio)
  • months_inventory: numero di mesi necessari per vendere tutte le inserzioni (quantitativa continua, scala reale)

2. Gestione delle variabili temporali (year, month)

Pur esserendo quantitativamente discrete, le varabili temporali possono essere considerate in relazione a: serie temporali, trend e analsi stagionali. A tal fine saranno composte insieme per creare una variabile temporale completa utile per serie storiche.

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

3. Analisi possibile per ciascuna variabile

Le variabili qualitative nominali, come ad esempio la variabile city, rappresentano categorie prive di un ordine naturale. Per queste variabili è possibile effettuare analisi descrittive tramite distribuzioni di frequenza, supportate da grafici a barre o grafici a torta. Una misura utile in questo contesto è la moda, ovvero la categoria che si presenta con maggiore frequenza. Inoltre, è possibile calcolare indici di eterogeneità, come l’indice di Gini, che misura quanto la distribuzione sia concentrata o dispersa. Le variabili qualitative possono essere confrontate tra loro o con variabili quantitative tramite tabelle di contingenza.

Le variabili quantitative discrete, come sales (numero di vendite) e listings (numero di annunci attivi), sono basate su conteggi interi. Consentono il calcolo di indici di posizione come media, mediana e moda, e di indici di dispersione come la deviazione standard, l’intervallo interquartile (IQR) e il coefficiente di variazione (CV), che esprime la variabilità relativa rispetto alla media. Quando i valori non sono troppi, è utile costruire distribuzioni di frequenza. A livello grafico, risultano efficaci istogrammi e boxplot, utili per osservare la distribuzione e individuare eventuali outlier.

Le variabili quantitative continue, come volume (valore totale delle vendite), median_price (prezzo mediano degli immobili) e months_inventory (mesi necessari a vendere le case), permettono analisi statistiche più approfondite. Oltre ai tradizionali indici di posizione e dispersione (incluso il CV), è possibile analizzare la forma della distribuzione attraverso l’asimmetria (skewness) e la curtosi (kurtosis). Queste variabili si prestano anche a essere suddivise in classi per costruire distribuzioni di frequenza o analizzare la concentrazione dei valori. Dal punto di vista grafico, sono rappresentabili con istogrammi, boxplot, curve di densità e grafici di confronto tra gruppi (es. tra città). Inoltre, possono essere utilizzate all’interno di modelli statistici come analisi dei trend temporali per esplorare relazioni.

STEP 2: ANALISI DESCRITTIVA

Indici di posizione, variabilità e forma

Definendo con:

  • mu la media

  • SD la deviazione standard

  • CV il Coefficiente di variazione

  • γ1 l’asimmetria di fisher

  • γ₂ la curtosi centrata sulla normale

numeric_vars <- c("sales", "volume", "median_price", "listings", "months_inventory")
for (var in numeric_vars) {
  cat("Variabile:", var, "\n")
  x <- data[[var]]
  cat("Quantili:","\n")
  print(quantile(x))
  cat("IQR:", round(IQR(x),2), "\n")
  cat("Media:", round(mean(x),2), "\t")
  cat("SD:", round(sd(x),2), "\t")
  cat("CV:", round(CV(x),2), "\n")
  cat("γ1:", round(skewness(x),2), "\t")
  cat("γ₂:", round(kurtosis(x)-3,2), "\n\n")
}
Variabile: sales 
Quantili: 
   0%   25%   50%   75%  100% 
 79.0 127.0 175.5 247.0 423.0 
IQR: 120 
Media: 192.29   SD: 79.65   CV: 41.42 
γ1: 0.72    γ₂: -0.31 

Variabile: volume 
Quantili: 
     0%     25%     50%     75%    100% 
 8.1660 17.6595 27.0625 40.8930 83.5470 
IQR: 23.23 
Media: 31.01    SD: 16.65   CV: 53.71 
γ1: 0.88    γ₂: 0.18 

Variabile: median_price 
Quantili: 
    0%    25%    50%    75%   100% 
 73800 117300 134500 150050 180000 
IQR: 32750 
Media: 132665.4     SD: 22662.15    CV: 17.08 
γ1: -0.36   γ₂: -0.62 

Variabile: listings 
Quantili: 
    0%    25%    50%    75%   100% 
 743.0 1026.5 1618.5 2056.0 3296.0 
IQR: 1029.5 
Media: 1738.02  SD: 752.71  CV: 43.31 
γ1: 0.65    γ₂: -0.79 

Variabile: months_inventory 
Quantili: 
   0%   25%   50%   75%  100% 
 3.40  7.80  8.95 10.95 14.90 
IQR: 3.15 
Media: 9.19     SD: 2.3     CV: 25.06 
γ1: 0.04    γ₂: -0.17 

sales

CV = 41.4%: vendite abbastanza ballerine tra i mesi.
γ₁ = +0.72: pochi mesi con vendite molto alte (picchi a destra).
Andamento variabile + qualche mese “boom”.

volume

CV = 53.7%: la più instabile: valori mensili molto dispersi.
γ₁ = +0.88: pochi mesi con volumi eccezionalmente alti (grandi transazioni).
Pochi mesi con affari grossi che tirano su la media.

median_price

CV = 17.1%: stabile.
γ₁ = −0.36: coda a sinistra: qualche mese con prezzi più bassi del solito, ma niente picchi alti.
Prezzi centrati, senza “strappi”.

listings

CV = 43.3%: offerta molto variabile.
γ₁ = +0.65: qualche mese con tantissimi annunci (coda a destra).
L’offerta si gonfia in certi periodi.

months_inventory

CV = 25.1%: abbastanza stabile.
γ₁ = +0.04 ≈ 0: praticamente simmetrica.
I tempi di assorbimento del mercato cambiano poco.

Le variabili volume e sales sono le più variabili e asimmetriche, riflettendo la dinamicità del mercato.
Il prezzo mediano e i tempi di vendita risultano invece stabili, segnalando che, pur variando il numero e il valore totale delle vendite, i prezzi delle abitazioni e i ritmi di mercato non subiscono forti oscillazioni.
Queste evidenze suggeriscono che la volatilità delle vendite è legata più ai volumi e alla quantità di transazioni che non ai prezzi medi delle abitazioni.

Distribuzioni di frequenza

Variabile: city

city_freq <- table(data$city)
city_rel <- prop.table(city_freq)
city_df <- data.frame(Città = names(city_freq),
                      n = as.numeric(city_freq),
                      f = round(as.numeric(city_rel), 2))
city_df
                  Città  n    f
1              Beaumont 60 0.25
2 Bryan-College Station 60 0.25
3                 Tyler 60 0.25
4         Wichita Falls 60 0.25

La variabile city è qualitativa nominale. La tabella mostra la numerosità delle osservazioni per ogni città texana. Le frequenze relative indicano la quota percentuale di dati riferiti a ciascuna città. Un’elevata disomogeneità (una città molto più frequente delle altre) implica bassa eterogeneità e indice di Gini basso, cioè una distribuzione concentrata.

Variabile: year

year_freq <- table(data$year)
year_rel <- prop.table(year_freq)
year_df <- data.frame(Anno = names(year_freq),
                      n = as.numeric(year_freq),
                      f = round(as.numeric(year_rel), 2))
year_df
  Anno  n   f
1 2010 48 0.2
2 2011 48 0.2
3 2012 48 0.2
4 2013 48 0.2
5 2014 48 0.2

La variabile year rappresenta l’anno di riferimento.
Poiché tutti gli anni sono equidistanti e ricorrono per ogni città, ci si aspetta una distribuzione piuttosto uniforme (una frequenza per anno simile).
Eventuali squilibri possono segnalare dati mancanti o intervalli temporali con più osservazioni.

Variabile: month

month_freq <- table(data$month)
month_rel <- prop.table(month_freq)
month_df <- data.frame(Mese = names(month_freq),
                       Freq = as.numeric(month_freq),
                       Perc = round(as.numeric(month_rel), 2))
month_df
   Mese Freq Perc
1     1   20 0.08
2     2   20 0.08
3     3   20 0.08
4     4   20 0.08
5     5   20 0.08
6     6   20 0.08
7     7   20 0.08
8     8   20 0.08
9     9   20 0.08
10   10   20 0.08
11   11   20 0.08
12   12   20 0.08

La variabile month (1–12) mostra la distribuzione delle osservazioni tra i mesi dell’anno.
In un dataset bilanciato, la frequenza dei mesi dovrebbe essere pressoché costante.
Differenze marcate possono indicare stagionalità o dati mancanti.

STEP 3: VARIABILITÀ E ASIMMETRIA

Per identificare la variabile con la maggiore variabilità e quella con la distribuzione più asimmetrica, si è utilizzato il Coefficiente di Variazione (CV) come indicatore di dispersione relativa. Il CV esprime la deviazione standard in rapporto alla media, permettendo così di confrontare la variabilità tra variabili aventi scale diverse.

Dall’analisi risulta che la variabile volume presenta il CV più elevato (53,71%), indicando una forte dispersione dei valori rispetto alla media. Inoltre, volume mostra anche il valore più alto di asimmetria positiva, con γ₁ = 0.88, segnalando una distribuzione asimmetrica verso destra, caratterizzata da una coda lunga verso valori elevati. Questo implica la presenza di osservazioni particolarmente alte rispetto alla media.

Dal punto di vista statistico, il fatto che volume abbia sia il più alto CV sia la massima asimmetria suggerisce un comportamento altamente variabile e non simmetrico. In ambito immobiliare, ciò è plausibile: il valore totale delle vendite può essere influenzato da eventi eccezionali o picchi localizzati in determinate città o mesi. Tali episodi generano una distribuzione più dispersa e con outlier verso l’alto.

Queste caratteristiche rendono il volume una variabile da monitorare.

STEP 4: CLASSI + INDICE DI GINI

data$price_class_k <- cut(data$median_price / 1000,
                        breaks = pretty(data$median_price / 1000, n = 5))

# Grafico delle classi
ggplot(data, aes(x = price_class_k)) +
  geom_bar(fill = "steelblue") +
  labs(title = "Prezzo mediano(in k): distribuzioni in classi", x = "Classi prezzo", y = "Frequenza assoluta")+
  theme_classic()

gini <- gini.index(data$price_class)
cat("Indice di Gini normalizzato:", gini)
Indice di Gini normalizzato: 0.9005

La distribuzione del prezzo mediano è centrata sulle fasce 120–160 mila $ (picco 140–160), con coda leggermente verso i valori più bassi — in linea con γ₁ ≈ −0.36. L’indice di Gini normalizzato ≈ 0,90 indica buona eterogeneità: le vendite non sono concentrate in una sola fascia.

STEP 5: CALCOLO PROBABILITÀ

n <- nrow(data)
cat("Probabilità città Beaumont:", mean(data$city == "Beaumont"), "\n")
Probabilità città Beaumont: 0.25 
cat("Probabilità mese Luglio:", mean(data$month == 7), "\n")
Probabilità mese Luglio: 0.08333333 
cat("Probabilità dicembre 2012:", mean(data$month == 12 & data$year == 2012), "\n")
Probabilità dicembre 2012: 0.01666667 

STEP 6: NUOVE VARIABILI

Prezzo medio per immobile

data$avg_price <- data$volume * 1e6 / data$sales

d_avg <- density(data$avg_price)
plot(d_avg, main = "Prezzo medio per transazione: funzione di densità", xlab = "Prezzo ($)")

La curva di densità è concentrata tra 120–170 mila $, con picco principale attorno a 150–160 mila $ e un secondo rigonfiamento più lieve vicino a 125–135 mila $, indizio di quasi-bimodalità (probabili sottosegmenti per città/periodo). La coda verso i valori alti è un po’ più lunga, segnalando pochi mesi con prezzi medi elevati. Nel complesso la dispersione è moderata, coerente con il CV ≈ 17% della distribuzione dei prezzi mediani.

Efficacia degli annunci

# Efficacia degli annunci = vendite / annunci
data$effectiveness <-  data$sales/data$listings

d_eff <- density(data$effectiveness)
plot(d_eff,
     main = "Efficacia degli annunci: funzione di densità",
     xlab = "Efficacia (vendite / annunci)",
     ylab = "Densità",
     xlim = c(0, 0.5))

La densità è fortemente asimmetrica a destra: picco netto intorno a 0,10 (≈10%) e coda lunga fino a ~0,4–0,5. La maggior parte dei mesi/città ha un’efficacia tra ~0,06 e 0,15; valori oltre 0,20 sono rari e indicano fasi di assorbimento eccezionalmente alto. In media significa circa 1 vendita ogni 10 annunci al mese. Ci si aspetta che quando l’efficacia cresce i mesi d’inventario calino (relazione inversa da verificare con uno scatter).

STEP 7: ANALISI CONDIZIONATA CON DPLYR

Analisi condizionata per città su base annua

year_summary <- data %>%
  group_by(city, year) %>%
  summarise(
    mean_price = mean(avg_price, na.rm = TRUE),
    sd_price = sd(avg_price, na.rm = TRUE),
    mean_effectiveness = mean(effectiveness, na.rm = TRUE)
  ) %>%
  mutate(
    lower = mean_price - sd_price,
    upper = mean_price + sd_price
  )

# Primo grafico: prezzo su base annua
p1 <- ggplot(year_summary, aes(x = year, y = mean_price, color = city)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = city), alpha = 0.2, color = NA) +
  labs(
    title = "Prezzo medio annuo degli immobili per città (±1 SD)",
    x = "Anno", 
    y = "Prezzo medio ($)",
    color = "Città", fill = "Città"
  ) +
  theme_minimal()

# Secondo grafico: efficacia annunci
p2 <- ggplot(year_summary, aes(x = year, y = mean_effectiveness, color = city)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  labs(
    title = "Tasso di efficacia annuo degli annunci",
    x = "Anno", 
    y = "Efficacia (vendite /annunci)",
    color = "Città"
  ) +
  theme_minimal()

grid.arrange(p1, p2, nrow = 2)

Analisi condizionata per città su base mensile

month_summary <- data %>%
  group_by(city, month) %>%
  summarise(
    mean_price = mean(avg_price, na.rm = TRUE),
    sd_price = sd(avg_price, na.rm = TRUE),
    mean_effectiveness = mean(effectiveness, na.rm = TRUE),
    sd_effectiveness = sd(effectiveness, na.rm = TRUE),
      .groups = "drop"
  ) %>%
  mutate(
    lower = mean_price - sd_price,
    upper = mean_price + sd_price
  )

# Grafico Prezzo Medio

p3 <- ggplot(month_summary, aes(x = month, y = mean_price, color = city)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  geom_ribbon(aes(ymin = lower, ymax = upper, fill = city), alpha = 0.2, color = NA) +
  scale_x_continuous(breaks = 1:12, limits = c(1, 12), expand = c(0, 0)) +
  labs(
    title = "Prezzo medio mensile degli immobili per città (±1 SD)",
    x = "Mese", y = "Prezzo medio ($)",
    color = "Città", fill = "Città"
  ) +
  theme_minimal()

# Grafico Efficacia
p4 <- ggplot(month_summary, aes(x = month, y = mean_effectiveness, color = city)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  scale_x_continuous(breaks = 1:12, limits = c(1, 12), expand = c(0, 0)) +
  labs(
    title = "Tasso di efficacia mensile degli annunci",
    x = "Mese", y = "Efficacia (Vendite /Annunci)",
    color = "Città"
  ) +
  theme_minimal()

# Mostra i grafici affiancati su due righe
gridExtra::grid.arrange(p3, p4, nrow = 2)

STEP 8: GRAFICI CON GGPLOT2

ggplot(data, aes(x = city, y = median_price)) +
  geom_half_violin(side = "l", fill = "lightblue") +
  geom_half_boxplot(side = "r", fill = "pink") +
  labs(title = "Box plot: prezzo mediano case", x = "Città", y = "Prezzo mediano ($)") +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Gli half-violin/boxplot del prezzo mediano mostrano gap chiari tra città: bryan-college station è la più cara (mediane più alte e coda superiore estesa), Tyler è seconda, Beaumont intermedia, Eichita falls nettamente più bassa. La dispersione è contenuta ovunque, coerente con il CV ridotto dei prezzi.

ggplot(data, aes(x = city, y = volume)) +
  geom_half_violin(side = "l", fill = "lightgreen") +
  geom_half_boxplot(side = "r", fill = "salmon") +
  labs(title = "Box plot: volume vendite", x = "Città", y = "Volume (milioni $)") +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Sul volume di vendite per città emergono differenze più marcate: Tyler e Bryan-college station hanno volumi medi e variabilità più elevati, beaumont è intermedia, wichita falls ha volumi bassi e poco dispersi. Dunque i picchi di mercato sono trainati soprattutto da Tyler e Bryan.

ggplot(data, aes(x = factor(year), y = volume)) +
  geom_half_violin(side = "l", fill = "lightgray") +
  geom_half_boxplot(side = "r", fill = "coral") +
  labs(title = "Box plot: volume vendite", x = "Anno", y = "Volume (milioni $)") +
  theme_classic()

Il volume per anno evidenzia un trend crescente dal 2010 al 2014: si alzano sia la mediana sia la coda superiore, segnale di progressivo rafforzamento del mercato e di mesi con transazioni di importo sempre maggiore.

ggplot(data, aes(x = factor(month), y = sales, fill = city)) +
  geom_col() +
  labs(
    x= "Mesi",
    y= "Vendite",
    title = "Numero di vendite mensili per singola città"
  )+
  theme_classic()

Le barre mensili stacked per città mostrano una stagionalità netta nei volumi di vendita: minimi a gennaio-febbraio, crescita fino al picco tra maggio e luglio, poi rallentamento in autunno. Nella composizione, Tyler pesa di più quasi ogni mese; Wichita Falls pesa meno.

ggplot(data, aes(x = factor(month), y = sales, fill = city)) +
  geom_col(position = "fill") +
  labs(
    x= "Mesi",
    y= "Vendite",
    title = "Distribuzione percentuale vendite mensili per singola città")+
  theme_classic()

La versione normalizzata del grafico a barre sovrapposte conferma che le quote relative tra città sono abbastanza stabili, con un lieve aumento della quota di Bryan-College station a metà anno e cioè nei mesi di picco.

plot_city_year <- data %>%
  group_by(month, year, city) %>%
  summarise(sales = sum(sales, na.rm = TRUE), .groups = "drop") %>%
  mutate(
    month = factor(month, levels = 1:12, labels = month.abb),
    year  = factor(year)
  )

ggplot(plot_city_year, aes(x = year, y = sales, fill = city)) +
     geom_col() +
     facet_grid(~ month, switch = "x") +
     labs(title = "Numero vendite mensili per singole città: barre affiancate per anno",
          x = "Mese", y = "Vendite", fill = "Città") +
     scale_x_discrete(drop = FALSE) +
     theme_minimal() +
     theme(
         legend.position = "bottom",
         strip.placement = "outside",
         strip.background = element_blank(),
         axis.text.x = element_text(angle = 90, hjust = 0.5, vjust = 0.5))

Il grafico del numero di vendite mensili, a barre affiancate per singolo anno, mostra che nel 2013-2014 i livelli sono superiori al 2010-2011 praticamente in tutti i mesi, quindi la crescita è diffusa e non episodica.Questo grafico ci conferma il trend di crescita del numero delle vendite e la stagionalità della serie storica in esame. Tuttavia, con uno sguardo più attento, Wichita Falls sembra essere molto stabile nel volume di vendita, per le altre città è difficile dare un parere da questo grafico. Tyler conferma un trend crescente.

ggplot(data, aes(x = date, y = sales, color = city)) +
  geom_line() +
  labs(title = "Serie storica vendite per singola città", x = "Data", y = "Vendite")+
  theme_classic()

Il line chart delle vendite nel tempo ribadisce stagionalità e trend: picchi ricorrenti a metà anno, volatilità maggiore per Bryan-College Station e Tyler, livelli strutturalmente più bassi per Wichita Falls che in realtà non cresce mai veramente nel trend. Complessivamente, mercato in espansione con forte componente stagionale.

CONCLUSIONI

Il mercato osservato mostra prezzi mediani concentrati soprattutto tra 120 –160 mila $, con un picco intorno a 140–160 mila: la forma è poco dispersa e lievemente sbilanciata, in linea con la bassa variabilità dei prezzi (CV ≈ 17%). In generale il mercato è stabile rispetto ai prezzi mediani. La divisone in classi di prezzo e l’Indice di Gini normalizzato ≈ 0,90 indicano elevata eterogeneità tra classi, quindi nessuna fascia “monopolizza” le osservazioni: il mix di prezzo è ampio ma non polarizzato.
Sui driver di volume emerge invece forte volatilità e coda destra: il volume è la variabile più instabile (CV più alto) e anche la più asimmetrica (γ₁ positivo), segnale di mesi e città con picchi eccezionali di transato che spingono la distribuzione verso l’alto. Questo rende i volumi più difficili da prevedere e consiglia metriche robuste e attenzione agli outlier.

L’efficacia degli annunci (sales/listings) è generalmente bassa e concentrata, con una lunga coda destra: tipicamente servono molti annunci per generare una vendita, ma in qualche mese e città la conversione sale nettamente. Operativamente conviene analizzare quali caratteristiche (stagione, città, livello di prezzo) coincidono con i picchi di efficacia per replicarli.
Dalla lettura congiunta dei grafici temporali si nota stagionalità marcata delle vendite (primavera-estate più forte) e una progressiva crescita nei totali più recenti: pianificare campagne, pricing dinamico e gestione dell’inventario con anticipo sui mesi caldi può migliorare il rapporto listings/sales.

Le probabilità calcolate sui label confermano la struttura del dataset: una riga su quattro è Beaumont (4 città equiponderate), luglio vale ~8,3% (12 mesi equiprobabili) e un mese specifico come dicembre 2012 pesa ~1,7% (12×5 anni). Queste grandezze sono utili come baseline per confronti successivi.

Dopo una prima analisi complessiva si uò passare all’analisi per singola città. Dai box/violin si osserva che Bryan-College Station è l’area con i prezzi più alti, seguita da Tyler; Beaumont si colloca su livelli intermedi, mentre Wichita Falls risulta nettamente più economica. Queste differenze strutturali suggeriscono strategie di pricing e allocazione del budget marketing differenziate per città.

Bryan-College Station
Posizionamento premium: pricing alto e cura massima della qualità degli annunci (staging, video/virtual tour), campagne performance orientate a lead di fascia alta; meglio pochi lead qualificati che volume, è sicuramente la città su cui puntare. L’efficacia degli annunci ha un trend crescente nel corso degli anni. Si consiglia una forte spinta sui mesi caldi nei quali il tasso di conversione degli annunci in vendita sale vertiginosamente.

Tyler
Grossi volumi di vendita e mid-high pricing, qui si consiglia un discorso quantitativo più che qualitativo. La distribuzione dei prezzi è stabile con pochissimi outliers, è importante quindi mantenere un pricing dinamico vicino ai comparables poichè il mercato non accetta prezzi lontiano dal prezzo mediano. Anche qui si consiglia spinta su mesi caldi nei quali il prezzo medio mensile sale a livello di Bryan-College Station.

Beaumont
Il prezzo medio degli immobili è rimasto invariato negli anni nonostante un tasso di efficacia annuo in aumento. I volumi di vendita sono molto stabili, non ci sono valori eccezionali quindi non c’è da aspettarsi exploit. Anche qui nei mesi estivi c’è da aspettarsi un aumento dei volumi di vendita, tuttavia i picchi di questi volumi non sono per niente paragonabili a quelli di Bryan-College Station e Tyler quindi. Si consiglia di concentrare il marketing su questi mesi ma con una spesa ridotta rispetto alle prime due città.

Wichita Falls
È il mercato meno appetibile delle 4 città in esame. Il prezzo medio degli immobili è costante dal 2010 al 2014 e il tasso di efficacia degli annunci ha un trend ribassista nell’ultimo anno. Prezzo mediano e volumi in generale sono molto bassi. Quantità più che qualità. C’è una sensibile differenza tra il tasso di efficacia degli annunci tra i mesi di Febbraio e Marzo, è questo il momento in cui inserire gli annunci migliori!