ANALISI DEL MERCATO IMMOBILIARE DEL TEXAS

1. ANALISI DELLE VARIABILI

#Imposto la directory
getwd()
## [1] "C:/Users/Francesco Innocenti/Desktop/Statistica Descrittiva in R"
setwd("C:/Users/Francesco Innocenti/Desktop/Statistica Descrittiva in R")
getwd()
## [1] "C:/Users/Francesco Innocenti/Desktop/Statistica Descrittiva in R"
#Carico i dati in R (file csv)
data<-read.csv("Real Estate Texas.csv") 

#Indago sul Dataset : struttura e tipo variabili
head(data)
##       city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010     1    83 14.162       163800     1533              9.5
## 2 Beaumont 2010     2   108 17.690       138200     1586             10.0
## 3 Beaumont 2010     3   182 28.701       122400     1689             10.6
## 4 Beaumont 2010     4   200 26.819       123200     1708             10.6
## 5 Beaumont 2010     5   202 28.833       123100     1771             10.9
## 6 Beaumont 2010     6   189 27.219       122800     1803             11.1
names(data)
## [1] "city"             "year"             "month"            "sales"           
## [5] "volume"           "median_price"     "listings"         "months_inventory"
str(data)
## '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(data)
##      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

Analisi Variabili del Dataset [ Tipo Variabile | Descrizione | Tipo Analisi] :

  • City : Variabile Qualitativa | indica le città a cui si riferiscono i dati | Possibile utilizzo: confronto vendite/volume tra città o aree geografiche.

  • Year : Variabile Quantitativa Discreta | indica Anno di osservazione | Dimensione temporale, utilizzabile per analisi di trend.

  • Month : Variabile Quantitativa Discreta | indica Mese di osservazione | Dimensione temporale, utile per analisi di stagionalità.

  • Sales : Variabile Quantitativa Discreta | Numero totale di case vendute. | Analisi Descrittiva della domanda immobiliare (media, dispersione, distribuzione)

  • Volume : Variabile Quantitativa continua | misura Valore totale delle vendite (in milioni di dollari). | Analisi descrittiva del giro d’affari del mercato (media, dispersione, distribuzione)

  • Median Price : Variabile Quantitativa Continua | misura prezzo mediano di vendita (in dollari) | Analisi Descrittiva sul livello dei prezzi delle case

  • Listings : Variabile Quantitativa Discreta | misura v numero totale di annunci attivi | Analisi dell’offerta immobiliare (media, dispersione, distribuzione).

  • months_inventory : Variabile Quantitativa Continua | Tempo (in mesi) stimato per vendere tutte le inserzioni correnti. | Indicatore dell’equilibrio domanda/offerta.

Tipo Analisi Possibili :

  1. City -> Confronto tra gruppi

  2. Year / Month -> Trend & Stagionalità

  3. Variabili Quantitative -> Distribuzioni, Variabilità e Correlazione

2. INDICI DI VARIABILITA’, POSIZIONE E FORMA

  • Per Variabili Quantitative ( sales, volume, median_price, listings , month_inventory )

    -> Calcolo indici di :

    • Posizione : Media, Mediana, Minimo , Massimo , Quartili

    • Variabilità : Varianza , Deviazione Standard , Range

    • Forma : Asimmetria , Curtosi

  • Per variabili quantitative/temporali (city, year , month)

    -> Calcolo Distribuzione di frequenza

attach(data)
library(moments)

#Quantitative Variable Index
#Sales
summary(sales)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    79.0   127.0   175.5   192.3   247.0   423.0
sales_avg<-mean(sales)
sales_median<- median(sales)
sales_sd<- sd(sales)
sales_range<- range(sales)[2]-range(sales)[1]; 
sales_iqr<- IQR(sales)
sales_var<- var(sales); 
sales_asimmetry<-skewness(sales); 
sales_curtosis<- kurtosis(sales)
##Position
sales_avg; sales_median
## [1] 192.2917
## [1] 175.5
##Variability
sales_sd; sales_var; 
## [1] 79.65111
## [1] 6344.3
sales_range ;sales_iqr
## [1] 344
## [1] 120
##Shape
sales_asimmetry; sales_curtosis
## [1] 0.718104
## [1] 2.686824
#Volume
summary(volume)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   8.166  17.660  27.062  31.005  40.893  83.547
volume_avg<-mean(volume)
volume_median<- median(volume)
volume_sd<- sd(volume)
volume_range<- range(volume)[2]-range(volume)[1]; 
volume_iqr<- IQR(volume)
volume_var<- var(volume); 
volume_asimmetry<-skewness(volume); 
volume_curtosis<- kurtosis(volume)
##Position
volume_avg; volume_median
## [1] 31.00519
## [1] 27.0625
##Variability
volume_sd; volume_var; 
## [1] 16.65145
## [1] 277.2707
volume_range ;volume_iqr
## [1] 75.381
## [1] 23.2335
#Shape
volume_asimmetry; volume_curtosis
## [1] 0.884742
## [1] 3.176987
#Median Price 
summary(median_price)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   73800  117300  134500  132665  150050  180000
median_price_avg<-mean(median_price)
median_price_median<- median(median_price)
median_price_sd<- sd(median_price)
median_price_range<- range(median_price)[2]-range(median_price)[1]; 
median_price_iqr<- IQR(median_price)
median_price_var<- var(median_price); 
median_price_asimmetry<-skewness(median_price); 
median_price_curtosis<- kurtosis(median_price)
##Position
median_price_avg; median_price_median
## [1] 132665.4
## [1] 134500
##Variability
median_price_sd; median_price_var; 
## [1] 22662.15
## [1] 513572983
median_price_range; median_price_iqr
## [1] 106200
## [1] 32750
##Shape
median_price_asimmetry; median_price_curtosis
## [1] -0.3645529
## [1] 2.377038
#Listings
summary(listings)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     743    1026    1618    1738    2056    3296
listings_avg<-mean(listings)
listings_median<- median(listings)
listings_sd<- sd(listings)
listings_range<- range(listings)[2]-range(listings)[1]; 
listings_iqr<- IQR(listings)
listings_var<- var(listings); 
listings_asimmetry<-skewness(listings); 
listings_curtosis<- kurtosis(listings)
##Position
listings_avg; listings_median
## [1] 1738.021
## [1] 1618.5
##Variability
listings_sd; listings_var; 
## [1] 752.7078
## [1] 566569
listings_range; listings_iqr
## [1] 2553
## [1] 1029.5
##Shape
listings_asimmetry; listings_curtosis
## [1] 0.6494982
## [1] 2.20821
#Month Inventory
summary(months_inventory)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   3.400   7.800   8.950   9.193  10.950  14.900
months_inventory_avg<-mean(months_inventory)
months_inventory_median<- median(months_inventory)
months_inventory_sd<- sd(months_inventory)
months_inventory_range<- range(months_inventory)[2]-range(months_inventory)[1]; 
months_inventory_iqr<- IQR(months_inventory)
months_inventory_var<- var(months_inventory); 
months_inventory_asimmetry<-skewness(months_inventory); 
months_inventory_curtosis<- kurtosis(months_inventory)
##Position
months_inventory_avg; months_inventory_median
## [1] 9.1925
## [1] 8.95
##Variability
months_inventory_sd; months_inventory_var; 
## [1] 2.303669
## [1] 5.306889
months_inventory_range;months_inventory_iqr
## [1] 11.5
## [1] 3.15
##Shape
months_inventory_asimmetry; months_inventory_curtosis
## [1] 0.04097527
## [1] 2.825552
#Distribuzione di Frequenza
table(city)
## city
##              Beaumont Bryan-College Station                 Tyler 
##                    60                    60                    60 
##         Wichita Falls 
##                    60
table(year)
## year
## 2010 2011 2012 2013 2014 
##   48   48   48   48   48
table(month)
## month
##  1  2  3  4  5  6  7  8  9 10 11 12 
## 20 20 20 20 20 20 20 20 20 20 20 20

