Оценка эффективности нейронных сетей для торговли и инвестирования на фондовых рынках

Данная статья будет супер полезна как собственникам бизнеса и руководителям (управление, контроль, целеполагание), так и тем кто занимается разработкой в сфере quantitive reserach, datascience и анализа данных. Особенно полезна она будет тем, кто не защищал степень кандидата наук и не занимался наукой в принципе. Данная статья будет полезна и применима не только к сфере финтеха, но и к многим другим сферам.

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

Введение

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

Как обычно, я буду рассказывать всё просто о сложном.

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

Оценка принципиальной работоспособности нейронных сетей

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

<i>Рис. 1. Оценка точности (loss и val_loss) нейронной сети</i>
Рис. 1. Оценка точности (loss и val_loss) нейронной сети

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

<i>Рис. 2. Результаты расчёта сигналов нейронной сетью: средний график (синий цвет) – ожидаемое поведение; верхний график – сигналы НС в виде числовых данных; нижний график – преобразованные числовые расчётные значения в управляющие сигналы</i>
Рис. 2. Результаты расчёта сигналов нейронной сетью: средний график (синий цвет) – ожидаемое поведение; верхний график – сигналы НС в виде числовых данных; нижний график – преобразованные числовые расчётные значения в управляющие сигналы

Как видно из рисунка 2, ваша нейронная сеть может не обучиться, или показывать какой-то информационный мусор (рис. 3).

<i>Рис. 3. Результаты обучения НС по методу множественной классификации с помощью логистической регрессии на AAPL</i>
Рис. 3. Результаты обучения НС по методу множественной классификации с помощью логистической регрессии на AAPL

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

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

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

Теперь что касается информационного мусора.

Давайте взглянем на два графика ниже.

<p><i>Рис. 4. Результаты обучения НС по методу множественной классификации с помощью логистической регрессии на AAPL</i></p>

Рис. 4. Результаты обучения НС по методу множественной классификации с помощью логистической регрессии на AAPL

<i>Рис. 5. Результаты обучения НС по методу классического обучения с учителем на AAPL</i>
Рис. 5. Результаты обучения НС по методу классического обучения с учителем на AAPL

ВАЖНО! Здесь же сразу сделаю замечание. Приведенные на рис. 4 и 5 графики это НЕ результаты расчёта боевых нейронных сетей, которые обучены на миллионе лет данных. Это результаты обучения ТОЛЬКО на одном инструменте AAPL с той целью, чтобы показать как важно выбирать метод обучения.

Как видно из графиков 4 и 5, на сколько сильно отличаются данные результатов обучения (смотреть на нижний, зеленый, график сигналов). Одни и те же данные, но разный результат в зависимости от подхода.

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

Переобучение нейронных сетей

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

<i>Рис. 6. Показатели точности нейронной сети БЕЗ переобучения</i>
Рис. 6. Показатели точности нейронной сети БЕЗ переобучения

Переобучение определяется по показателям точности тестовой и обучающей выборок. Нормально, когда результаты выглядят так, как показано на рисунке 6.

<p><i>Рис. 7. Переобучение нейронной сети</i></p>

Рис. 7. Переобучение нейронной сети

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

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

Здесь есть несколько супер важных моментов. Одна из основных причин переобучения – это большое количество нейронов вашей сети, и ваша сеть тупо ЗАПОМИНАЕТ значения обучающей выборки, но не получает ОБОБЩЕННУЮ МОДЕЛЬ.

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

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

<i>Рис. 8. Зависимость точности НС от числа нейронов/числа функций</i>
Рис. 8. Зависимость точности НС от числа нейронов/числа функций

То есть, чем больше у вашей нейронной сети ресурсов, тем выше точность, что для вас выгодно. Ведь это повышение эффективности, и прибыль, которую вы получите. Но больше ресурсов = выше вероятность переобучения НС + увеличение затрат на инфраструктуру.

Для защиты от переобучения вам нужно использовать регуляризацию и дропаут.

И в данном случае вам важно определить такие макропараметры, которые бы с одной стороны повышали точность НС при приемлемом уровне затрат, а с другой стороны ОТСУТСТВОВАЛО ПЕРЕОБУЧЕНИЕ НЕЙРОННОЙ СЕТИ.

Оценка адекватности результатов расчёта нейронных сетей

Оценку адекватности проводят путём анализа статистической значимости результатов расчёта в сравнении с исходными данными обучения нейронной сети, например по t-критерию теста Стьюдента или дисперсионному тесту ANOVA.

Как это делать с помощью питона, вы можете посмотреть здесь.

