Переделка моего первого хакатона

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

Забавно оглянуться на эту статью и увидеть, как я справился со своими ограниченными знаниями в области науки о данных, навыками программирования и многими другими вещами. Я пытался произвести впечатление на своих коллег библиотеками Python, такими как Pycaret для автоматического машинного обучения и Sweetviz для части EDA.

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

Вот почему я решил сосредоточиться на различных библиотеках, таких как: SHAP, streamlit, plotly и применить структуры повторения, которые поставляются с Python.

Начало работы с данными

Этот набор данных очень известен, не так, как Титаник или Ирис, но есть много записных книжек и очень интересных исследований по этим данным, и их очень легко найти на Kaggle.

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

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

Одна из самых больших проблем, связанных с любым набором данных, — это простые вопросы, такие как: Есть ли дублированные данные? Нулевые значения? сколько выбросов? Слишком много обнуленных значений?

Может быть, этих вопросов слишком много в другой части процесса обработки данных, можно начать с чего-то более простого, например: Существуют ли числовые значения? Там написаны значения? Чтобы начать отвечать на эти вопросы, мне всегда нравится запускать простой код. df.info . С них можно начинать отвечать на мои опасения. Одна из самых больших проблем с набором данных kaggle заключается в том, что большая часть доступных данных предназначена для запуска сценариев машинного обучения, и вам не нужно заботиться о многих других вещах, кроме понимания данных и запуска кодов машинного обучения.

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

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

И я подумал, почему бы не попробовать применить это в одном из моих любимых методов панд df.describe()? Конечно, есть еще несколько строк кода, чтобы получить этот результат ниже…

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

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

Все без исключения клиенты с количеством продуктов 4 ушли из банка. Если были какие-то сомнения по поводу этой заметки, я выполнял код df.groupby(NumOfProdcts)[Exited].mean()*100, просто для быстрого просмотра. Так что если бы мне пришлось разработать отчет для уровня C, эта информация, безусловно, была бы в отчете.

Хотя исследовательский анализ данных — EDA, можно было узнать, что большое количество клиентов было во Франции и Испании, но доля немецких клиентов, которые покинули его, больше беспокоит их в двух других странах. В численном выражении 16,2% французских клиентов покинули банк, а 16,7% испанских клиентов, что составляет 32,4% немецких клиентов. Другие столбцы не дают удовлетворительного результата, так как эти столбцы,

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

Машинное обучение

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

Но для достижения наилучших гиперпараметров без использования метода Scikit-learn GridSearchCV, eисчерпывающего поиска по заданным значениям параметров для оценщика, как сказано на собственной странице, я решил применить очень хорошую сторону питона петля.

Я задавался вопросом, как это сделать, и я нашел это…

С этим выходом:

И я сделал это для нескольких параметров Gradient Boost, например:

  • n_оценщиков
  • Максимальная глубина
  • min_samples_split
  • min_samples_leaf
  • max_features

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

И это оно!