Резюме конкурса

Соревнование, в котором мы участвовали, называлось 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, которое упростит создание конвейера.

https://dvc.org/

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

Данные

Обзор

Организаторы конкурса предоставили следующие наборы данных:

  • Данные о цене акций. Эти данные включают информацию о цене открытия, цене закрытия, объеме торгов и других факторах, связанных с акциями.
  • Данные списка акций. Эти данные содержат информацию об отраслях и секторах акций.
  • Данные о финансовых результатах. Данные финансовой отчетности – это отчеты или данные о компаниях, которые рассказывают о финансовых результатах.
  • Данные ярлыков акций. Данные ярлыков имеют ярлыки 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. Из этого конкурса мы можем порекомендовать новым специалистам по данным всегда переводить свой код в конвейеры для более быстрого экспериментирования и всегда доверять перекрестной проверке любой общедоступной рейтинговой таблицы. Важно отметить, что гибкость в соревнованиях с использованием конвейеров машинного обучения и время для прототипирования, как в реальном мире, обеспечат преимущество перед другими в конкурентных условиях. Мы надеемся, что вы найдете этот совет полезным, и с нетерпением ждем, когда другие применят его против нас на поле конкурентной борьбы.