В данном случае, вам нужно определить принципиальную адекватность вашей модели, то есть соответствие ваших расчётных данных фактическим статистическим данным.

Показатели точности нейронных сетей

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

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

1. Loss – точность нейронной сети по показателям отклонения, например, среднеквадратического отклонения.

2. Accuracy – доля правильных ответов алгоритма.

3. Precision – «Точностью (precision) называется доля правильных ответов модели в пределах класса — это доля объектов действительно принадлежащих данному классу относительно всех объектов которые система отнесла к этому классу.» (с).

4. Recall – «Полнота — это доля истинно положительных классификаций. Полнота показывает, какую долю объектов, реально относящихся к положительному классу, мы предсказали верно.» (с).

5. ROC-AUC – метрика оценки качества процесса классификации.

6. Logistic loss – логистическая функция потерь.

Теперь давайте разберем каждый показатель подобнее.

Loss

Основной оценки точности при измерении ЛЮБЫХ показателей в любой области является отклонение.

Что это такое?? Отклонение это разница между реальным (ожидаемым значением) и расчётным (измеренным).

Давайте приведем наглядный пример.

<i>Рис. 9. Пример отклонений при расчёте сигналов нейронной сетью</i>
Рис. 9. Пример отклонений при расчёте сигналов нейронной сетью

Взгляните на рисунок 9. Снизу (синий график) – ожидаемое поведение нейронной сети. Верхнее значение (покупка) = +1, нижнее значение (продажа) = -1.

Сверху (оранжевый график) расчётное значение нейронной сети. Чёрными линиями показаны два уровня покупки и продажи. Как вы видите, график результатов расчёта нейронной сети не дотягивает до этих уровней.

И казалось бы, при расчёте и сигнале покупки у вас нейронная сеть должна показывать +1, но она этого не делает. И, например, показывает 0,7.

Эта разница 1-0,7 = 0,3 и есть ОТКЛОНЕНИЕ. То есть, разница между действительным и расчётным значением.

Для выборки вы можете посчитать среднеквадратическое отклонение (MSE), или что-то своё. В процессе исследований вы получаете 2 показателя точности. Один для обучающей выборки, другой для тестовой выборки.

ВАЖНО! При этом, вы должны понимать супер важную вещь.

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

Давайте рассмотрим пример, чтобы понять суть и причины того, что я говорю.

<i>Рис. 10. Смещение расчётных сигналов, относительно ожидаемых</i>
Рис. 10. Смещение расчётных сигналов, относительно ожидаемых

Посмотрите на рисунок 10. Снизу то, что мы ожидаем получить по разметке. Идеальный и труднодостижимый случай, который бы обеспечил наивысшую эффективность нейронной сети.

Но в реальности, как правило вы можете наблюдать смещение. То есть, сигнал может поступить к вам с запозданием.

С точки зрения оценки точности что вам это даёт. Вы ожидаете увидеть сигнал +1, но у вас в итоге 0. То есть, вы получаете максимально возможное отклонение. Как итог, оценка точности падает.

Но если вы посмотрите на доходность, то ДАЖЕ со смещением, ваша нейронная сеть может показать хорошую доходность, которая может удовлетворить все ваши не скромные запросы.

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

СУПЕР ВАЖНАЯ ВЕЩЬ!

Вы должны понять, что в конечном итоге мы определяем и классифицируем. Мы определяем (классифицируем) НЕ УПРАВЛЯЮЩИЕ СИГНАЛЫ ПОКУПКИ ИЛИ ПРОДАЖИ, мы определяем ТРЕНДЫ, НА ОСНОВАНИИ КОТОРЫХ МЫ ФОРМИРУЕМ УПРАВЛЯЮЩИЕ СИГНАЛЫ ПОКУПКИ ИЛИ ПРОДАЖИ!

Приведём пример.

<i>Рис. 11. Разметка тренда</i>
Рис. 11. Разметка тренда

Исходными данными для расчёта, к которым в итоге нам нужно приблизятся выглядят так, как показано на рис. 11 и 12.

<i>Рис. 12. Разметка трендов с учётом обозначения растущих и падающих трендов</i>
Рис. 12. Разметка трендов с учётом обозначения растущих и падающих трендов

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

Accuracy

В продолжение оценки Loss, есть проблема и с метрикой accuracy. В классическом понимании, accuracy это доля правильных ответов алгоритма с точки зрения классификации.

<i>Рис. 13. Пример ошибки классификации с точки зрения расчёта метрики accuracy</i>
Рис. 13. Пример ошибки классификации с точки зрения расчёта метрики accuracy

