Добавил:
darkwarius13@gmail.com Рад если помог :). Можешь на почту спасибо сказать Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Додатки Мизніков

.docx
Скачиваний:
0
Добавлен:
27.06.2021
Размер:
554.44 Кб
Скачать

Додаток А

«Графічні матеріали атестаційної роботи»

ГЮИК. 506413.009

(позначення документу)

Харківський Національний Університет Радіоелектроніки

«ЗАТВЕРДЖУЮ»

Керівник атестаційної роботи, проф. Гребеннік І. В.

ДОСЛІДЖЕННЯ ТА РОЗРОБКА МЕТОДІВ АНАЛІЗУ ДАНИХ

ДЛЯ КЛАСИФІКАЦІЇ ЗАЯВОК

НА ОТРИМАННЯ БАНКІВСЬКИХ КРЕДИТІВ

Графічний матеріал

ЛИСТ ЗАТВЕРДЖЕННЯ

ГЮИК.506413.009 – ЛУ

РОЗРОБИВ:

Ст. гр. СПРм 19-1

Мизніков Р. І.

2020

ЗАТВЕРДЖЕНО

ГЮИК.506413.009 – ЛУ

ДОСЛІДЖЕННЯ ТА РОЗРОБКА МЕТОДІВ АНАЛІЗУ ДАНИХ

ДЛЯ КЛАСИФІКАЦІЇ ЗАЯВОК

НА ОТРИМАННЯ БАНКІВСЬКИХ КРЕДИТІВ

Графічний матеріал

ГЮИК.506413.009 – ЛУ

Аркушів 10

2020

Структура кредитних ризиків

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Концептуальна модель СППР

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Алгоритм навчання комбінованого методу на основі CART та SVM

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Концептуальна діаграма функції «Автоматизація прийняття рішень, щодо видачі банківських кредитів» з точки зору користувача

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Діаграма декомпозиції, що представляє функції системи

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Діаграма декомпозиції функції «Аналіз даних»

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Схема 3-шарової архітектури

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Логічне моделювання бази даних системи

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Оцінка ознак за допомогою моделі CART

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Класифікаційний звіт для комбінованого методу

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Перевір.

Гребеннік І. В.

Н. Контр.

Гребеннік І. В.

СПРм 19-1

Лист 1

Затверд.

Гребеннік І.В.

СТ

Листів 1

Додаток В

«Текст програми»

Харківський Національний Університет Радіоелектроніки

«ЗАТВЕРДЖУЮ»

Керівник атестаційної роботи, проф. Гребеннік І. В.

ДОСЛІДЖЕННЯ ТА РОЗРОБКА МЕТОДІВ АНАЛІЗУ ДАНИХ

ДЛЯ КЛАСИФІКАЦІЇ ЗАЯВОК

НА ОТРИМАННЯ БАНКІВСЬКИХ КРЕДИТІВ

Текст програми

ЛИСТ ЗАТВЕРДЖЕННЯ

ГЮИК. 506413.009 – ЛУ

РОЗРОБИВ:

Ст. гр. СПРм 19-1

Мизніков Р. І.

2020

ЗАТВЕРДЖЕНО

ГЮИК.506413.009

ДОСЛІДЖЕННЯ ТА РОЗРОБКА МЕТОДІВ АНАЛІЗУ ДАНИХ

ДЛЯ КЛАСИФІКАЦІЇ ЗАЯВОК

НА ОТРИМАННЯ БАНКІВСЬКИХ КРЕДИТІВ

Текст програми

ГЮИК. 506413.009 – 01 12 01 – ЛУ

Аркушів 8

2020

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

import seaborn as sns

application_record = pd.read_csv('/kaggle/input/credit-card-approval-prediction/application_record.csv')

application_record.head()

application_record.shape

credit_record = pd.read_csv('/kaggle/input/credit-card-approval-prediction/credit_record.csv')

credit_record.head()

credit_record.shape

credit_record['ID'].nunique()

credit_record.shape[0]/credit_record['ID'].nunique()

credit_record.dtypes

credit_record.isnull().sum()

application_record.head().T

application_record.isnull().sum()

application_record.isnull().sum()/application_record.shape[0]

application_record['OCCUPATION_TYPE'].value_counts()

application_record['OCCUPATION_TYPE'].value_counts().sort_values().plot(kind='barh', figsize=(9,12), alpha=0.7)

application_record.drop('OCCUPATION_TYPE', axis=1, inplace=True)

application_record.head().T

credit_record.head()

credit_record.loc[credit_record['STATUS'] == 'X'].shape[0]/credit_record.shape[0]

credit_record['STATUS'].value_counts()/credit_record.shape[0]*100

defaulter_codes= ['0','1','2','3','4','5']

# data labelling. 1 is a defaulter 0 is not

credit_record['Label'] = np.where(credit_record.STATUS.isin(defaulter_codes), 1, 0)

credit_record.head(10)

credit_record.drop('STATUS', axis=1, inplace=True)

# since we do not need this column now

credit_record.head()

print('application_record', application_record.shape)

print('credit_record',credit_record.shape)

record = pd.merge(credit_record, application_record, on='ID', how='left')

record.head()

record.shape

record.sample(5).T

record.isnull().sum()

record.dropna(inplace=True)

record.head()

record.shape

record['Label'].value_counts()

chart=sns.countplot(x='Label', data = record, palette = 'hls')

pd.crosstab(record.CODE_GENDER,record.Label).plot(kind='bar')

plt.title('gender vs Label')

plt.xlabel('gender')

plt.ylabel('Number of Defaulters')

pd.crosstab(record.FLAG_OWN_CAR,record.Label).plot(kind='bar')

plt.title('car ownership vs Label')

plt.xlabel('car owner')

plt.ylabel('Number of Defaulters')

pd.crosstab(record.FLAG_OWN_REALTY,record.Label).plot(kind='bar')

plt.title('property ownership vs Label')

plt.xlabel('property ownder owner')

plt.ylabel('Number of Defaulters')

pd.crosstab(record.CNT_CHILDREN, record.Label).plot(kind='bar', figsize=(12,6))

plt.title('#children Vs Label')

plt.xlabel('number of children')

plt.ylabel('Number of Defaulters')

pd.crosstab(record.NAME_INCOME_TYPE, record.Label).plot(kind='bar', figsize=(12,6))

plt.title('Label by income type')

plt.xlabel('income type')

plt.ylabel('number of defaulters')

pd.crosstab(record.NAME_INCOME_TYPE, record.Label)

pd.crosstab(record.NAME_EDUCATION_TYPE, record.Label).plot(kind='barh', figsize=(9,9))

plt.title('education type vs label')

record.columns

pd.crosstab(record.NAME_FAMILY_STATUS, record.Label).plot(kind='bar', figsize=(9,6))

plt.title('FAMILY_STATUS versus Label')

pd.crosstab(record.NAME_HOUSING_TYPE, record.Label).plot(kind='bar', figsize=(9,6))

plt.title('HOUSING_TYPE versus Label')

pd.crosstab(record.CNT_FAM_MEMBERS,record.Label).plot(kind='bar', figsize=(9,6))

plt.title('Label by number of family')

plt.xlabel('number of family members')

plt.ylabel('number of defaulters')

plt.figure(figsize=(10,6))

record[record['Label']==1]['AMT_INCOME_TOTAL'].hist(alpha=0.7,color='blue',

bins=15,label='Label=1')

record[record['Label']==0]['AMT_INCOME_TOTAL'].hist(alpha=0.3,color='green',

bins=15,label='Label=0')

plt.title('defaulters across various income groups')

plt.legend()

plt.xlabel('AMT_INCOME')

plt.ylabel('Number of Defaulters')

plt.figure(figsize=(12,6))

record[record['Label'] == 1]['DAYS_BIRTH'].hist(alpha=0.7,color='blue', bins=5,label='Label=1')

record[record['Label'] == 0]['DAYS_BIRTH'].hist(alpha=0.3,color='green', bins=5,label='Label=0')

plt.title('days since birth versus number of defaulters')

plt.legend()

plt.xlabel('days since birth')

plt.ylabel('number of defaulters')

plt.figure(figsize=(12,6))

record[record['Label']==1]['DAYS_EMPLOYED'].hist(bins=5, alpha=0.7, color='blue', label='Label=1')

record[record['Label']==0]['DAYS_EMPLOYED'].hist(bins=5, alpha=0.2, color='green', label='Label=0')

plt.legend()

plt.title('days employed versus label')

plt.xlabel('days of employment')

plt.ylabel('number of defaulters')

record['ID'] = record['ID'].astype(str) + '__' + record['MONTHS_BALANCE'].astype(str)

record['DAYS_BIRTH'] = record['DAYS_BIRTH'] - (record['MONTHS_BALANCE'])*30

record['DAYS_EMPLOYED'] = record['DAYS_EMPLOYED'] - (record['MONTHS_BALANCE'])*30

record.head()

plt.figure(figsize=(12,6))

record[record['Label'] == 1]['DAYS_BIRTH'].hist(alpha=0.7,color='blue', bins=5,label='Label=1')

record[record['Label'] == 0]['DAYS_BIRTH'].hist(alpha=0.3,color='green', bins=5,label='Label=0')

plt.title('days since birth versus number of defaulters')

plt.legend()

plt.xlabel('days since birth')

plt.ylabel('number of defaulters')

plt.figure(figsize=(12,6))

record[record['Label'] == 1]['DAYS_BIRTH'].hist(alpha=0.7,color='blue', bins=5,label='Label=1')

record[record['Label'] == 0]['DAYS_BIRTH'].hist(alpha=0.3,color='green', bins=5,label='Label=0')

plt.title('days since birth versus number of defaulters')

plt.legend()

plt.xlabel('days since birth')

plt.ylabel('number of defaulters')

record['INCOME_PER_MEMBER'] = record['AMT_INCOME_TOTAL']/record['CNT_FAM_MEMBERS']

plt.figure(figsize=(12,6))

record[record['Label'] == 1]['INCOME_PER_MEMBER'].hist(alpha=0.7,color='blue', bins=15,label='Label=1')

record[record['Label'] == 0]['INCOME_PER_MEMBER'].hist(alpha=0.3,color='green', bins=15,label='Label=0')

plt.title('income per member versus number of defaulters')

plt.legend()

plt.xlabel('income per member')

plt.ylabel('number of defaulters')

record = pd.get_dummies(record, columns=['CODE_GENDER','FLAG_OWN_CAR','FLAG_OWN_REALTY','NAME_INCOME_TYPE',

'NAME_EDUCATION_TYPE','NAME_FAMILY_STATUS','NAME_HOUSING_TYPE'], drop_first = False)

record.head().T

record.drop('MONTHS_BALANCE', axis=1, inplace=True)

record.head().T

'DAYS_BIRTH', 'DAYS_EMPLOYED', 'FLAG_MOBIL', 'FLAG_WORK_PHONE',

'FLAG_PHONE', 'FLAG_EMAIL', 'CNT_FAM_MEMBERS', 'INCOME_PER_MEMBER',

'CODE_GENDER_F', 'CODE_GENDER_M', 'FLAG_OWN_CAR_N', 'FLAG_OWN_CAR_Y',

'FLAG_OWN_REALTY_N', 'FLAG_OWN_REALTY_Y',

'NAME_INCOME_TYPE_Commercial associate', 'NAME_INCOME_TYPE_Pensioner',

'NAME_INCOME_TYPE_State servant', 'NAME_INCOME_TYPE_Student',

