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

 

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

 arimaModel <- auto.arima(y = ts(DT$value[trainIndexes],frequency=48),
                          seasonal.test = "ocsb",
                          trace=TRUE,
                          stepwise = FALSE,
                          max.q = 48, 
                          max.order = 48+5
                         )

функция auto.arima сама ищет подходящие p d q P D Q параметры arima
ts(DT$value[trainIndexes],frequency=48) # данные конвертируются в какой-то формат из пакета forecast, главное указать frequency, иначе сезонность не будет использоваться
seasonal.test = "ocsb" # гугл говорит что так лучше, я точно не знаю
stepwise = FALSE #false включает более полный подбор параметров. дефолтное значение true будет означать что поиск скорее всего застрянет в локальном минимуме и прекратится
max.q =48 #максимальное значение q при поиске. дефолтное значение == 5, для этих данных мало
max.order = 48+5 # максимальная сумма p+q+P+Q. дефолтное значение == 5, для этих данных мало

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

Сам я не ждал пока функция всё найдёт, просто интуицией подобрал подходящие параметры. Данные трендированные, поэтому p = 1 и P = 1. И на графике видно преобладающие периоды 24 и 48, поэтому q=24, и Q = 48 / frequency = 1
Период 336 я в арима вставить уже не смог, для этого нужна вторая сезонность, пакет forecast так не умеет.

Arima с уже известными параметрами p d q P D Q создаётся так:

Arima(y = ts(DT$value[trainIndexes],frequency=48), order = c(1, 0, 24), seasonal = c(1, 0, 1))

сезонность на самом деле не (1,0,1), а (1,0,48) потому что Q как-бы домножен на frequency



СанСаныч Фоменко:

Обсуждать ариму без анализа остатка на ARCH занятие совершенно пустое. Бывают ряды, которые после моделирования аримой имеют стационарный остаток. Но обсуждать ошибку предсказания на предположении, что она стационарна - это не серьезно. Остаток этот чрезвычайно фасонист. 

Да, согласен, просто эти данные очень цикличные и простые, поэтому арима без проблем работает. Если в этот-же код подставить eurusd m30 то на новых данных модель в резкие скачки цены уже не попадает.
 
Dr. Trader:

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

функция auto.arima сама ищет подходящие p d q P D Q параметры arima
ts(DT$value[trainIndexes],frequency=48) # данные конвертируются в какой-то формат из пакета forecast, главное указать frequency, иначе сезонность не будет использоваться
seasonal.test = "ocsb" # гугл говорит что так лучше, я точно не знаю
stepwise = FALSE #false включает более полный подбор параметров. дефолтное значение true будет означать что поиск скорее всего застрянет в локальном минимуме и прекратится
max.q =48 #максимальное значение q при поиске. дефолтное значение == 5, для этих данных мало
max.order = 48+5 # максимальная сумма p+q+P+Q. дефолтное значение == 5, для этих данных мало

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

Сам я не ждал пока функция всё найдёт, просто интуицией подобрал подходящие параметры. Данные трендированные, поэтому p = 1 и P = 1. И на графике видно преобладающие периоды 24 и 48, поэтому q=24, и Q = 48 / frequency = 1
Период 336 я в арима вставить уже не смог, для этого нужна вторая сезонность, пакет forecast так не умеет.

Arima с уже известными параметрами p d q P D Q создаётся так:

сезонность на самом деле не (1,0,1), а (1,0,48) потому что Q как-бы домножен на frequency



Да, согласен, просто эти данные очень цикличные и простые, поэтому арима без проблем работает. Если в этот-же код подставить eurusd m30 то на новых данных модель в резкие скачки цены уже не попадает.
Меня интересовали не эти "Оптимальные" ппараметры, параметры, которые коэффициенты в уравнении регрессии - печатает после подгонки
 
summary(arimaModel)
Series: ts(DT$value[trainIndexes], frequency = period) 
ARIMA(1,0,24)(1,0,1)[48] with non-zero mean 

Coefficients:
         ar1     ma1     ma2     ma3     ma4     ma5     ma6     ma7     ma8     ma9    ma10    ma11    ma12    ma13    ma14    ma15    ma16    ma17    ma18
      0.8531  0.3469  0.3324  0.3512  0.3564  0.3176  0.2676  0.2223  0.1904  0.2015  0.2241  0.2529  0.2424  0.2383  0.2408  0.2507  0.2279  0.1701  0.1418
s.e.  0.0316  0.0350  0.0413  0.0462  0.0506  0.0542  0.0559  0.0554  0.0537  0.0514  0.0494  0.0481  0.0477  0.0469  0.0455  0.0451  0.0448  0.0439  0.0415
        ma19    ma20   ma21     ma22     ma23     ma24    sar1     sma1       mean
      0.0813  0.0525  0.028  -0.0152  -0.0226  -0.0159  0.9899  -0.4300  1816.9447
