-С помощью алгоритма классификации и создания веб-приложения Flask, развертывание на heroku.

Здравствуйте, это мой последний проект для второй программы наставничества когорты, организованной сообществом She Code Africa. До сих пор это было удивительное путешествие.

В сфере финансов ссуда - это ссуда денег одним или несколькими физическими лицами, организациями или другими организациями другим лицам, организациям и т. Д. - Википедия.

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

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

ЗАЯВЛЕНИЕ О ПРОБЛЕМЕ

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

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

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

Основная цель этого проекта - иметь возможность прогнозировать право клиентов на получение ссуды, используя их сегменты. Чем точнее прогнозы, тем более выгодным будет для компании Dream Housing Finance Company.

ТИП ПРОБЛЕМЫ

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

Это можно решить с помощью любого из алгоритмов, перечисленных ниже:

я. Логистическая регрессия

II. Древо решений

iii. Случайный лес

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

ОПИСАНИЕ КОЛОНК

Даны два набора данных, один - набор данных для обучения, а другой - набор данных для тестирования. Лучше понять набор данных и все столбцы в нем, прежде чем пытаться решить проблему, чтобы не запутаться. Я объясню столбцы ниже;

ОПИСАНИЕ КОЛОНК

Даны два набора данных, один - набор данных для обучения, а другой - набор данных для тестирования. Лучше понять набор данных и все столбцы в нем, прежде чем пытаться решить проблему, чтобы не запутаться. Я объясню столбцы ниже;

Позвольте мне пролить свет на это (столбцы):

Loan_ID: - Как следует из названия, это идентификационный номер ссуды, на которую подал заявку клиент. По сути, это номер, используемый для идентификации заявителя.

Пол: - это пол заявителя, мужчина или женщина.

Женат: - Семейное положение заявителя, женат или не женат. Если заявитель состоит в браке, это обозначается ответом «Да», а если нет - «Нет».

Иждивенцы: - Количество лиц, находящихся на иждивении заявителя.

Образование: - Уровень образования заявителя также является требованием для утверждения ссуды. Категория - либо выпускник, либо не выпускник.

Self_Employed: - Это означает, что он / она является их собственным работодателем, то есть они их босс. Категория в наборе данных: «Да» (Self_employed) или «Нет» (не self_employed).

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

CoapplicantIncome: - это сумма, которую зарабатывает второй заявитель.

LoanAmount: - Это сумма ссуды, на которую подал заявку заявитель, в тысячах. Предполагается, что чем выше сумма, тем меньше шансов вернуть деньги.

Loan_Amount_Term: - Это время, необходимое для возврата кредита. Он представлен в месяцах.

Credit_History: - это запись о предыдущей ссуде заявителя и о том, соблюдал ли он / она правила оплаты или нет.

Property_Area: - Площадь собственности заявителя.

Loan_Status: - Если заявитель имеет право на получение ссуды, это будет да, представленное Y, иначе нет, представленное N.

ИЗУЧЕНИЕ ДАННЫХ

Я собираюсь проработать коды и процессы для прогнозирования этих данных.

Для этого проекта я использовал Jupyter Notebook в качестве интегрированной среды разработки (IDE). Во-первых, все пакеты, необходимые для исследования данных, были импортированы перед загрузкой данных, как показано ниже:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 
train = pd.read_csv("loan train.csv") #to read the train data set 
test = pd.read_csv("loan test.csv") #to read the test data set

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

train.describe()  #this gives the summary of the statistics

Из этой сводной статистики видно, что есть некоторые пропущенные значения. Пояснение к строке сводной статистики приведено ниже:

ОЧИСТКА ДАННЫХ

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

Чтобы проверить недостающее значение

train.isnull().sum()

Фрагмент кода, показывающий, как было заполнено отсутствующее значение

train["LoanAmount"].fillna((train["LoanAmount"].median()), inplace=True)
train["Self_Employed"].fillna((train["Self_Employed"].mode()[0]), inplace=True)

Теперь видно, что данные чистые.

