Новый чемпион
В минувшие выходные произошло то, что мы внутри называем «Сменой режима»: наша модель определения цен на основе LightGBM была заменена моделью CatBoost. Звучит технически — так и есть. Но эффект ощутим напрямую: определение цен на страницах ваших товаров стало ещё точнее.
По этому случаю мы хотим заглянуть за кулисы и показать вам, как работает наше определение цен на базе ИИ, как мы обучаем модели и почему CatBoost теперь на первом месте.
Проблема: одно число среди многих
Типичная страница товара содержит десятки чисел: артикулы, рейтинги, стоимость доставки, количества, зачёркнутые цены, цены вариантов. Реальная цена покупки — лишь одно из них. Наша модель должна выбрать правильное из всех этих кандидатов — на любом сайте, независимо от макета, языка или системы магазина.
Как работает наш пайплайн
Определение цен проходит в несколько этапов:
Этап 1: Сбор кандидатов
Когда вы добавляете URL для отслеживания, наша система анализирует полную структуру страницы. Каждый элемент, который может содержать цену, идентифицируется. Мы используем несколько источников параллельно:
- Структурированные данные: Разметка JSON-LD и Schema.org, которую многие магазины предоставляют для поисковых систем.
- Анализ DOM: Каждый текстовый элемент проверяется на наличие ценовых паттернов — числа с символами валют, десятичными разделителями и т.д.
- Извлечение из JavaScript: Для магазинов с конфигурируемыми товарами (например, разные размеры) мы извлекаем цены вариантов напрямую из встроенного JavaScript.
Этап 2: Извлечение признаков
Для каждого кандидата на цену мы вычисляем около двух десятков признаков, которые помогают модели отличить реальную цену от шума:
- HTML-контекст: Содержит ли окружающий элемент слова вроде «цена», «предложение» или «текущий»? Выделен ли текст визуально (жирный шрифт, крупный размер)?
- Позиция на странице: Насколько глубоко вложен элемент в DOM? Где он расположен относительно других кандидатов?
- Статистический контекст: Как значение соотносится с другими числами на странице? Является ли оно выбросом или попадает в типичный ценовой диапазон?
- Сигналы конкретного магазина: Насколько хорошо модель исторически определяет цены на этом домене? Некоторые магазины сложнее других.
Этап 3: Предсказание
Все кандидаты с их признаками отправляются в наш ML-сервис. Модель оценивает каждого кандидата с вероятностью: «Насколько я уверен, что это реальная цена товара?» Кандидат с наивысшим баллом побеждает.
Обучение: как модель учится
Наша модель учится на реальных данных пользователей. Каждый раз, когда вы подтверждаете или корректируете цену, эта обратная связь возвращается как сигнал для обучения. Соответствие «это число на этой странице — правильная цена» становится размеченным примером для следующего цикла обучения.
Задача: из всех кандидатов на странице, как правило, только один является правильной ценой — соотношение примерно 1:50. Этот дисбаланс необходимо учитывать при обучении, иначе модель просто научится классифицировать всё как «не цена».
Мы регулярно обучаем несколько типов моделей параллельно и сравниваем их производительность на отложенном тестовом наборе. Тестовый набор строго разделён по страницам — модель никогда не тестируется на страницах, которые она видела при обучении.
Почему победила CatBoost
В нашем последнем сравнении моделей CatBoost превзошла предыдущую модель LightGBM (которая была в продакшене с января) по ключевым метрикам:
- Top-1 точность 80%: Для 4 из 5 страниц товаров модель определяет правильную цену с первой попытки.
- Top-3 точность 84%: При рассмотрении трёх лучших кандидатов правильная цена почти всегда среди них.
Что делает CatBoost лучше? Выделяются два фактора:
Лучшая обработка дисбаланса классов. CatBoost имеет встроенную стратегию автоматической балансировки весов классов, которая работает надёжнее на практике, чем ручная калибровка, необходимая для LightGBM.
Более умная обработка категориальных признаков. Признаки вроде типа HTML-тега или источника кандидата (JSON-LD vs. текст DOM vs. JavaScript) обрабатываются CatBoost нативно, без необходимости вручную кодировать их в числа. Это уменьшает потерю информации.
Автоматическое переобучение
Наш пайплайн не обучает модели один раз — он делает это непрерывно. Каждый день лучшая текущая модель переобучается на новых данных. Раз в неделю выполняется полное сравнение всех конфигураций моделей — именно так мы обнаружили «Смену режима» на CatBoost.
Сервис определения цен, выполняющий обнаружение в реальном времени, загружает новые модели автоматически. От обнаружения лучшей модели до её развёртывания в продакшене проходят считанные минуты.
Что это значит для вас
Коротко: лучшее определение цен, меньше ручных корректировок. Вы должны особенно заметить улучшения в магазинах со сложной структурой страниц, множественными вариантами цен или необычным оформлением.
Когда модель не уверена, вы увидите это в индикаторе уверенности при создании трекера. В таких случаях вы можете просто подтвердить цену вручную — и одновременно помочь модели научиться для следующего цикла обучения.
Попробуйте и создайте свой следующий трекер — CatBoost теперь отвечает за определение цен.
