В этой статье обсуждается подход к прогнозированию статуса утверждения ссуды банком с использованием базовых методов элементарного анализа данных и машинного обучения. Эта задача размещена в Analytics Vidhya в разделе хакатонов в качестве практического задания. Ссылка на задание - https://datahack.analyticsvidhya.com/contest/practice-problem-loan-prediction-iii/

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

Шаг 1. Загрузка данных и визуализация

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

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

Шаг 2. Визуализация и анализ переменных - понимание данных

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

  1. Loan_ID - идентификатор ссуды для заявителя, подающего заявку на ссуду.
  2. Пол - Пол заявителя.
  3. Женат - семейное положение заявителя.
  4. Иждивенцы - количество иждивенцев кандидата.
  5. Образование - статус образования кандидата (высшее / невысокое).
  6. Self_Employed - Кандидат работает на себя или нет
  7. доход кандидата - доход кандидата
  8. CoapplicantIncome - Доход со-заявителя
  9. LoanAmount - Сумма кредита в тысячах
  10. Loan_Amount_Term - Срок кредита в месяцах
  11. Credit_History - предыдущая кредитная история кандидата соответствует требованиям.
  12. Property_Area - Городские, полугородские или сельские районы
  13. Loan_Status - Статус утверждения ссуды (целевая переменная)

Loan_Status, которая представляет собой двоичную переменную, которая принимает значения Да (Y) / Нет (N), служит целевой переменной, которую необходимо спрогнозировать с использованием тестовых данных.

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

Выводы, сделанные на основе проведенного выше анализа:

  1. Большинство соискателей ссуды имеют хорошую кредитную историю в банке.
  2. Из рисунка ясно видно, что доход кандидата обычно не распределяется с большим количеством аномалий и выбросов.
  3. Однако показатель «Сумма ссуды» показывает, что плотность суммы ссуды каким-то образом распределена нормально, хотя по-прежнему присутствуют выбросы, требующие пристального внимания.
  4. Банк не проявляет такой серьезной предвзятости при утверждении займов по гендерному признаку.
  5. Женатые люди и люди с двумя иждивенцами имеют большие шансы на одобрение их ссуд.
  6. Совершенно очевидно, что банк отдает предпочтение выпускникам при предоставлении ссуд, однако для самозанятых соискателей такого предпочтения не существует.
  7. Люди, проживающие в пригородных районах, как правило, привлекают банк больше, чем городские и сельские жители, предоставляя ссуды.
  8. Матрица корреляции констатирует совершенно очевидный факт, что статус одобрения ссуды сильно коррелирует с кредитной историей людей в прошлом.

Шаг 3. Предварительная обработка данных и разработка функций

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

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

  • Отображение целевой переменной с Y: 1 и N: 0.
  • Использование режима для заполнения пустых значений столбцов "Женат" и "Пол".
  • Иждивенцы: если статус ссуды равен «1», зависимый = 2, иначе 1. Для данных тестирования, если Credit_History = 1, зависимый = 2, иначе 1.
  • Credit_History: если статус ссуды равен «1», Credit_History = 1, в противном случае 0. Для данных тестирования хорошим выбором будет вменение режима.
  • Self_Employed: если Credit_History равен «1», подразумевается Self_Employed = No.
  • Loan_Amount_Term, LoanAmount: приписывание признаков к нулю с медианой других сгруппированных столбцов (Пол, Женат, Образование, Самостоятельная работа, Иждивенцы).
  • Представляем новую функцию Total_Income = ApplicantIncome + CoapplicantIncome в качестве меры разработки функций для оптимизации важности функции.
  • Как видно из выводов, сделанных из визуализаций, для обработки выбросов Total_Amount и LoanAmount мы используем метод преобразования журнала. Из-за этих выбросов основная часть данных находится слева с длинным правым хвостом. Это называется правильной асимметрией, и преобразование журнала - хорошее средство для удаления выбросов. Преобразование журнала не влияет на более мелкие экземпляры, а уменьшает большие значения для получения нормального распределения.
  • Одно горячее кодирование категориальных переменных «Пол», «Женат», «Самостоятельная работа», «Образование».
  • Этикетка, кодирующая оставленные объекты путем сопоставления с соответствующими значениями.
  • Удаление ненужных записей столбцов не требуется во время моделирования.

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

Шаг 3. Моделирование и результаты

Для эффективной классификации целевой переменной я использовал два эффективных алгоритма Random Forest Classifier и X-treme Gradient Boosting. Обе модели снабжены соответствующими данными с предварительной настройкой гиперпараметров моделей с использованием перекрестной проверки поиска по сетке для оптимизированных параметров, необходимых для классификации.

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

Случайный лес дает точность - 77,23% на проверочном наборе.

XGBoost дает точность - 78,86% на проверочном наборе.

Окончательная отправка, касающаяся применения обученной модели в Analytics Vidhya, предоставила данные тестирования, достигла приличного показателя точности - 79,166%, заняв удовлетворительную позицию 880 в общедоступной таблице лидеров.

Репозиторий Github для всего исходного кода, написанного на python - https://github.com/poddaraayush14/Loan_Prediction_Challenge

Шаг 4. Заключение

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

Удачного обучения !!!