Февраль 2017 был действительно хорошим месяцем, так как у меня была возможность поработать над несколькими задачами машинного обучения, организованными Analytics Vidhya, и я выиграл оба из них. Я хотел поделиться своим опытом участия в этих испытаниях.

Analytics Roadshow MiniHack

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

После быстрого изучения данных я закодировал пол, тип такси и индекс стиля жизни уверенности в числовые значения, чтобы модели дерева могли использовать данные. Трехчасовое задание не даст вам слишком много места для начала разработки функций. Поэтому я сразу перешел к созданию моделей, чтобы быстро проверить, что работает, а что нет. Линейные модели и случайные леса дали около 0,63 и 0,68 как по перекрестной проверке, так и по таблице лидеров соответственно. Однако они находились в пределах 30-го процентиля. XGBoost снова превзошел другие модели и поставил меня в пятерку лидеров в течение часа после испытания. Однако внести какие-либо улучшения в это было сложно.

Что не сработало

  • Двусторонние взаимодействия переменных, особенно между var1, var2, var3, не улучшили оценку.
  • Выбор функций не принес никакой пользы.
  • Объединение RF с XGB не дало хорошего эффекта.

Во многих отношениях я застрял на долгое время. 30 минут до финиша. Я опустился на 15 позицию среди 170 участников.

Что сработало

Поскольку ансамбль не работал, я сосредоточился на улучшении своей модели XGB. Я изменил параметр min_child_weight и вуаля! мой счет резко вырос. Черт, я все время совершенно не подходил. Поднялся на 8 мест. Осталось 15 минут, я быстро снизил свою скорость обучения, моя оценка перекрестной проверки повысилась, и она заняла 2-е место на LB! Не хватало времени, я не мог добавить другую модель. Я был уверен, что не переобучу, и был рад видеть, что моя модель была одной из самых стабильных моделей в публичном и частном секторе, и я занял 1-е место в частной таблице лидеров.

Может быть, это еще не конец, пока все не закончится.

Ссылка: https://datahack.analyticsvidhya.com/contest/minihack-machine-learning/lb

Исходный код здесь: https://github.com/binga/AnalyticsVidhya_Minihack

2 выходных позже ..

MLWare 2 - Проблема с рекомендациями

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

Поскольку нам были даны только user_id, item_id и рейтинг, в этой задаче не было возможности для разработки функций. Данные содержали около миллиона точек данных, поэтому я разделил весь набор данных на поезд и набор проверки без каких-либо циклов перекрестной проверки. Я начал с модели совместной фильтрации в Python и одной модели CF с 50 факторами, попавшими в верхние 20% списка лидеров. Увеличение или уменьшение количества скрытых факторов не способствовало увеличению оценки. Однако объединение 5 однотипных моделей CF с разными случайными начальными числами дало значительный прирост, почти до 3%, и эта модель поставила меня на 2-е место в таблице лидеров в конце первого дня (в трехдневном испытании).

Затем я построил несколько моделей LightGBM, чтобы совместить их с моделью CF. Я использовал функции пользователь-пользователь, особенности пользовательских элементов, такие как количество элементов, оцененных каждым пользователем, {средний, средний, максимальный, минимальный} рейтинг каждого пользователя, и все эти функции помогли LightGBM хорошо обобщить.

Что не сработало

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

Что сработало

  • Простые модели CF и смешанное среднее.
  • Модели GBM с функциями пользовательских элементов.

С взвешенным ансамблем модели CF и модели LightGBM моя модель была достаточно хороша для второй позиции в таблице лидеров. На третий день соревнования мы с Роханом Рао, занявшим 3-е место в таблице лидеров, решили объединиться. У Рохана было несколько моделей SVD и штабелеукладчик XGBoost в качестве его лучшей модели. Оценка этой модели была достаточно близка к моей, но когда мы объединились, корреляция между нашими предложениями составила 0,91, что было самым интересным. Сразу же мы поняли, что в среднем обе наши лучшие модели преуспеют, и когда мы представили эту модель, мы поднялись на первую позицию в таблице лидеров. В последние часы соревнований мы попробовали несколько вещей, но не смогли улучшить результат.

В конце концов, мы были рады, что сохранили достаточно лидерских позиций, чтобы оставаться №1 в частной таблице лидеров. Ссылка: https://datahack.analyticsvidhya.com/contest/mlware-2/lb

Это ознаменовало конец хорошего месяца, когда я выиграл оба испытания, в которых принимал участие. Это моя 4-я подряд победа на хакатоне. Поскольку вчера я проиграл одну на HackerEarth, моя хорошая полоса наконец подошла к концу, и я решил написать о предыдущих.

Что ж, на сегодня все, и я с нетерпением жду еще одной интересной и захватывающей работы в ближайшие месяцы.

Ваше здоровье!