Commento sulle Struttura delle Variabili :

  1. Sales :

    Distribuzione Asimmetrica (Media [192.3] e Mediana [175.3] non coincidono) Positiva (Asim_Index: 0.72, Kurtosis : 2.69) con pochi picchi molto alti e infatti sono più frequenti i valori bassi (quindi con una coda verso Dx). La variabilità è leggermente alta (sd: 79.7) e Range e IQR sono molto diversi tra loro e quindi potrebbe suggerire presenza di outlier.

  2. Volume :

    Distribuzione Asimmetrica (Media [37.005] e Mediana [27.062] non coincidono) Positiva (Asim_Index: 0.84, Kurtosis : 3.17) con pochi picchi molto alti e infatti sono più frequenti i valori bassi (quindi con una coda verso Dx). La variabilità è moderata (sd: 16.7) ma la differenza marcata tra Range e IQR potrebbe suggerire anche in questo caso presenza di outlier.

  3. Median Price :

    Distribuzione quasi simmetrica (Media e Mediana quasi coincidono, AVG: 1738.021, Mediana: 1618.5 ) con lieve asimmetria negativa (Asim_Index: -0.36). Curtosi vicino a 3 e quindi molto simile a una distribuzione normale (Kurtosis : 2.38). Tuttavia La variabilità è molto alta (sd : 22662.15) rispetto alla media, suggerendo un alta eterogeneità dei prezzi.

  4. Listings :

    Distribuzione leggermente asimmetrica (Media e Mediana quasi coincidono, AVG: 132665.4, Mediana: 134500) Positiva (Asim_Index: 0.64, Kurtosis : 2.02). La dispersione è elevata come mostrato dalla deviazione standard molto ampia (sd: 752.7). Inoltre l’asimmetria e la curtosi indicano che la distribuzione è leggermente spostata verso valori alti.

  5. Month Inventory :

    Distribuzione sostanzialmente simmetrica (Media e Mediana quasi coincidono), con bassa variabilità (sd : 2.3) e una bassa asimmetria (Asim_Index: 0.04, Kurtosis : 2.82). La sua distribuzione si avvicina a quella di una distribuzione normale.

3. IDENTIFICAZIONE DELLE VARIABILI CON MAGGIORE VARIABILITA’ E ASIMMETRIA

Coefficienti da impiegare per confrontare “Variabilità” & “Asimmetria” :

  • Variabilità : utilizzo il coefficiente di variazione ( CV = sd / mean ), che essendo un valore percentuale permette il confronto tra scale diverse.

  • Asimmetria : utilizzo la funzione “skewness” e verifico la variabile con valore più alto (in questo caso distribuzione più asimmetrica).

library(moments)
var<- c("sales","volume", "median_price", "listings", "months_inventory") 
#function
ds<- function(x){
  return(sd(x))
}
cv <- function(x){
  return(sd(x, na.rm = TRUE)/mean(x, na.rm= TRUE)*100)
  }
sk <- function(x){
  return(skewness(x))
}
#apply to the variables
DV<-sapply(data[var],ds)
CV<- sapply(data[var], cv)
SK<- sapply(data[var], sk)
DV
##            sales           volume     median_price         listings 
##        79.651111        16.651447     22662.148687       752.707756 
## months_inventory 
##         2.303669
CV
##            sales           volume     median_price         listings 
##         41.42203         53.70536         17.08218         43.30833 
## months_inventory 
##         25.06031
SK
##            sales           volume     median_price         listings 
##       0.71810402       0.88474203      -0.36455288       0.64949823 
## months_inventory 
##       0.04097527
#combine into table
results<- data.frame(
  Deviazione_Std= DV,
  Coeff_Var = CV,
  Skewness = SK
)
#sorting
return_CV<- results[order(-results$Coeff_Var),]
return_SK<- results[order(-results$Skewness),]
results
##                  Deviazione_Std Coeff_Var    Skewness
## sales                 79.651111  41.42203  0.71810402
## volume                16.651447  53.70536  0.88474203
## median_price       22662.148687  17.08218 -0.36455288
## listings             752.707756  43.30833  0.64949823
## months_inventory       2.303669  25.06031  0.04097527
return_CV
##                  Deviazione_Std Coeff_Var    Skewness
## volume                16.651447  53.70536  0.88474203
## listings             752.707756  43.30833  0.64949823
## sales                 79.651111  41.42203  0.71810402
## months_inventory       2.303669  25.06031  0.04097527
## median_price       22662.148687  17.08218 -0.36455288
return_SK
##                  Deviazione_Std Coeff_Var    Skewness
## volume                16.651447  53.70536  0.88474203
## sales                 79.651111  41.42203  0.71810402
## listings             752.707756  43.30833  0.64949823
## months_inventory       2.303669  25.06031  0.04097527
## median_price       22662.148687  17.08218 -0.36455288

