Блог им. afecn19 |Нейросети. Part 4.

Напомню был сгенерирован DateFrame со 100 бессмысленными фичами и одной осмысленной, для проверки могет ML или не могет. Как оказалось GradientalBoosting могет и еще как, RF могет, но хуже. Что покажут нейросети? Нейросетей много, архитектур много, настраивать их не просто, я предложил решить задачу нейросети со следующей архитектурой:

model = Sequential()
model.add(Convolution1D(input_shape = (101, 1),
nb_filter=16,
filter_length=4,
border_mode='same'))

model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dropout(0.5))

model.add(Convolution1D(nb_filter=8,
filter_length=4,
border_mode='same'))

model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(64))
model.add(BatchNormalization())
model.add(LeakyReLU())
model.add(Dense(2))
model.add(Activation('softmax'))

  Тут все как положено — сверточная нейросеть, модная функция активации ReLU, широкой рукой накиданные Dropoutы и BatchNormalization, несколько слоев чтобы похвастаться не просто об обучении, а о глубоком обучении. Обучал на 100, 500 и 1500 эпохах. При увеличении числа эпох росла accuracy на train и на test, далеко превосходя заложенную accuracy ряда. При попытках использовать обученную нейросетку для прогноз получался один большой пфук.
По табличке:



( Читать дальше )

Блог им. afecn19 |ML - to be or not to be. Part 3.

Оценки для RF получили, под капот заглянули, хотелось бы теперь и ручками все проверить-посмотреть. Тем более что косяк у RF есть, он единственную смысловую фичу ставил не в вершине дерева, а только второй а порой и третьей после случайно сгенерированной. То есть примерно половина событий сразу криво отсекалось.
  Выгрузил в excell  сгруппировал и получил примерно такое:

Названия строк

 Коли



( Читать дальше )

Блог им. afecn19 |ML - to be or not to be. Part 2.

Ну вот значит мы получили, что если переусложнить модель, то можем найти черную кошку в черной комнате, даже если ее там нет. Но RF позволяет еще и оценить значимость той или иной фичи, и даже получить пороговые значения, по которым RF и принимает решения. Напомню что в качестве смысловой фичи у нас выступает Week. Когда Week от 1 до 4 (что символизирует дни от понедельника до четверга), то вероятность события 1 и 2 50/50. То есть белый шум. А вот когда 5 (пятница), то с вероятностью 60% наступит событие 1, то есть вот та самая неэффективность которую мы и ищем на рынке.  
 С помощью команды feat_importances = round(feat_importances.nlargest(10), 3) выводим самые важные по мнению RF фичи. Сначала выводим по итогам трейни на первых 10 тысяч данных и… о ужас:
46    0.134
67    0.095
4     0.090
60    0.071
15    0.069
week  0.068
26    0.067
2     0.065
53    0.065
84    0.058
  Week у нас всего лишь на 6 месте с ничем не примечательными коеффами важности, а во главе фича «46», которая между нами говоря никакого смысла и не имеет, ибо случайно сгенерированный ряд. Обьяснить это можно только одним-фича week детерминирует наш таргет на 52%, что совсем не густо, а фича 46, была сгенерированна так что ее ценность случайно оказалась выше. Ну то есть мы все понимаем что если посадить макаку торговать, то будет она торговать в ноль, но если посадить 1 млн макак и каждой дать по терминалу, то наверняка среди 1 млн окажется парочку «макак-гуру», которые в силу случайности покажут длинную серию успешных трейдов (я кстати думаю что также обьясняется появление гуру среди людей), а если посадить за комп 1 млрд макак, то наверняка парочка вообще не совершит неправильных кликов, и это будет «макака-Баффет», все будут смотреть ей в рот, удивляться ее гениальности, а «макака Баффет» откроет блог и начнет давать советы как торговать правильно. Ну вот и в нашем пример, так получилось, что макака под номером «46» случайно понажимала кнопки правильней и RF назвал ее особо ценной.

( Читать дальше )

Блог им. afecn19 |ML - to be or not to be

