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

Репозиторий Github: https://github.com/Saurabhraj5162/INM701_CW.git

Содержание:

Проблема Объяснение

Понимание данных

Исследовательский анализ данных

Методы

Предварительная обработка данных

Обучение модели

Резюме и заключение

Рекомендации

Объяснение проблемы

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

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

Понимание данных

Данные взяты из журнала Taiwan Economic Journal за период с 1999 по 2009 год. Банкротство компании было определено на основании правил ведения бизнеса Тайваньской фондовой биржи. Набор данных состоит из нескольких функций финансового коэффициента, таких как:

  • Рентабельность активов (ROA)
  • Валовая прибыль
  • Операционная и чистая прибыль и расходы
  • Денежные потоки
  • Налоги
  • Скорость роста
  • Долг
  • Оборот, выручка, ответственность и т.д.

Данные, представленные в этом наборе данных, соответствуют двум основным условиям:

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

Компании в наборе данных в основном состоят из производственных компаний, включая промышленные и электронные компании (346 компаний), сферы услуг (39 компаний) и другие (93 компании). Этот набор данных сильно несбалансирован, как и ожидалось. Это делает эту проблему очень сложной для хорошего обобщения для окончательных прогнозов.

В наборе данных всего 6819 образцов и 96 признаков (включая метку класса). Из 6819 6599 относятся к отрицательномуклассу и только 220 относятся к положительномуклассу.

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

Целевой столбец: «Банкрот?» который имеет два значения «0» и «1» для «Не банкрот» и «Да банкрот» соответственно.

Источник:https://archive.ics.uci.edu/ml/datasets/Taiwanese+Bankruptcy+Prediction

Используемые показатели:

Точность не является хорошим выбором метрик здесь, поскольку эти данные несбалансированы. Поэтому для оценки я буду использовать Precision, F1 Score и AUC. В этой задаче важно предсказать положительный класс с очень высокой точностью, даже если мы не можем предсказать отрицательный класс. Например, всего 100 компаний, из которых 90 находятся в безопасности, а 10 собираются обанкротиться. Мы должны сосредоточиться на поиске этих 10.

Исследовательский анализ данных

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

