Я участвовал в конкурсе Santander Customer Satisfaction Challenge, работал на Kaggle 2 месяца и попал в топ-1%. Здесь я хотел бы обсудить свой подход к этой проблеме.

ЗАЯВЛЕНИЕ О ПРОБЛЕМЕ

Удовлетворенность клиентов - один из главных мотивов любой компании. Удовлетворенность клиентов - от групп поддержки до высшего уровня - ключевой критерий успеха. Недовольные клиенты не остаются в стороне. Более того, недовольные клиенты редко выражают свое недовольство перед уходом.

Santander Bank опубликовал постановку проблемы, чтобы помочь им выявлять недовольных клиентов на раннем этапе их отношений. Это позволит Santander предпринять активные шаги, чтобы повысить удовлетворенность клиентов, пока не стало слишком поздно.

НАБОР ДАННЫХ

В этом соревновании данные представляли собой несколько сотен анонимных функций, позволяющих предсказать, удовлетворен или не удовлетворен клиент своим банковским опытом. Столбец «TARGET» - это прогнозируемая переменная. Он равен 1 для неудовлетворенных клиентов и 0 для довольных клиентов.

Заглянем в набор данных:

Вы обнаружите, что количество недовольных клиентов составляет немногим менее 4%, что означает, что набор данных очень несбалансирован. Обработка несбалансированного набора данных - еще одна проблема, которую необходимо решить в этой задаче.

ПОДХОД

Очистка данных

Сделано не так много. Здесь мы конвертируем нечисловые данные в числовые, используя одно горячее кодирование. Также NaN заполняются средним значением ряда.

Алгоритм / Классификатор

Я использовал XGBoost. XGBoost - это ведущая модель для работы со стандартными табличными данными (тип данных, которые вы храните в Pandas DataFrames, в отличие от таких данных, как изображения и видео). Модели XGBoost доминируют на многих соревнованиях Kaggle.

XGBoost - это реализация алгоритма Gradient Boosted Decision Trees.

Реализация алгоритма такова, что время вычислений и ресурсы памяти очень эффективны. Целью проектирования было наилучшее использование доступных ресурсов для обучения модели. Некоторые ключевые особенности реализации алгоритма включают:

  • Редкий набор данных. Алгоритм, предназначенный для простой обработки разреженных данных.
  • Структура блока: помогает в распараллеливании алгоритма.
  • Продолжение обучения

Почему я использую XGBoost?

  1. XGBoost работает быстро.
  2. Идеально обрабатывайте разреженные данные.
  3. XGBoost доминирует над структурированными или табличными наборами данных в задачах классификации и прогнозного моделирования регрессии.

Параметры

XGBoost имеет несколько параметров, которые могут значительно изменить точность и скорость вашей модели.

n_estimators и early_stopping_rounds

n_estimators указывает, сколько раз нужно просмотреть модель. Слишком большое значение может привести к переобучению, что является точным прогнозом по обучающим данным, но неточным прогнозом по новым данным, что означает, что ваша модель не является обобщающей, а вместо этого грабит набор обучающих данных, и в этой задаче это произошло со многими участниками, например, в рейтинге соревнований и итоговый рейтинг имел огромную разницу. Вы можете поэкспериментировать со своим набором данных, чтобы найти идеальный вариант. Типичные значения находятся в диапазоне от 100 до 1000, хотя это во многом зависит от обсуждаемой ниже скорости обучения.

Аргумент early_stopping_rounds предлагает способ автоматического поиска идеального значения. Ранняя остановка приводит к тому, что модель прекращает итерацию, когда оценка валидации перестает улучшаться, даже если мы не находимся в полной мере для n_estimators. Разумно установить высокое значение для n_estimators, а затем использовать early_stopping_rounds, чтобы найти оптимальное время для остановки итерации.

скорость_учения

В общем, небольшая скорость обучения (и большое количество оценщиков) даст более точные модели XGBoost, хотя также потребуется больше времени для обучения модели, поскольку она выполняет больше итераций в цикле.

Финальный счет:

Моя окончательная оценка составила 0,840968, что принесло мне 48-е место из 5123 участвовавших команд.