Risultato :

  1. Variabilità ( Deviazione Satndard & Coefficente di Variazione CV )

    • La Variabile con la maggiore deviazione standard è “median_price” (22662) , ma ha diversa unità di misura rispetto alle altre variabili e questo influisce sulla sua scala di grandezza.

    • Per un confronto più equo , utilizzo il CV (coefficiente di variazione): la variabile con una maggiore variabilità risulta ” volume ” (CV = 53,7%). Questo indica che nel caso della variabile “volume” i dati si disperdono del 53,7% rispetto alla media.

  2. Asimmetria ( Skewness )

    • La variabile che risulta più asimmetrica è ” volume ” , con indice di skewness pari a 0,88 (Asimmetria Positiva e quindi coda verso destra).

      Asimmetria positiva significa che la distribuzione è formata da molti valori bassi e pochi alti che trascinano la coda a destra.

4. CREAZIONE DI CLASSI PER VARIABILE QUANTITATIVA

Per svolgere questa analisi ho usato come variabile ” sales ” (variabile quantitativa continua).

  • Costruzione delle Classi

    1. Calcolo del minino e massimo per calcolare il range della variabile e definire come suddividerlo in classi di uguale ampiezza.
    2. Suddivisione della distribuzione della variabile in 10 intervalli di ampiezza pari a 50.
    3. Calcolo Frequenza assoluta, relativa , cumulata e cumulata relativa.
    4. Creazione del Grafico a Barre.
min(sales)
## [1] 79
max(sales)
## [1] 423
sales_range<- range(sales)
sales_classes<- cut(sales, breaks = seq(0,500,50))
sales_classes
##   [1] (50,100]  (100,150] (150,200] (150,200] (200,250] (150,200] (150,200]
##   [8] (150,200] (100,150] (100,150] (100,150] (100,150] (100,150] (100,150]
##  [15] (100,150] (150,200] (100,150] (150,200] (150,200] (150,200] (100,150]
##  [22] (150,200] (100,150] (150,200] (100,150] (100,150] (150,200] (150,200]
##  [29] (150,200] (150,200] (150,200] (200,250] (150,200] (150,200] (150,200]
##  [36] (150,200] (150,200] (100,150] (150,200] (150,200] (200,250] (200,250]
##  [43] (200,250] (250,300] (200,250] (150,200] (150,200] (200,250] (100,150]
##  [50] (150,200] (150,200] (200,250] (200,250] (250,300] (200,250] (250,300]
##  [57] (200,250] (250,300] (150,200] (200,250] (50,100]  (100,150] (150,200]
##  [64] (200,250] (250,300] (250,300] (150,200] (150,200] (100,150] (50,100] 
##  [71] (100,150] (100,150] (50,100]  (100,150] (150,200] (150,200] (200,250]
##  [78] (250,300] (200,250] (150,200] (100,150] (100,150] (100,150] (100,150]
##  [85] (100,150] (100,150] (100,150] (150,200] (250,300] (250,300] (250,300]
##  [92] (250,300] (100,150] (150,200] (150,200] (100,150] (100,150] (100,150]
##  [99] (150,200] (250,300] (300,350] (350,400] (400,450] (300,350] (150,200]
## [106] (150,200] (150,200] (150,200] (150,200] (150,200] (250,300] (300,350]
## [113] (350,400] (350,400] (400,450] (250,300] (200,250] (200,250] (150,200]
## [120] (150,200] (150,200] (150,200] (200,250] (300,350] (250,300] (250,300]
## [127] (250,300] (200,250] (200,250] (200,250] (150,200] (200,250] (100,150]
## [134] (150,200] (200,250] (250,300] (250,300] (300,350] (250,300] (250,300]
## [141] (250,300] (200,250] (200,250] (150,200] (150,200] (200,250] (250,300]
## [148] (250,300] (250,300] (300,350] (300,350] (300,350] (250,300] (250,300]
## [155] (200,250] (200,250] (150,200] (200,250] (250,300] (250,300] (300,350]
## [162] (300,350] (350,400] (350,400] (250,300] (250,300] (250,300] (200,250]
## [169] (200,250] (200,250] (250,300] (300,350] (350,400] (400,450] (350,400]
## [176] (300,350] (350,400] (350,400] (250,300] (300,350] (50,100]  (50,100] 
## [183] (100,150] (150,200] (150,200] (100,150] (100,150] (100,150] (100,150]
## [190] (100,150] (50,100]  (100,150] (50,100]  (50,100]  (100,150] (100,150]
## [197] (100,150] (100,150] (100,150] (100,150] (100,150] (50,100]  (50,100] 
## [204] (50,100]  (100,150] (50,100]  (100,150] (100,150] (100,150] (100,150]
## [211] (100,150] (100,150] (50,100]  (50,100]  (100,150] (100,150] (50,100] 
## [218] (100,150] (150,200] (100,150] (100,150] (100,150] (100,150] (100,150]
## [225] (100,150] (100,150] (50,100]  (50,100]  (50,100]  (50,100]  (100,150]
## [232] (100,150] (100,150] (100,150] (100,150] (100,150] (100,150] (100,150]
## [239] (50,100]  (100,150]
## 10 Levels: (0,50] (50,100] (100,150] (150,200] (200,250] ... (450,500]
#Absolute Frequency
ni<- table(sales_classes)
#Relative Frequency
fi<- ni/length(sales)
#Cumulative Frequency
Ni<- cumsum(ni)
#Relative Cumulative Frequency
Fi<- cumsum(fi)
df_freq<- data.frame(cbind(ni,fi,Ni,Fi))
df_freq
##           ni         fi  Ni        Fi
## (0,50]     0 0.00000000   0 0.0000000
## (50,100]  21 0.08750000  21 0.0875000
## (100,150] 72 0.30000000  93 0.3875000
## (150,200] 56 0.23333333 149 0.6208333
## (200,250] 32 0.13333333 181 0.7541667
## (250,300] 34 0.14166667 215 0.8958333
## (300,350] 13 0.05416667 228 0.9500000
## (350,400]  9 0.03750000 237 0.9875000
## (400,450]  3 0.01250000 240 1.0000000
## (450,500]  0 0.00000000 240 1.0000000
#Bar Graph
bar<- barplot(df_freq$ni, names.arg = row.names(df_freq),col="lightblue", xlab="Classes Range", ylab= "Absolute Frequency",main="Bar Graph x Sales", ylim = c(0,80) )
text(bar, df_freq$ni, labels= df_freq$ni , pos=3)

Indice di Gini

Formula :

  • \(G = 1-Σ fi^2\)

    dove \(fi\) sono le frequenze relative per classe.

    • G = 0 -> Distribuzione concentrata in poche classi (Bassa Eterogeneità)

    • G = 1 -> Distribuzione più uniforme (alta eterogeneità)

fi<- ni/length(sales)
fi2<- fi^2
j<- length(ni)
#Gini Index
gini<- 1-sum(fi2)
#Gini Index Normalized 
gini_norm<- gini/(j-1)/j
gini
## [1] 0.8055556
gini_norm
## [1] 0.008950617

Dato che G = 0,805 , la distribuzione del sales è abbastanza eterogenea , quindi non tutte le vendite sono concentrate nella stessa classe.

Risultato :

  • G = 0,805 ( Gini normalizzata = 0,0089) , la distribuzione del sales è abbastanza eterogenea , quindi non tutte le vendite sono concentrate nella stessa fascia e si distribuiscono in modo diversificato.

  • Dal grafico a barre si può osservare che la maggioranza delle sales cadono tra 100 e 200.

5. CALCOLO DELLE PROBABILITA’

Richiesta : “Qual è la probabilità che, presa una riga a caso di questo dataset, essa riporti la città “Beaumont”? E la probabilità che riporti il mese di Luglio? E la probabilità che riporti il mese di dicembre 2012?“

Per risolvere tutte e 3 le richieste utilizzo il metodo di calcolo della Probabilità Frequentista :

\(P(evento) = n° Casi favorevoli/ n° Tot casi Possibili\)

1. Probabilità che la città sia “Beaumont”

#Probability of city Beamount
head(data)
##       city year month sales volume median_price listings months_inventory
## 1 Beaumont 2010     1    83 14.162       163800     1533              9.5
## 2 Beaumont 2010     2   108 17.690       138200     1586             10.0
## 3 Beaumont 2010     3   182 28.701       122400     1689             10.6
## 4 Beaumont 2010     4   200 26.819       123200     1708             10.6
## 5 Beaumont 2010     5   202 28.833       123100     1771             10.9
## 6 Beaumont 2010     6   189 27.219       122800     1803             11.1
attach(data)
## I seguenti oggetti sono mascherati da data (pos = 4):
## 
##     city, listings, median_price, month, months_inventory, sales,
##     volume, year
nrows<- dim(data)[1]
n_beaumont <- sum(city =="Beaumont")
n_beaumont
## [1] 60
p_beamount<- n_beaumont/nrows
p_beamount
## [1] 0.25
  • P (città = ” Beaumont ” ) = 25%

2. Probabilità che il mese sia “Luglio”

#Probability month Luglio 
n_july<- sum(month== 7)
p_july<- n_july/nrows
p_july
## [1] 0.08333333
  • P (mese = ” Luglio” ) = 8,3%

3. Probabilità che data sia “Dicembre 2012”

#Probability December 2012
n_dec_2012<- sum(month == 12 & year== 2012)
p_dec_2012<- n_dec_2012/nrows
p_dec_2012
## [1] 0.01666667
  • P ( data = Dicembre 2012) = 1,67%

6. CREAZIONE DI NUOVE VARIABILI

1. Prezzo Medio degli Immobili

Per calcolare il prezzo medio degli immobili ho effettutato il rapporto tra ” volume ” ( valore totale delle vendite , espressa in milioni ) e ” sales ” (numero di immobili venduti)

#Average Real Estate Price
data$avg_price<- data$volume *10^6/data$sales
head(data$avg_price)
## [1] 170626.5 163796.3 157697.8 134095.0 142737.6 144015.9

2. Efficacia degli annunci di vendita

Per calcolare l’efficacia degli annunci di vendita , ho effettuato il rapporto tra ” sales ” ( vendite effettive ) e ” listings ” ( numero di annunci ). Questo nuovo indice permette di misurare l’efficacia degli annunci di vendita.

#Ads Efficency 
data$efficency<- data$sales/data$listings
head(data$efficency)
## [1] 0.05414220 0.06809584 0.10775607 0.11709602 0.11405985 0.10482529

Il risultato sarà compreso tra 0 & 1 :

  • valori vicini a 1 -> alta Efficacia : Quasi tutti gli annunci hanno generato una vendita

  • valori vicini a 0 -> Bassa Efficacia : Molti annunci non si trasformano in vendita

Analisi Variabili :

Analizzo nel dettaglio come le 2 variabili si distribuiscono e concentrano la maggior parte degli immobili per AVG Price & Ads Efficency.

- AVG Price

