Комплексный проект машинного обучения, вдохновленный конкурсом Data Mining the Water Table.

Оглавление

Введение
Цель
Инструменты/фреймворки
Исследовательский анализ данных
Разработка функций
Создание обучающих и Тестирование сплитов
Определение метрики оценки
Создание базовых моделей
Подход к моделированию данных
Подход к настройке гиперпараметров
Модель XGBoost
Модель CatBoost
Модель LightGBM
Выбор лучшей модели
Интерпретация модели
Развертывание модели
Ограничения
Заключение
Литература

Введение

Примечание. Этот проект вдохновлен конкурсом Pump it Up: Data Mining the Water Table, организованным DrivenData.

В настоящее время Танзания страдает от серьезного водного кризиса: 28 процентов населения не имеют доступа к безопасной воде. Один из возможных способов борьбы с этим кризисом — обеспечить, чтобы водяные насосы, установленные по всей стране, оставались в рабочем состоянии.

Используя данные, полученные Taarifa, которая объединяет данные Министерства водного хозяйства Танзании, можно использовать машинное обучение для обнаружения водяных насосов, которые не работают или нуждаются в ремонте.

Цель

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

Инструменты/фреймворки

Этот проект требует использования различных инструментов и фреймворков.

Все сценарии, облегчающие анализ данных и моделирование, написаны на Python.

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

Окончательная модель включена в веб-приложение, созданное с помощью библиотеки Streamlit. Затем это приложение развертывается с помощью Heroku.

Для более полного понимания зависимостей проекта посетите репозиторий GitHub.

Исследовательский анализ данных

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

Предоставленные данные включают 59400 точек данных и 41 функцию, включая целевую метку.

41 особенность:

Примечание. Для получения информации о каждой из этих функций посетите Описание задачи для конкурса.

Функция status_group будет служить целевой меткой для проекта. Он показывает, работает ли водяной насос, не работает или работает, но нуждается в ремонте.

Как показано в выводе кода, данные преимущественно состоят из категориальных признаков.

Кроме того, многие функции сообщают аналогичную информацию. Например, объекты latitude, longitude, region и region_code показывают расположение водяных насосов. Включение всех этих функций было бы ненужным и может даже снизить производительность моделей.

Кроме того, некоторые функции в наборе данных имеют пропущенные значения.

Наконец, распределение значений в целевой метке указывает на то, что данные несбалансированы, а класс «функционал требует ремонта» недопредставлен.

Разработка функций

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

  1. Удалить ненужные столбцы

Функции id, recorded_by и wpt_name удаляются, поскольку они не влияют на целевую метку.

2. Удалите лишние столбцы

Функции, которые содержат избыточную информацию, также должны быть удалены. Эти функции включают: subvillage,latitude, longitude, region_code, district_code, lga, ward, scheme_name, extraction_type, extraction_type_group, payment, water_quality, quantity, source, source_type, waterpoint_type и management.

3. Создайте функцию «возраст»

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

2. Удалить слабые предикторы

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

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

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

Из протестированных числовых и категориальных признаков будет удалена только функция num_private из-за ее высокого p-значения.

После процесса выбора признаков набор данных сократился с 41 до 18 признаков.

Создание тренировочных и тестовых сплитов

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

Определение метрики оценки

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

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

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

Стоит отметить, что ложные предсказания крайне нежелательны.

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

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

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

Таким образом, оценочная метрика, которая будет использоваться для проекта, представляет собой метрику f2-оценки, которая учитывает как точность, так и полноту, но придает больший вес полноте.

Создание базовых моделей

Базовый уровень поможет контекстуализировать результаты модели машинного обучения. В этом проекте в качестве эталона будут использоваться две базовые модели: фиктивный классификатор и логистическая регрессия.

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

Логистическая регрессия с гиперпараметрами по умолчанию обучается после кодирования и вменения категориальных признаков и отсутствующих данных соответственно.

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

Как видно из выходных данных, логистическая регрессия дает гораздо более высокий показатель f2, чем фиктивный классификатор, что говорит о том, что в данных достаточно сигнала.

Подход к моделированию данных

Процедуру построения моделей можно представить в виде следующей блок-схемы:

Для проекта будут рассмотрены три модели: классификатор Catboost, классификатор LGBM и классификатор XGBoost. Все эти классификаторы включают в себя ансамблевое обучение, которое хорошо подходит для несбалансированных данных. Кроме того, они обеспечивают поддержку категориальных признаков и/или отсутствующих данных.

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

После тестирования каждой модели будет выбрана лучшая модель (т. е. модель с наивысшим показателем f-2). Эта модель будет использоваться в веб-приложении.

Подход к настройке гиперпараметров

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

Настройка гиперпараметров будет выполняться с использованием библиотеки Optuna.

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

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

Модель XGBoost

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

Сначала проводится исследование optuna, чтобы найти оптимальные гиперпараметры для классификатора XGBoost.

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

Модель CatBoost

С помощью процедуры, используемой для классификатора XGBoost, классификатор CatBoost обучается и оценивается по набору тестов (полную кодовую базу см. в репозитории GitHub).

Модель LightGBM

С помощью процедуры, используемой для классификатора XGBoost, классификатор LightGBM обучается и оценивается по набору тестов (полную кодовую базу см. в репозитории GitHub).

Выбор лучшей модели

Характеристики всех моделей представлены в следующей таблице.

Поскольку классификатор XGBoost дает наивысший балл f-2 (≈0,80), он считается лучшей моделью.

Интерпретация модели

Производительность модели XGBoost можно контекстуализировать с помощью отчета о классификации и матрицы путаницы, которая сравнивает прогнозируемые значения с фактическими значениями.

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

Развертывание модели

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

Веб-приложение создано с помощью библиотеки Streamlit в файле с именем app.py. Базовый код для этого файла показан ниже:

При запуске с помощью команды streamlit run app.py приложение должно выглядеть следующим образом:

Приложение содержит боковую панель, на которой пользователи могут вводить параметры интересующего водяного насоса. После нажатия кнопки «Предсказать состояние водяного насоса» модель XGBoost предскажет, является ли водяной насос с выбранными функциями функциональным, нефункциональным или функциональным, но нуждается в ремонте. Результаты выводятся в приложении.

Это веб-приложение также было размещено с использованием Heroku, поэтому вы можете получить к нему доступ самостоятельно, нажав на ссылку ниже:



Ограничения

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

1. Нет существующего решения в качестве эталона

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

2. Ограниченное знание ограничений

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

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

3. Недостаточное знание предметной области

В этом наборе данных было много уникальных значений категориальных признаков. Однако DrivenData не объяснила, что представляют собой эти значения. В результате в проекте отсутствовали научно обоснованные стратегии обработки категориальных признаков.

Заключение

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

Для доступа ко всей кодовой базе посетите репозиторий GitHub:



Спасибо за чтение!

Рекомендации

Булл П., Славитт И. и Липштейн Г. (24 июня 2016 г.). Использование силы толпы для расширения возможностей науки о данных в социальном секторе. arXiv.org. https://arxiv.org/abs/1606.07781