Kaggle: Talking Data Mobile (TOP 5%)

В этой заметке хочу кратко описать основные действия в решении задачи на Kaggle от компании Talking Data Mobile.

По итогу соревнования  я вошел в ТОП 5%. Очень этому рад, так как это первое мое соревнование. Да и в принципе темой занимаюсь не так давно.

О чем задача

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

Теперь чуть подробнее… Компания Talking Data Mobile предоставила данные о пользователях мобильных приложениях из Китая:

tdmobile

Данные обезличены, но довольно прозрачны.

О каждом пользователе есть определенный набор информации:

  • Бренд и модель телефона
  • Активность в мобильных приложениях: чем, когда и где пользовался (приложение, тип приложения, дата активности, gps координаты)

На основе этих данных нужно было отнести пользователей к одной из 12 групп (деление производилось по полу и возрасту).

Как решал, что делал?

Первым делом я построил простую xgboost модель на основе бренда/модели телефона и количества приложений у пользователя. Ничего сложного. Но это послужило основной для дальнейших действий.

В дальнейшем я вручную разметил год выпуска основных моделей телефонов и степень их дороговизны. Такие внешние данные можно было использовать (об этом написали администраторы задачи). Эти признаки улучшили результат. Но пришлось сильно повозиться, потому что в исходных данных все названия были на китайском.

tdmobile2

На втором шаге мне захотелось посмотреть на gps координаты пользователей. Я почему-то думал, что в них ключ к самому лучшему решению, поэтому прилично с ними повозился. По координатам было понятно, что основная доля активности пользователей приходилась на территорию Китая. Также в координатах было много пропусков. Что в итоге я успел попробовать сделать с координатами:

  • Считал разброс координат для каждого человека. Было предположение, что, например, пожилые люди перемещаются на меньшие расстояния. В некоторых из моих моделях такой признак давал улучшение, но несущественное.
  • Считал количество разных координат для человека. Улучшения это не дало.
  • Определял, был ли человек за границей Китая. Гипотеза заключалась в том, что чаще путешествуют более взрослые люди. До сих пор считаю, что идея хорошая, но особых улучшений снова не заметил 🙂

Следом я начал изучать время, в которое человек проявлял активность. Вот тут уже получилось интереснее. Весьма показательными оказались ночные часы активности. Я сделал ровно 7 бинарных признаков, которые показывали, есть ли активность в период с 0 до 7 часов. Другие часы не были столь показательны. В итоге эти признаки оказались очень даже хороши.

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

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

Дальнейшие улучшения свелись к выбору подходящих моделей. Оказалось, что нейронные сети давали в этой задаче наилучший результат. Но от деревьев я не отказался. В финальном варианте я использовал ансамбль из нескольких нейросетей (keras) и xgboost.

Вот, пожалуй, и все.

Единственное, стоит добавить пару строк о 2-3 последних днях перед финалом. Один из участников обнаружил утечку в данных, которая позволила значительно улучшить результат практически на пустом месте. Это не очень-то всем понравилось, потому что соревнование превратилось из реального решения задачи в поиск “чит-кодов”. Но тут уж ничего не поделаешь. В итоге я остался в ТОП 5%. До обнаружения тоже был в ТОП4-5%.

Leave a Reply

Your email address will not be published. Required fields are marked *