Дататон Women in Data Science 2019 продолжается

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

В феврале 2018 года Kaggle провел конкурс, спонсируемый конференцией Women in Data Science, и назвал его WiDS Datathon. Миссия этого конкурса заключалась в том, чтобы помочь бедным женщинам Индии. Я узнал об этом от своего замечательного наставника Сьюзен Малаика и сразу же записался. Я знал о соревнованиях Kaggle и раньше, но у меня никогда не было времени участвовать. Для этого я решил найти время, и это решение оказалось очень полезным для моей карьеры. После многих лет разработки кода для аналитических компонентов IBM SPSS у меня наконец появилась возможность попробовать свои силы в некоторых практических приложениях машинного обучения. Я использовал свои любимые инструменты, IBM SPSS Statistics 25 и IBM SPSS Modeler, чтобы помочь мне в этой работе.

Также к команде присоединились мои коллеги Шатабди Чоудхури и Чунлинг Чжан, которые много лет работали со мной в SPSS. Они принесли с собой ценный опыт предыдущих соревнований Kaggle, опыт работы с моделями с открытым исходным кодом Python и идею складывания моделей, о которой я раньше не слышал. Наверное, стоит добавить, что для проведения таких соревнований необходимо, чтобы как минимум половина команд были женскими, что для нас не было проблемой.

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

Просмотр данных

Данные, предоставленные нам Kaggle, содержат более 17 тысяч строк и около 1500 столбцов. Существовал документ с описанием полей, но в нем было много проблем: некоторые столбцы данных не имели соответствующих описаний, некоторые описания не имели соответствующих столбцов в данных, другие описания перечисляли некоторые категории, но фактические данные имели больше значений. После того, как некоторые участники пожаловались на проблемы, была предоставлена ​​вторая, немного улучшенная версия, но в ней все еще были проблемы.

Когда я впервые посмотрел на данные, мне показалось, что они в основном числовые, поэтому я подумал: «О, хорошо, может быть, мы сможем использовать дискриминантную модель!» Затем я прочитал описания и узнал, что большинство этих числовых значений для некоторых полей от 1 до 32 или более представляют различные категории, поэтому их нельзя рассматривать как непрерывные. Только несколько полей были действительно сплошными.

Еще одно наблюдение, которое я быстро сделал, заключалось в том, что поля AA5 и AA6 имели дополнительные пропущенные значения (в каждом случае ровно одно из них имело пропущенное значение, а другое действительное значение), и все их действительные значения были разными: AA5 имел значения от 1 до 5 и AA6 имели от 6 до 8, см. Рисунок 1 ниже. Таким образом, имело смысл объединить эти две переменные в новую со всеми допустимыми значениями. Я назвал его «NewAA». Это слияние также имело смысл, исходя из их описаний. Я думаю, что это пример этапа подготовки данных, который, вероятно, не скоро будет автоматизирован, поскольку для поиска такой комбинации функций, похоже, требуется человеческое вмешательство.

Дальнейший анализ данных показал, что в ряде полей все или все отсутствующие значения были постоянными, а в некоторых также было очень мало действительных значений. Кроме того, многие поля имели почти постоянные значения. Ясно, что все эти поля нужно было удалить. Учитывая большое количество полей в наборе данных, поиск и удаление всех этих полей вручную может занять очень много времени и привести к ошибкам. К счастью, IBM SPSS Statistics включает команду VALIDATE DATA (которая внутри использует компонент Feature Selection, который мы с моим коллегой Леонидом Фейгиным реализовали в начале 2000-х). Эту опцию можно найти, перейдя в пункт меню Данные, затем Проверка, Проверить данные.

Исследование и подготовка данных

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

В рамках исследования данных мы также использовали несколько удобных процедур, таких как:

· DESCRIPTIVES вычисленные допустимые числа, средние значения, стандартные отклонения, минимумы и максимумы для всех числовых полей;

· FREQUENCIES подсчетов для каждого значения каждой переменной (результаты могут быть менее полезными для непрерывных полей с большим количеством различных значений);

· CTABLES позволяет нам получать различные отчеты по комбинациям категорий нескольких переменных.

Процедура автоматической подготовки данных (ADP) помогает при выборе предиктора, вменении пропущенных значений, слиянии контролируемых категорий категориальных предикторов со многими категориями. Я указал цель и все предикторы (кроме переменной ID и AA5, AA6, которые были объединены), см. Рисунок 3 ниже.

На вкладке «Настройки» мы можем указать критерии исключения полей на основе процентного соотношения отсутствующих или постоянных значений и установить максимальное количество категорий, разрешенное в категориальном предикторе, см. Рисунок 4 ниже.

