Jak ominąć próbkowanie danych w Google Analytics przy pomocy skryptu R?

Wielokrotnie słyszałem uwagę w kontekście raportów Google Analytcs, że w tych danych coś nie gra. Nie pasują do danych z CRM, nie zgadzają się sesje z jednego raportu z sesjami z drugiego raportu, wyniki są ekstremalnie zawyżone albo zaniżone itp. Często w takich przypadkach winne jest próbkowanie danych. Najczęściej dotyczy ono darmowych wersji Google Analytics, ale dotyka również wersji płatnych 360.

W darmowej wersji próbkowanie raportu uruchamia się przy przekroczeniu 500 tysięcy sesji. Może zdarzyć się też przy mniejszej ilości – więcej o próbkowaniu przeczytacie tutaj.  Próbkowanie danych uruchamia się najczęściej w momencie kiedy korzystacie z segmentacji oraz wybieracie szerszy przedział czasowy.

Jak sprawdzić czy dany raport jest próbkowany?
Informacja odnośnie próbkowania dostępna jest w postaci logo tarczy umiejscowionej na górze raportu. Tarcza w kolorze zielonym oznacza brak próbkowania. Tarcza w kolorze pomarańczowym oznacza próbkowanie danych. Po najechaniu na tarczę mamy informację o tym jak duże jest to próbkowanie.

Próbkowanie danych w Google Analytics na poziomie 21,94% sesji.

Co oznacza próbkowanie danych?
Gdy zachodzi próbkowanie danych, to wartości, które widzicie w raporcie są estymowane na pewnym poziomie. Nie są dokładnym odzwierciedleniem tego, co znajduje się w bazie Google.
Przykładowo próbkowanie na poziomie 22% oznacza, że dane, które widzicie są ekstrapolowane z 22% realnie zebranych przez Google Analytics wizyt.
Zatem gdy wystąpi próbkowanie na poziomie kilku procent nie powinno się przykładać większej wagi do wyników raportu. Estymacja z próbki kilku procent jest bowiem obarczona dużym błędem szacunkowym i często w takich sytuacjach wyniki są czystą abstrakcją.

Czy jest możliwe ominięcie próbkowania danych?
Tak, jest na to kilka sposobów.
Ja przedstawię proste rozwiązanie, które sprawdzi się na doraźne potrzeby. Jest to po prostu fragment skryptu w R, który pobiera potrzebne dane za każdy dzień z osobna. Dzięki temu, że pobieramy dane za 1 dzień, to nie narażamy się na próbkowanie danych. Rozwiązanie to jest dość powszechnie dostępne w internecie.

Jeżeli nie mieliście wcześniej do czynienia z R to nie martwcie się. Nie jest to trudne.
Na początek musicie pobrać program do wywoływania skryptu R. Dla wygody może być to graficzny interfejs np. rStudio. Po otwarciu programu będziecie widzieli podział na cztery okienka. Najbardziej będą Was interesowały te po lewej stronie. Górne lewe będzie zawierało Wasz skrypt (oznaczone na obrazku nr 1), a dolne lewe to będzie konsola (oznaczona nr 2), która będzie Was informowała o wywoływaniu się kodu.

RStudio

Poniżej przykładowy kod, w którym pobieram sesje z GA Microdaty dla segmentu wizyt z mobile i zapisuje je do pliku.

#biblioteka umozliwiajaca laczenie sie z Google Analytics
library(googleAnalyticsR)

#gdy wykonujecie skrypt po raz pierwszy dla danego loginu ustawcie w nawiasie FALSE, 
#w innym przypadku - TRUE
ga_auth(FALSE)

#zamiast 215211150 podajcie ID widoku GA, z którego robicie raport
view_id <- "215211150"

#w nawiasach ustawcie zakres dat jaki Was interesuje
from <- as.Date("2020-05-01", format = "%Y-%m-%d")
to <- as.Date("2020-05-12", format = "%Y-%m-%d")

#definicja segmentu jakiego chcecie użyć
#w nawiasie pierwszą pozycją jest wymiar lub metryka GA
#'operator' to rodzaj dopasowania - w tym przypadku wyrażenie regularne
#'type' to typ danych - wymiar lub metryka
#'expressions' to wartość, do której dopasowujemy wybrany wymiar
segment1 <- segment_element("deviceCategory", 
                      operator = "REGEXP", 
                      type = "DIMENSION", 
                      expressions = "mobile")


#tworzenie wektora z elememntami segmentu, tu nie musicie nic zmieniać
sv_simple <- segment_vector_simple(list(list(segment1)))

seg_defined <- segment_define(sv_simple)

#w drugim argumencie nawiasu wybieracie pomiędzy segmentem sesji lub użytkownika
#u nas wybrany session_segment
segment4 <- segment_ga4("simple", session_segment = seg_defined)

#informacja o jednodniowych sekwencjach dat oraz tworzenie data frame - nie zmieniamy

z <- seq.Date(from, to, 1)

d <- data.frame()

for (i in 1:(length(z))) {

#poniżej wstawiamy co chcemy wyświetlić w raporcie oraz konfigurujemy raport
#dimensions - tu wstawiamy wymiar (kilka wymiarów oddzielamy przecinkami), my mamy wybraną datę
#metrics - tu wstawiamy metrykę (kilka metryk oddzielamy przecinkami), my mamy wybrane sesje  
#anti_sample w przypadku gdy macie bardzo dużą ilość danych dziennych warto ustawić na T (zamiast F)
  data <- google_analytics(
    view_id,
    date_range = c(z[i], z[i]),
    dimensions = c('date'),
    metrics = c('sessions'),
    max = -1,
    anti_sample = F,
    segments = segment4
  )
  
  d <- rbind(d, data)
  
}

