@Kind_Man

Какой алгоритм лучше подходит для определения прибыльной сделки на бирже?

Есть список сделок с различной информацией о каждой: цена, объемы и тд. У каждой сделки есть итоговый статус - True/False - и стоит задача определять по всей информации, каким окажется итоговый статус - будет ли сделка прибыльной.

Для этого я сначала применял алгоритм Random Forest. Но как пришло время тюнинга - пришли большие сомнения. Я использовал GridSearchCV, TPE и Anneal из HyperOpt, bayessearch и Randomized Search, и каждый в отдельности давал около 0,7 Accuracy. Дальше почитал, что необязательно использовать только Random Forest, можно добавить еще алгоритм, а потом их соединить. Так я добавил GradientBoostingClassifier, а затем связал их VotingClassifier'ом.

Но результаты тоже не шибко хорошие, и как тюнить непонятно. Поэтому вопрос к специалистам: какой алгоритм лучше использовать для моей задачи, как лучше тюнить и какие показатели Accuracy считаются хорошими?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 4
Maksim_64
@Maksim_64
Data Analyst
А вы уверенны что тюните правильно, при тюнинге вы не должны сравнивать с тестовым сетом, это приведет к классической ошибке утечке тестовых данных. Нужно создавать либо либо третий сет валидации либо использвать кросс-валидацию но с осторожностью (там можно то же набедакурить и получить утечку и на практике никаких 0.7 вы не увидите).

Если у вас есть алгоритм который например в течении следующих торговых 252 дней, покажет точность 0.7 то вы богаты. 0.7 вероятность успеха при экспонентом росте хватит с головой. (Помните что речь о последовательности) а не а классической классификации или регрессии. Возможно вы учите модель на данных которых у вас не будет в момент прогноза, (классическая ошибка). То есть все ваши данные должны быть: это различные индикаторы (оконные функции, которые с агрегировали статистику за определенное время), например какой нибудь скользящее среднее с окном 10, скользящее среднее с окном 21 и.т.д. Ваши вход X это набор индикаторов, статистик которые будут вам доступны в момент предсказания.

Там временная последовательность, кросс-валидация делается специальным классом для этого в документации sklearn есть про это в разделе кросс-валидации.

Ну и наконец про алгоритм лучший алгоритм не существует. Даже если вам удастся создать модель которая зацепит текущее положение дел, и будет КАКОЕ ТО время хорошо работать потом она перестанет никакого универсального хорошего алгоритма не существует. Потому что на ценообразование в разное время в мире влияют разные факторы. В одно время это факторы настроения а все фундаментальные работают слабо, в другое в точности наоборот и т.д. Не ищете лучший алгоритм.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
и каждый в отдельности давал около 0,7 Accuracy.

Возможно это и есть предел прогнозирования для такой системы. Остановись на этом. Дальнейшая кастомизация
алгоритмов просто может привести к переобучению модели. Это значит что она будет допустим лучше на твоих тестовых данных но на каких-то новых станет в два раза хуже.
Ответ написан
Комментировать
@dmshar
как тюнить непонятно. Поэтому вопрос к специалистам: какой алгоритм лучше использовать для моей задачи, как лучше тюнить и какие показатели Accuracy считаются хорошими?
- Существует три основных видов ансамблирования алгоритмов ML (а именно так называется то, что вы хотите сделать) - стекинг, бэггинг, бустинг. И масса производных от них. (Правда - если вы хотите более тонко настраивать ансамбль, то в ход идут другие, более сложные методы, которые учитывают статистические характеристики, включая доверительные интервалы, ROC оценки конкретных алгоритмов и пытаются работать с ними - но это уже далеко от старта).

Про эти простейшие способы можно прочитать и в серьезных работах, коих немало, и в статьях для начинающих, например:
https://habr.com/ru/post/561732/
https://alexanderdyakonov.wordpress.com/2019/04/19...
arbir.ru/articles/a_4053.htm
а есть книги различной степени серьезности на эту тему:
Kunapuli Ensemble Methods for Machine Learning
Kyriakides Hands-On Ensemble Learning with Python:...
Semi Ensemble Methods in Data Mining: Improving Ac...
И вообще, сегодня уже ни одна книга по МL не выходит без раздела про ансамблирование. Ну вот просто из последнего, 2022 год издания, что под рукой
Pajankar Hands-on Machine Learning with Python: Im...
и в ней глава "CHAPTER 10 Ensemble Learning Methods"

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

какие показатели Accuracy считаются хорошими -
а вот тут все намного проще. Нет понятия "хороший" или "плохой" показатель. Это не школа, где вам надо найти правильный ответ. ML вообще, и ансамблирование еще в большей мере - это процесс творческий. Какое значение получите - вот то и есть (для вас) хороший результат. Хотите больше - экспериментируйте дальше.
Ну и замечание вдогонку. Accuracy - это не единственный показатель. Не даром напридумывали еще как минимум с полдесятка характеристик эффективности моделей ML. И часто надо искать компромисс, поскольку одни алгоритмы оказываются лучше по одним показателям, а некоторые - по другим. И вам надо найти и как-то оценить, какие именно характеристики работают в вашем случае. Так что поле для деятельности открывается достаточно широкое.
Ответ написан
Комментировать
@Kind_Man Автор вопроса
Спасибо за такой ответ. А можете ещё дать конкретные советы по моей работе?

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

Статистика сделок такая:

253 - прибыльные
193 - нет
то есть 56% - TRUE
44% - FALSE

Когда запускаю разные модели алгоритмов (KNN, RF, DL, AdaBoost и тд), которые в процессе тюню ГридПоиском, всегда результат максимум 59%. Т.к. я новичок, не знаю, куда двинуться, чтобы достичь лучших результатов (собираю итог не только по Accuracy, но и f1 recall, precision и тд, что выдает базовая команда отчета, они все все равно колеблются в диапазоне 55-60%).

Мысли пока такие.
1) Продолжать собирать данные. Больше данных - больше случаев - лучше обучение.
2) А дальше что?

Есть мысль, что не все колонки данных нужно на обучение подавать. Какие-то могут наоборот смутить алгоритм и запутать. Но как их определить? Не может быть так, что какому-то алгоритму какие-то колонки будут нужны, а какому-то нет? Тогда может начать с выбора алгоритма? Но опять, как подобрать, какой лучший?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы