TLDR

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

Контур

  1. Введение
  2. Прежде чем мы начнем
  3. Как кодировать
  4. Очистка данных
  5. Визуализация данных
  6. Разработка функций
  7. Обучение модели
  8. Заключение

Введение

Компания «Dream Housing Finance» занимается всеми жилищными кредитами. Они присутствуют во всех городских, пригородных и сельских районах. Здесь клиент сначала подает заявку на получение жилищного кредита, и компания проверяет право клиента на получение кредита. Компания хочет автоматизировать процесс получения кредита (в режиме реального времени) на основе сведений о клиенте, предоставленных при заполнении онлайн-форм заявки. Это данные «Пол», «Женаты», «Образование», «Иждивенцы», «Доход», «Сумма_кредита», «Кредитная_история» и другие. Чтобы автоматизировать процесс, они поставили задачу определить сегменты клиентов, которые имеют право на получение суммы кредита, и они могут специально ориентироваться на этих клиентов.

Источник: Vectorstock.com

Прежде чем мы начнем

Давайте ознакомимся с набором данных.

Loan.csv — состоит из атрибутов набора данных для кредита с приведенным ниже описанием.

Различные переменные, присутствующие в наборе данных:

  1. Числовые характеристики: Доход_заявителя, Доход_созаявителя, Сумма_займа, Сумма_займа_Срок и иждивенцы.
  2. Категориальные характеристики: Пол, Кредитная_История, Самозанятость, Женат и Статус Кредита.
  3. Буквенно-цифровые характеристики: Loan_Id.
  4. Особенности текста: Образование и Property_Area.

Как упоминалось выше, нам нужно предсказать нашу целевую переменную, которая называется «Loan_Status». «Loan_Status» может иметь два значения.

Y (Да): если кредит одобрен.

N (Нет): Если кредит не одобрен.

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

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

Как программировать

Компания одобрит кредит для заявителей, имеющих хорошую «Кредитную_историю» и которые, вероятно, смогут погасить кредиты. Для этого мы загрузим набор данных «Loan.csv» в фрейм данных, чтобы отобразить первые пять строк и проверить их форму, чтобы убедиться, что у нас достаточно данных для подготовки нашей модели к производству.

Есть «614» строк и «13» столбцов, что достаточно для создания готовой к производству модели. Входные атрибуты представлены в числовой и категориальной форме для анализа атрибутов и прогнозирования нашей целевой переменной «Loan_Status». Давайте разберемся со статистической информацией о числовых переменных, используя функцию «describe ()».

С помощью функции «describe()» мы видим, что в переменных «LoanAmount», «Loan_Amount_Term» и «Credit_History» отсутствуют некоторые значения, где общее количество должно быть «614», и нам придется предварительно обработать data для обработки недостающих данных.

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

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

Мы видим, что отсутствуют значения «13» в «Пол», «3» в «Женаты», «15» в «Иждивенцы», «32» в «Самозанятый», «22» в «Сумма_кредита», «14» в «Сумма_кредита_Срок» и «50» в «Кредитная_история».

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

Таким образом, пропущенные значения числовых признаков должны быть заполнены средним, а категориальные признаки — модой, то есть наиболее часто встречающимися значениями. Мы используем функцию Pandas fillna () для вменения пропущенных значений, поскольку оценка среднего дает нам центральную тенденцию без экстремальных значений, а режим не зависит от экстремальных значений; кроме того, оба обеспечивают нейтральный выход. Для получения дополнительной информации об импутации данных обратитесь к нашему руководству по оценке потерянных данных.

Давайте снова проверим «нулевые» значения, чтобы убедиться, что нет пропущенных значений, поскольку это приведет к неверным результатам.

Из приведенного выше вывода мы видим, что нулевых значений нет, и теперь мы можем выполнить визуализацию данных.

Визуализация данных

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

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

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

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

Разработка функцийЧтобы создать новый атрибут с именем Общий_доход, мы добавим два столбца Доход_созаявителя и Доход_заявителя, поскольку мы предполагаем, что Созаявитель — это человек из та же семья для например. супруга, отца и т. д. и отобразить первые пять строк Общего_дохода. Чтобы узнать больше о создании столбца с условиями, обратитесь к нашему уроку Добавление столбца с условиями.

«Total_Income» — это последний столбец, добавленный в наш фрейм данных, как указано выше.