ВИЗУАЛИЗАЦИЯ ДАННЫХ

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

train["Gender"].value_counts() 
sns.barplot(x="Gender", y="ApplicantIncome", data=train)

Больше сюжетов можно найти здесь.

И мой вывод после визуализации данных:

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

РАЗРАБОТКА ФУНКЦИЙ

После этого столбцы с категориальными данными, такими как пол, self_employed и т. Д., Были преобразованы в числовые данные, как показано ниже:

cleanup_num = {"Loan_Status":   {"Y": 1, "N": 0},
              "Gender":  {"Male": 1, "Female": 0},
              "Married": {"Yes": 1, "No": 0},
              "Self_Employed": {"Yes": 1, "No": 0},
              "Education": {"Graduate": 0, "Not Graduate": 1} }
train.replace(cleanup_num, inplace=True)

МОДЕЛИРОВАНИЕ

После выполнения EDA (исследовательского анализа данных) пора смоделировать / обучить данные. Во-первых, были импортированы все необходимые пакеты для моделирования данных, для этого проекта использовались три разных алгоритма (LogisticRegression, DecisionTreeClassifier и RandomForestClassifier).

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
k_fold = KFold(n_splits=10, shuffle=True, random_state=1)

После этого модель была определена с использованием:

model=LogisticRegression()

Затем сохраните модель

pickle.dump(model,open('model.pkl','wb'))

Затем оцените модель, проверив оценку точности.

scoring = "accuracy"
score = cross_val_score(model, train_data, target, cv=k_fold, n_jobs=1, scoring = scoring)
print(score)
round(np.mean(score)*100, 2)

После обучения данных было обнаружено, что модель LogisticRegression лучше всего подходит для данных, поскольку ее точность была самой высокой (81,12%).

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

model.fit(train_data, target)

test_data = test.drop("Loan_ID", axis=1).copy()
prediction = model.predict(test_data)

РАЗВЕРТЫВАНИЕ ОБУЧЕНИЯ МАШИНЫ В ВЕБ-ПРИЛОЖЕНИЕ С ФЛАСКОЙ

Сначала создайте файл HTML или CSS для получения значений от пользователей (в форме формы), этот файл можно назвать «index.html» или вы можете загрузить шаблон в Интернете.

Затем создайте файл python и введите следующий код:

from flask import Flask, request, jsonify, render_template
import pickle
import numpy as np
app = Flask(__name__)
model = pickle.load(open("model.pkl", "rb"))
@app.route("/")
def home():
    return render_template("index.html")
@app.route("/predict",methods=["POST"])
def predict():
int_features = [int(x) for x in request.form.values()]
    final_features = [np.array(int_features)]
    prediction = model.predict(final_features)
output = round(prediction[0], 2)
return render_template("index.html", prediction_text= "PROBABILITY THAT YOUR LOAN WILL BE APPROVED IS ; {}".format(output))
@app.route('/results',methods=['POST'])
def results():
data = request.get_json(force=True)
    prediction = model.predict([np.array(list(data.values()))])
output = prediction[0]
    return jsonify(output)
if __name__ == "__main__":
    app.run(debug=True)

Когда вы запустите код, результат должен выглядеть так:

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

РАЗВЕРТЫВАНИЕ ВЕБ-ПРИЛОЖЕНИЯ НА HEROKU

Предпосылка:

  1. Установите git - нажмите здесь, чтобы загрузить его.
  2. Зарегистрируйте учетную запись Heroku

Здесь вы используете обычный способ отправки кодов в Github, используя приведенные ниже коды:

git init
git add .
git commit “First Commit”
git remote add origin 'your_url_name'
git push -u origin master

Шаги по развертыванию на героку:

  1. Войдите в свою учетную запись heroku и создайте новое приложение.

2. Выберите Github в качестве метода развертывания,

3. Введите имя репо и нажмите «Поиск».

4. Нажмите «Развернуть вручную».

После успешной установки вы можете просмотреть веб-приложение и протестировать его.

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

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