Esempi di Business Analytics/Statistiche per il marketing

Indice del libro

Caricamento librerie modifica

library(dplyr)
library(ggplot2)
library(GGally)
library(statsr)

Parte 1: Dati modifica

I dati utilizzati in questo progetto provengono da 3 campagne pubblicitarie sui social media di un'organizzazione anonima. Il file KAG_conversion_data.csv, scaricabile da kaggle, contiene 1143 osservazioni in 11 variabili. Di seguito sono riportate le descrizioni delle variabili:

  • ad_id: un ID univoco per ogni annuncio.
  • xyz_campaign_id: un ID associato a ciascuna campagna pubblicitaria dell'azienda XYZ. Le campagne sono 3: 916, 936 e 1178 .
  • fb_campaign_id: un ID associato al modo in cui Facebook monitora ciascuna campagna.
  • age: età della persona a cui viene mostrato l'annuncio.
  • gender: sesso della persona a cui viene mostrato l'annuncio.
  • interest: un codice che specifica la categoria a cui appartiene l'interesse della persona (gli interessi sono quelli menzionati nel profilo pubblico Facebook della persona).
  • Impressions: il numero di volte in cui l'annuncio è stato mostrato.
  • Clicks: numero di clic per quell'annuncio.
  • Spent: importo pagato dalla società xyz a Facebook per mostrare l'annuncio.
  • Total_Conversions: numero totale di persone che hanno chiesto informazioni sul prodotto dopo aver visto l'annuncio.
  • Approved_Conversions : numero totale di persone che hanno acquistato il prodotto dopo aver visto l'annuncio.

Caricamento dati:

KAG_conversion_data <- read.csv("KAG_conversion_data.csv")

Parte 2: Domanda di ricerca modifica

Si vuole fare un'analisi statistica delle campagne pubblicitarie evidenziando medie, mediane, range, inferenze, correlazioni, modellizzazioni, previsioni ecc.

Parte 3: Esplorazione dati modifica

Innanzitutto attraverso la funzione summary di R è possibile visualizzare le statistiche di ogni variabile:

KAG_conversion_data$xyz_campaign_id <- as.factor(KAG_conversion_data$xyz_campaign_id)
KAG_conversion_data$age <- as.factor(KAG_conversion_data$age)
KAG_conversion_data$gender <- as.factor(KAG_conversion_data$gender)

summary(KAG_conversion_data)
ad_id         xyz_campaign_id fb_campaign_id  
Min.   : 708746   916 : 54        Min.   :103916  
1st Qu.: 777632   936 :464        1st Qu.:115716  
Median :1121185   1178:625        Median :144549  
Mean   : 987261                   Mean   :133784  
3rd Qu.:1121804                   3rd Qu.:144658  
Max.   :1314415                   Max.   :179982  
   age      gender     interest       Impressions     
30-34:426   F:551   Min.   :  2.00   Min.   :     87  
35-39:248   M:592   1st Qu.: 16.00   1st Qu.:   6504  
40-44:210           Median : 25.00   Median :  51509  
45-49:259           Mean   : 32.77   Mean   : 186732  
                    3rd Qu.: 31.00   3rd Qu.: 221769  
                    Max.   :114.00   Max.   :3052003  
    Clicks           Spent        Total_Conversion
Min.   :  0.00   Min.   :  0.00   Min.   : 0.000  
1st Qu.:  1.00   1st Qu.:  1.48   1st Qu.: 1.000  
Median :  8.00   Median : 12.37   Median : 1.000  
Mean   : 33.39   Mean   : 51.36   Mean   : 2.856  
3rd Qu.: 37.50   3rd Qu.: 60.02   3rd Qu.: 3.000  
Max.   :421.00   Max.   :639.95   Max.   :60.000  
Approved_Conversion
Min.   : 0.000     
1st Qu.: 0.000     
Median : 1.000     
Mean   : 0.944     
3rd Qu.: 1.000     
Max.   :21.000     

Correlazioni: modifica

