Краткое резюме:
Аналитика Видхья провела ML-хакатон на основе данных, предоставленных командой American Express. Этот конкурс проходил с сб 28 сентября 2019 года по вс 6 октября 2019 года. Я потратил некоторое время на решение этой задачи.
Постановка проблемы:
Нам необходимо определить или спрогнозировать вероятность погашения купона для каждой комбинации идентификатора покупателя и идентификатора купона, указанной в тестовом наборе данных. Данные, доступные в этой задаче, содержат следующую информацию, включая детали выборки кампаний и купонов, использованных в предыдущих кампаниях:
- Демографические данные пользователя
- Детали кампании и купона
- Информация о продукте
- Предыдущие транзакции
Основываясь на данных о предыдущей транзакции и эффективности из последних 18 кампаний, спрогнозируйте вероятность следующих 10 кампаний в тестовом наборе для каждой комбинации купона и клиента, будет ли покупатель использовать купон или нет? Описание набора данных и их отображение показано ниже.
Подход:
Данные поезда содержат около 78 тыс. Строк, а тестовые данные - около 50 тыс. Строк. Изучили данные, просмотрев описательную статистику каждой переменной в наборе поездов. redemption_status - целевая переменная. Распределение этой целевой переменной сильно несбалансировано.
Разработка функций:
Я попытался решить эту проблему, выведя метрики из следующих 4 частей.
а) Покупка совершена до даты начала кампании.
б) Покупка, совершенная до и после периода кампании.
c) Покупка произведена только по заявленному купону, то есть coupon_discount ‹0
г) Покупка, совершенная между датами начала и окончания кампании.
Показатели или поля, полученные мной из приведенных выше частей, агрегируются на уровне customer_id и coupon_id
i) количество приобретенных товаров
ii) Количество приобретенных товаров
iii) Общая продажная цена
iv) получена coupon_discount
v) Общее время, затраченное на покупку в днях после даты начала кампании.
vi) Количество предметов на уровне категории
vii) Топ-20 закупленных товаров брендами учитываются на каждом уровне кода бренда.
viii) # товар приобретен на уровне типа бренда.
ix) # товаров, приобретенных на объединенном уровне brand_type и категории
x) Целевое среднее кодирование в каждом столбце категории, то есть campaign_id, coupon_id, customer_id, age_range, family_size и доход_bracket.
xi) Частотные характеристики всех переменных категорий, упомянутых выше
Сборка модели:
Я использовал LightGBM с метрикой «auc» в качестве оптимизатора и перекрестной проверки 5 раз.
Это указанные выше параметры, которые лучше всего сработали для меня, чтобы достичь результата в общедоступной таблице лидеров как 0,9246039336 без какой-либо настройки гиперпараметров. Самые важные функции показаны ниже.
Другими опробованными и протестированными моделями являются XGboost и AutoML, но LightGBM дал мне лучший результат.
Проблемы:
Честно говоря, мне действительно было очень трудно улучшить свой результат выше упомянутого выше, и у меня закончились идеи, как получить лучшие функции. Я не думаю, что для такого рода задач действительно важны алгоритмы, которые могут повысить оценку. Единственный способ улучшить результат - это разработка функций.
Чему можно научиться у других конкурентов или путем самообучения
- Какова лучшая стратегия CV для проблемы классового дисбаланса
- Как получить лучшие характеристики от бизнес-задачи, которая в основном имеет переменные категории
- Как обрабатывать данные (например, данные о розничной торговле), которые отражают покупательское поведение клиентов по каждому товару (более 1000 уровней категорий), бренду и уровню категории.
- Каковы лучшие методы кодирования переменных категории
- Как подойти к проблеме, когда мы теряем все собранные идеи? (Это момент, когда вы чувствуете разочарование и беспомощность)
Дайте мне знать, что вы думаете, и любые комментарии и предложения с вашей стороны приветствуются. Рейтинг топперов составляет 0,945+. Я действительно с нетерпением жду возможности увидеть их подход и улучшить себя.
Весь мой код можно найти на моем github-адресе [здесь].
Результаты в таблице лидеров:
Всего зарегистрированных участников: ~ 6000
Всего подали заявки зарегистрированные участники: ~ 1000
Общедоступный: 0,92460 (Рейтинг-56)
Частный: 0,90856 (Рейтинг-67)