Вступление

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

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

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

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



Получение и обработка данных

Данные получены из Yahoo Finance (с библиотеками Python yfinance и yahoofinancials для цен и отчетов соответственно).

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

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

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

Отчеты и цены с 2017 года извлекаются для всех тикеров, котирующихся на Нью-Йоркской фондовой бирже и NASDAQ (около 6000 акций). В результате получается набор данных из примерно 18 000 записей.

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

Затем создаются новые переменные, чтобы добавить в модель информацию о цене и создать целевую переменную.

  • Доходность за предыдущий и следующий год на основе даты публикации отчета. Для самых последних наблюдений, для которых у нас нет доступа к ценам через год в будущем, мы используем самые последние значения и выводим из них годовую доходность.
  • Два логических значения: одно указывает, является ли доходность положительным, а другое указывает, превышает ли доходность рыночную. Индекс NASDAQ (^ IXIC) выбран в качестве ориентира.

Соответствующие переменные для прогноза выбираются на основе двух критериев. Первый критерий - доступность значения в наблюдениях (не менее 80% ненулевых значений). Затем, поскольку значения финансовых отчетов могут быть вычислены на основе других значений в тех же отчетах, мы должны выбрать переменные на основе корреляций и отбросить те, которые зависят от других.

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

Моделирование

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

Для этой задачи использовалась модель Google’s TabNet, очень многообещающий подход глубокого обучения для моделирования табличных данных. Как работает эта модель, не будет обсуждаться в этой статье, но заинтересованные читатели смогут найти очень хороший материал в этой статье и реализации pytorch dreamquark-ai, которые использовались в данном случае.

Наблюдения до 01.01.2019 использовались для обучающей выборки, а наблюдения после 01.06.2020 - для тестовой. Все остальные наблюдения составляли набор для проверки, который используется для контроля и остановки фазы обучения.

Как и ожидалось (но все еще разочаровывает), независимо от используемых гиперпараметров, модель, похоже, не работала хорошо, предсказывая отрицательное значение в 100% случаев (с порогом 0,5). Оказалось, что нельзя использовать наивный прогнозный подход.

Глядя на кривую ROC (рис. 1), которая представляет эволюцию частоты истинно-положительных результатов по сравнению с частотой ложноположительных результатов по мере увеличения порога прогноза, можно сделать два вывода.

  1. Площадь под кривой (AUC: 1 для идеальной модели и 0,5 для случайной) составляет 0,56 и стабильна над случайной линией, что может указывать на то, что модель может дать подсказки о будущей эволюции цен акций.
  2. AUC примерно одинакова для наборов для обучения, проверки и тестирования. Это означает, что предсказательная сила модели может быть перенесена на апостериорное наблюдение без каких-либо потерь (чего это стоит, так как она в любом случае мало что предсказывала ^^).

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

Бэктестинг и анализ стратегии

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

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

Набор тикеров NASDAQ и NYSE (6000 акций) будет вселенной инвестиций. Стратегия будет применяться с 01.01.2018, чтобы иметь некоторую историю с финансовой отчетностью.

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

Затем мы реализуем три стратегии распределения на основе вероятностей.

  • 100 (или 1000) акций с наибольшей вероятностью превзойти рынок покупаются в той же пропорции до следующего прогона модели.
  • Деньги инвестируются во все акции во вселенной с весами, заданными функцией softmax, примененной к вероятностям.

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

Совокупная доходность этих стратегий (вместе с индексами NASDAQ и S&P 500 для справки) представлена ​​на Рисунке 3 вместе с их основными финансовыми коэффициентами в Таблице 1.

Все стратегии, кажется, довольно хорошо сравниваются с NASDAQ, хотя мы можем наблюдать (за исключением стратегии softmax) гораздо более высокую волатильность, особенно для стратегии Топ-100, чем может сильно повлиять несколько акций за короткий период. Эта стратегия, похоже, усиливает рыночные тенденции.

Также интересно отметить, что стратегия Top 100 имеет лучшую производительность, чем стратегия 1000. На Рисунке 4 показана окончательная совокупная доходность для всех стратегий, по которым от первой первой до 2000 акций, и устойчивое снижение наблюдается после 300 акций. Это подтверждает важную волатильность, которую можно наблюдать при меньшем количестве акций в портфеле.

Давайте, наконец, посмотрим, как эта стратегия работает с акциями. На рисунке 5 сравнивается совокупная доходность с использованием модели или без нее для двух акций в рамках стратегии 100 лучших с 2020 года. Использование такой стратегии является обоюдоострым инструментом: она может выступать в качестве подстраховки при падении цен, но также может препятствовать получению прибыли. от значительного подъема.

Заключение

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

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

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