Pozdrav! Vratio sam se. Yay.

Zadnja dva članka napisao je Matija pošto ja moram žonglirati između krize identita i posla. Pa rekao da ću nešto doprinjeti pošto je Matiji zanimljivo gledati i refresh-ati Google Analytics po cijele dane. Uuuu, klik! Pretpostavljam da nije jedini.

Zadnji članak je zaokružio priču oko dohvata podataka, analize i prikaza podataka vezanih za korona virus.

Iako mi je jako drago kada vidim da se ljudi ponovno smiju u prolazu i da svi počinjemo osjećati optimizam jer se stvari vraćaju u “normalu”, bojim se da ovakav skok ne može donijeti puno dobrih stvari. Sretan ću biti ako me nadolazeća situacija uvjeri u suprotno. Iako se time ne bavim i moje je mišljenje samo moje, ne vidim racionalnog razloga između ovih skokova od “zabarikadirajte se doma” i “otvorimo sve granice, kafiće i sve ostalo, dolazi ljeto, ko ga ….”. 

Nekakav prijelazni period da vidimo kako će virus reagirati na ovakve promjene je potreban, jer inače čemu sve ove restrikcije? Ali bolje da pustimo politiku, idemo na pametnije stvari.

Uvod

Članak koji je Matija napisao na temu analize prilično je dobar.

Sad je moj red da to generaliziram, automatiziram i druge riječi na -iziram (friziram?).

U ovom članku ćemo proći ono što je Matija napravio u zadnjem članku i dati ćemo Jupyter notebook svima na korištenje tako da i vi možete pokrenuti svoje podatke i dobiti pokazatelje za svoja oglašavanja. Da, besplatno. Sam projekt je ovdje.

Zanimljivost ovog članka je što potpuno automatizirano možemo dobiti podatke sa Google Analytics-a, te iste podatke učitati u Python, te napraviti različite analize u njemu pomoću grafova.  Isto tako, kao šlag na kraju, imamo objašnjenje kako napraviti analizu efektivnosti različitih oglašivačkih kanala i to ne pomoću “poliži prst i pogledaj u kojem smjeru puše vjetar”, nego prave statistike.

Što želimo postići? Želimo vidjeti koliko imamo klikova u nekom periodu (po datumima) za određeni kanal, koliko imamo sesija, koliko traju sesije i ostalo.

Google analytics API

Mogućnosti reportinga za Google Analytics su jako zanimljive. Samo koristeći GA Reporting API možete dobiti jako lijepe rezultate i izbjeći dosta klikanja sa reportima. Originalna verzija od Matije je koristila reporte direktno iz GA, te je bilo dosta teško to kasnije pospajati.

Ono što nas zanima ovdje je vodič za Python da vidimo što trebamo napraviti da bismo u Python-u mogli vidjeti rezultate izvještaja iz Google Analytics-a. Lista uputa nalazi se na ovoj stranici, ali ono što trebate napraviti je dodati pristup aplikaciji koju ćemo mi koristiti na GA, kako bismo mogli “pitati” GA pitanja o događanjima na našoj web stranici.

Ono što na kraju trebate imati je jedan file koji se zove “client_secrets.json”, koji ne smijete nigdje kopirati, niti pod razno i koji vam služi da možete pristupiti podatcima na GA.

Jednom kada imate ovaj file, možete pristupiti GA Reporting API i postavljati zanimljiva pitanja. Možemo pogledati kratki code snipped gdje mi tražimo podatke od GA:

# Fetch the response from GA
response = analytics.reports().batchGet(
  body={
    ‘reportRequests’: [
    {
      ‘viewId’: VIEW_ID,
      ‘dateRanges’: [{‘startDate’: ’30daysAgo’, ‘endDate’: ‘today’}],
      “metrics”: [
        {“expression”: “ga:pageviews”},
        {“expression”: “ga:sessions”},
        {“expression”: “ga:sessionDuration”},
        {“expression”: “ga:avgSessionDuration”}
      ],
      ‘dimensions’: [{“name”: “ga:pagePath”}, {‘name’: ‘ga:date’}, {“name”: “ga:sourceMedium”}]
    }]
  }
).execute()

Kao što ovdje piše, tražimo od GA izvještaj, 30 dana unazad do danas, gdje pod dimenzije (vrijednosti za grupiranje) uzimamo datum, oglašivački kanal i stranicu na kojoj je korisnik bio.

Od tih grupiranih vrijednosti onda zatražimo broj pregleda stranica, broj sesija, trajanje sesija i prosječno trajanje sesija.

Ako vam treba samo zadnjih 15 dana, promijenite vrijednost i pokrenite ponovno! To je to. 

