Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 58

 
У меня вот какой вопрос к Юрию.  При выяснении рузельтата у тринарной модели, когда в ручную ввожу данные, в результатах иногда выводится символ тире. Тоесть есть 0, есть 1 и есть тире. Так вот что означает тире???
 

Я пробовал классифицировать зигзаг, да, но не точку разворота, а весь тренд который зигзаг показывает, результат 0 если текущий зз тренд идёт вниз, и 1 если тренд идёт вверх. Тренды зз выглядят довольно несбалансированными, но я от них откзалася не поэтому. Мне не понравилось то что для модели нужна очень высокая точность. Если модель пару раз ошибётся в течении тренда и развернёт сделку в неудачное время, даже хотя-бы всего на один бар, то это обычно приводит к дополнительным потерям, плюс ещё и платить комиссию со спредом каждый раз. Модель будет прибыльной только если она будет открывать сделку, ждать конца тренда, и разворачиваться. Без единой ошибки внутри каждого тренда.

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


Балансировку я не делаю, при прогнозе следующего бара разброс классов и так минимален, я не думаю что +-10% какого-то одного класса сильно повлияет на результат.

Вот тут в статье пишут что балансировку можно заменить правильной оценкой модели (F-мера или R-Precision). Это русский аналог той статьи что СанСаныч давал ссылку ранее.

http://bazhenov.me/blog/2012/07/21/classification-performance-evaluation.html 

... 

Тем не менее, у этой метрики [точность] есть одна особенность которую необходимо учитывать. Она присваивает всем документам одинаковый вес, что может быть не корректно в случае если распределение документов в обучающей выборке сильно смещено в сторону какого-то одного или нескольких классов. В этом случае у классификатора есть больше информации по этим классам и соответственно в рамках этих классов он будет принимать более адекватные решения. На практике это приводит к тому, что вы имеете accuracy, скажем, 80%, но при этом в рамках какого-то конкретного класса классификатор работает из рук вон плохо не определяя правильно даже треть документов.

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

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

Точность и полнота

Точность (precision) и полнота (recall) являются метриками которые используются при оценке большей части алгоритмов извлечения информации. Иногда они используются сами по себе, иногда в качестве базиса для производных метрик, таких как F-мера или R-Precision. Суть точности и полноты очень проста.

Точность системы в пределах класса – это доля документов действительно принадлежащих данному классу относительно всех документов которые система отнесла к этому классу. Полнота системы – это доля найденных классфикатором документов принадлежащих классу относительно всех документов этого класса в тестовой выборке.

....

F-мера

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

F-мера представляет собой гармоническое среднее между точностью и полнотой. Она стремится к нулю, если точность или полнота стремится к нулю.


итд, там в статье дальше разные красивые графики

 
Dr.Trader:

Я пробовал классифицировать зигзаг, да, но не точку разворота, а весь тренд который зигзаг показывает, результат 0 если текущий зз тренд идёт вниз, и 1 если тренд идёт вверх. Тренды зз выглядят довольно несбалансированными, но я от них откзалася не поэтому. Мне не понравилось то что для модели нужна очень высокая точность. Если модель пару раз ошибётся в течении тренда и развернёт сделку в неудачное время, даже хотя-бы всего на один бар, то это обычно приводит к дополнительным потерям, плюс ещё и платить комиссию со спредом каждый раз. Модель будет прибыльной только если она будет открывать сделку, ждать конца тренда, и разворачиваться. Без единой ошибки внутри каждого тренда.

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


Балансировку я не делаю, при прогнозе следующего бара разброс классов и так минимален, я не думаю что +-10% какого-то одного класса сильно повлияет на результат.

Вот тут в статье пишут что балансировку можно заменить правильной оценкой модели (F-мера или R-Precision). Это русский аналог той статьи что СанСаныч давал ссылку ранее.

http://bazhenov.me/blog/2012/07/21/classification-performance-evaluation.html 

итд, там в статье дальше разные красивые графики

 Маленький совет. Любая система приводит к одному единственная явлению. Это сигнал!!!. Совокупность всех условия приводит к свершившемуся событию, который и является точкой принятия решения. Тобишь, Любая система, какая бы она сложная не была, приводит к сигналам либо покупай либо продавай. Вот их и рекомендуется классифицировать. Пересечение машек. Произошло пересечение, есть сигнал бай, произошло пересечение в обратную сторону, есть сигнал селл. и третьего не дано. Так вот для правильной классификации необходимо делать это отдельно для селл и отдельно для бай, тем самым можно вдвое увеличить тренировочный интервал при сохранении уровня обобщения. В начале у меня модели редко поднимались выше 40-50% обобщения, но после того как я до думался что нужно делать с данными. В чём суть модели получаемой после классификации. На тех же самых данных я теперь получаю модели не ниже 70% в среднем 80-90% и в будущем, на неизвестных данных ошибки примерно 1-2 из 10-12. Это вполне достаточно чтобы зарабатывать. Но доверительный интервал беру 30% от интервала тренировки. Тоесть беру 100 сигналов бай и 100 сигналов селл, знамо в течении 30 сигналов ну или 50 можно работать не перетренировывая модель. В первых версиях предиктора 6 входов оптимизировались порядка 40 минут, что было крайне не удобно, а сейчас 9 входов делает за 10 минут. И от этого качество модели только увеличилось. Теперь проблема в другом, где же найти столько входных данных. Но мы не лыком шиты. В запасе есть ещё что предложить предиктору :-)
 
