Cum să prognozați traficul de căutare cu Python și GA4

Publicat: 2021-04-26

În orice strategie axată pe optimizarea motoarelor de căutare (SEO), analiza datelor este esențială. Sunt din ce în ce mai mulți specialiști în acest domeniu care aleg să-și dezvolte cariera în analiza traficului organic de căutare, care în sine are un comportament și particularități destul de diferite de restul: căutare plătită, email, social organic, direct etc. acest sens și datorită unei game largi de instrumente disponibile astăzi, acest tip de studii au reușit să evolueze într-un grad de neconceput în comparație cu doar câțiva ani în urmă.

Acest pas major înainte se datorează în principal apariției de noi metodologii și dezvoltări care ne-au permis să generăm modele analitice fără a fi nevoie să ne bazăm pe operații matematice complicate. Suntem norocoși să avem la dispoziție tehnicile și algoritmii deja testați și pregătiți să începem să lucrăm cu ei.

În articolul de mai jos, ne vom concentra pe crearea unui model predictiv pentru un set de date dintr-o serie temporală în care tendința calculată este ajustată la sezonalitate și periodicitatea anterioară. Mai precis, vom prezice traficul de căutare organic al proprietății noastre din Google Analytics 4 (denumit în continuare GA4). Există multe opțiuni pentru a realiza acest lucru, totuși pentru acest caz particular am decis să execut dezvoltarea în întregime în Python.
Scriptul pe care se bazează acest articol este format din trei părți clar diferențiate:

  • Extragerea datelor . Cum să utilizați noua API GA4 pas cu pas pentru a colecta trafic organic de căutare.
  • Modelarea datelor . Utilizarea Prophet, biblioteca cu sursă deschisă a Facebook pentru a face previziuni în serie de timp.
  • Vizualizarea datelor . Afișați schimbările de tendință și predicția modelată.

Extragerea datelor GA4 prin intermediul API-ului său folosind Python

Primul lucru pe care trebuie să-l știm când avem de-a face cu Google Analytics Data API (GA4) este că GA4 este starea sa de dezvoltare. După cum este detaliat de Google pe pagina sa, este în prezent într-o versiune inițială. Mai exact, de la data scrierii acestui articol, acesta este încă în faza Beta.

De menționat că GA4 a fost publicat pe 14 octombrie 2020. Au trecut doar câteva luni. De fapt, cei care aveau deja o proprietate Universal Analytics și care creează una nouă GA4 vor putea continua să utilizeze ambele versiuni una lângă alta, fără nicio restricție. Nu se știe cu siguranță când proprietățile Universal Analytics vor înceta să funcționeze. În orice caz, recomandarea mea ar fi să creez cât mai curând o nouă proprietate de tip GA4. În acest fel, veți avea un istoric de date mai larg. De asemenea, trebuie avut în vedere că fiecare zi care trece GA4 integrează noi funcționalități sau le îmbunătățește pe cele existente. Momentan este în continuă evoluție.

Din această cauză, desigur că pot exista mici modificări în codul descris mai jos. Deși cu siguranță vor fi minime. De exemplu, am întâlnit deja fleacuri minore, cum ar fi redenumirea câmpului „entity” (faza Alpha) ca „proprietate” (faza Beta) în cadrul clasei RunReportRequest() .
În primul rând, înainte de a construi cererea API, este nevoie de o înțelegere a elementelor disponibile. Practic, este vorba despre respectarea structurii de mai jos:

Tipuri pentru RunReportRequest din GA4 Data v1 Beta API

La prima vedere este destul de intuitiv, deși realitatea este destul de diferită. Pentru a face o cerere, este necesar să aveți întotdeauna la îndemână cel puțin următoarea documentație:

  • Google APIS dev.
  • API-ul de raportare a datelor Google Analytics (GA4).

Acest lucru se datorează faptului că numele câmpurilor diferă ușor față de documentația oficială, care reprezintă câmpurile în format JSON. Un exemplu este numele câmpului din clasa Filter. În Python ar trebui să-l descriem ca field_name. O regulă generală bună va fi întotdeauna să treceți de la un câmp de tip camel case (cum ar fi „fieldName”) la un caz de șarpe (cum ar fi „field_name”).

Înainte de a continua, să facem o pauză pentru a inițializa proiectul nostru. Ca și în marea majoritate a cazurilor când dezvoltăm scripturi în Python, trebuie să petrecem ceva timp importând bibliotecile necesare și pregătind mediul de execuție.

  • Creați un nou proiect în Python. În acest caz, a fost folosit software-ul PyCharm.
  • Activați Google Analytics Data API în Google Cloud Platform și descărcați fișierul creat pentru contul de serviciu (tip JSON) și salvați-l în folderul în care a fost creat proiectul Python. La deschiderea acestui fișier, trebuie copiată valoarea câmpului client_email, care va fi ceva de genul [email protected].
  • Adăugați această valoare client_email la proprietatea GA4 din care vor fi extrase datele. Va trebui să faceți acest lucru în secțiunea de gestionare a utilizatorilor. Cel puțin, va fi necesar să îi acordați nivelul de permisiune „Citește și analiză”.
  • Prin terminalul client (PyCharm) instalați biblioteca de date Google Analytics în directorul de proiect cu care vor fi făcute solicitările API:
    pip install google-analytics-data

De aici înainte, tot ce trebuie să faceți este să creați cererea, care, după cum puteți vedea mai jos, constă practic din trei părți (client, cerere și răspuns) și să vizualizați sau să salvați datele colectate.

Cod pentru a face o cerere simplă către GA4

Orice dimensiune, valoare, filtru, ordine de date, interval de date etc. adăugat la variabila de solicitare trebuie adăugată ca o clasă (vezi imaginea anterioară „Tipuri pentru RunReportRequest”) asociată cu o variabilă ( metrics = [Metric (..)] ). Acest lucru face mult mai ușor de înțeles structura datelor care trebuie colectate. În acest sens, pentru fiecare clasă de cel mai înalt nivel trebuie efectuat un import specific. Adică, dacă doriți să adăugați o dimensiune și o valoare pentru un anumit interval de timp, vor fi necesare cel puțin următoarele obiecte...

 din google.analytics.data_v1beta import BetaAnalyticsDataClient
din google.analytics.data_v1beta.types import RunReportRequest
din google.analytics.data_v1beta.types import DateRange
din google.analytics.data_v1beta.types import Dimension
din google.analytics.data_v1beta.types import Valoare

Desigur, este, de asemenea, posibil să adăugați valori specifice anumitor variabile ( name = 'eventCount' ). Din acest motiv, este esențial să înțelegeți și să vă scufundați în documentația descrisă anterior.

În plus, trebuie acordată o atenție deosebită variabilei os.environ [“GOOGLE_APPLICATION_CREDENTIALS”] , care va conține calea către fișierul descărcat anterior la pasul 2. Această linie de cod va evita unele probleme la gestionarea permisiunilor către Google API.

Dacă codul a fost executat corect, veți vedea un rezultat care arată astfel: {Data, Evenimente}, {20210418, 934}, {…}, ….

Date oncrawl³

Extindeți-vă analiza cu conexiuni fără întreruperi la seturi de date suplimentare. Analizați-vă strategia SEO pe baza datelor despre backlink, trafic SEO, clasamente și seturi de date personalizate din CRM, soluția de monitorizare sau orice altă sursă.
Află mai multe

Predicția datelor prin Facebook Prophet

În zilele noastre există multe opțiuni gratuite și existente pentru a efectua orice tip de predicție pe baza istoricului datelor. În acest caz specific am ales biblioteca Profetului, dar ce este de fapt?

Este o bibliotecă open-source (disponibilă pentru R și Python) creată de echipa de știință a datelor a Facebook pentru a estima comportamentul unui set de date în serie de timp pe baza unui model aditiv în care tendințele neliniare sunt ajustate la o sezonalitate zilnică, săptămânal și anual. ţinând cont de efectele zilelor de vacanţă.
Revenind la implementarea propusă (predicția traficului de căutare organică), primul lucru de făcut este să instalați următoarele biblioteci:

  • Pandas ( pip install panda ). Gestionați și analizați structurile de date.
  • Plotly ( pip install plotly ). Crearea de grafice de tot felul.
  • Profet ( conda install -c conda-forge fbprophet -y ).

Apoi, ca întotdeauna, trebuie să efectuați importurile asociate acestor biblioteci. După aceasta, singurul lucru care vă rămâne de făcut este să efectuați modelarea predicției și vizualizarea ei corespunzătoare. Pentru a face acest lucru, în cazul Profetului, trebuie doar să urmați acest proces:

  • Inițializați un nou obiect Prophet cu atributele dorite pentru a genera predicția.
  • Solicitați metoda de potrivire, transmițându-i datele extrase din GA4 ca cadru de date. Această solicitare poate dura câteva secunde în unele cazuri. Cadrul de date cu datele colectate trebuie să fie format doar din două coloane ale căror nume sunt întotdeauna aceleași: ds (câmp pentru tipul de dată) și y (metric de studiat).
  • Creați un nou cadru de date viitor setând numărul de perioade până la care ar trebui să ajungă predicția din intervalul de date selectat și frecvența cu care datele vor fi agregate (săptămânal, lunar etc.)
  • Solicitați metoda predict, care va atribui fiecărui rând al noului cadru de date viitor o valoare prezisă (yhat).
  • Solicitați metoda plotului pentru a putea vizualiza previziunile generate.
  • Solicitați metoda plot_components care vă ajută să înțelegeți vizual tendința și sezonalitatea datelor.
 m = Profet()
m.fit(df)
viitor = m.make_future_dataframe(periods=365)
prognoza = m.predict(viitor)
m.plot(prognoză)
m.plot_components(prognoză)
plt.show()

Deși predicția dorită a fost generată în doar șase pași și pare relativ simplă, trebuie luate în considerare câteva elemente care vor fi cheie pentru generarea predicției. Toate afectează pertinența predicției într-un fel sau altul. În final, este vorba despre generarea unei predicții care să se conformeze logicii, în cazul acestui articol, a traficului nostru de căutare organică. Pentru aceasta, este necesar să înțelegeți câteva setări mai avansate ale lui Prophet.

  • Zile și vacanțe speciale. Există posibilitatea de a adăuga zile speciale.
  • Outliers. Ele trebuie eliminate dacă afectează estimarea.
  • Puncte de schimbare. Detectarea schimbărilor de tendință în timpul analizat.
  • Diagnostic. Validare pe baza măsurării erorii de predicție conform studiului istoric al datelor.
  • Crește. Alegerea între liniară sau logistică.
  • Sezonalitatea. Alegeți între aditiv sau multiplicativ.

Toate acestea și multe alte opțiuni sunt perfect detaliate în această documentație a bibliotecii Prophet.

Crearea scriptului complet pentru a putea vizualiza predicția de trafic

Tot ce mai rămâne acum este să unești toate piesele puzzle-ului într-un singur scenariu. Modul obișnuit de a aborda acest tip de puzzle este de a crea o funcție pentru fiecare dintre procesele detaliate anterior, astfel încât să poată fi executate într-un mod ordonat și curat:

 def ga4(codul_proprietății, data_începutului, data_sfârșitului):
[…]

prognoza def(dim, met, per, freq):
[…]

if __name__ == "__main__":
parametru, valoare = ga4(PROPERTY_ID, START_DATE, END_DATE)
prognoză (dimensiune, valoare, PERIODS, FREQ)

Înainte de a vizualiza rezultatul final al predicției, este o idee bună să priviți traficul de căutare organic analizat.

La prima vedere, puteți vedea cum diferitele strategii și acțiuni întreprinse au avut efect de-a lungul timpului. Spre deosebire de alte canale (de exemplu, campaniile de căutare plătită), traficul generat din Căutarea organică are de obicei puține oscilații apreciabile (văi sau vârfuri). Are tendința de a crește sau de a scădea treptat în timp și este uneori influențată de evenimentele sezoniere. De obicei, fluctuațiile notabile sunt asociate cu actualizările algoritmului motorului de căutare (Google, Bing etc.).

