Полный исходный код и анализ производительности алгоритмов обучения на реальном 30-килобайтном наборе данных

Введение

Даже при бесплатной доступности библиотек и инструментов для глубокого обучения демонстрация эффективности решений для глубокого обучения остается нетривиальной проблемой.

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

Как правило, используется ряд инструментов, методов и алгоритмов, чтобы определить подход, который приведет к наилучшей производительности. Популярные инструменты включают библиотеки, например TensorFlow, PyTorch, Theano и т. Д., А также инструменты визуализации, например TensorBoard, Matplotlib и т. Д.

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

Предпосылки

Чтобы понять этот пост, вам необходимо иметь некоторое представление об основных конструкциях, таких как

  1. Статистическое моделирование
  2. Нейронные сети
  3. TensorFlow и TensorBoard
  4. Инструменты построения графиков плотности (такие как Gaussian_KDE и т. Д.)

Если у вас нет опыта работы с TensorFlow, щелкните здесь, чтобы просмотреть руководство.

Набор данных

Набор данных, используемый в этом примере, представляет собой набор из 30 000 реальных образцов данных из 24 функций, связанных с пользователями и статусом их кредитных карт по умолчанию. 24 функции включают демографическую информацию (возраст, пол, семейное положение и т. Д.), Кредитный лимит, сведения о прошлых платежах и другую важную информацию. Полную информацию о наборе данных можно найти позже в этом посте.

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

Базовый анализ данных с использованием точечных диаграмм

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

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

Построение нейронной сети с помощью TensorFlow

Затем мы создаем нейронную сеть, которая способна прогнозировать риск дефолта, используя доступные данные. Мы построим эту нейронную сеть в TensorFlow с нуля.

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

Вот пример сверточной нейронной сети, которую мы создали для регрессии с 2 скрытыми слоями и полной конфигурацией из 24, 20, 10, 1 полностью связанных узлов.

Вы можете найти полный исходный код внизу.

Обучение нейронной сети

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

Обучение на каждом уровне можно визуализировать с помощью TensorBoard, как показано на следующих диаграммах.

Результаты (эффективность ~ = 80%)

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

Анализ обучения нейронной сети

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

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

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

Кроме того, похоже, существует некоторая корреляция между уровнем образования и риском дефолта, как показано на следующем рисунке.

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

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

Исходный код

Нейронная сеть построена на Python с использованием TensorFlow. Полный исходный код с примерами данных доступен на GitHub. Ниже приведена ссылка на репозиторий GitHub.