summary(data$avg_price)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   97010  132939  156588  154320  173915  213234
#Histogram x AVG_Price
library(ggplot2)
ggplot(data)+
  geom_histogram(aes(x= avg_price),binwidth = 10000 ,fill= "lightblue",color= "black")+
  geom_vline(xintercept = 132939, color= "red",lty="dashed", lwd=2)+
  geom_vline(xintercept = 173915, color= "red",lty= "dashed", lwd=2)+
  labs(title = "Distribution of Real Estate's AVG price", x="AVG Price [$]", y="Frequency")+
  theme_classic()

#Line Chart x Avg-Price
data$period <- as.Date(paste(data$year, data$month, "01", sep = "-"))
data$period <- as.Date(paste(data$year, data$month, "01", sep = "-"))
ggplot(data)+geom_line(aes(x = period, y = avg_price, color = city, group = city)) +
  geom_point(aes(x = period, y = avg_price, color = city, group = city),size = 1) +
  labs(title = "AVG Price for city in time",
       x = "Period",
       y = "AVG Price ($)") +
  scale_x_date(date_labels = "%Y-%m")+theme_minimal()+
  theme(legend.position = "bottom")

  • Range : I prezzi medi oscillano tra 97.000 $ e i 213.000 $.

  • Quartili : il 1° Quartile ( 132.939 $) e il 3° quartile (173.915 $) racchiudono il 50% centrale delle osservazioni.

  • Mediana : Pari a 156.588 $ ) è molto vicina alla Media ( 154.320 $ ) , suggerendo una distribuzione abbastanza simmetrica.

  • Concentrazione : La maggior parte degli immobili ha un prezzo medio di vendita tra 130.000 $ - 175.000 $ , con alcuni valori estremi ( 97.000$ - 21000 $ ).

  • Trend Temporale : dal 2010 al 2011, Il prezzo medio mantiene un andamento costante per tutte le città , mentre dal 2012 si denota una tendenza alla crescita, sopratutto per città come Bryan-Collage Station.

- Ads Efficency:

