Даже работая специалистом по данным, я по-прежнему люблю работать над проектами. Соревнования по машинному обучению — отличный способ познакомиться с новыми методами, пакетами и инновационными способами мышления. И давайте смотреть правде в глаза, во время пандемии больше нечего делать, так почему бы не улучшить свои навыки работы с данными?!

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

Эта статья — первая из четырех, описывающих мой рабочий процесс в конкурсе Pump it Up от Driven Data. На момент написания этой статьи я занимал 4%-е место в рейтинге лидеров с результатом 0,8235 балла. Если вы ищете способы улучшить свой результат в этом соревновании или ищете рабочий процесс, который можно было бы адаптировать для другого соревнования, эти статьи как раз для вас.

Описание конкурса

Позвольте мне кратко объяснить цель этого конкурса для тех из вас, кто не знаком с ним. Основываясь на данных, опубликованных Министерством водного хозяйства Танзании и Taarifa, мы должны предсказать, какие водяные насосы работают, могут нуждаться в ремонте или вообще не работают. Хорошее понимание того, какие точки водоснабжения могут выйти из строя, может помочь в проведении ремонтных работ и обеспечить доступность безопасной и чистой воды для сельских общин Танзании. Данные для обучения состоят примерно из 60 000 записей и 39 функций, предоставляющих информацию о местоположении, управлении и методе извлечения насоса. Полное описание конкурса и данные можно найти здесь.

Отчеты о качестве данных

Мне нравится начинать свой EDA с создания отчетов о качестве данных. Эти отчеты дают вам базовую информацию о ваших данных, которую вы можете упустить, когда сразу начнете визуализировать свои данные.

Отчет о качестве данных не разочаровывает… Нулевая долгота в этой части мира? Хм, этого не может быть. Похоже, недостающие данные закодированы как нули.

Давайте посмотрим на отчет о качестве данных для категориальных признаков.

Кардинальность и мультиколлинеарность

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

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

Наконец, некоторые переменные, такие как тип извлечения, группа типов извлечения и класс типов извлечения, содержат очень похожую информацию. Мои мультиколлинеарные тревожные звоночки немедленно раздаются. Это, безусловно, то, на что мне нужно обратить внимание при выборе функций.

Изучение распределения группы статусов

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

Количество воды

Давайте посмотрим на пример. Переменная группы количества описывает наличие воды в точке водоснабжения. Большинство помп (55,9%) исправны и исправны. Около 10% насосов сухие и почти все не работают. Эта функция, безусловно, содержит информацию, которая поможет модели отличить работающие насосы от неработающих.

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

Открытая встреча

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

Спонсор

10 крупнейших спонсоров вместе профинансировали около 40% всех точек водоснабжения. Правительство Танзании является наиболее частым спонсором, но их точки водоснабжения имеют более низкую функциональность, чем те, которые финансируются другими сторонами, такими как Danida (Датское агентство международного развития), ЮНИСЕФ или World Vision. Эта функция может содержать важные шаблоны, которые может изучить модель, но мы должны рассмотреть возможность группировки редких спонсоров вместе, чтобы избежать переобучения модели на этих редких классах.

Типы извлечения

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

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

Красивые карты фолиума

Интересно, зависит ли уровень функциональности от расположения насосов? На этот вопрос легко ответить, используя пакет Python под названием Folium. Folium — отличная библиотека для визуализации геопространственных данных.

Конечно, существуют некоторые региональные различия в степени функциональности точек водоснабжения. В регионе Иринга исключительно высокий процент работающих насосов, тогда как в регионе Линди на юго-востоке Танзании большой процент нефункционирующих насосов.

Год постройки

Еще одна моя гипотеза состоит в том, что новые помпы с большей вероятностью будут функциональными, чем старые помпы. Эту гипотезу легко подтвердить, используя немного магии Seaborn.

Управление схемой

Одна функция, которую мы еще не обсуждали, — это управление схемой, в которой описывается, кто управляет точкой водоснабжения. Подавляющее большинство точек водоснабжения находится в ведении VWC, сокращенно от Village Water Committee. Небольшой процент точек водоснабжения находится в ведении частных операторов. Тем не менее, эти насосы имеют более высокую функциональность, чем насосы, работающие на VWC.

Я обнаружил, что VWC, как правило, работает с гравитационным извлечением, тогда как подводные аппараты гораздо чаще используются частными операторами. Может это еще одна подсказка?

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

Весь код, использованный в этой статье, на Github.

Далее: работа с отсутствующими данными.