Когда мы используем методы ML, получая унылые результаты при прогнозе, мы точно не знаем кто в этом виноват и что делать. Ведь вариантов может быть несколько:
1. ML говно
2. Данные говно
3. Рынок говно
4. Все вместе или попарно говно
5. Ты говно
6. Весь мир говно
  Последние варианты рассматривать не будет, конструктивно остановимся на первых. «Данные не те». Ну правда, метод может быть хорошим, рынок может по устойчиво демонстрировать прежние тенденции, но так как мы модель скормили мусором, то ничего кроме мусора не могли получить при прогнозе. Под мусором я понимаю размер данных и бессмысленные фичи. «Рынок не тот». Не в том смысле, что я весь такой Д`Артаньян, а вот рынок подкачал, а в том что тенденции сменились, ну вот 10 лет была одна манера поведения рынка, а потом в силу геополитики или макроэкономике или каких то институциональных изменений рынок изменился, и то что раньше было вкусно, питательно и сытно, нынче конкурирует с подбрасыванием монетки. «Метод не тот». А тут у нас типа руки растут из жопы и мы не понимаем как вообще все это работает, что такое валидация, тесты, подгонки, метрики качества. Где надо нейросети мы использует бустинг, где надо бустинг используем нейросети. Меня интересует больше ответ на вопрос «а этот ML вообще что то на фондовом рынке может?!» и чтобы ответить на него я сделаю так, чтобы не было никаких проблем ни с данными ни с рынком, то есть чтобы виновник сразу был очевиден.

( Читать дальше )

Блог им. afecn19 |Практическое использование RF на российском фондовом рынке.

Так как  насчет практического применения ML? Как вообще это выглядит?!
 А выглядит это так, что 80% времени data scientist тратит на работу с данными, чтобы потом загнав их в модельку мобильно получить прогноз.   Вообще, предполагалось что такой мощный инструмент как нейросети сможет работать с сырыми данными, то есть загонишь в нейросеть обычную котировку, а дальше могучие нейроны похимичат, сгенерируют кучу фичей и найдут нужную их комбинацию (на самом деле никаких фичей нейросети на создают, но можно представить). Ну вот например такое явление как большой ГЭП, важный показатель? Еще какой! В сырых данных он содержится, то есть можно помечтать что если мы создадим очень сложную нейросеть, то она сможет вытащить это значение самостоятельно. Что такое ГЭП нейросеть конечно не знает, но путем манипуляций с весами она найдет, что когда меняется циферка в дате то образовавшийся большой разрыв в цене имеет большое влияние для хорошей аппроксимации.
 Мечты, мечты. Пока все что я видел в результате скармливания нейросети сырах данных-это слезы, боль и убожество. В общем мы пойдет другим путем. Мы не будет скармливать модели сырятину и мусор, мы постараемся кормить его качественно чтобы удои увеличивались и все такое.
Есть такое понятие как в ML как feature engenering. Наверно единственное более менее креативное что остается человеку в этом бездушном мире машинного обучения. А уж коли мы ведем речь о RF, то сам бог велел заняться этим, RF знаете ли не нейросети, там даже теоретически сырятина в данных не приветствуется. Вот этим мы и займемся.
 Откуда же нам взять эти фичи и главное как? Тут каждому воля вольная. Например можно сдув пыль с WealthLab использовать старичка как генератора фичей. Кто не знает в него вшито около полусотни известных индексов и еще столько же, но с неизвестным кодом. А еще можно запрограммировать свои фичи. По своему «знанию и разумению», своих «знаний и разумений» я накопил много, но почти все они из разряда «все эти технические индикаторы не стоят ничего». Зато кое что из своего показали свою небезнадежность. В общем на первый случай я сгенерировал около 17 своих фичей, затем ранжировал их для каждой стоки, итого 34 фичи. Стоки брал из числа 20 самых ликвидных отечественных фишек с 2010 года по март 2018, что дало 50 тысяч дневных наблюдений. Прямо сказать не густо, но что есть. Тем более речь идет о демонстрации силушки RF.
 Вот набор моих фичей:

Week               49303 non-null int64
GEP                49303 non-null float64
Min10              49303 non-null float64
Cl/High            49303 non-null float64
Cl/Low             49303 non-null float64
Cl/w_High          49303 non-null float64
Cl/w_Low           49303 non-null float64
wdif               49303 non-null float64
dif                49303 non-null float64
Vol20/Vol200       49303 non-null float64
tHigh%             49303 non-null float64
tLow%              49303 non-null float64
tHigh%-tLow%       49303 non-null float64
Cl/SMA21           49303 non-null float64
Cl/SMA5            49303 non-null float64
SMA5-SMA21         49303 non-null float64
Cl/(minSMA)        49303 non-null float64
Cl/(maxSMA)        49303 non-null float64
l_Min10            49303 non-null int64
s_Min10            49303 non-null int64
l_gep              49303 non-null int64
s_gep              49303 non-null int64
l_cl/high          49303 non-null int64
s_cl/high          49303 non-null int64
l_cl/low           49303 non-null int64
s_cl/low           49303 non-null int64
l_wdif             49303 non-null int64
s_wdif             49303 non-null int64
l_SMA5-SMA21       49303 non-null int64
S_SMA5-SMA21       49303 non-null int64
L_Cl/(maxSMA)      49303 non-null int64
S_Cl/(maxSMA)      49303 non-null int64
L-tHigh%-tLow%     49303 non-null int64
S_tHigh%-tLow%     49303 non-null int64


( Читать дальше )

Блог им. afecn19 |Модные приговоры

Оке. Что именно я сгенерировал?!
Как я уже писал мое видение рынка это меняющиеся периоды случайного блуждания со вспышками какой то детерминированности, которые трейдер стремящийся к извлечению профита (а не чего то там еще) и должен торговать.

А как вообще подход в торговле я использую? А тут нужно вспомнить тех самых отцов-учителей которые лет 20 назад изрядно наследили на просторах инета. Атаман, Юра.… всех не упомнишь, но и не важно. Их конкретные подходы для российского фондового рынка оказались бесполезны, зато подход оказался понятным, логичным и что самое главное подходящими для меня. То есть сидишь ты такой с компьютером в обнимку, чего то там считаешь, ищешь закономерности (неэффективности, тут каждый может назвать как захочет), а затем исходя из предположения что эта закономерность продлится еще какое то время, начинаешь использовать на рынке. В чем природа возникающих закономерностей интересна для тех кто хочет понять суть рынка, а тем кто хочет просто рубить бабло наверно не очень. Но если откинувшись в кресло немножко пофантазировать можно вспомнить о таких природных явлениях имеющих числовые оценки как «золотое сечение»,  персистентность, толстые хвосты, нормальное распределение. Можно пофантазировать на тему что толпа (а фондовый рынок хоть он и фондовый прежде всего рынок, то есть толпа людей)  в какие то критические моменты ведет себя шаблонно. Что есть какие то переходы в разные состояния рынка которые можно обсчитать. Что гуру и всякие теханализы с волнами Элиота создают паттерны поведения итп итд. Все это заполировать понятиями точка бифуркация, нелинейность, хаос… а можно на все это плюнуть и просто искать закономерности. Это не требует ни ума, ни какой то прозорливости или образования. Это как искать в куче сена иголку-кому то повезет и он найдет ее сразу, кому то нет, он будет искать ее долго, может всю жизнь, ну а кто то вообще не найдет. Все само собой IMXO.



( Читать дальше )

Блог им. afecn19 |Как я использовал модные методы прогнозирования на фондовом рынке.

Лет 20 назад была модной темой нейросети, и в частности в приложении к прогнозированию на фондовом рынке.  Вообще, нейросети были придуманы в далеких 60 прошлого века, но как это часто бывает от теории до реализации прошли многие году. Если нейросети в других сферах нашли свое место, то о применении нейросетей для успешного трейдинга я честно говоря не слышал. Этому может быть два обьяснения-для фондовых рынков неросети неприменимы (вообще или пока), либо кто сумел их правильно применить, по понятной причине не стал писать об этом кандидатские, а ничтоже сумняшеся стал рубить бабло.

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

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



( Читать дальше )

....все тэги
UPDONW
Новый дизайн