Mihail Marchukajtes:
У меня вот какой вопрос к Юрию.  При выяснении рузельтата у тринарной модели, когда в ручную ввожу данные, в результатах иногда выводится символ тире. Тоесть есть 0, есть 1 и есть тире. Так вот что означает тире???

Тоже самое, что означает знаменитая фраза Сократа "Я знаю, чего я не знаю". Тернарный классификатор отвечая минусом, сообщает, что в обучающей выборке не было примеров похожих на классифицируемый паттерн, а потому он не может однозначно отнести его к какому либо классу, т.е. он не может дать утвердительный ответ на предъявленный паттерн. Честно признаётся в отсутствии у него должной компетенции в некоторых областях знаний, а не пытается утвердительно отвечать с наглой рожей на лице на вопросы, на которые он не знает ответов.

 
Yury Reshetov:

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

Хм. Ну чтож понятно... скажи а существует ли возможность в обозримом будущем выгружать тернарную модель в файл, чтобы потом использовать её в МКУЛЬ? Так же как и бинарную, а то ручками когда вводишь, есть вероятность ошибится и всё такое.....
 
Mihail Marchukajtes:
Хм. Ну чтож понятно... скажи а существует ли возможность в обозримом будущем выгружать тернарную модель в файл, чтобы потом использовать её в МКУЛЬ? Так же как и бинарную, а то ручками когда вводишь, есть вероятность ошибится и всё такое.....
Сейчас работаю над этим. Т.е. кодогенератор пока ещё не доведён до ума и на данный момент выдаёт исходники только одного из бинарных классификаторов, а не всего тернарного классификатора.
 
Yury Reshetov:

Тоже самое, что означает знаменитая фраза Сократа "Я знаю, чего я не знаю". Тернарный классификатор отвечая минусом, сообщает, что в обучающей выборке не было примеров похожих на классифицируемый паттерн, а потому он не может однозначно отнести его к какому либо классу, т.е. он не может дать утвердительный ответ на предъявленный паттерн. Честно признаётся в отсутствии у него должной компетенции в некоторых областях знаний, а не пытается утвердительно отвечать с наглой рожей на лице на вопросы, на которые он не знает ответов.

Судя по приложенной картинке, я правильно понял суть? Слева бинарный классификатор; справа - тернарный (белая зона это "минус")

Если так, то идея по-моему хорошая, почему-то я раньше не встречал её, можете пожалуйста какие-то статьи по тернарному классификатору посоветовать? 



Дописал позже: 

С интуитивной точки зрения эта задача довольно простая. Допустим есть 2 предиктора (X и Y), это значит что работать нужно в 2-мерном пространстве (как на картинках выше). Далее надо огородить такое 2-мерное пространство, которое включает в себя все классы "купить" (синяя заливка). Затем, огородить второе пространство, включающее все классы "продать" (красная). Оба огороженных пространства не должны пересекаться. Для классификации новых данных нужно  просто посмотреть в какое огороженное пространство попадает искомая точка. Если никуда не попадает (белый цвет на правой картинке) - то ясно видно что модель про эту точку сказать ничего не может, и торговать в данный момент не следует.

С 3 предикторами будет уже 3-х мерное пространство, где классы будут огорожены некими трехмерными объёмными фигурами. Итд, чем больше предикторов, тем многомернее фигуры. 

Такие модели существуют? Обычно классификаторы находят в пространстве некую гиперплоскость, которая разделяет классы. А тут нужны две замкнутые гиперфигуры.

 

Mihail Marchukajtes:

... 

В первых версиях предиктора 6 входов оптимизировались порядка 40 минут, что было крайне не удобно, а сейчас 9 входов делает за 10 минут. И от этого качество модели только увеличилось. Теперь проблема в другом, где же найти столько входных данных. Но мы не лыком шиты. В запасе есть ещё что предложить предиктору :-)
Да, я тоже пытаюсь классифицировать строго бай/селл. Но как вы получили изначальных 6 входов, просто взяли их из какой-то известной стратегии? Адекватные входы это одна из самых важных вещей. У меня наоборот есть тысячи входов (цены и индикаторы за сотню баров), и нужно их отсеять оставив пару десятков, потому что на таком большом числе входов любая модель переобучается.
 
Dr.Trader:

Судя по приложенной картинке, я правильно понял суть?


Слева бинарный классификатор; справа - тернарный (белая зона это "минус")

Если примитивно для чайников, то вполне сойдёт в качестве наглядного пособия.

Dr.Trader:
Если так, то идея по-моему хорошая, почему-то я раньше не встречал её, можете пожалуйста какие-то статьи по тернарному классификатору посоветовать?

Если в гугле не забанили, то можно поискать по фразе "тернарный классификатор машинное обучение"

 
Yury Reshetov:

Если в гугле не забанили, то можно поискать по фразе "тернарный классификатор машинное обучение"

Другими словами "Посмотрите первую ссылку в гугле которая ведёт на мой сайт" :)

Я нашёл, у вас комитет из двух моделей, это совсем не то как я понял и написал выше.

Причина обращения: