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

Производительность любой модели напрямую зависит от степени ее модульности. Чем выше модульность, тем выше общая точность (давайте на секунду опустим переоснащение). Однако чем выше модульность, тем больше мы теряем понимание того, как данная переменная объясняет цель. Другими словами, производительность и интерпретируемость кажутся противоположными по самой своей природе. Но что, если это не всегда было правдой?

В этой статье я, во-первых, построю мощную модель глубокого обучения с нуля, а во-вторых, настрою ее таким образом, чтобы мы могли интерпретировать, можно ли сказать, что некоторые независимые переменные существенно (положительно или отрицательно) влияют на целевую переменную. В оставшейся части статьи эта модель будет обозначаться как «модель SDL» (для значительного глубокого обучения). Будут использоваться такие концепции, как прямая информация и ошибки обратного распространения (посредством градиентного спуска), и если вы еще не знакомы с этими концепциями, статьи, объясняющие нейронные сети и глубокое обучение, могут помочь вам понять статью.

Загрузка данных, используемых для обучения модели SDL

Модель будет обучена с некоторыми общедоступными данными. Выбрав задачу классификации, в качестве целевой переменной был выбран знак ежемесячной логарифмической доходности акций IBM (общедоступная информация). Пять факторов Fama & French будут использоваться в качестве независимых переменных. Этими переменными являются Rm-rf (разброс доходности рынка по сравнению с безрисковой ставкой), SMB (разница в производительности между крупнейшими и самыми маленькими компаниями), HML (разница в производительности между фирмами с наивысшими и теми же показателями. с наименьшими абсолютными запасами), RMW (разница в производительности между наиболее прибыльными и наименее прибыльными фирмами) и CMA (разница в производительности между фирмами, которые инвестируют консервативно, и теми, которые инвестируют агрессивно). Эти разные наборы данных можно найти на моем Github. Импортируйте первые пакеты Pandas и Numpy, а затем запустите следующий код, чтобы загрузить все данные в правильном формате.

Понимание широкой структуры модели SDL

Давайте теперь подробнее рассмотрим логическую структуру модели SDL. Хорошей отправной точкой является рассмотрение его либо как комбинации различных искусственных нейронных сетей, либо как единой искусственной нейронной сети с некоторыми весами, ограниченными нулем. Чтобы учесть возможную автокорреляцию, мы используем для каждой вышеупомянутой переменной значение регрессора в момент времени t, а также его четыре первых запаздывающих значения. Затем первая ИНС с одним скрытым слоем может быть применена к каждой группе из пяти входов, связанных с одной и той же переменной (представленной синим, оранжевым и желтым цветом на рисунке ниже). После оптимизации (см. Ниже) каждая система дает одномерный результат. Затем серию из пяти полученных выходных данных можно использовать в качестве входного слоя последней искусственной нейронной сети (представленной зеленым цветом) без скрытого слоя (то есть простой логистической регрессии) и чья y-метка равна единице или нулю в зависимости от знак возврата акций IBM.

Однако невозможно построить окончательную модель, просто комбинируя эти различные подмодели. Вначале информация, относящаяся к оптимальным значениям для пяти нейронов, являющихся соответствующими выходами первых пяти ИНС, неизвестна. Следовательно, невозможно настроить веса для максимального уменьшения функции стоимости, поскольку эта функция сама вычисляется с использованием разницы между фактическими и этими неизвестными оптимальными значениями на выходном уровне. Чтобы решить эту проблему, мы построим модель SDL как единую контролируемую модель с пятью умноженными на пять функциями (запаздывающими значениями пяти факторов Fama и French) и одним выходом (знак доходности акций IBM). Между тем, необходимо добавить некоторые ограничения к большинству весов, чтобы модель соответствовала логике, описанной выше. На рисунке ниже пунктирными линиями обозначены веса, ограниченные нулем.

Реализация модели SDL в Python

Шаг 1: инициализация

Теперь перейдем к реализации Python. Перед инициализацией класса NeuralNetwork, который представлен ниже, было выполнено несколько необходимых шагов (разделение на поезд-тест и некоторая предварительная обработка данных, чтобы убедиться, что формат данных правильный). Не стесняйтесь проверить этот код также на моем Github. Мы инициализируем новую модель с четырьмя различными функциями. X и y представляют входную обучающую матрицу и целевой обучающий вектор соответственно. Lamb1 - это параметр регуляризации, аналогичный тому, что делает Ridge в линейных регрессиях, а Learningr - это скорость обучения модели (насколько сильно она корректирует веса при обратном распространении ошибок). Все веса без ограничений затем инициализируются некоторыми случайными числами от -15 до 15. Этот широкий диапазон используется для внесения существенной изменчивости. И последнее, о чем стоит упомянуть, выходной вектор (инициализированный нулевыми значениями) нацелен на то, чтобы содержать результаты, полученные после прямой передачи входных данных по всей модели. Вектор ошибок будет построен как разница между этим вектором и y-вектором.

Шаг 2: прогнозирование