Lista mogućnosti i što sve možete dobiti nazad prilično je bogata, a samu listu možete naći ovdjeNa kraju rezultate prebacimo u tablični prikaz (točnije u CSV format) i učitamo ga u Pandas dataframe što koristimo kako bismo radili daljnje analize podataka.

Analiza podataka sa GA

Gledati samo podatke u tablicma je dosadno. Matije me pitao da li je moguće napraviti nekakvu dinamičku interakciju sa samim podatcima pa sam malo bacio oko.

U Jupyter notebook-u imate primjer gdje možete filtrirati podatke po oglasnom kanalu, iako bi se do moglo dodatno poboljšati.

I da, bili smo u Cosmu. Da, znam.

Uglavnom, poanta je da možete napraviti lijepe dinamične interakcije sa podatcima i to gledati u realnom vremenu. Čak sam stavio primjer sa interaktivnim grafovima, ako vas zanima pogledati veću količinu podataka na grafovima. Uglavnom, jako lijepa stvar.

Ako vas zanima nešto specifično kako napraviti, možete se javiti. Ako pitate pristojno i razumijete osnove (pitanja kako nešto instalirati i slično nisu mi baš interesantna), pomoći ćemo vam. Da, besplatno.

Filtriranje i analiza

Filtriramo sve rezultate da sadržavaju samo stranice koje su vezane za noviji projekt Mini Tesla, koristeći sljedeći snippet:

df = df[df[‘ga:pagePath’].str.contains(‘mini’) | df[‘ga:pagePath’].str.contains(‘razvoj-tehnologija-za-autonomno-vozilo’)]

Nakon što imamo podatke samo za Mini teslu, razdvojimo podatke za različite oglasne kanale:

• Facebook video

• Facebook post

• Google (YouTube)

• LinkedIn

• Twitter

Nakon što to sve razdvojimo, možemo te podatke i pokazati.

Vizualizacija podataka

Prikažimo redom što smo dobili.

Facebook video

Facebook post

Google

LinkedIn

Twitter

Korelacija?

Pitanje koje je Matija zadnji puta ostavio da “visi u zraku” je da li postoji korelacija između postojećih podataka i ako da, zašto.

Pogledajmo podatke za sve oglasne kanale:

Ima smisla da korelacija između broja sesija i broj pregleda postoji, pošto su to jako usko povezani pojmovi, a za ostalo ne vidimo prevelike korelacije.

Koji je najbolji kanal za oglašavanje?

I sada, srž ovog posta.

Ovdje ću pokušati objasniti generalnu ideju iza toga kako smo došli do rezultata, ali ako vas interesira detaljnije, pogledajte sam Jupyter notebook i na koji način je to tamo riješeno.

Na žalost, sami pojmovi koji se koriste ovdje dosta su bogati. Ne kao da imaju puno para, nego imaju dubinu koja vam nije vidljiva kada gledate iz prve. Do te dubine dolazi se vremenom, te ja sam za sebe mogu reći da razumijem površnije stvari koje se tiču ovih pojmova iz statistike. Statistika je jako bogata i iza sebe ima dosta materijala koji je potrebno svladati.

Tako da, ako vam nije jasno kako doći do ovoga i zašto nešto ne radi, to je ok, glavno da možete vidjeti nekakvu korist u svemu tome pa uvijek možete istražiti temu dublje ako vam se čini interesantna.

Što ćemo usporediti?

Za usporedbu moramo imati minimalno dvije stvari. 

I za usporedbu moramo imati dvije slične stvari. Kako bi se reklo, ne možemo uspoređivati kruške i jabuke.

Znači ne možemo uspoređivati video i post. To baš i nema smisla. Osim što je materijal/sadržaj drugačiji, sam medij je drugačiji i ima drugačije ponašanje.

Možemo uzeti sam post. Uzmimo post na Facebook-u i LinkedIn-u kako se ponaša i da pogledamo razliku. A što je to što ćemo mjeriti sa post-a?

Pa tražimo publiku koja bolje rezonira sa sadržajem. Drugim riječima, publiku koja ga više (duže) čita. Za to možemo uzeti prosječno vrijeme sesije. Prosječno vrijeme sesije je prilično dobar pokazatelj koliko su ljudi zainteresirani za sam članak pa da vidimo koja je ta razlika između Facebook-a i LinkedIn-a.

Kako ćemo usporediti?

Usporediti možemo koristeći statistiku.

Potrebno je imati statistički test jer stvarna mjerenja nisu apsolutno točna i uvijek imaju nekakvu “buku” u sebi. 

