Filtraggio dei bot tramite statistiche e apprendimento automatico
Le applicazioni pratiche del filtro dei bot interessano vari settori. Nell’e-commerce, migliora l’affidabilità delle metriche del tasso di conversione, i siti web di notizie possono beneficiare della riduzione delle metriche di coinvolgimento false e le reti pubblicitarie possono garantire una fatturazione equa. Per mantenere un’analisi accurata e garantire l’integrità dei dati nel traffico web o clickstream, devi indirizzare l’attività bot. Puoi garantire dati di analisi di alta qualità utilizzando Data Distiller per implementare un filtro bot efficace ed eliminare il traffico indesiderato.
Questo documento fornisce una guida completa per identificare e filtrare le attività bot utilizzando tecniche SQL e di machine learning. Presenta una progressione di approcci complementari, a partire dal filtraggio di base e dai progressi verso il rilevamento e la valutazione basati sull'apprendimento automatico. Adottate questo solido framework per migliorare il rilevamento dei bot e mantenere l'integrità dei dati.
Comprendere l’attività bot understand-bot-activity
L’attività dei bot può essere identificata rilevando picchi nelle azioni degli utenti entro intervalli di tempo specifici. Ad esempio, un numero eccessivo di clic eseguiti da un singolo utente in un breve arco di tempo potrebbe indicare un comportamento da bot. I due attributi chiave utilizzati nel filtro dei bot sono:
- ECID (ID visitatore di Experience Cloud): un ID universale e costante che identifica i visitatori.
- Timestamp: l'ora e la data in cui si verifica un'attività sul sito Web.
Gli esempi seguenti mostrano come utilizzare le tecniche di SQL e machine learning per identificare, perfezionare e prevedere le attività bot. Utilizza questi metodi per migliorare l’integrità dei dati e garantire analisi utilizzabili.
Filtraggio bot basato su SQL sql-based-bot-filtering
Questo esempio di filtro bot basato su SQL illustra come utilizzare le query SQL per definire le soglie e rilevare l’attività bot in base a regole predefinite. Questo approccio fondamentale consente di identificare le anomalie nel traffico web rimuovendo le attività insolite. Personalizzando le regole di rilevamento con soglie e intervalli definiti, puoi personalizzare efficacemente il filtro dei bot in base a specifici pattern di traffico.
Definire le soglie per l’attività bot define-thresholds
Inizia analizzando il set di dati per identificare e classificare il comportamento degli utenti. Concentrati su attributi come ECID, timestamp e webPageDetails.name (il nome della pagina web visitata) per raggruppare le azioni degli utenti e rilevare i modelli che indicano l’attività di bot.
La query SQL seguente illustra come applicare la soglia di più di 60 clic in un minuto per identificare un’attività sospetta:
SELECT *
FROM analytics_events_table
WHERE enduserids._experience.ecid NOT IN (
SELECT enduserids._experience.ecid
FROM analytics_events_table
GROUP BY Unix_timestamp(timestamp) / 60, enduserids._experience.ecid
HAVING Count(*) > 60
);
Espandi a intervalli multipli expand-to-multiple-intervals
Quindi, definisci intervalli di tempo diversi per le soglie. Tali intervalli possono includere:
- Intervallo di 1 minuto: Fino a 60 clic.
- Intervallo di 5 minuti: Fino a 300 clic.
- Intervallo di 30 minuti: fino a 1800 clic.
La query SQL seguente crea una visualizzazione denominata analytics_events_clicks_count_criteria per gestire le soglie in più intervalli. L’istruzione consolida i conteggi dei clic per intervalli di 1 minuto, 5 minuti e 30 minuti in un set di dati strutturato e contrassegna le potenziali attività bot in base a soglie predefinite.
CREATE VIEW analytics_events_clicks_count_criteria as
SELECT struct (
cast(count_1_min AS int) one_minute,
cast(count_5_mins AS int) five_minute,
cast(count_30_mins AS int) thirty_minute
) count_per_id,
id,
struct (
struct (name) webpagedetails
) web,
CASE
WHEN count.one_minute > 50 THEN 1
ELSE 0
END AS isBot
FROM (
SELECT table_count_1_min.mcid AS id,
count_1_min,
count_5_mins,
count_30_mins,
table_count_1_min.name AS name
FROM (
(SELECT mcid, Max(count_1_min) AS count_1_min, name
FROM (SELECT enduserids._experience.mcid.id AS mcid,
Count(*) AS count_1_min,
web.webPageDetails.name AS name
FROM delta_table
WHERE TIMESTAMP BETWEEN TO_TIMESTAMP('2019-09-01 00:00:00')
AND TO_TIMESTAMP('2019-09-01 23:00:00')
GROUP BY UNIX_TIMESTAMP(timestamp) / 60,
enduserids._experience.mcid.id,
web.webPageDetails.name)
GROUP BY mcid, name) AS table_count_1_min
LEFT JOIN
(SELECT mcid, Max(count_5_mins) AS count_5_mins, name
FROM (SELECT enduserids._experience.mcid.id AS mcid,
Count(*) AS count_5_mins,
web.webPageDetails.name AS name
FROM delta_table
WHERE TIMESTAMP BETWEEN TO_TIMESTAMP('2019-09-01 00:00:00')
AND TO_TIMESTAMP('2019-09-01 23:00:00')
GROUP BY UNIX_TIMESTAMP(timestamp) / 300,
enduserids._experience.mcid.id,
web.webPageDetails.name)
GROUP BY mcid, name) 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, name
FROM (SELECT enduserids._experience.mcid.id AS mcid,
Count(*) AS count_30_mins,
web.webPageDetails.name AS name
FROM delta_table
WHERE TIMESTAMP BETWEEN TO_TIMESTAMP('2019-09-01 00:00:00')
AND TO_TIMESTAMP('2019-09-01 23:00:00')
GROUP BY UNIX_TIMESTAMP(timestamp) / 1800,
enduserids._experience.mcid.id,
web.webPageDetails.name)
GROUP BY mcid, name) AS table_count_30_mins
ON table_count_1_min.mcid = table_count_30_mins.mcid
)
)
L'istruzione unisce i dati di table_count_1_min, table_count_5_mins e table_count_30_mins utilizzando il valore mcid e la pagina Web. Quindi consolida i conteggi dei clic per ogni utente su più intervalli di tempo per fornire una visualizzazione completa dell’attività dell’utente. Infine, la logica di segnalazione identifica gli utenti che superano i 50 clic in un minuto e li contrassegna come bot (isBot = 1).
Struttura del set di dati di output
Il set di dati di output è strutturato con campi sia piatti che nidificati. Questa struttura offre flessibilità nel rilevare traffico anomalo e supporta strategie di filtro avanzate che utilizzano SQL e machine learning. I campi nidificati includono count e web che incapsulano dettagli granulari sulle soglie di attività e sulle pagine Web. L’acquisizione di queste metriche consente di estrarre facilmente le funzioni per attività di formazione e previsione.
Il diagramma di schema seguente illustra la struttura del set di dati risultante ed evidenzia come i campi nidificati e flat possono essere utilizzati per un’elaborazione efficiente e il rilevamento di bot.
root
|-- count: struct (nullable = false)
| |-- one_minute: integer (nullable = true)
| |-- five_minute: integer (nullable = true)
| |-- thirty_minute: integer (nullable = true)
|-- id: string (nullable = true)
|-- web: struct (nullable = false)
| |-- webpagedetails: struct (nullable = false)
| | |-- name: string (nullable = true)
|-- isBot: integer (nullable = false)
Set di dati di output da utilizzare per l’apprendimento
Il risultato di questa espressione potrebbe essere simile alla tabella fornita di seguito. Nella tabella, la colonna isBot funge da etichetta che distingue tra attività bot e non bot.
| `id` | `count_per_id` |`isBot`| `web` |
|--------------|-----------------------------------------------------|-------|------------------------------------------------------------------------------------------------------------------------|
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":99}| 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 2.5532E+18 | {"one_minute":99,"five_minute":1,"thirty_minute":1} | 1 | {"webpagedetails":{"name":"KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg=="}} |
| 1E+18 | {"one_minute":1,"five_minute":1,"thirty_minute":1} | 0 | {"webpagedetails":{"name":"KR+CC8TQzPyMOE/bk7EGgN3lSvP8OsxeI2aLaVrbaeLn8XK3y3zok2ryVyZoiBu3"}} |
| 1.00007E+18 | {"one_minute":1,"five_minute":1,"thirty_minute":1} | 0 | {"webpagedetails":{"name":"8DN0dM4rlvJxt4oByYLKZ/wuHyq/8CvsWNyXvGYnImytXn/bjUizfRSl86vmju7MFMXxnhTBoCWLHtyVSWro9LYg0MhN8jGbswLRLXoOIyh2wduVbc9XeN8yyQElkJm3AW3zcqC7iXNVv2eBS8vwGg=="}} |
| 1.00008E+18 | {"one_minute":1,"five_minute":1,"thirty_minute":1} | 0 | {"webpagedetails":{"name":"KR+CC8TQzPyMOE/bk7EGgN3lSvP8OsxeI2aLaVrbaeLn8XK3y3zok2ryVyZoiBu3"}} |
Funzioni statistiche avanzate per il filtro dei bot statistical-functions-for-bot-filtering
Questo secondo esempio si basa sul filtro SQL di base incorporando tecniche di machine learning per perfezionare le soglie e migliorare l’accuratezza del filtro. Utilizzando funzioni statistiche avanzate, come l’analisi di regressione o gli algoritmi di clustering, questo approccio introduce funzionalità predittive utilizzabili per sviluppare modelli per la gestione di set di dati complessi con maggiore precisione.
Creare un set di dati di formazione build-a-training-dataset
In primo luogo, prepara un set di dati con strutture piane e nidificate utilizzabili dal modello di apprendimento automatico (come descritto in precedenza). Ulteriori indicazioni su come eseguire questa operazione sono disponibili nella documentazione sull'utilizzo di strutture di dati nidificate. Raggruppa i dati per marca temporale, ID utente e nome della pagina web per identificare i pattern nell’attività di bot.
Utilizzare le clausole TRANSFORM e OPTIONS per la creazione di modelli transform-and-preprocess
Per trasformare il set di dati e configurare in modo efficace il modello di apprendimento automatico, segui i passaggi seguenti. I passaggi descrivono come gestire i valori nulli, preparare le feature e definire i parametri del modello per ottenere prestazioni ottimali.
- Per riempire i valori Null nelle colonne numeriche, stringa e booleane, utilizzare rispettivamente le funzioni
numeric_imputer,string_imputereboolean_imputer. Questo passaggio garantisce che l’algoritmo di apprendimento automatico possa elaborare i dati senza errori. - Applicate le trasformazioni delle feature per preparare i dati per la modellazione. Applica
binarized,quantile_discretizerostring_indexerper categorizzare o standardizzare le colonne. Quindi, inserire l'output degli imputer (numeric_imputerestring_imputer) nei trasformatori successivi comestring_indexeroquantile_discretizerper creare funzionalità significative. - Utilizzare la funzione
vector_assemblerper combinare le colonne trasformate in una singola colonna di funzionalità. Ridimensionare quindi le funzionalità utilizzandomin_max_scalerper normalizzare i valori per migliorare le prestazioni del modello. Nota: nell'esempio SQL, l'ultima trasformazione menzionata nella clausola TRANSFORM diventa la colonna della feature utilizzata dal modello di apprendimento automatico. - Specificare il tipo di modello ed eventuali altri iperparametri nella clausola OPTIONS.
decision_tree_classifierad esempio è stato scelto qui perché si tratta di un problema di classificazione. Altri parametri comemax_depthsono stati regolati (MAX_DEPTH=4) per ottimizzare il modello per ottenere prestazioni migliori. - Combinare le funzioni ed etichettare i dati di output. Utilizzare la clausola SELECT per specificare il set di dati per l'apprendimento. Questa clausola deve includere sia le colonne delle funzionalità (
count_per_id,web,id) che la colonna dell'etichetta (isBot), che indica se è probabile che un'azione sia un bot.
L’istruzione potrebbe essere simile all’esempio seguente.
CREATE MODEL bot_filtering_model
TRANSFORM (
numeric_imputer(count_per_id.one_minute, 'mean') imputed_one_minute,
numeric_imputer(count_per_id.five_minute, 'mode') imputed_five_minute,
numeric_imputer(count_per_id.thirty_minute) imputed_thirty_minute,
string_imputer(id, 'unknown') imputed_id,
string_indexer(imputed_id) si_id,
quantile_discretizer(imputed_five_minute) buckets_five,
string_indexer(web.webpagedetails.NAME) si_name,
quantile_discretizer(imputed_thirty_minute) buckets_thirty,
vector_assembler(array(si_id, imputed_one_minute, buckets_five, si_name, buckets_thirty)) features,
min_max_scaler(features) scaled_features
)
OPTIONS (model_type='decision_tree_classifier', max_depth=4, label='isBot')
AS
SELECT count_per_id, isBot, web, id FROM analytics_events_clicks_count_criteria;
Risultato
Nei risultati visualizzati di seguito, il modello bot_filtering_model è stato creato con un ID, un nome e una versione univoci. Questo output funge da riferimento per il tracciamento e la gestione dei modelli. Utilizza questi riferimenti per identificare esattamente la configurazione e la versione necessarie per le previsioni o le valutazioni.
Created Model ID | Created Model | Version
|--------------------------------------+---------------------------+---------
2fb4b49e-d35c-44cf-af19-cc210e7dc72c | bot_filtering_model | 1
Valuta il modello addestrato evaluate-trained-model
Dopo aver creato il modello, utilizzare il comando MODEL_EVALUATE per valutarne le prestazioni. Questo passaggio garantisce che il modello soddisfi i requisiti di precisione e prestazioni per il rilevamento delle attività da bot.
Utilizzare i seguenti argomenti nel comando SQL per valutare il modello:
- Specificare il nome del modello (
bot_filtering_model) per indicare il modello da valutare. Questo nome deve corrispondere a quello creato in precedenza con il comandoCREATE MODEL. - Specificare la versione del modello (
1) nel secondo argomento per specificare la versione del modello che si desidera valutare. Se esistono più versioni, viene utilizzata la versione corretta. - Includi il set di dati di valutazione per definire il set di dati per la valutazione. Verificare che il set di dati includa le stesse colonne di funzionalità (
count_per_id,web,id) e la stessa colonna di etichetta (isBot) utilizzata durante l'apprendimento.
SELECT *
FROM model_evaluate(bot_filtering_model, 1,
SELECT count_per_id, isBot, web, id
FROM analytics_events_clicks_count_criteria);
Risultato
La risposta include metriche quali precisione, richiamo e AUC-ROC. I risultati confermano le prestazioni del modello.
auc_roc | accuracy | precision | recall
|---------+----------+-----------+--------
1.0 | 1.0 | 1.0 | 1.0
auc_rocaccuracyprecisionrecallPrevedere l’attività dei bot predict-bot-activity
Utilizzare il comando MODEL_PREDICT con il modello addestrato per identificare gli utenti (id) che sono bot. Segui i passaggi seguenti per generare previsioni per identificare l’attività bot:
- Utilizzare il nome del modello (
bot_filtering_model) nel primo argomento per specificare quale modello utilizzare per le previsioni. - Specificare la versione del modello (
1) nel secondo argomento per assicurarsi che venga utilizzata la versione corretta del modello. - Per fornire i dati corretti per le previsioni, utilizzare un'istruzione SELECT per specificare le colonne delle funzionalità (
count_per_id,web,id). Non includere la colonna etichetta (isBot) perché il modello genererà previsioni per questo campo.
SELECT *
FROM model_predict(bot_filtering_model, 1,
SELECT count_per_id, web, id FROM analytics_events_clicks_count_criteria
);
Risultato
La risposta include previsioni per ogni utente (id) insieme a dettagli sull'attività e sul risultato della classificazione del modello. Questo output consente un esame dettagliato del comportamento dell’utente e della classificazione dell’attività bot da parte del modello.
id | count.one_minute | count.five_minute | count.thirty_minute | web.webpagedetails.name | prediction
|---------------------+------------------+-------------------+---------------------+-------+----------------------------------------------------------------------------------------------------------------------------------------------------+------------
| 110 | | | 4UNDilcY5VAgu2pRmX4/gtVnj+YxDDQaJd1G8p8WX46//wYcrHy+APUN0I556E80j1gIzFmilA6DV4s0Zcs4ruiP36gLgC7bj4TH0q6LU0E= | 1.0
| 105 | | | lrSaZk04Yq+5P9+6l4BohwXik0s0/XeW9X28ZgWt1yj1QQztiAt9Qgt2WYrWcAeoGZChAJw/l8e4ojZDT5WHCjteSt35S01Vv1JzDGPAg+IyhIzMTsVyLpW8WWpXjJoMCt6Tv7fFdF73EIH+IrK5fA== | 1.0
2553215812530219515 | 99 | 1 | 1 | KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg== | 1.0
2553215812530219515 | 99 | 1 | 1 | KR+CC8TQzPyK4ord6w1PfJay1+h6snSF++xFERc4ogrEX4clJROgzkGgnSTSGWWZfNS/Ouz2K0VtkHG77vwoTg== | 1.0
La tabella seguente spiega ogni metrica:
idcount.one_minutecount.five_minutecount.thirty_minuteweb.webpagedetails.nameprediction1.0 indica che l'utente è contrassegnato come bot in base ai modelli di attività.Gestione dei modelli manage-models
Per gestire i modelli di apprendimento automatico, utilizza le parole chiave SQL elencate nella sezione seguente.
Elencare i modelli disponibili list-available-models
Gestire e rivedere in modo efficiente i modelli con il comando SHOW MODELS;. Questo comando elenca tutti i modelli di apprendimento automatico creati nell’area di lavoro corrente. L’output fornisce una panoramica dei modelli disponibili e ne include nomi, versioni e altri metadati.
SHOW MODELS;
Elimina modelli delete-models
Per liberare risorse e garantire che vengano mantenuti solo i modelli rilevanti, utilizzare il comando DROP MODEL per rimuovere i modelli obsoleti o non necessari. Questo comando elimina qualsiasi modello di apprendimento automatico specificato dopo le parole chiave. Nell'esempio seguente, bot_filtering_model viene rimosso dal sistema.
DROP MODEL bot_filtering_model;
Passaggi successivi
Dopo aver letto questo documento, hai imparato a identificare e filtrare le attività bot utilizzando SQL e le tecniche di machine learning con i metodi di Data Distiller. Quindi, applica questi concetti ai set di dati e automatizza la riqualificazione dei modelli per un miglioramento continuo.