Filtrado de bots mediante estadísticas y aprendizaje automático
Las aplicaciones prácticas del filtrado de bots abarcan varias industrias. En el comercio electrónico, mejora la fiabilidad de las métricas de tasa de conversión, los sitios web de noticias pueden beneficiarse de la mitigación de las métricas de participación falsas y las redes de publicidad pueden garantizar una facturación justa. Para mantener análisis precisos y garantizar la integridad de los datos en el flujo de navegación o en los datos del tráfico web, debe abordar la actividad de bots. Puede garantizar datos de análisis de alta calidad mediante el uso de Data Distiller para implementar un filtrado eficaz de bots y eliminar el tráfico no deseado.
Este documento proporciona una guía completa para identificar y filtrar la actividad de bots mediante SQL y técnicas de aprendizaje automático. Presenta una progresión de enfoques complementarios, empezando por el filtrado básico y avanzando hacia la detección y evaluación basada en el aprendizaje automático. Adopte este sólido marco para mejorar la detección de bots y mantener la integridad de los datos.
Comprender la actividad de bots understand-bot-activity
La actividad de bots se puede identificar detectando picos en las acciones del usuario dentro de intervalos de tiempo específicos. Por ejemplo, un exceso de clics realizados por un solo usuario en un corto periodo de tiempo podría indicar el comportamiento de bots. Los dos atributos clave utilizados en el filtrado de bots son:
- ECID (ID de visitante de Experience Cloud): Identificador universal y persistente que identifica a los visitantes.
- Marca de tiempo: Fecha y hora en que se produce una actividad en el sitio web.
Los ejemplos siguientes muestran cómo utilizar SQL y las técnicas de aprendizaje automático para identificar, refinar y predecir la actividad de bots. Utilice estos métodos para mejorar la integridad de los datos y garantizar análisis procesables.
Filtrado de bots basado en SQL sql-based-bot-filtering
Este ejemplo de filtrado de bots basado en SQL muestra cómo utilizar consultas SQL para definir umbrales y detectar actividad de bots basada en reglas predefinidas. Este enfoque fundamental ayuda a identificar anomalías en el tráfico web al eliminar una actividad inusual. Al personalizar las reglas de detección con umbrales e intervalos definidos, puede adaptar de forma eficaz el filtrado de bots para adaptarlo a sus patrones de tráfico específicos.
Definición de umbrales para la actividad de bots define-thresholds
Comience por analizar el conjunto de datos para identificar y categorizar el comportamiento del usuario. Céntrese en atributos como ECID, timestamp y webPageDetails.name (el nombre de la página web visitada) para agrupar las acciones de los usuarios y detectar patrones que indiquen actividad de bots.
La siguiente consulta SQL muestra cómo aplicar el umbral de más de 60 clics en un minuto para identificar actividad sospechosa:
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
);
Expandir a varios intervalos expand-to-multiple-intervals
A continuación, defina diferentes intervalos de tiempo para los umbrales. Estos intervalos podrían incluir:
- Intervalo de 1 minuto: hasta 60 clics.
- Intervalo de 5 minutos: hasta 300 clics.
- Intervalo de 30 minutos: hasta 1800 clics.
La siguiente consulta SQL crea una vista denominada analytics_events_clicks_count_criteria para administrar los umbrales en varios intervalos. La instrucción consolida los recuentos de clics para intervalos de 1 minuto, 5 minutos y 30 minutos en un conjunto de datos estructurado y marca la actividad de bots potencial en función de umbrales predefinidos.
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
)
)
La instrucción combina los datos de table_count_1_min, table_count_5_mins y table_count_30_mins mediante el valor mcid y la página web. A continuación, consolida los recuentos de clics de cada usuario en varios intervalos de tiempo para proporcionar una vista completa de la actividad del usuario. Finalmente, la lógica de indicación identifica a los usuarios que exceden los 50 clics en un minuto y los marca como bots (isBot = 1).
Estructura del conjunto de datos salida
El conjunto de datos de salida está estructurado con campos planos y anidados. Esta estructura permite flexibilidad al detectar tráfico anómalo y admite estrategias de filtrado avanzadas que utilizan SQL y aprendizaje automático. Los campos anidados incluyen count y web, que encapsulan detalles granulares sobre umbrales de actividad y páginas web. La captura de estas métricas significa que las funciones se pueden extraer fácilmente para tareas de aprendizaje y predicción.
El siguiente diagrama de esquema describe la estructura del conjunto de datos resultante y destaca cómo se pueden utilizar los campos anidados y planos para un procesamiento eficaz y la detección de bots.
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)
El conjunto de datos de salida que se utilizará para la formación.
El resultado de esta expresión puede ser similar a la tabla que se muestra a continuación. En la tabla, la columna isBot actúa como una etiqueta que distingue entre actividad de bots y actividad que no es de bots.
| `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"}} |
Funciones estadísticas avanzadas para filtrado de bots statistical-functions-for-bot-filtering
Este segundo ejemplo se basa en el filtrado SQL básico mediante la incorporación de técnicas de aprendizaje automático para refinar los umbrales y mejorar la precisión del filtrado. Mediante el uso de funciones estadísticas avanzadas, como el análisis de regresión o los algoritmos de agrupación, este enfoque introduce capacidades predictivas que se pueden utilizar para desarrollar modelos para gestionar conjuntos de datos complejos con mayor precisión.
Crear un conjunto de datos de formación build-a-training-dataset
En primer lugar, prepare un conjunto de datos con estructuras planas y anidadas que el modelo de aprendizaje automático pueda utilizar (como se ha descrito anteriormente). Encontrará más instrucciones sobre cómo hacerlo en la Documentación sobre trabajar con estructuras de datos anidadas. Agrupe los datos por marca de tiempo, ID de usuario y nombre de página web para identificar patrones en la actividad de bots.
Uso de cláusulas TRANSFORM y OPTIONS para la creación de modelos transform-and-preprocess
Para transformar su conjunto de datos y configurar su modelo de aprendizaje automático de forma eficaz, siga los pasos a continuación. Los pasos detallan cómo gestionar valores nulos, preparar funciones y definir los parámetros del modelo para un rendimiento óptimo.
- Para rellenar valores nulos en columnas numéricas, de cadena y booleanas, use las funciones
numeric_imputer,string_imputeryboolean_imputerrespectivamente. Este paso garantiza que el algoritmo de aprendizaje automático pueda procesar los datos sin errores. - Aplique transformaciones de funciones para preparar los datos para el modelado. Aplique
binarized,quantile_discretizerostring_indexerpara categorizar o estandarizar las columnas. A continuación, agregue el resultado de los imputadores (numeric_imputerystring_imputer) en transformadores subsiguientes comostring_indexeroquantile_discretizerpara crear características significativas. - Utilice la función
vector_assemblerpara combinar las columnas transformadas en una sola columna de característica. Luego escale las características usandomin_max_scalerpara normalizar los valores y obtener un mejor rendimiento del modelo. Nota: En el ejemplo de SQL, la última transformación mencionada dentro de la cláusula TRANSFORM se convierte en la columna de función utilizada por el modelo de aprendizaje automático. - Especifique el tipo de modelo y cualquier otro hiperparámetro en la cláusula OPTIONS. Por ejemplo,
decision_tree_classifierse eligió aquí debido a que se trata de un problema de clasificación. Otros parámetros comomax_depthse han ajustado (MAX_DEPTH=4) para ajustar el modelo y obtener un mejor rendimiento. - Combine características y etiquete los datos de salida. Utilice la cláusula SELECT para especificar el conjunto de datos para aprendizaje. Esta cláusula debe incluir las columnas de características (
count_per_id,web,id) y la columna de etiqueta (isBot), que indica si es probable que una acción sea un bot.
Su instrucción puede tener un aspecto similar al ejemplo siguiente.
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;
Resultado
En los resultados que se muestran a continuación, el modelo bot_filtering_model se ha creado correctamente con un identificador, un nombre y una versión únicos. Este resultado sirve como referencia para el seguimiento y la administración de modelos. Utilice estas referencias para identificar la configuración y la versión exactas que se requieren para las predicciones o evaluaciones.
Created Model ID | Created Model | Version
|--------------------------------------+---------------------------+---------
2fb4b49e-d35c-44cf-af19-cc210e7dc72c | bot_filtering_model | 1
Evaluar el modelo entrenado evaluate-trained-model
Después de crear el modelo, utilice el comando MODEL_EVALUATE para evaluar su rendimiento. Este paso garantiza que el modelo cumpla los requisitos de precisión y rendimiento para detectar la actividad de bots.
Utilice los siguientes argumentos en el comando SQL para evaluar el modelo:
- Especifique el nombre del modelo (
bot_filtering_model) para indicar qué modelo evaluar. Este nombre debe coincidir con el que creó anteriormente con el comandoCREATE MODEL. - Proporcione la versión del modelo (
1) en el segundo argumento para especificar la versión del modelo que desea evaluar. Si existen varias versiones, esto garantiza que se utilice la versión correcta. - Incluya el conjunto de datos de evaluación para definir el conjunto de datos para la evaluación. Asegúrese de que el conjunto de datos incluya las mismas columnas de características (
count_per_id,web,id) y la columna de etiqueta (isBot) utilizadas durante la formación.
SELECT *
FROM model_evaluate(bot_filtering_model, 1,
SELECT count_per_id, isBot, web, id
FROM analytics_events_clicks_count_criteria);
Resultado
La respuesta incluye métricas como precisión, precisión, recuperación y AUC-ROC. Los resultados confirman si el modelo tuvo un buen desempeño o no.
auc_roc | accuracy | precision | recall
|---------+----------+-----------+--------
1.0 | 1.0 | 1.0 | 1.0
auc_rocaccuracyprecisionrecallPredecir actividad de bots predict-bot-activity
Utilice el comando MODEL_PREDICT con el modelo entrenado para identificar qué usuarios (id) son bots. Siga los pasos a continuación para generar predicciones sobre la identificación de la actividad de bots:
- Utilice el nombre del modelo (
bot_filtering_model) en el primer argumento para especificar el modelo que se va a utilizar para las predicciones. - Especifique la versión del modelo (
1) en el segundo argumento para asegurarse de que se utiliza la versión correcta del modelo. - Para proporcionar los datos correctos para las predicciones, utilice una instrucción SELECT para especificar las columnas de características (
count_per_id,web,id). No incluya la columna de etiqueta (isBot) porque el modelo generará predicciones para este campo.
SELECT *
FROM model_predict(bot_filtering_model, 1,
SELECT count_per_id, web, id FROM analytics_events_clicks_count_criteria
);
Resultado
La respuesta incluye predicciones para cada usuario (id) junto con detalles sobre su actividad y el resultado de clasificación del modelo. Este resultado permite un examen detallado del comportamiento del usuario y la clasificación del modelo de la actividad de bots.
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 siguiente tabla explica cada métrica:
idcount.one_minutecount.five_minutecount.thirty_minuteweb.webpagedetails.nameprediction1.0 indica que el usuario está marcado como bot según sus patrones de actividad.Administrar los modelos manage-models
Para administrar los modelos de aprendizaje automático, utilice las palabras clave SQL que se indican en la sección siguiente.
Lista de modelos disponibles list-available-models
Administre y revise los modelos de forma eficaz con el comando SHOW MODELS;. Este comando enumera todos los modelos de aprendizaje automático que se han creado en el espacio de trabajo actual. El resultado proporciona una descripción general de los modelos disponibles e incluye sus nombres, versiones y otros metadatos.
SHOW MODELS;
Eliminar modelos delete-models
Para liberar recursos y asegurarse de que solo se mantienen los modelos relevantes, utilice el comando DROP MODEL para quitar los modelos obsoletos o innecesarios. Este comando elimina cualquier modelo de aprendizaje automático especificado después de las palabras clave. En el ejemplo siguiente, bot_filtering_model se quita del sistema.
DROP MODEL bot_filtering_model;
Próximos pasos
Al leer este documento, ha aprendido a identificar y filtrar la actividad de bots mediante SQL y técnicas de aprendizaje automático mediante métodos de Data Distiller. A continuación, aplique estos conceptos a sus conjuntos de datos y automatice el reciclaje del modelo para una mejora continua.