'NAME_INCOME_TYPE_Working', 'NAME_EDUCATION_TYPE_Academic degree',

'NAME_EDUCATION_TYPE_Higher education',

'NAME_EDUCATION_TYPE_Incomplete higher',

'NAME_EDUCATION_TYPE_Lower secondary',

'NAME_EDUCATION_TYPE_Secondary / secondary special',

'NAME_FAMILY_STATUS_Civil marriage', 'NAME_FAMILY_STATUS_Married',

'NAME_FAMILY_STATUS_Separated',

'NAME_FAMILY_STATUS_Single / not married', 'NAME_FAMILY_STATUS_Widow',

'NAME_HOUSING_TYPE_Co-op apartment',

'NAME_HOUSING_TYPE_House / apartment',

'NAME_HOUSING_TYPE_Municipal apartment',

'NAME_HOUSING_TYPE_Office apartment',

'NAME_HOUSING_TYPE_Rented apartment', 'NAME_HOUSING_TYPE_With parents']

record['Label'].value_counts()

record_sample = record.sample(100000)

record_sample['Label'].value_counts()

from sklearn import model_selection

from sklearn.model_selection import train_test_split

train, test = train_test_split(record_sample, test_size = 0.3, random_state=21)

train = train.reset_index(drop=True)

test = test.reset_index(drop=True)

features_train = train[Features]

label_train = train['Label']

features_test = test[Features]

label_test = test['Label']

from sklearn.tree import DecisionTreeClassifier

tree = DecisionTreeClassifier(random_state=0, max_depth=25)

tree.fit(features_train, label_train)

# predict train set

pred_train=tree.predict(features_train)

# predict test set

pred_test=tree.predict(features_test)

from sklearn.metrics import accuracy_score

accuracy_train = accuracy_score(pred_train,label_train)

accuracy_test = accuracy_score(pred_test,label_test)

from sklearn import svm classification_svm = svm.SVC(kernel='linear')

classification_svm.fit(features_train, label_train)

pred_train = classification_svm.predict(features_train)

pred_test=classification_svm.predict(features_test)

from sklearn.metrics import accuracy_score

accuracy_train = accuracy_score(pred_train,label_train)

accuracy_test = accuracy_score(pred_test,label_test)

predict = classification_svm.predict(clientData)

print("Predicted=%s" % (defaulter" if predict == 0 else "non_defaulter"));

Позначення

Найменування

Додаткові Відомості

Текстові документи

1.

ГЮИК.506413.009 ПЗ

Пояснювальна записка

78 стор.

2.

ГЮИК.506413.009 – 01 12 01 – ЛУ

Текст програми

8 стор.

Графічні документи

3.

ГЮИК.506413.009 – С10

Структура кредитних ризиків

1 аркуш

4.

Концептуальна модель СППР

1 аркуш

5.

Алгоритм навчання комбінованого методу на основі CART та SVM

1 аркуш

6.

Концептуальна діаграма функції «Автоматизація прийняття рішень, щодо видачі банківських кредитів» з точки зору користувача

1 аркуш

7.

Діаграма декомпозиції, що представляє функції системи

1 аркуш

8.

Діаграма декомпозиції функції «Аналіз даних»

1 аркуш

9.

Схема 3-шарової архітектури

1 аркуш

10.

Логічне моделювання бази даних системи

1 аркуш

11.

Оцінка ознак за допомогою моделі CART

1 аркуш

12.

Класифікаційний звіт для комбінованого методу

1 аркуш

ГЮИК.506413.009 Д3

Змін

Арк

№ докум

Підп.

Дата

Розроб.

Мизніков Р. І.

Дослідження та розробка методів аналізу даних для класифікаціїї заявок на отримання банківських кредитів

Аркуш

Аркушів

Перевір.

Гребеннік І. В.

1

1

Н.контр.

Гребеннік І. В.

ХНУРЕ

Кафедра СТ

Затв.

Гребеннік І. В.