So prognostizieren Sie den Suchverkehr mit Python und GA4
Veröffentlicht: 2021-04-26In jeder Strategie, die sich auf Suchmaschinenoptimierung (SEO) konzentriert, ist die Datenanalyse unerlässlich. Es gibt immer mehr Spezialisten auf diesem Gebiet, die sich dafür entscheiden, ihre Karriere in der Analyse des organischen Suchverkehrs zu entwickeln, der an sich ein ganz anderes Verhalten und Besonderheiten aufweist als der Rest: bezahlte Suche, E-Mail, organisches soziales Netzwerk, direkt usw. In In diesem Sinne und dank einer breiten Palette von heute verfügbaren Instrumenten hat sich diese Art von Studien im Vergleich zu noch vor wenigen Jahren in einem undenkbaren Ausmaß entwickelt.
Dieser große Fortschritt ist hauptsächlich auf das Aufkommen neuer Methoden und Entwicklungen zurückzuführen, die es uns ermöglicht haben, analytische Modelle zu erstellen, ohne uns auf komplizierte mathematische Operationen verlassen zu müssen. Wir haben das Glück, bereits getestete Techniken und Algorithmen zur Verfügung zu haben, die bereit sind, mit ihnen zu arbeiten.
Im folgenden Artikel konzentrieren wir uns auf die Erstellung eines Vorhersagemodells für einen Datensatz einer Zeitreihe, bei dem der berechnete Trend an Saisonalität und frühere Periodizität angepasst wird. Genauer gesagt werden wir den organischen Suchverkehr unserer Property von Google Analytics 4 (im Folgenden GA4) vorhersagen. Es gibt viele Möglichkeiten, dies durchzuführen, aber für diesen speziellen Fall habe ich mich entschieden, die Entwicklung vollständig in Python durchzuführen.
Das Skript, das diesem Artikel zugrunde liegt, besteht aus drei klar voneinander abgegrenzten Teilen:
- Datenextraktion . So verwenden Sie die neue GA4-API Schritt für Schritt, um organischen Suchverkehr zu erfassen.
- Datenmodellierung . Verwendung von Prophet, der Open-Source-Bibliothek von Facebook, um Zeitreihenvorhersagen zu treffen.
- Datenvisualisierung . Zeigen Sie Trendänderungen und modellierte Vorhersagen an.
GA4-Datenextraktion über seine API mit Python
Das erste, was wir wissen müssen, wenn wir uns mit Google Analytics Data API (GA4) befassen, ist, dass GA4 sein Entwicklungsstatus ist. Wie von Google auf seiner Seite beschrieben, befindet es sich derzeit in einer frühen Version. Insbesondere befindet sich dieser Artikel zum Zeitpunkt der Erstellung dieses Artikels noch in der Beta-Phase.
Es sei darauf hingewiesen, dass GA4 am 14. Oktober 2020 veröffentlicht wurde. Es sind nur wenige Monate vergangen. Tatsächlich können diejenigen, die bereits eine Universal Analytics-Property hatten und eine neue GA4-Property erstellen, beide Versionen weiterhin ohne Einschränkungen nebeneinander verwenden. Es ist nicht sicher bekannt, wann die Universal Analytics-Eigenschaften nicht mehr funktionieren. Meine Empfehlung wäre in jedem Fall, so schnell wie möglich eine neue Eigenschaft vom Typ GA4 anzulegen. Auf diese Weise haben Sie eine breitere Datenhistorie. Es sollte auch berücksichtigt werden, dass GA4 jeden Tag neue Funktionalitäten integriert oder bestehende verbessert. Im Moment befindet es sich in ständiger Entwicklung.
Aus diesem Grund kann es natürlich zu kleinen Änderungen im unten beschriebenen Code kommen. Obwohl sie mit Sicherheit minimal sein werden. So sind mir beispielsweise schon Kleinigkeiten begegnet, wie die Umbenennung des Feldes „entity“ (Alpha-Phase) in „property“ (Beta-Phase) innerhalb der Klasse RunReportRequest() .
In erster Linie ist vor dem Erstellen der API-Anforderung ein Verständnis dafür erforderlich, welche Elemente verfügbar sind. Grundsätzlich geht es darum, der folgenden Struktur zu folgen:
Typen für RunReportRequest der GA4 Data v1 Beta API
Auf den ersten Blick ist es recht intuitiv, obwohl die Realität ganz anders aussieht. Um eine Anfrage zu stellen, ist es notwendig, immer mindestens die folgenden Unterlagen zur Hand zu haben:
- Google APIS-Entwickler
- Berichterstellung Google Analytics-Daten-API (GA4).
Das liegt einfach daran, dass die Feldnamen leicht von der offiziellen Dokumentation abweichen, die die Felder im JSON-Format darstellt. Ein Beispiel ist das Feld Feldname der Klasse Filter. In Python sollten wir es als field_name beschreiben. Eine gute allgemeine Regel wird immer sein, von einem Camel-Case-Typ-Feld (wie „fieldName“) zu einem Snake-Case (wie „field_name“) zu wechseln.
Bevor wir fortfahren, lassen Sie uns einen Moment innehalten, um unser Projekt zu initialisieren. Wie in den allermeisten Fällen bei der Entwicklung von Skripten in Python müssen wir einige Zeit damit verbringen, die erforderlichen Bibliotheken zu importieren und die Ausführungsumgebung vorzubereiten.
- Erstellen Sie ein neues Projekt in Python. In diesem Fall wurde die PyCharm-Software verwendet.
- Aktivieren Sie die Google Analytics Data API in der Google Cloud Platform und laden Sie die erstellte Dienstkontodatei (JSON-Typ) herunter und speichern Sie sie in dem Ordner, in dem das Python-Projekt erstellt wurde. Beim Öffnen dieser Datei muss der Wert des Felds client_email kopiert werden, der so etwas wie [email protected] sein wird.
- Fügen Sie diesen client_email-Wert der GA4-Eigenschaft hinzu, aus der die Daten extrahiert werden. Sie müssen dies im Abschnitt Benutzerverwaltung tun. Es muss mindestens die Berechtigungsstufe „Lesen & Analysieren“ gewährt werden.
- Installieren Sie über das Client-Terminal (PyCharm) die Google Analytics-Datenbibliothek im Projektverzeichnis, mit der die API-Anforderungen gestellt werden:
pip install google-analytics-data
Ab hier müssen Sie nur noch die Anfrage erstellen, die, wie Sie unten sehen können, im Wesentlichen aus drei Teilen (Client, Anfrage und Antwort) besteht, und die gesammelten Daten einsehen oder speichern.
Code für eine einfache Anfrage an GA4
Alle Dimensionen, Metriken, Filter, Datenreihenfolgen, Datumsbereiche usw., die der Anforderungsvariablen hinzugefügt werden, müssen als Klasse hinzugefügt werden (siehe vorheriges Bild „Typen für RunReportRequest“), die mit einer Variablen verknüpft ist ( metrics = [Metric (..)] ). Dies erleichtert das Verständnis der Struktur der zu erhebenden Daten erheblich. In diesem Sinne muss für jede Klasse der höchsten Stufe ein spezifischer Import durchgeführt werden. Das heißt, wenn Sie eine Dimension und einen Messwert für einen bestimmten Zeitraum hinzufügen möchten, sind mindestens die folgenden Objekte erforderlich…
aus google.analytics.data_v1beta importieren Sie BetaAnalyticsDataClient aus google.analytics.data_v1beta.types import RunReportRequest aus google.analytics.data_v1beta.types import DateRange aus google.analytics.data_v1beta.types importieren Dimension aus google.analytics.data_v1beta.types Importmesswert
Natürlich ist es auch möglich, bestimmten Variablen bestimmte Werte hinzuzufügen ( name = 'eventCount' ). Aus diesem Grund ist es unerlässlich, die beschriebene Dokumentation vorher zu verstehen und zu vertiefen.
Darüber hinaus muss der Variable os.environ [„GOOGLE_APPLICATION_CREDENTIALS“] besondere Aufmerksamkeit geschenkt werden, die den Pfad zu der zuvor in Schritt 2 heruntergeladenen Datei enthält. Diese Codezeile vermeidet einige Probleme bei der Verwaltung der Berechtigungen für die Google-API.
Wenn der Code korrekt ausgeführt wurde, sehen Sie ein Ergebnis, das so aussieht: {Date, Events}, {20210418, 934}, {…}, ….
Oncrawl-Daten³
Datenvorhersage durch Facebook Prophet
Heutzutage gibt es viele kostenlose und bestehende Möglichkeiten, jede Art von Vorhersage auf der Grundlage der Datenhistorie durchzuführen. In diesem speziellen Fall habe ich mich für die Bibliothek des Propheten entschieden, aber was ist das wirklich?
Es handelt sich um eine Open-Source-Bibliothek (verfügbar für R und Python), die vom Data Science-Team von Facebook erstellt wurde, um das Verhalten eines Zeitreihendatensatzes basierend auf einem additiven Modell zu schätzen, bei dem nichtlineare Trends an eine tägliche Saisonalität, wöchentliche und jährliche Aufnahme angepasst werden die Auswirkungen von Urlaubstagen berücksichtigen.
Um auf die vorgeschlagene Implementierung (Vorhersage des organischen Suchverkehrs) zurückzukommen, müssen Sie zunächst die folgenden Bibliotheken installieren:
- Pandas ( pip install pandas ). Datenstrukturen verwalten und analysieren.
- Plotly ( pip install plotly ). Erstellen von Grafiken aller Art.
- Prophet ( conda install -c conda-forge fbprophet -y ).
Anschließend müssen Sie wie immer die mit diesen Bibliotheken verbundenen Importe durchführen. Danach müssen Sie nur noch die Modellierung der Vorhersage und die entsprechende Visualisierung durchführen. Um dies zu tun, müssen Sie im Fall von Prophet nur diesem Prozess folgen:
- Initialisieren Sie ein neues Prophet-Objekt mit den gewünschten Attributen, um die Vorhersage zu generieren.
- Fordern Sie die fit-Methode an und übergeben Sie ihr die aus GA4 extrahierten Daten als Datenrahmen. Diese Anfrage kann in manchen Fällen mehrere Sekunden dauern. Der Datenrahmen mit den gesammelten Daten darf nur aus zwei Spalten bestehen, deren Namen immer gleich sind: ds (Datumstypfeld) und y (zu untersuchende Metrik).
- Erstellen Sie einen neuen zukünftigen Datenrahmen, indem Sie die Anzahl der Zeiträume festlegen, bis zu denen die Vorhersage aus dem ausgewählten Datumsbereich reichen soll, und die Häufigkeit, mit der die Daten aggregiert werden (wöchentlich, monatlich usw.).
- Fordern Sie die Vorhersagemethode an, die jeder Zeile des neuen zukünftigen Datenrahmens einen vorhergesagten Wert (yhat) zuweist.
- Fordern Sie die Plot-Methode an, um die generierten Vorhersagen anzeigen zu können.
- Fordern Sie die plot_components-Methode an, die hilft, den Trend und die Saisonabhängigkeit der Daten visuell zu verstehen.
m = Prophet() m.fit(df) future = m.make_future_dataframe(periods=365) Prognose = m.predict(Zukunft) m.plot (Vorhersage) m.plot_components (Prognose) plt.show()
Obwohl die gewünschte Vorhersage in nur sechs Schritten erstellt wurde und relativ einfach erscheint, müssen mehrere Elemente berücksichtigt werden, die für die Erstellung der Vorhersage entscheidend sind. Sie alle beeinflussen die Relevanz der Vorhersage auf die eine oder andere Weise. Letztendlich geht es darum, eine Vorhersage zu generieren, die der Logik, im Fall dieses Artikels, unseres organischen Suchverkehrs entspricht. Dazu ist es notwendig, einige erweiterte Einstellungen von Prophet zu verstehen.
- Besondere Tage und Feiertage. Es besteht die Möglichkeit Sondertage hinzuzufügen.
- Ausreißer. Sie müssen eliminiert werden, wenn sie die Schätzung beeinflussen.
- Wechselpunkte. Erkennung von Trendänderungen über den analysierten Zeitraum.
- Diagnose. Validierung basierend auf der Messung des Vorhersagefehlers gemäß der historischen Untersuchung der Daten.
- Zunahme. Auswahl zwischen linear oder logistisch.
- Saisonalität. Wahl zwischen additiv oder multiplikativ.
All dies und viele weitere Optionen werden in dieser Dokumentation der Prophet-Bibliothek ausführlich beschrieben.
Erstellen des vollständigen Skripts, um die Verkehrsvorhersage visualisieren zu können
Jetzt müssen nur noch alle Puzzleteile in einem einzigen Skript zusammengefügt werden. Der übliche Weg, um diese Art von Rätsel anzugehen, besteht darin, eine Funktion für jeden der zuvor detaillierten Prozesse so zu erstellen, dass sie auf geordnete und saubere Weise ausgeführt werden können:
def ga4(property_id, start_date, end_date): […] def Prognose (dim, met, per, freq): […] if __name__ == "__main__": Dimension, Messwert = ga4(PROPERTY_ID, START_DATE, END_DATE) Prognose (Dimension, Messwert, PERIODEN, HÄUFIGKEIT)
Bevor Sie das endgültige Ergebnis der Vorhersage visualisieren, ist es eine gute Idee, sich den analysierten organischen Suchverkehr anzusehen.
Auf den ersten Blick sehen Sie, wie sich die unterschiedlichen Strategien und Maßnahmen über die Zeit ausgewirkt haben. Im Gegensatz zu anderen Kanälen (z. B. bezahlte Suchkampagnen) weist der von der organischen Suche generierte Traffic normalerweise nur wenige nennenswerte Schwankungen (Täler oder Spitzen) auf. Es neigt dazu, im Laufe der Zeit allmählich zu wachsen oder zu sinken, und wird manchmal durch saisonale Ereignisse beeinflusst. Üblicherweise sind auffällige Schwankungen mit Aktualisierungen des Suchmaschinenalgorithmus (Google, Bing etc.) verbunden.
Die Ausgabe des Skripts ist in den folgenden Bildern zu sehen, in denen wichtige Faktoren wie Trend, Saisonalität, Vorhersage oder Datenhäufigkeit detailliert aufgeführt sind.
Wenn wir die erhaltene Vorhersage analysieren, könnte allgemein der Schluss gezogen werden, dass „wenn wir mit der gleichen SEO-Strategie fortfahren, die bisher implementiert wurde, der Traffic von Suchmaschinen schrittweise weiter wachsen wird“. Wir können sicherstellen, dass sich „unsere Bemühungen zur Verbesserung der Leistung der Website, zur Generierung hochwertiger Inhalte, zur Bereitstellung relevanter Links usw. gelohnt haben“.
Visualisierung von Trend, Saisonalität und Vorhersage, Trend des organischen Suchverkehrs
Abschließend werde ich den Code in seiner Gesamtheit teilen, sodass Sie ihn nur kopieren und in Ihrer IDE (Integrated Development Environment) von Python ausführen müssen. Es versteht sich von selbst, dass alle oben genannten Bibliotheken installiert sein müssen, damit dies ordnungsgemäß funktioniert.
pandas als pd importieren fbprophet importieren von fbprophet import Prophet aus fbprophet.plot import add_changepoints_to_plot importiere matplotlib.pyplot als plt Betriebssystem importieren aus google.analytics.data_v1beta importieren Sie BetaAnalyticsDataClient aus google.analytics.data_v1beta.types import DateRange aus google.analytics.data_v1beta.types importieren Dimension aus google.analytics.data_v1beta.types Importmesswert aus google.analytics.data_v1beta.types Importfilter aus google.analytics.data_v1beta.types importieren FilterExpression aus google.analytics.data_v1beta.types import FilterExpressionList aus google.analytics.data_v1beta.types import RunReportRequest EIGENTUM_ START_DATE = '2020-01-01' END_DATE = '2021-03-31' PERIODEN = 4 FREQ = 'M' os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "[Hier den Pfad der JSON-Datei mit den Anmeldeinformationen hinzufügen]" def ga4(property_id, start_date, end_date): client = BetaAnalyticsDataClient() Anfrage = RunReportRequest(property='properties/' + property_id, dimensions=[Dimension(name='date')], metrics=[Metrik(name='eventCount')], date_ranges=[DateRange(start_date=start_date, end_date=end_date)], dimension_filter=Filterausdruck( and_group=FilterExpressionList(Ausdrücke=[ FilterExpression(filter=Filter(field_name='sessionDefaultChannelGrouping', string_filter=Filter.StringFilter( value='Organische Suche', match_type=Filter.StringFilter.MatchType( 1)))), FilterExpression(filter=Filter(field_name='eventName', string_filter=Filter.StringFilter( value='session_start', match_type=Filter.StringFilter.MatchType( 1)))) ])) ) Antwort = client.run_report (Anfrage) x, y = ([] für i im Bereich (2)) für Zeile in response.rows: 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) gib x, y zurück def Prognose(x, y, p, f): print('Prophet %s' % fbprophet.__version__) data = {'ds': x, 'y': y} df = pd.DataFrame(Daten, Spalten=['ds', 'y']) m = Prophet(Wachstum='linear', changepoint_prior_scale=0.5, seasonity_mode='additiv', daily_seasonality=Falsch, week_seasonality=Wahr, yearly_seasonality=Wahr, Feiertage=Keine, ) m.fit(df) future = m.make_future_dataframe(periods=p, freq=f) Prognose = m.predict(Zukunft) print(Prognose[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].head()) fig = m.plot(Prognose, xlabel='Datum', ylabel='Besuche') add_changepoints_to_plot(fig.gca(), m, Prognose) m.plot_components (Prognose) plt.show() if __name__ == "__main__": channel_group, event_count = ga4(PROPERTY_ID, START_DATE, END_DATE) Prognose (channel_group, event_count, PERIODS, FREQ)
Ich hoffe, dieser Artikel hat Ihnen als Inspiration gedient und wird Ihnen bei Ihren nächsten Projekten von großem Nutzen sein. Wenn Sie sich weiter über diese Art der Implementierung oder mehr über eher technisches digitales Marketing informieren möchten, wenden Sie sich bitte an mich. Weitere Informationen finden Sie in meinem Autorenprofil unten.