Bot-Filterung in Query Service mit maschinellem Lernen

Bot-Aktivitäten können sich auf Analytics-Metriken auswirken und die Datenintegrität beeinträchtigen. Adobe Experience Platform Query Service kann verwendet werden, um Ihre Datenqualität durch Bot-Filterung zu erhalten.

Mit der Bot-Filterung können Sie die Qualität Ihrer Daten gewährleisten, indem Sie die Kontamination von Daten, die aus nicht menschlichen Interaktionen mit Ihrer Website resultieren, weitgehend entfernen. Dieser Prozess wird durch die Kombination von SQL-Abfragen und maschinellem Lernen erreicht.

Bot-Aktivitäten können auf verschiedene Weise identifiziert werden. Der in diesem Dokument verfolgte Ansatz konzentriert sich auf Aktivitätspitzen, in diesem Fall auf die Anzahl der Aktionen, die ein Benutzer in einem bestimmten Zeitraum durchgeführt hat. Zunächst legt eine SQL-Abfrage willkürlich einen Schwellenwert für die Anzahl der Aktionen fest, die über einen bestimmten Zeitraum durchgeführt wurden, um als Bot-Aktivität zu gelten. Diese Schwelle wird dann dynamisch mithilfe eines maschinellen Lernmodells verfeinert, um die Genauigkeit dieser Verhältnisse zu verbessern.

Dieses Dokument bietet einen Überblick und detaillierte Beispiele für die SQL-Bot-Filterabfragen und die maschinellen Lernmodelle, die für die Einrichtung des Prozesses in Ihrer Umgebung erforderlich sind.

Erste Schritte

Im Rahmen dieses Prozesses müssen Sie ein Modell für maschinelles Lernen trainieren. In diesem Dokument wird davon ausgegangen, dass Sie über Kenntnisse in einer oder mehreren Umgebungen für maschinelles Lernen verfügen.

In diesem Beispiel wird Jupyter Notebook als Entwicklungsumgebung verwendet. Obwohl viele Optionen verfügbar sind, wird Jupyter Notebook empfohlen, da es sich um eine Open-Source-Webanwendung mit niedrigen Rechenanforderungen handelt. Sie kann von der offiziellen Site heruntergeladen werden.

Verwenden Sie Query Service , um einen Schwellenwert für Bot-Aktivitäten zu definieren.

Die beiden Attribute, die zum Extrahieren von Daten für die Bot-Erkennung verwendet werden, sind:

  • Experience Cloud-Besucher-ID (ECID, auch als MCID bezeichnet): Dies bietet eine universelle, beständige ID zum Identifizieren Ihrer Besucher über alle Adobe-Lösungen hinweg.
  • Zeitstempel: Stellt die Uhrzeit und das Datum im UTC-Format bereit, zu der eine Aktivität auf der Website erfolgte.
NOTE
Die Verwendung von mcid ist weiterhin in Namespace-Verweisen auf die Experience Cloud-Besucher-ID zu finden, wie im Beispiel unten dargestellt.

Die folgende SQL-Anweisung bietet ein erstes Beispiel zur Identifizierung von Bot-Aktivitäten. In der Anweisung wird davon ausgegangen, dass der Benutzer ein Bot ist, wenn ein Besucher innerhalb einer Minute 50 Klicks durchführt.

SELECT *
FROM   <YOUR_TABLE_NAME>
WHERE  enduserids._experience.mcid NOT IN (SELECT enduserids._experience.mcid
                                           FROM   <YOUR_TABLE_NAME>
                                           GROUP  BY Unix_timestamp(timestamp) /
                                                     60,
                                                     enduserids._experience.mcid
                                           HAVING Count(*) > 50);

Der Ausdruck filtert die ECIDs (mcid) aller Besucher, die den Schwellenwert erreichen, aber keine Traffic-Spitzen aus anderen Intervallen ansprechen.

Verbessern der Bot-Erkennung mit maschinellem Lernen

Die ursprüngliche SQL-Anweisung kann verfeinert werden, um zu einer Abfrage zur Funktionsextraktion für maschinelles Lernen zu werden. Die verbesserte Abfrage sollte mehr Funktionen für eine Vielzahl von Intervallen für das Training von Modellen für maschinelles Lernen mit hoher Genauigkeit liefern.

Die Beispielanweisung wird von einer Minute mit bis zu 60 Klicks erweitert und umfasst nun fünf- und 30-minütige Zeiträume mit Klickzahlen von 300 bzw. 1800.

Die Beispielanweisung erfasst die maximale Anzahl von Klicks für jede ECID (mcid) über die verschiedenen Zeiträume. Die erste Anweisung wurde um einen Zeitraum von einer Minute (60 Sekunden), 5 Minuten (300 Sekunden) und einer Stunde (d. h. 1800 Sekunden) erweitert.

SELECT table_count_1_min.mcid AS id,
       count_1_min,
       count_5_mins,
       count_30_mins
FROM   ( ( (SELECT mcid,
                 Max(count_1_min) AS count_1_min
          FROM   (SELECT enduserids._experience.mcid.id AS mcid,
                         Count(*)                       AS count_1_min
                  FROM
       <YOUR_TABLE_NAME>
                  GROUP  BY Unix_timestamp(timestamp) / 60,
                            enduserids._experience.mcid.id)
          GROUP BY mcid) AS table_count_1_min
           LEFT JOIN (SELECT mcid,
                             Max(count_5_mins) AS count_5_mins
                      FROM   (SELECT enduserids._experience.mcid.id AS mcid,
                                     Count(*)                       AS
                                     count_5_mins
                              FROM
           <YOUR_TABLE_NAME>
                              GROUP  BY Unix_timestamp(timestamp) / 300,
                                        enduserids._experience.mcid.id)
                      GROUP  BY mcid) AS table_count_5_mins
                  ON table_count_1_min.mcid = table_count_5_mins.mcid )
         LEFT JOIN (SELECT mcid,
                           Max(count_30_mins) AS count_30_mins
                    FROM   (SELECT enduserids._experience.mcid.id AS mcid,
                                   Count(*)                       AS
                                   count_30_mins
                            FROM
         <YOUR_TABLE_NAME>
                            GROUP  BY Unix_timestamp(timestamp) / 1800,
                                      enduserids._experience.mcid.id)
                    GROUP  BY mcid) AS table_count_30_mins
                ON table_count_1_min.mcid = table_count_30_mins.mcid )

Das Ergebnis dieses Ausdrucks ähnelt möglicherweise der unten angegebenen Tabelle.

id
count_1_min
count_5_min
count_30_min
4833075303848917832
1
1
1
1469109497068938520
1
1
1
5045682519445554093
1
1
1
7148203816406620066
3
3
3
1013065429311352386
1
1
1
3077475871984695013
7
7
7
4151486040344674930
2
2
2
6563366098591762751
6
6
6
2403566105776993627
4
4
4
5710530640819698543
1
1
1
3675089655839425960
1
1
1
9091930660723241307
1
1
1

Identifizieren neuer Spitzenschwellen mithilfe des maschinellen Lernens

Exportieren Sie dann den resultierenden Abfragedatensatz in das CSV-Format und importieren Sie ihn in Jupyter Notebook. Aus dieser Umgebung können Sie ein Modell für maschinelles Lernen mithilfe aktueller Bibliotheken für maschinelles Lernen trainieren. Weitere Informationen zum Exportieren von Daten aus Query Service im CSV-Format🔗 finden Sie im Handbuch zur Fehlerbehebung .

Die anfänglich festgelegten Ad-hoc-Spitzenschwellen sind nicht datengesteuert und daher ungenau. Modelle für maschinelles Lernen können verwendet werden, um Parameter als Schwellenwerte zu trainieren. Infolgedessen können Sie die Abfrageeffizienz steigern, indem Sie die Anzahl der GROUP BY Keywords reduzieren, indem Sie nicht benötigte Funktionen entfernen.

In diesem Beispiel wird die Maschinenlernbibliothek Scikit-Learn verwendet, die standardmäßig mit Jupyter Notebook installiert ist. Die Python-Bibliothek "pandas"wird ebenfalls zur Verwendung hier importiert. Die folgenden Befehle werden in Jupyter Notebook eingegeben.

import pandas as ps

df = pd_read.csv('data/bot.csv')
df = df[df['count_1-min'] > 1]
df['is_bot'] = 0
df.loc[df['count_1_min'] > 50,'is_bot'] = 1
df

Als Nächstes müssen Sie einen Entscheidungsbaum-Klassifizierer für den Datensatz trainieren und die Logik beachten, die sich aus dem Modell ergibt.

Die Bibliothek "Matplotlib"wird verwendet, um die Entscheidungsbaum-Classification im folgenden Beispiel zu visualisieren.

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
from matplotlib import pyplot as plt

X = df.iloc[:,:[1,3]]
y = df.iloc[:,-1]

clf = DecisionTreeClassifier(max_leaf_nodes=2, random_state=0)
clf.fit(X,y)

print("Model Accuracy: {:.5f}".format(clf.scre(X,y)))

tree.plot_tree(clf,feature_names=X.columns)
plt.show()

Die von Jupyter Notebook für dieses Beispiel zurückgegebenen Werte lauten wie folgt.

Model Accuracy: 0.99935

Statistische Ausgabe aus dem Modell für maschinelles Lernen Jupyter Notebook.

Die Ergebnisse für das im obigen Beispiel dargestellte Modell sind zu mehr als 99 % korrekt.

Da der Entscheidungsbaum-Klassifizierer mithilfe von Daten aus Query Service in einem regulären Cadence mithilfe geplanter Abfragen trainiert werden kann, können Sie die Datenintegrität sicherstellen, indem Sie Bot-Aktivitäten mit hoher Genauigkeit filtern. Mithilfe der vom maschinellen Lernmodell abgeleiteten Parameter können die ursprünglichen Abfragen mit den hochpräzisen Parametern aktualisiert werden, die vom Modell erstellt wurden.

Das Beispielmodell, das mit einer hohen Genauigkeit bestimmt wird, dass alle Besucher mit mehr als 130 Interaktionen in fünf Minuten Bots sind. Diese Informationen können jetzt verwendet werden, um Ihre SQL-Abfragen zum Filtern von Bots zu verfeinern.

Nächste Schritte

Durch Lesen dieses Dokuments können Sie besser verstehen, wie Sie mit Query Service und maschinellem Lernen Bot-Aktivitäten bestimmen und filtern können.

Andere Dokumente, die die Vorteile von Query Service für die strategischen geschäftlichen Einblicke Ihres Unternehmens demonstrieren, sind das Beispiel für den abgebrochenen Durchsuchen-Anwendungsfall.

recommendation-more-help
ccf2b369-4031-483f-af63-a93b5ae5e3fb