С точки зрения математики, приведенный выше пример это ошибка. То есть, мы ожидаем сигнал +1 к покупке, а расчёт показывает 0. То есть, на данном промежутке, точность будет стремить к нулю. Однако, с учётом допустимости смещения сигналов относительно идеальной разметки, полученный результат, опять может быть приемлем.

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

Приведем пример.

<p><i>Рис. 14. Результаты работы нейронных сетей для компании AJG, верно (зеленый прямоугольник) и неверно (красный прямоугольник) определенные ТРЕНДЫ: синий график – ожидаемое поведение, зеленый и красный график – расчётные сигналы</i></p>

Рис. 14. Результаты работы нейронных сетей для компании AJG, верно (зеленый прямоугольник) и неверно (красный прямоугольник) определенные ТРЕНДЫ: синий график – ожидаемое поведение, зеленый и красный график – расчётные сигналы

Взгляните на рис. 14. Даже если в результате расчёта вы получили смещение ли деформацию сигналов определения точек входа и выхода, пока тренд определён верно и имеет положительную доходность, то всё в порядке.

Взгляните на рис. 14 на зеленый квадратик снизу. Для нас не имеют значения дополнительные сигналы к покупке, ведь в конечном итоге нейронная сеть верно определила нужный нам тренд и мы на нём заработали.

С учётом вышесказанного, accuracyрассчитать вы можете по следующей формуле:

Оценка эффективности нейронных сетей для торговли и инвестирования на фондовых рынках

где TP – число верно определенных ТРЕНДОВ покупки, TN – число верно определенных ТРЕНДОВ продажи, FP – число неверно определенных ТРЕНДОВ покупки, FN – число неверно определенных ТРЕНДОВ продажи.

Precision

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

С учётом того, что я сказал выше для метрики accuracy, метрику precisionможно рассчитать следующим образом:

Оценка эффективности нейронных сетей для торговли и инвестирования на фондовых рынках

где TP – число верно определенных ТРЕНДОВ покупки, FP – число неверно определенных ТРЕНДОВ покупки (при условии, что вы торгуете в Long).

То есть. Например, у вас размечено в датасете 100 трендов роста при торговле в Long. Из них ваша нейронная сеть поймала 80. Precision = 0.8.

Recall

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

РассчитатьRecall можно так:

Оценка эффективности нейронных сетей для торговли и инвестирования на фондовых рынках

где TP – число верно определенных ТРЕНДОВ покупки, , FN – число неверно определенных ТРЕНДОВ продажи.

ROC-AUC

Очень хорошо, про ROC-AUC говорится в данной статье: https://pythonru.com/baza-znanij/sklearn-roc-auc

Приведу из неё некоторые цитаты:

«AUC или area under curve — это просто площадь под кривой ROC. Прежде чем мы перейдем к тому, что такое ROC-кривая, нужно вспомнить, что такое матрица ошибок.» (с)

<i>Рис. 15. Матрица ошибок</i>
Рис. 15. Матрица ошибок

«Как видно из рисунка выше, матрица ошибок — это комбинация вашего прогноза (1 или 0) и фактического значения (1 или 0). В зависимости от результата предсказания и того, корректна ли была проведена классификация, матрица разделена на 4 части. Например, true positive (истинно положительный) результат — это количество случаев, в которых вы правильно классифицируете семпл как положительный. А false positive (ложноположительный) — это число случаев, в которых вы ошибочно классифицируете семпл как положительный.

Матрица ошибок содержит только абсолютные числа. Однако, используя их, мы можем получить множество других метрик, основанных на процентных соотношениях. True Positive Rate (TPR) и False Positive Rate (FPR) — две из них.

True Positive Rate (TPR) показывает, какой процент среди всех positive верно предсказан моделью. TPR = TP / (TP + FN).

False Positive Rate (FPR): какой процент среди всех negative неверно предсказан моделью. FPR = FP / (FP + TN).

Хорошо, давайте теперь перейдем к кривой ROC!» (c)

<i>Рис. 16. Кривая ROC</i>
Рис. 16. Кривая ROC

«Как вы можете видеть на графике, кривая ROC — это просто отношение TPR к FPR.»

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

<i>Рис. 17. ROC, наложенная на матрицу ошибок</i>
Рис. 17. ROC, наложенная на матрицу ошибок
<i>Рис. 18. AUC – это площадь под кривой ROC</i>
Рис. 18. AUC – это площадь под кривой ROC

Чем больше площадь, тем лучше. Чем дальше ROC от пунктирной линии (которая показывает случайное распределение классифицируемых объектов, тем лучше).

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