Здесь мы видим, что только 3,2%от общего числа данных соответствует классу "Банкрот" (1).
Я провел анализ тепловой карты столбцов, чтобы проверить их коллинеарность. После тепловой карты я заметил:

  • Все три ключевых показателя рентабельности активов (ROA(a), ROA(b) и ROA(c) положительно коррелируют друг с другом.
  • Чистая стоимость акции A, B и C также сильно коррелирует между собой.
  • «Коэффициент долга %», «Собственный капитал/Активы» имеют отрицательную корреляцию.
  • Чистая процентная ставка после налогообложения и чистая процентная ставка до налогообложения также сильно коррелированы.
  • «Непромышленные доходы и расходы/доходы» отрицательно коррелируют с нормой операционной прибыли.
  • «Темпы роста операционной прибыли», «Темпы роста чистой прибыли после налогообложения» и «Темпы роста обычной чистой прибыли» также сильно коррелированы.
  • «Чистая прибыль на акцию до налогообложения (в юанях)» и «Постоянная прибыль на акцию за последние четыре сезона» тесно связаны между собой.

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

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

Наблюдения за ROA и CASH FLOW RATE:

  • По-видимому, существует разделение около ROA (c) = 0,6 (рис. 3).
  • Есть несколько выбросов, но, поскольку они сильно несбалансированы, я не могу позволить себе удалять данные.
  • Поскольку все три ROA сильно коррелированы, поведение двух других будет аналогичным.
  • Как и в случае с ROA, данные о денежных потоках также имеют выбросы (рис. 4). К этим столбцам можно применить тот же набор функций проектирования.

Затем провели еще несколько одномерных анализов.

  • Эти графики показывают очень тонкое линейное разделение между банкротом и небанкротом. Кажется, что более низкие значения «чистой прибыли к совокупным активам» имеют больше шансов привести к банкротству.
  • Поскольку у нас очень мало данных для положительного класса, мы не можем с уверенностью утверждать что-либо. Этот анализ данных помог мне сформулировать мои планы на будущее для решения проблемы.

МЕТОДЫ

  1. Выполните уменьшение размерности с помощью PCA: поскольку это данные очень большой размерности, мы должны применить метод уменьшения размерности, чтобы использовать только важные функции.
  2. Повышение выборки данных. Так как это сильно несбалансированный набор данных, я попытаюсь увеличить выборку набора данных с помощью SMOTE.
  3. Понижающая выборка данных: отбросьте экземпляры большинства классов и сделайте их сбалансированными.
  4. Я также выполню повторную выборку данных со всеми классами меньшинства и некоторыми классами большинства для обучения моделей ансамбля.
  5. Я буду обучать модель, используя все три набора наборов данных — данные с повышенной выборкой, уменьшенные данные и данные с повторной выборкой, чтобы сравнить показатели.
  6. Разделите набор данных на поезд и тест.

7. Выполните тысячную перекрестную проверку для разных моделей.

Подводя итог, я подготовил данные в трех наборах:

  1. Набор 1 — избыточная выборка (SMOTE) + PCA
  2. Набор 2 – неполная выборка (снижение количества данных большинства классов)
  3. Набор 3 – пакетирование различных данных передискретизации.

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

Для набора 2 я использовал: дерево решений, классификатор опорных векторов, классификатор KNN, случайный лес, 5-уровневый MLP (с Dropout), 5-уровневый MLP (с L2 Reg), 5-уровневый MLP (без рег) и CNN.

Для набора 3 я использовал метод повторной выборки, при котором я создал несколько меньших наборов данных из основного набора данных. Идея состоит в том, чтобы использовать все образцы редких классов с таким же количеством образцов распространенных классов. Например, если у нас всего 100 выборок, из которых 10 относятся к классу «+» и 90 — к классу «-», то я бы создал 9 наборов данных размером 20 (df1, df2, … df9), где каждый df_i имеет все 10 ' образцы класса «+» и 10 образцов класса «-». Затем обучите одну модель для каждого df_i (ансамбля).

ПРЕДВАРИТЕЛЬНАЯ ОБРАБОТКА ДАННЫХ

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

1. Набор 1 (SMOTE + PCA):

Я использовал PCA, чтобы проверить лучшие функции.

Из этой кривой можно ясно понять, что только на 11 компонентов (признаков) приходится 99 % дисперсии данных. Другими словами, мы также можем сказать, что 99% информации, представленной в данных, можно получить, используя только эти 11 основных функций вместо 95 функций.

  • Лучшее значение n_component для 99% дисперсии = 11
  • Лучшее значение n_component для 95% дисперсии = 8
  • Лучшее значение n_component для 90% дисперсии = 7

Наблюдения SMOTE:

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

Примечание. SMOTE не выполняется на тестовых данных. Размер обучающей выборки после удара можно увидеть в таблице 1.

ОБУЧЕНИЕ МОДЕЛЯМ

Для набора 1 – ИЗБЫТОЧНАЯ ВЫБОРКА:

В первом наборе я обучил пять разных моделей машинного обучения. Некоторые из них продемонстрировали приемлемую производительность. Для каждой модели я настраивал параметры, экспериментируя с различными комбинациями параметров. Например, в KNN комбинация весов и n_neighbours, в Random forest я проверил комбинации критерия и оценок. Затем я обучил модель оптимальному сочетанию параметров. Я также обучил одну нейронную сеть (5-слойный MLP без регуляризации). На рисунках ниже мы можем получить обзор матриц путаницы, связанных с каждой обученной и протестированной моделью.

Наблюдения:

  • Как мы видим, Random Forest показал себя лучше всех.
  • MLP также показал средние результаты. Но MLP обучался только на SMOTE, без PCA.
  • Убытки MLP сокращались, как и ожидалось. Использовалась ранняя остановка и обратный вызов метрики.

Для набора 2 — НЕДОСТАТОЧНАЯ ВЫБОРКА:

Поскольку было всего 220 образцов положительного класса и 6599 образцов отрицательного класса, я занижал выборочные данные и отбрасывал большинство данных из класса большинства, чтобы сбалансировать свой набор данных. После выборки размер данных сократился до 440 выборок (по 220 на каждый класс). Затем, разделив обучающий и тестовый наборы, я обучил четыре модели машинного обучения и четыре нейронные сети.

Модели машинного обучения — деревья решений, SVC, KNN, случайный лес

Нейронные сети — многоуровневый MLP1–5 с Dropout, многоуровневый MLP2–5 с L2 Reg, CNN. В этих моделях я использовал два обратных вызова — Ранняя остановка и Обратный вызов показателей (для расчета желаемых показателей показателей).

Наблюдения:

  • Как мы видим, деревья решений и случайный выбор очень хорошо работают с наборами данных.
  • Случайный лес достиг ROC AUC 0,97.
  • Поэтому я исследовал случайный лес немного глубже, выполнил 5-кратную перекрестную проверку и сохранил веса.
  • Во время обучения MLP, когда я увеличил количество скрытых нейронов, модель имеет тенденцию к переобучению.
  • Когда я увеличил процент отсева, оценка проверки начала сильно отличаться от оценки обучения.
  • Использование ранней остановки помогло. Потери сокращались, как и ожидалось.
  • В CNN, поскольку размер фильтра conv1d уменьшается, производительность выше по сравнению с большими размерами.
  • Уменьшение размера ядра с 3 до 2 сделало его лучше.
  • Добавление дополнительного слоя conv1d не сильно помогло.
  • Увеличение количества нейронов в плотных слоях вызвало переоснащение.
  • Добавление регуляризации L2 немного помогло.
  • В целом не так много улучшений с CNN.

Для набора 3 — ПОВТОРНАЯ ВЫБОРКА с деревьями решений ансамбля:

Как упоминалось в разделе «Методы», я реализовал свои функции на пакетированных наборах данных с повторной выборкой.

Наблюдения:

Как мы видим на рисунке 9, показатель AUC действительно хорош. В тестовом кейсе было всего 55 дел о банкротстве, 48 из которых были правильно классифицированы. Это хорошая производительность. Но точность плохая в основном из-за примеров с отрицательным классом. Но в такой постановке задачи AUC имеет большее значение.

РЕЗЮМЕ И ЗАКЛЮЧЕНИЕ:

Все эксперименты можно свести в таблицу выше. В целом, я заметил, что модели, основанные на утверждениях if-else (деревья решений, случайный лес и деревья решений в сборе), которые были обучены на выборочных данных, работали очень хорошо. Но модели, обученные с помощью PCA + SMOTE, не выдержали оценки. Учитывая высокий дисбаланс набора данных, я считаю, что «Ensembled DT with Resampled» также показал себя очень хорошо. Если компания не собирается обанкротиться, но прогнозируется как банкрот (ложноположительный результат), то у компании нет вреда как такового, поскольку они могут еще больше улучшить свой бизнес. Но если компания, имеющая тенденцию к банкротству, классифицируется как безопасная, то это рискованная ситуация, поскольку компания не предпримет необходимых шагов. Поэтому было очень важно увеличить число истинно положительных результатов, даже если число ложноположительных результатов велико. Это можно увидеть в матрицах путаницы.

В качестве будущей работы можно попытаться собрать некоторые текстовые данные, связанные с ключевыми показателями эффективности компаний, и применить некоторые методы НЛП, чтобы найти смысл. Таким образом, мы можем немного улучшить модель, так как у нас будет больше возможностей для экспериментов. Кроме того, можно попробовать некоторые лучшие методы избыточной выборки, отличные от SMOTE, чтобы увидеть, можем ли мы увеличить данные значения. Модели ML, такие как XGBoost, также можно попробовать для повышения производительности. Я также хотел бы изучить различные слои в нейронной сети, чтобы проверить, подходит ли какая-либо комбинация для этого случая. Эксперименты с нейронной сетью не должны ограничиваться. Можно придумать несколько способов создания модели MLP.

Репозиторий Github: https://github.com/Saurabhraj5162/INM701_CW.git

ССЫЛКИ:

[1] Чавла, Н.В., Бойер, К.В., Холл, Л.О. и Kegelmeyer, W.P., 2002. SMOTE: синтетический метод избыточной выборки меньшинства. Журнал исследований искусственного интеллекта, 16, стр. 321–357.

[2] В классификации, как вы справляетесь с несбалансированным тренировочным набором? (без даты). Доступно по адресу: https://www.quora.com/In-classification-how-do-you-handle-an-unbalanced-training- set/answers/1144228?srid=h3G6o.

[3] Saurabh Raj (Raj, 2020).

[4] (Brownlee, 2020).

[5] (Kaggle, nd), доступно по адресу https://www.kaggle.com/datasets/fedesoriano/company-

[6] Лян Д., Лу С.С., Цай С.Ф. и Ших, Г.А., 2016 г. Финансовые коэффициенты и показатели корпоративного управления при прогнозировании банкротства: комплексное исследование. European Journal of Operational Research, 252(2), стр. 561–572.

[7] (Курс, без даты), доступно по адресу https://www.appliedaicourse.com
[8] (Tensorflow, без даты), доступно по адресу

https://www.tensorflow.org/api_docs/python/tf/keras/callbacks/Callback
[9] (Википедия, без даты), доступно на https://en.wikipedia.org/wiki /Bankruptcy_prediction

[10] Ши, Ю. и Ли, X., 2019. Обзор моделей прогнозирования банкротства для корпоративных фирм: систематический обзор литературы. Нематериальный капитал, 15(2), стр. 114–127.

[11] Джейкоб Хоу, Дэниел и Атиф Риаз, Intro to AI: City University of London, 2022 г.