Per quanto riguarda la campagna 1178 si notano forti correlazioni positive tra le variabili per cui al crescere delle impressioni e della spesa, crescono i click e al crescere dei click crescono le conversioni. Ciò non accade per le campagne 916 e 936 che risultano fallimentari:

df_936 <- KAG_conversion_data %>%
  filter(xyz_campaign_id==936)

df_1178 <- KAG_conversion_data %>%
  filter(xyz_campaign_id==1178)

ggpairs(df_1178,columns = 7:11)

ggpairs(df_936,columns = 7:11)

Correlazioni campagna 1178:

 

Correlazioni campagna 936:

 

Inferenza modifica

Come si vede dalla seguente tabella la media delle conversioni totali e approvate delle campagne 916 e 936 risulta simile intorno a 1 e 0,5, mentre la media della campagna 1178 risulta superiore.

KAG_conversion_data %>%
  group_by(xyz_campaign_id) %>%
  summarise(media_total_conversion=mean(Total_Conversion),
            media_approved_conversion=mean(Approved_Conversion))
 xyz_campaign_id media_total_conversion media_approved_conversion
1 916                               1.07                     0.444
2 936                               1.16                     0.394
3 1178                              4.27                     1.40 	

Attraverso l'inferenza (t test) si vuole verificare che vale l'ipotesi nulla secondo cui la media delle conversioni della campagna 916 si può considerare uguale alla media della campagna 936 al 95%, infatti il p_value risulta sia per Total_conversion che per Approved_conversion maggiore di 0,05:


df_916_936 <- KAG_conversion_data %>%
  filter(xyz_campaign_id %in% c(916,936)) 
  
inference(Total_Conversion, xyz_campaign_id, data=df_916_936,statistic = "mean",method = "theoretical", alternative = "twosided", type = "ht", null=0)
Response variable: numerical
Explanatory variable: categorical (2 levels) 
n_916 = 54, y_bar_916 = 1.0741, s_916 = 0.2644
n_936 = 464, y_bar_936 = 1.1573, s_936 = 0.5248
H0: mu_916 =  mu_936
HA: mu_916 != mu_936
t = -1.9162, df = 53
p_value = 0.0607

inference(Approved_Conversion, xyz_campaign_id, data=df_916_936,statistic = "mean",method = "theoretical", alternative = "twosided", type = "ht", null=0)
Response variable: numerical
Explanatory variable: categorical (2 levels) 
n_916 = 54, y_bar_916 = 0.4444, s_916 = 0.5016
n_936 = 464, y_bar_936 = 0.3944, s_936 = 0.5396
H0: mu_916 =  mu_936
HA: mu_916 != mu_936
t = 0.6883, df = 53
p_value = 0.4942


Parte 4: Modellizzazione modifica

Si vuole predire il numero totale di conversione in base alle visualizzazioni degli annunci (impressions) e alla spesa effettuata utilizzando un modello di regressione lineare :

model <- lm(Total_Conversion ~ Spent +  Impressions, KAG_conversion_data)
summary(model)
Call:
lm(formula = Total_Conversion ~ Spent + Impressions, data = KAG_conversion_data)
Residuals:
     Min       1Q   Median       3Q      Max 
-12.1100  -0.5588   0.1668   0.2636  24.1277 
Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  7.363e-01  8.047e-02    9.15   <2e-16 ***
Spent       -5.604e-02  3.289e-03  -17.04   <2e-16 ***
Impressions  2.676e-05  9.140e-07   29.28   <2e-16 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.334 on 1140 degrees of freedom
Multiple R-squared:  0.7296,	Adjusted R-squared:  0.7291 
F-statistic:  1538 on 2 and 1140 DF,  p-value: < 2.2e-16

Essendo R^2=72,91% la percentuale di variabilità delle conversioni totali espressa dal modello è pari al 72,91% . Poichè tale valore è ampio, c'è una relazione lineare tra le variabili Spent e Impressions con Total_Conversion. Quindi data la spesa effettuata e il numero di visualizzazioni si può predire il numero totale di conversioni.