Na primjer, netko je došao na članak i otišao na pauzu popiti kavu. Kada se vrati, izađe sa stranice, jer je Mini tesla autić koji možete autonomno voziti “glup” i radije ide gledati mačke koje skaču na YouTube-u. Stvarno vrijeme koje je ta osoba potrošila možda je 15 sekundi, a vrijeme sesije je 15 minuta (dugo je pio kavu). 

Standardna metoda za usporedbe dvije grupa je statistički test. Statistički test podrazumijeva da izrazimo nul hipotezu, što bi bila da ne postoji razlika između trajanja sesija Facebook-a i LinkedIn-a. Nakon toga usporedimo distribuciju podataka te dvije grupe i provjerimo da li je nul hipoteza drži.  

Često postoji nekakva vrijednost (p-vrijednost) koja služi da se hipoteza odbaci ili prihvati. Ta vrijednost je izmišljena (vjerojatno ovo nisam trebao napisati, ali ovo je istina) i često se koristi kao indikator u potpuno različitim poljima, iako postoji cijela nauka oko toga koliko ta vrijednost treba biti zapravo. 

Lakše od toga je koristiti alternativnu “granu” statistike, koja nije frekventistička, već probabalistična (hah, nasmija sam sebe). Uglavnom, koristeći Bayesov “poučak” (nemam pojma koja bi dobra riječ bila ovdje). 

Na taj način pokušavamo dobiti obje distribucije (kako su raspoređeni podatci na grafovima). Onda pogledamo njihovu razliku, koliko su različito raspoređene distribucije (koliko su grafovi podataka različiti).

Isto tako pogledamo i vjerojatnost nesigurnosti u tu istu procjenu (koliko je algoritam “siguran” da ti podatci imaju tu distribuciju, taj raspored podataka na grafovima).

To je od kritične važnosti ako želite dati nekakav rezultat koji u svoju interpretaciju uključuje i naše nepoznavanje domene (možda nismo razmišljali da postoje ljudi koji gledaju članak 15 sekundi i piju kavu 15 minuta), kao i stohastičnost varijabli koje nismo uzeli u obzir (stohastičnost varijabli znači da su neke varijable različite u različitim trenutcima jer nemamo kompletnu sliku kako rade, recimo većinu vremena ljudi pogledaju članak 15 sekundi, ali ima primjera gdje uđu na stranicu i izađu nakon 1 sekunde – to je jako pametan način da kažemo kako nemamo pojma zašto su neke vrijednosti takve). 

Detaljnije objašnjenje kako kod radi mogu se pronaći ovdje. 

Nego, pogledajmo rezultate prosječne vrijednosti sesija Facebook-a i LinkedIn-a:

Širina ovih crta pokazuje koliko vrijednosti “odskaču”, količinu razlika u vrijednostima. Točka u sredini je srednja vrijednost u distribuciji.

Srednja vrijednost za Facebook je nešto veća nego za LinkedIn, te je puno stabilnija – imamo manje razlike u vrijednostima na Facebook-u, nego na LinkedIn-u.

Drugim riječima, na LinkedIn-u imamo veću nesigurnost u procjenu, imamo primjere ljudi koji jako dugo čitaju članak, ali isto tako, koji jako kratko čitaju članak. To ne znači da je nužno publika na LinkedIn-u raznolikija, već može značiti da jednostavno imamo manje podataka pa imamo veća odskakanja (algoritam je manje siguran u procjenu).

Na Facebook-u imamo primjer gdje imamo puno uniformnije sesije (sesije koje imaju jako slične vrijednosti). 

Znači, sa trenutnim skupom podataka, gdje imamo puno više podataka za Facebook, Facebook je puno predvidljiviji i više čitan.

Zaključak

Možemo koristiti tehnologiju da nam olakša život? Je to dovoljno? Ne?

Teško je koristiti naprednije funkcije koje su dostupne za Google Analytics i raditi analize podataka za različite kampanje, izvore, medije i ostalo kada se ne bavite programiranjem. Sa ovim sadržajem, koji je potpuno besplatan i koji svatko može pokrenuti, to može koristiti svatko i na klik jednog gumba. Idealno je za brze preglede učinka kampanja i donošenje daljnjih odluka, te može poslužiti za executive summary i nekakve generalne pokazatelje kako funkcionira marketing. 

Podatci su ključni za odluke. Ako vam ikada trebaju KPI (Key Performance Indicator) za vaš marketing, koristiti ovako nešto jednom dnevno ili malo to dopuniti pa napraviti aplikaciju koja to radi za vas i poslužuje vam te rezultate kada dođete na stranicu u realnom vremenu, relativno je jednostavno.