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

 

Много раз обсуждали вопрос взаимосвязи переменных.

К‌онечно, корреляция - это самый сомнительный, очень быстро начинает просматриваться корреляция с кольцами Сатурна, кофейной гущей...

П‌очему-то забыли об этом:

Тест Грэнджера на причинность (англ. Granger causality test) — процедура проверки причинно-следственной связи («причинность по Грэнджеру») между временными рядами. Идея теста заключается в том, что значения (изменения) временного ряда {\displaystyle x_{t}}, являющегося причиной изменений временного ряда {\displaystyle y_{t}}, должны предшествовать изменениям этого временного ряда, и кроме того, должны вносить значимый вклад в прогноз его значений. Если же каждая из переменных вносит значимый вклад в прогноз другой, то, возможно, существует некоторая другая переменная, которая влияет на оба.

В тесте Грэнджера последовательно проверяются две нулевые гипотезы: «x не является причиной y по Грэнджеру» и «у не является причиной x по Грэнджеру». Для проверки этих гипотез строятся две регрессии: в каждой регрессии зависимой переменной является одна из проверяемых на причинность переменных, а регрессорами выступают лаги обеих переменных (фактически это векторная авторегрессия).

А‌ вот и код по этому случаю отсюда

# READ QUARTERLY DATA FROM CSV
library(zoo)
ts1 <- read.zoo('Documents/data/macros.csv', header = T, sep = ",", 
FUN = as.yearqtr)
 
# CONVERT THE DATA TO STATIONARY TIME SERIES
ts1$hpi_rate <- log(ts1$hpi / lag(ts1$hpi))
ts1$unemp_rate <- log(ts1$unemp / lag(ts1$unemp))
ts2 <- ts1[1:nrow(ts1) - 1, c(3, 4)]
 
# METHOD 1: LMTEST PACKAGE
library(lmtest)
grangertest(unemp_rate ~ hpi_rate, order = 1, data = ts2)
# Granger causality test
#
# Model 1: unemp_rate ~ Lags(unemp_rate, 1:1) + Lags(hpi_rate, 1:1)
# Model 2: unemp_rate ~ Lags(unemp_rate, 1:1)
#   Res.Df Df      F  Pr(>F)
# 1     55
# 2     56 -1 4.5419 0.03756 *
# ---
# Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
 
# METHOD 2: VARS PACKAGE
library(vars)
var <- VAR(ts2, p = 1, type = "const")
causality(var, cause = "hpi_rate")$Granger
#         Granger causality H0: hpi_rate do not Granger-cause unemp_rate
#
# data:  VAR object var
# F-Test = 4.5419, df1 = 1, df2 = 110, p-value = 0.0353
 
# AUTOMATICALLY SEARCH FOR THE MOST SIGNIFICANT RESULT
for (i in 1:4)
  {
  cat("LAG =", i)
  print(causality(VAR(ts2, p = i, type = "const"), cause = "hpi_rate")$Granger)

Английский язык — Википедия
Английский язык — Википедия
  • ru.wikipedia.org
Самоназвание: Регулирующая организация: Общее число говорящих: Статус: Классификация Категория: Письменность: Языковые коды ГОСТ 7.75–97: ISO 639-1: ISO 639-2: ISO 639-3: Распространение английского языка[3]: Английский язык возник в раннем Средневековье как язык части германских племён, вторгшихся в Британию. Он стал родным для...
 
СанСаныч Фоменко:

К‌онечно, корреляция - это самый сомнительный, очень быстро начинает просматриваться корреляция с кольцами Сатурна, кофейной гущей...

П‌очему-то забыли об этом:

Никто ничего не забыл....

Вот когда google correlate будет спрашивать , а каким методом уважаемый юзер вы хотите мерить связь ??  вот тогда этот ваш пост будет актуальным , а пока не спрашивает гугл, да и не будет спрашивать, сервису уже 6 лет, если бы хотели сделать то сделали бы уже 

и еще...

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

В‌опрос в другом , как отсеять случайное от не случайного

 
mytarmailS:

В‌опрос в другом , как отсеять случайное от не случайного

Можно

1) разделить ряд евры на две части "1" и "2" 

2‌) закинуть ряд "1" в гугл путь найдет все близкие ряды

3‌) запоминаем названия всех близких  рядов 

4‌) закинуть ряд "2" в гугл путь найдет все близкие ряды

5‌) запоминаем названия всех близких  рядов 

6) сравниваем названия рядов из пунктов 3) и 5) и ищем такой ряд который присутствует и в 3) и в 5)

Таким образом найдутся ряды которые не случайно коррелируют с еврой, это что то типа кросвалидации в самом примитивном виде

‌Но как вытащить эти название я не знаю, нужно парсить страницу наверное 

 
mytarmailS:

Никто ничего не забыл....

Вот когда google correlate будет спрашивать , а каким методом уважаемый юзер вы хотите мерить связь ??  вот тогда этот ваш пост будет актуальным , а пока не спрашивает гугл, да и не будет спрашивать, сервису уже 6 лет, если бы хотели сделать то сделали бы уже 

и еще...

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

В‌опрос в другом , как отсеять случайное от не случайного


Так и отсеивайте по тесту из всего мусора, который собрал гугл, - я это и имел ввиду.
 
СанСаныч Фоменко:
Так и отсеивайте по тесту из всего мусора, который собрал гугл, - я это и имел ввиду.

Блин Саныч, давайте подумаем вместе, если  одному  западло :)

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

 
mytarmailS:

какой тест заумный не применяй все они покажут отличную связь

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

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

 
mytarmailS:

Можно

1) разделить ряд евры на две части "1" и "2" 

2‌) закинуть ряд "1" в гугл путь найдет все близкие ряды

3‌) запоминаем названия всех близких  рядов 

4‌) закинуть ряд "2" в гугл путь найдет все близкие ряды

5‌) запоминаем названия всех близких  рядов 

6) сравниваем названия рядов из пунктов 3) и 5) и ищем такой ряд который присутствует и в 3) и в 5)

Таким образом найдутся ряды которые не случайно коррелируют с еврой, это что то типа кросвалидации в самом примитивном виде

‌Но как вытащить эти название я не знаю, нужно парсить страницу наверное 


Это называется - тест ЧОУ.

На самом деле проверяет неоднородность выборки в контексте регресионной модели.

 
Dr.Trader:

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

Да я согласен, но гугл не выдает нам всю свою базу, а только то что коррелирует "по трендам", брать то что  коррелирует по трендам и из этого делать приращения и мерить корр. тоже не есть объективно, наверное... :)  нужно по всей базе смотреть

Дмитрий:


Это называется - тест ЧОУ.

На самом деле проверяет неоднородность выборки в контексте регресионной модели.

Ну вот.. Етот ЧОУ применить можно, но нужно как то вытащить ряды из гугла, или хотябы их названия

 

Почитал эту макулатурку  http://www.mirkin.ru/_docs/dissert065.pdf и захотел поюзать NeuroShell Day Trader Pro ‌

 
https://www.tensorflow.org/get_started/get_started — хорош для таких задач
Getting Started With TensorFlow  |  TensorFlow
Getting Started With TensorFlow  |  TensorFlow
  • www.tensorflow.org
This guide gets you started programming in TensorFlow. Before using this guide, install TensorFlow. To get the most out of this guide, you should know the following: How to program in Python. At least a little bit about arrays. Ideally, something about machine learning. However, if you know little or nothing about machine learning, then this...