Data-Set
Vertieftes Wissen  |
Vertieftes Wissen
Lesedauer: 10 Min

Anomalien bei Suchanfragen – Ein Web Analyst Case

André Wehr
Erkennung von Anomalien bei Suchanfragen identifiziert Ausreißer in Leistungsmetriken. Unternehmen können so Probleme oder Chancen, z.B. ungewöhnlich hohe/niedrige CTRs, erkennen.

Wenn du lernen und selbst anwenden möchtest, wie du Anomalien in Suchanfragen erkennst, ist dieser Artikel genau das Richtige. Ich führe dich durch die Aufgabe des Erkennens von Anomalien in Suchanfragen mit maschinellem Lernen unter Verwendung von Python.

Erkennen von Anomalien bei Suchanfragen: Der grundlegende Prozess

Search Queries Anomaly Detection ist eine Technik zur Erkennung ungewöhnlicher oder unerwarteter Muster in Suchanfragedaten. Nachfolgend findest du einen Prozess, um als Web Analyst Suchanomalien zu erkennen:

  • Sammle historische Suchanfragedaten aus der zur Verfügung stehenden Datenquelle, z.B. einer Suchmaschine oder der Suchfunktion einer Website (Google Search Console, Bing Webmaster Tools).
  • Überprüfe die Datenqualität und bereinige den Datensatz, falls erforderlich
  • Führe eine erste Analyse durch, um die Verteilung der Suchanfragen, ihre Häufigkeit und alle auffälligen Muster oder Trends zu verstehen.
  • Erstelle relevante Merkmale oder Attribute aus den Suchanfragedaten, die bei der Erkennung von Anomalien helfen können.
  • Wähle einen geeigneten Algorithmus zur Erkennung von Anomalien. Zu den gängigen Methoden gehören statistische Ansätze wie die Z-Score-Analyse und Algorithmen für maschinelles Lernen wie Isolation Forests oder One-Class SVM.
  • Trainiere das ausgewählte Modell auf den vorbereiteten Daten.
  • Wende das trainierte Modell auf die Suchanfragedaten an, um Anomalien oder Ausreißer zu identifizieren.

Der Prozess beginnt also mit der Datenerhebung, also dem Sammeln eines Datensatzes auf der Grundlage von Suchanfragen. Ich habe einen exemplarischen Datensatz für diese Aufgabe. Es ist ein historischer Google Search Console Datensatz aus dem ersten Quartal 2023 unserer tractionwise Website, bevor wir diese mit einem Relaunch versehen haben. Du kannst den Datensatz hier herunterladen oder auch direkt deinen eigenen Datensatz anwenden, wenn du ein Webseitenbetreiber bist.

Hinweis: Die Vorbereitungs-Tätigkeiten (Setup Python, Bibliotheken etc.) beschreibe ich nicht gesondert in diesem Artikel. Der einfachste und schnellste Weg für den Start damit kann über die Plattform Kaggle sein. Du eröffnest dir dort ein neues Notebook, fügst das Netflix-Dataset hinzu und ab dann funktioniert die Beschreibung aus diesem Artikel. Du möchtest das Ganze lokal bei dir auf dem Mac/PC durchführen? Dann führe ein Basic Python Setup bei dir durch, z.B. mit Jupyter Notebook, PyCharm oder auch Visual Studio. 

Erkennung von Anomalien bei Suchanfragen mit Python

Beginnen wir nun mit der Aufgabe der Search Queries Anomaly Detection, indem wir die erforderlichen Python-Bibliotheken und den Datensatz importieren:

				
					import pandas as pd
from collections import Counter
import re
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"

queries_df = pd.read_csv("/DEIN-DATEIPFAD/suchanfragen-tw-q1-2023.csv")
print(queries_df.head())
				
			

Der Datensatz enthält die häufigsten Suchanfragen im 1. Quartal 2023 für die tractionwise Website. 

Explorative Datenanalyse

Werfen wir einen Blick auf Besonderheiten zu den Spalten, bevor wir fortfahren:

				
					print(queries_df.info())
				
			

Die Spalte ‚CTR‘ ist bisher als Object und nicht als eine für uns nutzbare Float-Zahl definiert. 

