В этой статье обсуждается подход к прогнозированию статуса утверждения ссуды банком с использованием базовых методов элементарного анализа данных и машинного обучения. Эта задача размещена в Analytics Vidhya в разделе хакатонов в качестве практического задания. Ссылка на задание - https://datahack.analyticsvidhya.com/contest/practice-problem-loan-prediction-iii/
Мой подход к проблеме получил точность 0,791 и позицию 880 из 68K +, зарегистрированных для испытания в публичной таблице лидеров. Проблема в первую очередь заключается в классической проблеме двоичной классификации, охватывающей большую часть жизненно важных шагов и процедур, необходимых для правильного и эффективного моделирования любой модели машинного обучения.
Шаг 1. Загрузка данных и визуализация
Первый и самый важный шаг включает в себя импорт необходимых библиотек и пакетов и загрузку набора данных в виде фрейма данных pandas. Платформа предоставляет наборы данных для обучения и тестирования отдельно. Поэтому мы загружаем оба набора данных для дальнейшего анализа.
Часто рекомендуется сохранять копии исходных наборов данных в качестве обязательной меры восстановления из-за неправильного обращения с набором данных, создающего беспорядок для будущего расследования.
Шаг 2. Визуализация и анализ переменных - понимание данных
Визуализация и эффективный обзор существующих переменных являются ключевыми мерами на пути к успеху любого проекта анализа данных. Учитывая набор данных, существует 12 характеристик для конкретного идентификатора ссуды соискателя. Описание каждой функции следующее:
- Loan_ID - идентификатор ссуды для заявителя, подающего заявку на ссуду.
- Пол - Пол заявителя.
- Женат - семейное положение заявителя.
- Иждивенцы - количество иждивенцев кандидата.
- Образование - статус образования кандидата (высшее / невысокое).
- Self_Employed - Кандидат работает на себя или нет
- доход кандидата - доход кандидата
- CoapplicantIncome - Доход со-заявителя
- LoanAmount - Сумма кредита в тысячах
- Loan_Amount_Term - Срок кредита в месяцах
- Credit_History - предыдущая кредитная история кандидата соответствует требованиям.
- Property_Area - Городские, полугородские или сельские районы
- Loan_Status - Статус утверждения ссуды (целевая переменная)
Loan_Status, которая представляет собой двоичную переменную, которая принимает значения Да (Y) / Нет (N), служит целевой переменной, которую необходимо спрогнозировать с использованием тестовых данных.
Визуализации объектов с целевой переменной проводятся ниже, как показано, чтобы получить правильные выводы как для одномерного, так и для двумерного анализа на основе данных. Исходный код Python для визуализаций явно включен в мой репозиторий Github, ссылка на который приведена в конце.
Выводы, сделанные на основе проведенного выше анализа:
- Большинство соискателей ссуды имеют хорошую кредитную историю в банке.
- Из рисунка ясно видно, что доход кандидата обычно не распределяется с большим количеством аномалий и выбросов.
- Однако показатель «Сумма ссуды» показывает, что плотность суммы ссуды каким-то образом распределена нормально, хотя по-прежнему присутствуют выбросы, требующие пристального внимания.
- Банк не проявляет такой серьезной предвзятости при утверждении займов по гендерному признаку.
- Женатые люди и люди с двумя иждивенцами имеют большие шансы на одобрение их ссуд.
- Совершенно очевидно, что банк отдает предпочтение выпускникам при предоставлении ссуд, однако для самозанятых соискателей такого предпочтения не существует.
- Люди, проживающие в пригородных районах, как правило, привлекают банк больше, чем городские и сельские жители, предоставляя ссуды.
- Матрица корреляции констатирует совершенно очевидный факт, что статус одобрения ссуды сильно коррелирует с кредитной историей людей в прошлом.
Шаг 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. Может быть гораздо больше алгоритмов, которые дали бы более эффективные результаты. Ансамблевое обучение, глубокое обучение и нейронные сети могут стать основой будущей работы, связанной с этой работой. Я ограничил объем анализа, чтобы получить достойный справедливый результат. Машинное обучение и наука о данных - это огромный океан возможностей попробовать различные методы и процессы.
Удачного обучения !!!