Прогнозирование того, испытывает ли данная компания финансовые затруднения или нет, на основе временных данных для разных компаний.

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

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

Реализация идеи на cAInvas — здесь!

Набор данных

On Kaggle от Ebrahimi

Набор данных представляет собой файл CSV с прогнозом финансового кризиса для ряда компаний.

Наряду с компаниями и периодами времени существует 83 фактора, обозначенных от x1 до x83, которые определяют финансовые и нефинансовые характеристики компаний. Из них x80 является категориальной функцией.

Столбец «Финансовый кризис» — это непрерывная переменная, которую можно преобразовать в столбец с двумя значениями: «здоровый» (0), если значение > -0,5, иначе «бедственный» (1).

Давайте разберемся с набором данных, с которым мы работаем. Каждая компания имеет 1 или более строк, соответствующих различным периодам времени. Смотря сколько —

В наборе данных 422 компании. Некоторые из них имеют менее 5 периодов времени тоже!

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

Одно горячее кодирование входных переменных

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

Параметр drop_first имеет значение True. Это означает, что если в столбце n категорий, вместо n возвращается n-1 столбцов. т. е. каждое значение возвращается в виде массива значений n-1. Первая категория определяется массивом со всеми нулями, в то время как остальные переменные категории n-1 представляют собой массивы с 1 в (i-1)-м индексе массива.

Создание фрейма данных на основе времени

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

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

Одно горячее кодирование целевых переменных

Мы подходим к этому как к проблеме классификации, поэтому категориальный целевой признак преобразуется в двоичный признак с использованием условия, определенного ранее — здоровый (0), если значение > -0,5, иначе проблемный (1).

Это не сбалансированный набор данных.

Балансировка набора данных

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

Это несбалансированный набор данных. Чтобы сбалансировать набор данных, есть два варианта:

  • апсемплинг — передискретизируйте значения, чтобы увеличить их количество в наборе данных.
  • понижающая выборка — выбрать n выборок из каждой метки класса, где n = количество выборок в классе с наименьшим количеством (здесь 83), т. е. уменьшить количество определенных значений класса в наборе данных.

Здесь мы будем увеличивать частоту дискретизации.

Определение входных и выходных столбцов для последующего использования —

Имеется 448 входных столбцов и 1 выходной столбец.

Разделение поезд-валидация-тест

Использование соотношения 80–10–10 для разделения фрейма данных на наборы для проверки и проверки поезда. Для этого используется функция train_test_split модуля sklearn.model_selection. Затем они делятся на X и y (вход и выход) для дальнейшей обработки.

Масштабирование значений

Диапазон значений атрибутов в наборе данных не везде одинаков. Это может привести к тому, что некоторые атрибуты будут иметь более высокий вес, чем другие. Диапазон значений всех атрибутов масштабируется до [0, 1].

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

Модель

Это простая модель с 4 плотными слоями, 3 из которых имеют функции активации ReLU, а последний имеет функцию активации Sigmoid, которая выводит значение в диапазоне [0, 1].

Поскольку это проблема бинарной классификации, модель компилируется с использованием бинарной функции кросс-энтропийных потерь. Используется оптимизатор Adam, и точность модели отслеживается на протяжении эпох.

Функция обратного вызова EarlyStopping модуля keras.callbacks отслеживает потерю проверки и останавливает обучение, если она не уменьшается в течение 5 эпох непрерывно. Параметр restore_best_weights гарантирует, что модель с наименьшими потерями проверки будет восстановлена ​​в переменной модели.

Модель обучалась со скоростью обучения 0,01, а затем со скоростью обучения 0,001.

На тестовом наборе модель достигла точности ~93%.

Составление матрицы путаницы для лучшего понимания результатов —

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

Метрики

Прогноз

Давайте выполним прогнозы на случайных выборках тестовых данных —

глубокий C

Библиотека, компилятор и инфраструктура вывода deepC предназначены для включения и выполнения нейронных сетей глубокого обучения с упором на функции устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, Arduino, SparkFun Edge, RISC-V, мобильные телефоны, x86 и портативные компьютеры.

Компиляция модели с помощью deepC —

Зайдите на платформу cAInvas (ссылка на блокнот дана ранее) и проверьте прогнозы по файлу .exe!

Источники: Аиша Д