#zapisujemy dane do pliku .xls
write.csv2(d, file = 'microdata_mobile_ga.xls')

Aby wywołać dany skrypt wystarczy go zaznaczyć myszką we wskazanym okienku nr 1, a następnie kliknąć Run (po prawej u góry okienka nr 1) lub skrót klawiszowy CTRL+Enter. Nie musicie zaznaczyć na raz całego kodu i go uruchamiać. Możecie to robić partiami i tak też rekomenduję by go wywoływać. W przypadku kiedy np. pojawią się jakieś błędy to wówczas będziecie wiedzieli, które partie kodu są odpowiedzialne za nie odpowiedzialne.
Na początku wywołajcie kod do pozycji:

ga_auth(FALSE)

Kod spowoduje otwarcie strony przeglądarki, w której będziecie musieli zezwolić RStudio na dostęp do Waszego konta Google Analytics. Po wyrażeniu zgody pojawi się token do autoryzacji, który będziecie musieli wstawić do okienka konsoli (okienko nr 2).
Potem już możecie dalej stopniowo zaznaczać i wywoływać kod.

Wynikiem działania skryptu powinien być plik .xls, który będzie zawierał odpowiednie dane.

Jeżeli będziecie chcieli wywołać inne segmenty z innymi wymiarami i metrykami to pomocne będą następujące linki do: dokumentacji Google Analytics w R , a także do nazewnictwa wymiarów i metryk GA.

Wadą skryptu jest to, że działa wolno. W przypadku dużej ilości danych, jakie będzie potrzebowali przetwarzać i wyciągać lepiej zdecydować się na inne rozwiązanie.
Niemniej dla prostych danych i raportów rozwiązanie to wydaje się wystarczające.

Filtrowanie w Google Analytics pracowników zdalnych.

Z powodu pandemii koronawirusa duża ilość pracowników przeszła na tryb pracy zdalnej. Jednocześnie stale wchodzą oni na serwisy firm, w których pracują. Rzadko filtrujemy IP domowe pracowników w statystykach Google Analytics. Często jest to niemożliwe ze względu na dynamicznie zmieniające się IP. To powoduje negatywną sytuację – zniekształcamy statystyki ruchu poprzez ruch pracowników zdalnych. Jak zatem możemy odfiltrować ten ruch? Z pomocą przychodzi nam Google Tag Manager, 1st party cookie i zmienna niestandardowa Google Analytics.

Oto co będzie nam potrzebne:
1. Skrypt w Google Tag Manager generujący 1st party cookie oraz zmienna typu Własny plik cookie.
2. Strona docelowa dostępna wyłącznie dla pracowników.
3. Niestandardowa zmienna w Google Analytics.

Zacznijcie od konfiguracji Google Tag Managera.
Najpierw tworzycie nowy tag typu Niestandardowy kod HTML:

<script>
function setCookie(cname, cvalue, exdays, cdomain) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
setCookie ("workAtHome", "true", 365, "waszadomena.pl")
</script>

Będzie on generował cookie na przeglądarkach Waszych pracowników. Cookie zostanie stworzone w momencie, kiedy pracownik odwiedzi jakąś stronę w serwisie dostępną tylko dla Waszych pracowników np. po zalogowaniu. Zatem dla wskazanego wyżej tagu należy stworzyć w Google Tag Managerze regułę typu Wyświetlenie strony:

Reguła GTM – wyświetlenie strony po zalogowaniu.

W miejscu waszadomena.pl/login wpisujecie swój adres dostępny tylko dla pracowników po zalogowaniu.

W GTMie musicie jeszcze wprowadzić zmienną typu 1st party cookie, którą wykorzystacie w tworzeniu wymiaru niestandardowego Google Analytics. Poniżej jak powinna wyglądać zmienna typu Własny plik cookie:

1st party cookie dla pracowników zdalnych

Pamiętajcie by w polu Nazwa pliku cookie wstawić tą samą nazwę, którą użyliście w tagu Google Tag Manager odpowiedzialnym za generowanie cookie.

Przechodzimy następnie do Google Analytics, w którym tworzymy Wymiar niestandardowy z zakresem Użytkownik:

Wymiar niestandardowy dla pracowników zdalnych.

Wymiar będzie przyjmował wartość true w momencie kiedy w przeglądarce użytkownika znajdzie się odpowiednie cookie.

W Google Analytics musicie jeszcze stworzyć niestandardowy filtr, który będzie wykluczał ruch użytkowników z Wymiarem niestandardowym „pracownik zdalny” ustawionym na true. Zatem będzie filtrował Waszych pracowników pracujących z domu.

Filtr Google Analytics wykluczający pracowników zdalnych

Pozostała ostatnia rzecz jaką będziecie musieli zrobić w Google Tag Managerze. Jest nią stworzenie pola z Wymiarem niestandardowym Google Analytics. Pole to stworzycie w ramach tagu zbierającego ruch do Google Analytics. Jako wartość wymiaru podacie wcześniej stworzoną zmienną z zawartością 1st party cookie:

Ustawienie wymiaru niestandardowego dla mierzenia Google Analytics.

Oczywiście w polu Indeks wpisujecie liczbę, odpowiadającą stworzonemu wcześniej w Google Analytics wymiarowi niestandardowemu.

Pozostaje zapisać, przetestować czy wszystko działa dobrze i jeżeli tak – opublikować kontener GTM.