Показатели ресурсоёмкости

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

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

1. Генерация датасета.

2. Работа нейронных сетей.

3. Интерпретация данных.

В каждом конкретном случае метрикой является время работы каждого сервиса.

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

Например, один сервер генерирует датасет для одного инструмента 1 час. То есть, для 10 000 инструментов, для одного обхода вам нужно 10 000 часов, или 417 дней. Как вы понимаете, это не приемлемо, если вы занимаетесь торговлей. Вам как минимум нужно обновлять данные раз в сутки, при отработки волатильности на дневном таймфрейме. То есть, только на генерацию датасетов при указанных условиях вам нужно более 400 параллельно работающих сервисов.

Как вы понимаете, это затратная часть, и она может быть значительна.

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

Ведь если вы сократите ресурсоёмкость на 10%, то считайте вы также заработали денег за счёт снижения издержек. Сэкономил, значит заработал. А затраты на инфраструктуру могут быть весьма высоки.

Показатели эффективности нейронных сетей

Теперь, давайте перейдем от технических показателей к бизнесовым. Описанные выше метрики, например Precision или Recall конечно в некоторой степени дают представление об эффективности, но на сколько нейронные сети потенциально эффективны в %?? Сколько вы можете ожидать доходности??

Я выделяю два вида доходности:

1. Доходность при торговле 1 акцией. То есть, когда на протяжении всего вашего бэк теста вы покупаете и продаёте одну акцию.

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

На мой субъективный взгляд, конечные бизнесовые показатели эффективности являются более предпочтительными. Тем не менее, следует отметить, то параметры точности (как с точки зрения классификации сигналов, так и с точки зрения классификации трендов) в значительной степени коррелируются и с параметрами доходности.

<i>Рис. 19. Пример расчёта доходности для каждого трейда при торговле 1 акцией: оранжевый и зеленый графики – ожидаемое поведение, синий и зеленый графики – результаты расчёта для сигналов нейронных сетей</i>
Рис. 19. Пример расчёта доходности для каждого трейда при торговле 1 акцией: оранжевый и зеленый графики – ожидаемое поведение, синий и зеленый графики – результаты расчёта для сигналов нейронных сетей

Оценка риска

Немаловажным параметром является оценка риска.

Риск можно оценивать по следующим критериям:

1. Коэффициент Шарпа / коэффициент Трейнора.

2. Максимальная просадка.

Не буду здесь останавливаться, в интернете много об этом написано.

Вы получили результаты, что с ними делать??

Теперь давайте перейдем к важному моменту касательно результатов вашей работы.

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

Ваша цель может выглядеть следующим образом:

- Повышение эффективности торгового алгоритма … по таким то показателям … путём …

- Повышение доходности торгового алгоритма на 10% …

- Повышение производительности расчёта …

- Достижение месячной доходности торгового алгоритма в 10% в месяц …

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

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

Осознавая свои бизнесовые цели вы ставите понятную задачу отделам по разработке торговых и инвестиционных алгоритмов.

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

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

Чек лист

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

1. Принципиальная работоспособность нейронной сети.

2. Переобучение нейронной сети.

3. Статистическая значимость результатов расчёта.

4. Показатели точности нейронных сетей:

- loss;

- accuracy;

- precision.

- recall;

- ROC-AUC;

- logistic loss.

5. Показатели доходности:

- доходность при торговле 1 акцией;

- накопленная доходность вашего портфеля при торговле на весь доступный депозит.

6. Показатели риска:

- коэффициент Шарпа / коэффициент Трейнора;

- максимальная просадка.

7. Показатели ресурсоёмкости и производительности.

Заключение

На этом статья завершена.

В заключении напишу, что если кому то интересна тематика применения нейронных сетей к фондовому рынку во всём многообразии и не только, можете почитать другие мои статьи на vc.ru: статья, статья, статья, статья, статья, статья, статья, статья, статья, статья.

Если у кого то будет желание пообщаться, можно писать мне здесь или по контактам, указанным ниже.

Контакты:

Мой стартап: finprophet.com

Всех благ, побед и

успехов на фондовых

рынках!

1212
11 комментариев

Как всегда, снимаю шляпу!

1
Ответить

Благодарю :)

Ответить

очень сложно
просто напишите сколько денег удалось поднять
стоит вообще в эту тему погружаться или нет

1
Ответить

Статья явно не для vc...

Ответить

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

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

Понимание, управление и контроль бизнеса весьма важно на всех уровнях. Сколько бы сложными не были эти процессы.

1
Ответить

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

1
Ответить

Комментарий недоступен

Ответить