close

Вход

Забыли?

вход по аккаунту

Гришин Андрей Анатольевич. Разработка системы скоринговой оценки заемщика.

код для вставки
POCC]diICKON @E'4EPAUI4I1
MIIHIICTEPCTBO OEPA3OBAHI4' I4 HAYKI4
OFPA3OBATEIIT'HOE
OENEPAJIbHOE fOCYAAPCTBEHHOE EIOAXETHOE
YI{PEXNEHI4E BbICIIIE|O OEPA3OBAHI4,fl
(oPJroBCKI4ii focvAAPCTBEHHbIfr vHl1snpcl{rsr
rlueuu I'I'C' TYPIEHEBA>
BbIIIYCKHA-'I KBAIIIIOIIKAUIIOHHA' PAEOTA
09.04.03 - IlprxraaHar r'ruSopuarura
rro HanpaBJreHllo noaroroBKh
(uuQp, uanPaeneuue
HanpaBJIeHHocrl
n
od zomoexu)
Ilpurna4nar tlu$oPuarura e
(nPot[lur)
aHafiI-rrlrqecKoi 3KoHoMrrKe
(npoSuna))
1,our"rouon " ronpoanelHocmu
Cryaenra
Ip[urtr na AnApe.q AHarorleeuqa
rurSp
165140
( Q anunua, una, omuecmao)
OaKyrbrer
(nncruryr)
@sguro-r''rareuaruqe
'
crlrfi
(uauneuoeauue ilagtrbmem a (wtcmumlm a)
l
pA3pAsorKACI4crEMbr+;c#:"##::#O'IEHKI.3AEMtrI
fpHuIaH A.A.
Cryaenr
(@t4o)
z4-
Hq^IHbIR
pyKoBoal'Irenb
(nodnucv)
3ae. xa$eaPofi / POfI
..tu
ffi
(no0nucb)
Optu 2018
K.3.H.,
4919P999!4:(@ao)
A.r.H., rlpoo. Ce,rrorr'ru B
@uo)
A
АННОТАЦИЯ
Магистерская диссертация на тему «Разработка системы скоринговой
оценки заёмщика» содержит 101 страницу, рисунков – 20, таблиц – 12, приложений – 7, использованных источников – 220.
Работа посвящена разработке информационной системе оценки кредитоспособности клиента финансовой организации. В ходе исследования проведен
анализ существующих методов построения скоринговых систем и моделей,
применяемых для разработки правил оценки платежеспособности заёмщика.
Ключевые слова: скоринговая система, машинное обучение, ансамбли
классификаторов.
Объект исследования. Процесс скоринговой оценки клиента финансовой
организации.
Предмет исследования. Методы и способы построения информационных
систем, а также математические алгоритмы искусственного интеллекта как инструмент формирования скоринговых правил.
Цель работы. Разработка информационно - аналитической системы кредитного скоринга.
Метод исследования. В работе использованы методы сравнительного анализа, численного моделирования, объектно - ориентированного проектирования.
Результаты работы. Разработанная система кредитного скоринга позволяет с вероятностью более 82% выявить ненадежного заёмщика, а среди
хороших клиентов тех, которым необходимо напоминание о необходимости
внесения денежных средств.
ANNOTATION
The master’s thesis on the "Development of a scoring system of the borrower"
contains 101 pages, drawings - 20, tables - 12, applications - 7, used sources - 220.
The work is devoted to the development of an information system for assessing
the creditworthiness of a client of a financial institution. In the course of the research,
the analysis of existing methods of building scoring systems and models used to
develop rules for assessing the borrower’s solvency was carried out.
Keywords: scoring system, machine learning, ensembles of classifiers.
The object of the study. The scoring process of a client of a financial institution.
The subject of the study. Methods and methods of constructing information
systems, as well as mathematical algorithms of artificial intelligence as a tool for the
formation of scoring rules.
The purpose of the work. Development of the information and analytical system
of credit scoring.
Method of research. Methods of comparative analysis, numerical modeling,
object-oriented design are used in the work.
The results of the work. The developed system of credit scoring makes it
possible to identify an unreliable borrower with a probability of more than 82%,
and among the good clients of those who need a reminder about the need to make
money.
СОДЕРЖАНИЕ
Введение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. Особенности применения и построения систем кредитного скоринга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1
Процесс кредитования и кредитные риски. Общая характеристика предметной области. . . . . . . . . . . . . . . .
1.2
Общая характеристика и методы построения скоринговых
систем . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3
Концептуальная схема нахождения скоринговых правил
2. Разработка скоринговой системы . . . . . . . . . . . . . . . . . .
2.1
Детальное проектирование скоринговой системы . . . .
2.2
Анализ требований к построению скоринговых систем и
диаграмма вариантов её использования . . . . . . . . . .
2.3
Диаграмма классов для модели кредитного скоринга . .
2.4
Календарное и финансовое планирование . . . . . . . . .
Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Список используемой литературы . . . . . . . . . . . . . . . . . . . .
Приложения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
2
.
4
.
4
.
.
.
.
13
25
44
44
.
.
.
.
.
.
54
58
69
84
86
102
ВВЕДЕНИЕ
Современное состояние финансовой сферы в условиях спада экономики остается сложным. Ключевые институты - банки в Российской Федерации
переживают не лучшие времена. Рост рисков и отток капитала, а также постоянно меняющиеся условия фондирования со стороны Центрального Банка
заставляют кредитные учреждения искать методы снижения рисков, особенно в сфере потребительского кредитования. В этой связи, актуальной является
задача совершенствования механизмов управления кредитным портфелем коммерческого банка с использованием современных методов и информационных
систем. В мировой практике развитие и внедрение систем кредитного скоринга
кредитоспособности клиента происходит практически повсеместно. В Российской Федерации также есть примеры успешно действующих систем, однако
массовыми их назвать нельзя. Именно поэтому целью данной работы является
разработка информационно - аналитической системы кредитного скоринга. В
качестве объекта исследования выступает процесс скоринговой оценки клиента
финансовой организации.
В качестве предмета исследования выступают методы и способы построения информационных систем, а также математические алгоритмы искусственного интеллекта как инструмент формирования скоринговых правил. Для достижения заданной цели требуется решить ряд задач:
1. провести анализ опыта построения скорринговых систем и принципы их
функционирования;
2. выявить достоинства и недостатки математических алгоритмов для систем
оценки кредитоспособности заёмщика;
3. на основе имеющихся данных о клиенте подобрать наиболее рациональный
алгоритм построения скоринговых правил;
4. разработать проект информационной системы кредитного скоринга, включающий техническое задание, анализ требований и детальное проектирование;
5. выполнить экономическое обоснование проекта и рассчитать себестоимость создания информационной системы.
Структура выпускной квалификационной работы построена в соответствии с целью и задачами, указанными выше, и состоит из введения, двух глав,
заключения, списка литературы и приложений.
2
Во введении обосновывается актуальность выбранной тематики, сформулирована цель и основные задачи, приводится структура выпускной квалификационной работы.
В первой главе описываются объект и предмет исследования, выполнен
анализ кредитных рисков и способов их оценки и снижения в банковской сфере, дается критический обзор скориинговых систем и методов их построения.
Проведен анализ алгоритмов машинного обучения, применяемых для построения правил оценки заемщика. Обоснован выбор базового подхода к анализу
данных, а также описаны особенности их реализации.
Вторая глава содержит результаты численных экспериментов и практические результаты, полученные в ходе исследования алгоритмов машинного обучения с применение разных инструментальных средств. Получены результаты
по прогностическим возможностям разрабатываемой системы, выбран способ
реализации и проведена оценка качества применяемого алгоритма. Проектирование информационной системы выполнено в нотации языка UML, концептуальное моделирование, логическое проектирование. Предложен вариант оценки
поведения клиента в ходе осуществления им платежей по кредиту.
Экономическое обоснование проекта включает в себя расчет себестоимости реализации системы, календарный план работ, расчет рисков и внутренней
нормы доходности проекта. Заключение представляет собой обобщение основных результатов проделанной работы. Список литературы содержит список
источников, используемых при написании работы.
3
1.
1.1
Особенности применения и построения систем кредитного
скоринга
Процесс кредитования и кредитные риски. Общая характеристика предметной области.
В современных условиях кредит занимает важное место в развитии социально - экономических процессов любого государства. Кредит оказывает
влияние на всех субъектов экономических отношений, к которым относятся
физические лица, предприятия, организации и государственный сектор. Существуют различные виды кредитов, которые по-своему оказывают влияние на
всех участников экономических отношений. Принято выделять коммерческий,
банковский, потребительский, международный, государственный и другие кредиты.
В экономической теории [1] под кредитом поднимается система экономических отношений, выражающаяся в движении имущества или денежного
капитала, предоставляемых в ссуду на условиях возвратности, срочности, материальной обеспеченности и, как правило, за плату в виде процента.
Всего существуют пять источников формирования капитала для целей
кредитования:
- Денежные средства, предназначенные для воспроизводства основного капитала и накапливаемые по мере перенесения его стоимости по частям на
создаваемые товары в виде амортизации.
- Часть оборотного капитала, которая высвобождается в денежной форме
в связи с несогласованностью во времени продаж изготовленных товаров
и покупки сырья, топлива и материалов, необходимых для продолжения
процесса производства.
- Капитал, временно свободный в промежутках между поступлением денежных средств от реализации товаров и выплаты заработной платы.
- Предназначенная для капитализации стоимость, накапливаемая при расширенном воспроизводстве до определенной величины, зависящей от масштабов предприятий и их технического уровня.
- Денежные доходы и сбережения частных лиц, включая все слои населения. Важным источником ссудного капитала являются денежные накопления государства.
4
Основным параметром, определяющим функционирование процесса кредитования является норма процента – это динамичная величина и зависит
прежде всего от соотношения спроса и предложения ссудного капитала, которые, в свою очередь, определяются:
- масштабами производства;
- размерами денежных накоплений, сбережений всех классов и слоев общества;
- соотношением между размерами кредитов, предоставленных государством
и его задолженностью;
- циклическими колебаниями производства;
- его сезонными условиями;
- темпом инфляции: при ее усилении процентные ставки растут;
- государственным регулированием процентных ставок;
- международными факторами: неуравновешенностью платежных балансов,
колебаниями валютных курсов, бесконтрольной деятельностью мирового
рынка ссудных капиталов и т.д.
Кредит в экономике осуществляется в различных формах, среди которых
принято выделять:
- банковский кредит предоставляется предпринимателям в виде денежных
ссуд специальными кредитно - финансовыми учреждениями - банками. Это
основной вид кредита в современных экономических условиях. Объектом
банковского кредита служит денежный капитал;
- потребительский кредит предоставляется как правило физическим лицам
в двух формах: коммерческого при продаже товаров с отсрочкой платеж и
банковской ссуды на потребительские цели;
- сельскохозяйственный кредит предоставляется банками сельскохозяйственным предприятиям под гарантии, как правило обеспеченные недвижимостью или основными средствами, на длительный срок для покрытия крупных капиталовложений или пополнения оборотного капитала, например в
период посевной и уборочной компании;
- ипотечный кредит – долгосрочные ссуды с обеспечением приобретаемой
на эти средства недвижимостью, землей, производственными зданиями;
- государственный кредит – осуществляется в рамках государственных программ развития и представляет собой совокупность кредитных отношений,
в которых заемщиком или кредитором выступают государство и местные
органы власти по отношению к гражданам и юридическим лицам;
5
- международный кредит – движение ссудного капитала в сфере международных экономических отношений, связанное с предоставлением валютных
и товарных ресурсов на условиях возвратности, срочности и платности. В
качестве кредиторов и заемщиков – банки, предприятия, государства, международные и региональные организации.
Благодаря наличию кредита происходит перераспределение временно свободных денежных средств в те сферы экономики и общества, где существует
потребность в этом. Осуществляется поддержка непрерывного процесса производства и реализации продукции. Зачастую на предприятиях время поступления денежных средств не совпадает с расходами, поэтому в данном случае
применяется кредит как механизм выравнивания диспропорций в финансовом
балансе, благодаря которому процесс производства и реализации работает бесперебойно.
За счёт кредита предприятия и организации получают финансовые ресурсы, необходимые для инвестирования, расширения производства, а также
осуществления различных капитальных вложений.
Кредит стимулирует развитие не только производства, но и потребление.
При недостаточности в определенный промежуток времени денежных средств
на удовлетворение своих потребностей, потребители получают возможность
обеспечить их удовлетворение за счёт кредитных ресурсов, использую для этого, например, кредит на потребительские нужды.
Посредством кредита происходит регулирование денежной массы в экономике. Так, к примеру, Банк России, является эмитентом наличности в государстве, а также следит за безналичными расчётами, которые имеют место
быть в рамках кредитной системы.
Влияние кредита на экономику оценивают с помощью как качественных,
так и количественных показателей. При этом, могут использоваться относительные и абсолютные величины, с помощью которых рассчитывается степень
воздействия кредита на экономические процессы. К примеру, это может быть
величина кредитных средств в какой-либо отрасли национальной экономики,
удельный вес кредитных ресурсов при формировании как основного капитала, так и оборотного, либо соотношение использования кредитных ресурсов и
ВВП страны.
Экономическая сущность кредитных ресурсов проявляется не только в
общем в расширенном воспроизводстве, но и оказывает значительное влияние каждую фазу этого процесса: производство, распределение, обмен, а также
6
потребление. Кредит активно применяется в циклах обмена и потребления. Благодаря кредитным ресурсам происходит ускоренное увеличение возрастающей
стоимости на всех циклах воспроизводственного процесса.
Общая классификация банковских кредитов представлена на рисунке 1,
откуда видно, что все кредиты имеют две основные направленности, либо они
направлены на потребление, либо на производство.
Рисунок 1 – Классификация банковских кредитов
Кредит в экономику поступает через специальные экономические институты именуемые банками, которые бывают государственными и частными во
главе с Центральным банком Российской Федерации, играющего роль кредитора последней инстанции. В рыночной экономике уровень развития банковской
системы определяется не столько числом организаций, предоставляющих услуги, сколько уровнем конкуренции между ними [2]. Конкуренция в банковской
сфере носит специфический характер, гораздо более сложный, чем, например
на товарных рынках, и не может быть сведена к простому соперничеству [3].
В Российской Федерации уровень развитости финансовой сферы крайне
низок и является высококонцентрированым [2], тем не менее конкуренция в
7
отдельных сегментах финансового рынка достаточно высока и она по мере
развития будет усиливаться.
Рост конкуренции в сегменте кредитования будет увеличиваться только
в направлении потребительского кредитования (Рис. 1). Это связано с общей
деградацией промышленности Российской Федерации. Так, согласно прогнозу
Внешэкономбанка [4] рост промышленного производства в ближайшие 5 лет не
превысит 1,5 %, т.е. на уровне статистической погрешности,что вызвано спадом
инвестиций [5]. По мнению академика РАН С.Ю. Глазьева этого недостаточно
даже для простого воспроизводства [6—8] Следовательно, основным драйвером роста финансовых потоков в сфере кредитования будет потребительский
сектор. Уже сейчас динамику роста, более 20%, в данной сфере фиксируют в
своих балансах практически все финансовые организации России [9]. Общая
динамика структуры потребительских кредитов представлена на рисунке 2
Рисунок 2 – Структура годового изменения портфеля потребительских
кредитов (на начало месяца, п.п.)
При этом вклад отдельных элементов в структуру кредитного портфеля
неравномерен (Рисунок 3). Если вклад в авто и ипотечных кредитов снижается,
то прочие, куда относятся, в том числе, потребительские кредиты, уверено
растет.
Рынок потребительского кредитования как сегмент финансового рынка
представляет собой динамичную систему отношений взаимосвязанных субъектов (кредитора и заемщика), определяющих спрос и предложение на кредитные
ресурсы (кредитный продукт), с учетом уровня конкуренции и цены этого продукта; также есть «экономическое пространство, где организуются отношения,
8
Рисунок 3 – Вклад отдельных элементов в годовой прирост розничного
кредитного портфеля (на начало месяца, п.п.)
обусловленные движением свободных денег между заемщиками и кредиторами на условиях возвратности и платности»1 . При этом под потребительским
кредитом (кредитным продуктом) [10] подразумевается ссуда, предоставленная кредитными организациями на покупку потребительских товаров, а также
на оплату расходов личного характера или продажа торговыми предприятиями
потребительских товаров с отсрочкой платежа. В настоящее время под потребительскими кредитами, как правило, понимаются необеспеченные кредиты
наличными средствами, необеспеченные кредиты, выдаваемые в торговых точках, а также необеспеченное кредитование с использованием банковских карт.
С учетом повышения уровня конкуренции в сегменте потребительского
кредитования неизбежен рост рисков [11], которые необходимо не только подвергать количественной оценке, но и разрабатывать механизмы их снижения
вплоть до полного нивелирования.
Под кредитным риском понимают риск неисполнения заемщиком первоначальных условий кредитного договора, то есть не возврат (полностью или
частично) основной суммы долга в установленные договором сроки [11].
Риски, непосредственно связанные с потребительским кредитованием,
достаточно подробно изучены в научной экономической литературе [12—15].
Однако классификация и методы их оценки существенно различаются.
Принято подразделять [12; 14] риски потребительского кредитования на
внешние и внутренние. К внутренним рискам относятся риск, связанный с
заемщиком, и риск, связанный с банком-кредитором. К рискам, связанным с за1
Большая советская энциклопедия [Электронный ресурс]. URL: http://bse.sci-lib.com/
9
емщиком, принято относить: риск ухудшения финансового положения заемщика, для физического лица это может выражаться в потере им статуса, например
моральный риск, или работы - деловой риск. В эту же группу рисков входят:
летальный исход, например в случае после операции на которую брался кредит, смерть заемщика или несчастный случай, риски невыполнения заемщиком
обязательств, риски нецелевого использования кредита, риски мошенничества
и различного рода злоупотреблений со стороны клиента банка, риск недостаточности имеющегося у заемщика обеспечения. Существенной особенностью
рисков заемщиков по потребительским кредитам на текущие нужды является
то, что кредиты на приобретение товаров и на лечение практически не влияют
или слабо влияют такие риски, как риск нецелевого использования кредитов и
риски, связанные с обеспечением. Их можно не учитывать при развитии этих
направлений кредитования, в отличие от потребительских кредитов инвестиционного характера, где эти виды рисков приобретают более существенное значение. Однако здесь, возможность наступления риска страхового случая крайне
велика, особенно при кредитовании хирургических операций.
Что касается внешних или систематических рисков потребительского
кредитования на текущие нужды, то к ним относят риски общего характера
для всех видов кредитов. К ним относятся: политический, если например, если обществу не требуются люди с высшим образованием, то, когда процесс
будет оформлен законодательно, кредиты на образование, выданные ранее, могут быть не возвращены; макроэкономический, социальный и инфляционный,
которые приводят к ухудшению финансового состояния, а, следовательно, кредитоспособности заемщика; риск законодательных изменений, который может
проявляется,например, в создании регулятивных благоприятных условий для
предоставления одних видов кредитов и ограничений по другим. Значительной особенностью влияния внешних рисков на потребительские кредиты на
текущие нужды является то, что на кредиты на приобретение товаров и на лечение не влияют политические риски и риски сворачивания государственных
программ, как на все остальные виды кредитов. Их можно не учитывать при
развитии этих направлений кредитования.
По характеру проявления риски подразделяются:
- Общие риски.
1. Риск недостаточности ресурсов. На современном уровне развития финансовой системы в Российской Федерации банки не обладают достаточным объемом ресурсов для осуществления массовой выдачи долго10
срочных кредитов на лечение и образование. Поэтому превалирует тенденция краткосрочного кредитованием на эти цели. Такая осторожность
в целом повышает надежность и финансовую устойчивость банков, но
не удовлетворяет потребности заемщика в кредитах на образование и
медицинские операции.
2. Риск неадекватного определения финансового положения заемщика.
Это самое серьезное препятствие для наращивания объемов потребительского кредитования. Причин здесь две. Одна состоит в относительной «непрозрачности» финансового положения заемщика – физического
лица, а вторая порождена проблемами залогового обеспечения кредитной сделки.
3. Риск концентрации потребительских кредитов в отдельных банках.
Является следствием олигополизации банковской сферы, когда формируется тенденция сосредоточения кредитования населения на текущие
нужды в крупных, в основном государственных банках (Сбербанк, Внешторгбанк, Росбанк), и привлечения к ним достаточно большого перспективного сектора клиентов, что порождает дисбаланс на рынке банковских услуг и усиление неравенства банков в распределении кредитования на текущие нужды по регионам. Это приводит к диверсификации
в банковской сфере по срокам потребительского кредитования.
4. Рост просроченной задолженности по кредитам и её несоответствие
размерам формируемых резервов.
- Специальные риски.
1. Риск неопределенности результатов. При сравнимых издержках по
другим видам потребительского кредитования банку невыгодно предоставлять высокорискованные кредиты, например, на лечение и образование, т.к. нет уверенности в их результатах.
2. Риск большого количества сделок и их некачественного оформления.
Потребительские кредиты на текущие нужды в отличие от потребительских кредитов инвестиционного характера, отличаются большим
количеством заключаемых сделок и более мелкими суммами. Выявлена практически прямая зависимость: чем больше сделок – тем больше соответственно риск. В настоящее время отсутствуют механизмы
и специальные процедуры кредитования на текущие нужды, которые
позволяли бы оперативно и с наименьшими издержками формировать и
проводить большой объем мелких сделок, обеспечивая, в то же время,
11
приемлемое качество однородных кредитных портфелей по отдельным
видам потребительского кредитования. Поэтому ЦБ РФ рекомендует
банкам разрабатывать адекватные сделкам информационные системы и
автоматизированные программы по осуществлению процедур кредитования на текущие нужды в рамках каждого этапа кредитного процесса.
В результаты это может позволить в некоторой степени унифицировать
кредитный процесс и минимизировать риск при потребительском кредитовании в рамках всей кредитной системы, а также расширить рамки
кредитования и повысить его эффективность.
3. Большие объемы беззалоговых кредитов. В условиях кризиса нескольких лет в практике банков наметилась тенденция увеличения выдачи
беззалоговых кредиты на текущие нужды по кредитным картам, что
отчасти является следствием роста конкуренции в сегменте потребительского кредитования. Такого рода кредиты являются высокорискованными для самих кредитных организаций, и следовательно выдаются
под повышенный процент. Данный рынок кредитования рассматривается большинством банков как достаточно перспективный, однако для
его развития должны быть инструменты для корректного оценивания
финансового состояние физического лица – заемщика, а также прогнозирования возможности возврата кредита за счет постоянных источников дохода. Для этого должны развиваться новые методы оценки кредитоспособности заемщика на основе современных информационных
технологий. В настоящее время унифицированных средств не существует, поэтому нередкой бывает ситуация отнесения одного и того же
заемщика в разных банках к разным группам кредитоспособности и
финансового положения.
4. Наличие большого количества видов однородных портфелей. Проблема по минимизации этого риска заключается в применении адекватных
методов регулирования рисков для отдельного вида однородных портфелей потребительских кредитов на текущие нужды.
Согласно отчету Сбербанка [16] в кредитовании наметилась тенденция
роста неоднородности денежно-кредитных условий в экономике. Она проявляется в достаточно жестких требованиях к заемщику, несмотря на снижение
общей стоимости кредита. Это может свидетельствовать о том, что риски достаточно высоки. Причин здесь две. Первая, заключается в том, что экономика России по-прежнему находится в стагнации, что негативно отражается на
12
уровне благосостояния населения, формируя тем самым низкодоходные группы
заемщиков. Вторая причина является следствием первой, и, заключается в том,
что в условиях ростущей конкуренции среди банков, банки решая выдавать
кредиты более рисковым заемщикам, компенсируют более высокие кредитные
риски повышенными процентными ставками. При этом более высокие ставки
отталкивают заемщиков с более низким риском и потребностью в кредите, тем
самым привлекая только более рисковых заемщиков (характеризующихся и более высоким показателем долговой нагрузки как индикатором риска дефолта),
чей спрос слабо зависит от уровня процентной ставки. Наличие «нежелательного отбора» отражает рациональный выбор банков, их желание специализироваться на определенной категории риска заемщиков [17]. Это известный
экономический эффект, который в литературе получил название «нежелательный отбор» (adverse selection), достаточно хорошо описан например в работах
[18—21].
Сегментация рынка вынуждает банки более взвешено подходить к оценке
клиента. Поэтому для развития программ кредитования необходимо применять
методы позволяющие производить оценку клиента по критериям перспективности в плане дальнейшей работы.
В настоящее время банки в своих базах данных имеют информацию о
большом количестве потенциальных клиентов. Ключевым является вопрос с
кем работать дальше в части продвижения кредитных продуктов. Решение этого
вопроса в совокупности с минимизацией рисков позволит значительно снизить
издержки банковской деятельности.
1.2
Общая характеристика и методы построения скоринговых систем
Основным методом решения задачи снижения рисков выдачи заведомо невозвратного кредита является разработка системы кредитного скоринга
[22–25]. Кредитный скоринг – это метод разделения групп потенциальных
клиентов-заемщиков в условиях доступности информации не о параметрах,
разделяющих эти группы, а только о некоторых вторичных переменных.
В Российской Федерации развитие потребительского кредита началось
лишь в начале 2000-х годов. Это связано с восстановлением отечественной банковской системы после затяжного экономического кризиса конца 1990-х годов.
Профессия «андеррайтер» появилась в банковской сфере в связи с необходи13
мостью предварительной идентификации и оценки рисков при кредитовании,
поскольку по мере усложнения продуктового инструментария и выхода на рынок крупных банков усложняются сами технологии и модели его оценки.
Первые работы [26; 27] были посвящены обоснованию и разработке самой процедуры оценки кредитоспособности заемщика. Скоринговые карты использовались для различных типов банковских продуктов, преимущественно в
сегменте потребительского кредитования (автокредиты, необеспеченные залогом займы, кредитные карты с установленным лимитом и пр.) По мере накопления и обобщения информации по кредитным продуктам и рискам, присущим
им, происходила автоматизация скоринговых программ с целью принятия решения по заявке в короткие сроки.
При использовании кредитного скоринга в определенной степени удается
достичь сегментации заемщиков путем опроса и обобщения их поведенческих
характеристик с целью создания препятствий для получения кредитов недобросовестными клиентами, а также накопления статистики для последующего
использования при разработке и реализации новых, более прогрессивных кредитных продуктов/услуг и программ, при совершенствовании тарифной политики и процентных ставок.
В большинстве коммерческих банков скоринговые системы разрабатываются самостоятельно и являются собственной технологией кредитного учреждения которая, в случае её успешной эксплуатации, повышает конкурентное
преимущество, приводит к росту выдачи «хороших» кредитов, минимизации
рисков и т.д. Поэтому, эта технологическая новация является коммерческой и
получить хоть какую-то информацию о принципах её работы крайне затруднительно. Но, несколько лет назад скоринг стал самостоятельной услугой, т.е.
любой способный оплатить эту процедуру может воспользоваться готовым решением. Такие решения например предоставляют компании Equifax, Experian,
Scorto, FICO и др.
Ведущими компаниями, которые не только предоставляют услуги по процессам скоринга, но и разрабатывают программные платформы для построения
таких систем, являются SAS и IBM, предлагая комплесные решения «под ключ»
на базе собственных разработок SAS Enterprise Miner [28] и IBM SPSS [29].
Данные программные продукты и решения на их основе чрезвычайно дороги,
следовательно позволить себе их могут только крупные банковские структуры. Вторым недостатком, в случае применения этих программных продуктов,
это факт того, что информация и данные будут доступны компаниям разработ14
чикам, что может породить дополнительные риски, особенно для российских
банков. Отсюда следует закономерный вывод, что целесообразным является
разработка собственных систем, тем более практический опыт достаточный, а
алгоритмы и математические модели уже разработаны.
В литературе [30] при разработке систем кредитного скоринга принято
выделяют минимум пять этапов, представленных на рисунке 4.
Рисунок 4 – Последовательность этапов разработки систем кредитного
скоринга по данным работы [30]
Прежде чем разрабатывать систему кредитного скоринга, необходимо понимать целевые установки системы, т.е. к какому типу скоринга относится
решаемая задача, какие модели будет составлять её основу, что во многом
определяет результат. Этот этап на рисунке 4 не показан, так как относится
к предпроектному этапу разработки системы. Нулевой этап проектирования
15
системы определяет тип системы кредитного сокринга исходя из сферы применения.
По сферам применения принято выделять следующие виды кредитного
скоринга [31–34]:
1. Application Scoring (скоринг заявок): оценка кредитоспособности клиента
оценивается на основании данных указанных в заявке. Риск оценивается
на основании социальных, демографических и финансовых показателей
заемщика.
2. Behavioral Scoring (поведенческий скоринг): по функционалу напоминает
скоринг заявок, но содержит в себе данные о поведении клиента, такие
как анализ графика погашения кредитов, обороты по личным счетам и т.д.
Динамическая оценка состояния кредитоспособности позволяет гибко подходить к работе с каждым клиентом, увеличивать или уменьшать кредитные
линии, применять различные стимулирующие программы и т.д.
3. Collection Scoring (классификационный скоринг): в основном используется
для работы с проблемными клиентами путем классификации на группы по
уровню их несостоятельности. Позволяет в первую очередь выделить заемщиков недобросовестных заемщиков из всей массы клиентов кредитной
организации для планомерной работы с просроченной задолженностью и
принятия мер до момента ее списания, продажи или передачи в коллекторское агентство.
4. Fraud Detection (скоринг афер): классифицирует заемщиков на предмет мошеннических действий.
Все перечисленные системы скоринга представляют собой формализованные модели. В настоящее время - это автоматизированные информационные
системы. Для создания эффективной информационной системы необходима
разработка математической модели или модели скорринга.
По способу построения модели скоринга различают [31; 35]:
1. Априорные модели – строятся на основе экономических моделей, включающих статистические данные, макроэкономические показатели о состоянии экономики и данных, характеризующих финансовое состояние клиента. Разработкой такого рода моделей занимаются эксперты, способные не
только построить модель, сформулировать критерии оценки но и дать им
значимую (числовую) оценку. В последствии, по мере наполнения модели
данными, она может уточняться. Таким способом строятся скоринговые
карты и экспертные системы.
16
2. Апостериорные модели – опираются в основном на уже имеющиеся данные о клиенте, собранные ранее. В этом случае, широкое распространение
получили методы искусственного интеллекта и анализа больших массивов
данных. По историческим данным о клиентах кредитной организации и
результатах выдачи кредитов восстанавливается зависимость между критериями оценки клиента и его финансовой дисциплиной. Такого рода модели,
в большинстве своем, имеют вид регрессионной зависимости или классификатора.
С точки зрения формальной постановки задача построения скоринговой
системы относится к задаче анализа больших объемов данных (Data Mining)
[36], который заключается в обработке массивов данных с целью выявления
скрытых закономерностей. Так как все кредитные и не кредитные учреждения
собирают большое количество данных о клиентах. Данные методы позволяют
решать задачи по сегментации клентов (разделения их на группы) путем анализа вторичных признаков, которые могут использоваться не только в скоринге,
но и в бенчмаркетинге [37–39].
Для кредитного скоринга применяются как одиночные методы интеллектуального анализа данных, так и их комбинации [40–44].
Наиболее используемые прикладные модели для выполнения задачи скоринга основаны на методах классификации и логистической регрессии.
Классификация может использоваться в любом контексте рассматриваемой задачи, когда на основе имеющейся информации или решения делается
прогноз, а также она может быть методом, который классифицирует объекты
заданного набора в некоторые группы на основе их характеристик.
В работе [45] выполнено исследование нескольких методов классификации для целей скоринга, минимизирующего кредитный риск финансовой организации. Рассматривались вероятностные методы, нейронные сети, деревья
решений и метод -ближайших соседей (k-NN), а также некторые комбинации
перечисленных методов. По результатам исследования метод -ближайших соседей показал лучшие результаты среди рассматриваемых. При оценке рисков
кредитования хорошие результаты, по сравнению с классическими (логистической регрессией, дискриминантным анализом), были получены на основе
иерархических методов. В работе [46] был исследован метод групповой иерархии (M.H.DIS), который в задаче классификации показал большую точность,
чем любой сравнительный метод. Аналогично в работе [47] проведена оценка эффективности применения некоторых методов классификации для задачи
17
оценки кредитоспособности заемщика. В частности, рассматривались методы:
линейный дискриминантный анализ (LDA), логистическая регрессия, нейронные сети, k-ближайших соседей (k-NN), метод опорных векторов (SVM), деревьев решений (CART) и многомерных адаптивных регрессионных сплайнов
(MARS). Основываясь на этом исследовании, можно сделать вывод, что методы
SVM, MARS, логистическая регрессия и нейронная сеть позволяют получить
хорошую классификацию, при этом с точки зрения реализации системы кредитного скорринга методы LDA и CART являются все таки более удобными.
Отдельной задачей при построении систем кредитного скоринга является
анализ анкеты и её оценка по заранее выбранному критерию. Так, в работах
[48; 49], проведены исследования по сравнению показателей анкеты установленному критерию - модель схожести (SOM), например отклонение финансовых возможностей клиента от средних по региону. Было показано, что целесообразней использовать данные типы моделей в совокупности с некоторым
классификатором, который часто выступает в качестве некоторого профиля.
Построение самого классификатора можно выполнить на основе,например, метода -ближайших соседей (k-NN) [49].
При построении классификаторов, основанных на методах: деревьев решений, опорных векторов, нейронных сетей, логистической регрессии и наивный байесовский классификатор, возникает проблема с оценкой доли объектов от общего количества носителей признака, верно классифицированных как
значимый признак и долей объектов от общего количества объектов, ошибочно отнесенных к значимым. Для устранения этого несоответствия используется метод ROC2 -кривых, который помимо указанного недостатка повышает
прогностические свойства алгоритма [43]. Количественной оценкой в ROCанализе является показатель AUC (англ. area under ROC curve, площадь под
ROC-кривой). Он численно равен площади, ограниченной ROC-кривой и осью
долей ложных положительных классификаций. Чем выше показатель AUC,
тем более качественный классификатор, при этом значение 0,5 демонстрирует
непригодность выбранного метода классификации, так как фактически соответствует случайному угадыванию.
В работе [50] для целей анализа кредитоспособности использовались
алгоритмы на основе математического программирования (МП), проводилось
2
Перевода данного термина на русский язык не существует, в специальной литературе термин известен как
кривая ошибок
18
Рисунок 5 – Графическая интерпретация смысла кривой AUCROC
сравнение дискриминантный метод анализа с логистической регрессией, дискриминантный анализ, классификатор k-NN и метод опорных векторов. Оценив
эти методы с точки зрения возможности прогнозирования в задачах классификации выявлено, что CART и нейронная сеть превосходят другие методы.
Задача бинарной классификации исследовалась в работе [51] на данных, содержащихся в 14 выборках. В исследовании [52] исследовалась точность алгоритмов на основе K-Nearest Neighbor, Support Vector Machine и Neural
Network, причем нейронная сеть не содержащая функции активации показала
лучшие результаты (фактически сеть отражала линейную функцию или линейную регрессию). Ансамбли классификаторов при прогнозировании кредитного риска исследовались в работе [53]. Показана их большая прогностическая
способность по сравнению с отдельными деревьями решений. Также методы
ансамблей хорошо себя зарекомендовали при работе с несбалансированными
данными [31], содержащими в том числе пропущенные значения признаков.
Перечень работ, посвященных построению систем кредитного скоринга с использованием различных методов, представлены в таблице 1.
- Нейронная сеть (Neural network): искусственные нейронные сети (ANN)
относятся к методам нелинейного статистического моделирования, в основе которых лежит принцип работы нейронов человеческого мозга. Они
являются мощными инструментами для аппроксимации и поиска зависимостей, а также прогнозирования. ANNs может распознать сложную зависимость между входными и выходными переменными, а затем предсказать
результат новых независимых входных данных.
19
- Байесовский классификатор (Bayesian classifier): классификатор Байеса
- простой вероятностный классификатор, основанный на применении теоремы Байеса (по байесовской статистике) с сильными (наивными) предположениями о независимости признаков (т.е. значение одного параметра не
оказывает влияния на второй3 ), положенных в основу классификации, особенно подходит для тех задач, когда размерность задачи высока. Наивный
классификатор Байеса предполагает, что параметры каждого класса могут
быть получены отдельно, и это значительно упрощает обучение. Основным
недостатком этой модели является то, что точность прогноза сильно коррелирует с этим предположением. Преимущество этого метода заключается в
том, что для оценки параметров требуется небольшое количество исходных
данных необходимых для построения классификатора.
- Дискриминантный анализ (Discriminant analysis): Дискриминантный анализ, который был изучен Фишером еще в 1936 году , является альтернативой логистической регрессии, которая предполагает, что объясняющие переменные следуют за многомерным нормальным распределением и имеют
общую дисперсионно-ковариационную матрицу. Этот метод используется
для отнесения объекта классификации к одному из двух и более классов,
причем классы предполагаются заданными. Предполагается, что зная эти
признаки, каждый объект из генеральной совокупности можно отнести к
определенной группировке с достаточно высокой вероятностью. В отличие от других методов анализа, вопрос о том, различаются ли группы по
данному признаку, второстепенен. Важно не то, что объекты в принципе
различается, а по каким признакам можно провести разделение на классы
наилучшим образом. Недостатком метода является то, он основан на допущении о нормальном распределении признаков и существовании линейной корреляции между ними. В задачах с дискретными и качественными
признаками такое предположение приводит к неправильным результатам
классификации. В случае наличия сильной корреляции между признаками, положенными в основу классификации метод работает гораздо хуже,
так как формируется избыточность. Поэтому избыточные признаки лучше
сразу определить и удалить из модели.
- Логистическая регрессия (Logistic regression): Логистическая регрессия это частный случай обобщённой линейной регрессии [54]. Эта модель часто
3
термин Naive, наивность отражает именно этот подход, смелое «наивное» предположение, обычно это не
верно
20
применяется для построения моделей на основе набора признаков, которые
могут представлять собой как непрерывный, дискретный или дискретнонепрерывный массив данных. Как правило, зависимая или переменная отклика (фактор) является непрерывно-дискретной. В логистической регрессии связь между фактором и признаком не являются линейной функцией,
что является главным преимуществом моделей построенных на её основе.
Слабость модели заключается в том, что независимые переменные (признаки) линейно связаны с логитом4 .
- Метод k-ближайших соседей (K-nearest neighbor)5 : данный метод позволяет построить непараметрический классификатор, основанный на учете
сходства признаков, положенных в основу классификации. Является самым простым методом. Классифицируемый объект относится к тому классу, которому принадлежат ближайшие к нему объекты исходной обучающей выборки. Данный метод основывается на минимизации функции
расстояния между новым объектом и уже размеченными данными, упорядоченными данными, и тем самым, определяет к какому классу его
можно отнести. По сути метод k-ближайших соседей не строит классификацию как таковой, а формирует некоторый шаблон, каждый раз прогоняя неизвестные данные через всю совокупность. В качестве функции
расстояния, или метрики, могут быть использованы: Евклидова метрика


∑︀
∑︀
()
() 2
()
( ,  ) =   ( −  ) ,  - метрика ( ,  ) = (  | −
=1
=1
()
()
∞ - метрика ( ,  ) = =1,..., | −  |, 1 - метрика

∑︀
()
()
(1)
()
( ,  ) =
| −  |, где  = ( , . . . ,  ) - вектор признаков -го
=1
(1)
()
объекта, = ( , . . . ,  ) - вектор признаков -го объекта. Метод, по-
()
 | )1/ ,
мимо выбора метрики и значения , имеет много недостатков главным из
которых является необходимость хранения обучающей выборки целиком,
что может быть критично на задачах с большим количеством данных.
- Дерево принятия решений (Decision tree): Дерево классификации является древовидным графиком или решающим графом. Самый верхний узел
4
здесь подразумевается, что для устранения несоответствия области значений классов в диапазоне [0; 1] значениям
признаков, который
могут изменяться в пределах (−∞; ∞) решается вводом натурального логарифма
(︂
)︂
 ( = |)
 ( = |)
=  ·  определяет принадлежность к классу. Т.е. логит
=  ·  , где
1 −  ( = |)
1 −  ( = |)
(︂
)︂
 ()
преобразование вводит «сигмоид»: ( ()) = 
.
1 −  ()
5
в данном случае речь идет именно о методе k- ближайших соседей, который в отличие от метода k-ближайшего
соседа является более совершенным и лишен недостатка, связанного с наличием шумов в исходных данных.
21
в этом дереве является корневым узлом, решение которого должно быть
достигнуто. В каждом внутреннем узле выполняется тест по атрибуту или
входной переменной. Каждая ветвь, которая следует за узлом, приводит к
соответствующему классу, которые представлены листовыми узлами. Деревья классификации используются, когда переменная отклика является
количественной (дискретной) или качественным. Суть метода заключается
в максимизации меры однородности, когда процесс деления на классы уже
осуществить нельзя. Преимущество этого метода заключается в том, что он
представляет собой модель с так называемым «белым ящиком», и поэтому,
понимать и интерпретировать результаты достаточно легко. Однако метод
содержит недостатки среди которых главным является то, что в некоторых
случаях деревья получаются слишком большие.
- Анализ выживаемости (Survival analysis): этот метод представляет собой достаточно новую модель кредитного скоринга. Обычный метод может
различать хороших и плохих заемщиков в момент подачи заявки на кредит и часто находит применение при скоринге заявок (Application scoring).
Также имеется возможность вычислить рентабельность процесса кредитования клиентов и спрогнозировать прибыль [55]. По сути метод, вместо
вероятности дефолта, предсказывает время наступления данного события.
- Метод нечеткой логики (Fuzzy rule-based system): в системах на основе
данного метода используется набор правил, которые точно определяют кредитный рейтинг, в то время как другие методы, применяемые в системах
кредитного скоринга не акцентируют свое внимание на то каким образом получены результаты. Преимущества этой модели заключаются в том,
что нечеткие правила способны обрабатывать как количественные и качественные факторы, поэтому, если имеется большой набор входных данных,
результаты будут менее чувствительны шумам и ошибкам.
- Метод опорных векторов (Support vector machine): Данный метод, разработанный известным советским ученым В.Н. Вапником [56–58], относится
к семейству «линейных классификаторов». Он обладает особым свойством
- непрерывным уменьшением эмпирической ошибки классификатора и увеличение зазора, поэтому известен также как метод классификатора с максимальным зазором. Суть метода заключается в переводе исходных векторов
в пространство более высокой размерности и поиск разделяющей гиперплоскости с максимальным зазором в этом пространстве. Две параллельных
гиперплоскости строятся по обеим сторонам гиперплоскости, разделяющей
22
классы. Разделяющей гиперплоскостью будет гиперплоскость, максимизирующая расстояние до двух параллельных гиперплоскостей. Алгоритм работает в предположении, что чем больше разница или расстояние между
этими параллельными гиперплоскостями, тем меньше будет средняя ошибка классификатора. Преимущества метода заключаются в том, что в случае непараметрических данных SVM не требует никаких предположений о
структуре данных, таких как нормальное распределение и непрерывность,
поэтому хорошо подходит для категориальных классификационных задач.
Существуют две реализации этого метода: первая soft-margin SVM (метод
опорных векторов с мягким зазором) используется в случае невозможности линейного разделения данных на классы, тогда вводится параметр настройки (в качестве метода настройки применяется скользящий контроль),
который позволяет регулировать отношение между максимизацией ширины разделяющей полосы и минимизацией суммарной ошибки, hard-margin
SVM (метод опорных векторов с жестким зазором) применяют в случае
линейной различимости классов. Слабые стороны этого метода заключаются в том, что его довольно трудно интерпретировать, невозможно определить вероятности попадания значений в определенный класс и применяется
он только для задач бинарной классификации [34].
- Гибридные модели (Hybrid models): эти модели в настоящее время получают наибольшее распространение в системах кредитного скоринга. Представляют собой комбинацию двух и более методов машинного обучения.
Преимущество такого подхода заключается в том, что он позволяет сделать
систему более гибкой и универсальной, тем самым, устранить конкретные
недостатки и ограничения метода. Как правило, такие модели кредитные
организации разрабатывают самостоятельно и получить о них информацию
крайне сложно. Недостатком такого подхода является сложность в реализации [34].
Проведя анализ литературных источников можно сделать вывод о том, что
в настоящее время не существует универсальных методов решения поставленной задачи. Каждый отдельный тип скоринга и применяемая для его реализации
модель (Таблица 1) может быть эффективным методом снижения потенциальных рисков заемщика. Однако, как показывают последние публикации ни один
метод не может охватить весь спектр задач скоринговой системы, так как по
мере её развития, к ней возрастают требования по получению на основе данных
23
Таблица 1 – Подходы к разработке моделей кредитного скоринга
Технология анализа
(рус.)
Дискриминантный анализ
Логистическая регрессия
Data mining techniques
(eng.)
Discriminant analysis
Logistic regression
Нейронная сеть
Neural network
Байесовский классификатор
Bayesian classifier
Метод k-ближайших соседей
Дерево принятия решений
K-nearest neighbor
Decision tree
Анализ выживаемости
Survival analysis
Метод нечеткой логики
Fuzzy rule-based system
Метод опорных векторов
Support vector machine
Гибридные модели
Hybrid models
Работы, посвященные
данной тематике
[59], [60], [61], [62], [63], [64]
[65], [66], [67], [68], [69],
[70], [71], [72]
[73], [74], [75], [76], [77],
[78], [79], [80]
[81], [82], [83], [84], [85],
[86], [87]
[88], [89], [90], [91], [92], [93]
[94], [95], [47], [96], [97],
[98], [99], [100]
[101], [102], [55], [103], [104],
[105], [106], [107], [108], [109], [110]
[111], [112], [68], [113], [114],
[115], [116], [117], [118]
[119], [120], [121], [122], [123],
[124], [125], [126], [127], [128],
[129], [130], [131], [132], [133], [134]
[135], [136], [137], [138], [139],
[140], [141], [142], [143], [144],
[145], [146]
дополнительной информации о клиенте, во многих случая расширяя её функциональность. Появление гибридных моделей связано с многоаспектностью
решаемой задачи. Например, по мере накопления данных о клиентах часто
скоринговые системы используются для различных целей, не только снижения рисков и формирование кредитного портфеля, но и например для оценки
эффективности работы кредитной организации с клиентом, построения профилей заемщиков и решение уже противоположной задачи - кластеризации и
другие. Опыт показывает, что возникновение внешней, по сравнению к кредитной организации (оценка клиентов) и внутренней (результативность работы)
задачи порождает противоречия, которые не в состоянии решить используя ни
один из рассмотренных подходов самостоятельно. Поэтому гибридные модели
в будущем будут иметь все большее распространение для построения универсальных систем на основе известных алгоритмов анализа больших данных. Тем
не менее, актуальность задачи изучения и совершенствования существующих
методов анализа данных о клиентах кредитной организации для построения
систем кредитного скоринга будет возрастать.
24
1.3
Концептуальная схема нахождения скоринговых правил
Основу любой скоринговой системы составляет математическая модель.
Математическая модель [147; 148] - это описание некоторого явления или закономерности в виде одной или нескольких функций. Вид этих функций определяется специалистом, как правило это математик [149–151]. Математическая
модель в данном случае должна быть точно интерпретируемой и отражать в
рамках исследуемой закономерности все её ключевые особенности. При построении математической модели сначала создается параметрическое семейство функций, затем с помощью численного или аналитического исследования
выполняется её идентификация, состоящая в нахождении параметров [152]. В
целом математическое моделирование отличается от регрессионного анализа,
так как в регрессии функциональная связь между коэффициентами, зависимой
и независимой переменными уже известна. К тому же, в случае математического моделирования измеряемые данные используются для верификации модели,
но не для её построения, что характерно для регрессионного анализа. При этом,
сама модель базируется на известном характере закономерностей положенных в
основу каждой математической функции. Это, как показывают многочисленные
опыты, для сложных процессов, включающих большое количество закономерностей, может быть крайне затруднительным.
Строить модель скоринга, как было показано выше 1, можно на основе
различных методов. Однако преимущество методов, позволяющих проводить
интерпретацию решения является очевидным. К ним относятся логистическая
регрессия (Logistic regression) и методы на основе деревьев принятия решений (Decision tree).
Регрессионные модели образуют широкий класс математических функций, описывающих некоторую закономерность. Её несомненным достоинством
является то, что она может быть применима ко многим явлениям и процессам
[153]. При этом, не акцентируя внимание на свойствах исследуемой закономерности, для построения модели, в большинстве случаев, используются измеряемые данные. Основным свойством такой модели является её точность, но
трудно интерпретируема с точки зрения специалистов данной прикладной задачи. Это объясняется либо большой сложностью регрессионной модели, либо
большим числом возможных моделей - претендентов, которые могут использоваться для построения наиболее её модели [154–156].
25
Задача классификации в противовес регрессии, известно множество характеристик, параметров или классов, из которых требуется построить структуру математической модели, путем разделения характеристик при помощи
меток. До момента построения структура модели заранее не известна. При
этом структура модели может в процессе решения меняться из-за возможности
применять функции разного вида при построении связей между классами.
В ходе реализации процесса классификации [157] выявляются признаки,
характеризующие группу, к которой принадлежит тот или иной объект. Это
делается посредством анализа уже классифицированных объектов и формулирования некоторого набора правил. Целью классификации является построение
классификационной модели называемой классификатором, который будет предсказывать класс на основании имеющихся значений атрибутов. В этом смысле
кластеризация очень близка к определению классификации, за исключением
того, что изначально классы исследуемой предметной области не заданы.
В основу регрессионного и математического моделирования положен принцип, называемый суррогатным моделированием [158; 159], сущеность которого
заключается в том, что сложная в создании или трудно поддающаяся идентификации математическая модель приближается некоторой функцией регрессии.
Например, дана функция  дискретного или непрерывного аргумента и требуется найти функцию  из некоторого параметрического семейства, например
среди алгебраических полиномов заданной степени.
Параметры функции  должны доставлять минимум некоторому функционалу, например,
⎛
(, ) = ⎝
1
−
∫︁
⎞ 12
| () − ()|2 ⎠

При построении прогноза на основе регрессионных моделей используются два подхода: интерполяция и экстраполяция. Под Интерполяцией функций
понимается частный случай задачи построения приближения, когда необходимо, чтобы в определенных точках, называемых узлами интерполяции, значения
функции  и приближающей её функции  совпадали. В более общем случае
накладываются ограничения на значения некоторых производных  . То есть,
дана функция  дискретного аргумента. Требуется отыскать такую функцию
 , график которой проходит через все точки . При этом понятие расстояния
26
обычно не используется, однако часто вводится понятие гладкости искомой
функции.
Как и задача регрессионного анализа, задача классификации решается в
целях последующего прогнозирования переменной отклика, которую обозначают в виде номера класса.
Задачей классификации является предсказание категориальной зависимой
переменной (т.е. зависимой переменной, являющейся категорией) на основе выборки непрерывных и/или категориальных переменных. Другой вариант классификации возникает, если зависимая переменная может принимать значения
из некоторого множества предопределенных классов. В этих случаях рассматривается множество классов для зависимой переменной.
Поиск правил относится к задачам машинного обучения для систем кредитного скоринга, которые принято разделить на ряд категорий:
- контролируемое обучение или «обучение с учителем» (supervised learning);
- неконтролируемое обучение (unsupervised learning) (в частности, кластеризация);
- обучение с подкреплением (reinforcement learning).
Одним из отличий задач классификации от задач регрессионного анализа
является то, что в последней прогнозируемые признаки допускают только количественное измерение (например, цена квартиры, доход от рекламы, количество
холестерина в крови пациента), в то время как в задаче классификации прогнозируемые признаки могут быть качественными (например, цвет глаз людей,
вкус или запах пищи, уровень знаний студентов, качество выпускаемой продукции, уровень комфорта в отеле и т.д.). Иногда о таких характеристиках говорят
как о «признаках с качественной группировкой».
Возникающая здесь проблема заключается в том как много случайных
примеров необходимо использовать при обучении для того, чтобы гарантировать достаточно малую ошибку классификации с заданной степенью достоверности [160].
Исходя из этого, для построения модели скоринговых правил, допускающих наличие категориальных переменных, базовой моделью, в нашем случае,
является дерево решений. Дерево решений является одним из самых известных
методов, используемых для извлечения классифицируемых данных из больших массивов данных. Существует несколько причин их широкого применения.
Большинство деревьев решений не требуют большого количества параметров
для их настраивания. Сама конструкция деревьев решений имеет привлекатель27
ную, интуитивно понятную топологию [161], а результаты классификационных
моделей очень легки для понимания [161; 162]. В большинстве случаев точность деревьев решений сопоставима или выше других моделей классификаций
[163].
Идея, лежащая в основе деревьев решений, состоит в разбиении исходного множества возможных значений вектора признаков (независимых переменных) на непересекающиеся множества и подгонке простой модели для каждого
из таких множеств. Топология деревьев решений реализуется на основе нечетких правил «ЕСЛИ–ТО», которые рассматриваются как общие структурные
элементы дерева решений [164]. Понятие дерева решений опирается на аналогичное понятие из теории графов и понятие обучающей выборки из теории
распознавания образов.
Из конечного непустого множества  строится граф  = (, ), элементами которого являются вершины и множества пар вершин , называемых
ребрами. Последовательность ребер вида (1 , 2 ), (2 , 3 ), . . . , ((  − 1),  ) образует путь в графе. Если 1 =  , то такой путь называется циклом. Если пара
вершин ,, образующая ребро (, ), является упорядоченной, то такое ребро
называется ориентированным или дугой, ведущей из вершины  в вершину .
Если все ребра графа ориентированы, то такой граф называется ориентированным. Таким образом дерево представляет собой связный граф без циклов. Под
корневым понимается дерево, в котором одна вершина выделена и называется
корнем.
В ориентированных корневых деревьях, в которых дуги направлены по
направлению от корня. В этом случае они должны удовлетворять следующим
условиям:
- существует только одна вершина, называемая корнем, в которую не ведет
ни одна дуга;
- в каждую вершину (исключая корень) ведет только одна дуга;
- существует единственный путь от корня к любой вершине.
Если (, ) — некоторая дуга, то вершина  называется родителем , а
вершина  — потомком вершины . Вершина, не имеющая потомков, называется терминальной вершиной или листом. Дерево называется бинарным, если
каждая его вершина (за исключением терминальных вершин) имеет ровно двух
потомков.
Понятие обучающей выборки является основополагающим в теории распознавании образов и используется при построении деревьев решений. Под
28
обучающей выборкой понимается независимая выборка  = { ,  }(=1) из
некоторого (неизвестного) распределения  (, ) =  () (|). Здесь  ,  =
1, 2, . . . ,  — векторы признаков (называемые прецедентами), координаты которых представляют значения  признаков (независимых переменных), измеренных на некотором объекте (образе). Множество всех возможных значений векторов признаков  называется пространством образов. Признаки
могут быть измерены в различных шкалах — числовой, порядковой или номинальной. Соответствующие  представляют собой значения зависимой переменной. Если  может принимать только конечное число значений, т.е.
 ∈ {1 , 2 , . . . ,  },  ≥ 2, то имеется задача классификации. В этом случае
 называется меткой класса и определяет принадлежность соответствующего
объекта к одному из  классов, а сам признак называется классовым; если же 
измерены в числовой шкале, то мы имеется задача регрессии. В данном случае
построения регрессии, признак называется откликом.
Деревом решений называется дерево, с каждой вершиной  которого связаны [54]:
- Некоторое подмножество  ⊂ ; с корневой вершиной связывается все
пространство образов ;
- Подвыборка  ⊂  обучающей выборки , такая, что  = {(, ) ∈  :
 ∈  }, таким образом с корневой вершиной связывается вся выборка ;
- Некоторая функция (правило)  :  −→ {0, 1, . . . ,  − 1} (здесь  ≥ 2
- количество потомков вершины ), определяющая разбиение множества
 на  непересекающихся подмножеств. С терминальными вершинами не
связывается никакая функция.
Обозначим () ,  = 0, 1, . . . ,  − 1 вершину, являющуюся –м потомком
вершины . Множество  и правило  определяют множества () следующим образом:
() =  ∩ { ∈  :  () = }
(1)
Цель построения дерева решений заключается либо в классификации векторов  из распределения  (), либо в оценке условного математического ожидания отклика при данном значении . Процесс принятия решений начинается
с корневой вершины и состоит в последовательном применении правил, связанных с вершинами дерева. Результатом этого процесса является определение
терминальной вершины  такой, что  ∈  . В случае классификации вектор
 относится к классу, являющемуся мажорантным (наиболее часто встречаю29
щимся) в подвыборке  , соответствующей данной терминальной вершине, а в
случае регрессии оценка условного математического ожидания отклика представляет собой среднее значение отклика в этой подвыборке (в этом случае
дерево решений часто называют деревом регрессий).
Существует множество алгоритмических способов построения деревьев
решений, таких как CART, C4.5, NewId, ITrule, CHAID, CN2 и т.д. Наиболее
распространенными из них являются:
- Алгоритм ID3 является одним из наиболее простых алгоритмов построения. Для выбора атрибута в алгоритме ID3 используется критерий прироста
информации (уменьшения энтропии) [165]. К преимуществам алгоритма
ID3 можно отнести его простоту и возможность построения не только бинарных ДР. Основным недостатком алгоритма ID3 является тенденция к
переобучению.
- Алгоритм С4.5 является развитием алгоритма ID3. Для уменьшения склонности алгоритма к переобучению в данном алгоритме вводится дополнительный показатель, который представляет собой оценку потенциальной
информации, созданной при разбиении множества  на  подмножеств
[165]. Достоинствами алгоритма С4.5 являются меньшая, чем в ID3 склонность к переобучению, возможность работы с пропущенными значениями
атрибутов и то, что в отличии от алгоритма CART, алгоритм С4.5, как
и ID3, позволяет строить произвольные деревья решений не являющиеся
бинарными.
- Алгоритм CART. Данный алгоритм был предложен в 1984 г., построенные с помощью CART, являются бинарными, то есть содержат только два
потомка в каждом узле [166]. Главным преимуществом алгоритма CART
является возможность построения как классификационных, так и регрессионных моделей. К недостаткам можно отнести то, что данный алгоритм
может строить только бинарные деревья решений.
При использовании алгоритмов построения деревьев решений, к ним применяются ряд требований, обеспечивающих их работоспособность:
- Описание атрибутов. Исходные данные, необходимые для правильной работы алгоритма, должны иметь структуру в виде плоской таблицы. Вся информация об объектах (далее примеры, признаки) из предметной области
должна описываться в виде конечного набора признаков (далее атрибуты,
факторов). Каждый атрибут (фактор) должен иметь дискретное или числовое значение. Сами атрибуты (факторы) не должны меняться от примера к
30
примеру, и количество атрибутов (факторов) должно быть фиксированным
для всех примеров (признаков).
- Определенные классы. Каждый пример должен быть ассоциирован с конкретным классом, т.е. один из атрибутов (факторов) должен быть выбран в
качестве метки класса.
- Дискретные классы. Классы должны быть дискретными, т.е. иметь конечное число значений. Каждый пример должен однозначно относиться к
конкретному классу. Случаи, когда примеры принадлежат к классу с вероятностными оценками, исключаются. Количество классов должно быть
значительно меньше количества примеров.
Алгоритм построения правил скоринговой системы в виде дерева решений заключается в следующем. Пусть дано множество примеров  , где каждый
элемент этого множества описывается  атрибутами. Количество примеров в
множестве  будем называть мощностью этого множества и будем обозначать
| |.
Пусть через {1 , 2 , . . . ,  } обозначены классы (значения метки класса),
тогда существуют 3 ситуации [167]:
- множество  содержит один или более примеров, относящихся к одному
классу  . Тогда дерево решений для  - это лист, определяющий класс
 ;
- множество  не содержит ни одного примера, т.е. пустое множество. Тогда
это снова лист, и класс, ассоциированный с листом, выбирается из другого множества отличного от  , скажем, из множества, ассоциированного с
родителем;
- множество  содержит примеры, относящиеся к разным классам. В этом
случае следует разбить множество  на некоторые подмножества. Для этого
выбирается один из признаков, имеющий два и более отличных друг от друга значений 1 , 2 , . . . ,  .  разбивается на подмножества 1 , 2 , . . . ,  ,
где каждое подмножество  содержит все примеры, имеющие значение 
для выбранного признака. Это процедура будет рекурсивно продолжаться до тех пор, пока конечное множество не будет состоять из примеров,
относящихся к одному и тому же классу.
Задача заключается в построении иерархической классификационной модели в виде дерева из множества примеров  . Процесс построения дерева
происходит сверху вниз. Сначала создается корень дерева, затем потомки корня и т.д. На первом шаге существует пустое дерево (имеется только корень) и
31
исходное множество  (ассоциированное с корнем). Требуется разбить исходное множество на подмножества. Это можно сделать, выбрав один из атрибутов
в качестве проверки. Тогда в результате разбиения получаются  (по числу значений атрибута) подмножеств и, соответственно, создаются  потомков корня,
каждому из которых поставлено в соответствие свое подмножество, полученное при разбиении множества  . Затем эта процедура рекурсивно применяется
ко всем подмножествам (потомкам корня) и т.д. Критерий выбора атрибута, по
которому должно пойти ветвление может быть различным. Очевидно, что в
имеется  (по числу атрибутов) возможных вариантов, из которых необходимо
выбрать наиболее подходящий. Преимущество данного алгоритма в том, что
не исключается повторное использование атрибута при построении дерева и
любой из атрибутов можно использовать неограниченное количество раз при
построении дерева.
Пусть осуществляется проверка  (в качестве проверки может быть выбран любой атрибут), которая принимает  значений 1 , 2 , . . . ,  . Тогда разбиение  по проверке  дает подмножества 1 , 2 , . . . ,  , при  равном соответственно 1 , 2 , . . . ,  . Здесь единственное, что доступно - это информация
о том, каким образом классы распределены в множестве  и его подмножествах,
получаемых при разбиении по . Исходя из этого, можно получить критерий,
положенный в основу разбиения.
Пусть  ( , ) - количество примеров из некоторого множества , относящихся к одному и тому же классу  . Тогда вероятность того, что случайно
выбранный пример из множества  будет принадлежать к классу  :
 =
 ( , )
.
||
(2)
Согласно теории информации [168], количество содержащейся в сообще(︀ )︀
нии информации, зависит от ее вероятности (log2 1 ).
Поскольку используется логарифм с двоичным основанием, то выражение
2 дает количественную оценку в битах:

∑︁
 ( ,  )  ( ,  )
 ( ) =
·
,
|
|
|
|
=1
32
(3)
получаем оценку среднего количества информации, необходимого для определения класса примера из множества  . В терминологии теории информации
выражение 3 называется энтропией множества  .
Помимо энтропийного подхода можно использовать теоретико – информационный (реализован в алгоритме C4.5). Для выбора наиболее подходящего
атрибута, предлагается следующий критерий:
⃒
 ⃒
∑︁
⃒  ⃒
⃒ ⃒ · ( ).
  ( ) =
⃒ ⃒
(4)
=1
Тогда критерием для выбора атрибута будет являться следующая формула:
() =  ( ) −   ( ).
(5)
Критерий 5 считается для всех атрибутов, а далее выбирается тот, который
максимизирующий данное выражение. Этот атрибут будет являться проверкой
в текущем узле дерева, а затем по этому атрибуту производится дальнейшее
построение дерева, т.е. в узле будет проверяться значение по этому атрибуту и дальнейшее движение по дереву будет производиться в зависимости от
полученного ответа.
Такие же рассуждения можно применить к полученным подмножествам
1 , 2 , . . . ,  и продолжить рекурсивно процесс построения дерева, до тех пор,
пока в узле не окажутся примеры из одного класса. Однако если в процессе работы алгоритма получен узел, ассоциированный с пустым множеством
(т.е. ни один пример не попал в данный узел), то он помечается как лист, и
в качестве решения листа выбирается наиболее часто встречающийся класс у
непосредственного предиката данного листа. Следует отметить, что критерий
(уравнение 5) должен стремиться к максимуму. Из свойств энтропии известно,
что максимально возможное значение энтропии достигается в том случае, когда все его сообщения равновероятны. В формуле 3, энтропия достигает своего
максимума, когда частота появления классов в примерах множества  равновероятна. Необходимо выбрать такой атрибут, чтобы при разбиении по нему
один из классов имел наибольшую вероятность появления. Это возможно в том
случае, когда энтропия (уравнение 3) будет иметь минимальное значение и,
соответственно, критерий (уравнение 5) достигнет своего максимума.
33
В случае с числовыми атрибутами, что следует выбрать некий порог, с
которым должны сравниваться все значения атрибута. Пусть числовой атрибут
имеет конечное число значений. Обозначим их {1 , 2 , . . . ,  }. Предварительно
необходимо выполнить сортировку всех значений, тогда любое значение, лежащее между  и +1 , делит все примеры на два множества: т.е., которые лежат
слева от этого значения {1 , 2 , . . . ,  }, и те, что справа {+1 , +2 , . . . ,  }. В
качестве порога можно выбрать среднее между значениями  и +1 .
  =
 + +1
.
2
(6)
Таким образом, существенно упрощаем задачу нахождения порога, и
приводим к рассмотрению всего  − 1 потенциальных пороговых значений
 1 ,  2 , . . . ,  −1 .
Формулы 3, 4 и 5 последовательно применяются ко всем потенциальным
пороговым значениям и среди них выбирается то, которое дает максимальное
значение по критерию в уравнении 5). Далее это значение сравнивается со значениями критерия уравнения 5, подсчитанными для остальных атрибутов. Если
выяснится, что среди всех атрибутов данный числовой атрибут имеет максимальное значение по критерию уравнения 5, то в качестве проверки выбирается
именно он.
Следует отметить, что все числовые тесты являются бинарными, т.е. делят
узел дерева на две ветви (Рисунок 6).
Рисунок 6 – Бинарное дерево решений
34
Бинарное решающее дерево – это алгоритм классификации, задающийся
бинарным деревом, в котором каждой внутренней вершине  ∈  приписан
предикат  :  → {0, 1}, каждой терминальной вершине  ∈  приписано имя
класса  ∈  . При классификации объекта  ∈  он проходит по дереву путь
от корня до некоторого листа, в соответствии с алгоритмом [150].
Для того, чтобы с помощью алгоритма C4.5 можно было построить дерево
решений, используемые данные, должны удовлетворять нескольким условиям:
- Информация об объектах, которые необходимо классифицировать, должна
быть представлена в виде конечного набора признаков (атрибутов), каждый
из которых имеет дискретное или числовое значение.
- Для всех примеров количество атрибутов и их состав должны быть постоянными.
- Множество классов, на которые будут разбиваться примеры, должно иметь
конечное число элементов, а каждый пример должен однозначно относиться к конкретному классу.
Исходя из этого, в некоторых случаях, для задач с нечёткой логикой,
когда примеры принадлежат к классу с некоторой вероятностью, алгоритм C4.5
не применим, т.к. в обучающей выборке количество примеров должно быть
значительно больше количества классов, к тому же каждый пример должен
быть заранее ассоциирован со своим классом.
Исходя из особенностей алгоритмов ID3 и С4.5 применить их для построения скоринговых систем затруднительно. Поэтому в настоящее время большее применение находит алгоритм CART (Classification And Regression Trees)
[166] и его модификации, особенностью которого является его обощенный подход к построению деревьев. В его основе лежит идея рекурсивного разбиения
множества на два однородных подмножества с помощью одного из признаков. В этом смысле, алгоритм CART является базовым алгоритмом бинарной
классификации на основе идеи которого реализовано большое количество различных способов построения деревьев решений. Ключевым понятием здесь
является понятие однородности.
Мера однородности. Способы расщепления корней дерева
Исходя из принципа однородности получаемых подвыборок (), получаемых на основе исходной, необходимо сформулировать правила, которые
позволили бы сформировать критерий разбиения. Здесь мера однородности ча35
сто соотносится с противоположным по смыслу понятием - «загразненность»
(impurity) [166]. Именно анализ загрязненности позволяет получить более качественную оценку.
Пусть  — некоторая вершина дерева решений, () — подвыборка, связанная с этой вершиной и () — загрязненность вершины. Естественно потребовать, чтобы загрязненность вершины была равна 0, если () содержит
прецеденты только одного класса и была бы максимальной в случае, если ()
содержит одинаковое число прецедентов каждого класса. Все приведенные ниже меры загрязненности удовлетворяют этому условию. Одной из наиболее
используемых является мера загрязненности вершины, основанная на понятии
энтропии (entropy impurity):
() = −

∑︁
 ( ) · log2  ( ),
(7)
=1
где  ( ) есть доля примеров класса  в подвыборке () и полагается
0 · log 0 = 0. Другой популярной мерой является индекс Джини (Gini) [169],
определяемый как

∑︁
() = 1 −
 2 ( ).
(8)
=1
Индекс Джини представляет собой частоту ошибочной классификации
при случайном назначении меток классов наблюдениям подвыборки (). Иногда применяется мера загрязненности, основанная на частоте ошибочной классификации:
() = 1 − max  ( ).
(9)

В формуле 9 () представляет собой частоту ошибочной классификации
если все наблюдения выборки () относятся к мажорантному (наиболее часто
встречающемуся) классу. Исследования, проведенные в работе [166] показали,
что выбор меры загрязненности не оказывает существенного влияния на точность классификации и более важным является выбор критериев остановки и
усечения дерева решений.
Методы расщепления вершин при построении дерева решений
Правило разбиения множества, связанное с каждой вершиной дерева решений, называется расщеплением (split). Количество подмножеств, на кото36
рые разбивается , в принципе может быть разным для разных вершин, однако, большинство алгоритмов основано на построении бинарных деревьев, т.е.
деревьев, в которых расщепление осуществляется на два подмножества. Это
связано с тем, что для любого дерева решений можно построить эквивалентное ему (с точки зрения принимаемых решений) бинарное дерево и, кроме того
(что весьма существенно), значительно облегчается программная реализация
алгоритма.
Бинарное расщепление вершины  можно рассматривать как функцию
 :  → {0, 1},  ∈ , где в случае  () = 0 вектор  относится к первому
(левому) потомку, а в случае  () = 1 – ко второму (правому). Обычно эта
функция имеет простой вид и зависит от значений только одного признака.
Именно, если некоторый признак  измерен в числовой шкале, то расщепление
состоит в выборе  , минимизирующего используемую меру загрязненности и
определении
{︃
0, при  <  ,
 () =
(10)
1, при  ≥  ,
Если признак  в выборке может принимать  различных значений, то
существует  − 1 возможное расщепление, сохраняющее порядок значений
признака  в подвыборках. Отсюда следует, что если все признаки обучающей выборки измерены в числовой шкале и используются только реализации
расщепления указанного вида, то области решений будут представлять собой
многомерные параллелепипеды, а часть границы области решений, соответствующая данному расщеплению, будет представлять собой часть гиперплоскости, параллельной соответствующей координатной оси в пространстве R .
Аналогичные расщепления используются и для признаков, измеренных в порядковой шкале.
Если признак  измерен в номинальной шкале и варьирует на уровнях из
множества , то возможные расщепления имеют вид
 () =
{︃
0, при  ∈ 1 ,
1, при  ∈ 2 ,
(11)
где 1 — произвольное непустое подмножество  и 2 =  − 1 .
В работе [170] в качестве признаков расщепления рассматривались их
линейные комбинации, которые сводятся к так называемым косоугольным де-
37
ревьям решений (oblique trees):
 () =
⎧

∑︁
⎪
⎪
⎪
0, при
  <  ,
⎪
⎨
⎪
⎪
⎪
⎪
⎩1, при
=1

∑︁
(12)
  ≥  ,
=1
В этом случае минимизация загрязненности осуществляется по параметрам 1 , 2 , . . . ,  и  . Исследования методов построения алгоритмов, реализующих для расщепления значения нескольких признаков, представлены в работах [171–174]. К сожалению сложность реализации такого рода алгоритмов, а
также невозможность последующей интерпретации полученных решений препятствует их повсеместному применению. Самый распространенный из данного рода алгоритмов является метод, предложенный Брейманом [175], известный
сегодня как метод главных компонент [176]. Суть его заключается в том, что
из исходной обучающей выборки сначала выделяются главные компоненты, а
на втором этапе по преобразованной выборке строится дерево решений.
Уменьшить загрязненность вершины  бинарных деревьев можно, используя зависимость:
Δ() = () −  ( ) −  ( ),
(13)
где  и   есть доли примеров подвыборки (), соответствующие левому и правому потомку ( и  ). Тогда, Δ() является лучшим расщеплением
вершины , которое можно определить следующем образом:
Δ() = () −

∑︁
 ( ),
(14)
=1
где  - количество потомков вершины ,  - доля примеров подвыборки

∑︀
(), соответствующая вершине  и
 = 1. Непосредственное использова=1
ние этой формулы, однако, приводит к тому, что чаще для расщепления будут
выбираться признаки, имеющие больше уровней по сравнению с остальными.
Поэтому обычно используется следующая формула:
Δ () =
Δ()
,

∑︀
−
 log2 
=1
38
(15)
и выбирается расщепление, максимизирующее величину Δ ().
При достижении максимума, процесс расщепления останавливается, это
является следствием того, что уменьшить загрязненность очередной вершины невозможно. Все такие вершины объявляются терминальными, а дерево
решений «полным». Эти вершины содержат примеры только одного класса.
Известно [166], что полное дерево, в большинстве случаев, обладает низкой
точностью классификации. Причина заключается в том, что статистическая
модель фактически описывает только саму выборку и непригодна в качестве
модели всей генеральной совокупности. На практике это явление носит название переподгонкой (overfitting).
Решением проблемы построения «полных деревьев» является принятие
решения об остановке расщепления. Это можно сделать следующими способами:
- задание минимального числа для количества наблюдений в подвыборках,
соответствующих терминальным вершинам (или минимальной доли наблюдений обучающей выборки)
- установить верхний предел для загрязненности вершины, т. е. задается
некоторое число  и расщепление вершины не происходит, если уменьшениe загрязненности при расщеплении не превышает .
- применить метод кросс-проверки, а именно, сравнивается количество ошибочно классифицированных наблюдений до и после расщепления вершины
и если сокращения ошибок не происходит, то вершина не расщепляется.
В случае бинарных деревьев альтернативой приведенным способам является статистический подход [177], основанный на статистике
2
 =
2
∑︁
( −  )2

=1
,
(16)
где  - количество наблюдений класса  , отнесенных в результате расщепления в левую подвыборку, и  – ожидаемое количество наблюдений в
левой подвыборке при случайном расщеплении вершины . Если максимальное значение (по всем возможным расщеплениям) статистики 2 не превышает
критического значения, соответствующего выбранному уровню значимости, то
расщепления не происходит и вершина объявляется терминальной.
Главным недостатком такого подхода, является то, что решение об остановке принимается без учета случая продолжения расщепления. Не исключено,
39
что дальнейшее расщепление потомков некоторой вершины могло бы существенно повысить точность классификации. В связи с этим данный подход
применяется крайне редко. Альтернативой является метод, основанный на построении и дальнейшем усечении (pruning) полных деревьев решений [177–
180]. Усечение означает процедуру замены в построенном полном дереве некоторой вершины и связанного с ней поддерева терминальной вершиной. Большинство методов усечения основано на оценке чувствительности поддеревьев
по отношению к некоторой мере и удалению поддеревьев, которые оказывают минимальное влияние на эту меру. Эмпирическое сравнение различных
методов усечения деревьев решений проведено в работах [181; 182]. Общим
недостатком всех методов усечения относится то, что они не могут гарантировать нахождение оптимального решения, а также высокая вычислительная
сложность.
Методы построения ансамблей классификаторов
Описанные выше подходы и особенности построения деревьев решений
побудили исследователей к разработке алгоритмов, устраняющих их недостатки. Попытки разработать универсальный алгоритм привели получили развитие
в такой области научного знания называемого «Machine Learning» или машинным обучением, родоначальником которой является Артур Самуэль [183;
184]. Именно им был сформулирован главный принцип построения алгоритма,
который не будучи явно запрограммированным мог самостоятельно в процессе
работы обучаться.
Методы ансамблей классификаторов представляют собой множество классификаторов, чьи решения комбинируются некоторым образом для получения
окончательной классификации наблюдений. Синтез решений отдельных классификаторов, составляющих ансамбль, осуществляется путем их голосования,
в том числе взвешенного.
Основной причиной, обусловившей распространение такого рода алгоритмов, состоит в том, что при определенных условиях ансамбли классификаторов обладают точностью, значительно превосходящей точность отдельных
классификаторов и робастны (устойчивы) по отношению к «зашумлению» обучающей выборки. Необходимым и достаточным условием высокой точности
ансамбля классификаторов является то, чтобы составляющие его классифика-
40
торы были сами достаточно точны и различны (diverse), т.е. совершали ошибки
на различных прецедентах [185].
Интуитивно это можно представить так: при наличии пяти классификаторов с точностью предсказания 60% можно назначать классифицируемому
объекту ту метку, которая предсказывается большинством из этих пяти слабых
классификаторов. Это ансамблевый метод классификации простым голосованием (или голосованием большинством). В таком случае, как это легко показать,
точность итогового классификатора повышается до 68%. Простое голосование
большинством является самым простым из такого рода алгоритмов. В работе
[186] перечисляются 18 типов таких алгоритмов, среди которых также голосование методом Борда (Borda count), нахождение «средней» и «серединной»
метки класса, адаптивное взвешивание «мнений» более точных классификаторов, ранжирование с последующей логистической регрессией на множестве
рангов, бэггинг, стекинг, бустинг, смесь локальных экспертов (Mixture of Local
Experts, MLE) и прочие. Среди множества ансамблевых методов классификации выделяют 3 класса:
- бэггинг (bagging, bootstrap aggregating) [175];
- бустинг (boosting) [187; 188];
- стекинг (stacked generalization, stacking) [189].
Наиболее простым из рассматриваемых методов является стекинг. Согласно [189] сущность алгоритма заключается в следующем:
- в соответствии с выбранным критерием, сходное множество разбивается
на два не пересекающихся подмножества;
- произвести обучение нескольких базовых классификаторов на одном из
подмножеств;
- произвести тестирование полученных классификаторов на втором подмножестве;
- используя предсказания из предыдущего пункта как входные данные, а
истинные классы объектов как выход, обучить мета-алгоритм.
Метод бэггинга предложенный Брейманом [175] основан на формировании обучающей выборки для каждого классификатора ансамбля с помощью
бутстрепа (bootstrap), т.е. случайной выборки (того же объема, что и исходная обучающая выборка) с возвращением из исходной обучающей выборки
и использовании метода голосования для агрегирования решений отдельных
классификаторов. Исследования в проведенные в работах [175; 190] показали,
что использование баггинга существенно повышает точность классификации в
41
случае неустойчивости базового классификатора, когда небольшие возмущения
обучающей выборки приводят к существенным изменениям в классификации.
Исследования, проведенные в работе [191] показывают, что применение
алгоритма бэггинга приводит к сокращению средней квадратичной ошибки
классификации, а сам классификатор является устойчивым. Благодаря этой
особенности алгоритм бэггинга получил наибольшее распространение в статистических исследованиях [191; 192]. Отчасти к данному классу методов относятся метод, основанный на формировании множества дизъюнктных подвыборок обучающей выборки и использовании методики кросс-проверки [193]
для формирования ансамбля классификаторов.
Бустинг (boosting, улучшение) - это метод последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий
алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов. Разработка такого подхода к построению классификаторов
получила свое начало в работе [194], где впервые были представлены теоретические основы алгоритма PAC (Probably Approximately Correct), суть
которого заключалась в построении улучшенного классификатора с использованием набора слабых классификаторов. Впоследствии в работе [195] удалось
улучшить алгоритм используя реализацию, которая значительно ускорила построение классификатора, при этом сам алгоритм обладает полиномиальной
сложностью, когда время работы зависит от размера исходных данных.
Бустинг над решающими деревьями считается одним из наиболее эффективных методов с точки зрения качества классификации благодаря простоте,
универсальности, гибкости, а также возможности построения различных модификаций. Алгоритмы бустинга обладают высокой обобщающая способностью.
Во многих экспериментах наблюдалось практически неограниченное уменьшение частоты ошибок на независимой тестовой выборке по мере наращивания
композиции, в результате чего, качество на тестовой выборке часто продолжало
улучшаться даже после достижения безошибочного распознавания всей обучающей выборки. Это перевернуло существовавшие долгое время представления
о том, что для повышения обобщающей способности необходимо ограничивать сложность алгоритмов. На примере бустинга стало понятно, что хорошим
качеством могут обладать даже сложные композиции при условии их правильной настройки. В дальнейшем было показано, что взвешенное голосование не
увеличивает эффективную сложность алгоритма, а лишь сглаживает ответы ба-
42
зовых алгоритмов. Количественные оценки обобщающей способности бустинга
формулируются в терминах отступа.
Эффективность бустинга объясняется тем, что по мере добавления базовых алгоритмов увеличиваются отступы обучающих объектов. Причем бустинг
продолжает раздвигать классы даже после достижения безошибочной классификации обучающей выборки. Следствием этого, в определенных ситуациях,
может произойти переобучение алгоритма, когда ошибка на последующих этапах начинает расти. Поэтому применяя алгоритм необходимо достаточно скурпулезно подходить к формированию обучающей выборки и контролировать
ошибку обучения.
Проведя анализ наиболее распространенных подходов к построению моделей классификации можно сделать вывод, что сфера применения данного
подхода в практической деятельности достаточно обширна. На сегодняшний
момент не существует универсальных методов решения задач регрессии и классификации, все определяется сферой и спецификой рассматриваемой области
знаний. Данные методы применяются в различных областях деятельности человека и безусловно оптимизируются под конкретную задачу. Однако, исходя из
практического опыта можно сделать вывод о том, что наибольшие перспективы имеют алгоритмы на ансамблях решающих деревьев, прежде всего бустинг
и бэггинг благодаря своей большей гибкости по сравнению с классическими
подходами.
В настоящее время следует проводить как можно исследований прикладного характера, использую данные методы, что позволит расширить их область
применения и выявить общие, схожие подходы к формулировке задач и обобщению результатов.
43
2.
2.1
Разработка скоринговой системы
Детальное проектирование скоринговой системы
При построении модели важное значение имеет общее представление о
структуре данных. Общая схема разработки скоринговой модели представлена
на рисунке 7. Ключевой моментом здесь является вопрос структуры данных,
из которых формируется обучающая, а в последствии тестовая выборка.
Особенностью данных, которые использовались в нашем случае при апостериорном подходе к разработке скориговой системы являлась их крайняя
неоднородность и наличие большого количества ошибок, например таких как:
пропуски данных, выпадающие значения. Природа этих ошибок разная или
данные такие или ошибка оператора. Данные были собраны из разных баз
данных о клиентах, но примерно совпадающих по структуре. Всего для анализа было отобрано 55 тысяч записей. Поэтому необходимо было подобрать
алгоритм, способный на их основе построить задачу классификации клиента
финансовой организации по набору характеризующих его признаков. Общая
характеристика признаков на основе описательных статистических параметров
представлена в приложении А.
Рисунок 7 – Схема разработка модели скоринговой системы
44
Из множества критериев, используемых для построения модели, были
сформированы укрупненные блоки данных, которые оказывают влияние на дисциплину клиента:
1. Блок факторов, характеризующий денежные переводы клиента:
- тип переводов,
- география переводов,
- география телефона,
- сумма перевода: максимальная, средняя, полная, за полгода до взятия
кредита, за год до взятия кредита.
2. Количество переводов:
- до напоминания по смс,
- после напоминания по смс,
- до взятия кредита,
- после взятия кредита,
- после попадания в просрочку.
3. Канал через который пришел клиент.
4. Блок характеризующий связь с клиентом:
- количество смс до отклика,
- дней до 1-ой смс,
- количество смс не связанных с кредитом.
5. Блок, характеризующий социально-демографические параметры клиента:
- возраст,
- пол,
- резиденство,
- совпало ли ФИО с телефоном,
- совпал ли регион получения кредита с регионом телефона,
- указан иной номер телефона при взятии кредита.
Как видно, структура данных рассматриваемой задачи крайне неоднородна, присутствуют как непрерывные, так и категориальные значения признаков,
наблюдается отсутствие значений. Поэтому применение «жестких» алгоритмов,
прежде всего нейронных сетей нецелесообразно [196; 197], так как они чувствительны к статистическим ошибкам, широкому варьированию признаков, а
так же не позволяют извлечь данные для анализа признаков из обученной сети.
Поэтому, обратимся к так называемым «мягким» алгоритмам искусственного
интеллекта – деревьям решений, а точнее методам их ансамблей.
45
В настоящее время существует достаточно большое количество алгоритмов, реализующих модель построения классификатора, поэтому решено было
проверить подойдет ли существующие решения для этой задачи.
Несмотря на то, что деревья решений получили широкое распространение
как достаточно эффективный метод решения задач регрессии и классификации,
они не лишены недостатков. Так как, отмечается в работе [166], полное дерево
обладает низкой точностью, это связано с проблемой перепрогонки, т.е. статистическая модель описывает только саму выборку и непригодна для всей генеральной совокупности. Решить данную проблему можно, например, используя
для расщепления несколько признаков [171–174], что значительно усложняет
алгоритм, или остановкой расщепления с целью получения усеченного дерева
[179; 180; 198; 199], но в этом случае нет гарантий получения лучшего или
оптимального результата.
В настоящее время получить достаточно простой и оптимальный алгоритм можно используя ансамбли классификаторов. Существуют два принципиально разных подхода к построению такого рода алгоритмов. Первый это
баггинг (bagging) или Bootstrap Aggregating [175]. Данный подход основан на
формировании обучающей выборки для каждого классификатора ансамбля с
помощью случайной выборки того же объема, что и исходная обучающая с
последующим использованием метода голосования для агрегирования отдельных классификаторов или усреднения в случае задачи регрессии. При этом,
неустойчивость базового классификатора, когда присутствуют незначительные
возмущения в обучающей выборке значительно повышают точность классификации. Наиболее распространенным вариантом реализации баггинга является
алгоритм случайных деревьев (Random Forest).
Конкурирующим методом построения ансамблей классификаторов является бустинг (boosting) [187] в котором обучение каждой последующей модели
основан на получении данных об ошибках в предыдущих моделях. Дальнейшее развитие алгоритма бустинга основан на построении аддитивной функции
в виде суммы деревьев решений аналогично методу градиентного спуска.
Нами была проведена работа по исследованию применения обоих подходов к решению поставленной задачи. При этом использовался инструментарий
библиотек Scikit-Learn [200], XGBoost [201], light GBM [202] и CatBoost [203].
Основными критериями оценки методов являлись скорость и точность. Базовую
модель формировали при помощи множества дизъюнктных подвыборок обучающей выборки и с помощью методики кросс-проверки [193]. Число подвыбо46
рок для всех вариантов задавали равным пяти. Для алгоритмов Random Forest
количество случайных деревьев выбирали равным 100, для Gradient Boosting
– шаг равным 0,001. Число итераций при обучении на каждой подвыборке
задавали равным 100.
Результаты экспериментального сравнения точности процесса классификации представлены в таблице 2.
Таблица 2 – Результаты экспериментального исследования алгоритмов на
основе данных о клиенте
№
п/п
1
2
3
4
5
6
Точность
Время работы
классификации алгоритма, секунд
Random Forest (Scikit)
0,823837
13,6
Random Forest (light GBM)
0,815782
9,21
Gradient Boosting (Scikit)
0,815942
13,01
Gradient Boosting (light GBM)
0,743241
8,42
Gradient Boosting (XGBoost)
0,838331
9,25
Gradient Boosting (CatBoost)
0,841533
37,41
Алгоритм/Библиотека
П р и м е ч а н и е . В численном эксперименте не использовали возможность
распараллеливания вычислений.
Исходя из данных таблицы 2 видно, что неявным аутсайдером по точности, но лидером по скорости является алгоритм случайных лесов, реализованный в библиотеке light GBM. Алгоритм компании Яндекс - CatBoost показал
себя как самый точный, но при этом самый ресурсоемкий, что выразилось в
большей длительности. Данная реализация алгоритма появилась относительно недавно, поэтому в дальнейшем рассматривать его не будем. Программные
реализации с использованием метода перекрестной проверки представлены в
приложении Б6 .
Вторым этапом нами была проведена работы по оптимизации некоторых
параметров алгоритма с целью выявления минимального объема данных, дающих требуемую точность прогноза, а также количества шагов обучения каждого
из алгоритмов.
На рисунке 8 представлены результаты расчета ошибки классификации
для алгоритма Random Forest при использовании двух выше обозначенных
6
Представленные программы уже содержат оптимальные настройки алгоритмов, которые были полученные в
ходе их исследования.
47
Рисунок 8 – Зависимость средней ошибки обучения от количества итераций
для алгоритма Random Forest для библиотек Scikit и light GBM.
библиотек - Scikit и light GBM. Прогнозирование ошибки велось на объеме
выборки в 1000 строк, при разбиении её на обучающую и тестовую в пропорции 80/20 соответственно. Видно, что Случайный лес в реализации light
GBM требует больше итерации для построения, чем Scikit. Однако при этом
полученная ошибка ниже.
В работе провели оценку величины выборки необходимой для получения точности, показанной на рисунке 1. Так, минимальное количество строк в
тестовой выборке для разных реализаций алгоритма различно, для Scikit оно
составляет 432, а вот для light GBM – 746.
Одним из важных достоинств случайных лесов состоит в возможности
оценки вероятности ошибочной классификации без перекрестной проверки.
Оценка осуществляется методом «Out-Of-Bag» [166; 204]. Известно, что каждое дерево, которое подбирается из бутсреп выборки и не содержит примерно 37% наблюдений обучающей выборки. Для классификации используются
только те деревья случайного леса, которые строились по бутстреп выборкам
используя метод голосования. Частота ошибочно классифицированных векторов обучающей выборки при таком способе классификации и представляет собой оценку вероятности ошибочной классификации случайного леса методом
OOB. Практика применения оценки OOB показала, что в случае, если количество деревьев достаточно велико, эта оценка обладает высокой точностью.
48
Как показано в работе [205] она может являться мерой оценки достаточности
количества деревьев и по ней также можно судить о достаточности количества
итерации.
Рисунок 9 – Результаты расчета вероятности ошибочной классификации.
Как видно из данных рисунка 9, обе реализации алгоритма Random Forest
при расчете вероятности ошибочной классификации наблюдается стабилизация
данного параметра, что доказывает достаточность ста итерации при построении
модели.
При исследовании алгоритмов градиентного бустинга ставилась задача
получения оптимального шага и стабилизации его параметров. Известно, что
данные алгоритмы имеют склонность к переобучению. Так как в первой части
работы были получены не высокие результаты точности прогнозирования.
Анализ данных рисунка 10 видно, что уменьшение шага при построении
ансамбля методом градиентного бустинга приводит к переобучению алгоритма, т.е. увеличение ошибки. Установлено, что оптимальным шагом является
диапазон от 0,05 до 0,1. В ходе эксперимента было установлено, что не все
реализации алгоритма градиентного бустинга одинаково ведут себя в ситуации
переобучения, отчасти это видно на рисунке 3. Так, наиболее устойчивым к
49
(а) Шаг обучения 0,1
(б) Шаг обучения 0,05
(в) Шаг обучения 0,01
(г) Шаг обучения 0,001
Рисунок 10 – Результаты расчета средней ошибки прогноза алгоритма
градиентного бустинга при различных значениях шага.
переобучению оказался алгоритм реализованный в библиотеке XGBoost, что
с учетом его других характеристик, прежде всего скорость, явно выделяет его
среди рассматриваемых.
Из данных рисунков 8 и 10 видно, что алгоритмы обладают хорошей прогностической способностью. Однако о качестве классификации, т.е. насколько
хорошо выполнена классификация исходных данных понять нельзя, о качестве
можно судить, например, по ROC кривой. Для анализа возьмем лишь первые 10 итераций для каждого алгоритма. На рисунке 11 представлены данные
50
(а) ROC кривая для алгоритма Random (б) ROC кривая для алгоритма Random
Forest (библиотека light GBM)
Forest (библиотека Scikit)
(в) ROC кривая для алгоритма Gradient (г) ROC кривая для алгоритма Gradient
Boosting (библиотека light GBM)
Boosting (библиотека Scikit)
(д) ROC кривая для алгоритма Gradient (е) ROC кривая для алгоритма Gradient
Boosting (библиотека XGBoost)
Boosting (библиотека CatBoost)
Рисунок 11 – Графики ROC кривой, характеризующей качество процесса
классификации алгоритмов баггинга и бустинга, для различных реализаций.
51
о качестве классификатора, построенного с использованием вышеописанных
библиотек.
Как видно из рисунка 11, лучшим качеством классификации обладают
алгоритмы бустинга, что подтверждает полученные ранее результаты и выводы.
Для построения систем кредитного скоринга и при работе с алгоритмами классификации на основе деревьев решений важно знать распределение
важности критериев, положенных в основу классификации.
(а) Для алгоритма Random Forest
(б) Для алгоритма Gradient Boosting
Рисунок 12 – Диаграмма распределения критериев по степени их важности
52
На рисунке 12 представлены диаграммы, иллюстрирующие распределение признаков и соответствующий им вес в итоговом дереве классификации.
В случае применения алгоритмов классификации на основе случайных лесов
(баггинга) (рисунок 12а), наиболее значимыми факторами, характеризующими
дисциплину клиента являются те, которые характеризуют дисциплину клиента, причем они являются первоочередными. Вторичными факторам являются
финансовые показатели. Остальные факторы являются менее значимыми.
В случае применения алгоритмов бустинга (рисунок 12б) финансовые
показатели являются первоочередными, на втором месте по значимости стоят
демографические показали клиента, а дисциплина имеет лишь третьестепенное значение. Вторым отличие результатов является большая равномерность в
ранжировании факторов.
Такое различие в результатах можно объяснить тем, что все-таки алгоритмы баггинга или случайных лесов для решения конкретно рассматриваемой
задачи апостериорного построения модели кредитного скорринга не совсем
подходят. Причина заключается в том, что критерии, положенные в основу
классификатора (исходные данные) содержат не только числовые характеристики, но и категориальные, что и вызывает такие расхождения в полученных
результатах. Если бы в основе модели можно было использовать один класс
данных, такое возможно лишь при априорном построении модели, либо категориальные, либо числовые характеристики, т.е. более однородный массив
данных, то алгоритм баггинга был бы предпочтительнее.
В результате проведенных исследований возможности построения модели кредитного скоринга на основе апостериорных данных, нами получены
следующие результаты:
- наиболее важными признаками в модели являются те, которые отражают финансовое состояние клиента, блок 1 и 2, а также его социальнодемографические характеристики – блок 5. Остальные факторы являются
менее значимыми;
- при построении модели необходимо отдать предпочтение алгоритмам бустинга. Несмотря то, что существует вероятность ошибочного построения
классификатора при использовании данных алгоритмов, и что было подтверждено в ходе исследования, уход алгоритма в переобучение, тем не
менее, они показали себя более адекватными для данного набора факторов. Устранить недостатки алгоритма бустинга можно используя кросс-
53
проверку, что и было сделано при построении модели, но это увеличило
время работы алгоритма.
2.2
Анализ требований к построению скоринговых систем и диаграмма вариантов её использования
Начальным этапом разработки программных решений [206] является определение требований, под которым понимается потребность и необходимость в
определенном функционале. Выделяю различные типы или уровни требований, подробно описанные в литературе [207]. Среди них наиболее значимыми
являются:
1. бизнес - требования - описывают, почему организации нужна такая система, то есть цели, которые организация намерена достичь с ее помощью.
Основное их содержание — бизнес-цели организации или клиента, заказывающих систему.
2. пользовательские требования- описывают цели или задачи, которые пользователи должны иметь возможность выполнять с помощью продукта, который в свою очередь должен приносить пользу кому-то. Область пользовательских требований также включает описания атрибутов или характеристик продукта, которые важны для удовлетворения пользователей.
3. функциональные требования-определяют, каким должно быть поведение
продукта в тех или иных условиях. Они определяют, что разработчики
должны создать, чтобы пользователи смогли выполнить свои задачи (пользовательские требования) в рамках бизнес-требований.
Анализ данных можно рассматривать как общий процесс, он включает в
себя расчет статистических, финансовых показателей или визуальный анализ.
Однако анализ кредитного риска представляет собой сложную задачу, которая
требует всех трех способов оценки. Такое соотношение между тремя уровнями
требований жизненно важно для успеха проекта.
Бизнес-требования могут быть описаны в форме документа о концепции
и границах (англ. vision and scope document), уставом проекта (англ. project
charter), вариант использования (англ. business case) или документ рыночных
требований (англ. market requirements document). Наиболее распространенным
и доступным является диаграмма вариантом использования или диаграмма прецедентов.
54
Взаимодействие человека с системой моделируется с использованием
диаграммы прецедентов (Use-Case Diagram), которая показывает основные роли
и используемые ими функции. Для системы кредитного скоринга данная модель представлена на рисунке 13. Здесь в качестве активных акторов выступают
кредитный - аналитик и риск - менеджер, а пассивным является система система скоринга. Такое определение акторов связано с их ролью в рассматриваемой
модели, а не с должностью, которую может занимать конкретный человек в
кредитной организации; все зависит от особенностей конкретной организации
и её структуры. Поэтому основные функции данных акторов направлены на
создание и оценки модели, а также результатов её работы при управлении кредитным портфелем организации. Как видно из рисунка 13 основ.
Подсистема моделирования содержит функции практического применения скоринговой модели: выбор типа классификатора и его параметров, тестирование и предсказание. Основной модуль, описывает создание модели кредитного скоринга. Данная задача, несмотря на имеющиеся сегодня формализованные методы и реализованные в виде библиотек для основных систем и
языков программирования, представляет достаточно сложный процесс который
включает в себя: выбор типа алгоритма, варианта его реализации, определение
параметров модели (например общим для задач классификации является - глубина леса, т.е. насколько глубоким будет процесс обучения, количества деревьев для багинга и шага для бустинга, критерия расщепления корней деревьев и
другие.), формирование тестовой выборки для обучения алгоритма, непосредственно процесс обучения, тестирование и оценка результатов, а также качества
модели. После этого модель сохраняется в хранилище.
Функциональная структура системы кредитного скоринга представлена
на рисунке 14, особенностью которой является то, что она состоит из 3 уровней. Уровень, содержащий математическую модель кредитного скоринга, позволяет его использовать для других задач в рамках информационной системы.
Уровень данных содержит информацию, необходимую для обучения алгоритмов, сами построенные модели и статистические параметры. Третьим уровнем
системы является уровень данные о клиентах и поступающих заявках, а также
механизмы визуализации и представления данных.
Главные компоненты системы следующие:
55
Рисунок 13 – Диаграмма прецендентов (использования) модели кредитного
скоринга
- Источник данных - содержит подуровень взаимодействия с данным, которые могут содержаться в SQL-базах данных доступ к ним осуществляется
посредством драйвера SQL. Компонент для работы с неструктурированными данными предназначен для загрузки данных из файлов, таких как CSV
или XML. Загрузка данных может выполняться как вручную так и в автоматическом режиме. При работе с данными необходимо их контролировать
поэтому дополнительно содержится пакет для визуализации.
- Уровень обработки информации - также определяется как в уровне расчет кредитного риска. Он реализует основные задачи в рамках создания
математической модели скоринга такие как выбор алгоритма, как поиск
информации, извлечение данных, их очистка, преобразование, нормализация и корректировка.
56
Рисунок 14 – Модель информационной системы кредитного скоринга
57
- Уровень данных - определяет все данные необходимые для обучения алгоритма в соответствии с признаками. Перечень данных, их структура описаны выше и представлены в приложении А. По мере эксплуатации системы
объем данных должен постоянно пополнятся.
- Уровень представления - этот модуль включает все методы и операции,
которые используются для представления и визуализации результатов.
- Уровень расчет кредитного риска содержит непосредственно алгоритм
прогнозирования на основе классификатора, расчета статистических и финансовых показателей.
По результатам структурного проектирования возникает необходимость
детального проектирования уровней связанных с данными и расчета кредитного риска. В настоящее время доступно большое количество инструментов
для программной реализации корпоративных систем. К наиболее распространенным относятся среды, использующие C# и Java. Однако, для построения
систем машинного обучения рекомендуют [208; 209] использовать язык программирования Python. Достоинством применения языка python является то,
что он в наибольшей степени подходит для работы с большими массивами данных и его интерпретатор может быть встроен в любое приложение. К тому же
с его использованием построено немало WEB-проектов и порталов. Дальнейшее детальное проектирование будем осуществлять в терминах классов языка
Python.
2.3
Диаграмма классов для модели кредитного скоринга
Для разработки системы выполним детальное проектирование модели
скоринга. Приведем описание особенностей и методов в терминологии библиотеки XGBoost, применяемых для реализации поставленной задачи на языке
программирования Python, так как было выяснено в результате их сравнения,
что она наилучшим образом удовлетворяет поставленной задаче. Для других
библиотек методы в целом схожие и поэтому могут быть легко адаптированы.
Реализация интерфейса может быть типовым, как виде приложения рабочего
стола, так и в виде Web-серверной платформы.
Загрузка данных выполняется с использованием библиотеки Pandas, которая предоставляет множество методов для импорта данных из различных
источников как виде объектов - SQL, Excel, JSON и других, так и структуриро58
ванных файлов - CSV, table и других. Для импорта данных использовали метод:
pandas.read_csv(filepath_or_buffer,
sep=’,
’,
delimiter=None,
header=’infer’,
names=None,
index_col=None,
usecols=None,
squeeze=False,
prefix=None,
mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None,
false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None,
keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False,
infer_datetime_format=False,
keep_date_col=False,
date_parser=None,
dayfirst=False,
iterator=False, chunksize=None, compression=’infer’, thousands=None, decimal=b’.’,
lineterminator=None,
quotechar=’“,
quoting=0,
escapechar=None,
comment=None,
encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True,
skipfooter=0,
doublequote=True,
delim_whitespace=False,
low_memory=True,
memory_map=False, float_precision=None)
Результат выполненения метода - таблица в виде Pandas Data Frame.
Предварительная обработка данных заключается в расчете описательных статистик для всего перечня данных. Для этого используем метод:
DataFrame.describe(percentiles=None, include=None, exclude=None)
Определяем величину выборки, необходимой для обучения, указываем
столбцы факторов - predictors, и вводим переменную IDcol для столбцов, которые не являются признаками и содержат вспомогательную инофрмацию о
клиенте - код клиента и тип кредита:
train=train[:50000]
target = [’Discipline’]
IDcol = [’mdm_id’,’CREDCODE’]
predictors = [x for x in train.columns if x not in [’Discipline’, ’mdm_id’,’CREDCODE’]]
Для того чтобы использовать метод перекрестной проверки при обучении
алгоритма необходимо создать функцию modelfit со следующими параметрами:
- alg - содержит информацию об используемой модели (тип задачи, в нашем
случае - классификация, и её параметры),
- dtrain - выборка, содержащая перечень данных для обучения алгоритма,
- predictors - набор факторов модели классификации,
- metric=["auc"] - метрика, оценивающая качество алгоритма,
- performCV=True - использовать перекрестную проверку,
59
- printFeatureImportance=True - использовать вывод важности факторов
классификационной модели,
- cv_folds=5 - определяет количество подвыборок на которые развивается
исходный массив данных обучения,
- early_stopping_rounds=50 - определяет верхнюю границу итераций при
обучении алгоритма.
Функция возвращает результат - переменную clf которая содержит параметры алгоритма, которые получены в результате его обучения методом перекрестной проверки.
def
modelfit(alg,
dtrain,
predictors,metric=["auc"],
printFeatureImportance=True, cv_folds=5,early_stopping_rounds=50):
performCV=True,
Библиотека XGBoost требует преобразования данных для оптимизации
использования памяти - приведения данных из типа pd.DataFrame к типу
numpy.arrays библитеки numpy. Для осуществления данного переобразования
используем метод DMatrix:
class
DMatrix(data,
label=None,
missing=None,
feature_names=None, feature_types=None, nthread=None)
weight=None,
silent=False,
Для реализации обучения алгоритма с использованием перекрестной проверки используем метод cv библиотеки XGBoost:
cv(params, dtrain, num_boost_round=10, nfold=3, stratified=False, folds=None, metrics=(),
obj=None, feval=None, maximize=False, early_stopping_rounds=None, fpreproc=None,
as_pandas=True, verbose_eval=None, show_stdv=True, seed=0, callbacks=None, shuffle=True)
Для обучения алгоритма используется метод fit:
fit(X, y, sample_weight=None, eval_set=None, eval_metric=None, early_stopping_rounds=None,
verbose=True, xgb_model=None, sample_weight_eval_set=None)
Для предсказаний значений в ходе обучения алгоритма на последующей выборке метода перекрестной проверки используется методы predict и
predict_proba:
60
predict(data, output_margin=False, ntree_limit=0)
predict_proba(data, ntree_limit=0)
Метод predict служит для предсказания данных, т.е. экстраполяция на основе ранее полученного классификатора. Значения при этом лежат в диапазоне
от 0 до 1. Как правило, необходимость применения данного метода продиктована тем, что по ходу обучения на каждой подвыборке в ходе перекрестной
проверки, требуется оценка погрешности (точности) классификации. Вероятность того, что рассматриваемый признак относится к определенному классу
может быть получена с использованием метода predict_proba. Именно этот
метод используется для прогноза и построения ROC-кривых.
Для построения графика важности признаков используем метод:
plot_importance(booster, ax=None, height=0.2, xlim=None, ylim=None, title=’Feature
importance’,
xlabel=’F
score’,
ylabel=’Features’,
importance_type=’weight’,
max_num_features=None, grid=True, show_values=True, **kwargs)
Для построения на основе полученной модели графика в виде дерева использовали метод export_graphviz, который позволяет сохранить полученное
дерево в формате dot. А после, осуществить его преобразование в графический формат PNG. Здесь необходима связка библиотеки graphviz языка Python
и программы для построения графов graphviz. Для этого, например в операционной системе Windows, она должна быть зарегистрированы в переменной
PATH. Вторым вариантом, который кажется нам более рациональным, является
явное указание пути к программе graphviz при выполнении программы, поэтому в заголовке каждой написанной программы, представленных в приложении
можно увидеть строку:
os.environ["PATH"] += os.pathsep + ’C:/SRV/graphviz/bin/’
class sklearn.tree.export_graphviz(decision_tree, out_file=”tree.dot”, max_depth=None,
feature_names=None, class_names=None, label=’all’, filled=False, leaves_parallel=False,
impurity=True,
node_ids=False,
proportion=False,
rotate=False,
rounded=False,
special_characters=False, precision=3)
На рисунке 15 представлены диаграммы деревьев решений, полученные
в результате реализации соответствующего алгоритма. Видно, что при одинаковой глубине уровней классификации алгоритм бустинга дает более компактный
61
вариант дерева решений. Структура деревьев отражает особенность каждого из
алгоритмов, т.е., так как алгоритм багинга в основе своей содержит статистические показатели (принцип голосования решающих деревьев), то добавление
уровня резко усложняет полученное решение, что не всегда бывает рациональным. Бустинг, основанный на движение по градиенту функции признаков
позволяет строить более глубокие, по количеству уровней, решения, что также
является достоинством алгоритмов данного класса.
Описанные методы и классы составляют основу уровня алгоритма, его
построение, обучение и вывод основных его показателей. Уровень прогнозирования рисков содержит также методы обработки результатов. В приложении Д
представлен результат работы программы по описанному алгоритму.
После получения прогноза на основе алгоритма классификации необходимо вывести провести обработку полученных результатов. Вначале сопоставляем идентификатор клиента с полученными результатам математической
модели. Для этого используем метод:
class pandas.concat(objs, axis=0, join=’outer’, join_axes=None, ignore_index=False, keys=None,
levels=None, names=None, verify_integrity=False, sort=None, copy=True)
Результат работы метода - таблица в виде данных Pandas DataFrame, поэтому исключить из него клиентов, не попавших в класс «хороших» можно
также с использованием метода pandas.DataFrame.loc.
На основе описанных классов построим диаграмму классов системы кредитного скоринга.
Диаграмма на рисунке 16 содержит все классы, а также их атрибуты, необходимые для построения модели скоринговой системы с использованием языка
программирования Python и библиотеки градиентного бустинга XGBoost. Реализация на основе других библиотек в целом аналогична представленной схеме.
Здесь необходимо очень внимательно относится к данным. Суть заключается в
следующем, библиотека XGBoost, как было описано ранее для оперирования
обучающей и тестовой выборкой использует данные в формате numpy.array,
что требует соответствующего преобразования. Другие библиотеки могут использовать данные как виде массива, так и Pandas Data Frame. Для этого
предусмотрены атрибуты классов, но, и результаты будут иметь аналогичный
тип данных, что нужно учитывать в дальнейшем проводя сортировки.
62
(а) Дерево решений (Random Forest)
(б) Дерево решений (Gradient Boosting)
Рисунок 15 – Диаграмма дерево решений
В результате получена таблица, в некотором смысле профиль, хорошего
клиента. В приложении Е, аналогично представлены описательные статистики
для параметров, полученных на основе классификации, характеризующих хороших клиентов. Сравнивая таблицы приложения А и Е можно отметить, что для
63
Рисунок 16 – Диаграмма классов системы кредитного скоринга
хороших клиентов данные более упорядочены, те резкие всплески и ошибки в
исходных данных полностью нивелированы в результате работы программы.
Поведение клиента характеризуется динамическими параметрами, т.е. теми с которыми можно связать функцию времени. Из рассматриваемой совокупности одним из параметров характеризующим поведение является частота
переводов. Каждому переводу соответствуют сумма перевода. Воздействие на
клиента со стороны кредитной организации осуществляется при помощи смс,
в которых ему приходят уведомления и напоминания. Поэтому рассмотрим
64
показатель частоты переводов как основу для построения профиля поведения
клиента.
Из данных приложения E видно, что количество переводов имеет следующие характеристики распределения (Таблица 3). Минимальное значение
показателя - 1, максимальное - 401.
Таблица 3 – Количество переводов клиента в профиле хорошего клиента
скоринговой системы
№ п/п Обозначение Описательная статистика показателя
Значение
1
mean
среднее значение
9,92
2
std
среднеквадратическое отклонение
16,47
3
min
минимальное значение
1,0
4
25%
первый (или нижний) квартиль
3,0
5
50%
второй квартиль (середина) или медиана
6,0
6
75%
третий (или верхний) квартиль
11,0
7
max
максимальное значение
401,0
Фактически задача нахождения профиля предполагает разбиение совокупности данных на конечное число подсовокупностей. Такие задачи часто
решают методами неконтролируемого обучения или кластеризации, среди которых наибольшее распространение получили: метод -средних, иерархическая
кластеризация и другие. Особенностью данного рода алгоритмов является то,
что они требуют задания некоторых параметров, определяющих впоследствии
принадлежность к нему точек. Так, метод -средних, основанный на минимизации суммарных квадратичных отклонений точек кластеров от центроидов
(средних координат) этих кластеров, требует наличия центров кластеров и их
количества, задать которые не всегда возможно. Иерархическая кластеризация
плохо подходит для большого количества данных и также требует количества
кластеров. Поэтому, воспользуемся методом, который не требует задания количества кластеров для разбиения. Таким методом является - Метод кластеризации на основе плотности DBSCAN [210; 211].
Данный метод требует задания двух параметров максимальное расстояние между соседними точками (eps) и минимальное число точек в окрестности
(количество соседей)-min_samples, когда можно говорить, что эти экземпляры
данных образуют один кластер. В scikit-learn есть соответствующий алгоритм,
65
(а) Кластеризация по параметрам
Kol-per и do-1-sms
(б) Кластеризация по параметрам
Kol-per и posle-1-sms
(в) Кластеризация по параметрам
Kol-per и perevod-summ-max
(г) Кластеризация по параметрам
Kol-per и perevod-summ-sr
(д) Кластеризация по параметрам
Kol-per и perevod-summ-poln
(е) Кластеризация по параметрам
Kol-per и summ-perevod
Рисунок 17 – Графики кластеризации построенные с использованием
алгоритма DBSCAN.
66
при использовании которого установим максимальное значение между соседними точка равным 1, т.е. минимальному значению количества смс - сообщений,
а количество соседей равным среднеквадратичному отклонению.
На рисунке 17 представлены графики, иллюстрирующие разбиение на
кластеры по паре параметров из профиля клиентов. Видно, что количество
кластеров для большинства случаев равно 5. Программа представлена в приложении Ж.
Проверить количество кластеров можно используя формулу Стержеса.
Если проанализировать профиль клиента а также рисунок 17, то в качестве
верхней границы интервала можно использовать значение показателя третьего
квартиля (75%), т.к. большинство значений им ограничивается, тогда:
 = 1 + 3, 222 · lg  = 1 + 3, 222 · lg 11 = 4, 355 ≈ 5.
(17)
Что подтверждает количество кластеров, содержащихся в профиле хорошего клиента и характеризующих его активность.
Для построения прогноза по активности клиента, воспользуемся тем же
алгоритмом градиентного бустинга (Программа представлена в приложении
Ж). Так как количество классов больше 2, то будем рассматривать задачу множественной (мультиклассовой) классификации.
В результате получены 5 классов, характеризующих активность клиента.
Точность прогноза по модели на основе тестовой выборки приближается к
100%.
На рисунке 18 представлена диаграмма классов иллюстрирующую активность клиента, которую можно охарактеризовать следующим образом:
- class 0 - низкая. Клиент не активен, количество переводов составляет 1
- 2, сумма перевода соответствует или близка к сумме кредита, т.е. кредит
гасится за минимальное количество транзакций. Это видно если проанализировать верхние показатели по максимальной, средней сумме перевода.
В этом случае количество смс, направляемые клиенту равно количеству
переводов.
- class 1 - умеренная. Клиенты, принадлежащие к этой группе, характеризуются неравномерностью по суммам переводов. Количество переводов не
превышает 5, а средний размер перевода составляет от 3833 до 351135 руб.
В этой группе клиентов практически вдвое выше полная сумма перевода,
67
Рисунок 18 – Диаграмма классов активности клиента
68
при этом верхняя граница максимальной сумма одной транзакции такая же
как и для клиентов с низкой активностью.
- class 2 - средняя. Центральная совокупность клиентов характеризуется
средними показателями по числу переводов и суммами переводимых денежных средств. Видно, что 1-2 смс сообщения могут перевести клиента
из перевести клиента из предыдущего класса в данную совокупность.
- class 3 - высокая. Этот класс клиентов буем считать пограничным для
большинства клиентов. Здесь присутствуют клиенты осуществляющие от
7 до 9 транзакций. Данное увеличение закономерно снижает среднюю сумму перевода, так как тело кредита изменяется незначительно. Можно увидеть, что уже проявляется рост неравномерности осуществления денежных
переводов.
- class 4 - сверхвысокая. Эта группа клиентов особенная и малочисленная. Сюда были отнесены состоятельные заемщики, так как максимальная
сумма кредита в более чем 5 раз выше, чем предыдущих совокупностях,
а также клиенты, которым организация направляла значительное количество смс сообщений. Это говорит о том, что часть клиентов в этой группе
недисциплинированные, раз приходится им напоминать о необходимости
погашения части взятых на себя денежных обязательств. Причем именно
недисциплинированные, а не плохие, так скоринг заявки данные клиенты
прошли.
Видно, что смс сообщения посылаемые клиенту является действенным
способом увеличения количества переводов денежных средств в счет погашения кредита. Особенностью предлагаемого подхода является то, что он позволяет выявить недисциплинированных клиентов среди совокупности потенциально хороших клиентов. В целом уменьшение количества клиентов, с которыми
придется активно взаимодействовать позволит снизить эксплуатационные затраты на смс оповещения и сэкономить время службы поддержки клиентов
кредитной организации.
2.4
Календарное и финансовое планирование
Построение календарного плана проекта
Оценка эффективности проекта по показателям затрат и результатов осуществляется в пределах периода его продолжительности [212]. Поэтому необ69
ходимо правильно составить смету затрат, выявить все возможные работы по
созданию информационной системы кредитного скоринга и рассчитать их длительность.
Расчет расписания работ проекта – процесс определения даты начала и
окончания каждой работы проекта. Это центральный процесс планирования
[213].
В соответствии с ГОСТ Р ИСО/МЭК 12207-99 перечень работ, необходимых для создания информационной системы оценки кредитоспособности
заемщика, включает [214]:
- Подготовка к разработке.
- Анализ требований к системе.
- Проектирование системной архитектуры.
- Проектирование программной архитектуры.
- Программирование и тестирование программных средств.
- Сборка системы.
- Квалифицированные испытания системы.
- Ввод в действие ПО.
Этапы разработки программного продукта в виде дерева целей, в соответствии с ГОСТ 19.001-77 [215], ГОСТ 19.102-77 [216], ГОСТ 19.201-78 [217]
представлена на рисунке 19, в результате реализации которых будет создана
информационная система кредитного скоринга.
Новизна и сложность разработки программного обеспечения является одним из наиболее важных моментов разработки, который определяет трудозатраты и, соответственно, влияет на себестоимость продукции. Учесть это можно
с помощью коэффициента сложности разработки, результаты оценки которого
приведены в таблице 4.
70
Рисунок 19 – Дерево целей проекта создания информационной системы
кредитного скоринга
Таблица 4 – Оценка новизны программного продукта
№
п/п
1
2
3
Признак новизны
Характеристика признака
Степень новизны разработки
Применяемый язык
программирования
Степень использования в
программе типовых
алгоритмов
Является развитием определенного
параметрического ряда программ
Нет необходимости в изучении и
освоении
до 70%
Коэффициент
новизны
1,6
1,0
1,0
По данным таблицы 4 рассчитаем коэффициент новизны разрабатываемого программного решения как среднее арифметическое значений признаков:
н =
1, 6 + 1, 0 + 1, 0
= 1, 2
3
71
Таблица 5 – Оценка сложности программного продукта
№
п/п
Признак сложности
Характеристика признака
Количество операторов в
программе
Уровень языка
программирования
1
2
3
Категория программы
Сложность интерфейса
пользователя
Операционная
технологическая среда
4
5
Коэффициент
сложности
До 500
0,5
Высокого уровня - Python
2,5
Обработка статистических данных и
построение численных моделей
2,6
Среднего уровня
1,5
Известна
0,7
По данным таблицы 5 определяем коэффициент сложности:
 =
0, 5 + 2, 5 + 2, 6 + 1, 5 + 0, 7
= 1, 56
5
Перечень работ и стадии их выполнения указываются в зависимости от
новизны и сложности разработки ПО, а также определяются стадии проектирования. Выполнение работы заканчивается написанием документа, в котором
отражается суть работы и полученные результаты. Совокупность текстовых
документов, разрабатываемых на стадиях проектирования, оформляется в виде
текста, необходимого для защиты и внедрения проекта. Перечень конкретных
работ с указанием стадий их выполнения и сроков приведен в таблице 6.
Таблица 6 – Перечень и длительность выполняемых работ
№
п/п
1
2
3
4
5
6
7
8
Наименование работы
Формулировка проблемы и постановка
задачи
Сбор и обработка исходных материалов
Обоснование необходимости разработки
Разработка структуры входных и
выходных данных, функций интерфейса
с пользователем
Обоснование возможностей решения
задачи
Составление, согласование и
утверждение
Подготовка графической части проекта
Определение требований к программе и
техническим средствам ее разработки
72
Стадия разработки
Длительность,
час
ТЗ
39
ТЗ
ТЗ
10
26
ЭП
33
ЭП
34
ТЗ,ТЗ
48
ТП
23
ТЗ
29
Продолжение таблицы 6
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Определение этапов разработки и
состава выполняемых работ
Разработка общего алгоритма решения
задачи
Определение конфигурации технических
средств
Составление плана разработки
программного продукта в виде сетевого
графика
Разработка структуры программы
Изображение сетевого графика на
плакате
Уточнение входных и выходных данных
и определение форм их представления
Определение объема и трудоемкости
выполненных работ
Выбор методов решения задачи
Определение затрат на разработку и
внедрение
Описание ограничений и допущений,
связанных с методом решения задачи
Оценка ожидаемого экономического
эффекта от внедрения
Обоснование выбора языка
программирования
Описание логической структуры и
функций программы
Оформление и утверждение
пояснительной записки проекта
Разработка алгоритма программы
Написание программы
Тестирование программы
Разработка руководства оператора
Компоновка и отладка программы
Проведение испытаний
Сдача программного продукта
ТЗ
27
ЭП
59
ТП
19
ЭП
22
ТП
22
ТП
10
ТП
12
ЭП
11
ТП
34
ПП,ЭП
15
ТП
14
ПО,ЭП
15
ТП
8
ТП
12
ТП
63
ТП
РП
РП
РП
РП
РП
ВН
30
35
13
8
24
21
24
При планировании работ, с одной стороны, необходимо учитывать затраты времени на выполнение каждой задачи, а с другой, таким образом сформировать расписание, чтобы критический путь был минимальным по времени. В
управлении проектами [218; 219] применяются различные методы для состав73
ления реалистичного расписания (в терминологии PMI расписание проектаэто календарный план), которое учитывает все цели разрабатываемого проекта.
Глубина проработки календарного плана зависит от того, как быстро находятся
ресурсы под выполнение декомпозируемой задачи. Имеются в виду, в первую
очередь, ответственные ресурсы за результаты задач в лице сотрудников компании или привлекаемых со стороны участников. Во вторую очередь, во внимание
принимаются другие ресурсы: финансовые, материальные и информационные.
Для определения степени детализации менеджеру проекта следует понимать,
что он способен контролировать ходы выполнения всех задач и вытекающих
из них действий. При этом избыточная детализация не нужна и даже вредна.
Сроки, содержание и последовательность работ определяют правила и
возможности контроля, реализуемые благодаря основному документу, координирующему ход событий, – календарному плану. Этот документ является документированной формой, носителем поставленных ответственным ресурсам
проектных задач, поскольку он имеет состав формулировок результатов, сроков,
ответственных ресурсов. Помимо прочего, расписание закреплено утверждением руководителя. Различают следующие виды расписания проекта:
- сетевая диаграмма;
- ленточная диаграмма;
- план по вехам;
- табличная форма представления работ;
- линейная диаграмма или диаграмма Ганта.
Наиболее часто применяемым инструментом является диаграмма Ганта,
которая содержит временные ленты выполняемых проектных задач находятся
во взаимосвязях друг с другом, визуально изображаемых в форме фигурных
стрелок. В модели применяются следующие виды связей:
- Независимый момент начала работы.
- Начало-окончание.
- Начало-начало.
- Окончание-окончание.
- Окончание-начало.
Для правильного построения диаграммы необходимо распределить последовательность выполнения работ, представленных в таблице 6. Для этого
сведем последовательность в следующую таблицу 7.
74
Таблица 7 – Последовательность работ и связь между ними
№
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Работа
предшествующая последующая
0 0 0
0
0
0
0 0 0
0
0
0
1 0 0
0
0
0
2 0 0
0
0
0
1 3 0
0
0
0
2 3 4
5
8
9
6 0 0
0
23
0
6 0 0
0
0
0
6 0 0
0
0
0
8 0 0
0
0
0
8 0 0
0
0
0
9 0 0
0
0
0
8 10 0
0
0
0
9 12 0
0
0
0
8 10 13
0
0
0
№
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Работа
предшествующая
9 12 14 0
8 10 13 15
16 0 0
0
17 0 0
0
16 18 0
0
15 17 19 11
21 0 0
0
22 20 7
0
23 0 0
0
24 0 0
0
24 25 0
0
25 0 0
0
24 25 26 0
25 26 28 27
29 0 0
0
последующая
18
0
19
0
0
0
0
0
23
0
0
0
23
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
По данным таблицы 7 построена диаграмма Ганта, педставлена на рисунке 20 и определен критический путь для процесса. Общая продолжительность
разработки системы кредитного скоринга составит 65,375 дней или 716 часов.
Оценка затрат на реализацию проекта
Смета затрат на реализацию проекта составляется методом прямого счета, т.е. суммирования всех затрат. Определяем численность и состав рабочей
группы проекта, в нее войдут следующие сотрудники:
Таблица 8 – Состав группы разработки информационной системы кредитного
скоринга
№ п/п
1
2
3
4
5
Должность
Руководитель проекта
Проектный аналитик
Программист
Тестировщик
Специалист по внедрению
Должностной оклад, руб/мес.
45000
35000
35000
25000
25000
В связи со спецификой проекта, не все участники будут работать в течении всего времени его реализации. Для планирования работ и расчет издержек
75
Рисунок 20 – Диаграмма Ганта для работ по разработке системы кредитного
скоринга
76
1
2
1
4
3
3
5
5
8
7
6
6
11
9
10
12
10
16
14
13
18
15
20
15
17
17
19
21
22
Критический путь
13
21
19
23
22
24
23
25
24
27
25
26
28
26
29
28
29
30
30
трудовой деятельности необходимо составить матрицу ответственности (RACI)
[220], которая устанавливает роль участника на каждом этапе проекта. Матрица
распределения ответственности дает возможность избежать дупликации выполняемых функций в коллективе. При возникновении спорных ситуаций руководитель процесса может ссылаться на конкретное лицо, отвечающее за цепочку
процесса, где возникло разногласие или ошибка. Таким образом, в коллективе устанавливается более открытый метод коммуникации, основывающийся на
консультировании и информировании участников процесса.
Аббревиатура RACI является собирательным от ролей, которые выполняют сотрудники в рамках проекта. Они подразделяются:
R-Responsible означает «исполнитель». Это сотрудник, на котором непосредственно лежит ответственность за выполнение определённого участника
работы. При этом в большинстве случаев он не выбирает способы решения и
подчиняется руководителю проекта. На данную роль назначают компетентных
работников и специалистов — людей, которые умеют делать. В RACI исполнители выполняют такие функции:
- определяют, что конкретно нужно сделать для реализации проекта и сколько времени это займёт (в рамках условий, поставленных «сверху»);
- составляют список необходимых ресурсов;
- участвуют в согласовании и утверждении технической документации;
- анализируют ход выполнения проекта и промежуточные результаты;
- предоставляют руководителю отчёты о проделанной работе.
Таких людей в команде может быть несколько. Кроме того, эта роль может
комбинироваться с другими. Чаще всего встречается сочетание Accountable +
Resbonsible (в переводе — «ответственный + исполнитель»).
A-Accountable «Подотчётный», или «ответственный» — это главный руководитель проекта. Именно он отвечает за то, чтобы поставленные задачи
были выполнены в срок, с требуемым уровнем качества и в рамках выделенного бюджета. Кроме того, A:
- выбирает исполнителей и команду управления проектом;
- назначает задачи всем участникам;
- контролирует ход работы;
- распределяет ресурсы между исполнителями;
- ведёт учёт использования ресурсов, а также обоснует куратору необходимость выделения дополнительных средств;
77
- рассматривает идеи и предложения других членов команды, может утверждать или отвергать их.
Обычно руководитель проекта выступает в качестве «связующего звена»
между заказчиком или высшим начальством и командой.
C — Consulted - «консультант» (его иногда также называют «куратором»).
Наряду с руководителем, он принимает участие в управлении проектом, но
занимается в первую очередь решением стратегических вопросов:
- утверждает любые изменения в объёме и сроках работ;
- выделяет ресурсы, необходимые для реализации проекта;
- при необходимости согласует с заказчиком необходимость увеличить бюджет;
- получает от руководителя отчёты о проделанной работе;
- принимает решения в любых непредвиденных ситуациях, при возникновении критических изменений, которые могут повлиять на сроки и стоимость
проекта.
На роль консультантов обычно назначают менеджеров высшего звена.
Именно они определяют глобальные цели, а затем назначают руководителя
проекта, который уже распределяет задачи между членами команды.
I — Informed, в матрице RACI указывают «информируемого» («наблюдателя»). Он выполняет функции администратора и в основном занимается организацией документооборота. Наблюдатель подчиняется руководителю проекта,
однако, в отличие от остальных участников, не несёт ответственности за его
результаты. Вместо этого он:
- собирает и систематизирует всю информацию по проекту, ресурсам и планам;
- ведёт протоколы совещаний;
- принимает документацию от участников проекта, чтобы затем передать их
в соответствующие структуры;
- следит за сроками подачи и правильностью заполнения отчётов.
Связь с наблюдателем является преимущественно односторонней. Его
основная функция — избавить менеджера от необходимости тратить время на
бюрократические процедуры и «разгрузить» его.
Согласно описанным ролям матрица ответственности для разрабатываемого проекта системы кредитного скоринга представлена в таблице 9
78
Таблица 9 – Матрица ответственности - RACI
№
работы
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Сроки выполнения
39
10
26
33
34
48
23
29
27
59
19
22
22
10
12
11
34
15
14
15
8
12
63
30
35
13
8
24
21
24
Руководитель проекта
AR
C
C
C
C
C
A
A
R
A
C
A
C
A
I
A
A
A
I
R
I
A
A
I
I
I
I
I
I
A
Проектный
аналитик
C
R
R
A
C
C
R
I
A
R
I
R
A
R
C
R
C
R
I
I
I
R
I
R
I
C
R
I
I
C
Программист
I
I
I
C
R
I
C
I
C
C
R
I
R
C
I
C
R
C
R
I
R
C
I
C
R
I
I
I
I
C
Тестировщик
I
I
I
C
I
I
I
R
I
I
A
I
I
I
A
I
I
I
C
I
C
I
R
I
C
R
I
C
C
C
Специалист
по внедрению
I
I
I
R
I
R
I
C
I
I
I
I
I
I
R
I
I
I
C
I
I
I
C
I
C
C
I
R
R
R
На основе данных таблицы 9 может быть произведен расчет трудовых
затрат на выполнение проекта по формуле:
  =  ·
∑︁
 ,

где:
 - расчетная оценка трудоемкости выполнения работы ;
79
(18)
 - оценка сравнительной трудоемкости выполнения работы ;
 - оценка трудоемкости вида деятельности ;
∑︀
 - сумма всех оценок, приходящихся на данную работу.

Кроме затрат на заработную плату законодательством (п. 1 ст. 420 НК
РФ) предусмотрены отчисления в следующие фонды согласно главы 34 НК
РФ: облагаемая база определяется отдельно по каждому физлицу нарастающим итогом с начала года. Предельная величина базы для взносов на случай
временной нетрудоспособности и в связи с материнством сохраняется, пенсионные взносы, начисленные сверх лимита, облагаются по пониженной ставке.:
- Пенсионный фонд Российской Федерации (ПФ РФ) - 22 %.
- Фонд социального страхования Российской Федерации (ФСС РФ) - 2,9%.
- Федеральный фонд обязательного медицинского страхования (ФОМС РФ)
- 5,1 %.
Кроме того, работодателем перечисляется подоходный налог (НДФЛ) в
размере 13% от размера заработной платы работника. К условно-постоянным
издержкам отнесем следующие виды затрат не связанные непосредственно с
процессом разработки в процентном отношении к общему объему затрат на
заработную плату (без учета отчислений):
- Аренда помещения - 10%.
- Коммунальные платежи - 50%.
- Затраты на интернет с сотовую связь - 50 %.
- Услуги клиннинговой компании - 50 %.
Расчет стоимости разработки системы кредитного скоринга представлены
в таблице 10.
При планировании инвестиций в проект используют ряд показателей срок окупаемости, оценка эффективности, чистая текущая стоимость (NPV),
внутренняя норма доходности (IRR), показатели эффективности, анализ чувствительности.
Для планирования инвестиций ключевое значение имеют чистая текущая
стоимость (NPV), внутренняя норма доходности (IRR).
Формула для расчета NPV:
   = −0 +

∑︁
=1
80

,
(1 + )
(19)
Таблица 10 – Смета затрат на разработку
№ п/п
1
Статья затрат
Затраты на
заработную плату
Уд. вес.
Значение,
руб.
1
по месяцам
2
3
—
358421,88
241390,63
90343,75
26687,5
Отчисления в фонды:
2
Отчисления ПФ РФ
22%
78852,81
53105,94
19875,63
5871,25
3
Отчисления ФСС РФ
5,1%
18279,52
12310,92
4607,53
1361,06
4
Отчисления ФОМС
РФ
2,9%
10394,23
7000,33
2619,97
773,94
Условно-постоянные затраты:
5
6
7
8
Аренда помещения
Коммунальные
платежи
Связь(Интернет)
Услуги клиннинговой
компании
ИТОГО:
10%
35842,19
24139,06
9034,38
2668,75
50%
179210,94
120695,31
45171,88
13343,75
50%
179210,94
120695,31
45171,88
13343,75
50%
179210,94
120695,31
45171,88
13343,75
1039423,44
700032,81
261996,88
77393,75
где    – чистая текущая стоимость инвестиций;
0 – начальный инвестируемый капитал (Invested Capital);
 – денежный поток (Cash Flow) от инвестиций в -ом году;
 – ставка дисконтирования;
 – длительность жизненного цикла проекта.
Для расчета NPV необходимо знать ставку дисконтирования. Для этого
используем показатель дефлятора ВВП, так как для расчета инвестиционных
проектов использовать показатель инфляции не совсем корректно, так он отражает лишь рост потребительских цен и не учитывает рост цен в экономике в
целом. Согласно данным Росстат7 дефлятор ВВП в 2017 году составил 5,2.
Проект разработки системы кредитного скоринга разрабатывается в течении 3 месяцев. Исходя из равномерности распределения дефлятора в течении
всего года, в месяц он составит 0,42%. Приведенные на начало периода реализации проекта показатели для 2 и 3 месяца представлены в таблице 11.
7
http://www.gks.ru/free_doc/new_site/vvp/vvp-god/tab4.htm
81
Таблица 11 – Приведенные к началу инвестиционного периода показатели
затрат на разработку (Ставка дисконтирования  = 0, 4233%)
№ п/п
1
Статья затрат
Затраты на
заработную плату
Уд. вес.
Значение,
руб.
—
359030,77
1
по месяцам
2
3
241390,63
90726,21
26913,94
Отчисления в фонды:
2
Отчисления ПФ РФ
22%
78986,78
53105,94
19959,77
5921,07
3
Отчисления ФСС РФ
5,1%
18310,56
12310,92
4627,04
1372,61
4
Отчисления ФОМС
РФ
2,9%
10411,90
7000,33
2631,06
780,51
Условно-постоянные затраты:
5
6
7
8
Аренда помещения
Коммунальные
платежи
Связь(Интернет)
Услуги клиннинговой
компании
ИТОГО:
10%
35903,08
24139,06
9072,63
2691,39
50%
179515,39
120695,31
45363,11
13456,97
50%
179515,39
120695,31
45363,11
13456,97
50%
179515,39
120695,31
45363,11
13456,97
1041189,25
700032,81
263106,03
78050,41
Разница между суммарными затратами в таблицах 11 и 10 определяет
увеличение стоимости проекта в начале его реализации в связи со снижением
стоимости капитала во времени, в текущем проекте составит – 1765,81 руб.
Показатель внутренней нормы доходности отражает целесообразность
инвестирования в проект, а также сколько инвестор получит прибыли по результатам его реализации.
В математическом выражении, IRR инвестиционного проекта есть та норма доходности проекта, при которой NPV = 0, то есть затраты равны результатам. В этом случае инвестор ничего не теряет, но ничего и не выигрывает от
вложений. Та процентная ставка, при которой это происходит, может служить
допустимой ставкой дисконтирования денежных потоков при расчете показателей экономической эффективности инвестиционных проектов, определяется
по уравнению:


∑︁
∑︁


=
,
(20)


(1
+
)
(1
+
)
=0
=1
где  - внутренняя норма доходности инвестиционного проекта.
82
Таблица 12 – Приведенные к началу инвестиционного периода показатели
затрат на разработку (Ставка дисконтирования  = 1, 86%)
№ п/п
1
Статья затрат
Затраты на
заработную плату
Уд. вес.
Значение,
руб.
—
718066,83
1
по месяцам
2
3
241390,63
258383,13
218293,08
Отчисления в фонды:
2
Отчисления ПФ РФ
22%
157974,72
53105,94
56844,30
48024,48
3
Отчисления ФСС РФ
5,1%
36621,38
12310,92
13177,54
11132,93
4
Отчисления ФОМС
РФ
2,9%
20823,96
7000,33
7493,11
6330,52
Условно-постоянные затраты:
5
6
7
8
Аренда помещения
Коммунальные
платежи
Связь(Интернет)
Услуги клиннинговой
компании
ИТОГО:
10%
71806,69
24139,06
25838,33
21829,31
50%
359033,42
120695,31
129191,58
109146,54
50%
359033,42
120695,31
129191,58
109146,54
50%
359033,42
120695,31
129191,58
109146,54
2082393,86
700032,81
749311,13
633049,92
Данный показатель имеет вид нелинейной функции и определяется двумя способами: графическим и методом итераций. Метод итераций, это подбор
варианта нормы доходности, при которой инвестиционный капитал равен инвестиционным доходам. Расчет для показателя дисконтирования 1,86 представлен
в таблице 12.
Отсюда можно определить внутреннюю норму доходности проекта:
  0,4233%
=
  1,86% −   0,4233%
1041189
= 0, 4233% + (1, 86% − 0, 4233%)
= 1, 8599%.
2082394 − 1041189
 = 0,4233% + (1,86% − 0,4233% )
(21)
Внутренняя норма доходности, рассчитанная по уравнению 21 превышает
ставку дисконтирования, следовательно проект может быть принят к реализации.
83
ЗАКЛЮЧЕНИЕ
В ходе выполнения выпускной квалификационной работы была достигнута поставленная цель, а именно, спроектирована информационная система
кредитного скоринга для процесса взаимодействия с клиентом в финансовой
организации.
В первом разделе работы выполнен анализ литературы по проблеме оценки кредитоспособности клиента. Описаны основные проблемы при постановке
и реализации данного рода систем и приведены основные типы скоринга, применяемые для снижения рисков невозврата кредита. Рассмотрены основные
математические модели, с помощью которых на основании массивов данных
можно осуществить прогноз. В ходе анализа выявлено, что оптимальным и
наиболее часто применяемыми алгоритмами являются ансамблевые методы
построенные на деревьях решений двумя различными способами - багингом
(Bagging) и бустингом (boosting).
Подходы к реализации и особенности построения алгоритмов требуют
их концептуального изучения. По результатами литературного обзора определены ключевые особенности и требования к построению деревьев. Ключевыми являются, способы расщепления вершин и критерии качества построенного
классификатора.
Во втором разделе работы с учетом описанных особенностей при реализации ансамлевых методов построения деревьев решений выполнен анализ существующих програмных средств и библиотек программ, которые предоставляют
алгоритмы классификации. Сравнивая бустинг и багинг по критериам точности
и скорости, выявлена оптимальная реализация - алгоритм бустинга, реализованный в библитеке XGBoost. Точность алгоритма в исследовании составляет
более 82%. Для всех используемых алгоритмов проведена оценка качества построенного на их основе классификатора методом ROC кривых и построены
диаграммы важности признаков. Проведено концептуальное и логическое проектирование скоринговой системы. Выделены основные сущности, их атрибуты
и связи между ними. Разработана модель поведенческого скорига, позволяющая прогнозировать активность клиентов по числу транзакций при погашении
кредита. Особенностью здесь является выделение в отдельную группу так называемых «недисциплинированных клиентов», которым необходимо уделить
внимание специалистов кредитного отдела.
84
В работе приведено экономическое обоснование необходимости разработки скоринговой системы. Предложен перечень работ по созданию информационной системы кредитного скоринга, состав рабочей группы, разработан
календарный план реализации проекта. Рассчитана себестоимость проекта, которая составит 1041189,25 руб. с учетом изменения стоимости капитала. Эффективность проекта подтверждена расчетом внутренней нормы доходности
проекта, которая превышает ставку дисконтирования.
Таким образом, все поставленные задачи были выполнены, а цель достигнута.
85
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Чепурин М. Н., Киселева Е. А. Курс экономической теории: учебник /
предисл. М. Чепурин. — 4-е изд. — Киров : «АСА», 2000. — 752 с.
2. Валиева Е. Н. Конкуренция на рынке банковских услуг: теория и практика // Банковское дело. — 2014. — Т. 616, № 40. — С. 2—8.
3. Негров В. П., Радюкова Я. Ю. Понятие, сущность и особенности банковской конкуренции // Социально-экономические явления и процессы. —
2015. — Т. 10, № 4. — С. 67—72.
4. ВЭБ. Банк развития. Прогноз экономического развития России на 20182020 гг. report / Внешэкономбанк. — M., 2017. — 16 с. — URL: http://www.
veb.ru/common/upload/files/veb/analytics/macro/pr201709_t.pdf .
5. Лобанова А., Павлюшина В. Инвестиции в основной капитал и источники их финансирования : Бюллетень о текущих тенденциях российской
экономики: report / Аналитический центр при Правительстве Российской
Федерации. — M., 09.2016. — 20 с. — № 17. — URL: http://ac.gov.ru/files/
publication/a/10337.pdf .
6. Глазьев С. Ю. Стратегия опережающего развития России в условиях глобального кризиса. — СПб. : СПбГУП, 2011. — 48 с. — (Избранные лекции
Университета; Вып. 118).
7. Глазьев С. Ю. Экономика будущего: Есть ли у России шанс? — M. :
Книжный мир, 2016. — 640 с. — (Коллекция Изборского клуба).
8. Глазьев С. Ю. Битва за лидерство в XXI веке. Россия, США, Китай: Семь
вариантов обозримого будущего. — M. : Книжный мир, 2017. — 352 с. —
(Коллекция Изборского клуба).
9. Центральный банк Российской Федерации. Ликвидность банковского сектора и финансовые рынки: Факты, оценки, комментарии: report / Банк
России. — M., 01.2018. — 10 с. — № 23. — URL: http : / / www. cbr. ru /
Collection/Collection/File/4604/LB_2018-23.pdf .
10. Портал ГАРАНТ.РУ (Garant.ru). Федеральный закон «О потребительском
кредите (займе)» № 353-ФЗ от 21 декабря 2013 г. (с изменениями и дополнениями от 5 декабря 2017 г.) — URL: http://base.garant.ru/70544866/.
11. Молохов А. В., Порубиновская В. В. О некоторых рисках в сфере потребительского кредитования // Банковское дело. — 2014. — № 1. — С. 85—
87.
12. Соколинская Н. Э. Теоретические и прикладные аспекты рисков потребительских кредитов на текущие нужды: содержание и структура // Вестник
финансового университета. — 2011. — № 4. — С. 68—75. — (Инструменты
регулирования).
13. Протопопова Н. И., Лисиченко Д. В. Механизм управления кредитным
риском коммерческих банков при потребительском кредитовании: зарубежный опыт и российская практика // Вестник Тамбовского университета. — 2008. — Т. 61, № 5. — С. 78—81. — (Гуманитарные науки).
86
14. Кондратьева М. Н., Клементьев В. А. Риск в системе потребительского
кредитования // Национальные интересы: приоритеты и безопасность. —
2010. — Т. 77, № 20. — С. 52—55. — (Угрозы и безопасность).
15. Косов М. Е. Проблемы управления рисками потребительского кредитования в банковском секторе экономики России // Финансы и кредит. —
2010. — Т. 307, № 19. — С. 14—18. — (Банковская система).
16. Центральный банк Российской Федерации. Финансовое обозрение. Условия проведения денежно - кредитной политики : Информационно - аналитический материал: report / Банк России. — M., 09.2017. — 37 с. — № 3. —
URL: http://www.cbr.ru/Collection/Collection/File/2529/fo_2017-3.pdf .
17. Мамедли М., Синяков А. Потребительское кредитование в России: перспективы и риски на основе обследований финансов домашних хозяйств :
Аналитическая записка Департамента исследований и прогнозирования:
report / Банк России. — M., 09.2017. — 24 с. — URL: http://www.cbr.ru/
Content/Document/File/23500/analytic_note_170928.pdf .
18. Ausubel L. M. Adverse Selection in the Credit Card Market. — College Park,
Maryland, U.S. : University of Maryland Working Paper, 1999. — 52 p. —
URL: http://www.ausubel.com/creditcard-papers/adverse.pdf.
19. Crook J. Adverse Selection And Search In The Bank Credit Card Market. —
Edinburgh, Scotland, UK : Credit Research Centre. Working Paper 01/2.
Edinburgh, 2002. — 52 p. — URL: http : / / citeseerx . ist . psu . edu / viewdoc /
download?doi=10.1.1.198.6658&rep=rep1&type=pdf.
20. Lacker J. M. Does Adverse Selection Justify Government Intervention in Loan
Markets? // FRB Richmond Economic Quarterly. — 1994. — Vol. 80, no. 1. —
P. 61–95. — URL: https://ssrn.com/abstract=2125399.
21. Райхельд Ф. Ф., Тил Т. Эффект лояльности: движущие силы экономического роста, прибыли и неприходящей ценности : пер. с англ. / пер. с
англ. — Издательский до «Вильямс» : М., 2005. — 384 с.
22. Naeem S. Credit risk scorecards: developing and implementing intelligent
credit scoring. — Hoboken, New Jersey : John Wiley, Sons, 2006. — 208 p.
23. Lewis E. M. An introduction to credit scoring. — San Rafael : The Athena
Press, 1992. — 172 p.
24. Allison P. D. Logistic regression using the SAS system: theory and application. — Cary, NC : SAS Institute, 1999. — 303 p.
25. Anderson R. The credit scoring toolkit: theory and practice for retail credit
risk. — New York : Oxford University press, 2007. — 790 p.
26. Bester H. Screening vs, Rationing in Credit Markets with Imperfect Information // American Economic Review. — 1985. — Vol. 75, no. 4. — P. 850–
855.
27. Mester L. J. ”What’s the Point of Credit Scoring?” // Business review (Federal
Reserve Bank of Philadelphia. — 1997. — Vol. Sep/Oct(Sep). — P. 3–16.
87
28. SAS Institute. Developing Credit Scorecards Using Credit Scoring for SAS
Enterprise Miner 12.1. — Cary, North Carolina, U.S. : SAS Institute Inc,
2012. — 44 p.
29. Ebbers M., Doan K., Flatt A. Risk Scoring for a Loan Application on IBM
System z: Running IBM SPSS Real-Time Analytics. — Armonk, New York,
U.S. : IBM Corp, 2013. — 88 p. — URL: http://www.redbooks.ibm.com/
redbooks/pdfs/sg248153.pdf.
30. Naeem S. Intelligent Credit Scoring: Building and Implementing Better Credit
Risk Scorecards. — Hoboken, New Jersey : John Wiley, Sons, 2017. — 464 p.
31. Paleologo G., Elisseeff A., Antonini G. Subagging for Credit Scoring Models // European Journal of Operational Research. — 2010. — Vol. 2, no. 201. —
P. 490–499. — URL: https://www.sciencedirect.com/science/article/abs/pii/
S0377221709001532.
32. Javier M. An Introduction to Credit Scoring For Small and Medium Size
Enterprises. — NW Washington : The World Bank Group, 2008. — 47 p. —
URL: https://siteresources.worldbank.org/EXTLACOFFICEOFCE/Resources/
870892-1206537144004/MarquezIntroductionCreditScoring.pdf.
33. Liu Y. The evaluation of classification models for credit scoring / ed. by
P. D. M. Schumann. — Göttingen : Georg-August-Universität Göttingen, Institut für Wirtschaftsinformatik, 2002. — 65 p. — (Arbeitsbericht Nr. 02/2002). —
URL: http://docplayer.net/20232306-The-evaluation-of-classification-modelsfor-credit-scoring.html.
34. Ravi V. Advances in banking technology and management: impacts of ICT
and CRM. — Hershey, PA : Information Science Reference, 2008. — URL:
https://books.google.ru/books?id=5h3ZF7bOx0kC&printsec=frontcover&hl=
ru&source=gbs ViewAPI&redir esc=y#v=onepage&q&f=false.
35. Abdou H., Pointon J. Credit scoring, statistical techniques and evaluation criteria: A Review of the Literature // Intelligent Systems in Accounting, Finance & Management. — 2011. — Vol. 2/3, no. 18. — P. 59–88. — URL:
http://usir.salford.ac.uk/16518/4/Credit Scoring .
36. Giudici P. Applied Data Mining: Statistical Methods for Business and Industry. — 1st ed. — Hoboken, New Jersey : John Wiley Sons, 2003. — 376 p.
37. Lyn C. T. Consumer credit models: pricing, profit, and portfolios. — New
York : Oxford University press, 2009. — 400 p.
38. Lyn C. T. A survey of credit and behavioural scoring: forecasting financial risk
of lending to consumers // International Journal of Forecasting. — 2000. —
Vol. 16, no. 2. — P. 149–172.
39. Giudici P. Bayesian data mining, with application to benchmarking and credit
scoring // Applied Stochastic Models in Business and Society. — 2001. —
No. 17. — P. 69–81.
40. Zurada J., Lonial S. Comparison of the Performance of Several Data Mining Methods for Bad Debt Recovery in the Healthcare Industry // Journal of
Applied Business Research. — 2005. — Vol. 2, no. 21. — P. 37–53.
88
41. Chye Koh H., Chin Tan W., Peng Goh C. A Two-step Method to Construct
Credit Scoring Models with Data Mining Techniques // Journal of Business
and Information. — 2006. — No. 1. — P. 96–118.
42. Kirkos E., Spathis C., Manolopoulos Y. Data Mining techniques for the detection of fraudulent financial statements // Expert Systems with Applications. —
2007. — Vol. 4, no. 32. — P. 995–1003.
43. Atish P. S., Huimin Z. Incorporating domain knowledge into data mining classifiers: An application in indirect lending // Decision Support Systems. —
2008. — Vol. 1, no. 46. — P. 287–299.
44. Yeh I. C., Lien C. h. The comparisons of data mining techniques for the predictive accuracy of probability of default of credit card clients // Expert Systems
with Applications. — 2009. — Vol. 2, no. 36. — P. 2473–2480.
45. Galindo J., Tamayo P. Credit Risk Assessment Using Statistical and Machine
Learning: Basic Methodology and Risk Modeling Applications // Computational Economics. — 2000. — Vol. 1/2, no. 15. — P. 107–143. — (Society for
Computational Economics).
46. Doumpos M. [et al.]. Credit risk assessment using a multicriteria hierarchical discrimination approach: A comparative analysis // European Journal of
Operational Research. — 2002. — Vol. 2, no. 138. — P. 392–412.
47. Xiao W., Zhao Q., Fei Q. A comparative study of data mining methods in
consumer loans credit scoring management // Journal of Systems Science and
Systems Engineering. — 2006. — Vol. 4, no. 15. — P. 419–435.
48. Huysmans J. [et al.]. Failure prediction with self organizing maps // Expert
Systems with Applications. — 2006. — Vol. 3, no. 30. — P. 479–487.
49. Laha A. Developing Credit Scoring Models with SOM and Fuzzy Rule Based
k-NN Classifiers // Fuzzy Systems: 2006 IEEE International Conference on. —
Vancouver, BC, Canada, 09/11/2006. — P. 692–698. — URL: https : / /
ieeexplore.ieee.org/document/1681786/.
50. Ince H., Aktan B. A Comparison of Data mining Techniques for Credit Scoring
in Banking: A managerial Perspective // Journal of Business Economics and
Management. — 2009. — Vol. 3, no. 10. — P. 233–240.
51. Zhou L., Lai K. K. Benchmarking binary classification models on data sets with
different degrees of imbalance // Frontiers of Computer Science in China. —
2009. — Vol. 2, no. 3. — P. 205–216.
52. Li F. C. Comparison of the Primitive Classifiers without Features Selection
in Credit Scoring // International Conference on Management and Service
Science: 2009 IEEE International Conference on. — New York, 2009. — P. 1–
5.
53. Twala B. Multiple classifier application to credit risk assessment // Expert
Systems with Applications. — 2010. — Vol. 4, no. 37. — P. 3326–3336.
54. Айвазян С. А. [и др.]. Прикладная статистика: классификация и снижение
размерности. — М. : Финансы и статистика, 1989. — 607 с.
89
55. Baesens B. [et al.]. Neural Network Survival Analysis for Personal Loan
Data // The Journal of the Operational Research Society. — 2005. — Vol. 9,
no. 56. — P. 1089–1098.
56. Вапник В. Н., Червоненкис А. Я. Теория распознавания образов. — M. :
Наука, 1974. — 416 с.
57. Вапник В. Н. Восстановление зависимостей по эмпирическим данным. —
M. : Наука, 1979. — 448 с.
58. Vapnik V. N. The Nature of Statistical Learning Theory (Information Science
and Statistics). — 2nd ed. — Berlin, Heidelberg : Springer-Verlag GmbH,
1999. — 314 p.
59. Altman E. I. Financial Ratios, Discriminant Analysis and the Prediction of
Corporate Bankruptcy // Journal of Finance. — 1968. — Vol. 4, no. 23. —
P. 589–609.
60. Eisenbeis R. A. Pitfalls in the application of discriminant analysis in business,
finance, and economics // Journal of Finance. — 1977. — Vol. 3, no. 32. —
P. 875–900.
61. Taffler R. J., Abassi B. A Model for Predicting Debt Servicing Problems in
Developing Countries // Journal of the Royal Statistical Society. — 1984. —
Vol. 4, no. 147. — P. 541–568.
62. Yobas M. B., Crook J. N., Ross P. Credit scoring using neural and evolutionary
techniques // IMA Journal of Management Mathematics. — 2000. — Vol. 2,
no. 11. — P. 111–125.
63. Kumar K., Bhattacharya S. Artificial neural network vs linear discriminant
analysis in credit ratings forecast: A comparative study of prediction performances // Review of Accounting and Finance. — 2006. — Vol. 3, no. 5. —
P. 216–227.
64. Abdou H. A. An evaluation of alternative scoring models in private banking //
The Journal of Risk Finance. — 2009. — Vol. 1, no. 10. — P. 38–53.
65. Steenackers A., Goovaerts M. J. A credit scoring model for personal loans //
Insurance: Mathematics and Economics. — 1989. — Vol. 1, no. 8. — P. 31–34.
66. Laitinen E. K. Predicting a corporate credit analyst’s risk estimate by logistic
and linear models // International Review of Financial Analysis. — 1999. —
Vol. 2, no. 8. — P. 97–121.
67. Alfo M., Caiazza S., Trovato G. Extending a Logistic Approach to Risk Modeling through Semiparametric Mixing // Journal of Financial Services Research. — 2005. — Vol. 1, no. 28. — P. 163–176.
68. Tang T. C., Chi L. C. Predicting multilateral trade credit risks: comparisons of
Logit and Fuzzy Logic models using ROC curve analysis // Expert Systems
with Applications. — 2005. — Vol. 3, no. 28. — P. 547–556.
69. Ma R. w., Tang C. y. Building up Default Predicting Model based on Logistic Model and Misclassification Loss // Systems Engineering - Theory &
Practice. — 2007. — Vol. 8, no. 27. — P. 33–38.
90
70. Sohn S. Y., Kim H. S. Random effects logistic regression model for default prediction of technology credit guarantee fund // European Journal of Operational
Research. — 2007. — Vol. 1, no. 183. — P. 427–478.
71. Luo J. h., Lei H. y. Empirical study of corporation credit default probability
based on Logit mode // Journal of Banking and Finance. — 2008. — Vol. 4,
no. 27. — P. 615–633.
72. Liang Y., Xin H. Application of Discretization in the Use of Logistic Financial Rating // International Conference on Business Intelligence and Financial
Engineering: IEEE. — Beijing, China, 2009. — P. 364–368.
73. West D. Neural network credit scoring models // Computers & Operations
Research. — 2000. — Vol. 27, no. 11/12. — P. 1131–1152.
74. Malhotra R., Malhotra D. K. Evaluating consumer loans using neural networks // Omega. — 2003. — Vol. 2, no. 31. — P. 83–96.
75. Hsieh N. C. An integrated data mining and behavioral scoring model for analyzing bank customers // Expert Systems with Applications. — 2004. — Vol. 4,
no. 27. — P. 623–633.
76. Angelini E., Tollo G. d., Roli A. A neural network approach for credit risk
evaluation // The Quarterly Review of Economics and Finance. — 2008. —
Vol. 4, no. 48. — P. 733–755.
77. Yu L., Wang S., Lai K. K. Credit risk assessment with a multistage neural
network ensemble learning approach // Expert Systems with Applications. —
2008. — Vol. 2, no. 34. — P. 1434–1444.
78. Abdou H., Pointon J., El-Masry A. Neural nets versus conventional techniques
in credit scoring in Egyptian banking // Expert Systems with Applications. —
2008. — Vol. 3, no. 35. — P. 1275–1292.
79. Tsai M. C. [et al.]. The consumer loan default predicting model – An application of DEA–DA and neural network // Expert Systems with Applications. —
2009. — Vol. 9, no. 36. — P. 11682–11690.
80. Khashman A. Neural networks for credit risk evaluation: Investigation of different neural models and learning schemes // Expert Systems with Applications. — 2010. — Vol. 9, no. 37. — P. 6233–6239.
81. Baesens B. [et al.]. Learning Bayesian network classifiers for credit scoring
using Markov Chain // Monte Carlo search”International Congress on Pattern
Recognition: IEEE Computer Society. — 2002. — P. 49–52.
82. Li X. S., Guo Y. H. Personal credit scoring models on naive Bayesian classifier // Computer Engineering and Applications. — 2006. — Vol. 1, no. 42. —
P. 197–201.
83. McNeil A. J., Wendin J. P. Bayesian inference for generalized linear mixed
models of portfolio credit risk // Journal of Empirical Finance. — 2007. —
Vol. 2, no. 14. — P. 131–149.
84. Kadam A., Lenk P. Bayesian inference for issuer heterogeneity in credit ratings
migration // Journal of Banking & Finance. — 2008. — Vol. 10, no. 32. —
P. 2267–2274.
91
85. Panigrahi S. [et al.]. Credit card fraud detection: A fusion approach using Dempster–Shafer theory and Bayesian learning // Information Fusion. —
2009. — Vol. 4, no. 10. — P. 354–363.
86. Stefanescu C., Tunaru R., Turnbull S. The credit rating process and estimation of transition probabilities: A Bayesian approach // Journal of Empirical
Finance. — 2009. — Vol. 2, no. 16. — P. 216–234.
87. Antonakis A. C., Sfakianakis M. E. Assessing naive Bayes as a method for
screening credit applicants // Journal of Applied Statistics. — 2009. — Vol. 5,
no. 36. — P. 537–545.
88. Paredes R., Vidal E. A class-dependent weighted dissimilarity measure for
nearest neighbor classification problems // Pattern Recognition Letters. —
2000. — Vol. 12, no. 21. — P. 1027–1036.
89. Hand D. J., Vinciotti V. Choosing k for two-class nearest neighbor classifiers
with unbalanced classes // Pattern Recognition Letters. — 2000. — Vol. 9/10,
no. 24. — P. 1555–1562.
90. Islam M. J. [et al.]. Investigating the Performance of Naive- Bayes Classifiers and K- Nearest Neighbor Classifiers // International Conference on Convergence Information Technology: IEEE Computer Society. — Gyeongju-si,
Gyeongbuk, Korea, 2007. — P. 1541–1546.
91. Marinakis Y. [et al.]. Constantin Zopounidis, Optimization of nearest neighbor
classifiers via metaheuristic algorithms for credit risk assessment // Journal of
Global Optimization. — 2008. — Vol. 2, no. 42. — P. 279–293.
92. Li F. C. The Hybrid Credit Scoring Model based on KNN Classifier // Sixth
International Conference on Fuzzy Systems and Knowledge Discovery: IEEE
Computer Society. — Tianjin, China, 2009. — P. 330–334.
93. Islam M. J. [et al.]. Investigating the Performance of Naive- Bayes Classifiers
and K- Nearest Neighbor Classifiers // Journal of Convergence Information
Technology. — 2010. — Vol. 2, no. 5. — P. 133–137.
94. Mues C. [et al.]. Decision diagrams in machine learning: an empirical study
on real-life credit-risk data // Expert Systems with Applications. — 2004. —
Vol. 2, no. 27. — P. 257–264.
95. Lee T. S. [et al.]. Mining the customer credit using classification and regression
tree and multivariate adaptive regression splines // Computational Statistics &
Data Analysis. — 2006. — Vol. 4, no. 50. — P. 1113–1130.
96. Zhao H. A multi-objective genetic programming approach to developing Pareto
optimal decision trees // Decision Support Systems. — 2007. — Vol. 3, no.
43. — P. 809–826.
97. Lopez R. F. Modeling of insurers’ rating determinants. An application of
machine learning techniques and statistical models // European Journal of
Operational Research. — 2007. — Vol. 2, no. 183. — P. 1488–1512.
92
98. Yeh H. C., Yang M. L., Lee L. C. An Empirical Study of Credit Scoring
Model for Credit Card // International Conference on Innovative Computing,
Information and Control: ICICIC’07. — Kumamoto, Japan, 2007. — P. 865–
869.
99. Bastos J. A. Credit scoring with boosted decision trees // Munich Personal
RePEc Archive. — 2008. — P. 262–273. — URL: https : / / mpra . ub . uni muenchen.de/8156/.
100. Li H., Sun J., Wu J. Predicting business failure using classification and regression tree: An empirical comparison with popular classical statistical methods
and top classification mining methods // Expert Systems with Applications. —
2010. — Vol. 8, no. 37. — P. 5895–5904.
101. Thomas L. C., Ho J., Scherer W. T. Time will tell: Behavioural scoring and
the dynamics of consumer credit assessment // IMA Journal of Management
Mathematics. — 2001. — Vol. 1, no. 12. — P. 89–103.
102. Stepanova M., Thomas L. C. Survival Analysis Methods for Personal Loan
Data // Operations Research. — 2002. — Vol. 2, no. 50. — P. 277–289.
103. Noh H. J., Roh T. H., Han I. Prognostic personal credit risk model considering
censored information // Expert Systems with Applications. — 2005. — Vol. 4,
no. 28. — P. 753–762.
104. Sohn S. Y., Shin H. W. Reject inference in credit operations based on survival
analysis // Expert Systems with Applications. — 2006. — Vol. 1, no. 31. —
P. 26–29.
105. Carling K. [et al.]. Corporate credit risk modeling and the macroeconomy //
Journal of Banking & Finance. — 2007. — Vol. 3, no. 31. — P. 845–868.
106. Beran J., Djaidja A. Y. K. Credit risk modeling based on survival analysis with
immunes // Statistical Methodology. — 2007. — Vol. 3, no. 4. — P. 251–276.
107. Andreeva G., Ansell J., Crook J. Modelling profitability using survival combination scores // European Journal of Operational Research. — 2007. — Vol. 3,
no. 183. — P. 1537–1549.
108. Bellotti T., Crook J. Credit scoring with Macroeconomic Variables using Survival Analysis // Journal of the Operational Research Society. — 2009. —
Vol. 3, no. 60. — P. 1699–1707.
109. Cao R., Vilar J. M., Devia A. Modelling consumer credit risk via survival
analysis // Statistics & Operations Research Transactions. — 2009. — Vol. 1,
no. 33. — P. 3–30.
110. Sarlija N., Bensic M., Susac M. Z. Comparison procedure of predicting the
time to default in behavioural scoring // Expert Systems with Applications. —
2009. — Vol. 5, no. 36. — P. 8778–8788.
111. Baetge J., Heitmann C. Creating a fuzzy rule-based indicator for the review
of credit standing // Schmalenbach Business Review. — 2000. — Vol. 3, no.
52. — P. 318–343.
93
112. Tung W. L., Quek C., Cheng P. GenSo-EWS: A novel neural-fuzzy based early
warning system for predicting bank failures // Neural Networks. — 2004. —
Vol. 4, no. 17. — P. 567–587.
113. Laha A. Building contextual classifiers by integrating fuzzy rule based classification technique and k-nn method for credit scoring // Advanced Engineering
Informatics. — 2007. — Vol. 3, no. 21. — P. 281–291.
114. Hoffmann F. [et al.]. Inferring descriptive and approximate fuzzy rules for
credit scoring using evolutionary algorithms // European Journal of Operational Research. — 2007. — Vol. 1, no. 177. — P. 540–555.
115. Jiao Y., Syau Y. R., Lee E. S. Modelling credit rating by fuzzy adaptive network // Mathematical and Computer Modelling. — 2007. — Vol. 5/6, no. 45. —
P. 717–731.
116. Lahsasna A., Ainon R. N., Wah T. Y. Credit Risk Evaluation Decision Modeling Through Optimized Fuzzy Classifier // International Symposium on information technology, ITSim: IEEE Computer Society. Vol. 1. — New York,
2008. — P. 1–8.
117. Liu K., Lai K. K., Guu S. M. Dynamic Credit Scoring on Consumer Behavior
using Fuzzy Markov Model // Fourth International Multi-Conference on Computing in the Global Information Technology: IEEE Computer Society. —
Cannes/La Bocca, France, 2009. — P. 235–239.
118. Xinhui C., Zhong Q. Consumer Credit Scoring Based on Multi-criteria Fuzzy
Logic // International Conference on Business Intelligence and Financial Engineering: IEEE Computer Society. — Beijing, China, 2009. — P. 765–768.
119. Huang Z. [et al.]. Credit rating analysis with support vector machines and
neural networks: a market comparative study // Decision Support Systems. —
2004. — Vol. 4, no. 37. — P. 543–558.
120. Gestel T. V. [et al.]. A process model to develop an internal rating system:
Sovereign credit ratings // Decision Support Systems. — 2006. — Vol. 2, no.
42. — P. 1131–1151.
121. Chen W. H., Shih J. Y. A study of Taiwan’s issuer credit rating systems using
support vector machines // Expert Systems with Applications. — 2006. —
Vol. 3, no. 30. — P. 427–435.
122. Gestel T. V. [et al.]. Bayesian kernel based classification for financial distress
detection // European Journal of Operational Research. — 2006. — Vol. 3,
no. 172. — P. 979–1003.
123. Yang Y. Adaptive credit scoring with kernel learning methods // European
Journal of Operational Research. — 2007. — Vol. 3, no. 183. — P. 1521–1536.
124. Martens D. [et al.]. Comprehensible credit scoring models using rule extraction from support vector machines // European Journal of Operational Research. — 2007. — Vol. 3, no. 183. — P. 1466–1476.
125. Huang C. L., Chen M. C., Wang C. J. Credit scoring with a data mining
approach based on support vector machines // Expert Systems with Applications. — 2009. — Vol. 4, no. 33. — P. 847–856.
94
126. Xu X., Zhou C., Wang Z. Credit scoring algorithm based on link analysis
ranking with support vector machine // Expert Systems with Applications. —
2009. — Vol. 2, no. 36. — P. 2625–2632.
127. Zhou L., Lai K., Yu L. Credit scoring using support vector machines with
direct search for parameters selection // Soft Computing. — 2009. — Vol. 2,
no. 13. — P. 149–155.
128. Chen W., Ma C., Ma L. Mining the customer credit using hybrid support vector
machine technique // Expert Systems with Applications. — 2009. — Vol. 4,
no. 36. — P. 7611–7616.
129. Luo S. T., Cheng B. W., Hsieh C. H. Prediction model building with clusteringlaunched classification and support vector machines in credit scoring // Expert
Systems with Applications. — 2009. — Vol. 4, no. 36. — P. 7562–7566.
130. Bellotti T., Crook J. Support vector machines for credit scoring and discovery
of significant features // Expert Systems with Applications. — 2009. — Vol. 2,
no. 36. — P. 3302–3308.
131. Härdle W. [et al.]. Variable Selection and Oversampling in the Use of Smooth
Support Vector Machines for Predicting the Default Risk of Companies //
Journal of Forecasting. — 2009. — Vol. 2, no. 28. — P. 512–534.
132. Zhou L., Lai K. K., Yu L. Least squares support vector machines ensemble
models for credit scoring // Expert Systems with Applications. — 2010. —
Vol. 1, no. 37. — P. 127–133.
133. Yu L. [et al.]. Support vector machine based multiagent ensemble learning for
credit risk evaluation // Expert Systems with Applications. — 2010. — Vol. 2,
no. 37. — P. 1351–1360.
134. Kim H. S., Sohn S. Y. Support vector machines for default prediction of SMEs
based on technology credit // European Journal of Operational Research. —
2010. — Vol. 3, no. 201. — P. 838–846.
135. Lee T. S. [et al.]. Credit scoring using the hybrid neural discriminant technique // Expert Systems with Applications. — 2002. — Vol. 3, no. 23. —
P. 245–254.
136. Malhotra R., Malhotra D. K. Differentiating Between Good Credits and Bad
Credits Using Neuro-Fuzzy Systems // European Journal of Operational Research. — 2002. — Vol. 1, no. 136. — P. 190–211.
137. Wang Y., Wang S., Lai K. K. A new fuzzy support vector machine to evaluate
credit risk // Transactions on Fuzzy Systems: IEEE Computer Society. Vol.
6. — NJ, USA, 2005. — P. 820–831.
138. Lee T. S., Chen I. F. A two-stage hybrid credit scoring model using artificial
neural networks and multivariate adaptive regression splines // Expert Systems
with Applications. — 2005. — Vol. 4, no. 28. — P. 743–752.
139. Hsieh N. C. Hybrid mining approach in the design of credit scoring models //
Expert Systems with Applications. — 2005. — Vol. 4, no. 28. — P. 655–665.
95
140. Huang J. J., Tzeng G. H., Ong C. S. Two-stage genetic programming (2SGP)
for the credit scoring model // Applied Mathematics and Computation. —
2006. — Vol. 2, no. 174. — P. 1039–1063.
141. Zhou J., Bai T. Credit Risk Assessment using Rough Set Theory and GA-based
SVM // The 3rd International Conference on Grid and Pervasive Computing:
IEEE Computer Society. — Kunming, China, 2008. — P. 320–325.
142. Zhang D. [et al.]. A Hybrid Credit Scoring Model Based on Genetic Programming and Support Vector Machines // Fourth International Conference on
Natural Computation: IEEE Computer Society. — Jinan, Shandong, China,
2008. — P. 8–12.
143. Yu L. [et al.]. Designing A Hybrid Intelligent Mining System for Credit Risk
Evaluation // Journal of Systems Science and Complexity. — 2008. — Vol. 4,
no. 21. — P. 527–539.
144. Lin S. L. A new two-stage hybrid approach of credit risk in banking industry //
Expert Systems with Applications. — 2009. — Vol. 4, no. 36. — P. 8333–8341.
145. Chen F. L., Li F. C. Combination of feature selection approaches with SVM
in credit scoring // Expert Systems with Applications. — 2010. — Vol. 7,
no. 37. — P. 4902–4909.
146. Hsieh N. C., Hung L. P. A data driven ensemble classifier for credit scoring
analysis // Expert Systems with Applications. — 2010. — Vol. 1, no. 37. —
P. 534–545.
147. Краснощёков П. С., Петров А. А. Принципы построения моделей. — 2-е
изд., пересмотр. и доп. — М. : ФАЗИС; ВЦ РАН, 2000. — xii + 412. —
(Математическое моделирование; Вып.1).
148. Краснощёков П. С. Математические модели в исследовании операций. —
М. : Знание, 1984. — 61 с. — (Новое в жизни, науке, технике: Серия
Математика, кибернетика. Выпуск 7).
149. Berry M. J. A., Linoff G. S. Data mining techniques: for marketing, sales,
and customer relationship management. — 2nd edition. — New York : Wiley,
2004. — 672 p. — (Wiley technology publication).
150. Ширяев А. Н. Вероятность - 1: элементарная теория вероятностей. Математическое основание. Предельные теоремы. — 3-е изд., перераб. и доп. —
М. : МЦНМО, 2004. — 520 с.
151. Fleiss J. L. [et al.]. Statistical Methods for Rates & Proportions. — 3rd
Edition. — New York : Wiley, 2003. — xxvii+760. — (Wiley technology
publication).
152. Ljung L. System Identification - Theory For the User. — 2nd ed. — N.J : PTR
Prentice Hall, 1999. — 609 p.
153. Draper N. R., Smith H. Appied Regression Analysis. — 3rd Edition. — New
York : Wiley, 1998. — 736 p. — (Wiley technology publication).
96
154. Gammerman A., Vovk V. Kolmogorov Complexity: Sources, Theory and Applications // Computer Journal. — 1999. — Vol. 42, no. 4. — P. 252–
255. — URL: https://www.researchgate.net/profile/Alexander Gammerman/
publication/2812916 Kolmogorov Complexity Sources Theory and Applications/
links/54084da80cf2bba34c265f8b/Kolmogorov-Complexity-Sources-Theoryand-Applications.pdf.
155. Rissanen J., Roos T., Myllymäki P. Model selection by sequentially normalized
least squares // Journal of Multivariate Analysis. — 2010. — Vol. 101, no. 4. —
P. 839–849.
156. Nannen V. A Short Introduction to Model Selection, Kolmogorov Complexity and Minimum Description Length (MDL) : Master’s thesis / Nannen
Volker. — 05/18/2010. — 20 p. — eprint: arXivpreprintarXiv:1005.2364. —
URL: https://arxiv.org/pdf/1005.2364.
157. Kantardzic M. Data mining: concepts, models, methods, and algorithms. — 2
ed. — Piscataway, New Jersey : Wiley-Interscience: IEEE, 2011. — 552 p.
158. Gorissen D. [et al.]. A surrogate modeling and adaptive sampling toolbox for
computer based design // JMLR, Inc., MIT Press, Microtome Publishing. —
2010. — 11(Jul). — P. 2051–2055.
159. Jones D. R. A taxonomy of global optimization methods based on response
surfaces // Kluwer Academic Publishers. Printed in the Netherlands. —
2001. — Vol. 4, no. 21. — P. 345–383.
160. Вьюгин В. В. Математические основы машинного обучения и прогнозирования. — М. : МЦНМО, 2013. — 301 с.
161. Орлов А. И. Современный этап развития теории экспертных оценок //
Заводская лаборатория. Диагностика материалов. — 1996. — Т. 63, № 1.
162. Садовничий В. А. Теория операторов: учеб. для вузов с углубленным изучением математики. — 5-е изд., стереотип. — M. : Дрофа, 2004. — 384 с.
163. Айвазян С. А. [и др.]. Вероятность и математическая статистика: Энциклопедия : пер. с рус. — M. : Научное издательство «Большая Российская
энциклопедия», 1999. — 910 с.
164. Адуенко А. А., Кузьмин А. А., Стрижов В. В. Выбор признаков и оптимизация метрики при кластеризации коллекции документов // Известия
Тульского государственного университета, Естественные науки. — 2012. —
№ 3. — С. 119—131.
165. Quinlan R. J. C4.5: Programs for Machine Learning. — Sydney : University of
New South Wales, 1993. — 302 p. — (Representation and Reasoning Series).
166. Breiman L. [et al.]. Classification and Regression Trees // Machine learning. —
1984. — Vol. 2, no. 24. — P. 123–140.
167. Воронцов К. В. Комбинаторные обоснования обучаемых алгоритмов //
Журнал вычислительной математики и математической физики. — 2004. —
Т. 11, № 44. — С. 2099—2012.
97
168. Шеннон К. Э. Работы по теории информации и кибернетике. — M. : Иностранная литература, 1963. — 832 с.
169. Duda R. O., Hart P. E., Stork D. G. Pattern Classification. — 2 ed. — New
York : John Wiley Sons, 2001. — 680 p.
170. Truong A. Fast Growing and Interpretable Oblique Trees via Probabilistic
Model : PhD thesis / Truong A. — Univ. of Oxford, 2009. — 119 p.
171. Bennet K. P. Decision tree construction via linear programming // Proceedings of the 4th Midvest Artificial Intelligence and Cognitive Science Society
Conference. (Utica, Illinois 1992). — 1992. — P. 97–101.
172. Brodley C. E., Utgoff P. E. Multivariate decision trees // Machine Learning. —
1995. — Vol. 19, no. 1. — P. 45–77.
173. Murthy S. K. Automatic Construction of Decision Trees from Data: A MultiDisciplinary Survey // Data Mining and Knowledge Discovery. — 1998. —
Vol. 2. — P. 345–389.
174. Murthy S. [et al.]. OCI: Randomized induction of oblique decision trees //
Proceedings of the Eleventh National Conference on Artificial Intelligence,
Mit Press, Boston. — 1993. — P. 322–327.
175. Breiman L. Bagging predictors // Machine Learning. — 1996. — Vol. 24, no.
2. — P. 123–140.
176. Shinde A. [et al.]. Preimages for Variation Patterns from Kernel PCA and
Bagging // IIE Transactions (Institute of Industrial Engineers). — 2014. —
Vol. 46, no. 5. — P. 429–456.
177. Mingers J. Expert systems experiments with rule induction // Journal of the
Operational Research Society. — 1987. — Vol. 38. — P. 39–47.
178. Furnkranz J., Hullermeier E. Pairwise preference learning and ranking // Machine Learning: ECML: 14th European Conference on Machine Learning. —
Cavtat-Dubrovnik, Croatia, 09/22/2003. — P. 145–156. — URL: https://wwwold.cs.uni-paderborn.de/fileadmin/Informatik/eim-i-is/PDFs/Proceedings.pdf.
179. Niblett T., Bratko I. Learning decision rules in noisy domains // Cambridge
University Press. — 1986. — P. 25–34.
180. Quinlan J. R. Simplifying decision trees // International Journal of ManMachine Studies. — 1987. — Vol. 27. — P. 221–234.
181. Esposito F., Malerba D., Semeraro G. A comparative analysis of methods for
pruning decision trees // IEEE Transactions on Pattern Analysis and Machine
Intelligence. — 1997. — Vol. 19, no. 5. — P. 476–491.
182. Mingers J. An empirical comparison of pruning methods for decision tree
induction // Machine Learning. — 1989. — Vol. 4, no. 2. — P. 227–243.
183. Samuel A. L. Some Studies in Machine Learning Using the Game of Checkers // IBM Journal of Research and Development. — 1959. — No. 3. — P. 210–
229.
98
184. Weiss E. A. Biographies: Eloge: Arthur Lee Samuel (1901-90): Annals of the
History of Computing // IEEE Transactions on Pattern Analysis and Machine
Intelligence. — 1992. — Vol. 14, no. 3. — P. 55–69.
185. Hansen L., Salamon P. Neural Network Ensembles // IEEE Transactions on
Pattern Analysis and Machine Intelligence. — 1990. — Vol. 12, no. 10. —
P. 993–1001.
186. Jain A. K., Duin R. P., Mao J. Statistical pattern recognition: A review //
IEEE Transactions on Pattern Analysis and Machine Intelligence. — 2000. —
Vol. 22, no. 1. — P. 4–37.
187. Freund Y., Shapire R. Experiments with a new boosting algorithm // Proceedings of the 13rd International Conference on Machine Learning. P. Morgan
Cauffman. — 1996. — P. 146–148.
188. Freund Y., Schapire R. E. A Short Introduction to Boosting // Transactions
Journal of Japanese Society for Artificial Intelligence. — 1999. — Vol. 14,
no. 5. — P. 771–780.
189. Wolpert D. H. Stacked Generalization // Neural Networks. — 1992. — Vol. 14,
no. 5. — P. 771–780.
190. Borra S., Ciaccio A. Improving nonparametric regression methods by bagging
and boosting // Computational Statistics and Data Analysis. — 2002. — Vol.
38, no. 4. — P. 407–420.
191. Behlmann P., Yu B. Analyzing bagging // Annals of Statistics. — 2002. —
Vol. 30. — P. 927–961.
192. Bühlmann P., Hothorn T. Boosting algorithms: Regularization, prediction and
model fitting // Statistical Science. — 2007. — Vol. 22, no. 4. — P. 477–505.
193. Parmanto B., Munro P. W., Doyle H. R. Improving committee diagnosis
with resumpling technique // Advances in Neural Information Processing Systems. — 1996. — Vol. 8. — P. 882–888.
194. Valiant L. G. A theory of the learnable // Communications of the ACM. —
1984. — Vol. 27, no. 11. — P. 1134–1142. — URL: https : / / people . mpi inf.mpg.de/∼mehlhorn/SeminarEvolvability/ValiantLearnable.pdf.
195. Schapire R. The strength of weak learnability // Machine learning. — 1990. —
Vol. 5, no. 2. — P. 197–227.
196. Хайкин С. Нейронные сети: полный курс. — 2-е изд. — Издательский дом
Вильямс, 2008. — 1103 с.
197. Каллан Р. Нейронные сети: Краткий справочник. — Издательский дом
Вильямс, 2017. — 288 с.
198. Furnkranz J. Pruning algorithms for rule learning // Machine Learning. —
1997. — Vol. 27, no. 2. — P. 139–172.
199. Meinshausen N. Quantile Regression Forests // JMLR, Inc., MIT Press, Microtome Publishing. — 2006. — No. 7. — P. 983–999.
99
200. Géron A. Hands-On Machine Learning with Scikit-Learn and TensorFlow:
Concepts, Tools, and Techniques to Build Intelligent Systems. — Sebastopol,
California, US : O’Reilly Media, 2017. — 572 p.
201. Brownlee J. XGBoost With Python: Gradient Boosted Tree With XGBoost
and scikit-learn. — Machine Learning Mastery, 2017. — P. 115.
202. Ke G. [et al.]. LightGBM: A Highly Efficient Gradient Boosting Decision
Tree // 31st Conference on Neural Information Processing Systems (NIPS
2017). — 2017. — URL: https : / / www. microsoft . com / en - us / research /
publication/lightgbm-a-highly-efficient-gradient-boosting-decision-tree/.
203. Dorogush A. V., Ershov V., Gulin A. CatBoost: gradient boosting with categorical features support // Workshop on ML Systems at NIPS 2017. December 8,
2017. — 2017. — URL: http://learningsys.org/nips17/assets/papers/paper 11.
pdf.
204. Hastie T., Tibshirani R., Friedman J. The Elements of Statistical Learning:
Data Mining, Inference, and Prediction, Second Edition. — 2 ed. — New
York : Springer-Verlag, 2009. — 745 p.
205. Bylander T. Estimating generalization error on two-class datasets using outof-bag estimates // Machine learning. — 2002. — Vol. 48, no. 1–3. — P. 287–
297.
206. Вигерс К., Битти Д. Разработка требований к программному обеспечению : пер. с англ. — 3-е изд., дополненное. — M. : Издательство «Русская
редакция», 2014. — 752 с.
207. SWEBOK. Guide to the Software Engineering Body of Knowledge: A project
of the IEEE Computer Society Professional Practices Committee. — Los
Alamitos, California : IEEE Computer Society, 2004. — 202 p. — URL:
http://www.math.unipd.it/∼tullio/IS-1/2005/SWEBOK Guide 2004.pdf.
208. Richert W. Building Machine Learning Systems with Python. — Birmingham,
UK : Packt Publishing, 2013. — 290 p.
209. Marsland S. Machine Learning: An Algorithmic Perspective. — Boca Raton
London NewYork Washington : Chapman, Hall/CRC, 2013. — 406 p.
210. Ester M. [et al.]. A density-based algorithm for discovering clusters in large
spatial databases with noise // Proceedings of the Second International Conference on Knowledge Discovery and Data Mining: (KDD-96). — Portland,
Oregon : AAAI Press, 08/02/1996. — P. 226–231. — URL: https://dl.acm.org/
citation.cfm?id=3001507.
211. Sander J. [et al.]. Density-Based Clustering in Spatial Databases: The Algorithm GDBSCAN and Its Applications // Data Mining and Knowledge Discovery. — 1998. — Vol. 2, no. 2. — P. 345–389.
212. Виленский П. Л., Лившиц В. Н., Смоляк С. А. Оценка эффективности
инвестиционных проектов: Теория и практика: Учебное пособие. — 5-е
изд., перераб. и доп. — M. : Поли Принт Сервис, 2015. — 1300 с.
100
213. Разу М. Л., Лялин А. М., Бронникова Т. М. Управление проектом: Основы
проектного управления: Учебник / под ред. М. Л. Разу. — M. : КНОРУС,
2018. — 756 с.
214. ГОСТ Р ИСО/МЭК ТО 12207—99. Информационная технология. Процессы жизненного цикла программных средств [Текст]. — Введ. 2000—01—
07. — М. : Госстандарт России : Изд-во стандартов, 2000. — IV, 160 с. :
ил.; 29 см.
215. ГОСТ 19.001-77. Единая система программной документации. Общие положения [Текст]. — Введ. 1980—01—01. — М. : Госстандарт России : Изд-во
стандартов, 2010. — IV, 6 с. : ил.; 29 см.
216. ГОСТ 19.102-77. Единая система программной документации. Стадии
разработки [Текст]. — Введ. 1980—01—01. — М. : Госстандарт России :
Изд-во стандартов, 2010. — IV, 28 с. : ил.; 29 см.
217. ГОСТ 19.201-78. Единая система программной документации. Техническое задание. Требования к содержанию и оформлению [Текст]. — Введ.
1980—01—01. — М. : Госстандарт России : Изд-во стандартов, 2010. — IV,
60 с. : ил.; 29 см.
218. Грекул В. И., Коровкина Н. Л., Куприянов Ю. В. Проектное управление в
сфере информационных технологий. — M. : БИНОМ, 2013. — 336 с.
219. Челяпин А. А. Проектное управление в сфере информационных технологий. — M. : «Принтлето», 2016. — 192 с.
220. Project Management Institute. Руководство к своду знаний по управлению
проектами: (Руководство PMBOK®) : пер. с англ. — Newtown Square,
Pennsylvania : Project Management Institute, Inc., 2012. — 463 с. — URL:
http://www.uapa.ru/media/uploads/attachment/source/2012/12/PMbok4.pdf .
101
ПРИЛОЖЕНИЯ
Приложение А.
Структура данных для построения модели скоринговой системы.
Описательные статистики (таблица 13), представленные для объема рассматриваемых данных:
- mean - среднее значение
- std - среднеквадратическое отклонение
- min - минимальное значение
- 25% - первый (или нижний) квартиль
- 50% - второй квартиль (середина) или медиана
- 75% - третий (или верхний) квартиль
- max - максимальное значение
Таблица 13 – Структура и состав исходных данных для обучения алгоритма
№
п/п
Описание признака
1
Идентификатор клиента
2
Код кредита
3
Дисциплина клиента
Обозначение
mdm_id
CREDCODE
Discipline
103
Описательная
статистика
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
Значение
показателя
4.130169
1.072256
1.0
4.0
4.0
4.0
6.0
0.184058
0.387536
0.0
0.0
0.0
0.0
1.0
Продолжение таблицы 13
4
Количество переводов
4.1
До 1 смс
4.2
После 1 смс
4.3
До взятия кредита
4.4
После взятия кредита
Kol-per
do-1-sms
posle-1-sms
do-kredit
posle-credit
104
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
17.290821
34.801316
1.0
4.0
9.0
18.0
2220.0
6.647075
20.911697
0.0
1.0
2.0
5.0
2111.0
10.262869
23.470672
0.0
2.0
5.0
11.0
796.0
9.658758
27.030827
0.0
1.0
2.0
9.0
2138.0
7.632063
14.252358
0.0
2.0
4.0
9.0
639.0
Продолжение таблицы 13
5
Тип переводов
6
География переводов
geogr-pereved
7
География телефона
geogr-tel
8
Сумма перевода
8.1
Максимальная
tip-rerevod
summ-perevod
perevod-summ-max
105
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
13.185454
22.296069
-1.000000
2.0
5.0
6.0
69.0
110.244866
4971.411185
0.0
48.0
73.0
77.0
498002.0
55.994338
24.849087
0.0
39.0
64.0
77.0
78.0
2.995784 · 105
4.527366 · 105
3.0 · 101
9.22530 · 104
1.877305 · 105
3.8310 · 105
1.953691 · 107
1.676934 · 105
1.410307 · 105
3.0 · 101
5.50 · 104
1.20 · 105
2.350 · 105
2.150 · 106
Продолжение таблицы 13
8.2
Средняя
perevod-summ-sr
8.3
Полная
perevod-summ-poln
8.4
За полгода до взятия
кредита
8.5
За год до взятия кредита
za-pol-goda-do-kredita
za-god-do-kredita
106
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
34478.919455
43548.644483
30.0
10108.0
19832.0
41650.750
644225.0
2.995784 · 105
4.527366 · 105
3.0 · 101
9.22530 · 104
1.877305 · 105
3.8310 · 105
1.953691 · 107
1.842270 · 105
1.814556 · 105
0.0
5.910000 · 104
1.301500 · 105
2.501500 · 105
9.832553 · 106
1.978983 · 105
2.290475 · 105
0.0
6.065000 · 104
1.351500 · 105
2.655262 · 105
1.764061 · 107
Продолжение таблицы 13
9
Канал через который
пришел клиент
10
Возраст
11
Пол
12
Совпал ли регион
получения кредита с
регионом телефона
sovpal-region
13
Указал иной номер
телефона при выдаче
кредита
drugoi-nomer
kanal-prohoda-klienta
vozrast
pol
107
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
2.333426
0.627184
0.0
2.0
2.0
3.0
3.0
43.244587
10.907486
0.0
34.0
43.0
52.0
74.0
0.505144
0.499979
0.0
0.0
1.0
1.0
1.0
0.829778
0.375832
0.0
1.0
1.0
1.0
1.0
0.988756
0.105443
0.0
1.0
1.0
1.0
1.0
Приложение Б.
Программа расчета ошибки классификации методом Random Forest с
использованием перекрестной проверки и библиотеки Scikit.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Вытаскиваем методы классификации из библиотек Бегинга
from sklearn.ensemble import RandomForestClassifier
from sklearn import ensemble
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import roc_curve, auc, accuracy_score, f1_score, precision_score,
precision_recall_curve, recall_score, classification_report, confusion_matrix
from scipy import interp
from sklearn import tree
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV #Perforing grid search
from sklearn import tree
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
import math
#
#matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
rcParams['font.size'] = 12
108
42
43
rcParams['figure.dpi'] = 300
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
44
45
46
47
48
49
50
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
#test = pd.read_csv('test_modified.csv')
51
52
53
54
55
56
57
58
59
60
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:50000]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per','do-1-sms','posle-1-sms','do-kredit',
'posle-credit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max',
'perevod-summ-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita',
'kanal-prohoda-klienta','vozrast,pol,sovpal-region','drugoi-nomer']
61
62
time1 = time.monotonic()
63
64
65
#sourceFile = open('result.txt', 'w')
def modelfit(alg, dtrain, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
66
67
68
69
#Перекрестная проверка cross-validation:
if performCV:
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='accuracy')
70
71
72
73
74
75
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
76
77
78
79
#Определяем данные для алгоритма
#print("Область предикаторов predictors are:", predictors)
alg.fit(dtrain[predictors], dtrain['Discipline'])
80
81
82
83
#Опеределяем данные для обучения:
#Данные для обучения
dtrain_predictions = alg.predict(dtrain[predictors])
84
85
86
#Данные для предсказания
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
87
88
89
90
91
#Print model report:
#print(("Model Report"), end=' ')
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
#print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
109
92
93
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
#print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
94
95
96
97
98
99
100
#Print Feature Importance:
if printFeatureImportance:
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
101
102
103
#predictors = [x for x in train.columns if x not in [target, IDcol]]
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
rdf0 = RandomForestClassifier(
bootstrap=True,
class_weight=None,
criterion='gini',
#criterion='entropy',
max_depth=5,
max_features='auto',
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
min_samples_leaf=1,
min_samples_split=2,
min_weight_fraction_leaf=0.0,
n_estimators=200,
n_jobs=-1,
oob_score=True,
random_state=0,
verbose=0,
warm_start=False
)
125
126
modelfit(rdf0, train, predictors)
127
128
129
130
131
132
133
134
135
136
137
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
#print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
#print("")
print("Время обучения алгоритма = {}".format(time2-time1), end=' ')
#print("")
#Выводим результат
#plt.show()
plt.savefig('importance_from_random_forest.png')
110
Программа расчета ошибки классификации методом Gradient Boosting с
использованием перекрестной проверки и библиотеки Scikit.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from sklearn.ensemble import GradientBoostingClassifier
from sklearn import ensemble
from sklearn.model_selection import cross_val_score
#from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn import tree
#from sklearn import cross_validation, metrics #Additional scklearn functions
from sklearn.model_selection import GridSearchCV #Perforing grid search
#from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import graphviz as gv
import pydot
import pydotplus
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
42
43
44
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
111
45
46
47
48
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
#test = pd.read_csv('test_modified.csv')
49
50
51
52
53
54
55
56
57
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit',
'posle-credit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max',
'perevod-summ-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita',
'kanal-prohoda-klienta','vozrast,pol,sovpal-region','drugoi-nomer']
58
59
time1 = time.monotonic()
60
61
def modelfit(alg, dtrain, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#Перекрестная проверка cross-validation:
if performCV:
#xgb_param = alg.get_xgb_params()
xgtrain = xgb.DMatrix(dtrain[predictors].values, dtrain['Discipline'].values)
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='roc_auc')
#
cv_score = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'],
#nfold=cv_folds, metrics='auc', early_stopping_rounds=early_stopping_rounds)
#
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'],
#cv=cv_folds, scoring='acurracy')
# scoring='accuracy')
#
cv_score = xgb.cv(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='auc')
#
alg.set_params(n_estimators=cvresult.shape[0])
#
cv_score = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'],
#nfold=cv_folds, metrics=metric, early_stopping_rounds=early_stopping_rounds,fpreproc=None, as_pandas=True,
# verbose_eval=None, show_stdv=True, seed=0, callbacks=None, shuffle=True)
#
alg.set_params(n_estimators=cv_score.shape[0])
79
80
81
82
83
84
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
85
86
87
88
#Определяем данные для алгоритма
print("Область предикаторов predictors are:", predictors)
alg.fit(dtrain[predictors], dtrain['Discipline'])
89
90
91
92
#Опеределяем данные для обучения:
dtrain_predictions = alg.predict(dtrain[predictors])
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
93
94
#Print model report:
112
95
96
97
98
99
print(("Model Report"), end=' ')
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
100
101
102
103
104
105
106
#Print Feature Importance:
if printFeatureImportance:
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#Choose all predictors except target & IDcols
predictors = [x for x in train.columns if x not in [target, IDcol]]
gbm0 = GradientBoostingClassifier(
learning_rate=0.001,
n_estimators=100,
subsample=1.0,
#criterion='mse',
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_depth=5,
min_impurity_decrease=0.0,
min_impurity_split=None,
init=None, random_state=None,
max_features=None,
verbose=0,
max_leaf_nodes=None,
warm_start=False,
presort='auto',
)
modelfit(gbm0, train, predictors)
130
131
132
133
134
135
136
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма = {}".format(time2-time1), end=' ')
113
Программа расчета ошибки классификации методом Random Forest с
использованием перекрестной проверки и библиотеки light GBM.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
import lightgbm as lgb
from sklearn import ensemble
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import roc_curve, auc, accuracy_score, f1_score, precision_score,
precision_recall_curve, recall_score, classification_report, confusion_matrix
from scipy import interp
from sklearn import tree
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV #Perforing grid search
from sklearn import tree
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
import math
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
114
45
46
47
48
49
50
51
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
#test = pd.read_csv('test_modified.csv')
52
53
54
55
56
57
58
59
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','posle-credit','tip-rerevod',
'geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevod-summ-sr','perevod-summ-poln',
'za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohoda-klienta','vozrast,pol,sovpal-region','drugoi-nomer']
60
61
time1 = time.monotonic()
62
63
64
65
66
67
sourceFile = open('result.txt', 'w')
def modelfit(alg, dtrain, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
#Перекрестная проверка cross-validation:
if performCV:
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds)#, scoring='precision')
68
69
70
71
72
73
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
74
75
76
77
#Определяем данные для алгоритма
print("Область предикаторов predictors are:", predictors)
alg.fit(dtrain[predictors], dtrain['Discipline'])
78
79
80
81
82
83
84
#Опеределяем данные для обучения:
#Данные для обучения
dtrain_predictions = alg.predict(dtrain[predictors])
#Данные для предсказания
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
#print("dtrain_predprob = {}".format(dtrain_predprob))
85
86
87
88
89
90
91
#Print model report:
print(("Model Report"), end=' ')
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
92
93
94
#Print Feature Importance:
if printFeatureImportance:
115
95
96
97
98
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
predictors = [x for x in train.columns if x not in [target, IDcol]]
rdf0 = lgb.LGBMClassifier(
boosting='rf',
max_depth=5,
learning_rate=0.1,
n_estimators=100,
subsample_for_bin=200000,
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
eval_metric='auc',
random_state=None,
n_jobs=1,
silent=True
)
122
123
modelfit(rdf0, train, predictors)
124
125
126
127
128
129
130
131
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма = {}".format(time2-time1), end=' ')
print("")
116
Программа расчета ошибки классификации методом Gradient Boosting с
использованием перекрестной проверки и библиотеки light GBM.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
import lightgbm as lgb
from sklearn import ensemble
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import roc_curve, auc, accuracy_score, f1_score, precision_score,
precision_recall_curve, recall_score, classification_report, confusion_matrix
from scipy import interp
from sklearn import tree
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV #Perforing grid search
from sklearn import tree
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
import math
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
117
45
46
47
48
49
50
51
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
#test = pd.read_csv('test_modified.csv')
52
53
54
55
56
57
58
59
60
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','posle-credit',
'tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevod-summ-sr',
'perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohoda-klienta',
'vozrast,pol,sovpal-region','drugoi-nomer']
61
62
time1 = time.monotonic()
63
64
65
66
67
68
sourceFile = open('result.txt', 'w')
def modelfit(alg, dtrain, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
#Перекрестная проверка cross-validation:
if performCV:
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds)#, scoring='precision')
69
70
71
72
73
74
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
75
76
77
78
#Определяем данные для алгоритма
print("Область предикаторов predictors are:", predictors)
alg.fit(dtrain[predictors], dtrain['Discipline'])
79
80
81
82
83
84
85
#Опеределяем данные для обучения:
#Данные для обучения
dtrain_predictions = alg.predict(dtrain[predictors])
#Данные для предсказания
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
#print("dtrain_predprob = {}".format(dtrain_predprob))
86
87
88
89
90
91
92
#Print model report:
print(("Model Report"), end=' ')
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
93
94
#Print Feature Importance:
118
95
96
97
98
99
if printFeatureImportance:
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
predictors = [x for x in train.columns if x not in [target, IDcol]]
rdf0 = lgb.LGBMClassifier(
boosting='gbdt',
max_depth=5,
learning_rate=0.1,
n_estimators=1,
subsample_for_bin=200000,
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
eval_metric='auc',
random_state=None,
n_jobs=-1,
silent=True
)
123
124
modelfit(rdf0, train, predictors)
125
126
127
128
129
130
131
132
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма = {}".format(time2-time1), end=' ')
print("")
Программа расчета ошибки классификации методом Gradient Boosting с
использованием перекрестной проверки и библиотеки XGBoost.
Код программы.
1
2
3
4
# -*- coding: utf-8 -*# Примечание. При работе с алгоритмом может появится предепреждение
#C:\Program Files\Python36\lib\site-packages\sklearn\preprocessing\label.py:151:
#DeprecationWarning: The truth value of an empty array is ambiguous. Returning False, but in
119
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#future this will result in an error. Use `array.size > 0` to check that an array is not empty.
# if diff:
#Это связано с изменениями в библиотеке numpy версии 1.14.0, где убрана проверка пустого
#массива, что затронуло часть производных библиотек Python такие как Sklearn, SciPy и другие.
# На момент работы с программой на форумах разработчиков библиотеки Numpy сказано, что это
#ошибка, и будет устранена в будущем. На правильности решения задачи это не сказывается, т.к. весь код
# был написан ранее, с использованием более ранней библиотеки и при обновлении наболее
#свежую версию, где предупреждение присутствует, никак не сказывается на результате.
import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#os.environ["PATH"] += os.pathsep + 'd:/1/WinPython/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#from joblib import Parallel, delayed
import multiprocessing
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from xgboost.sklearn import XGBClassifier
#from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn import metrics
#from sklearn import cross_validation, metrics #Additional scklearn functions
from sklearn.model_selection import GridSearchCV #Perforing grid search
#from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
#
#matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
rcParams['font.size'] = 12
rcParams['figure.dpi'] = 100
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
120
55
56
57
58
59
60
61
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
#test = pd.read_csv('test_modified.csv')
62
63
64
65
66
67
68
69
70
71
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','posle-credit',
'tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevod-summ-sr',
'perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohoda-klienta',
'vozrast,pol,sovpal-region','drugoi-nomer']
72
73
74
#time1 = datetime.now()
time1 = time.monotonic()
75
76
77
def modelfit(alg, dtrain, predictors,metric=["auc"], performCV=True, printFeatureImportance=True,
cv_folds=5,early_stopping_rounds=50):
78
79
80
81
82
83
84
85
86
#Перекрестная проверка cross-validation:
if performCV:
xgb_param = alg.get_xgb_params()
xgtrain = xgb.DMatrix(dtrain[predictors].values, dtrain['Discipline'].values)
cv_score = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'],
nfold=cv_folds, metrics=metric, early_stopping_rounds=early_stopping_rounds,fpreproc=None,
as_pandas=True, verbose_eval=None, show_stdv=True, seed=0, callbacks=None, shuffle=True)
alg.set_params(n_estimators=cv_score.shape[0])
87
88
89
90
91
92
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
93
94
95
#Определяем данные для алгоритма
clf=alg.fit(dtrain[predictors], dtrain['Discipline'], eval_metric=metric)
96
97
98
99
100
#Опеределяем данные для обучения:
dtrain_predictions = alg.predict(dtrain[predictors])
#Стольбец который нужен для обучения 'Discipline'
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
101
102
103
104
#Print model report:
print(("Model Report"), end=' ')
121
105
106
107
108
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
109
110
111
112
113
114
115
#Print Feature Importance:
if printFeatureImportance:
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
116
117
118
#Возвращаем модель
return clf
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#Choose all predictors except target & IDcols
#predictors = [x for x in train.columns if x not in [target, IDcol]]
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
xgb1 = XGBClassifier(
learning_rate =0.1,
n_estimators=200,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective= 'binary:logistic',
#objective= 'binary:logitraw',
# objective= 'multi:softmax',
# num_class=2,
nthread=-1,
scale_pos_weight=1,
seed=27)
138
139
modelfit(xgb1, train, predictors)
140
141
142
143
144
145
146
147
148
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма при перекресной проверке = {}".format(time2-time1), end=' ')
#Выводим результат
plt.show()
122
Программа расчета ошибки классификации методом Gradient Boosting с
использованием перекрестной проверки и библиотеки CatBoost.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from catboost import CatBoostClassifier
from sklearn.model_selection import cross_val_score
#from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn import tree
#from sklearn import cross_validation, metrics #Additional scklearn functions
from sklearn.model_selection import GridSearchCV #Perforing grid search
#from sklearn.preprocessing import LabelEncoder
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
39
40
41
42
43
44
#Загрузка данных для обучения модели
#train = pd.read_csv('train_modified-test.csv')#, delimiter=',') #header=1, delimiter=';')#, na_values='?')
#target = 'Disbursed'
#IDcol = 'mdm_id'
#Загрузка данных для прогноза
123
45
#test = pd.read_csv('test_modified.csv')
46
47
48
49
50
51
52
53
54
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','posle-credit',
'tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevod-summ-sr',
'perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohoda-klienta',
'vozrast,pol,sovpal-region','drugoi-nomer']
55
56
time1 = time.monotonic()
57
58
def modelfit(alg, dtrain, predictors, performCV=True, printFeatureImportance=True, cv_folds=5):
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#Перекрестная проверка cross-validation:
if performCV:
#xgb_param = alg.get_xgb_params()
xgtrain = xgb.DMatrix(dtrain[predictors].values, dtrain['Discipline'].values)
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='accuracy')
#
cv_score = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'],
#nfold=cv_folds, metrics='auc', early_stopping_rounds=early_stopping_rounds)
#
cv_score = cross_val_score(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='acurracy')
# scoring='accuracy')
#
cv_score = xgb.cv(alg, dtrain[predictors], dtrain['Discipline'], cv=cv_folds, scoring='auc')
#
alg.set_params(n_estimators=cvresult.shape[0])
#
cv_score = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'],
#nfold=cv_folds, metrics=metric, early_stopping_rounds=early_stopping_rounds,fpreproc=None,
#as_pandas=True, verbose_eval=None, show_stdv=True, seed=0, callbacks=None, shuffle=True)
#
alg.set_params(n_estimators=cv_score.shape[0])
75
76
77
78
79
80
print("Параметры:")
print("CV Score : Mean - {} ".format(np.mean(cv_score)))
print("CV Score : Std - {} ".format(np.std(cv_score)))
print("CV Score : Min - {} ".format(np.min(cv_score)))
print("CV Score : Max - {} ".format(np.max(cv_score)))
81
82
83
84
#Определяем данные для алгоритма
print("Область предикаторов predictors are:", predictors)
alg.fit(dtrain[predictors], dtrain['Discipline'])
85
86
87
88
#Опеределяем данные для обучения:
dtrain_predictions = alg.predict(dtrain[predictors])
dtrain_predprob = alg.predict_proba(dtrain[predictors])[:, 1]
89
90
91
92
93
94
#Print model report:
print(("Model Report"), end=' ')
#print(("Accuracy :%.4g") %(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
print("Accuracy :{:f}".format(metrics.accuracy_score(dtrain['Discipline'].values, dtrain_predictions)))
124
95
96
#print(("AUC Score (Train):%f") %(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
print("AUC Score (Train):{:f}".format(metrics.roc_auc_score(dtrain['Discipline'], dtrain_predprob)))
97
98
99
100
101
102
103
#Print Feature Importance:
if printFeatureImportance:
#feat_imp = pd.Series(alg.booster().get_fscore()).sort_values(ascending=False)
feat_imp = pd.Series(alg.feature_importances_,predictors).sort_values(ascending=False)
feat_imp.plot(kind='bar', title=u'Характеристика важности')
plt.ylabel(u'Значение показателя важности')
104
105
106
107
108
109
110
111
112
113
114
115
#Choose all predictors except target & IDcols
predictors = [x for x in train.columns if x not in [target, IDcol]]
cb0 = CatBoostClassifier(iterations=100,
learning_rate=0.001,
depth=5,
#learning_rate=1,
l2_leaf_reg=3,
loss_function='Logloss',
logging_level='Verbose')
modelfit(cb0, train, predictors)
116
117
118
119
120
121
122
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма = {}".format(time2-time1), end=' ')
125
Приложение В.
Программа сравнительной оценки точности классификации в
зависимости от числа итерации алгоритма Random Forest c
использованием библиотек Scikit и light GBM.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from sklearn.ensemble import RandomForestClassifier
import lightgbm as lgb
from sklearn import ensemble
from sklearn.model_selection import cross_val_score
#from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn import tree
#from sklearn import cross_validation, metrics #Additional scklearn functions
from sklearn.model_selection import GridSearchCV #Perforing grid search
#from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
126
41
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
time1 = time.monotonic()
#Проводим оценку ошибки прогноза
train = pd.read_csv('train_modified-abs-bin.csv')
#Удаляем 1-ю строку
#train = train[1:]
#train = train.astype(np.float64)
#train = pd.DataFrame(train,dtype=float)
train=train.drop(train.columns[[0,1]],axis=1)
#Берем 1000 элементов
train=train[:1000]
X = train[[x for x in train.columns if x!='Discipline']]
y = train['Discipline']
#X_train, y_train = X[:40000], y[40000:]
#X_test, y_test = X[:40000], y[40000:]
#######################################
#Для полной выборки
#X_train, X_test = X[:40000], X[40000:]
#y_train, y_test = y[:40000], y[40000:]
#Для 1000 элементов
X_train, X_test = X[:800], X[800:]
y_train, y_test = y[:800], y[800:]
64
65
66
time2 = time.monotonic()
#####################################################################
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
ensemble_clfs = [
("Случайный лес. Scikit",
RandomForestClassifier(
#n_estimators=1,
bootstrap=True,
class_weight=None,
criterion='gini',
max_depth=5,
max_features='auto',
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
min_samples_leaf=1,
min_samples_split=2,
min_weight_fraction_leaf=0.0,
n_jobs=-1,
oob_score=False,
random_state=123456,
#random_state=None,
verbose=0,
warm_start=False)),
("Случайный лес. Light GBM",
lgb.LGBMClassifier(
127
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
boosting='rf',
max_depth=5,
learning_rate=0.1,
#n_estimators=1,
subsample_for_bin=200000,
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
#eval_metric='auc',
random_state=None,
n_jobs=-1,
silent=True)),
]
########################################################
from sklearn.metrics import mean_squared_error,r2_score
#clf.fit(X_train, y_train)
114
115
116
#mse = mean_squared_error(y_test, clf.predict(X_test))
#r2 = r2_score(y_test, clf.predict(X_test))
117
118
119
120
121
122
123
124
125
126
#print("MSE: %.4f" % mse)
#print("R2: %.4f" % r2)
########################################################
#Сопоставляем имя классификатора со списком пар (<n_estimators>, <error rate>).
from collections import OrderedDict
error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)
#Определяем диапазон значений `n_estimators` для обучения.
min_estimators = 1
max_estimators = 100
127
128
129
130
131
for label, clf in ensemble_clfs:
for i in range(min_estimators, max_estimators + 1):
clf.set_params(n_estimators=i)
clf.fit(X, y)
132
133
134
135
136
137
# Запишсываем ошибку OOB для каждой установки `n_estimators = i`.
#oob_error = 1 - clf.oob_score_
#error_rate[label].append((i, oob_error))
error = 1 - clf.score(X_test, y_test)
error_rate[label].append((i, error))
138
139
140
# Generate the "OOB error rate" vs. "n_estimators" plot.
for label, clf_err in error_rate.items():
128
141
142
xs, ys = zip(*clf_err)
plt.plot(xs, ys, label=label)
143
144
145
146
147
148
plt.xlim(min_estimators, max_estimators)
plt.xlabel("n_estimators (число попыток)")
plt.ylabel("Error rate (Ошибка)")
plt.legend(loc="upper right")
plt.show()
149
150
151
152
#Печать ROC кривых
from sklearn.metrics import roc_curve, auc
from sklearn.cross_validation import train_test_split
153
154
155
156
157
clf.fit(X_train, y_train)
fpr, tpr, _ = roc_curve(y_test, forest.predict_proba(X_test)[:,1])
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
158
159
160
161
162
163
164
165
166
167
168
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'k--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()
Программа сравнительной оценки точности классификации в
зависимости от числа итерации алгоритма Gradient Boosting c
использованием библиотек Scikit, light GBM и XGBoost.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
#Визуализация процесса обучения
import tqdm
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
129
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from sklearn.ensemble import GradientBoostingClassifier
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
import lightgbm as lgb
from sklearn import ensemble
from sklearn.model_selection import cross_val_score
#from sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn import tree
#from sklearn import cross_validation, metrics #Additional scklearn functions
from sklearn.model_selection import GridSearchCV #Perforing grid search
#from sklearn.preprocessing import LabelEncoder
from sklearn import tree
import graphviz as gv
import pydot
import pydotplus
from IPython.display import Image
import matplotlib.pylab as plt
#Настройка параметров графиков
#%matplotlib inline
from matplotlib.pylab import rcParams
import matplotlib
#для оценки времени работы алгоритма
from datetime import datetime, timedelta
import time
#
matplotlib.use('WXAgg',warn=False, force=True)
rcParams['figure.figsize'] = 12, 4 #размер фигуры
#rcParams['backend'] = TkAgg #тулкит для отображения графиков Matplotlib
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
time1 = time.monotonic()
#Проводим оценку ошибки прогноза
train = pd.read_csv('train_modified-abs-bin.csv')
#Удаляем 1-ю строку
#train = train[1:]
#train = train.astype(np.float64)
#train = pd.DataFrame(train,dtype=float)
train=train.drop(train.columns[[0,1]],axis=1)
#Берем 1000 элементов
train=train[:1000]
X = train[[x for x in train.columns if x!='Discipline']]
y = train['Discipline']
#X_train, y_train = X[:40000], y[40000:]
#X_test, y_test = X[:40000], y[40000:]
#######################################
#X_train, X_test = X[:40000], X[40000:]
#y_train, y_test = y[:40000], y[40000:]
130
63
64
65
#Для 1000 элементов
X_train, X_test = X[:800], X[800:]
y_train, y_test = y[:800], y[800:]
66
67
68
time1 = time.monotonic()
#####################################################################
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
ensemble_clfs = [
("Градиентный бустинг. Scikit",
GradientBoostingClassifier(
learning_rate=0.05,
#n_estimators=1,
subsample=1.0,
#criterion='friedman_mse',
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_depth=5,
min_impurity_decrease=0.0,
min_impurity_split=None,
init=None,
random_state=None,
max_features=None,
verbose=0,
max_leaf_nodes=None,
warm_start=False,
presort='auto')),
("Градиентный бустинг. XGBoost",
XGBClassifier(
learning_rate=0.05,
n_estimators=1,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective= 'binary:logistic',
#objective='binary:logitraw',
# objective= 'multi:softmax',
# num_class=2,
nthread=4,
scale_pos_weight=1,
seed=27)),
("Градиентный бустинг. Light GBM",
lgb.LGBMClassifier(
boosting='rf',
max_depth=5,
learning_rate=0.05,
n_estimators=1,
subsample_for_bin=200000,
131
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
eval_metric='auc',
random_state=None,
n_jobs=-1,
silent=True)),
]
########################################################
from sklearn.metrics import mean_squared_error,r2_score
#clf.fit(X_train, y_train)
131
132
133
#mse = mean_squared_error(y_test, clf.predict(X_test))
#r2 = r2_score(y_test, clf.predict(X_test))
134
135
136
137
138
139
140
141
142
143
#print("MSE: %.4f" % mse)
#print("R2: %.4f" % r2)
########################################################
#Сопоставляем имя классификатора со списком пар (<n_estimators>, <error rate>).
from collections import OrderedDict
error_rate = OrderedDict((label, []) for label, _ in ensemble_clfs)
#Определяем диапазон значений `n_estimators` для обучения.
min_estimators = 1
max_estimators = 100
144
145
146
147
148
149
for label, clf in (ensemble_clfs):
for i in range(min_estimators, max_estimators + 1):
print("n_stimators = %.2f" % i)
clf.set_params(n_estimators=i)
clf.fit(X, y)
150
151
152
153
154
155
# Запишсываем ошибку OOB для каждой установки `n_estimators = i`.
#oob_error = 1 - clf.oob_score_
#error_rate[label].append((i, oob_error))
error = 1 - clf.score(X_test, y_test)
error_rate[label].append((i, error))
156
157
158
159
160
# Generate the "OOB error rate" vs. "n_estimators" plot.
for label, clf_err in error_rate.items():
xs, ys = zip(*clf_err)
plt.plot(xs, ys, label=label)
161
162
plt.xlim(min_estimators, max_estimators)
132
163
164
165
166
plt.xlabel("n_estimators (число попыток)")
plt.ylabel("Error rate (Ошибка)")
plt.legend(loc="upper right")
plt.show()
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма при поиске ошибки = {}".format(time2-time1), end=' ')
print("")
time2 = time.monotonic()
print("Время начала работы алгоритма = {}".format(time1), end=' ')
print("")
print("Время конца работы алгоритма = {}".format(time2), end=' ')
print("")
print("Время обучения алгоритма при поиске ошибки = {}".format(time2-time1), end=' ')
print("")
#####################################################################
133
Приложение Г.
Программа расчета ROC кривой для алгоритма Random Forest
библиотеки Scikit.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
import win_unicode_console
win_unicode_console.enable()
import matplotlib.pyplot as plt
#Вытаскиваем методы классификации из библиотек Бегинга
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import roc_curve, auc
15
16
17
18
19
20
21
22
23
24
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','poslecredit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevodsumm-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohodaklienta','vozrast,pol,sovpal-region','drugoi-nomer']
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
rdf0 = RandomForestClassifier(
bootstrap=True,
class_weight=None,
criterion='gini',
#criterion='entropy',
max_depth=5,
max_features='auto',
max_leaf_nodes=None,
min_impurity_decrease=0.0,
min_impurity_split=None,
min_samples_leaf=1,
min_samples_split=2,
min_weight_fraction_leaf=0.0,
n_estimators=10,
n_jobs=-1,
134
oob_score=True,
random_state=0,
verbose=0,
warm_start=False
42
43
44
45
46
)
47
48
49
X_train = train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_train = train['Discipline']
50
51
52
X_test=train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_test = train['Discipline']
53
54
55
clf = rdf0
clf.fit(X_train, y_train)
56
57
58
59
60
61
#Определяем истинные и ложные показатели классификации
fpr, tpr, _ = roc_curve(y_test, clf.predict_proba(X_test)[:,1])
#Вычисляем площадь AUC под кривой ROC
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
62
63
64
65
66
67
68
69
70
71
72
73
#График под кривой для класса
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(u'False Positive Rate (Ложная положительная оценка)')
plt.ylabel(u'True Positive Rate (Истинная положительная оценка)')
plt.title(u'ROC Curve (ROC кривая)')
plt.legend(loc="lower right")
plt.show()
Программа расчета ROC кривой для алгоритма Random Forest и
Gradient Boosting библиотеки light GBM.
Код программы.
1
2
3
4
5
6
7
8
9
10
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
import win_unicode_console
win_unicode_console.enable()
135
11
12
13
14
import matplotlib.pyplot as plt
#Вытаскиваем методы классификации из библиотек Бегинга
import lightgbm as lgb
from sklearn.metrics import roc_curve, auc
15
16
17
18
19
20
21
22
23
24
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','poslecredit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevodsumm-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohodaklienta','vozrast,pol,sovpal-region','drugoi-nomer']
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
rdf0 = lgb.LGBMClassifier(
boosting='rf',
max_depth=5,
learning_rate=0.1,
n_estimators=25,
subsample_for_bin=200000,
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
eval_metric='auc',
random_state=None,
n_jobs=1,
silent=True
)
48
49
50
51
52
53
54
55
56
57
58
59
60
rdf1 = lgb.LGBMClassifier(
boosting='gbdt',
max_depth=5,
learning_rate=0.1,
n_estimators=10,
subsample_for_bin=200000,
objective=None,
class_weight=None,
min_split_gain=0.,
min_child_weight=1e-3,
min_child_samples=20,
subsample=1.,
136
subsample_freq=1,
colsample_bytree=1.,
reg_alpha=0.,
reg_lambda=0.,
eval_metric='auc',
random_state=None,
n_jobs=-1,
silent=True
61
62
63
64
65
66
67
68
69
)
70
71
72
X_train = train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_train = train['Discipline']
73
74
75
X_test=train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_test = train['Discipline']
76
77
78
79
80
81
#Алгоритм Gradient Boosting
clf = rdf1
#Алгоритм Random Forest
clf = rdf0
clf.fit(X_train, y_train)
82
83
84
85
86
87
#Определяем истинные и ложные показатели классификации
fpr, tpr, _ = roc_curve(y_test, clf.predict_proba(X_test)[:,1])
#Вычисляем площадь AUC под кривой ROC
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
88
89
90
91
92
93
94
95
96
97
98
99
#График под кривой для класса
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(u'False Positive Rate (Ложная положительная оценка)')
plt.ylabel(u'True Positive Rate (Истинная положительная оценка)')
plt.title(u'ROC Curve (ROC кривая)')
plt.legend(loc="lower right")
plt.show()
Программа расчета ROC кривой для алгоритма Gradient Boosting
библиотеки Scikit.
Код программы.
1
2
3
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
137
4
5
6
7
8
9
10
11
12
13
14
#Подключаем библиотеки
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
import win_unicode_console
win_unicode_console.enable()
import matplotlib.pyplot as plt
#Вытаскиваем методы классификации из библиотек Бустинга
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.metrics import roc_curve, auc
15
16
17
18
19
20
21
22
23
24
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','poslecredit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevodsumm-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohodaklienta','vozrast,pol,sovpal-region','drugoi-nomer']
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
gbm0 = GradientBoostingClassifier(
learning_rate=0.1,
n_estimators=10,
subsample=1.0,
#criterion='mse',
min_samples_split=2,
min_samples_leaf=1,
min_weight_fraction_leaf=0.0,
max_depth=5,
min_impurity_decrease=0.0,
min_impurity_split=None,
init=None, random_state=None,
max_features=None,
verbose=0,
max_leaf_nodes=None,
warm_start=False,
presort='auto',
)
45
46
47
X_train = train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_train = train['Discipline']
48
49
50
X_test=train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_test = train['Discipline']
51
52
53
clf = gbm0
clf.fit(X_train, y_train)
138
54
55
56
57
58
59
#Определяем истинные и ложные показатели классификации
fpr, tpr, _ = roc_curve(y_test, clf.predict_proba(X_test)[:,1])
#Вычисляем площадь AUC под кривой ROC
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
60
61
62
63
64
65
66
67
68
69
70
71
#График под кривой для класса
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(u'False Positive Rate (Ложная положительная оценка)')
plt.ylabel(u'True Positive Rate (Истинная положительная оценка)')
plt.title(u'ROC Curve (ROC кривая)')
plt.legend(loc="lower right")
plt.show()
Программа расчета ROC кривой для алгоритма Gradient Boosting
библиотеки XGBoost.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
import win_unicode_console
win_unicode_console.enable()
import matplotlib.pyplot as plt
#Вытаскиваем методы классификации из библиотек Бегинга
from xgboost.sklearn import XGBClassifier
from sklearn.metrics import roc_curve, auc
15
16
17
18
19
20
21
22
23
24
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','poslecredit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevodsumm-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohodaklienta','vozrast,pol,sovpal-region','drugoi-nomer']
139
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
xgb0 = XGBClassifier(
learning_rate=0.1,
n_estimators=10,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective= 'binary:logistic',
#objective='binary:logitraw',
# objective= 'multi:softmax',
# num_class=2,
nthread=4,
scale_pos_weight=1,
seed=27
)
43
44
45
X_train = train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_train = train['Discipline']
46
47
48
X_test=train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_test = train['Discipline']
49
50
51
clf = xgb0
clf.fit(X_train, y_train)
52
53
54
55
56
57
#Определяем истинные и ложные показатели классификации
fpr, tpr, _ = roc_curve(y_test, clf.predict_proba(X_test)[:,1])
#Вычисляем площадь AUC под кривой ROC
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
58
59
60
61
62
63
64
65
66
67
68
69
#График под кривой для класса
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(u'False Positive Rate (Ложная положительная оценка)')
plt.ylabel(u'True Positive Rate (Истинная положительная оценка)')
plt.title(u'ROC Curve (ROC кривая)')
plt.legend(loc="lower right")
plt.show()
140
Программа расчета ROC кривой для алгоритма Gradient Boosting
библиотеки CatBoost.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#Подключаем библиотеки
#бибилиотека анализа данных
import pandas as pd
#Матрицы и массивы
import numpy as np
import win_unicode_console
win_unicode_console.enable()
import matplotlib.pyplot as plt
#Вытаскиваем методы классификации из библиотек Бегинга
from catboost import CatBoostClassifier
from sklearn.metrics import roc_curve, auc
15
16
17
18
19
20
21
22
23
24
print(u'Загружаем данные')
train = pd.read_csv('train_modified-abs-bin.csv')
train=train[:500]
target = ['Discipline']
IDcol = ['mdm_id','CREDCODE']
cols=['mdm_id','CREDCODE','Discipline','Kol-per,do-1-sms','posle-1-sms','do-kredit','poslecredit','tip-rerevod,geogr-pereved','geogr-tel,summ-perevod','perevod-summ-max','perevodsumm-sr','perevod-summ-poln','za-pol-goda-do-kredita','za-god-do-kredita','kanal-prohodaklienta','vozrast,pol,sovpal-region','drugoi-nomer']
25
26
predictors = [x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]
27
28
29
30
31
32
33
34
cb0 = CatBoostClassifier(iterations=10,
learning_rate=0.1,
depth=10,
l2_leaf_reg=3,
loss_function='Logloss',
logging_level='Verbose'
)
35
36
37
X_train = train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_train = train['Discipline']
38
39
40
X_test=train[[x for x in train.columns if x not in ['Discipline', 'mdm_id','CREDCODE']]]
y_test = train['Discipline']
41
42
43
clf = cb0
clf.fit(X_train, y_train)
44
141
45
46
47
48
49
#Определяем истинные и ложные показатели классификации
fpr, tpr, _ = roc_curve(y_test, clf.predict_proba(X_test)[:,1])
#Вычисляем площадь AUC под кривой ROC
roc_auc = auc(fpr, tpr)
print('ROC AUC: %0.2f' % roc_auc)
50
51
52
53
54
55
56
57
58
59
60
61
#График под кривой для класса
plt.figure()
plt.plot(fpr, tpr, label='ROC curve (area = %0.4f)' % roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel(u'False Positive Rate (Ложная положительная оценка)')
plt.ylabel(u'True Positive Rate (Истинная положительная оценка)')
plt.title(u'ROC Curve (ROC кривая)')
plt.legend(loc="lower right")
plt.show()
142
Приложение Д.
Результат работы программы скоринга клиентов на основе градиентного
бустинга
Загружаем данные
Параметры:
CV Score : Mean - train-auc-mean 0.947800
train-auc-std
0.007802
test-auc-mean 0.770477
test-auc-std
0.038537
dtype: float64
CV Score : Std - train-auc-mean 0.036924
train-auc-std
0.003590
test-auc-mean 0.013317
test-auc-std
0.004000
dtype: float64
CV Score : Min - train-auc-mean 0.812417
train-auc-std
0.003170
test-auc-mean 0.716868
test-auc-std
0.030977
dtype: float64
CV Score : Max - train-auc-mean 0.985292
train-auc-std
0.018004
test-auc-mean 0.779111
test-auc-std
0.051231
dtype: float64
C:\Python36\lib\site-packages\sklearn\preprocessing\label.py:151: DeprecationWarning:
The truth value of an empty array is ambiguous. Returning False, but in future this will
result in an error. Use `array.size > 0` to check that an array is not empty.
if diff:
Model Report Accuracy :0.912000
AUC Score (Train):0.977363
Время начала работы алгоритма = 4537.663
Время конца работы алгоритма = 4539.878
Время обучения алгоритма при перекресной проверке = 2.2150000000001455
Выводим таблицу значений, попавших в анализ
mdm_id CREDCODE
...
13079 2245403
4
...
37333 5936647
4
...
40157 13689012
4
...
sovpal-region drugoi-nomer
1
1
1
1
1
1
143
22523
43499
44208
36651
19912
14438
34013
8813
23385
32051
10053
4680
34873
16517
44749
41636
4448
16428996
3822109
12025422
3283756
13373829
1595666
20943403
14538598
3488601
6457522
14509038
17938139
16021422
7574275
6415068
17170739
14331349
4
4
6
4
4
6
2
3
4
4
4
4
4
2
6
6
6
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
[20 rows x 22 columns]
Выводим таблицу значений с новыми индексами
mdm_id CREDCODE
0 2245403
4
1 5936647
4
2 13689012
4
3 16428996
4
4 3822109
4
5 12025422
6
6 3283756
4
7 13373829
4
8 1595666
6
9 20943403
2
10 14538598
3
11 3488601
4
12 6457522
4
13 14509038
4
14 17938139
4
15 16021422
4
16 7574275
2
17 6415068
6
18 17170739
6
19 14331349
6
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
sovpal-region drugoi-nomer
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
144
[20 rows x 22 columns]
Выводим таблицу без значений без дисциплины и вспомогательных полей
Kol-per do-1-sms
0
5
3
1
12
1
2
14
1
3
16
12
4
19
2
5
23
5
6
17
7
7
4
0
8
11
9
9
11
2
10
2
0
11
6
1
12
10
2
13
3
1
14
3
2
15
25
16
16
4
1
17
27
8
18
21
7
19
2
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
sovpal-region drugoi-nomer
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
[20 rows x 19 columns]
C:\Python36\lib\site-packages\sklearn\preprocessing\label.py:151: DeprecationWarning:
The truth value of an empty array is ambiguous. Returning False, but in future this will
result in an error. Use `array.size > 0` to check that an array is not empty.
if diff:
mdm_id Discipline
0 2245403
0
1 5936647
0
2 13689012
0
3 16428996
1
4 3822109
0
5 12025422
0
6 3283756
1
7 13373829
1
8 1595666
1
9 20943403
0
10 14538598
1
11 3488601
1
145
12 6457522
13 14509038
14 17938139
15 16021422
16 7574275
17 6415068
18 17170739
19 14331349
Выводим итоговую
mdm_id Discipline
0 2245403
1 5936647
2 13689012
3 16428996
4 3822109
5 12025422
6 3283756
7 13373829
8 1595666
9 20943403
10 14538598
11 3488601
12 6457522
13 14509038
14 17938139
15 16021422
16 7574275
17 6415068
18 17170739
19 14331349
1
1
0
0
1
0
0
1
таблицу с прогнозом по дисциплине
...
0
0
0
1
0
0
1
1
1
0
1
1
1
1
0
0
1
0
0
1
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
sovpal-region drugoi-nomer
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
[20 rows x 21 columns]
Выводим итоговую таблицу клиентов с хорошей дисциплиной
mdm_id Discipline
3 16428996
6 3283756
7 13373829
8 1595666
10 14538598
11 3488601
12 6457522
...
1
1
1
1
1
1
1
...
...
...
...
...
...
...
sovpal-region drugoi-nomer
1
1
1
1
1
1
1
1
1
1
0
1
1
1
146
13 14509038
16 7574275
19 14331349
1
1
1
...
...
...
1
1
1
1
1
1
[10 rows x 21 columns]
147
Приложение E.
Профиль хорошего клиента.
Описательные статистики (таблица 14), представленные для объема полученных данных на основе модели скоринга:
- mean - среднее значение
- std - среднеквадратическое отклонение
- min - минимальное значение
- 25% - первый (или нижний) квартиль
- 50% - второй квартиль (середина) или медиана
- 75% - третий (или верхний) квартиль
- max - максимальное значение
Таблица 14 – Структура и состав данных полученных после реализации
алгоритма
№
п/п
4
Описание признака
Количество переводов
4.1
До 1 смс
4.2
После 1 смс
Обозначение
Kol-per
do-1-sms
posle-1-sms
148
Описательная
статистика
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
Значение
показателя
9.921429
16.471640
1.0
3.0
6.0
11.0
401.0
4.780476
14.387044
0.0
1.0
1.0
4.0
382.0
4.874762
5.248474
0.0
2.0
3.0
6.0
44.0
Продолжение таблицы 13
4.3
До взятия кредита
do-kredit
4.4
После взятия кредита
posle-credit
5
Тип переводов
tip-rerevod
6
География переводов
geogr-pereved
7
География телефона
geogr-tel
8
Сумма перевода
summ-perevod
149
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
6.364286
16.020210
0.0
1.0
2.0
7.0
396.0
3.557143
2.653047
0.0
2.0
3.0
5.0
35.0
15.214762
24.541009
0.0
2.0
5.0
8.0
69.0
61.334762
21.595988
0.0
52.0
74.0
77.0
89.0
57.184762
22.678946
0.0
40.0
63.0
77.0
78.0
2.292578 · 105
2.873120 · 105
1.5 · 102
7.518750 · 104
1.507100 · 105
3.002250 · 105
5.742130 · 106
Продолжение таблицы 13
8.1
Максимальная
perevod-summ-max
8.2
Средняя
perevod-summ-sr
8.3
Полная
perevod-summ-poln
8.4
За полгода до взятия
кредита
8.5
За год до взятия кредита
za-pol-goda-do-kredita
za-god-do-kredita
150
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
157254.274286
128677.098396
150.0
55000.0
115000.0
210000.0
570000.0
38450.729048
47680.046242
150.0
13571.5
23456.0
43035.750
500000.0
2.292578 · 105
2.873120 · 105
1.5 · 102
7.518750 · 104
1.507100 · 105
3.002250 · 105
5.742130 · 106
166454.086190
140146.213551
0.0
59137.5
120100.0
229031.250
990000.0
1.745844 · 105
1.503340 · 105
0.0
6.0250 · 104
1.2510 · 105
2.408250 · 105
1.156856 · 106
Продолжение таблицы 13
9
Канал через который
пришел клиент
10
Возраст
11
Пол
12
Совпал ли регион
получения кредита с
регионом телефона
sovpal-region
13
Указал иной номер
телефона при выдаче
кредита
drugoi-nomer
kanal-prohoda-klienta
vozrast
pol
151
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
mean
std
min
25%
50%
75%
max
2.288095
0.617631
0.0
2.0
2.0
3.0
3.0
41.632857
10.255895
23.0
33.0
41.0
49.0
73.0
0.500476
0.500119
0.0
0.0
1.0
1.0
1.0
0.85
0.357156
0.0
1.0
1.0
1.0
1.0
0.992857
0.084233
0.0
1.0
1.0
1.0
1.0
Приложение Ж.
Программа построения кластеризации методом DBSCAN.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: utf-8 -*import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#os.environ["PATH"] += os.pathsep + 'd:/1/WinPython/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
import pandas as pd
#Матрицы и массивы
import numpy as np
#Алгоритм кластеризации DBSCAN
from sklearn.cluster import DBSCAN
from sklearn.decomposition import PCA
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
18
19
20
21
22
23
def set_colors(labels, colors='bgrcmykbgrcmykbgrcmykbgrcmyk'):
colored_labels = []
for label in labels:
colored_labels.append(colors[label])
return colored_labels
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
print(u'Загружаем данные')
test = pd.read_csv('goo_client.csv')
id_1=test['mdm_id']
#Убираем поля которые не нужны
prof_test = test.drop(columns=['mdm_id','Discipline'])
prof_test=prof_test[['Kol-per','perevod-summ-poln']]
#Из клиентов попавших в выборку сформируем 4 профиля
#prof_test = prof_test.as_matrix().astype("float32", copy = False)
dbscan = DBSCAN(eps = 1, min_samples = 15,algorithm='auto').fit(prof_test)
labels = dbscan.labels_
print(labels)
colors = set_colors(labels)
n_clusters_ = len(set(labels))
print(u'Количество кластеров', n_clusters_)
plt.scatter(prof_test['Kol-per'], prof_test['perevod-summ-poln'], c=colors, marker='+')
plt.title(u'Количество кластеров')
plt.xlabel("Kol-per")
plt.ylabel("perevod-summ-poln")
plt.show()
152
Программа прогнозирования активности клиента.
Код программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# -*- coding: utf-8 -*#Среднее значение 10 переводов, по формуле Стержеса lg(10)*3.322+1=4.322, т.е. 5 интервалов
# 5 классов. h=(11-1)/5=2
import os
os.environ["PATH"] += os.pathsep + 'C:/SRV/graphviz/bin/'
#os.environ["PATH"] += os.pathsep + 'd:/1/WinPython/graphviz/bin/'
#Подключаем библиотеки
import win_unicode_console
win_unicode_console.enable()
import pandas as pd
#Матрицы и массивы
import numpy as np
#Бустинг
import xgboost as xgb
#Вытаскиваем методы классификации из библиотек
from xgboost.sklearn import XGBClassifier
#from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split
from sklearn import metrics
import graphviz as gv
import pydot
from IPython.display import Image
import matplotlib.pylab as plt
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
print(u'Загружаем данные')
test = pd.read_csv('goo_client.csv')
id_1=test['mdm_id']
#Убираем поля которые не нужны
prof_test = test.drop(columns=['mdm_id','Discipline'])
#Из клиентов попавших в выборку сформируем 4 профиля
#Отключить предупреждения об исключениях
pd.options.mode.chained_assignment = None
#Первый класс от 1 до 3
prof_test.loc[(prof_test['Kol-per']<3)&(prof_test['Kol-per']>=1),'Kol-per']=0
#Второй класс от 3 до 5
prof_test.loc[(prof_test['Kol-per']<5)&(prof_test['Kol-per']>=3),'Kol-per']=1
#Третий класс от 5 до 7
prof_test.loc[(prof_test['Kol-per']<7)&(prof_test['Kol-per']>=5),'Kol-per']=2
#Четвертый класс от 7 до 9
prof_test.loc[(prof_test['Kol-per']<9)&(prof_test['Kol-per']>=7),'Kol-per']=3
#Пятый класс более 9
prof_test.loc[prof_test['Kol-per']>=9,'Kol-per']=4
#Переиндексируем данные
prof_test.reset_index(drop=True,inplace=True)
print(prof_test['Kol-per'])
153
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#Определяем выборку для обучения
X_mk = prof_test[[x for x in prof_test.columns if x not in ['Kol-per']]]
y_mk = prof_test['Kol-per']
#Определяем классификатор
xgb2 = XGBClassifier(
learning_rate =0.1,
n_estimators=200,
max_depth=5,
min_child_weight=1,
gamma=0,
subsample=0.8,
colsample_bytree=0.8,
objective= 'multi:softmax',
num_class=4,
nthread=-1,
scale_pos_weight=1,
eval_metric = "auc",
seed=27)
#Обучаем алгоритм
clf = xgb2
clf.fit(X_mk, y_mk)
#Строим дерево классификации
from sklearn.tree import export_graphviz
plt.figure(figsize=(20,15))
dot=xgb.to_graphviz(clf)
dot.save('multiclass_from_xgbclassifire.dot')
(graph,) = pydot.graph_from_dot_file('multiclass_from_xgbclassifire.dot')
graph.write_png('multiclass_from_xgbclassifire.png')
#Определяем данные для обучения
test_mk=X_mk
prog_mk=clf.predict(test_mk)
prog_mk=pd.DataFrame({'Kol-per':prog_mk.tolist()})
#Объединяем 2 DataFrame в один
prog_mk=pd.concat([prog_mk,prof_test.drop(columns=['Kol-per'])],axis=1,ignore_index=False)
print(prog_mk)
#Разбиваем на классы
result=prog_mk.loc[prog_mk['Kol-per'] == 0]
print(u'Выводим итоговую таблицу клиентов с хорошей дисциплиной \n')
print(result)
#Оценим прогнозирующую способность альгоритма
predictions = [round(value) for value in y_mk]
#accuracy = accuracy_score(test_mk, predictions)
accuracy = clf.score(test_mk, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
#Сохраняем хороших клиентов в файл csv, индексы убираем
result.to_csv('class_0.csv', sep=',',index=False)
154
OproBc*si rocyAapcrBefi Hbrt
Ar{Tr!n.nArhAT
yHr6epcrre
T30Plitg coscrsEHHb M vMoM
Me8l| 14.c. TypreHe6a
CNPABKA
o pe3ynbraTax nPoBepKll TeKcToBoro AoKyMeHTa
Ha Harluqre 3allMcTBoBaH nr
npoBepxa BbrnorHeHa a chcleMe
AHrrnrarl,|ar.BY3
fprquH ANAPei Ax6rcrberrq
Ar3rRo.MaEMaruveciri Oaxyrbrer
BhrnycxHar xsarrotikaqqoBHat pa6ora
Pa3pa6oBa crcreM! cxoprsrosot oqeH3, 3aeMq!xa
npoqeHr3a!McrsosaHrn
26,44%
npoqeHl qqrrposaH!,
op5%
npoqeHr opr16HarbHoctu
12,62%
16:02152 29 uFr.2018r,
Moeyrh nor€sa nepeOpasvposaHf i vHtepheri CsoAHat iorreKqti 36Ci Xo,rc8qut
PfE; kor6qo sy3os; MoAyrbno.cka "Of6Ov BO Ory rM. l4.C lyPreiesa ; MoAyr6 noucxa
06qeVnorpe6xierb6brx sbrpaxeiuii MoAyrbnoh.sa nep€Opa3Npo343!i eLlBMRY.Ru,
MoAyrb norc|a l,lHtepHer; (orrexqrt eLIBRARY.RUj Ll!l!po8aHxe
Cenrc
H
BraA4M!
,t s. 06.
p
AMrtpueBrc
,M<
Jt U
noaiN.b iF0r!ptElrerc
Orser Ha 6onpo.,
BnoA.riioc
cnpasku/
icnorhsyir€ qR.koA, {oroprrt
.oAepxrr..b,rky
Ha
orcer.
r6rcerci
&
o6HapvxeHHoe sarMcrBosaH,€
r
Ha
v.MorpeHre npoBeptE!{ero
npeaodaMeHHaruHSopMaq,tHeooA,exvtn.norroeaBhP
1/--страниц
Пожаловаться на содержимое документа