data_efficency_sort<- data[order(data$efficency),]
head(data_efficency_sort)
##         city year month sales volume median_price listings months_inventory
## 133    Tyler 2011     1   143 21.050       120600     2852             12.6
## 131    Tyler 2010    11   155 24.411       130000     3042             13.4
## 1   Beaumont 2010     1    83 14.162       163800     1533              9.5
## 121    Tyler 2010     1   160 25.487       138900     2727             11.3
## 145    Tyler 2012     1   169 25.386       124200     2811             11.7
## 134    Tyler 2011     2   181 28.320       128800     2938             13.0
##     avg_price  efficency     period
## 133  147202.8 0.05014025 2011-01-01
## 131  157490.3 0.05095332 2010-11-01
## 1    170626.5 0.05414220 2010-01-01
## 121  159293.8 0.05867253 2010-01-01
## 145  150213.0 0.06012095 2012-01-01
## 134  156464.1 0.06160654 2011-02-01
summary(data$efficency)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.05014 0.08980 0.10963 0.11874 0.13492 0.38713
#Line Chart x Avg-Price
ggplot(data)+geom_line(aes(x = period, y = efficency, color = city, group = city))+
  geom_point(aes(x = period, y = efficency, color = city, group = city),size = 1) +
  labs(title = "Ads Efficency for city in time",
       x = "Period",
       y = "Ads Efficency") +
  scale_x_date(date_labels = "%Y-%m")+theme_minimal()+
  theme(legend.position = "bottom")

  • Range : Il tasso di conversione tra annuncio pubblicitario e vendita immobile varia tra 5% e 39% -> range non elevato , con qualche outlier verso l’alto che si stacca dalla maggior parte della distribuzione.

  • Quartili : il 1° Quartile ( 8,9 %) e il 3° quartile (13,49% ) racchiudono il 50% centrale delle efficienze.

  • Mediana : Pari a 10,96 % è leggermente superiore alla Media ( 11,87 % ) e questo suggerisce una leggera asimmetria verso destra dovuto a pochi annunci molto efficienti (+ valori bassi nella distribuzione).

  • Concentrazione : La maggior parte degli annunci ha un tasso di conversione tra il 9% e il 13 % , con pochi casi oltre il 20%.

  • Trend Temporale : Dal 2010 - 2011 l’efficienza resta bassa (5 % -10%) ; dal 2012 si denota un trend crescente , con gran parte delle città che arriva tra il 10% e il 15%.. Dal 2013 si registra un trend crescente raggiungendo picchi notevoli (Le città che raggiunge più rapidamente questi picchi è Bryan-College Station.

Commento Finale :

  • AVG Price : I prezzi medi degli immobili si attesta intorno ai 150-170k $ con un distribuzione abbastanza simmetrica/ equilibrata

  • Ads Efficency : il tasso di conversione pubblicità / vendita degli immobili si concentra sul 10 % con pochi casi che innalzano la media. Dal 2012 mostra un trend crescente nel tempo, suggerendo un miglioramento delle capacità di convertire gli annunci di vendite.

7. ANALISI CONDIZIONATA

Usa il pacchetto dplyr o il linguaggio base di R per effettuare analisi statistiche condizionate per città, anno e mese. Genera dei summary (media, deviazione standard) e rappresenta graficamente i risultati.

Inzialmente generiamo dei summary (media e deviazione standard) per effettuare analisi statistiche condizionate per città , anno, mese.

#Mean & standard deviation for City & Year/Month 
library(dplyr)
## 
## Caricamento pacchetto: 'dplyr'
## I seguenti oggetti sono mascherati da 'package:stats':
## 
##     filter, lag
## I seguenti oggetti sono mascherati da 'package:base':
## 
##     intersect, setdiff, setequal, union
df_summary<- data %>%
  group_by(city,year,month) %>%
  summarise(
    mean_sales = mean(sales, na.rm= TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    mean_volume = mean(volume, na.rm = TRUE),
    sd_volume = sd(volume, na.rm= TRUE),
    mean_listings = mean(listings, na.rm= TRUE),
    sd_listings= sd(listings, na.rm = TRUE),
    mean_avg_price = mean(avg_price, na.rm = TRUE),
    sd_avg_price = sd(avg_price, na.rm = TRUE),
    mean_efficency = mean(efficency, na.rm = TRUE ),
    sd_efficency = sd(efficency, na.rm = TRUE),
    .groups= "drop"
  )


df_summary
## # A tibble: 240 × 13
##    city      year month mean_sales sd_sales mean_volume sd_volume mean_listings
##    <chr>    <int> <int>      <dbl>    <dbl>       <dbl>     <dbl>         <dbl>
##  1 Beaumont  2010     1         83       NA        14.2        NA          1533
##  2 Beaumont  2010     2        108       NA        17.7        NA          1586
##  3 Beaumont  2010     3        182       NA        28.7        NA          1689
##  4 Beaumont  2010     4        200       NA        26.8        NA          1708
##  5 Beaumont  2010     5        202       NA        28.8        NA          1771
##  6 Beaumont  2010     6        189       NA        27.2        NA          1803
##  7 Beaumont  2010     7        164       NA        22.7        NA          1857
##  8 Beaumont  2010     8        174       NA        25.2        NA          1830
##  9 Beaumont  2010     9        124       NA        17.2        NA          1829
## 10 Beaumont  2010    10        150       NA        23.9        NA          1779
## # ℹ 230 more rows
## # ℹ 5 more variables: sd_listings <dbl>, mean_avg_price <dbl>,
## #   sd_avg_price <dbl>, mean_efficency <dbl>, sd_efficency <dbl>
df_summary<- df_summary%>%
  mutate(period= as.Date(paste(year, month,"01",sep= "-")))

Ora posso utilizzare questo summarise per le seguenti variabili : sales, volume, avg_price, listings, efficency per costruire dei grafici per visualizzare analisi statistiche condizionate per città , anno , mese.

Visualizzazione Grafica

  • Variables for Years / City
library(dplyr)

summary_city_year<- data %>%
  group_by(city,year) %>%
  summarise(
    mean_sales = mean(sales, na.rm= TRUE),
    sd_sales = sd(sales, na.rm = TRUE),
    mean_volume = mean(volume, na.rm = TRUE),
    sd_volume = sd(volume, na.rm= TRUE),
    mean_listings = mean(listings, na.rm= TRUE),
    sd_listings= sd(listings, na.rm = TRUE),
    mean_avg_price = mean(avg_price, na.rm = TRUE),
    sd_avg_price = sd(avg_price, na.rm = TRUE),
    mean_efficency = mean(efficency, na.rm = TRUE ),
    sd_efficency = sd(efficency, na.rm = TRUE),
    .groups= "drop"
  )
  


#Graphics per Year

library(scales)
library(ggplot2)

#Barplot x Sales
ggplot(summary_city_year, aes(x= year, y= mean_sales, fill=city))+
  geom_bar(stat= "identity", position= "dodge")+
  geom_errorbar(aes(ymin=mean_sales-sd_sales, ymax = mean_sales+sd_sales), position = position_dodge(width = 0.9))+geom_text(aes(label = round(mean_sales, 1)),position = position_dodge(width = 0.9), size=2.5, vjust= -0.4, hjust= 0.5) +
  labs(title= "Avg Sales Trend x city", x= "Year", y= "Avg Sales")+theme_gray()+
  theme(legend.position = "bottom")

#Barplot x Volume
ggplot(summary_city_year, aes(x= year, y= mean_volume, fill=city))+
  geom_bar(stat= "identity", position="dodge")+
  geom_errorbar(aes(ymin=mean_volume-sd_volume, ymax = mean_volume+sd_volume), position = position_dodge(width = 0.9))+
  geom_text(aes(label = round(mean_volume, 1)),position = position_dodge(width = 0.9), size=2.5, vjust= -0.4, hjust= 0.5) +
  labs(title= "Avg Volume Trend x city", x= "Year", y= "Avg Volume [$]")+theme_gray()+theme(legend.position = "bottom")

#Barplot x Listings
ggplot(summary_city_year, aes(x= year, y= mean_listings, fill=city))+
  geom_bar(stat= "identity", position="dodge")+
  geom_errorbar(aes(ymin=mean_listings- sd_listings, ymax = mean_listings+sd_listings), position = position_dodge(width = 0.9))+geom_text(aes(label = round(mean_listings, 1)),position = position_dodge(width = 0.9), size=2.5, vjust= -0.4, hjust= 0.5)+
  labs(title= "Listings Trend x city", x= "Year", y= "N° Listings")+theme_grey()+theme_gray()+theme(legend.position = "bottom")

#Barplot x AVG Price
ggplot(summary_city_year, aes(x= year, y= mean_avg_price, fill=city))+
  geom_bar(stat= "identity", position="dodge")+
  geom_errorbar(aes(ymin=mean_avg_price- sd_avg_price, ymax = mean_avg_price+sd_avg_price), position = position_dodge(width = 0.9))+ geom_text(aes(label = round(mean_avg_price, 1)),position = position_dodge(width = 0.9), size=2.5, vjust= -0.4, hjust= 0.5)+ labs(title= "Avg Price Trend x city", x= "Year", y= "Avg Price [$]")+theme_gray()+theme_gray()+theme(legend.position = "bottom")

#Barplot x Ads Efficency
ggplot(summary_city_year, aes(x= year, y= mean_efficency, fill=city))+
  geom_bar(stat= "identity", position= "dodge")+
  geom_errorbar(aes(ymin=mean_efficency- sd_efficency, ymax = mean_efficency+sd_efficency), position = position_dodge(width = 0.9))+ geom_text(aes(label = round(mean_efficency, 3)),position = position_dodge(width = 0.9), size=2.5, vjust= -0.4, hjust= 0.5)+ labs(title= "Ads Efficency Trend x city", x= " Year", y= "Ads Efficency")+theme_grey()+theme_gray()+theme(legend.position = "bottom")

  • Variables for Months / City
library(dplyr)
#Add Var "Period" : Month +Year
df_summary<- df_summary%>%
  mutate(period= as.Date(paste(year, month,"01",sep= "-")))

library(scales)
library(ggplot2)

#Barplot x Sales
ggplot(df_summary, aes(x= period, y= mean_sales, fill=city))+
  geom_bar(stat= "identity", position= position_dodge(width=0.9))+
  geom_errorbar(aes(ymin=mean_sales-sd_sales, ymax = mean_sales+sd_sales), position = position_dodge(width = 0.9))+
  labs(title= "Avg Sales Trend x city", x= "Month - Year", y= "Avg Sales")+theme_gray()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

#Barplot x Volume
ggplot(df_summary, aes(x= period, y= mean_volume, fill=city))+
  geom_bar(stat= "identity", position= position_dodge(width=0.9))+
  geom_errorbar(aes(ymin=mean_volume-sd_volume, ymax = mean_volume+sd_volume), position = position_dodge(width = 0.9))+
  labs(title= "Avg Volume Trend x city", x= "Month - Year", y= "Avg Volume [$]")+theme_gray()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

#Barplot x Listings
ggplot(df_summary, aes(x= period, y= mean_listings, fill=city))+
  geom_bar(stat= "identity", position= position_dodge(width=0.9))+
  geom_errorbar(aes(ymin=mean_listings- sd_listings, ymax = mean_listings+sd_listings), position = position_dodge(width = 0.9))+
  labs(title= "Listings Trend x city", x= "Month - Year", y= "N° Listings")+theme_grey()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

#Barplot x AVG Price
ggplot(df_summary, aes(x= period, y= mean_avg_price, fill=city))+
  geom_bar(stat= "identity", position=position_dodge(width=0.9))+
  geom_errorbar(aes(ymin=mean_avg_price- sd_avg_price, ymax = mean_avg_price+sd_avg_price), position = position_dodge(width = 0.9))+
  labs(title= "Avg Price Trend x city", x= "Month - Year", y= "Avg Price [$]")+theme_gray()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

#Barplot x Ads Efficency
ggplot(df_summary, aes(x= period, y= mean_efficency, fill=city))+
  geom_bar(stat= "identity", position= position_dodge(width=0.9))+
  geom_errorbar(aes(ymin=mean_efficency- sd_efficency, ymax = mean_efficency+sd_efficency), position = position_dodge(width = 0.9))+
  labs(title= "Ads Efficency Trend x city", x= "Month - Year", y= "Ads Efficency")+theme_grey()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

Analisi Grafica x City :

  • Beaumont : Ha una crescita moderata in termini di vendite e ricavi dalle vendite, con picchi solo nel 2013 e nel 2014. Questo può essere dovuto a uno dei più bassi tassi di conversione annuncio - vendita degli immobili. Beaumont si dimostra tra la città peggiori in termini di vendite; un aumento di annunci pubblicitari porterebbe portare un drastico incremento del fatturato.

  • Bryan-College Station : si dimostra la città con la crescita migliore in termini di vendita, ricavi, prezzi medi. Per ora dimostra un volume di vendita e un fatturato peggiore rispetto a Tyler , probabilmente dovuti a bassi investimenti in annunci pubblicitari. Tuttavia dimostra sempre un alto tasso di conversione e ciò potrebbe suggerire un maggiore investimento in advertising per consentire una crescita sostanziale delle vendite.

  • Tyler : presenta un crescita solita in termini di vendite e ricavi, ma ciò è dovuto a maggior investimenti in annunci pubblicitari e un minor prezzo medio degli immobili venduti rispetto a Bryan-College Station. La usa efficienza pubblicitaria è buona ma non eccellente. Per Tyler è preferibile ottimizzare il rapporto tra pubblicità e prezzi medi contenuti per aumentare i ricavi.

  • Wichita Falls : mostra le performance più basse in termini di vendite e ricavi di vendita , nonostante ha tassi di conversione più alti rispetto ad altre città come Beaumont e Tyler. Quindi l’unico modo per risollevare le vendite in questa città sembra essere un aumento significativo degli investimenti pubblicitari.

8. CREAZIONE DI VISUALIZZAZIONI CON GGPLOT2

1. Boxplot - Prezzo Mediano per Città

library(ggplot2)
library(dplyr)
attach(data)
## I seguenti oggetti sono mascherati da data (pos = 6):
## 
##     city, listings, median_price, month, months_inventory, sales,
##     volume, year
## I seguenti oggetti sono mascherati da data (pos = 8):
## 
##     city, listings, median_price, month, months_inventory, sales,
##     volume, year
#Group Median Price by City
data_mean<- data%>%
  group_by(city)%>%
  summarise(mean_price =mean(median_price, na.rm = TRUE))

#Boxplot Avg Price x city
ggplot(data)+geom_boxplot(aes(x=city, y=median_price, fill=city))+
  geom_text(data = data_mean, aes(x = city, y = mean_price, label = round(mean_price, 2)),
            size = 3, vjust = -0.5, hjust = 0.5)+labs(title= "Median Price Boxplot for City", x= "City", y= "Median Price [$]")+
  theme(legend.position = "bottom")

Insights :

  • Beaumont : Mediana intermedia (= 130k $) e una variabilità moderata con un outlier isolato -> mercato concentrato conpochi immobili con prezzo elevato.

  • Bryan-College Station : Mediana più alta (= 157k $) e variabilità moderata -> mercato prevede richiesta di immobile a range di prezzo più alto ma con valori stabili.

  • Tyler : Mediana intermedia (= 141k $) ma con IQR più ampio -> maggiore variabilità dei prezzi , con immobili che spaziano dalla fascia media e a quella economicia

  • Witcha Falls : Mediana nettamente più bassa (102,7k $) e IQR ridotto -> città con immobili a basso prezzo , che ci concentrano intorno al valore medio.

2. Grafici a barre - Vendite totali per Mese e Città

#BarChart Sales x month & city

ggplot(data, aes(x= period, y= sales, fill=city))+
  geom_bar(stat= "identity", position= "stack")+
  labs(title= " Sales Trend x city", x= "Month - Year", y= "Avg Sales")+theme_gray()+scale_x_date(labels = date_format("%m\n%Y"), breaks="4 months")+
  theme(axis.text = element_text(angle=45, hjust= 1))+theme(legend.position = "bottom")

Insights :

  • Andamento stabile delle vendite in tutte le città , tranne Bryan-College Station che mostraun crescita visibile nel tempo.

  • Si denotano picchi ricorrenti nei mesi estivi (generalmente da Marzo a Settembre di ogni anno) e cali durante l’inverno -> La stagionalità è uno dei fattori principali per pianificare strategie di marketing.

3. Line Chart - Andamento storico vendite per Città

ggplot(summary_city_year, aes(x = year, y = mean_sales, color = city)) +
  geom_line(size = 1) +
  geom_text(aes(label = round(mean_sales,2)) ,size =3, vjust = -0.5, hjust = 0.5)+
  theme_grey() +
  labs(title = "Storic Sales Trend by City",
       x = "Year", y = "Sales") +
  theme(legend.position = "bottom")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Insights :

Tramite il Line Chart si evidenzia meglio il trend storico delle vendite degli immobili nelle singole città:

  • Tyler è quella che mantiene durante tutti gli anni volumi di vendita maggiori con una crescita costante dal 2010 al 2015.

  • Bryan-College Station ha un trend con una maggiore crescita tra il 2012 e il 2014,

  • Beaumont ha una andamento costante senza grandi variazioni e con una piccola crescita negli ultimi 2 anni.

  • Wichita-Falls è l’unica città in cui si denota un calo delle vendite negli ultimi 2 anni.

Nel complesso tutte le città (tranne Wichita-Falls) mostrano un crescita positiva nel periodo analizzato , sintomo di una fase di espansione del mercato immobiliare.

9. CONCLUSIONI

1. Andamento Generale del Mercato Texano :

Nel periodo 2010 - 2014, il mercato immobiliare presenta alcune caratteristiche distintive :

  • Crescita costante : Si osserva una crescita costante sia in termini di vendite che di importo generato dalle vendite , seppur con dinamiche decisamente diverse da città a città.

  • Stagionalità Marcata : Le vendite di immobili si concentrano tra marzo e settembre, mentre nei mesi invernali si registra un rallentamento significativo.

  • Segmentazione di Mercato Netta : Alcune città si attestano su prezzi elevati e stabili, altre privilegiavano i volumi , con prezzi medi più bassi ma un maggiore numero di vendite.

2. Risultati per Città :

  • Bryan-College Station

    • Volumi di Vendita : Vendite e Ricavi crescono in modo rilevante soprattutto dal 2012 in poi.

    • Prezzo Medio degli Immobili : Prezzo medio è il più alto (175k $) tra le città analizzzate , confermando il posizionamento nel segmento dei immobili di fascia alta.

    • Tasso di conversione tra annunci e vendite : è tra i più alti tra le città analizzate con un picco del 23,6% nel

    In termini operativi , conviene incrementare l’investimento pubblicitario per sfruttare al massimo l’efficienza ed aumentare ulteriormente i volumi.

  • Tyler

    • Volumi di Vendita : Leader indiscusso in termini di vendite e ricavi in tutta la serie storica.

    • Prezzo Medio degli Immobili : Il prezzo medio si colloca intorno a 141k $ ma con alta variabilità , segno di un mercato eterogeneo.

    • Tasso di conversione tra annunci e vendite : l’efficienza pubblicitaria è buona con una media del 10% , ma non a livello dei top performer.

    La strategia dovrebbe integrare campagne pubblicitarie mirate con una revisione del pricing, al fine di massimizzare i ricavi per unità venduta.

  • Beaumont

    • Volumi di Vendita : andamento stabile per vendite e ricavi , con alcuni picchi nel biennio 2013 - 2014.

    • Prezzo Medio degli Immobili : Il prezzo medio si colloca intorno a 131k $ , con variabilità contenuta.

    • Tasso di conversione tra annunci e vendite : l’efficienza pubblicitaria è tra i più bassi.

    La priorità è aumentare il numero di annunci e ottimizzare le campagne per migliorare i tassi di conversione.

  • Wichita Falls

    • Volumi di Vendita : Vendite e Ricavi sono contenuti e mostrano una tendenza verso il basso.

    • Prezzo Medio degli Immobili : Prezzo medio basso (circa 102k $) e una bassa variabilità, segno di un mercato omogeneo.

    • Tasso di conversione tra annunci e vendite : l’efficienza pubblicitaria, rapportata alla dimensione del mercato, è discreta.

    Un ampliamento dell’offerta e un potenziamento della visibilità potrebbero stimolare la domanda.

3. Evidenze statistiche chiave

  • Variabilità : misurata con il coefficiente di variazione, risulta massima su ricavi (“Volume”) e annunci pubblicitari (“listings”), indicando differenze sostanziali tra mercati per dimensione e valori delle vendite.

  • Asimmetria : Positiva su vendite e ricavi riflette la presenza di code destre, con pochi casi di valori molto elevati che influenzano la media.

  • Distribuzione : L’analisi tramite il boxplot conferma la netta separazione nei livelli di prezzo tra città; inoltre la concentrazione in specifiche fasce è evidente, con indice di eterogenità (Gini) più elevati dove il mercato mostra una segmentazione spinta.

4. Raccomandazione Strategiche

Sul piano operativo, è fondamentale pianificare le campagne nei mesi di maggiore attività (primavera-estate) per ottimizzare l’impatto.

Strategie specifiche per area :

  • Bryan-College Station : incrementare i volumi mantenendo elevato il prezzo d’acquisto.

  • Tyler : lavorare sull’aumento del prezzo medio senza perdere competitività.

  • Beaumont : migliorare l’efficienza pubblicitaria per valorizzare il potenziale di crescita.

  • Wichita Falls : espandere offerta e visibilità per stimolare la domanda.

In sintesi, le analisi statistiche confermano che le dinamiche locali che le dinamiche locali devono giudare le strategie operative, evitando approcci uniformi al mercato texano.