mercoledì 22 luglio 2009

Analisi del trend dei visitatori di un sito con i dati di Google Analytics

Questo post è un riassunto di due miei post precedenti sull'analisi del trend con il test di Cox-Stuart e sulla regressione lineare semplice. L'obiettivo che ci proponiamo è quello di valutare il trend del numero di visite ricevute da un sito in un ampio arco temporale. Personalmente utilizzo Google Analytics, perchè questo strumento ci permette di salvare i vari reportage in file Excel. Vediamo punto per punto come salvare il reportage, quindi come importare i dati da Excel in R, ed infine come stimare se il numero di visitatori giornalieri segue un trend in aumento o in diminuzione.

Cominciamo col creare un rapporto ad hoc in Google Analytics. Dopo aver eseguito il login, selezioniamo l'intervallo di date che vogliamo analizzare. Quindi clickiamo su Visitatori.



Nel sottomenù che si apre clickiamo su Visite. A questo punto possiamo salvare il report, clickando su Esporta e quindi clickando su CSV per Excel (è importante salvare in questo formato, e non semplicemente in CSV, altrimenti importare i dati da Excel ad R risulterà difficoltoso).



Salviamo il file CSV, e apriamolo con Excel. Ecco come ci appare (ho preso solo alcune celle):



A questo punto importiamo i dati in R. Con mia grande gioia, ho scoperto che importare i dati da Excel in R è estremamente semplice. E' sufficiente selezionare la colonna (o le colonne) di nostro interesse (nel nostro caso la colonna Visite) e copiare negli appunti (ricordiamoci di selezionare la cella Visite, perchè ci tornerà utile):



Fatto ciò, apriamo R e incolliamo i nostri valori in maniera estremamente semplice con un solo comando:

> myvisit <- read.delim("clipboard")

In che formato R interpreta i dati che gli sono stati forniti? Osserviamo il contenuto di myvisit (qui ci sono solo i primi 10 valori, per comodità):

> myvisit
    Visite
1        6
2       10
3        7
4        8
5        7
6        6
7        4
8        9
9        8
10      11


E' un dataframe a una sola colonna, il cui nome è Visite (per questo ho specificato di copiare anche la cella Visite da Excel).

A questo punto abbiamo in R e possiamo procedere con l'analisi del trend, nei due modi proposti: tramite un test di Cox-Stuart e tramite l'analisi della retta di regressione.

La funzione per effettuare il test di Cox-Stuart è disponibile in questo post. Qui mi limiterò esclusivamente ad utilizzarla. Innanzitutto dobbiamo convertire il dataframe in un formato che può essere letto dalla funzione cox.stuart.test, in questo modo:

> visite <- c(myvisit$Visite)

Ho creato in questo modo un vettore (visite) che contiene tutti i dati ordinati che si trovavano nella colonna Visite del dataframe myvisit. Adesso effettuiamo un test di Cox-Stuart:

> cox.stuart.test(visite)

        Cox-Stuart test for trend analysis

data:
Trend in aumento - p-value = 0


L'output è molto esplicativo: è stato rilevato un trend in aumento delle visite, altamente significativo (essendo p-value < 0.5). Osserviamo qui che p-value = 0. In realtà questa è una approssimazione, perchè eseguendo i calcoli singolarmente (come descritto nel post a riguardo), otterremo p-value = 2.375132e-08, cioè un valore estremamente piccolo.
Riassumendo quindi, secondo il test di Cox-Stuart esiste un significativo trend in aumento delle visite.




Se non siamo soddisfatti o sicuri di questo risultato, possiamo prendere in considerazione il coefficiente angolare della retta di regressione.
Innanzitutto può essere comodo visualizzare i risultati. Il vettore visite contiene le visite giornaliere al sito. Ora creiamo un vettore ordinato dei giorni considerati, della stessa lunghezza del vettore visite:

> giorni <- c(1 : length(visite))

Creiamo un plot con i dati:

> plot(giorni, visite, type="b")

Scegliendo type="b" visualizzo punti e linee, come appare in figura:



Da questo plot non è facile osservare un eventuale trend sull'andamento delle visite. Possiamo però fare un'analisi di regressione. Valutando il segno del coefficiente angolare della retta, possiamo stimare se il trend è in aumento o in calo:

> fit <- lm(visite ~ giorni)
> summary(fit)

Call:
lm(formula = visite ~ giorni)

Residuals:
    Min      1Q  Median      3Q     Max
-33.254  -7.628  -1.253   7.497 106.559

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) 25.93965    1.62693  15.944  < 2e-16 ***
giorni       0.06251    0.01015   6.161 2.56e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 13.5 on 275 degrees of freedom
Multiple R-squared: 0.1213, Adjusted R-squared: 0.1181
F-statistic: 37.96 on 1 and 275 DF, p-value: 2.559e-09


Il coefficiente angolare ha valore b = 0.06251. Esso ha quindi segno positivo (pur essendo piccolo in valore assoluto), quindi è lecito pensare ad un trend in aumento. Il valore della statistica t-test sul coefficiente angolare, e il suo relativo p-value indicano entrambi che esso è significativo. Possiamo quindi affermare che c'è un trend in aumento.

Possiamo infine visualizzare la retta di regressione direttamente sul grafico plot ottenuto in precedenza in questo modo:

> plot(giorni, visite, type="b")
> abline(fit, col="red", lwd=3)


Oppure analogamente in questa maniera:

> plot(giorni, visite, type="b")
> abline(lm(visite ~ giorni), col="red", lwd=3)


Il comando abline permette di aggiungere una retta definita dall'equazione contenuta, direttamente sul grafico che stavamo visualizzando; il parametro col specifica il colore, e il parametro lwd specifica lo spessore della linea. Osserviamo ora il grafico:



E' evidente come ci sia un trend in aumento, sia pur relativamente basso.

Nessun commento:

Posta un commento