МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «САРАТОВСКИЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИМЕНИ Н. Г. ЧЕРНЫШЕВСКОГО» Кафедра теории функций и стохастического анализа ПРИМЕНЕНИЕ АЛГОРИТМОВ КЛАССИФИКАЦИИ К АНАЛИЗУ ДАННЫХ БАКАЛАВРСКАЯ РАБОТА Студентки 4 курса 451 группы направления 38.03.05 — Бизнес-информатика механико-математического факультета Максимкиной Анастасии Эдуардовны Научный руководитель доцент, д. ф.-м. н. С. П. Сидоров Заведующий кафедрой д. ф.-м. н., доцент С. П. Сидоров Саратов 2022 СОДЕРЖАНИЕ ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1 Задача классификации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1 Проведение классификации в R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 Практическое применение методов классификации . . . . . . . . . . . . . . 5 1.2.1 Классификация как необходимый предварительный этап статистической обработки данных . . . . . . . . . . . . . . . . . . . . . . . . 6 1.2.2 Классификация в задачах прогнозирования экономико-социологических ситуаций для отдельных показателей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Постановка задачи классификации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 Математическая постановка задачи обучения . . . . . . . . . . . . . . . . . . . . 7 2 Логистическая регрессия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3 Дерево решений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 4 Решение задачи классификации на медицинских данных . . . . . . . . . . . . . 17 4.1 Решение задачи классификации методом логистической регрессии17 4.2 Решение задачи классификации методом дерева решений . . . . . . . . 23 5 Решение задачи кредитного скоринга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.1 Решение задачи кредитного скоринга методом логистической регрессии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 5.2 Решение задачи кредитного скоринга методом дерева решений . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 ЗАКЛЮЧЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ . . . . . . . . . . . . . . . . . . . . . . . 39 Приложение А Листинг программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 ВВЕДЕНИЕ Машинное обучение представляет собой обширный подраздел искусственного интеллекта, изучающий методы построения алгоритмов для анализа данных и получения выводов и выноса решения или предсказания в отношении чего-либо. Подход, при котором прошлые данные или примеры используются для первоначального формирования и совершенствования схемы предсказания, называется методом машинного обучения. Общая задача машинного обучения заключается в восстановлении зависимости между входными и выходными элементами с целью предсказания будущего выхода по заданному входу. Целью машинного обучения является построение максимально точной модели на основе данных и затем использования этой модели для предсказаний в будущем [1]. В зависимости от наличия или отсутствия прецедентной информации различают ряд категорий машинного обучения: контролируемое обучение или “обучение с учителем”, неконтролируемое обучение, обучение с подкреплением. Большая вариативность позволяет применять методы машинного обучения для данных различных типов в самых разных областях: биоинформатике, медицинской диагностике, технике. Широкий спектр приложений методы машинного обучения получили в экономике. Так они используются для обнаружения мошенничества, кредитного скоринга, биржевого технического анализа. В современных условиях функционирования социальноэкономических систем проблема получения приемлемого прогноза может быть решена за счет комбинирования традиционных классических методов совместно с методами интеллектуального прогнозирования [1]. Одним из популярных направлений финансового анализа в последние годы является прогнозирование цен акций и поведения фондовых индексов на основе данных о предыдущих торговых периодах, т.к. положение на финансовых рынках оказывает непосредственное влияние на окружающую экономическую обстановку. Для получения релевантных результатов необходимы подходящие инструменты и корректные алгоритмы, в связи с чем методы машинного обучения и data mining получили широкое применение при анализе и прогнозировании финансовых рынков. Существует множество методов 3 машинного обучения эффективно применяемых для данного класса задач: искусственные нейронные сети, деревья принятия решений, логистическая регрессия, генетический алгоритм [2]. В представленной работе рассматривается два популярных методы логистическая регрессия и дерево решения. В данной работе 5 раздела. Цель первого раздела описать, как проводится классификация на языке R. Также показать, где на практике применяются эти методы классификации и понять в чём заключается задача классификации. Чтобы ответить на поставленные вопросы, будут использоваться учебное пособие Сидорова С. П., Дудова С. И. под названием «Введение в интеллектуальные информационные системы», учебное-методическое пособие для студентов Балаш В. А., Сидорова С. П., Снарской Е. С., Файзлиева А. Р. «Ведение в анализ данных на языке R», а также книга «R. Книга рецептов: Проверенные рецепты для статистики, анализа и визуализации данных», авторами которой являются Дж. Лонг и Пол Титор. Во втором, третьем, четвёртом и пятом разделах проводится классификация методом логистической регрессии и дерева решений на языке R. Описания методов будут сопровождаться примерами данных из области медицины и экономики. Также будут представлены не сложные скрипты на языке R, дающие возможность легко воспроизвести все расчёты. В качестве источников информации используются различные учебные пособия о программировании и анализе данных на языке R. 4 1 Задача классификации 1.1 Проведение классификации в R Как уже говорилось выше, в данной работе будет рассмотрено проведение классификации в R. В задаче классификации зависимая переменная является категориальной, то есть может принимать конечное число значений. Классификация относится к классическим задачам машинного обучения и состоит в прогнозировании класса входного вектора на основе одной зависимой переменной [2]. Также будет рассмотрен вопрос связанный с оценкой качества модели классификации. Алгоритм классификации вычисляет вероятность принадлежности к одному классу, затем входному вектору присваивается тот класс, вероятность принадлежности к которому вектора больше. Обычно исследователю при проведении классификации необходимо найти величину порога, при привышении которого вектор принадлежит к одному классу, и в противном случае к другому. 1.2 Практическое применение методов классификации Методы классификации «обслуживают» весьма широкий спектр прикладных задач в различных сферах деятельности. Например, в медицине это может быть диагностика состояния пациента по комплексу наблюдаемых признаков. В геофизике — прогноз степени перспективности месторождения нефти или газа, в области финансов — оценка уровня кредитоспособности клиента или прогноз тенденции поведения рынка ценных бумаг, в экономике — разнообразные задачи типологизации объектов и прогноза социальноэкономического поведения «хозяйствующего субъекта», в маркетинге — позиционирование нового товара среди существующих, в технике — диагностика состояния турбины или двигателя, контроль уровня качества продукции и др [3]. Проблемы, при решении которых возникает задача классификации: — классификация как необходимый предварительный этап статистической обработки данных; — классификация в задачах прогнозирования экономико-социологических ситуаций для отдельных показателей. 5 1.2.1 Классификация как необходимый предварительный этап статистической обработки данных Пусть исследуется зависимость интенсивности спроса потребителей xp от ряда экономических и географических факторов x1 , x2 , ..., xp−1 таких, как средний заработок, возможности профессионального роста, географические условия и т.п. Естественно предположить, что для различных однородных групп индивидуумов одни и те же факторы влияют на xp в разной степени, а иногда и в противоположных направлениях. Поэтому до применения анализа следует разбить все имеющиеся в нашем распоряжении данные на однородные классы и решать далее поставленную задачу отдельно для каждого класса. Только в этом случае можно ожидать, что полученные коэффициенты регрессии xp по x1 , x2 , ..., xp−1 будут допускать содержательную интерпретацию, а мера тесноты между xp и x1 , x2 , ..., xp−1 окажется достаточно высокой [3]. 1.2.2 Классификация в задачах прогнозирования экономико-социологических ситуаций для отдельных показателей Пусть объект исследования — семья. Всё факторное пространство разбивается на два подпространства: пространство X = {x} и пространство Y = {y}, где компонентами вектора y = (y1 , ..., ym ) описывается социальноэкономическое поведение семьи, а компоненты вектора x = (x1 , ..., xm ) описывают половозрастную и профессиональную структуру семьи, а также среднедушевой доход. Примем в качестве априорного допущения, что отдельные параметры и ситуации в пространстве X в какой-то мере поддаются регулированию, и легче прогнозируются во времени, чем в пространстве Y . Логическая схема исследования такова: производится разбиение обследуемых объектов (x, y) на классы отдельно в каждом из подпространств X и Y ; устанавливается доля представительства классов из X в каждом отдельном классе из Y ; используя прогнозирование и регулирование признаков в пространстве X, возможно и модели регрессии Y по X , прогнозируется объем и структуру потребления по стране в целом [4]. 6 1.3 Постановка задачи классификации Пусть некто, например, учитель, предъявляет ситуации и о каждой сообщает, к какому из k классов она относится. Для простоты k = 2, так как при любом другом числе классов последовательным разделением на два класса можно построить разделение и на k классов. Для этого достаточно провести k разделений по принципу: первое — отделяет элементы первого класса от всех остальных, а j-е — элементы j-го класса от всех остальных. Будем считать, что входная ситуация описывается n-мерным вектором x = (x1 , ..., xn ). Координаты этого вектора могут выражать те или иные характеристики объекта, например финансовые показатели предприятия, значения симптомов в задачах медицинской диагностики, значения параметров систем в технических задачах распознавания и т.д. Последовательность ситуаций с указанием, к какому классу они относятся, называется обучающей последовательностью [5]. Задача заключается в том, чтобы построить такую программу, которая, используя обучающую последовательность, вырабатывала бы правило, позволяющее классифицировать вновь предъявляемые «незнакомые» ситуации (вообще говоря, отличные от входивших в обучающую последовательность). Способность к обучению характеризуется двумя понятиями: — качеством полученного решающего правила (вероятностью неправильных ответов — чем меньше эта вероятность, тем выше качество); — надежностью получения решающего правила с заданным качеством (вероятностью получения заданного качества — чем выше эта вероятность, тем выше надежность успешного обучения). Задача сводится к созданию такого обучающего устройства, которое по обучающей последовательности строило бы решающее правило, качество которого с заданной надежностью было бы не ниже требуемого [6]. 1.4 Математическая постановка задачи обучения В среде, которая характеризуется распределением вероятностей P (x), случайно и независимо появляются ситуации x. Существует «учитель», который классифицирует их, то есть относит к одному из k классов (для простоты k = 2). Пусть он делает это согласно условной вероятности P (t|x), где t = 1 7 означает, что вектор x отнесен к первому классу, а t = 0 — ко второму. Ни характеристика среды P (x), ни правило классификации P (t|x) нам не известны. Однако известно, что обе функции существуют, то есть существует совместное распределение вероятностей P (x, t) = P (x) · P (t|x). Пусть теперь определено множество Ω решающих правил F (x, α). В этом множестве каждое правило определяется заданием параметра α (обычно это вектор). Все правила F(x,α) — характеристические функции, то есть могут принимать только одно из двух значений — нуль или единицу: 1, x − принадлежит первому классу, F (x, α) = 0, x − принадлежит второму классу, Для каждой функции F (x, α) ∈ Ω может быть определено качество Q(α) как вероятность различных классификаций ситуаций x с учителем. 1. В случае, когда пространство X дискретно и состоит из точек x1 , ..., xN Q(α) = 1 X N X (t − F (xi , α))2 P (xi )P (t|xi ), t=0 t=1 где P (xi ) — вероятность возникновения ситуации xi . 2. В случае, когда в пространстве X существует плотность распределения p(x), 1 Z X Q(α) = (t − F (x, α))2 p(x)P (t|x)dx. t=0 3. В общем случае можно сказать, что в пространстве X задана вероятностная мера P (x, t), тогда Z Q(α) = (t − F (x, α))2 dP (x, t). x,t Среди всех функций F (x, α) есть такая F (x, α0 ), которая минимизирует вероятность ошибок. Эту функцию (или близкую к ней) и следует найти. Так 8 как совместное распределение вероятностей P (x, t) неизвестно, поиск ведется с использованием обучающей последовательности (x1 , t1 ), (x2 , t2 ), ..., (xN , tN ), то есть случайной и независимой выборки примеров фиксированной длины N . Нельзя найти алгоритм, который по конечной выборке безусловно гарантировал успех поиска. Успех можно гарантировать лишь с некоторой вероятностью 1 − η. Таким образом, задача заключается в том, чтобы для любой функции P (x, t) среди характеристических функций F (x, α) найти по обучающей последовательности фиксированной длины N такую функцию F (x, α∗ ), о которой с надежностью, не меньшей 1 − η, можно было бы утверждать, что ее качество отличается от качества лучшей функции F (x, α0 ) на величину, не превышающую ϵ. Такая задача не является новой в математике. Она известна в более общей постановке: требуется найти минимум по α функционала Z Q(α) = G(z, α)dP (z), если неизвестна функция распределения P (z), но зато дана случайная и независимая выборка z 1 , ..., z N . Эта задача получила название задачи о минимизации величины среднего риска. Она имеет простую интерпретацию: функция G(z, α) для всякого фиксированного значения α определяет величину потерь при появлении сигнала z. Средняя величина потерь для фиксированного значения параметра определяется согласно постановки задачи. Задача заключается в том, чтобы выяснить, при каких значениях параметра α средняя величина потерь (или величина среднего риска) будет минимальной [7]. Задача классификации есть частный случай задачи и минимизации среднего риска. 9 2 Логистическая регрессия Логистическая регрессия используется для прогнозирования класса примеров (векторов) на основе одной или нескольких зависимых предикторных переменных x. Выходом является результат (переменная), которая может принимать только два возможных значения: «да» или «нет», «больной» или «не больной», 0 или 1 и т.п. Логистическая регрессия относиться к семейству обобщенных линейных моделей (GLM), и является расширением хорошо известной модели линейной регрессии. Другими названиями модели являются двоичная логистическая регрессия, биномиальная логистическая регрессия и логит-модель [8]. Заметим, что логистическая регрессия не возвращает непосредственно класс наблюдений, а оценивает вероятность принадлежности к классам, которая находится в диапазоне от 0 до 1. Исследователю необходимо определить пороговую вероятность, которая отделяет один класс от другого. По умолчанию это пороговое значение равно p = 0.5, но для большинства практических задач эту величину нужно выбирать на основе цели анализа [9]. Функция логистической регрессии, которая используется для прогнозирования класса наблюдения с учетом предикторной переменной x, определяемую как ey p= 1 + ey и представляет собой s-образную кривую. Имеем p= 1 , 1 + e−y где y = b0 + b1 x, p = p(x = 1|x) есть условная вероятность того, что x принадлежит классу 1. Имеем p = eb0 +b1 x , 1−p что после логарифмирования обеих сторон приводит к log p = b0 + b1 x, 1−p 10 где b0 и b1 ∈ Rn есть коэффициенты регрессии. Положительная величина одного из компонентов вектора b1 указывает на то, что увеличение соответствующего компонента x приведет к увеличению вероятности p. Напротив, отрицательный компонент в b1 говорит о том, что увеличение соответствующего компонента вектора x вызовет уменьшение. p Величина log 1−p называется логит (logit) [10]. Коэффициенты влияют на вероятность того, что пример принадлежит p можно рассматривать как отношение одному из классов. Величину log 1−p вероятности «успеха» к вероятности «не успеха». Например, если вероятность дефолта равна 0.8, вероятность того, что дефолта не будет, равна 1-0.8 = 0.2, и логит равен 4.0. Потребуются следующие библиотеки R для манипулирования и визуализации данных, для проведения классификации. library(tidyverse) library(caret) theme_set(theme_bw()) Нужно заметить, что логистическая регрессия может использоваться для данных, которые содержат как непрерывные, так и категориальные предикторные переменные. Прежде чем приступать к проведению классификации, при решении практических задач необходимо сначала убедиться, что зависимые переменныепредикторы являются нормально распределенными. В противном случае нужно преобразовать исходные данные. Кроме того, повысить силу модели можно, удалив сильно коррелированные переменные-предикторы. Наличие сильно коррелированных предикторных переменных может привести к нестабильной работе полученной модели [11]. 11 3 Дерево решений Деревья решения являются одним из наиболее популярных подходов к решению задач интеллектуального анализа данных. Они создают иерархическую структуру классифицирующих правил типа «если. . . , то. . . », имеющую вид дерева. Для того чтобы решить, к какому классу отнести некоторый объект или ситуацию, требуется ответить на вопросы, стоящие в узлах этого дерева, начиная с его корня. Для бинарных деревьев вопросы имеют вид «значение параметра A больше x?». Если ответ положительный, осуществляется переход к правому узлу следующего уровня, если отрицательный — то к левому узлу; затем снова следует вопрос, связанный с соответствующим узлом [12]. Популярность подхода связана с наглядностью и понятностью. Но очень остро для деревьев решений стоит проблема значимости. Дело в том, что отдельным узлам на каждом новом построенном уровне дерева соответствует все меньшее и меньшее число записей данных – дерево дробит данные на большое количество частных случаев. Чем больше этих частных случаев, чем меньше обучающих примеров попадает в каждый такой частный случай, тем менее уверенной становится их классификация. Если построенное дерево слишком «кустистое» – состоит из неоправданно большого числа мелких веточек – оно не будет давать статистически обоснованных ответов. Как показывает практика, в большинстве систем, использующих деревья решений, эта проблема не находит удовлетворительного решения. Кроме того, деревья решений дают полезные результаты только в случае независимых признаков. В противном случае они лишь создают иллюзию логического вывода [13]. Область применения деревья решений в настоящее время широка, но все задачи, решаемые этим аппаратом, могут быть объединены в следующие три класса [14]: — Описание данных: деревья решений позволяют хранить информацию о данных в компактной форме, вместо них мы можем хранить дерево решений, которое содержит точное описание объектов. — Классификация: деревья решений отлично справляются с задачами классификации, т.е. отнесения объектов к одному из заранее известных классов. Целевая переменная должна иметь дискретные значения. 12 — Регрессия: если целевая переменная имеет непрерывные значения, деревья решений позволяют установить зависимость целевой переменной от независимых (входных) переменных. Например, к этому классу относятся задачи численного прогнозирования. Преимущества использования деревьев решений: — Простота восприятия. Результат построения дерева решений легко интерпретируется пользователем. Дерево решений наглядно поясняет, почему конкретный объект отнесен к тому или иному классу. — Алгоритм построения дерева решений не требует выбора входных атрибутов. Для построения используются все атрибуты, и алгоритм сам выбирает наиболее значимые и строит на их основе дерево решений. — Быстрота обучения. — Для построения дерева требуется малый объем информации, поэтому они занимают мало места в памяти. — Относительная гибкость. Деревья решений позволяют работать с непрерывными и символьными целевыми признаками. Во многих алгоритмах построения деревьев решений имеется возможность обработки пропущенных значений. Это позволяет применять деревья решения в самых разных задачах. Дерево решений можно определить как структуру, которая состоит из [15]: — узлов-листьев, каждый из которых представляет определенный класс; — узлов принятия решений, специфицирующих определенные тестовые процедуры, которые должны быть выполнены по отношению к одному из значений атрибутов; из узла принятия решений выходят ветви, количество которых соответствует количеству возможных исходов тестирующей процедуры. Более формально дерево можно определить как конечное множество Т, состоящее из одного или множества узлов, таких, что — имеется один специально обозначенный узел, называемый корнем данного дерева. — остальные узлы (исключая корень) содержатся в m ≥ 0 попарно непересекающихся множествах T1 , . . . , Tm , каждое из которых в свою оче13 редь является деревом. Деревья T1 , . . . , Tm называются поддеревьями данного корня. Из данного определения следует, что каждый узел дерева является корнем некоторого поддерева, которое содержится в этом дереве. Число поддеревьев данного узла называется степенью этого узла. Узел с нулевой степенью называется листом. Уровень узла по отношению к дереву T определяется следующим образом: говорят, что корень имеет уровень 1, а другие узлы имеют уровень на единицу выше их уровня относительно содержащего их поддерева Tj этого корня [16]. Если в дереве существует относительный порядок поддеревьев T1 , . . . , Tm , то говорят, что дерево является упорядоченным; в случае, когда в упорядоченном дереве m ≥ 2, имеет смысл называть T2 «вторым поддеревом» данного корня и т.д.; если два дерева, отличающиеся друг от друга только относительным порядком узлов поддеревьев, не считать различными, то в этом случае говорят, что дерево является ориентированным, поскольку здесь имеет значение только относительная ориентация узла, а не их порядок [17]. Стандартная терминология для структур типа дерева: каждый корень является отцом корней своих поддеревьев, последние являются братьями между собой и сыновьями своего отца. Корень же всего дерева не имеет отца. Дерево решения представляет один их способов разбиения множества данных на классы или категории. Корень дерева неявно содержит все классифицируемые данные, а листья – определенные классы после выполнения классификации. Промежуточные узлы дерева представляют пункты принятия решения о выборе или выполнения тестирующих процедур с атрибутами элементов данных, которые служат для дальнейшего разделения данных в этом узле. Можно рассматривать дерево решений и с другой точки зрения: промежуточные узлы дерева соответствуют атрибутам классифицируемых объектов, а дуги – возможным альтернативным значениям этих атрибутов. Итак, мы имеем дерево решений и хотим использовать его для распознавания нового объекта. Обход дерева решений начинается с корня дерева. На каждом внутреннем узле проверяется значение объекта Y по атрибуту, который соответствует проверке в данном узле, и, в зависимости от получен14 ного ответа, находится соответствующее ветвление, и по этой дуге двигаемся к узлу, находящему на уровень ниже и т.д. Обход дерева заканчивается как только встретится узел решения, который и дает название класса объекта Y [18]. Дерево классификации используется для предсказания отклика y , который является категориальной переменной (меткой класса). В данной работе рассматривается процедура построения дерева решений для классификации: 1. Среди предикторов X1 , X2 , . . . , Xk для правила разбиения выбирается Xp , значения которого позволяют разделить наблюдения по отклику y наилучшим образом (чтобы каждое из двух подмножеств было однородным по значению y внутри подмножества и различным по отношению друг к другу). Для категориальной переменной Xp в качестве условия разделения выбирается равенство одному из возможных значений Xp в выборке. Для количественной переменной условием является неравенство Xp ≤ l , где l – некоторое значение на интервале от минимального значения Xp до максимального значения в выборке наблюдений. 2. Наблюдения в левом узле такие, для которых Xp условие – истина (true), а в правом – все остальные, т.е. наблюдения, для которых условие разбиения ложно (false). 3. Для каждого из получившихся при разбиении узлов вычисляются процентные доли значений зависимой переменной и выносится решение: к какой категории будет принадлежать попавшее в нее наблюдение. 4. Если в узле достигнута однородность (т.е. все наблюдения, оказавшиеся в узле, из одного класса), то для этого узла процедура закончена. 5. Если в узле оказалось множество наблюдений из разных классов, то процесс бинарного разбиения для этого узла может быть продолжен с пункта 1 (в дальнейшем разбиении для текущего узла учитываются только наблюдения, попавшие в этот узел). В качестве статистического критерия, оценивающего качество разбиения, используется индекс Джини. Индекс Джини (Gini impurity): 15 IG = 1 − m X p2i , i=1 где p2i - частоты представителей разных классов в узле дерева; m - число классов для отклика y. Деревья решений (если не ограничивать глубину и не вводить иные ограничения) могут давать излишне детализированную картину, когда в листьях сосредоточено мало наблюдений. Такая ситуация называется переобучением. Дерево решений строится с целью определять по значениям предикатов прогноз отклика для нового наблюдения. Переобученное дерево дает минимальную ошибку на обучающей (тренировочной) выборке и очень часто ошибается на проверочной (тестовой). Соответственно, прогноз на переобученном дереве проигрывает прогнозу на основе дерева, в котором решена проблема переобучения тем или иным способом: за счет ограничений на глубину дерева, на количество наблюдений в узле, для которого возможно расщепление и т.п., либо строится максимально возможное дерево, а затем на основании определенных критериев отсекаются лишние ветки (убирается несущественная детализация) [19]. 16 4 Решение задачи классификации на медицинских данных 4.1 Решение задачи классификации методом логистической регрессии Ниже проводится решение задачи классификации методом логистической регрессии на языке R, реализованный код представлен в приложении А. Этот набор данных взят из Национального института диабета, болезней пищеварения и почек. Цель набора данных - предсказать, есть ли у пациента диабет, основываясь на определенных диагностических измерениях, включенных в набор данных. На выбор этих экземпляров из более крупной базы данных было наложено несколько ограничений. В частности, все пациенты здесь - женщины в возрасте не менее 21 года. Набор данных состоят из нескольких медицинских переменных, категориальная переменная - Outcome - Результат. Предикторные переменные включают: Pregnancies - беременности, Glucose - глюкоза, BloodPressure кровяное давление, SkinThickness - толщина кожи, Insulin - инсулин, BMI - индекс массы тела, DiabetesPedigreeFunction - наследственность, Age - возраст. На рисунке 1 показана структура данных. Рисунок 1 – Структура данных Для улучшения качеста модели вычисляется корреляционная матрица. Корреляционная матрица — это матрица, которая представляет корреляцию пар всех переменных. На рисунке 2 показана матрица корреляции для медицинских данных [19]. Ниже на рисунке 3 показана визуализация подсчитанной выше матрицы. 17 Рисунок 2 – Матрица корреляции Рисунок 3 – Матрица корреляции Сильной корреляции между переменными не наблюдается. Таким образом, нет необходимости отбрасывать ни одной из них для анализа. Прежде всего нужно случайным образом разбить данные на два множества: 18 — обучающая (куда войдёт 75% примеров из общего набора данных, она будет использоваться для построения модели); — тестовая (25%, будет применена для оценки модели). Всего данные содержат 768 наблюдений из них 614 в обучающей выборке и 154 в тестовой. Для вычисления логистической регрессии используется функция glm(). Для начала укажем опцию family = binomial, которая сообщает R, что наша модель является биномиальной и является логистической регрессией. Так следующий результат на рисунке 4 показывает оценку коэффициентов логистической регрессии [20]. Рисунок 4 – Множественная модель логистической регрессии Таблица содержит оценки коэффициентов регрессии и значения из уровней значимости. Столбец Estimate содержит оценки коэффициентов регресии, включая свободный член b0 и оценки коэффициентов, связанных с каждой переменной - предикатором. Столбец Std.Error показывает стандартные ошибки оценок коэффициентов и помогает в оценивании точности коэффи19 циентов - чем больше стандартная ошибка, тем меньше уверенность в оценке. Столбец z-value дает значения z-статистики, которая является оценкой коэффициента из столбца Estimate, деленной на стандартную ошибку оценки (сторбец Std.Error). Наконец, столбец P r(> |z|) показывает значение pстатистики, соответствующее z-статистики. Чем меньше значение p-статистики, тем более значима оценка [20]. Таблица с результатами показывает, что из 8 предикаторов значимыми являются беременности, глюкоза, кровяное давление, индекс массы тела, наследственность. Можно заметить, что некоторые переменные не являются статистически значимыми. Но так как они не влияют на модель, нет необходимости отбрасывать их для анализа. Коэффициент при переменной glucose равен b = 0,0329581 и является положительным. Это означает, что увеличение глюкозы связано с увеличением вероятности диабета. Коэффициент BloodPressure равен b = -0,0127591 является отрицательным, т.е. при понижении кровяного давления вероятность наличия диабета выше. После того, как модель построена, она обычно может хорошо классифицировать примеры из обучающей выборки. Однако хороший процент правильной классификации на внутривыборочных данных обучающей выборки не гарантирует такую же успешную работу модели на вневыборочных данных. Поэтому после построения модели классификации необходимо оценить эффективность работы модели на новых примерах, которые не входили в обучающую выборку, то есть не использовались для обучения модели [21]. Этап оценки точности предсказания модели и ошибки прогнозирования на новом наборе тестовых данных является крайне важным. Фактический результат каждого примера из набора тестовых данных известен, поэтому оценку эффективности предсказанной силы модели можно проводить на основе сравнения предсказанных моделью значений с известными значениями. Наиболее распространенными метриками и методиками оценки эффективности моделей, предназаначенных для классификации, являются [21]: — матрица ошибок, которая показывает, сколько объектов класса i были распознаны как объект класса j; — точность и специфичность, которые представляют собой основные показатели эффективности модели классифифкации; 20 — ROC, которая представляет собой графическое изображение общей эффективности модели, показывая пропорцию истинных положительных и ложных срабатываний при всех возможных значениях отсечки вероятности. Область под кривой (AUC) суммирует общую эффективность классификатора. Итак, чтобы оценить работоспособность модели, необходимо проверить, на сколько она точна на тестовых данных. Для этого находятся предсказанные моделью вероятности принадлежности классам примеров тестовой выборки на основе значений предикаторных переменных для этих примеров. Далее нужно рассчитать, что пример принадлежит классу 1, если значение вероятности выше некоторого порогового значения (по умолчанию 0,5). Функция предсказания R predict() может быть использована для прогнозирования вероятности наличия диабета на основе значений предикатора. Ниже на рисунке 5 показан результат нахождения предсказанных вероятностей. Рисунок 5 – Вероятности наличия диабета Далее сравниваются фактические результаты с прогнозируемыми. Для этого используется матрица ошибок (Confusion Matrix). Confusion Matrix представляет собой таблицу, которая описывает эффективность классификации для каждой модели на основе тестовых данных. В данном случае "1"и "0"в строках указывают есть ли диабет у женщины или нет, в то время как столбцы "FALSE"и "TRUE"указывают, предсказания, что диабет имеет место быть или нет. Приведенная ниже таблица на рисунке 6 просто показывает пропорции. Рисунок 6 – Confusion Matrix 21 Диагональные элементы матрицы ошибок указывают долю правильных предсказаний модели, а вне диагонали раположены доли неправильных предсказаний [22]: — Истинно-положительное решение: это случаи, когда модель правильно предсказала, что пациент, положительные на диабет, классифицированы как больные диабетом; — Истинно-отрицательное решение: это случаи, когда модель правильно предсказала, что пациенты, не имеющие диаебет, классифицированы как не больные диабетом; — Ложно-положительное решение: модель предсказала наличие диабета, но у людей на самом деле диабнта не было (также известна как ошибка типа 1); — Ложно-отрицательное решение: модель предсказала отсутствие диабета, но на самом деле диабет был (также известна как ошибка типа 2). Коэффициент точности классификации (Accuracy) определяет как доля примеров, которые были правильно классифицированы, среди общего количества примеров [22]. На рисунке 7 показана матрица ошибок для тестовых данных. Рисунок 7 – Confusion Matrix Результат показывает, что логистическая регрессия правильно предсказала результат в 84% случаев. Это хорошая оценка для данной модели. Далее строится кривая ROC и вычисляется AUC (площадь под кривой), которые являются типичными показателями производительности для двоичного классификатора. На рисунке 8 показана кривая ROC для данной модели. Значения AUC лежат между 0 и 1. Чем выше значение, тем выше 22 точность. Результат расчётов 0,9, это говорит о том, что точность данной модели достаточно высокая. Рисунок 8 – ROC - кривая 4.2 Решение задачи классификации методом дерева решений Итак, модель, построенная методом логистической регрессии, является достаточно эффективной. Далее проводится классификация методом дерева решений на языке R, реализованный программный код представлен в приложении А. Данные делятся на тестовую и обучающую выборки в процентном соотношении 80% и 20% соответственно. Обучающий набор используется для построения модели дерева решений, а тестовый набор используется для проверки эффективности модели. 23 На данном этапе строится Дерево решений с помощью алгоритма rpart. Outcome . представляет собой формулу, которая говорит системе, что переменная Outcome зависит от всех признаков. Далее нужно визуализировать дерево. На этом шаге будет использовано библиотеку rpart.plot для построения нашего окончательного дерева решений [23]. Дерево решений для медицинских данных показано на рисунке 9. Рисунок 9 – Дерево решений По данному дереву можно увидеть, что, если показатель глюкозы в крови меньше 128, то у человека нет диабета, если показатель выше, то присутствует диабет. Если у человека содержание люкозы в крови больше 128 и индекс массы тела больше 30, можно сказать, что вероятность диабета высока. В данном дереве было использовано сокращение, т.е. для улучшения модели отсекаются лишние ветви. 24 Теперь, чтобы протестировать модель дерева решений, будет применён набор тестовых данных к данной модели. В программе для оценки модели type=class указывает на то, что решается задача классификации. Для сравнения фактических результатов с прогнозируемыми используется матрица ошибок. Как говорилось выше, матрица ошибок показывает сколько объектов класса i были распознаны как объект класса j. Диагональные элементы матрицы ошибок указывают долю правильных предсказаний модели, а вне диагонали расположены доли неправильных предсказаний. Рисунок 10 – Оценка точности модели 25 Коэффициент точности классификации (Accuracy) определяет как доля примеров, которые были правильно классифицированы, среди общего количества примеров [23]. Результат оценки модели показан на рисунке 10. Результат говорит о том, что достигнута точность 80% в наборе тестовых данных с 95% доверительным интервалом. Точность данной модели достаточно хорошая. Затем строится ROC-кривая. У высокоэффективного классификатора будет ROC-кривая, которая круто поднимается в верхний левый угол, то есть он будет правильно идентифицировать множество примеров одного класса без ошибочной классификации на множестве примеров другого класса как примеров из первого класса. Рисунок 11 – ROC-кривая 26 Область под кривой суммирует общую эффективность классификатора по всем возможным значениям вероятности, и представляет собой способность алгоритма классификации различать примеры одного класса от примеров другого. ROC-кривая представлена на рисунке 11. В данном примере площадь области под кривой составляет 0,84, что близко к максимуму. Таким образом такой классификатор можно считать хорошим. 27 5 Решение задачи кредитного скоринга 5.1 Решение задачи кредитного скоринга методом логистической регрессии Ниже проводится решение задачи кредитного скоринга методом логистической регрессии на языке R, реализованный программный код представлен в приложении А. В качестве кредитных данных взят набор по кредитным рискам, в котором содержится информация о заемщиках: person-age - возраст, person-income - годовой доход, person-home-ownership - наличие собственности, person-emplength - продолжительность работы (в годах), loan-intent - причина взятия кредита, loan-grade - оценка кредита, loan-amnt - сумма кредита, loan-intrateм - процентная ставка, loan-status - статус кредита, loan-percent-income - процентный доход, cb-person-default-on-file - есть ли не закрытые кредиты у человека, cb-person-cred-hist-length - кредитная история. Набор данных состоит из 32581 строки (наблюдения) и 12 столбцов (переменные). На рисунке 12 показана структура данных. Рисунок 12 – Структура кредитных данных С помощью команды summary представляется некоторая информация о характеристиках и распределении переменных, составляющих данные. Например, можно разделить все переменные на два класса: числовые и категориальные. Имеет место ещё одно разделение, например, person-age, person-income, person-home-ownership и person-emp-length зависят от личных характеристик людей, в то время как loan-intent, loan-grade, loan-amnt, loan-int-rate, loan28 status и loan-percent-income зависят от их кредитной активности. Последние две переменные представляют интерес только для второстепенных целей. Для дальшешего проведения классификации нужно разделить данные на обучающую и тестовую выборки в процентном соотношении 75% и 35% соответственно. Далее проводится оценка коэффициентов логистической регрессии. В качестве независимых переменных изначально используются все столбцы, в качестве зависимой - loan-status. Результат оценки показан на рисунке 13. Рисунок 13 – Модель логистической регрессии 29 Cb-person-default-on-file и cb-person-cred-hist-length не являются статистически значимыми, поэтому их следует удалить из модели. Также нужно исключить переменную loan-percent-income, чтобы избежать какой-либо мультиколлинеарности. Это связано с тем, что этот показатель представляет собой всего лишь соотношение между доходом и суммой кредита, поэтому он создаст избыточность при расчете [24]. Новая модель, после удаления соответствующих переменных, представлена на рисунке 14 Рисунок 14 – Модель логистической регрессии 30 Теперь получаем предупреждающее сообщение:“glm.fit: fitted probabilities numerically 0 or 1 occurred”. Это связано c экстремальным значением одной переменной, что приводит к тому, что прогнозируемые вероятности неотличимы от 0 или 1, это приводит к проблемам с вычислениями [25]. Можно решить эту проблему, удалив выбросы из person-income и снова запустив алгоритм. Результат показан на рисунке 15. Рисунок 15 – Модель логистической регрессии 31 Остатки отклонений выглядят хорошо, даже если значения не полностью центрированы на нуле и не симметричны. В данной модели кажется, что большая часть переменных статистически значима. Как говорилось выше, чтобы оценить работоспособность модели, необходимо проверить, на сколько она точна на тестовых данных. Для этого находятся предсказанные моделью вероятности пренадлежности классам примеров тестовой выборки на основе значений предикаторных переменных для этих примеров. Далее нужно рассчитать, что пример принадлежит классу 1, если значение вероятности выше некоторого порогового значения. Результат прогнозирования представлен на рисунке 16. Рисунок 16 – Вероятности оплаты кредита Далее сравниваются фактические результаты с прогнозируемыми. Для этого используется Confusion Matrix. В разделе 4 описано, что представляет собой такая матрица. Матрица для кредитных данных показана на рисунке 17. Рисунок 17 – Confusion Matrix Диагональные элементы матрицы ошибок указывают долю правильных предсказаний, а вне диагонали расположены доли неправильных предсказаний: — Истинно-положительное решение: это случаи, когда модель правильно предсказала, что клиенты, которые выплатили кредит, классифицированы как недопустившие дефолта; 32 — Истинно-отрицательное решение: это случаи, когда модель правильно предсказала, что клиенты, которые не выплатили кредит, классифицированы как допустившие дефолт; — Ложно-положительное решение: модель предсказала выплаченный кредит, но на самом деле кредит не выплочен (также известна как ошибка типа 1); — Ложно-отрицательное решение: модель предсказала отсутствие дефолта, но на самом деле кредит не выплочен (также известна как ошибка типа 2). Рисунок 18 – ROC-кривая Оценка точности данных и наблюдений составляет 85%. Это хорошая оценка для данной модели. Затем строится кривая ROC. О данной кривой говорится в разделе 4. Также в разделе 4 говорится о показателе AUC. Для рассматриваемой модели 33 ROC-кривая и AUC показаны на рисунке 18. Чем выше значение AUC, тем выше точность. Результат составляет 0,87, что говорит о хорошей точности модели. 5.2 Решение задачи кредитного скоринга методом дерева решений По результатам классификации методом логистической регрессии можно сделать вывод, что точность модели является хорошей. Далее проводится классификация методом дерева решений на языке R, реализованный программный код представлен в приложении А. Для проведения классификации данные делятся на тестовую и обучающую выборки в процентном соотношении 80% и 20% соответственно. Обучающий набор используется для построения модели дерева решений, а тестовый набор используется для проверки эффективности модели. Дерево решений с помощью алгоритма rpart. В данном случае переменная loan-status зависит от всех переменных.Для визуализации дерева будет использована библиотека rpart.plot для построения окончательного дерева решений. Дерево решений для кредитых данных показано на рисунке 19. По данному дереву можно увидеть, что, если соотношение между полученным кредитом и годовым доходом заемщика меньше 0.31, то он выплатит кредит, если больше, то не выплатит. Но, если соотношение между полученным кредитом и годовым доходом меньше 0, 31, а оценка кредита - D, E, F, G, то кредит будет выплачен и т. д. В данном дереве также было использовано сокращение, т.е. для улучшения модели отсекаются лишние ветви. 34 Рисунок 19 – Дерево решений Теперь, чтобы протестировать модель дерева решений, будет применён набор тестовых данных к данной модели. Оценивание модели проводится таким же способом, как в предыдущей модели. Матрица ошибок для кредитных данных показана на рисунке 20. 35 Рисунок 20 – Оценка точности модели Результат показывает, что алгоритм дерева решения правильно предсказал результат в 91% случаев. Это очень хорошая оценка для данной модели. Затем строится ROC-кривая. Кривая для кредитных данных представлена на рисунке 21. Площадь области под кривой составляет 0,86, что близко к максимуму. Таким образом такой классификатор можно считать хорошим. 36 Рисунок 21 – ROC-кривая 37 ЗАКЛЮЧЕНИЕ Логистическая регрессия и дерево решений являются двумя наиболее популярными и основными алгоритмами классификации, которые используются сегодня. Ни один из алгоритмов не лучше другого, и его превосходная производительность часто приписывается характеру обрабатываемых данных. Например, в данной равботе лучший результат классификации на медицинских данных показал метод логистической регрессии. Для кредитных данных напротив алгоритм дерева решений показал лучший результат классификации. Необходимо отметить, что оценка адекватности полученных результатов должна сопровождаться привлечением экспертов в предметной области. Интерпретация модели и определение её качества должно делаться экспертом, так как это требует более глубокого понимания процесса, выходящее за пределы анализируемых данных. Многие методы анализа могут демонстрировать прекрасные результаты на конкретных данных, но при этом полностью терять способность к обощению и на тестовых данных выдавать очень плохие результаты. Если на различных тестовых данных модель даёт приемлемые результаты, то в таком случае она имеет право на жизнь. 38 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1 Балаш, В. А. Введение в анализ данных на языке R : учебно-методическое пособие для студентов механико-математического факльтета / В. А. Балаш, С. П. Сидоров, Е. С. Снарская, А. Р. Файзлиев. – Саратов : Изд-во Сарат. ун-та, 2018. – 104 с. 2 Сидоров, С. П. Введение в интеллектуальные информационные системы: учебное пособие для студентов механико-математического факультета, обучающихся по специальности "Прикладная информатика (по областям)"/ С. П. Сидоров, С. И. Дудов ; 2-е издание перераб., доп. – Саратов : Саратовский гос. ун-т им. Н. Г. Чернышевского, 2007. – 111 с. 3 Шитиков, В. К. Классификация, регрессия и другие алгоритмы Data Mining с использованием R / В. К. Шитиков, С. Э. Мастицкий. – Тольятти : Институт экологии Волжского бассейна РАН, 2017. – 351 с. 4 Шорохова, И. С. Статистические методы анализа: учебное пособие / И. С. Шорохова, Н. В. Кисляк, О. С. Мариев. – Екатеринбург, : Изд-во Урал. ун-та, 2015. – 300 с. 5 Мастицкий, С. Э. Статистический анализ и визуализация данных с помощью R / С. Э. Мастицкий, В. К. Шитиков. – М. : ДМК Пресс, 2015. – 496 с. 6 Зарядов, И. С. Введение в статический пакет R: типы переменных, структуры данных, чтение и запись информации, графика / С. И. Зарядов. – М. : Изд-во РУДН, 2010. – 207 с. 7 Буховец, А. Г. Статистический анализ данных в системе R. Учебное пособие / А. Г. Буховец, П. В. Москалев, В. П. Богатова, Т. Я. Бирючинская ; под ред. проф. А. Г. Бухавцова. – Воронеж, : ВГАУ, 2010. – 124 с. 8 Ghatak, A. Machine Learning with R / A. Ghatak. – Kolkata : Springer Nature Singapore, 2017. – 210 с. 9 Гельман, Э. Регрессия : теория и практика. С примерами на R и Stan / Э. Гельман, Д. Хилл, А. Вехтари. – М. : ДМК Пресс, 2022. – 748 с. 39 10 Белько, И. В. Применении логистической регрессии при обработке экономических данных / И. В. Белько, Е. А. Криштапович // Экономика, моделирование, прогнозирование. — 2018. — № 12. — С. 177-180. — EDN ARPJCG. 11 Давыденко, И. Г. Возможности и границы использования модели бинарной логистической регрессии для оценки финансовой устойчивости и риска дефолта банка / И. Г. Давыденко, Е. Ю. Козаченко // Экономика устойчивого развития. — 2021. — № 1(45). — С. 141-145. — EDN IKUJMA. 12 Адуенко, А. А. Выбор признаков и шаговая логистическая регрессия для задачи кредитного скоринга / А. А. Адуенко // Машинное обучение и анализ данных. – 2012. – Т. 1. – № 3. – С. 279-291. – EDN OXWKHD. 13 Глухова, А. И. Сущность метода принятия управленческих решений "дерево решений"/ А. И. Глухова // Master’s Journal. — 2014. — № 2. -– С. 316-321. -– EDN THAKHB. 14 Усачев, П. Решение задачи классификации на основе алгоритмов дерева принятия решений / П. Усачев // Современные технологии в науке и образовании – СТНО-2018 : Сборник трудов международного научнотехнического форума: в 11 томах, Рязань, 28 февраля – 02 2018 года / Под общ. ред. О.В. Миловзорова. — Рязань : Рязанский государственный радиотехнический университет, 2018. — С. 73-76. — EDN XVSNGP. 15 Потехин, Н. В. Деревья принятия решений для решения задач прогнозирования и классификации / Н. В. Потехин // Материалы и методы инновационных исследований и разработок : сборник статей Международной научно-практической конференции, Оренбург, 20 октября 2018 года. — Оренбург : Общество с ограниченной ответственностью "Аэтерна 2018. – С. 28-29. – EDN NZJWQK. 16 Кабаков, Р. И. R в действии. Анализ и визуализация данных в программе R / Р. И. Кабаков ; пер. с англ. П. А. Волковой. – М. : ДМК Пресс, 2014. – 588 с. 17 Макарова, Н. В. Статистический анализ медико-биологических данных с использованием пакетов статистических программ Statistica, SPSS, 40 NCSS, SYSTAT : методическое пособие / Н. В. Макарова. – СПб. : Политехника-сервис, 2012. – 178 с. 18 Уикем, Х. Язык R в задачах науки о данных : импорт, подготовка, обработка, визуализация и моделирование данных / Х. Уикем, Г. Гроулмунд. – М. : Диалектика, 2018. – 578 с. 19 Джеймс, Г. Введение в статистическое обучение с примерами на языке R / Г. Джеймс, Д. Уиттон, Т. Хасти, Р. Тибширани. – М. : ДМК Пресс, 2017 — 456 с. 20 Лонг, Дж. Д. R. Книга рецептов: Проверенные рецепты для статистики, анализа и визуализации данных / Дж. Д. Лонг, П. Титов ; пер. с анг. Д. А. Беликова. – М. : ДНКПресс, 2020. – 510 с. 21 Кочедыков, Д. А. Применение логических алгоритмов классификации в задачах кредитного скоринга и управления риском кредитного портфеля банка / Д. А. Кочедыков, А. А. Ивахненко, К. В. Воронцов // Математические методы распознавания образов. — 2007. — Т. 13. — № 1. — С. 484-488. — EDN YNLPLP. 22 Зорин, А. В. Введение в прикладной статистический анализ в пакете R / А. В Зорин, М. А. Федоткин. — Нижний Новгород : ННГУ, 2010 — 50 с. 23 Акберова, Н. И. Основы анализа данных и программирования в R: учебно-методическое пособие / Н. И. Акберова, О. С. Козлова. – Казань : Альянс, 2017 – 33 с. 24 Жумаканова, Е. Б. Решение задачи кредитного скоринга с использованием регрессионных моделей / Е. Б. Жумаканова // Уральский научный вестник. — 2017. — Т. 2. — № 11. — С. 022-024. — EDN XXIMAN. 25 Тукумбетов, А. Р. Кредитный скоринг с помощью методов машинного обучения / А. Р. Тукумбетов, Н. С. Задорожный // Инновации. Наука. Образование. — 2021. — № 36. — С. 1118-1122. – EDN CVULZG. 41 ПРИЛОЖЕНИЕ А Листинг программы 1 2 3 4 5 6 7 8 library(DAAG) library(party) library(rpart) library(rpart.plot) library(mlbench) library(caret) library(pROC) library(tree) 9 10 11 db = read.csv('../input/pima-indians-diabetesdatabase/diabetes.csv', header=TRUE) 12 13 str(db) 14 15 head(db) 16 17 18 19 20 21 require(caTools) set.seed(3) sample = sample.split(db$Outcome, SplitRatio=0.8) train = subset(db, sample==TRUE) test = subset(db, sample==FALSE) 22 23 24 AllVar <- glm(Outcome ~ ., data = train, family = binomial) summary(AllVar) 25 26 27 PredictTrain <- predict(AllVar, type = "response") summary(PredictTrain) 28 29 tapply(PredictTrain, train$Outcome, mean) 30 31 32 threshold_0.5 <- table(train$Outcome, PredictTrain > 0.5) threshold_0.5 33 34 35 36 # Accuracy accuracy_0.5 <- round(sum(diag(threshold_0.5))/sum(threshold_0.5),2) sprintf('Accuracy is %s', accuracy_0.5) 37 42 38 39 40 # Mis-classification error rate MC_0.5 <- 1-accuracy_0.5 sprintf("Mis-classification error is %s",MC_0.5) 41 42 43 44 45 sensitivity0.5 <- round(99/(115+99),2) specificity0.5 <- round(354/(354+46),2) sprintf("Sensitivity at 0.5 threshold: %s", sensitivity0.5) sprintf("Specificity at 0.5 threshold: %s", specificity0.5) 46 47 48 threshold_0.7 <- table(train$Outcome, PredictTrain > 0.7) threshold_0.7 49 50 51 52 # Accuracy accuracy_0.7 <- round(sum(diag(threshold_0.7))/sum(threshold_0.7),2) sprintf('Accuracy is %s', accuracy_0.7) 53 54 55 56 # Mis-classification error rate MC_0.7 <- 1-accuracy_0.7 sprintf("Mis-classification error is %s",MC_0.7) 57 58 59 60 61 sensitivity0.7 <- round(78/(123+78),2) specificity0.7 <- round(359/(359+16),2) sprintf("Sensitivity at 0.7 threshold: %s", sensitivity0.7) sprintf("Specificity at 0.7 threshold: %s", specificity0.7) 62 63 64 threshold_0.2 <- table(train$Outcome, PredictTrain > 0.2) threshold_0.2 65 66 67 68 # Accuracy accuracy_0.2 <- round(sum(diag(threshold_0.2))/sum(threshold_0.2),2) sprintf("Accuracy is %s", accuracy_0.2) 69 70 71 72 # Mis-classification error rate MC_0.2 <- 1-accuracy_0.2 sprintf("Mis-classification error is %s",MC_0.2) 73 74 75 76 77 sensitivity0.2 <- round(180/(21+180),2) specificity0.2 <- round(215/(215+160),2) sprintf("Sensitivity at 0.2 threshold: %s",sensitivity0.2) sprintf("Specificity at 0.2 threshold: %s",specificity0.2) 43 78 79 library(ROCR) 80 81 82 ROCRpred = prediction(PredictTest, test$Outcome) ROCRperf = performance(ROCRpred, "tpr", "fpr") 83 84 85 # Adding threshold labels plot(ROCRperf, colorize=TRUE, 86 87 88 print.cutoffs.at = seq(0,1,0.1), text.adj = c(-0.2, 1.7)) abline(a=0, b=1) 89 90 91 auc_train <- round(as.numeric(performance(ROCRpred, "auc")@y.values),2) legend(.8, .2, auc_train, title = "AUC", cex=1) 92 93 94 95 ROCRPredTest = prediction(PredictTest, test$Outcome) auc = round(as.numeric(performance(ROCRPredTest, "auc")@y.values),2) auc 96 97 options(repr.plot.width = 7, repr.plot.height = 7) 98 99 100 101 102 103 104 105 # Fit model tree.fit <- rpart( Outcome ~ ., data = train, method = "class", control = rpart.control(maxdepth = 4) ) 106 107 108 109 110 111 # Graph of tree rpart.plot( tree.fit, type = 4, extra = 2, 112 under = TRUE, fallen.leaves = T 113 114 115 ) 116 117 # Prediction, classification 44 118 119 120 121 122 tree.pred <- predict( tree.fit, test, type = "class" ) 123 124 confusionMatrix(table(tree.pred,test$Outcome)) 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 library(ggplot2) library(MASS) library(ROCR) # Prediction, probability tree.pred.prob <- predict( tree.fit, test, type = "prob" ) tree.pred.prob.val <- prediction( tree.pred.prob[,2], test$Outcome ) tree.pred.prob.perf <- performance( tree.pred.prob.val, "auc" ) tree.pred.prob.perf 144 145 146 147 148 149 150 151 152 153 # print AUC value paste( "AUC Value is:", as.numeric(performance( tree.pred.prob.val, "auc" )@y.values ) ) 154 155 plot(performance(tree.pred.prob.val, "tpr", "fpr"), colorize = TRUE) 156 45 1 2 3 4 5 6 library(haven) library(dplyr) library(ggplot2) library(forcats) library(gridExtra) library(tidyverse) 7 8 9 credit_risk_dataset <- read_csv("../input/credit-risk-dataset/ credit_risk_dataset.csv") 10 11 #Transforming variables to factors 12 13 credit_risk_dataset$loan_status <- as.factor(credit_risk_dataset$loan_status) 14 15 credit_risk_dataset$person_home_ownership <- as.factor(credit_risk_dataset$person_home 16 17 credit_risk_dataset$loan_intent <- as.factor(credit_risk_dataset$loan_intent) 18 19 credit_risk_dataset$loan_grade <- as.factor(credit_risk_dataset$loan_grade) 20 21 credit_risk_dataset$cb_person_default_on_file <- as.factor(credit_risk_dataset$cb_pers 22 23 24 glimpse(credit_risk_dataset) # more ordered #str(credit_risk_dataset) 25 26 27 # To spot missing values summary(credit_risk_dataset) 28 29 30 31 32 33 require(caTools) set.seed(3) sample = sample.split(credit_risk$loan_status, SplitRatio=0.75) train = subset(credit_risk, sample==TRUE) test = subset(credit_risk, sample==FALSE) 34 35 nrow(credit_risk) 36 37 nrow(train) 38 39 library(ISLR) 40 46 41 42 logit <- glm(loan_status ~ ., data = train, family = binomial(link = 'logit')) summary(logit) 43 44 45 46 47 logit <- glm(loan_status ~ person_age + person_income + person_emp_length + loan_amnt + loan_int_rate + person_home_ownership + loan_intent + loan_grade, data = train, family = binomial) summary(logit) 48 49 50 credit_risk <- train %>% filter(person_income < 800000) 51 52 53 54 55 logit <- glm(loan_status ~ person_age + person_income + person_emp_length + loan_amnt + loan_int_rate + person_home_ownership + loan_intent + loan_grade, data = train, family = binomial) summary(logit) 56 57 58 59 predicted <- predict(logit, type = "response") table(train$loan_status, predicted > 0.5) table(train$loan_status, predicted > 0.5) %>% prop.table() 60 61 62 63 predicted1 <- predict(logit, type = "response") table(train$loan_status, predicted > 0.7) table(train$loan_status, predicted > 0.7) %>% prop.table() 64 65 66 67 predicted <- predict(logit, type = "response") table(train$loan_status, predicted > 0.2) table(train$loan_status, predicted > 0.2) %>% prop.table() 68 69 library(ROCR) 70 71 72 73 prediction(predicted1, train$loan_status) %>% performance(measure = "tpr", x.measure = "fpr") %>% plot() 74 75 76 77 prediction(predicted1, train$loan_status) %>% performance(measure = "auc") %>% [email protected] 78 79 80 library(party) library(rpart) 47 81 82 83 84 85 library(rpart.plot) library(mlbench) library(caret) library(pROC) library(tree) 86 87 88 89 90 91 92 # Split dataset into train and test sets require(caTools) set.seed(3) sample = sample.split(credit_risk$loan_status, SplitRatio=0.8) train = subset(credit_risk, sample==TRUE) test = subset(credit_risk, sample==FALSE) 93 94 options(repr.plot.width = 6, repr.plot.height = 4) 95 96 97 98 99 100 101 # Fit model tree.fit <- rpart( loan_status ~ ., data = train, method = "class" ) 102 103 104 105 106 107 108 109 110 # Graph of tree r <- rpart.plot( tree.fit, type = 4, extra = 2, under = TRUE, fallen.leaves = F ) 111 112 113 114 115 116 117 # Prediction, classification tree.pred <- predict( tree.fit, test, type = "class" ) 118 119 confusionMatrix(table(tree.pred,test$loan_status)) 120 48 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 # Prediction, probability tree.pred.prob <- predict( tree.fit, test, type = "prob" ) tree.pred.prob.val <- prediction( tree.pred.prob[,2], test$loan_status ) tree.pred.prob.perf <- performance( tree.pred.prob.val, "auc" ) tree.pred.prob 136 137 138 139 140 141 142 143 144 145 # print AUC value paste( "AUC Value is:", as.numeric(performance( tree.pred.prob.val, "auc" )@y.values ) ) 146 147 plot(performance(tree.pred.prob.val, "tpr", "fpr"), colorize = TRUE) 49