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

Заказать уникальную дипломную работу
Тип работы: Дипломная работа
Предмет: Информационные технологии
  • 8080 страниц
  • 27 + 27 источников
  • Добавлена 14.08.2021
3 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
ВВЕДЕНИЕ 4
1. МЕТОДЫ МАШИННОГО ОБУЧЕНИЯ В БАНКОВСКОЙ СФЕРЕ 6
1.1 Задачи машинного обучения 6
1.2. Интерактивный анализ данных клиентов банка. Существующие решения. 8
1.3. Формализация задачи анализа данных кредитного скоринга. Постановка задачи. 14
2. РАЗРАБОТКА ПРОГРАММНЫХ МОДУЛЕЙ ДЛЯ АНАЛИЗА ДАННЫХ В БАНКОВСКОЙ СФЕРЕ 17
2.1. Описание структуры выбранных наборов данных. Предварительная обработка данных. 17
2.2. Выбор языка программирования и среды разработки. 29
2.3. Программная реализация 37
2.3.1. С помощью дерева решений 37
2.3.2. С помощью Наивного Байеса. 43
2.3.3. С помощью случайного леса 46
2.3.4. Логистическая регрессия 48
2.3.5 Многослойный перцептрон 52
3. РЕЗУЛЬТАТ АНАЛИЗА И ИХ ИНТЕРПРЕТАЦИЯ 56
3.1. Анализ полученных результатов. 56
3.2. Сравнительный анализ 59
ЗАКЛЮЧЕНИЕ 65
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 66
ПРИЛОЖЕНИЕ А. 69
Фрагмент для ознакомления

