Винный Инвестинг

Прогнозирование фондового рынка с помощью машинного обучения. Драйверы.

Прогнозирование дохода в следующем году с помощью случайного леса.

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

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

Давайте начнем!

Обзор прогресса

В предыдущей статье я обсуждал модель Случайный лес, которую я построил для прогнозирования дохода в следующем году в качестве ориентира для этого исследования. Цель заключалась в том, чтобы получить базовую производительность модели и понять, насколько хорошо она может работать, не прилагая особых усилий. Его базовые характеристики были вполне удовлетворительными, достигнув ROC AUC 0,85. Приятно видеть хорошую производительность, но гораздо важнее понимать, как модель принимает решения, и подтверждать, что движущие силы модели интуитивно понятны.

Важность случайных лесов

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

Важность функции для 25 основных функций в моей модели представлена ​​ниже.

Особенности моделирования показаны на оси Y. Ось X показывает значение важности функции. Набор данных моделирования содержал ~ 100 функций, охватывающих все аспекты баланса, отчета о прибылях и убытках и отчета о движении денежных средств.

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

Упрощение модели

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

На приведенном ниже рисунке показано изменение показателя ROC AUC на каждой итерации, которое удаляет 5% функций, начиная с наименее важных.

Ось X показывает количество итераций, правая ось Y показывает количество функций, оставшихся в наборе данных, а левая ось Y показывает ROC AUC оценка модели, обученной оставшимся функциям.

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

Ниже приведены значения новых функций оставшихся 13 функций.

Мы видим, что большинство функций на этом графике также присутствовали среди основных функций в модели с полным набором функций. Некоторые изменения включают отсутствие is_net_income в модели select-features и добавление price к select-features. модель . Эти изменения произошли из-за того, что важность функций пересчитывалась на каждой итерации. Это не гарантирует согласования с важностью функций модели, состоящей из всех функций, из-за жадности древовидных алгоритмов.

Есть ли смысл в функциях?

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

В то же время есть функции, которые не следует использовать для прогнозирования дохода в следующем году. Это функции price_n-1 и price_to_earnings_n-1. Несмотря на то, что цена и коэффициент PE могут быть коррелированы с увеличением чистой прибыли, важно помнить:

Корреляция не равняется причинно-следственной связи

При построении моделей машинного обучения причинно-следственная связь - это то, что стоит за надежными прогнозами. Корреляции без причинности нет. Доход не зависит от цены акций, тогда как цена акций может зависеть от дохода (или его отсутствия). Изменение чистой прибыли - это то, что, вероятно, вызывает высокие значения PE, но не наоборот.

При этом стоит отметить, что коэффициент PE доступен на момент прогноза. Почему бы не использовать это?

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

Наконец, я также собираюсь удалить earnings_per_share_n-1, поскольку он сильно коррелирует с earnings_per_share_diluted_n-1, а также удалю return_on_assets_n- 1, поскольку он сильно коррелирует с более конкретным return_on_tangible_assets_n-1.

Это оставляет нам модель, основанную на 9 функциях, а именно:

  • Вернуться на капитал
  • Прибыль на разводненную акцию
  • Рентабельность материальных активов
  • Дивиденды к прибыли
  • Рост EPS
  • Наличные
  • Маржа операционной прибыли
  • Свободный денежный поток к прибыли
  • Неоперационные расходы

Эффективность новой упрощенной модели

Удалив 90% элементов из исходной модели, давайте оценим изменение кривой подъемной силы.

Пунктирная красная линия показывает кривую подъемной силы для модели, содержащей все 100 функций. Сплошная красная линия показывает кривую подъемной силы для 9-компонентной модели. Незначительное снижение производительности ближе к правому краю кривой не является значительным, в то время как количество функций сократилось на ~ 90%. Это выгодно, потому что понять взаимосвязь между 9 функциями намного проще, чем понять взаимосвязь между 100 функциями.

Заключение

В этой статье я исследовал движущие силы классификатора Случайный лес, прогнозирующего доход в следующем году для компаний S&P 500 в период с 2014 по 2019 год. Я также уменьшил количество элементов, используемых в модели, на ~ 90% с использованием метода drop-feature-selection.

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

Давайте подключимся!

Я счастлив общаться с людьми, которые разделяют мой путь - стремление к финансовой независимости. Если вы также стремитесь к финансовой независимости или хотите сотрудничать, высказывать идеи или обмениваться мыслями, не стесняйтесь обращаться к нам! Вот некоторые ресурсы, которыми я управляю:

  • Www.vhinny.com - платформа инвестиционных исследований, которая предоставляет финансовые данные для вашего собственного анализа.
  • Https://www.linkedin.com/company/vhinny - присоединяйтесь к нашему сообществу в LinkedIn, где я и другие участники делимся контентом, связанным с инвестициями.

Ваше здоровье!