Блог им. afecn19 |Мои "значки на танчиках"

Лет 12 назад, когда я впервые ковырял тему нейросетей на фондовой бирже, прочитал как кто то облапошился обучая нейросеть распознавать танчики. Нет, сеть результат показала, но как оказалось на картинке с танчиками был какой то значок, а где танчиков не было, значка не было и нейросеть научилась распознавать не танчики, а наличие отсутствие вот этого значка. Запомнилось мне это наверно, потому что это было единственное, что я тогда понял о нейросетях. 
И вот теперь я поймал свои «значки», когда пытался предсказать динамику, на основе CNN+вейвлетпреобразований. Тут подробней. Нет я не заглядывал в будущее, и не так знак поставил где то. Я не стал нормализовывать цены, ибо считал что для CNN не важно все это, картинки они ведь и в Африке картинки, и вот так выглядит картинка вейвлетпробразования для ВТБ с ее копеечными ценами за акцию и Норникель, с его десятками тысячами рублей за акцию:
Мои "значки на танчиках"

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

Блог им. afecn19 |CNN+wavelet = blue stocks forecast

После использования вейвлетов для классификации, я конечно сразу попробовал оценить ценность вейвлет для прогнозирования, но тестирование мягко говоря затянулось. Эпох я прогонял много, 600, а одна эпоха это минута. И оставляя нейросеть на ночь я забывал, то одно, то другое. Затем я стал пробовать разные learning rate, датасеты, архитектуры и обнаружилось что тот самый позитивный первоначальный результат (в виде 55% accuracy на валидации и over +75% на тесте) исчез, сеть не могла зацепить ничего, даже на тесте. В пятницу я решил в последний раз прогнать сеть и уже с 50 эпохи сеть начала уверенно обучаться. Обьяснение тому что на том же наборе данных, одна и та же сеть, то обучается, то необучается, у меня одно — каждый раз нейросеть начинает блуждать по гиперплоскости функции ошибки с разных мест, и при одном наборе весов застревает в зоне локальных минимумов, которые чуть-чуть лучше 50%, не в силах перескочить в область более низких минимумов. 
Данные все те же — голубые, отечественные. Тестирую на недельках, прогноз на недельку вперед. 

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

Блог им. afecn19 |Еще о торговле по частотам

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

Еще о торговле по частотам
Опять уже привычный период в 220 (годовая периодичность), который тянется до 2500 отчета. Ну если быть точней он меняется, начал с 220, потом опустился ниже, затем вернулся обратно, но мы люди не гордые, упростим ситуацию, будем считать период константой.
Опять накладываем гармонику с годовым циклом и получаем что то вроде:

Еще о торговле по частотам

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

Блог им. afecn19 |Частоты на фондовой бирже. Часть1.

Как можно представить разложение Фурье и Вейвлеты? Не вдаваясь в математику, в которой я прямо скажем не большой специалист, это представление временного ряда в других системах координат. 

Вот например такой ряд — немножко похожий на котировку застрявшей в боковике акции.
Частоты на фондовой бирже. Часть1.

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

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

Блог им. afecn19 |Фичи решают.

  Берем RF загоняем в нее фичи:

'Min10',
'Cl/High',
'Vol20',
'tLow%',
'Cl/Low',
'tHigh%-tLow%',
'ATRP(14)',
'DIMinus(14)',
'RSI(Close.20)',
'MomentumPct(Close.14)',
'MFI(20)',
'KST(Close.10.10.15.10.20.10.30.15)',
'TRIX(Close.10)',
'Cl/w_High',
'DSS(10. 20. 5)

  Получаем следующие профиты:
Год Колл % сделка
2011 611 0,1
2012 440 0,34
2013 305 0,42
2014 420 1,17
2015 263 0,85
2016 248 0,74
2017 261 0,41
2018 46 0,34
 Mean: 323


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

Блог им. afecn19 |Парочка способов улучшить прогноз

  Из тестов которые я привел в прошлых постах, следует что для задач с ограниченной выборкой и моим виденьем рынка, следует использовать GB, как наиболее эффективный инструмент, далее близко идет RF, а а где то далеко позади, глотая пыль плетется нейросеть. Также следует необходимость чистки от левых фичей. В чем вообще вопрос?! Лишние фичи это возможность инструментам ML найти черную кошку даже если ее там нет, особенно феерически это показала нейросеть, которая при относительно небольшом числе примеров откровенно творит (от слова тварь). Давайте попробуем зациклить чистку фичей и сделаем это системно. Системно это в частности избежать заглядывание в будущее а танцев с бубнами. Мои данные это около 50 тысяч дневок для наиболее ликвидных российских фишек с 2010 по апрель 2018 года (2008 год безудержного падения, 2009 год безудержного роста, поэтому все что до 2010 года оставил за бортом, как заведомо простые для извлечения профита годы), заглянуть на них в будущее это в частности использовать для прогноза движения цен в 2011 году данные о ценности фичей за все года. Мы так делать не будем. Мы представим что переместились в начале 2011 года и имеем только данные за 2010 год.  Для прогноза 2011 года используем данные о ценности фичей на тесте за 2010 год. Как используем? Да просто — из более чем трех десятков фичей используем только 5, 10, 20 наиболее информативных. Для прогноза 2012 года используем данные о ценности фичей на основе теста 2010-2011 годов итд. (Код разбухает, становится все менее читаемым, впору задумываться о ООП). После получения прогнозов, для удобство переведу их в столь любимое для трейдеров виде: профит на сделку, и сравню их с результатами если бы каждый раз использовались все доступные фичи. А их 34 штуки. Чистка фичей это будет во первых.
  Во вторых попробую улучшить результат за счет скалерновской VotingClassifier, которая будет выводить нечто среднее из прогнозов RF и XGB.
  Приступим с первого пункта. 



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

Блог им. afecn19 |Чувствительность методов ML к размеру обучающей выборки. Part 6.

В прошлом тексте я пробовал «помочь», нейросете уменьшив число рандомных фичей. Сейчас попробую помочь увеличив число примеров. Может наша сверточная сеть покажет что то вменяемое если увеличить число примеров до миллиона? Это задача на моем компьютере требует совершенно других затрат времени, так что я вчера запустил машинку обучаться, а сам пошел спать. Обучался на 50 эпохах, увеличивая данные от 10 тысяч до 50 тысяч (увеличивая обьем на 10 тысяч), и от 100 тысяч до 900 тысяч (с шагом +100 тысяч).
  Результаты порадовали. Я не буду в 5 раз пересказывать логику «исследования», но убрав week=5 мы должны (ну как должны!? вообще то нам никто ничего не должен) получить равновероятный прогноз события 1 и события 0. Ниже на графике эту норму в 50% изображает серая линия. Красная это прогноз события=1, синяя событие=0, ось Х число примеров на обучающей выборке в тысячах. 

  Чувствительность методов ML к размеру обучающей выборки. Part 6.
  И пусть девочка кинет в меня камне если тут нет сходимости. 

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

Блог им. afecn19 |Блеск и нищета нейросети. Part 5.

Продолжу изучение нейросетей. Для тех кто случайно наткнулся на этот пост, но не хочет ковырять предшествующие поясняю.
  Был сгенерирована табличка в 50 тысяч строк и 103 столбцов. Один столбец это даты, еще один — таргет, который мы пытаемся предсказать (событие 1 и событие 0). 101 столбец изображают фичи, из которых 100 случайные величины от 1 до 10, а одна осмысленная (Week) принимает значение от 1 до 5. Для week от 1 до 4 равновероятно событие 1 и 2, для Week = 5 вероятность события 1 = 60%, 2 = 40%.
 «Шо за фигня аффтор?!». Фигня не фигня, а я моделирую свое виденье рынка и своего подхода к поиску рабочих стратегий. Виденье рынка предполагает что рынок рандомно блуждает значительную часть времени (в моему случаи 80% времени), а оставшееся его можно описать несколькими хорошими фичами. Ну как описать? Не на 100%, ну а где то процентов на 60. Сравните с детерминированным подходом ученых столетней давности — «если нам дать все фичи и много много вычислительных мощностей мы вам все посчитаем, с точностью в 100% и для любого мгновения времени!». Понятно что после этого появилось много других идей, нелинейная динамика к примеру, которая именно предполагает принципиальную невозможность прогнозирования, а не потому что нам чего то в данных недодали. Ну и наконец постановка задачи: у нас есть 101 фича, и нам с помощью инструментов ML надо получить такой прогноз события 1, который бы бился с заложенной нами неэффектиностью. И тут не помогут завывания нейросетей-что мы «фичи кривые заложили, на которых совершенно невозможно работать!», что «просто рынок изменился!, не имезнился мы бы огого!». Нам совершенно плевать на accuracy на трейне и даже на тесте. Мы как тот глупый учитель, который может не очень то и соображает зато у которого на клочке  бумажки записан правильный ответ, а напротив него ученик, в очечках, но у которого почему то при всех сплетнях что он в уме может перемножить трехзначные цифры, при сложения 1+1, получается то 5, то 6 то -32. Не, конечно вариант что мальчик в очечках не так уж и не прав возможен, может он считал в невклидовых метриках к примеру, или перемножать он умеет а вот что такое складывание ему просто не сказали.

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

Блог им. 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  сгруппировал и получил примерно такое:

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

 Коли



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

....все тэги
2010-2020
UPDONW