Обучение модели для предсказания 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 является изображения с футболками без людей.
- Дообучение CNN-модели с использованием значения CTR для классификации
- Получение более точных эмбеддингов
- Генерация heatmaps для визуализации областей изображений, значимых для CTR