Дмитрий Алтухов, занявший в контесте второе место, рассказал о своих подходах к решению задачи C, в которой требовалось предсказать объём трат в следующем месяце в каждой из 184 категорий для 3000 пользователей.
Структура решения, как обычно, состояла в применении достаточно стандартных подходов:
- Извлечение базовых признаков. Для извлечения базовых признаков используем различные меры за последние пять месяцев (объём трат, количество трат и std трат) в различных измерениях (месяц, пользователь, mcc; месяц, пользователь; месяц, mcc).
- Построение линейных моделей для каждого пользователя. У каждого пользователя выделялся уникальный характер трат (регулярность, количество), затем для каждого из них строилась сильно регуляризованная ridge-регрессия на базовых признаках;
- Построение линейных моделей для каждого MCC-кода. Поскольку MCC-кодов было не так много, как пользователей, однако, структура трат по ним достаточно сложна для описания одной общей моделью. При этом можно заметить, что траты по некоторым кодам связаны друг с другом, поэтому помимо базовых признаков в модель добавлялись траты за предыдущий месяц по каждому из MCC-кодов;
- Объединение всех признаков в XGBoost. В итоговую модель были включены как базовые признаки, так и предсказания, полученные с помощью пользовательских/MCC-регрессий.
- Лёгкий постпроцессинг решений. Приведение решений к “адекватному” виду (например, если предсказание получилось меньше нуля, то в качестве ответа выдаём ноль).