Konvertieren wir nun die CTR-Spalte von einer prozentualen Zeichenfolge in eine Fließkommazahl:

				
					# Cleaning CTR column
queries_df['CTR'] = queries_df['CTR'].str.rstrip('%').astype('float') / 100
				
			

Nun analysieren wir die häufigsten Keywords in jeder Suchanfrage:

				
					# Function to clean and split the queries into words
def clean_and_split(query):
    words = re.findall(r'\b[a-zA-Z]+\b', query.lower())
    return words

# Split each query into words and count the frequency of each word
word_counts = Counter()
for query in queries_df['Häufigste Suchanfragen']:
    word_counts.update(clean_and_split(query))

word_freq_df = pd.DataFrame(word_counts.most_common(20), columns=['Wort', 'Häufigkeit'])

# Plotting the word frequencies
fig = px.bar(word_freq_df, x='Wort', y='Häufigkeit', title='Top 20 meiste gemeinsame Wörter in den Suchanfragen')
fig.show()
				
			

Werfen wir nun einen Blick auf die wichtigsten Suchanfragen nach Klicks und Impressionen:

				
					# Top queries by Clicks and Impressions
top_queries_clicks_vis = queries_df.nlargest(10, 'Klicks')[['Häufigste Suchanfragen', 'Klicks']]
top_queries_impressions_vis = queries_df.nlargest(10, 'Impressionen')[['Häufigste Suchanfragen', 'Impressionen']]

# Plotting
fig_clicks = px.bar(top_queries_clicks_vis, x='Häufigste Suchanfragen', y='Klicks', title='Häufigste Suchanfragen nach Klicks')
fig_impressions = px.bar(top_queries_impressions_vis, x='Häufigste Suchanfragen', y='Impressionen', title='Häufigste Suchanfragen nach Impressionen')
fig_clicks.show()
fig_impressions.show()
				
			

Im nächsten Schritt analysieren wir die Suchanfragen mit den höchsten und niedrigsten CTRs. Angemerkt sei hier, dass es sich bei der Suchintention in unserem Datensatz mit ganz wenigen transaktionalen Suchanfragen zu meist um informationale Suchterme handelt:

				
					# Queries with highest and lowest CTR
top_ctr_vis = queries_df.nlargest(10, 'CTR')[['Häufigste Suchanfragen', 'CTR']]
bottom_ctr_vis = queries_df.nsmallest(10, 'CTR')[['Häufigste Suchanfragen', 'CTR']]

# Plotting
fig_top_ctr = px.bar(top_ctr_vis, x='Häufigste Suchanfragen', y='CTR', title='Häufigste Suchanfragen nach CTR')
fig_bottom_ctr = px.bar(bottom_ctr_vis, x='Häufigste Suchanfragen', y='CTR', title='Geringste Suchanfragen nach CTR')
fig_top_ctr.show()
fig_bottom_ctr.show()
				
			

Werfen wir nun einen Blick auf die Korrelation zwischen den verschiedenen Metriken:

				
					# Correlation matrix visualization
correlation_matrix = queries_df[['Klicks', 'Impressionen', 'CTR', 'Position']].corr()
fig_corr = px.imshow(correlation_matrix, text_auto=True, title='Korrelations Matrix')
fig_corr.show()
				
			

In dieser Korrelationsmatrix sehen wir folgende Einordnungen und können daraus Ableitungen treffen:

  • Klicks und Impressionen sind positiv korreliert, was bedeutet, dass mehr Impressionen tendenziell zu mehr Klicks führen.
  • Klicks und CTR weisen ebenfalls eine positive Korrelation auf, was bedeutet, dass mehr Klicks die Click-Through-Rate erhöhen.
  • Klicks und Position sind leicht negativ korreliert, was darauf hindeutet, dass höhere Anzeigen- oder Seitenpositionen zu weniger Klicks führen können.
  • Impressionen und CTR sind leicht negativ korreliert, was darauf hindeutet, dass höhere Impressionen tendenziell zu einer niedrigeren Click-Through-Rate führen können.
  • Impressionen und Position sind leicht positiv korreliert, was darauf hindeutet, dass Anzeigen (z.B. in Werbemaßnahmen) oder Seiten in höheren Positionen mehr Impressionen erhalten können.
  • CTR und Position weisen eine starke negative Korrelation auf, was bedeutet, dass höhere Positionen zu niedrigeren Click-Through-Raten führen.

Anzeige

tractionwise Logo

Anomalien und vergleichbare Chancen lässt du bisher unbewusst liegen?

Erkennen von Anomalien in Suchanfragen

Wir haben jetzt ein Verständnis über unseren Datensatz erlangt, Zusammenhänge klassifiziert und bereits interpretiert. 

Gehen wir nun an den Kern unserer Aufgabe: Das Erkennen von Anomalien. 

Dafür können wir verschiedene Techniken anwenden. Eine einfache und effektive Methode ist das Implementieren des Isolation-Forest-Algorithmus, der gut mit verschiedenen Datenverteilungen funktioniert und bei großen Datensätzen effizient ist:

				
					from sklearn.ensemble import IsolationForest

# select features
features = queries_df[['Klicks', 'Impressionen', 'CTR', 'Position']]

# Convert DataFrame to a Numpy array
X = features.values

# Set column names manually
column_names = ['Klicks', 'Impressionen', 'CTR', 'Position']

# Initialize Isolation Forest with column names
iso_forest = IsolationForest(n_estimators=100, contamination=0.01) # contamination is the expected proportion of outliers

# Fitting the model
iso_forest.fit(X)

# Prediction of anomalies
queries_df['anomaly'] = iso_forest.predict(X)

# Filter out the anomalies
anomalies = queries_df[queries_df['anomaly'] == -1]
				
			

Im Folgenden geben wir uns die Anomalien aus und analysieren sie, um zu verstehen, welcher Art sie sind und ob sie echte Ausreißer oder Datenfehler darstellen:

				
					print(anomalies[['Häufigste Suchanfragen', 'Klicks', 'Impressionen', 'CTR', 'Position']])
				
			

Die Anomalien in unseren Suchanfragedaten sind nicht nur Ausreißer. Sie sind Indikatoren für potenzielle Bereiche für Wachstum, Optimierung und strategische Ausrichtung.

Diese Anomalien spiegeln aufkommende Trends oder Bereiche von wachsendem Interesse wider. Wenn wir auf diese Trends reagieren, können wir die Relevanz der Website und das Engagement der Nutzer erhalten und steigern.

Als Vergleich haben wir die Anomalien auch in unserem Website- und UX-Tool Ryte herangezogen, und konnten die gefundenen Anomalien bestätigen. 

Zusammenfassung

Das Erkennen von Anomalien bei Suchanfragen bedeutet also, dass Suchanfragen identifiziert werden, die in Bezug auf ihre Leistungsmetriken messbare Ausreißer sind. Das ist für Unternehmen wertvoll, um potenzielle Probleme oder Chancen zu erkennen, wie zum Beispiel unerwartet hohe oder niedrige CTRs. Das führt also direkt zu Optimierungspotenzialen und praktischen Optimierungsmaßnahmen zu Konversionen bzw. Konversionsraten von Suchenden zu Besuchern auf der eigenen Website. 

Ich hoffe, dass dir dieser Artikel über das Erkennen von Anomalien bei Suchanfragen mit maschinellem Lernen unter Verwendung von Python gefallen hat. 

Als eine Folge-Aufgabe kannst du deine Suchanfrage-Daten aus dem Silo herausholen, mit datenschutzkonform erhobenen Nutzerdaten deiner Website (z.B. durch Erheben der Seitenaufrufe mittels eingesetztem Trackingcode) verknüpfen, und dadurch Anomalien in der User Journey entdecken, die von der Suchmaschine auf deine Website kommen.

Quellen

Inspiration zu diesem Artikel fand ich bei bei Aman Kharwal, den Kaggle Competitions sowie bei scikit-Learn. 

Der Datensatz basiert auf Google Search Console Daten von tractionwise aus dem Q1/2023. 

André Wehr
André Wehr

MD tractionwise | Strategy, Data & Conversion