Мы устанавливаем уровни измерения (непрерывный или категориальный) для переменных на основе их описаний. Поскольку мы не хотели, чтобы ADP изменял уровни измерения на основе количества различных значений, мы отключили эту функцию.

Меню «Улучшение качества данных» позволяет нам контролировать обработку выбросов и замену пропущенных значений, см. Рисунок 5 ниже. К сожалению, есть только один вариант замены отсутствующего значения: режим для номинального поля, медиана для порядкового и среднее значение для непрерывного. Хотелось бы, чтобы была возможность указать значение, которое будет использоваться для замены отсутствующих значений, но для этого может потребоваться пространство для каждого поля, что непросто создать. Я счел необходимым выполнить собственную замену отсутствующих значений на основе содержимого каждого поля и значений его категорий. Для некоторых категориальных полей было наиболее целесообразно создать новую категорию для отсутствующих значений, для других уже существовала категория, которая по существу описывала отсутствующее значение, поэтому системное отсутствующее значение могло быть сопоставлено с ней. Для некоторых непрерывных предикторов отсутствующее значение было логически сопоставлено с 0, в то время как для других подстановка среднего была лучшим выбором.

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

Секреты и уловки

Очень полезной функцией является контролируемое объединение категорий. Как я уже упоминал, многие категориальные поля содержат большое количество категорий. Функция слияния контролируемых категорий (см. Рисунок 6 ниже) находит группы категорий, которые коррелируют с целевым полем аналогичным образом, поэтому мы можем получить категориальный предиктор с 3–5 категориями вместо 30 или более. Такие предикторы могут привести к более мелким моделям, которые быстрее строить и оценивать, а более мелкие модели обычно лучше обобщаются для новых данных.

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

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

Построение моделей

После того, как данные были подготовлены, мы построили на них несколько моделей, всегда проверяя точность обучающих и тестовых данных. Некоторые модели, такие как нейронная сеть Наивный Байес или Радиальная базовая функция (RBF), давали очень низкую точность даже на обучающих данных, поэтому мы не рассматривали их далее. Построение нейронной сети Multi-Layer Perceptron (MLP) на всем наборе потенциальных предикторов было непрактичным из-за огромного количества требуемых весов, поэтому я построил такие модели отдельно на трех частях предикторов, а затем собрал наиболее важные предикторы. от каждой из этих моделей и построил модель на них. Это дало мне относительно точную модель. Еще одна модель, которая, казалось, работала относительно хорошо, - это дерево Чаид. К сожалению, IBM SPSS Statistics не включает параметры для создания моделей с усилением. Я использовал IBM SPSS Modeler для построения улучшенного дерева Чейда и усиленного MLP, и они работали относительно хорошо. Вначале я также пробовал некоторые менее традиционные модели, такие как общие правила ассоциации в статистике и Список решений в Modeler. Оба они обнаружили очень строгое правило, согласно которому человек, определяющий себя как домохозяйку, скорее всего, является женщиной, но другие правила имели гораздо меньшее доверие.

Чтобы сгенерировать прогнозы на основе новых данных, необходимых для отправки, я экспортировал PMML из каждой из построенных мной моделей, а затем оценил новые данные, используя их. Вы можете прочитать больше о PMML в моем недавнем блоге.

У Шатабди был недавний опыт прохождения современных курсов машинного обучения, поэтому она построила несколько моделей XGBoost и Light GBM на основе подготовленных данных, которые я ей предоставил. Мы также построили составные модели, следуя советам Чанлинга, и они получили для нас самые высокие оценки. Мы попали в 14% лидеров конкурса. Неплохо, учитывая, что мы начали поздно, а также были заняты работой и семьями. Участие в этом конкурсе дало нам лучшее понимание реальных проблем машинного обучения, важности и сложности подготовки данных и наиболее эффективных подходов к моделированию. Нам понравился процесс, и мы многому научились.

Еще не поздно!

WiDS 2019 Datathon продолжается, он стартовал 29 января и продлится до 27 февраля, команды должны быть сформированы до 21 февраля. В этом году соревнование сосредоточено на обработке изображений, поэтому нам, вероятно, нужно больше узнать о глубоком изучите и начните применять теорию к этой очень конкретной проблеме. Чанлинг покинул IBM, поэтому теперь у нас будут новые товарищи по команде. Мы все очень заняты, но не хотим упускать возможность увидеть практическое применение всей этой интересной теории. Победители будут объявлены на конференции WiDS в Стэнфордском университете 4 марта 2019 г. Я с нетерпением жду возможности рассказать о нашем опыте участия в конкурсе после его завершения!