Следующий шаг рассуждения состоит в передаче входных данных по всем уровням. Для начала матрица входных данных (размер n * 25 - где n - длина набора данных) умножается на первую матрицу весов (размер 25 * 10). Значение нейрона каждого первого скрытого слоя в конечном итоге равно выходному сигналу сигмоидной функции с, в качестве переменной, связанным предельным результатом умножения матриц. Тот же метод используется для прохождения следующих слоев. Здесь все математически подытожено.

В Python метод прямой связи в нашем классе NeuralNetwork может быть реализован следующим образом.

Шаг 3. Обратное распространение ошибки

Как только выходной слой получен, можно вычислить функцию стоимости. Это используется для измерения того, насколько прогнозируемый результат сравнивается с фактическим целевым показателем. Следующий шаг рассуждения состоит в вычислении производной этой функции стоимости по различным весам (начиная с весов 3, затем весов 2 и, наконец, весов 1). Это нацелено на понимание того, какая часть функции стоимости связана с каким весом. Затем можно обновить веса таким образом, чтобы минимизировать функцию стоимости (только часть производной вычитается из текущего веса, в зависимости от выбранной скорости обучения). Ниже приведены первые математические шаги - вычисления основаны на принципе цепного правила, а символ «. *» Используется для обозначения поэлементного умножения матриц. Обратите внимание, что, как и в случае со вторым скрытым слоем, мы снова начинаем рассуждения с маргинальных элементов вектора ошибок.

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

Шаг 4: Оптимизация и выбор лучших значений для параметров лямбда и скорости обучения

Последний шаг рассуждения состоит из повторения шагов 2 и 3 (т.е.передача информации с постоянно меняющимися весами и ошибками обратного распространения). Этот процесс в конечном итоге останавливается, когда функция стоимости больше не уменьшается. Мы использовали упрощенную перекрестную проверку, чтобы выбрать лучшие значения лямбда и параметров скорости обучения (т. Е. Вычислить точность классификации по заданному набору тестов для всех пар протестированных скоростей лямбда-обучения, а затем сохранить пару, для которой модель работает лучше всего). Для финансовых данных, представленных ранее, наилучшая точность классификации на тестовом наборе (около 70% - некоторые идиосинкратические переменные IBM могут быть добавлены для увеличения этого числа) достигается с кортежем (лямбда, скорость обучения), равным (0,15, 0,3) .

Шаг 5: Значение переменных

Теперь продемонстрировано, что модель SDL работает хорошо. Ему удается - в большинстве случаев - правильно классифицировать знак доходности IBM на основе как настоящих, так и прошлых значений рыночных переменных. Половина работы сделана!

Следующая методология позволит интерпретировать, как выбранные переменные помогают объяснить вероятность того, что возврат IBM будет положительным. Возможно, вы заметили, что наша SDL, по сути, представляет собой комбинацию двух моделей. Первый - это комбинация пяти нейронных сетей с одним скрытым слоем. Способ оптимизации модели SDL гарантирует, что значение в конечном нейроне каждой из этих подмоделей является результатом наиболее оптимального преобразования пяти временных входов одной и той же экзогенной переменной (очевидно, что это может быть не так для каждой из этих подмоделей). одна строка данных, а она проверяется при рассмотрении всех данных). Эти оптимально преобразованные переменные затем используются в качестве входных данных во втором компоненте модели (последняя нейронная сеть без скрытого слоя - в основном логистическая регрессия). Определенное значение можно извлечь из этой второй модели. - Для каждой экзогенной переменной для этой цели будет использоваться среднее значение вектора, полученного путем умножения последнего значения нейрона соответствующей подмодели (вектора) на вес, примененный к этому последнему нейрону (скаляр). Это дает представление о среднем абсолютном числе, которое вводится в сигмоидальную функцию, чтобы в конечном итоге оценить вероятность положительной доходности акций IBM. Эта оценка должна быть точной и не только результатом удачной сходимости модели SDL. Таким образом, получается непараметрическое распределение для этой оценки. Это распределение построено на наборе значений, полученных 100-кратным запуском одного и того же кода. Если квантили 2,5% и 97,5% этого распределения либо положительны, либо отрицательны, можно сделать вывод, что экзогенная переменная значима (α = 5%), соответственно положительна или отрицательна!

Как показано ниже, переменная (Mkt-rf) (на любом уровне достоверности, поскольку все распределение больше нуля) положительно коррелирует со знаком доходности IBM. Другими словами, чем больше рыночный спред, тем больше вероятность того, что возврат IBM будет положительным, что кажется логичным. Точно так же переменная CMA, похоже, отрицательно влияет на вероятность того, что возврат IBM будет положительным. Другими словами, чем больше разница в производительности между компаниями, которые инвестируют консервативно, и теми, которые инвестируют агрессивно, тем ниже (при прочих равных условиях) вероятность положительной прибыли IBM. Из-за длинного правого хвоста эта взаимосвязь значима, но только при любом уровне достоверности 1-α -с альфа> 1%.

Код для этого раздела доступен здесь ниже.

Заключение и известные ограничения модели

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

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

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