Ieșirea scriptului poate fi văzută în imaginile următoare, unde sunt detaliați factori importanți, cum ar fi tendința, sezonalitatea, predicția sau frecvența datelor.
Dacă analizăm predicția obținută, s-ar putea concluziona în mod generic că „dacă vom continua cu aceeași strategie SEO implementată până în prezent, traficul din motoarele de căutare va continua să crească treptat”. Ne putem asigura că „eforturile noastre pentru îmbunătățirea performanței site-ului web, generarea de conținut de calitate, furnizarea de link-uri relevante etc. au meritat”.

Vizualizarea tendinței, sezonalității și predicției, tendința traficului de căutare organică

Pentru a încheia, voi împărtăși codul în întregime, astfel încât să trebuie doar să-l copiați și să-l rulați în IDE (Integrated Development Environment) din Python. Este de la sine înțeles că toate bibliotecile menționate mai sus trebuie să fi fost instalate pentru ca aceasta să funcționeze corect.

 importa panda ca pd
import fbprophet
din fbprophet import Prophet
din fbprophet.plot import add_changepoints_to_plot
import matplotlib.pyplot ca plt
import os

din google.analytics.data_v1beta import BetaAnalyticsDataClient
din google.analytics.data_v1beta.types import DateRange
din google.analytics.data_v1beta.types import Dimension
din google.analytics.data_v1beta.types import Valoare
din google.analytics.data_v1beta.types import Filter
din google.analytics.data_v1beta.types import FilterExpression
din google.analytics.data_v1beta.types import FilterExpressionList
din google.analytics.data_v1beta.types import RunReportRequest

PROPRIETATE_
START_DATE = „2020-01-01”
END_DATE = „2021-03-31”
PERIOADA = 4
FREQ = „M”

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Adăugați aici calea fișierului json cu acreditările]"

def ga4(codul_proprietății, data_începutului, data_sfârșitului):
client = BetaAnalyticsDataClient()

cerere = RunReportRequest(property='properties/' + property_id,
dimensiuni=[Dimensiune(nume='data')],
metrics=[Metric(name='eventCount')],
date_ranges=[DateRange(start_date=start_date,
end_date=end_date)],
dimension_filter=FilterExpression(
and_group=FilterExpressionList(expresii=[
FilterExpression(filter=Filter(field_name='sessionDefaultChannelGrouping',
string_filter=Filtru.StringFilter(
value='Căutare organică',
match_type=Filter.StringFilter.MatchType(
1)))),
FilterExpression(filter=Filter(field_name='eventName',
string_filter=Filtru.StringFilter(
value='session_start',
match_type=Filter.StringFilter.MatchType(
1))))
]))
)

răspuns = client.run_report(cerere)

x, y = ([] pentru i în intervalul (2))
pentru rând în răspuns.rânduri:
x.append(row.dimension_values[0].value)
y.append(row.metric_values[0].value)
print(row.dimension_values[0].value, row.metric_values[0].value)

returnează x, y

prognoza def (x, y, p, f):
print('Profet %s' % fbprophet.__versiune__)

date = {'ds': x, 'y': y}
df = pd.DataFrame(date, columns=['ds', 'y'])

m = Profet(creștere='liniară',
changepoint_prior_scale=0,5,
seasonality_mode='aditiv',
daily_seasonality=Fals,
weekly_seasonality=Adevărat,
yearly_seasonality=Adevărat,
vacanțe=Niciuna,
)
m.fit(df)
viitor = m.make_future_dataframe(periods=p, freq=f)
prognoza = m.predict(viitor)

print(prognoză[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head())

fig = m.plot(prognoză, xlabel='Data', ylabel='Vizite')
add_changepoints_to_plot(fig.gca(), m, prognoză)
m.plot_components(prognoză)
plt.show()

if __name__ == "__main__":
channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE)
prognoză(grup_canal, număr_evenimente, PERIODS, FREQ)

Sper că acest articol v-a servit drept inspirație și că vă va fi de mare folos în următoarele proiecte. Dacă doriți să continuați să învățați despre acest tip de implementare sau să aflați mai multe despre marketing digital mai tehnic, vă rugăm să mă contactați. Puteți găsi mai multe informații în profilul meu de autor de mai jos.