Получив значениеt в шаге 1, можно объединить шаги 2 и 3:Правая часть уравнения, указанного выше, называется логистической функцией. Отсюдаиназвание, данноеэтоймоделиобучения."""# Logistic Regression"""fromsklearn import linear_modelclf = linear_model.LogisticRegression(C=1e5,class_weight= {0:.1, 1:.9} )clf.fit(X_train,Y_train)scores_dict['Logistic Regression'] = { 'Train': roc_auc_score(Y_train, clf.predict(X_train)), 'Test': roc_auc_score(Y_test, clf.predict(X_test)), }evaluate(clf, X_train, X_test, Y_train, Y_test)2.3.5 Многослойный перцептронПерцептрон принимает обратную логит (логистическую) функцию от wx и не использует вероятностные предположения ни для модели, ни для ее параметра. Онлайновое обучение даст вам точно такие же оценки для весов / параметров модели, но вы не сможете интерпретировать их в причинно-следственной связи из-за отсутствия p-значений, доверительных интервалов и, следовательно, базовой вероятностной модели.Однослойный персептрон(англ.Single-layerperceptron) — перцептрон, каждый S-элемент которого однозначно соответствует одному А-элементу, S-A связи всегда имеют вес1, а порог любого А-элемента равен1. Часть однослойного персептрона соответствует модели искусственного нейрона.Его уникальность состоит в том, что каждый S-элемент однозначно соответствует одному A-элементу, все S-A связи имеют вес, равный+1, а порог A элементов равен1. Часть однослойногоперцептрона, не содержащая входы, соответствует искусственному нейрону, как показано на картинке. Таким образом, однослойный перцептрон — это искусственный нейрон, который на вход принимает только0и1.Однослойный персептрон также может быть и элементарным персептроном, у которого только по одному слою S,A,R-элементов.Задача обучения перцептрона — подобрать такие, чтобыкак можно чаще совпадал сy(x)— значением в обучающей выборке (здесьσ— функция активации). Для удобства, чтобы не тащить за собой свободный член, добавим в векторxлишнюю «виртуальную размерность» и будем считать, что. Тогдаможнозаменитьна.Чтобы обучить эту функцию, сначала выбирается функция ошибки, которую затем оптимизируетсяградиентным спуском. Число неверно классифицированных примеров здесь использовать неуместно, потому что эта функция кусочно-гладкая, с массой разрывов: она будет принимать только целые значения и резко меняться при переходе от одного числа неверно классифицированных примеров к другому. Поэтому следует использовать другую функцию, так называемыйкритерий перцептрона:гдеM— множество примеров, которые перцептрон с весамиwклассифицирует неправильно.Иначе говоря, надо минимизировать суммарное отклонение наших ответов от правильных, но только в неправильную сторону; верный ответ ничего не вносит в функцию ошибки. Умножение наy(x)здесь нужно для того, чтобы знак произведения всегда получался отрицательным: если правильный ответ−1, значит, перцептрон выдал положительное число (иначе бы ответ был верным), и наоборот. В результате получается кусочно-линейная функция, дифференцируемая почти везде, а этого вполне достаточно.Теперьможно оптимизировать градиентным спуском. На очередном шаге получаем:Алгоритм такой — мы последовательно проходим примеры,,…из обучающего множества, и для каждого:если он классифицирован правильно, не меняем ничего;а если неправильно, прибавляем.Ошибка на примерепри этом, очевидно, уменьшается, но, конечно, совершенно никто не гарантирует, что вместе с тем не увеличится ошибка от других примеров. Это правило обновления весов так и называется — правило обучения перцептрона, и это было основной математической идеей работы Розенблатта.Мы применили MLPClassifier из библиотеки sklearn, задали только два параметра (линейная функция активации, порог на остановку оптимизации весов), остальные взяты по умолчанию. По умолчанию здесь 1 скрытый слой и 100 нейронов, метод оптимизации весов Adam, то есть стохастический градиент."""# MLP"""fromsklearn.neural_network import MLPClassifierclf4 = MLPClassifier(activation="identity", tol= 0.1)clf4.fit(X_train, Y_train)scores_dict['MLP'] = { 'Train': roc_auc_score(Y_train, clf4.predict(X_train)), 'Test': roc_auc_score(Y_test, clf4.predict(X_test)),}evaluate(clf4, X_train, X_test, Y_train, Y_test)Полный код в ПРИЛОЖЕНИИ А.Выводы по главе 2Были изучены алгоритмы методов машинного обучения для нашей азадчи кредитного скоринга.Полученные в данной работе результаты могут иметь практическую значимость, связанную с извлечением необходимой информации из массива данных для дальнейшего анализа, а также теоретическую значимость, для сокращения времени оценки кредитного скоринга и увеличении его точности.3. РЕЗУЛЬТАТ АНАЛИЗА И ИХ ИНТЕРПРЕТАЦИЯ3.1. Анализ полученных результатов.Дерево решений,на тренировочных данных показала долю правильно предсказанных экземпляров 72,5%. На тестовой выборке этот процент составил практически 73%.Рисунок 21 – результаты Деревьев решенийНаивный байес,на тренировочных данных показал долю правильно предсказанных экземпляров практически в 80%. На тестовой выборке этот процент составил 80,1%.Рисунок 22 – результаты НаивногобайесаСлучайный лес,на тренировочных данных и на тестовой выборке показал долю правильно предсказанных экземпляров на 78%. Рисунок 23 – результаты Случайного лесаПерцептрон,на тренировочных данных и тестовой выборке показал долю правильно предсказанных экземпляров на 93%. Рисунок 24 – результаты ПерцептронаЛогистическая регрессия,на тренировочных данных и тестовой выборке показала долю правильно предсказанных экземпляров в 86%. Рисунок 25 – результаты Логистической регрессии3.2. Сравнительный анализДля сравнения результатов работы алгоритмов будем использовать метрику AUC.ROC кривая (кривая рабочей характеристики приемника (receiveroperatingcharacteristiccurve)) это граф, показывающий производительность модели классификации при всех возможных значениях классификационных порогов. Эта кривая график двух параметров:Истинно положительная скорость (TruePositiveRate)Ложно положительная скорость (FalsePositiveRate)Истинно положительная скорость (TPR) - это синоним отзыва и поэтому, определяется следующим образом:TPR = TP / (TP + FN)Ложно положительная скорость (FPR) определяется следующим образом:FPR = FP / (FP + TN)Кривая ROC является графиком TPR и FPR при разных значениях порогов классификации. Снижение порога классификации классифицирует больше примеров как позитивные, при этом увеличиваются и Ложно положительные и Истинно положительные. Следующий график показывает типичную ROC кривую.Рисунок 26 – TP и FP скорость при разных классификационных порогахЧтобы вычислить точки на ROC кривой мы можем оценить модель логистической регрессии много раз с разными классификационными порогами, но это будет неэффективно. К счастью, существует эффективный, основанный на сортировке, алгоритм, который может предоставить нам эту информацию, называемый AUC.AUC: область под ROC кривойAUC обозначает "область под ROC кривой" ("Areaunderthe ROC Curve"). AUC измеряет всю двухмерную область под всей ROC привой (то есть вычисляет интеграл) от (0,0) до (1,1).Рисунок 27 – AUC (область под ROC кривой)AUC предоставляет совокупное измерение производительности при всех возможных значениях классификационного порога. Один из путей интерпретировать AUC - рассматривать ее как вероятность, что модель ранжирует случайный позитивный пример выше, чем случайный негативный пример. Например, даны следующие примеры, которые распределены слева направо в восходящем порядке прогнозов логистической регрессии:Рисунок 28 – Прогнозы ранжированные в восходящем порядке счета логистической регрессииAUC предоставляет вероятность того, что случайный позитивный (зеленый) пример будет расположен правее случайного отрицательного (красного) примера.AUC выдает результаты в периоде от 0 до 1. Модель, чьи прогнозы 100% ошибочны, имеет AUC равную 0.0, а модель со 100% верными прогнозами имеет AUC равную 1.0.AUC привлекательна по следующим двум причинам:AUC не обращает внимание на масштаб. Она измеряет насколько хорошо прогнозы ранжированы, а не их абсолютные значения.AUC не обращает внимание на классификационный порог. Она измеряет качество прогнозов модели вне зависимости от того какой классификационный порог выбран.Однако, обе эти причины имеют ограничения, которые могут ограничить полезность AUC в определенных случаях:Нечувствительность к масштабу не всегда желаема. Например, иногда, действительно необходимы градуированные выводы информации, AUC не сможет этого сделать.Нечувствительность к классификационному порогу не всегда желательна. В случаях, когда существуют большие неравенства стоимости ложно отрицательных и ложно положительных результатов, может быть критичным - уменьшить один из типов классификационных ошибок. Например, при определении спама среди писем, необходимо в первую очередь снизить количество ложно положительных (даже если это приведет к увеличению ложно отрицательных прогнозов). AUC не очень полезная метрика для оптимизации такого типа.ИзучаемпараметрAUC -recall macro_avg.На тренировочных данных лучшие показатели были у всех алгоритмов кроме перцептрона.На тестовой выборке лучшим из всех алгоритмов оказался случайный лес.Рисунок 29 – Сравнение результатов работы алгоритмовПодробно все плюсы и минусы методов приведены в таблице нижеТаблица 2 – сравнения методовАлгоритмПлюсыМинусыДеревья решенийУниверсальностьПростота в использованииВозможность работы с неполными даннымиСложность контроля структуры дереваНестабильность процессаНаивный БаейсХороши подходит для небольших наборов данныхОчень требователен к подготовке входных данныхСлучайный лесДисперсия лучше чем у обычных деревьев решенийУсредняет результатНе требуется масштабированиеЛегко переобучаетсяВысокая сложность итоговТребует много ресурсовМногослойный перцептронГарантированное решениеНизкая скорость обученияВозможно переобучениеНадо настраивать структуруЛогистическая регрессияОчень прост и эффективенХорошо интерпретируетсяНе требует масштабированияНе требует много ресурсовМаломощный алгоритмПлохо решает нелинейные задачиПлохо работает со слабой корреляцией данныхВыводы по главе 3:Были практически реализованы несколько методов машинного обучения наязыкеPythonс использованием соответствующих библиотек;Применили сложный критерий AUCROC, который позволяет наиболее полно и всесторонне оценить эффективность работы методов машинного обучения;Хоть многослойный перцептрон и показал высокую степень точности, критерий AUCROC доказал неэффективность применения такого метода к данной задаче;Был проведен сравнительный анализ преимуществ и недостатков всех использованных методов.ЗАКЛЮЧЕНИЕИсследования в области применения методов машинного обучения для кредитного скоринга являются актуальными на сегодняшний день и проводятся как в нашей стране, так и за рубежом. В рамках данной работы была решена задача с помощью различных методов машинного обучения и была разработана программная реализация.Также были проанализированы различные методы машинного обучения и подходы к повышению их качества применительно к извлеченным данным.Результаты работы показали необходимость развития данной проблематики. Дальнейшие исследования в области применения на практике методов машинного обучения могут помочь банкам не только в извлечении информации из массива данных и его анализе, но и в сокращении времени оценки кредитного скорингаи повышении его точности.СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВАйвазян С.А. Прикладная статистика. Классификация и снижение размерности / С.А. Айвазян [и др.]. – М.: Финансы и статистика, 1989. – 607 с. Вандерплас Д. Python для сложных задач: наука о данных и машинное обучение. – СПб.: Питер, 2018. – 576 с. Горбань А.Н. Обобщенная аппроксимационная теорема и вычислительные возможности нейронных сетей / А.Н. Горбань // Сиб. журн. вычисл. математики. – 1998. – Т. 1, № 1. – С. 11–24. Кобзарь А. И. Прикладная математическая статистика. – М.: Физматлит, 2006. – 626–628 с. Кохонен Т. Самоорганизующиеся карты / пер. 3-го англ. изд. – М.: БИНОМ. Лаборатория знаний, 2014. – 655 с. Кочетов А.Г. Методы статистической обработки медицинских данных: Методические рекомендации для ординаторов и аспирантов медицинских учебных заведений, научных работников / А.Г. Кочетов [и др.]. – М.: РКНПК, 2012. – 42 с. Фадеев П.А. Болезни почек. Пиелонефрит. – М.: Мир и Образование, 2011. – 180 с. Флах П. Машинное обучение. Наука и искусство построения алгоритмов, которые извлекают знания из данных / пер. с англ. А.А. Слинкина. – М.: ДМК Пресс, 2015. – 400 с. Хайкин С. Нейронные сети: Полный курс / пер. с англ. Н.Н. Куссуль, А.Ю. Шелестова. – 2-е изд., испр. – М.: Издательский дом Вильямс, 2008. – 1103 с. Bauer E. An Empirical Comparison of Voting Classification Algorithms: Bagging, Boosting, and Variants / E. Bauer, R. Kohavi // Machine Learning. – 1999. – P. 105–139. Boughorbel S. Optimal classifier for imbalanced data using Matthews Correlation Coefficient metric / S. Boughorbel, F. Jarray, M. El-Anbari // PLoS ONE 12(6). – 2017. – 17 p. Breiman L. Bagging Predictors / L. Breiman // Machine Learning. – 1996. – P. 123–140. D’Agostino R.B. An omnibus test of normality for moderate and large sample size / R.B. D’Agostino // Biometrika. – 1971. – Vol. 58, No. 2. – P. 341–348. Gopika S. Machine learning Approach of Chronic Kidney Disease Prediction using Clustering Technique / S. Gopika, Dr.M. Vanitha // International Journal of Innovative Research in Science, Engineering and Technology. – 2017. – Vol. 6, No. 7. – P. 14488–14496. Hornik K. Approximation Capabilities of MuitilayerFeedforward Networks / K. Hornik // Neural Networks. – 1990. – Vol. 4. – P. 251–257. Kazemi Y. A novel method for predicting kidney stone type using ensemble learning / Y. Kazemi, S.A. Mirroshandel // Artificial Intelligence in Medicine. – 2017. – Vol. 79, No. 3. – P. 1696–1707. Lambodar J. Distributed Data Mining Classification Algorithms for Prediction of Chronic Kidney Disease / J. Lambodar, K. Narendra // International Journal of Emerging Research in Management and Technology. – 2015. – Vol. 4, No. 11. – P. 110–180. Ramya S. Diagnosis of Chronic Kidney Disease Using Machine Learning Algorithms / S. Ramya, N. Radha // International Journal of Innovative Research in Computer and Communication Engineering. – 2016. – Vol. 4, No. 1. – P. 812–820. Scott D.W. On Optimal and Data-Based Histograms / D.W. Scott // Biometrika. – 1979. – Vol. 66, No. 3. – P. 605–610. United States Patent № US 7,657,521 B2, 02.02.2010. System and method for parsing medical data [text] / Fred E. Masarie, Stuart Lopez, Michael I. Lieberman // United States Patent № US 7657521 B2. 2010. Yoruk U. Automatic Renal Segmentation for MR Urography Using 3D-GrabCut and Random Forests / U. Yoruk, B.A. Hargreaves, S.S. Vasanawala // International Society for Magnetic Resonance in Medicine. – 2017. – Vol. 79, No. 3. – P. 1696–1707. Documentation ofscikit-learn 0.19.1 [Электронныйресурс]. – URL: http://scikit-learn.org/stable/documentation.html Documentation Apache POI [Электронныйресурс]. – URL: https://poi.apache.org/apidocs/index.html Hyndman R.J. The problem with Sturges’ rule for constructing [Электронныйресурс]. – URL: https://robjhyndman.com/papers/sturges.pdf Воронцов К.В. Лекции по алгоритмическим композициям. – 2007. – 45 с. [Электронный ресурс]. – URL: http://www.ccas.ru/voron/download/Composition.pdf Воронцов К.В. Лекции по логическим алгоритмам классификации [Электронный ресурс]. – URL: http://www.ccas.ru/voron/download/LogicAlgs.pdf Воронцов К.В. Математические методы обучения по прецедентам. – 2007. – 141 с. [Электронный ресурс]. – URL: http://www.machinelearning.ru/wiki/images/6/6d/Voron-ML-1.pdfПРИЛОЖЕНИЕА.import pandas as pdimportnumpy as npimportseaborn as snsimportmatplotlib.pyplot as pltfromsklearn.feature_extraction import DictVectorizerfrom pandas import DataFrame# %matplotlib inline"""### Загрузка тренировачных данных"""###### Загрузка данных###data = pd.read_csv('cs-training.csv',sep=';').drop('Unnamed: 0', axis = 1)data# '-' Некорректное имя столбцаCols = []fori in range(len(data.columns)):Cols.append(data.columns[i].replace('-', ''))data.columns = Cols#data = data.apply(lambda x: x.fillna(np.nanmedian(x),axis=0))# Удаление строк с отсутствующими данными столбцов#data = data.dropna()###### Преобразование Данных в список###data = data.to_dict(orient='records')###### Seperate Target and Outcome Features###vec = DictVectorizer()df_data = vec.fit_transform(data).toarray()feature_names = vec.get_feature_names()df_data = DataFrame(df_data,columns=feature_names)"""## Пропущенные значенияВ наборе данных есть некоторые значения, которые отсутствуют или имеют действительно неудобные величины. Поэтому, во-первых, мы должны позаботиться о них."""#col_mean = np.nanmean(X,axis=0)#Find indicies that you need to replace#inds = np.where(np.isnan(X))#Place column means in the indices. Align the arrays using take#X[inds]=np.take(col_mean,inds[1])"""## ВизуализацияВ этой части мы покажем вам визуализацию данных относительно некоторых их аспектов."""defplot_freq(l):ncount = l ax2=ax.twinx() ax2.yaxis.tick_left()ax.yaxis.tick_right()ax.yaxis.set_label_position('right') ax2.yaxis.set_label_position('left') ax2.set_ylabel('Frequency [%]')for p in ax.patches: x=p.get_bbox().get_points()[:,0] y=p.get_bbox().get_points()[1,1]ax.annotate('{:.1f}%'.format(100.*y/ncount), (x.mean(), y), ha='center', va='bottom') ax2.set_ylim(0,100)ax2.grid(None)ax = sns.countplot(x = df_data.SeriousDlqin2yrs , palette="Set2")sns.set(font_scale=1.5)ax.set_ylim(top = len(data))ax.set_xlabel('Class')ax.set_ylabel('Sample Size')plt.title('Class Frequencies')plot_freq(l = len(df_data.SeriousDlqin2yrs))plt.show()"""## Linear Discriminant Analysis"""fromsklearn import linear_model#clf = linear_model.LogisticRegression(C=1e5)#clf.fit(X_Train,Y_Train)#clf.predict_proba(X[0])#clf.coef_#ind = np.where(Y_test == 1)#ss = clf.predict_log_proba(X_test[ind]) #t = ss.argmax(axis = 1)#a = np.intersect1d(ind,np.where(t == 1))#100*len(a)/len(t)#print(clf.predict_proba(X_test[37441].reshape(1,-1)))#y_test[37441]"""# Обнаружение выбросовМы собираемся изучить некоторые особенности, чтобы устранить выбросы. Например, в *RevolvingUtilizationOfUnsecuredLines* есть некоторые значения, близкие к 50000. Мы должны исключить такие значения, чтобы предотвратить очень высокую частоту ошибок.### RevolvingUtilizationOfUnsecuredLines Variance"""#plt.plot(data2.RevolvingUtilizationOfUnsecuredLines)plt.figure(figsize=(20,15))ax = plt.subplot(211)#ax.set_ylim(0,20)plt.plot(df_data.RevolvingUtilizationOfUnsecuredLines, 'bo',df_data.RevolvingUtilizationOfUnsecuredLines, 'k')print('Median: %.7f \nMean: %.7f' %(np.median(df_data.RevolvingUtilizationOfUnsecuredLines),np.mean(df_data.RevolvingUtilizationOfUnsecuredLines)))ruoelLt2=len(df_data[df_data.RevolvingUtilizationOfUnsecuredLines < 2])ruoelACt=len(df_data.RevolvingUtilizationOfUnsecuredLines)print('Values less than 2 : %d in %d. Ratio: %.5f%%' %(ruoelLt2,ruoelACt,100*ruoelLt2/ruoelACt))#sns.kdeplot(data2.RevolvingUtilizationOfUnsecuredLines, shade=True, color="r")#data2.age.plot.box()#data2.RevolvingUtilizationOfUnsecuredLines.plot.box()"""Поэтому нам нужно очистить выбросы, рассматривая соотношение, которое мы получили выше."""ind = np.where(df_data.RevolvingUtilizationOfUnsecuredLines>2)df_data.RevolvingUtilizationOfUnsecuredLines[ind[0]] = 2."""### Age Variance"""from collections import Counterplt.figure(1)df_data.age.plot.box()plt.figure(2)sns.set_color_codes()sns.distplot(df_data.age, color="y")plt.show()ind = np.where(df_data.age<21)df_data.age[ind[0]] = 21.ind = np.where(df_data.age>94)df_data.age[ind[0]] = 94.### Установливаем значения выбросов равными медиане , то есть 0.ind = np.where(df_data.NumberOfTime3059DaysPastDueNotWorse>95)df_data.NumberOfTime3059DaysPastDueNotWorse[ind[0]] = 0.defmad_based_outlier(points, thresh=3.5):iflen(points.shape) == 1:points = points[:,None]median = np.median(points, axis=0)diff = np.sum((points - median)**2, axis=-1)diff = np.sqrt(diff)med_abs_deviation = np.median(diff)modified_z_score = 0.6745 * diff / med_abs_deviationreturnmodified_z_score > thresh"""### DebtRatio Variance"""plt.figure(figsize=(20,15))ax = plt.subplot(211)#ax.set_ylim(0,20)plt.plot(df_data.DebtRatio, 'bo',df_data.DebtRatio, 'k')print('Median: %.7f \nMean: %.7f' %(np.median(df_data.DebtRatio),np.mean(df_data.DebtRatio)))#ruoelLt2=len(df_data[df_data.RevolvingUtilizationOfUnsecuredLines < 2])#ruoelACt=len(df_data.RevolvingUtilizationOfUnsecuredLines)#print('Values less than 2 : %d in %d. Ratio: %.5f%%' %(ruoelLt2,ruoelACt,100*ruoelLt2/ruoelACt))ax = sns.countplot(mad_based_outlier(df_data.DebtRatio))plot_freq(l = len(df_data.DebtRatio))minUpperBound = min([val for (val, out) in zip(df_data.DebtRatio, mad_based_outlier(df_data.DebtRatio)) if out == True])### Установливаем значения выбросов в верхнюю границу, то есть minUpperBound.ind = np.where(df_data.DebtRatio>minUpperBound)df_data.DebtRatio[ind[0]] = minUpperBoundplt.figure(figsize=(20,15))ax = plt.subplot(211)plt.plot(df_data.DebtRatio, 'o')df_data.DebtRatio.describe()"""### MonthlyIncome Variance"""plt.figure(figsize=(20,15))ax = plt.subplot(211)#ax.set_ylim(0,20)plt.plot(df_data.MonthlyIncome, 'bo',df_data.MonthlyIncome, 'k')print('Median: %.7f \nMean: %.7f' %(np.median(df_data.MonthlyIncome),np.mean(df_data.MonthlyIncome)))maxUpperBound = min([val for (val, out) in zip(df_data.MonthlyIncome, mad_based_outlier(df_data.MonthlyIncome)) if out == True])ind = np.where(df_data.MonthlyIncome>maxUpperBound)df_data.MonthlyIncome[ind[0]] = maxUpperBoundind = np.where(df_data.MonthlyIncome<1500)df_data.MonthlyIncome[ind[0]] = 1500df_data.MonthlyIncome.describe()"""### NumberOfTimes90DaysLate Variance"""Counter(df_data.NumberOfTimes90DaysLate)### Установливаем значения выбросов равными медиане , то есть 0.ind = np.where(df_data.NumberOfTimes90DaysLate>95)df_data.NumberOfTimes90DaysLate[ind[0]] = 0"""### NumberRealEstateLoansOrLines Variance"""Counter(df_data.NumberRealEstateLoansOrLines)### Установливаемзначения 16.ind = np.where(df_data.NumberRealEstateLoansOrLines>16)df_data.NumberRealEstateLoansOrLines[ind[0]] = 16"""### NumberOfTime60-89DaysPastDueNotWorse Variance"""Counter(df_data.NumberOfTime6089DaysPastDueNotWorse)### Установливаемзначения 0.ind = np.where(df_data.NumberOfTime6089DaysPastDueNotWorse>11)df_data.NumberOfTime6089DaysPastDueNotWorse[ind[0]] = 0"""### NumberOfDependents Variance"""Counter(df_data.NumberOfDependents)ind = np.where(df_data.NumberOfDependents >10)df_data.NumberOfDependents[ind[0]] = 10"""### Train-Test Split"""###### Создание обучающего и тестового набора ###outcome_feature = df_data['SeriousDlqin2yrs']target_features = df_data.drop('SeriousDlqin2yrs', axis=1)fromsklearn.model_selection import train_test_split""" X_1: independent (target) variables for first data set Y_1: dependent (outcome) variable for first data set X_2: independent (target) variables for the second data set Y_2: dependent (outcome) variable for the second data set"""X_train, X_test, Y_train, Y_test = train_test_split(target_features, outcome_feature, test_size=0.5, random_state=0)fromsklearn.metrics import confusion_matrix, accuracy_score, classification_report, roc_auc_scoredef evaluate(model, X_train, X_test, y_train, y_test):y_test_pred = model.predict(X_test)y_train_pred = model.predict(X_train)print("TRAINIG RESULTS: \n===============================")clf_report = pd.DataFrame(classification_report(y_train, y_train_pred, output_dict=True))print(f"CONFUSION MATRIX:\n{confusion_matrix(y_train, y_train_pred)}")print(f"ACCURACY SCORE:\n{accuracy_score(y_train, y_train_pred):.4f}")print(f"CLASSIFICATION REPORT:\n{clf_report}")print("TESTING RESULTS: \n===============================")clf_report = pd.DataFrame(classification_report(y_test, y_test_pred, output_dict=True))print(f"CONFUSION MATRIX:\n{confusion_matrix(y_test, y_test_pred)}")print(f"ACCURACY SCORE:\n{accuracy_score(y_test, y_test_pred):.4f}")print(f"CLASSIFICATION REPORT:\n{clf_report}")"""# Desicion Tree"""fromsklearn import treeclf2 = tree.DecisionTreeClassifier(class_weight='balanced',min_impurity_split=1e-05,max_depth=6)clf2.fit(X_train,Y_train)scores_dict = { 'Desicion Tree': { 'Train': roc_auc_score(Y_train, clf2.predict(X_train)), 'Test': roc_auc_score(Y_test, clf2.predict(X_test)), },}evaluate(clf2, X_train, X_test, Y_train, Y_test)"""# GaussianNB"""fromsklearn.naive_bayes import GaussianNBgnb = GaussianNB(priors=[0.07,0.93])gnb.fit(X_train,Y_train)scores_dict['GaussianNB'] = { 'Train': roc_auc_score(Y_train, gnb.predict(X_train)), 'Test': roc_auc_score(Y_test, gnb.predict(X_test)), }evaluate(gnb, X_train, X_test, Y_train, Y_test)"""# Random forest"""fromsklearn.ensemble import RandomForestClassifierclf3 = RandomForestClassifier(class_weight='balanced', min_impurity_decrease=1e-05,max_depth=6 )clf3.fit(X_train,Y_train)scores_dict['Random forest'] = { 'Train': roc_auc_score(Y_train, clf3.predict(X_train)), 'Test': roc_auc_score(Y_test, clf3.predict(X_test)), }evaluate(clf3, X_train, X_test, Y_train, Y_test)"""# MLP"""fromsklearn.neural_network import MLPClassifierclf4 = MLPClassifier(activation="identity", tol= 0.1)clf4.fit(X_train, Y_train)scores_dict['MLP'] = { 'Train': roc_auc_score(Y_train, clf4.predict(X_train)), 'Test': roc_auc_score(Y_test, clf4.predict(X_test)), }evaluate(clf4, X_train, X_test, Y_train, Y_test)"""# Logistic Regression"""fromsklearn import linear_modelclf = linear_model.LogisticRegression(C=1e5,class_weight= {0:.1, 1:.9} )clf.fit(X_train,Y_train)scores_dict['Logistic Regression'] = { 'Train': roc_auc_score(Y_train, clf.predict(X_train)), 'Test': roc_auc_score(Y_test, clf.predict(X_test)), }evaluate(clf, X_train, X_test, Y_train, Y_test)ml_models = { 'Desicion tree': clf2, 'GaussianNB': gnb, 'Random forest': clf3, 'MLP': clf4, 'Logistic Regression': clf}for model in ml_models:print(f"{model.upper():{30}} roc_auc_score: {roc_auc_score(Y_test, ml_models[model].predict(X_test)):.3f}")scores_df = pd.DataFrame(scores_dict)scores_df.plot(kind='barh', figsize=(15, 8))

1. Айвазян С.А. Прикладная статистика. Классификация и снижение размерности / С.А. Айвазян [и др.]. – М.: Финансы и статистика, 1989. – 607 с.
2. Вандерплас Д. Python для сложных задач: наука о данных и машинное обучение. – СПб.: Питер, 2018. – 576 с.
3. Горбань А.Н. Обобщенная аппроксимационная теорема и вычислительные возможности нейронных сетей / А.Н. Горбань // Сиб. журн. вычисл. математики. – 1998. – Т. 1, № 1. – С. 11–24.
4. Кобзарь А. И. Прикладная математическая статистика. – М.: Физматлит, 2006. – 626–628 с.

Вопрос-ответ:

Возможно ли применение методов машинного обучения для анализа данных в банковской сфере?

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

Какие задачи можно решать с помощью методов машинного обучения в банковской сфере?

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

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

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

Какая формализация задачи анализа данных кредитного скоринга?

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

Как описать структуру выбранных наборов данных в программных модулях для анализа данных в банковской сфере?

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

Какие методы машинного обучения можно применить в банковской сфере?

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

Какие решения существуют для интерактивного анализа данных клиентов банка?

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

Какую задачу решает анализ данных кредитного скоринга в банковской сфере?

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