Резюме конкурса
Соревнование, в котором мы участвовали, называлось JPX Fundamentals Analysis Challenge на платформе Signate. Если вы не знакомы, Signate — это очень популярная платформа для соревнований по науке о данных в Японии, которая может быть полезна для всех, кто хочет развить свои навыки в области науки о данных на испытанном поле битвы с реальными данными в реальном времени. Целью этого конкурса был указан конкретный базарный день, чтобы оценить максимальную и минимальную цену акции за 20 рабочих дней. Наборы данных включали данные финансовой отчетности и данные о ценах на акции каждой компании, зарегистрированной на Токийской фондовой бирже (TSE). В этой статье мы обсудим наш подход к этому соревнованию, а также несколько ключевых советов для всех, кто хочет улучшить свою скорость и время разработки решений в соревнованиях. Ссылку на наше решение можно найти здесь.
Более подробную информацию о конкурсе вы можете найти по двум ссылкам ниже. (На японском)
Обзор конкурса на английском языке также можно найти ниже, что нас больше заинтересовало в работе с биржевыми данными.
https://www.jpx.co.jp/english/corporate/news/news-releases/0010/20210319-01.html
Важность пайплайнов для быстрых экспериментов и итераций
Вы можете думать о конвейере как о подходе к автоматизации типичного рабочего процесса машинного обучения. Каков типичный рабочий процесс машинного обучения? Вы можете быть знакомы с некоторыми типичными этапами процесса машинного обучения, такими как очистка/подготовка данных, разработка функций, обучение модели, развертывание модели и обслуживание модели. Дайал Чанд Айчара и я всегда систематизируем нашу работу в виде конвейеров, так как наличие такой структуры всегда позволяет нам сотрудничать вместе и выполнять итерации быстрее. Ниже вы можете увидеть пример конвейера, который мы использовали в этом соревновании, который представляет собой типичный сценарий оболочки. Каждая строка Python — это шаг в конвейере или скрипте, который мы выполняем и который использует configuration_ID, чтобы определить, какие параметры использовать. Вы должны думать о конвейере данных как о реальном конвейере, в котором входные/выходные данные передаются из одной части конвейера в другую.
# Competition Pipeline config_id=$1 echo $config_id
python ./competition_code/make_dataset.py --config_id ${config_id} python ./competition_code/create_features.py --config_id ${config_id} python ./competition_code/train_model.py --config_id ${config_id} python ./competition_code/model_serving.py --config_id ${config_id}
Вам может быть интересно, что это за config_id в приведенном выше сценарии оболочки. Мы также часто создаем файл config.yml для хранения параметров наших конвейеров, чтобы мы могли включать и выключать функции конвейера, которые мы хотели бы использовать, например, перекрестную проверку. Приведенная ниже конфигурация использовалась в нашем окончательном результате для конкурса, и, как вы можете видеть, наш конвейер использует множество различных параметров. Приведенный ниже config_id называется baseline_model, но разработчик может разработать любое количество уникальных config_id для использования.
## Insert Params as you see fit in this file
baseline_model:
test_model: private
random_seed: 255
low_memory_mode: False
use_fin_data: False
data_date_limit: "2021-01-01"
train_split_date: "2020-01-01"
test_split_date: "2020-01-01"
drop_data: False
drop_data_train_date: "2016-02-01"
drop_data_test_date: "2020-01-01"
cross_validation: False
lgb_model: True
use_test_as_validation: False
train_with_all_data: True
seed: 227
lgb_params: {
"application": "fair",
"num_iterations": 130,
"learning_rate": 0.1,
"early_stopping_round": 10,
"feature_fraction": 1.0,
"bagging_fraction": 0.9,
"subsample_freq": 1,
"min_data_in_leaf": 1016,
"metric": "lgb_spearmanr",
"num_leaves": 1016,
"reg_alpha": 0.3899,
"reg_lambda": 0.648,
"verbose": -1,
"device_type": 'cpu'
}
Ключевым преимуществом этих конвейеров для итерации является то, что мы можем создавать несколько конфигураций, когда хотим попробовать разные эксперименты. Если вы заинтересованы в том, чтобы поднять свои конвейеры на новый уровень, вы также можете изучить программное обеспечение с открытым исходным кодом, такое как DVC, которое упростит создание конвейера.
Если вам интересно, у нас даже есть шаблон для этого типа работы, который можно найти ниже, если вы заинтересованы (все еще в процессе).
Данные
Обзор
Организаторы конкурса предоставили следующие наборы данных:
- Данные о цене акций. Эти данные включают информацию о цене открытия, цене закрытия, объеме торгов и других факторах, связанных с акциями.
- Данные списка акций. Эти данные содержат информацию об отраслях и секторах акций.
- Данные о финансовых результатах. Данные финансовой отчетности – это отчеты или данные о компаниях, которые рассказывают о финансовых результатах.
- Данные ярлыков акций. Данные ярлыков имеют ярлыки low_5, high_5, low_10, high_10, low_20 и high_20.
Разработка функций
Сначала мы экспериментировали без какой-либо разработки функций для нашей базовой модели. Наша оценка перекрестной проверки была около 1,50 по сравнению с базовой моделью. Затем мы добавили технические функции, такие как волатильность, простая скользящая средняя, экспоненциальная средняя, процентное изменение на интервале 10, 14, 20, 28, 30, 42 дня. Благодаря этим функциям показатель перекрестной проверки снизился с 1,50 до 0,95. Мы использовали только данные о ценах на акции, так как другие данные нам не помогли, но вы можете прочитать об этом подробнее в разделе о том, что не сработало в этой статье. К этому моменту стало ясно, что технические характеристики очень важны. Мы добавили больше технических функций, таких как полосы Боллинджера (нижняя и верхняя BB), индекс относительной силы (RSI), схождение-расхождение скользящих средних (MACD). Эти индикаторы говорят нам о ценовом импульсе, тренде и волатильности. Наша оценка перекрестной проверки составила 0,525784 с новыми функциями. Мы использовали библиотеку Python PrinceIndices для расчета ценовых технических индикаторов, созданную Даялом Чанд Айчарой.
Модель
Для моделей мы попробовали модели Ridge Regression, LightGBM и TabNet. Мы использовали LightGBM в качестве нашей окончательной модели на основе результатов анализа перекрестной проверки. Мы обучили 2 модели, одну для прогнозирования низкой и высокой стоимости акций.
Оценка
Метрикой оценки, используемой в этом соревновании, был коэффициент ранговой корреляции Спирмена, который был рассчитан как для высоких, так и для низких прогнозов из предыдущих моделей.
d: разница между двумя рангами каждого наблюдения
n: количество наблюдений
Затем вычисляется интегральная или комбинированная оценка коэффициентов ранговой корреляции как для высокой, так и для низкой моделей, где:
phigh: коэффициент ранговой корреляции Спирмена прогнозов Stock High.
плуг: коэффициент ранговой корреляции Спирмена прогнозов запасов.
Мы полагались на специально закодированную 5-кратную перекрестную проверку разделения временных рядов по датам запасов с помощью sklearn, чтобы правильно оценить комбинацию моделей на основе вышеуказанной интегрированной метрики для выбора нашей отправки.
Интересным компонентом этого конкурса, безусловно, был аспект обслуживания в реальном времени, поскольку мы все оценивались по акциям в условиях реального рынка в течение 4 недель. Это соревнование требовало значительных инженерных навыков, так как многие из них нуждались в том, чтобы их модели не только обучались, но и служили в производственных условиях. Я надеюсь, что в будущем будет больше таких соревнований, которые будут более реалистичными для текущих проблем отрасли.
Вещи, которые не сработали
В этом разделе мы кратко рассмотрим некоторые вещи, с которыми мы пытались поэкспериментировать, но у нас это не сработало.
Хребетная регрессия. Прежде чем создавать модели LightGBM, мы сначала попробовали простую хребтовую регрессию, чтобы получить базовую производительность. После этого мы попробовали LightGBM и обнаружили, что модель LightGBM работает значительно лучше при нашей перекрестной проверке. Сначала мы хотели построить ансамбль моделей LightGBM и RidgeRegression, но обнаружили, что производительность LightGBM настолько лучше, что этот ансамбль может нанести нам ущерб в конкурентной борьбе. Однако гребенчатая регрессия была намного быстрее при выводе.
TabNet. В последнее время появилось множество различных моделей на основе нейронных сетей, пытающихся конкурировать с моделями Gradient Boosted Trees в табличной области. В исследовательских работах часто утверждается, что они могут превзойти алгоритмы, такие как XGBoost или LightGBM, по производительности прогнозирования. Мы решили попробовать TabNet, так как это показалось интересным — вы можете увидеть статью и реализацию ниже, если вам интересно.
Статья: https://arxiv.org/abs/1908.07442
Реализация: https://github.com/dreamquark-ai/tabnet
Я бы сказал, что дело не в том, что TabNet не работал, поскольку он, казалось, давал нам вполне конкурентоспособную производительность. Просто производительность была примерно такой же, а затраты на скорость логического вывода были выше. Был также определенный риск, поскольку мы не были так хорошо знакомы с фреймворком по сравнению с хорошо зарекомендовавшими себя библиотеками, такими как LightGBM. Мы думали об объединении этого с LightGBM, но это удвоило бы нашу скорость вывода, поэтому мы решили не использовать его. Возможно, это могло бы поднять нашу производительность на первое место, но кому нужна модель прогнозирования акций в реальном времени, прогнозирование которой занимает вечность?
Данные финансовой отчетности. Данные финансовой отчетности — это отчеты или данные о компаниях, которые в основном говорят вам о ее финансовом состоянии и результатах деятельности. Многие могут задаться вопросом, как или почему мы не использовали такой основной набор данных или индикаторы как часть нашего решения. Ключевой ответ на этот вопрос заключается просто в том, что, основываясь на результатах нашей перекрестной проверки, он не улучшил нашу производительность настолько значительно, чтобы оправдать дополнительные затраты на его использование. Возможно, он использовался в других решениях, но в нашем случае мы не увидели пользы от его использования и остановились на базовых данных о ценах на акции.
Почему Сигнэйт?
Для тех, кто не в Японии, мы рекомендуем, если вы раньше не пробовали Signate, это может быть еще одной хорошей альтернативой вашей зависимости от Kaggle. Иногда проводятся соревнования, в которых наборы данных и подробная информация о соревнованиях представлены на английском языке, но обычно соревнования, связанные с компьютерным зрением, обычно более доступны для всех людей, независимо от языка. Кроме того, если вы работаете в Японии в качестве иностранного резидента, Signate дает вам возможность показать другим, что вы можете работать с японскими наборами данных, что работодатели могут счесть преимуществом. На самом деле, одна из основных причин, по которой я участвую в конкурсах Signate, заключается в том, чтобы улучшить свои навыки работы с японскими наборами данных, которые могут иметь некоторые небольшие отличия от табличных наборов данных, с которыми вы, возможно, знакомы на английском языке. Один из негативных моментов в Signate заключается в том, что призовые обычно ниже, чем на Kaggle, но я надеюсь, что в будущем, когда спрос на специалистов по искусственному интеллекту в Японии возрастет, пулы вознаграждений также увеличатся. Также второй минус заключается в том, что вы можете обнаружить, что правила не часто пишутся на английском языке, что может вызвать трудности, если вы не уверены в этом языке.
Вывод
В этой статье мы простыми словами обсудили наше решение для прогнозирования высокой и низкой стоимости акций с помощью моделей LightGBM. Из этого конкурса мы можем порекомендовать новым специалистам по данным всегда переводить свой код в конвейеры для более быстрого экспериментирования и всегда доверять перекрестной проверке любой общедоступной рейтинговой таблицы. Важно отметить, что гибкость в соревнованиях с использованием конвейеров машинного обучения и время для прототипирования, как в реальном мире, обеспечат преимущество перед другими в конкурентных условиях. Мы надеемся, что вы найдете этот совет полезным, и с нетерпением ждем, когда другие применят его против нас на поле конкурентной борьбы.