Gli utenti in Analytics e in BigQuery non corrispondono

Una domanda che frequentemente mi viene posta è “perché il numero di utenti in Google Analytics non corrisponde a quello che ottengo in BigQuery?“.
Le immagini seguenti sono state estratte, a scopo esemplificativo, dalla Panoramica di Google Analytics, Fig. 1, e dal risultato di esecuzione di una query in BigQuery per la richiesta degli stessi valori, Fig. 2.
L’intervallo di tempo utilizzato è lo stesso in entrambi i casi.

Fig. 1 – Sessioni, Utenti e Visualizzazioni di pagina in Google Analytics

La query eseguita in BigQuery è la seguente:

SELECT 
  SUM(totals.visits) as Sessions,
  COUNT(DISTINCT fullVisitorId) as Users,
  SUM(totals.pageviews) as Pageviews
FROM 
  `big-query-project-123456.12345678.ga_sessions_202010*`
WHERE
  date
BETWEEN
  '20201001'
AND
  '20201004'
Fig. 2 – Sessioni, Utenti e Visualizzazioni di pagina in BigQuery

In effetti le metriche come le sessioni e le visualizzazioni di pagina risultano identiche se paragonate tra i due sistemi. Fastidioso è invece non trovare tale corrispondenza anche per quanto riguarda gli utenti. È vero che si tratta di una discrepanza che solitamente si aggira intorno all’1%, ma perché c’è questa differenza?

Mentre per il calcolo del totale delle sessioni è sufficiente sommare il rispettivo numero di ogni giorno all’interno dell’intervallo di tempo selezionato, per gli utenti questo non è possibile.
Analizzando il seguente semplice scenario, se un utente genera una sessione il giorno 1 e un’altra sessione il giorno 2, ha effettuato nel totale dei due giorni 2 sessioni tuttavia, poiché l’utente è sempre lo stesso sia per il primo che per il secondo giorno, il totale utenti in quel periodo risulta 1 e non 2. Questo conteggio si basa sul clientId, il valore univoco associato in un cookie per la coppia browser/dispositivo che visita il sito e dal quale Google Analytics riconosce gli utenti nuovi da quelli di ritorno. Ogni volta che si interrogano i rapporti, modificandone l’intervallo di tempo, Google Analytics deve ricalcolare il numero degli utenti sulla base di questo identificativo salvato nei propri server.

Va da sé che si tratta di un calcolo sicuramente più dispendioso rispetto a quello del totale delle sessioni descritto in precedenza. Per questo motivo, al fine di ridurre i tempi di attesa per la risposta dei report nell’interfaccia di Google Analytics, il sistema utilizza un algoritmo di stima della cardinalità probabilistica, chiamato HyperLogLog ++.
La conseguenza è che i rapporti in Google Analytics sono restituiti più velocemente rispetto ad un’interrogazione più accurata tuttavia, il rovescio della medaglia è quella piccola differenza sul numero totale degli utenti.

Quale è il valore corretto?

Il numero di utenti effettivo è quello che si ottiene in BigQuery.

È possibile averne la certezza esportando un report non campionato dall’interfaccia di Google Analytics, Fig. 3.

Fig. 3 – Rapporto non campionato in Google Analytics dove il numero degli utenti corrisponde a quello in BigQuery

Nonostante in Google Analytics non ci siano segnali di campionamento per il risultato standard osservato, l’esportazione del rapporto non campionato restituisce il valore preciso di quella particolare metrica e di conseguenza anche di altre che ne dipendono, come ad esempio, la % di nuove sessioni.