Я делюсь своим решением, которое поможет вам начать свое путешествие по хакатону
Недавно я участвовал в программе MachineHack Buyer’s Time Prediction Challenge и хотел бы поделиться с вами своим подходом. Итак, давайте начнем с краткого наброска:
- Постановка задачи
- Понимание данных
- Решение: а) преобразование целевой переменной, б) удаление выбросов, в) проектирование признаков и г) моделирование
- Учиться у сверстников
Постановка проблемы:
Конкурс был направлен на разработку модели машинного обучения для учета времени, которое покупатели проводят на платформе электронной коммерции.
Оценочный показатель: среднеквадратичная логарифмическая ошибка.
Целевая переменная: «затраченное время»
Позвольте нам быстро понять данные:
Всего у нас есть 9 функций, как показано ниже:
Решение:
Теперь, когда мы знаем, с какими данными мы будем работать, давайте посмотрим на решение ниже:
- Удаление выбросов:
Сначала я начал с удаления тех 55 записей, в которых time_spent больше 99 процентилей. Это было сделано при условии, что алгоритм сможет изучить статистические зависимости для большой части данных при отсутствии таких записей:
2. Преобразование целевой переменной:
Исходное распределение целевой переменной выглядит следующим образом:
Преобразование журнала сообщений:
Я взял журнал целевой переменной, и получившееся распределение выглядит следующим образом:
3. Разработка функций:
Как мы видим в разделе «понимание данных», есть 3 особенности типа объекта, запрещающие session_id (он будет удален из входных данных модели). Это функции client_agent, device_details и date.
Вот как я над ними работал:
1) client_agent: я создал из него функции с помощью tfidf, но это не улучшило оценку, поэтому не включил его как часть отправленного мной решения.
2) device_details: я произвел горячее кодирование на device_details и в итоге создал такие функции:
3) дата: я преобразовал его в объект datetime и создал из него обширный набор функций, таких как неделя года, день месяца, месяц года, день недели. , так далее.
Я также создал такие функции, как «week_end» и «month_end» со следующей интуицией:
- Покупатель может проводить много времени на веб-сайтах, пытаясь понять, что он в конечном итоге купит, когда получит зарплату в "month_end".
- Покупатель может проводить больше времени в нерабочие дни.
4) Моделирование: я использовал регрессию лассо. Я пробовал другие алгоритмы, такие как Decision Tree, Random Forest, Light GBM, catboost и Xgboost среди других.
Обратите внимание на обратное преобразование целевой переменной во время прогнозирования и вычисления показателя_valuation_metric.
Наконец, обучение никогда не будет полным, если мы не будем смотреть на выигрышные решения и не извлекать уроки из них. Итак, я прошел по ссылке, по которой MachineHack опубликовал решения победителей, и вот мои ключевые выводы:
- Создание одной комбинированной функции связанных переменных: «куплено», «добавлено_в_ корзине» и «проверил_аут».
- Создание дополнительных функций из client_agent, таких как классификация клиентских агентов на карманные устройства и настольные компьютеры, а также извлечение версии браузера.
Надеюсь, вам понравился мой опыт участия в этом конкурсе.
Спасибо за прочтение!!!