s.e.  0.0390  0.0358  0.032   0.0280   0.0224   0.0180  0.0015   0.0132   687.9652

sigma^2 estimated as 1442:  log likelihood=-23883.84
AIC=47825.68   AICc=47826.05   BIC=48012.95

Training set error measures:
                     ME     RMSE      MAE         MPE     MAPE      MASE         ACF1
Training set -0.1648644 37.86381 25.64976 -0.07217873 1.573367 0.1610166 0.0002493082
Файлы:
arimaModel.zip  140 kb
 
Dr. Trader:

Какая-то странная таблица.

Тем не менее.

Сравниваем значение коэффициента с s.e. За редким исключением более 10%. Почему-то не вижу оценки через t, но если в лоб, то эти 10% означают:

Нулевая гипотеза по оценки коэффициента: вероятность того, что коэффициента не значим.  Отклонение более 10% говорит, что все эти коэффициенты НЕ значим, т.е. у Вас НЕТ уравнения регрессии.


ПС.

Обычно те коэффициенты, которые значимы, помечаются звездочками. Раз кожффициенты НЕ значимы, то все остальные цифры просто цифирь.

hist(residuals(arimaModel), breaks= 100)


Причиной НЕ значимости коэффициентов является хвост слева, который толще хвоста справа.

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

Вывод:

Модель ARIMA не применима к использованному временному ряду.

 
Maxim Dmitrievsky:

На рынке любой классификатор переобучается, потому что рынок не стационарный. Если хотим что бы не переобучилось то нужно обучить НС за всю историю. Иначе всегда будет так что рыночный цикл изменился и модель испортилась. Поэтому единстыенный грамотный подход это переобучение или дообучение в процессе торговли :) мы же здесь не верим в граали, которые будут давать стабильно по 1000% в мес на истории в 15 лет без вмешательства.

Вообще я до сих пор не вижу той грани - что значит переобученная НС на форексе. Это когда она не зарабатывает на тестовой выборке? неее... не не не... дело то в нестационарности. То что она переобучается это нормально, надо просто другие подходы искать в дополнение


Вот тут Вы абсалютно правы, как можно говорить о переобучении, когда не известно само понятие???? Что значит переобучилась НС??? Давайте каждый накидает как он это видит, и я начну первый.

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

2. Модель проработала хорошо меньше половины интервала обучения. Подразумевая такой подход, что хорошо обученная модель должна проработать от 50% и более интервала обучения.

3.Кривая баланса на новых данных имеет резкие взлёты и падения (случайная модель работающая в конкретный период времени и приведшая к прибыльности за счёт 1-2 крупных сделок, но в целом сливатор)

А по поводу классификации вот такой мой ответ.

НЕ СТАЦИОНАРНОСТЬ плавно изменяющаяся величина, как только закрылся бар, она начинает медленно уплывать. И чем дальше становится бар в истории тем эта пресловутая СТАЦИОНАРОНОСТь (условное обозначении некоегого хаоса или эфимерной величины, которая меняет рынок в целом) становится всё дальше и дальше, поэтому обучив момдель классификационную, мы получим то что эта величина напрямую зависит с качеством модели. Чем старее модель тем уровень её качества снижается, в соотвествии с изменением этой самой НЕ СТАЦИОНАРНОСТИ. Задача построить такую модель, которая бы могла работать достаточно долго, чтоб можно было выкружить из нё, пару тройку пипсов :-)

 
Mihail Marchukajtes:

Что значит переобучилась НС???

Данные для обучения, особенно на форексе, обычно зашумлены, и обучая модель до 100% точности мы учим её воспроизводить эти шумы вместе с нужным результатом. А нам нужно чтоб обучение остановилось в тот момент когда НС уже начала правильно предсказывать результат, но ещё не начала тупо зазубривать правильные ответы вместе с шумом. Это если своими словами. Если научно, то https://ru.wikipedia.org/wiki/Переобучение


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Вот неплохая иллюстрация. Две модели,
первая (залёненькая линия) выучила эти данные с точностью 100%. На глазок мы видим что многие точки на границе красного и синего пространства смещены чуть в сторону (шум), и на самом деле граница этих двух пространств должна быть не ломаной линией, а некоей усреднённой.
Первая модель переобучена.
И есть вторая модель (чёрная линия), которая игнорирует шум, и чётко по смыслу делит плоскость.

 
Dr. Trader:

Данные для обучения, особенно на форексе, обычно зашумлены, и обучая модель до 100% точности мы учим её воспроизводить эти шумы вместе с нужным результатом. А нам нужно чтоб обучение остановилось в тот момент когда НС уже начала правильно предсказывать результат, но ещё не начала тупо зазубривать правильные ответы вместе с шумом. Это если своими словами. Если научно, то https://ru.wikipedia.org/wiki/Переобучение


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Вот неплохая иллюстрация. Две модели,
первая (залёненькая линия) выучила эти данные с точностью 100%. На глазок мы видим что многие точки на границе красного и синего пространства смещены чуть в сторону (шум), и на самом деле граница этих двух пространств должна быть не ломаной линией, а некоей усреднённой.
Первая модель переобучена.
И есть вторая модель (чёрная линия), которая игнорирует шум, и чётко по смыслу делит плоскость.

Иногда мозг начинает ломаться.. насчет шума на форексе, это же не радиосигнал, так? Откуда на форексе шум? Если у Михаила модель совершила 30-50 сделок в месяц, по 1-2 в день, то она торговала шумом что-ли? Как-то не подходит сюда это определение :)

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

п.с. поэтому нужно делать сортинг инструментов и выбирать наиболее персистентные на данный момент ВР, например растущие акции или индексы

 

Всё верно!!!! Но у переобучения есть ещё и математическое объяснение...... 

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

Теоретически для каждого набора данных существует асолютное обучения, это некая линия на шкале ошибок где 0.000000000000000000000001 модель не переобучилось, а 0.0000000000000000000000009 уже переобучилась, этакий "абсолютный ноль" выражаясь языком физиков. Все модели ошибки которых находятся правее к этой точке , считаются недообученными, которые левее соотвественно переобученными. Напомню что это только теория моего личного понимания, ни на что не претендую.

Этакая идеальная модель для конкретного набора данных.

Задача любого ИИ подойти как можно ближе к точке абсолютной обученности, но не переступить её. ИМХО.


В этой теории предполагается, что это не какая то конкретная точка, а некая область в которой присутствуют как полностью обученные модели, так и переобученные. Смешанная область, достаточно не больших размеров. НУ просто... представим...... Почему??? Это я выявил из наблюдений.

Так или иначе первое что должен делать ИИ это гарантированно попадать в эту переходную область. Но тут вот какой момент есть......

Если вы делите выборку стационарно то скорее всего это будет какое-то конкретное значение границы переобученности (скорее всего), если выборка каждый раз делится рандомно, то это ОБЛАСТЬ.... переходная.... ИМХО

Если ИИ не приходит в эту область гарантированно, то он сделан не правильно. Другое дело на какой модели он будет там останавливаться!!!!

Всё я это почерпнул исходя из пользования JPrediction.

Начиная тренировать один и тот же файл, с учётом рамдомного разбиения выборки, я получил 10 разных резутатов обучения, самый худший был 75%, самый лучший 85% обобщения (мы сейчас берём показатели оптимизатора, правильно или не правильно он считает НЕ ВАЖНО, сейчас пока...как пример....) То есть можно предположить что у нас есть область между 75 и 85 в которой находятся бесконечное множество вариантов модели, нейронной сети. Как правило я выбираю среднюю в районе 80-82 и то можно нарваться на такую модель, которая на ООС будет слабенькой. Потому как определение предельного полинома вопрос не простой.

Вот видео и смотреть с 35 минуты, там он про это рассказывает....

https://www.youtube.com/watch?v=qLBkB4sMztk

001. Вводная лекция - К.В. Воронцов
001. Вводная лекция - К.В. Воронцов
  • 2014.12.22
  • www.youtube.com
Курс "Машинное обучение" является одним из основных курсов Школы, поэтому он является обязательным для всех студентов ШАД. Лектор: Константин Вячеславович Во...
 
Mihail Marchukajtes:

Вот видео и смотреть с 35 минуты, там он про это рассказывает....

https://www.youtube.com/watch?v=qLBkB4sMztk


Ага, смотрел этого дядьку уже, еще раз посмотрю, сенкс )

Математический смысл понятен, а вот реальный смысл - что есть переобученная НС именно на форексе имеет совсем другой смысл, и от такой переобученности уже никуда не уйти :) Поэтому либо жесткий сортинг и поиск трендовых инструментов или постоянно переобучающаяся адаптивная НС, а вот по каким критериям - тут уже творческий вопрос.

 
Maxim Dmitrievsky:

Ага, смотрел этого дядьку уже, еще раз посмотрю, сенкс )

Математический смысл понятен, а вот реальный смысл - что есть переобученная НС именно на форексе имеет совсем другой смысл, и от такой переобученности уже никуда не уйти :) Поэтому либо жесткий сортинг и поиск трендовых инструментов или постоянно переобучающаяся адаптивная НС, а вот по каким критериям - тут уже творческий вопрос.


Реальный смысл всё таки таков. Если на контрольном участке идёт плоходе раздерелине, НЕ важно правильно или нет, сам факт разделения слабенький. И модель проработала не больше 50% от интревала обучения, то такая модель считается переобученной.... ИМХО

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