Skip to content

romanvelichkin/ctr_test_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

ctr_test_task

Обучение модели для предсказания CTR продуктов - по их снимкам, параметрам и описанию.

Условия

В работе используется открытый датасет: https://www.kaggle.com/datasets/paramaggarwal/fashion-product-images-dataset

Структуры данных в проекте:

ctr_test_task/ ├── fashion-dataset/ │ ├── images_train/ │ ├── images_train_target/ │ ├── images_test/ │ ├── images_test_target/ │ └── ctr_test_task.ipynb

Сами данные в репозиторий не включены.

Выборка данных

Для демонстрации я выбрал первые две тысячи изображений:

  • Тренировочный набор: 1000 изображений (номера 1163-2985)
  • Тестовый набор: 1000 изображений (номера 2986-4119)

В качестве изображений с высоким CTR я выбрал:

  • Снимки, где присутствует только футболка с коротким рукавом (без людей и других предметов одежды)
  • Снимки людей в полосатой одежде (только верх, клетка исключена)
  • Снимки с фоном

С высоким CTR получилось:

  • Тренировочный набор: 268 снимков
  • Тестовый набор: 180 снимков

Я не использовал описательные признаки в качестве условия для высокого CTR.

Исследование

Подготовка данных

В качестве табличных данных я использовал json'ы из папки "styles", поскольку там больше информации о каждом товаре. Оттуда я взял все данные из раздела "data", но без вложенных данных - они зачастую дублируют информацию из верхнего раздела.

Визуализация

После загрузки данных и изображений вывожу снимки с положительным CTR, чтобы наглядно показать, как выглядят выбранные мной признаки.

Получение эмбеддингов

Для обработки изображений и получения эмбеддингов использовалась модель EfficientNetV2B0, которая сочетает компактность и высокую точность.

Модификации модели:

  • Удалена классификационная голова
  • Добавлен слой пулинга для получения одномерных эмбеддингов вместо многомерных

Обработка данных

Были выполнены следующие этапы обработки:

  • Очистка данных от лишних признаков
  • Преобразование категориальных признаков
  • Коррекция некоторых типов данных

Обучение моделей

Были обучены три модели CatBoost с различными наборами признаков:

  • Только описательные признаки
  • Только эмбеддинги
  • Все признаки вместе

Параметры обучения

  • Основная метрика: AUC (выбрана как наиболее подходящая для несбалансированных данных - у меня соотношение ~1 к 4)
  • Разбиение данных: тренировочный/проверочный набор в соотношении 1:3
  • Параметры модели: подбирались вручную для достижения лучших показателей

Результаты моделей

На тренировочных данных:

Модель AUC
Только описательные данные 87.72%
Только эмбеддинги 98.77%
Все признаки 98.99%

На тестовых данных:

Модель Точность
Только описательные данные 78%
Только эмбеддинги 95.5%
Все признаки 96.1%

Результаты предсказуемы, учитывая что в качестве признаков высокого CTR были выбраны визуальные характеристики.

Анализ важности признаков

При анализе наиболее важных признаков модели, обученной на всех признаках, в топ-10 вошли:

  • Девять эмбеддингов
  • Один категориальный призна: имя бренда

У имени бренда важность составляет 2.9. Это небольшое значение поэтому одного лишь имени бренда недостаточно, чтобы делать какие-то предсказания. Эмбеддинги имеют большие значения, но все же недостаточно большие, чтобы можно было делать предсказания на основании каких-то отдельных эмбеддингов.

В связи с этим я предполагаю, что визуальные признаки определяются наборами эмбеддингов, а не отдельными эмбеддингами. Чтобы найти такие наборы используем модель, обученную только на эмбеддингах. Ее наиболее важные признаки максимально похожи на признаки модели, обученной на всех параметрах. Дело в том, что на некоторых из последующих этапах возможно работать только с числовыми признаками, и текстовые параметры может быть проблематично конвертировать.

Выявление групп эмбеддингов

Для выявления значимых групп эмбеддингов использовался следующий подход:

  • Анализ силы связи между признаками с помощью CatBoost
  • Построение графа связей с использованием библиотеки networkx
  • Фильтрация пар признаков (оставлены топ-5% по важности)
  • Выявление связанных групп эмбеддингов
  • Оценка групп по метрике, учитывающей плотность связей и важность признаков

В итоге я получил две группы – по 12 эмбеддингов в каждой.

После этого этапа можно провести дополнительную проверку – действительно ли найденные группы влияют на CTR, или это просто случайный шум. Для этого можно было бы сравнить полученные группы против групп из случайного набора эмбеддингов – насколько первые превосходят вторых в связи с CTR. Но это получился бы дополнительный большой блок, а решение и так уже получилось объемным, поэтому я решил пропустить этот шаг.

Визуализация найденных групп эмбеддингов

Поскольку я знаю, как выглядят признаки, определяющие CTR, то я могу оценить собственные находки.

Для анализа выявленных групп использовался метод PCA, хорошо выявляющий нелинейные связи между эмбеддингами. Для каждой группы я вывел изображения с наибольшими значениями активации и с наименьшими. Получились признаки и анти-признаки.

Группа 1

  • Сильная активация: изображения с людьми в футболках, также много изображений с серым фоном
  • Слабая активация: изображения обуви и штанов на белом фоне

Анти-паттерн четко демонстрирует признаки отсутствия высокого CTR, в то время как положительный паттерн достаточно приближен к целевым признакам.

Группа 2

  • Сильная активация: изображения с футболками и верхняя одежда без людей
  • Слабая активация: обувь, сумки, головные уборы с равным распределением серого и белого фона

Группа подтверждает, что одним из значимых признаков высокого CTR является изображения с футболками без людей.

Возможное направление дальнейшего развития

  1. Дообучение CNN-модели с использованием значения CTR для классификации
  2. Получение более точных эмбеддингов
  3. Генерация heatmaps для визуализации областей изображений, значимых для CTR

About

Test task on predicting CTR of products based on their images and descriptions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published