Мы видим, что в диапазоне 0-10 000 есть экстремальные значения, а данные искажены влево, что может быть связано с тем, что некоторые люди могли подавать заявки на высокие кредиты из-за особых потребностей. Чтобы узнать больше об искаженных данных и равномерном распределении данных, пожалуйста, обратитесь к нашему уроку по графическому анализу. Итак, мы применим преобразование журнала к Total_Income, чтобы сделать его ближе к нормальному в распределенных данных.

Ниже приведен график для «Total_Income_Log».

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

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

Сопоставление значений категорий

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

Нормализация несбалансированных данных

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

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

На приведенном выше графике виден дисбаланс данных для «Loan_Status», где «68%» соответствует «1 (Да)», а «31%» соответствует «0 (Нет)». Мы выполнили «недостаточную выборку» для целевых данных, имеющих мажоритарные значения, представляющие «1 (Да)», и случайно удалили выборки, выполнив операцию «недостаточной выборки» для обучающих данных. Цель состоит в том, чтобы уменьшить количество выборок в классе большинства, чтобы они соответствовали общему количеству выборок в классе меньшинства.

Мы выбрали индексы мажоритарного класса с помощью функции «np.random.choice» и указали общее количество. выборок, необходимых для «minority_class», и сохранил их в кадре данных «random_majority_indices». Затем мы объединили индексы «minority_class» и «random_majority_indices» и сохранили результат в фрейме данных «under_sample_indices».

Для балансировки данных мы отфильтровали образцы из фрейма данных «under_sample_indices» и сохранили их в новом фрейме данных «under_sample». Данные сбалансированы, как показано ниже, нанесены на график и теперь готовы для обучения модели.

Обучение моделей

Теперь пришло время обучить модель! Для этого мы разделим данные, в которых мы храним «33%» тестовых данных и остальные данные обучения. Мы выполним «перекрестную проверку» для повышения производительности модели и проверим точность каждой модели в процентах.

Мы обучим модель с помощью «логистической регрессии» и проверим точность модели. «Логистическая регрессия» — это популярный алгоритм классификации, который используется для прогнозирования бинарного результата, т. е. «Да/Нет».

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

Из приведенной выше матрицы путаницы мы получаем, что модель правильно предсказала «24%» для «0 (Нет)» и «48%» для «1 (Да)».

Заключение

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

Вставьте пропущенные значения

Мы заполняем значения категориальных признаков «модой» и числовых признаков «средним» столбца на Mage.

Создание столбца

Мы выполняем разработку функций, создавая новый столбец, в который мы добавляем «Доход_заявителя» и «Доход_созаявителя» вместе и сохраняем их в новом столбце «Общий_доход».

Удаление столбцов

Давайте удалим ненужные столбцы, не влияющие на целевую переменную «loan_status», прежде чем обучать модель для повышения точности.

Обучение моделей

Для обучения модели на Mage мы использовали алгоритм «логистической регрессии». Проверим точность модели.

После обучения модели на Mage точность 85% при средней производительности. На прогноз результатов влияют признаки «Кредитная_история» и «Площадь_собственности» «Полугородских» регионов. Есть также некоторые другие функции, которые влияют на вес для прогнозирования результатов.

Модель переобучения

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

Сейчас при переобучении модели точность достигает 86% при средней производительности. Матрица путаницы на Mage правильно предсказывает «85» для «1 (Да)» и правильно предсказывает «20» для «0 (Нет)».

Прогнозирование результатов

Давайте проверим, насколько точно наша модель Mage предсказывает результат одобрения кредита на основе «кредитной истории».

Мы видим, что наша обученная модель на Mage правильно предсказывает целевую переменную для одобрения кредита на основе «Кредитной_истории» заявителей.

Обучение моделей от Supreme

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

После обучения модели с «высшим» сеансом достигнутая точность составила 81% при средней производительности, но точность увеличилась до 89,62% при отличной производительности. Итак, теперь мы автоматизировали процесс утверждения кредита для компании «Dream Housing Finance» и предоставили решение с низким кодом с помощью Mage «для прогнозирования статуса одобрения кредита с использованием Credit_History и Property_Area на Mage». Попробуйте свою модель на Mage.

Хотите увидеть код? Проверьте код анализ прогнозирования кредита в блокноте colab. Хотите узнать больше о машинном обучении (ML)? Посетите Академию магов