Третье место в конкурсе занял Василий Рубцов. Василий представил решение по задаче B о прогнозировании суммарных трат всех клиентов на месяц вперёд в тех или иных категориях. Простые модели использовали линейные регрессии на основе средних (за последнюю неделю/месяц/год, средневзвешенные траты, среднее по дням недели) в качестве регрессоров. Более сложные модели строились либо как разность базовых, либо как их блендинг с некоторыми обобщениями.
предсказании пола клиента по его транзакциям
Дмитрий Афанасьев, занявший в соревновании первое место, рассказал о решении самой простой задачи о предсказании пола клиента по его транзакциям (пол был известен для 12000 человек, предлагалось вычислить вероятность оказаться мужчиной оставшимся 3000 клиентам). Основные наблюдения Дмитрия по поводу данных и контеста состояли в том, что из текстовых описаний MCC-кодов и типов транзакций тяжело что-то получить, при этом MCC-коды важнее типов транзакций. Специфика соревнования подсказывает, что обучение и корректная валидация моделей гораздо важнее, чем опора при поиске решения на результаты публичного рейтинга.
Задача выглядела достаточно классической, поэтому интуиция подсказывала, что наиболее оправданным является применение неглубоких деревьев с малым количеством признаков на агрегатах (на сырых транзакционных данных модели не работают). Базовые признаки были связаны со стандартными производными от трат (сумма, количество, min/max), параметры xgboost: eta = 0.02, depth = 3, subsample = 0.6. Ключевыми признаками также являлись “мужские” и “женские” траты в разрезах по различным MCC-категориям и типам транзакций и другие более специфические (например, объединение MCC-кодов в пары: если после покупки в магазине женской одежды идёт покупка в магазине мужской, то это снижает вероятность того, что данный клиент – женщина). Сверху также навешивался стекинг наивного байеса как признака, в котором траты в MCC-кодах использовались как простой bag of words. Более подробно про решение задачи A – в презентации (ссылка) и видео-выступлении (ссылка).
Kaggle WSDM KKBox’s: предсказание повторного прослушивания композиции — Василий Рубцов
Транзакции / предсказать объём трат в следующем месяце
Дмитрий Алтухов, занявший в контесте второе место, рассказал о своих подходах к решению задачи C, в которой требовалось предсказать объём трат в следующем месяце в каждой из 184 категорий для 3000 пользователей.
Структура решения, как обычно, состояла в применении достаточно стандартных подходов:
- Извлечение базовых признаков. Для извлечения базовых признаков используем различные меры за последние пять месяцев (объём трат, количество трат и std трат) в различных измерениях (месяц, пользователь, mcc; месяц, пользователь; месяц, mcc).
- Построение линейных моделей для каждого пользователя. У каждого пользователя выделялся уникальный характер трат (регулярность, количество), затем для каждого из них строилась сильно регуляризованная ridge-регрессия на базовых признаках;
- Построение линейных моделей для каждого MCC-кода. Поскольку MCC-кодов было не так много, как пользователей, однако, структура трат по ним достаточно сложна для описания одной общей моделью. При этом можно заметить, что траты по некоторым кодам связаны друг с другом, поэтому помимо базовых признаков в модель добавлялись траты за предыдущий месяц по каждому из MCC-кодов;
- Объединение всех признаков в XGBoost. В итоговую модель были включены как базовые признаки, так и предсказания, полученные с помощью пользовательских/MCC-регрессий.
- Лёгкий постпроцессинг решений. Приведение решений к “адекватному” виду (например, если предсказание получилось меньше нуля, то в качестве ответа выдаём ноль).
Отчёт со Sberbank Data Science Day: решения, победители, интервью / 2016
Hello world!
Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!