Skip to content

About

Reproducible cookie-level bot detection with chronological validation and an executed notebook

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Определение автоматизированного трафика

Воспроизводимое решение задачи классификации куки по событиям внутри суточного окна. Для каждой куки вычисляется score от 0 до 1. Основная метрика — максимальный Precision среди порогов с Recall ≥ 70%.

Результат на платформе: 0,80750 — по скриншоту проверки, предоставленному пользователем. Меток скрытой выборки в репозитории нет.

Решение, получившее этот балл, зафиксировано тегом score-0.80750. Основной solution.ipynb и команда train.py воспроизводят именно его.

Кандидат для следующей попытки

artifacts/candidate.csv объединяет общий ансамбль (85%) и отдельные модели для веба и мобильного трафика (15%). Его оценка на скрытом тесте ещё неизвестна.

Временной период Общий ансамбль Кандидат
11–13 апреля 0,6731 0,6965
14–16 апреля 0,7709 0,7740
17–19 апреля 0,7943 0,7972
Среднее 0,7461 0,7559

Повторить обучение кандидата из исходных данных:

python train_candidate.py --data data --output candidate.csv
python verify_submission.py --submission candidate.csv --test data/test.csv --manifest artifacts/candidate_manifest.json

Файл candidate_description.txt содержит короткое описание для сдачи. Дополнительные проверки и сравнения находятся в experiments. Улучшение на локальных отрезках не гарантирует прироста на скрытом тесте или достижения 1,0.

Скачать и посмотреть решение

Быстрый запуск

Проверенное окружение: Python 3.13.13, CPU, версии библиотек зафиксированы. Из исходного архива задания bot_detection_challenge.zip поместите train.csv, test.csv, events.csv.gz в папку data/.

python -m pip install -r requirements.txt
python train.py --data data --output submission.csv
python verify_submission.py --submission submission.csv --test data/test.csv

Код заново строит признаки и обучает модели на размеченных данных. Файл artifacts/submission.csv используется проверкой только как эталон контрольной суммы. Он не читается при обучении или предсказании. Исходный набор данных не публикуется; его контрольные суммы записаны в artifacts/manifest.json.

Проверено полным запуском ноутбука: все 6 вычислительных ячеек выполнены сверху вниз; получено побайтовое совпадение с отправленным CSV. SHA-256: 45c6660d9e40560903bdf7bd0d649c1e294a2c9ab80cfc86401ce34874ac8a61.

Запуск ноутбука

python -m pip install -r requirements-notebook.txt
python execute_notebook.py

Ноутбук исполняется сверху вниз, сохраняет результаты ячеек и формирует submission.csv. Его можно также открыть в Jupyter или VS Code. По умолчанию обучение на всей выборке запускается заново, а таблица временной валидации читается из сохранённых результатов. Для повторения самой валидации задайте RUN_VALIDATION=True в ноутбуке либо выполните:

python train.py --data data --validate --output validation.csv

Подход

События ограничены интервалом [window_start_ts, window_end_ts). Из них вычисляются частоты и доли действий, статистики пауз, активность по времени, разнообразие объявлений, категорий, локаций и поисковых запросов, платформа и User-Agent. Дополнительно используются возраст куки, статистики координат, перемещений и повторов курсора, наличие координат для разных действий.

Пропущенные категории заменяются на missing, числовые агрегаты — на 0. Платформы приводятся к единому написанию. События сортируются по cookie_id, event_ts, eid; идентификатор куки не является признаком. В одном из компонентов полностью одинаковые исходные строки удаляются до расчёта признаков. Остальные компоненты сохраняют повторные записи и могут учитывать их частоту.

Ансамбль состоит из четырёх CatBoost с random_seed=42, depth=6, learning_rate=0.045, l2_leaf_reg=5:

Набор признаков Деревьев в прогнозе Вес
Основные 700 0,125
Основные и перемещения курсора 500 0,375
После удаления точных дубликатов 500 0,250
Расширенные признаки курсора и устройства 500 0,250

Для точного повторения исходного обучения каждый компонент обучается на 700 деревьях; прогноз ограничивается указанным числом. CPU-потоки зафиксированы в bot_detection/model.py. Используются локальные открытые библиотеки NumPy, pandas, scikit-learn и CatBoost. Во время обучения и предсказания внешние API не вызываются.

Валидация и эксперименты

Модели обучаются только на днях, предшествующих проверочному периоду. Baseline — Random Forest по количеству событий и уникальных объявлений.

Период проверки Куки Боты Baseline P@R≥0,70 Ансамбль P@R≥0,70 Average precision
11–13 апреля 2556 199 0,0964 0,6731 0,7562
14–16 апреля 2367 195 0,1050 0,7709 0,8029
17–19 апреля 1951 160 0,1062 0,7943 0,7883

Среднее основной метрики — 0,7461. Точные значения: artifacts/validation.csv.

Проверялись разные настройки CatBoost, LightGBM, ExtraTrees, HistGradientBoosting, отбор признаков, признаки последовательности и времени, удаление дубликатов и усреднение моделей. Дополнительные признаки не всегда улучшали все периоды, поэтому выбор учитывал несколько временных отрезков. Эти отрезки использовались при выборе решения и не являются независимым финальным тестом. Небольшие различия локальной метрики не гарантируют прироста на платформе. Результат 1,0 не достигнут.

Структура

solution.ipynb                # объяснение, обучение и проверка совпадения CSV
train.py                     # запуск без Jupyter
bot_detection/features.py    # агрегирование только внутри окна
bot_detection/model.py       # обучение, ансамбль и временная валидация
bot_detection/metric.py      # метрика с группировкой равных score
verify_submission.py         # формат, идентификаторы, диапазон и SHA-256
tests/test_correctness.py    # границы окна и обработка одинаковых score
artifacts/                   # отправленный CSV, метрики и контрольные суммы
data/                        # сюда поместить исходные данные задания

Проверки важных условий:

python -m unittest discover -s tests -v

Модель обучается только на train.target. Ручная разметка теста и правила под конкретные cookie_id не используются. Новые эксперименты хранятся отдельно; отправленный результат сохраняется в истории Git.

About

Reproducible cookie-level bot detection with chronological validation and an executed notebook

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages