All streams
Search
Write a publication
Pull to refresh
11
0
Алексей @Alexey_mosc

Статистик / DS

Send message
Вручную подготовку данных делать нужно и полезно. Начинаешь видеть, что внутри. И особенно это важно в том, как убирать «выбросы», например. Выброс выбросу рознь: если он не является артефактом неточного изменения, то он является характеристикой объекта выборки и, значит, может быть нужен в дальнейшем моделировании.

Приведу пример с линейной регрессией, когда выбрасывание данных, похожих на выбросы, будет вредно. При оценке коэффициентов нам интересны стандартная ошибка коэффициентов и дисперсия остатков. Можно строить интервал прогноза. И в случае, если мы выкинем выбросы (например, удалим 0,01 и 0,99 квантили) интервал прогноза и доверительный интервал модели будут уже, чем с выбросами. Потом этом может плохо сказаться на качество работы модели на новых данных. Вы будете думать, что в 90%-интервал попадает 90% данных, а туда будет попадать меньше.
...Python для автоматизации, ну и куча всего по мелочи.


Язык R для клинических исследований и анализа работы новых фичей в коде, не такая уж и мелочь…
Это же физическая модель популярного бенчмарка для задачи обучения с подкреплением. CartPole. Там суть в том (если вы вдруг не интересовались), что, грубо говоря, по фотографии этой тележки (снимок с экрана / пиксели) НС дает команду влево/вправо/на месте. То есть все происходит внутри нейросетевой функции.
Он, конечно, никакой не Настродамус. Это очень натянутая интерпретация. Человек описывал в сатирической форме известные ему изъяны кап.общества. А сейчас наша страна просто движется в общем тренде, когда правят капиталисты. Прошу не считать полит.срачем. За напоминание о произведении спасибо!
Вашу статью я читал. Направление, в целом, совпадает, цели, видимо, разные. Под свои задачи я пока удовлетворен текущим решением. То, что вы описали, больше походит на долговременную систему трекинга тем и их хранения для последующего анализа. Ну, если это нужно бизнесу, я тоже что-то подобное сделаю, с BigData и прочими трендовыми обвесами. Пока такое не нужно. За ссылку на исследование — спасибо, почитаю работу.
Суть было сложновато вычленить в таком большом тексте. Я недавно посмотрел интервью Бугаенко на progblog и там он очень выразительно доносит свои идеи.
Это было хорошо. )))

Те же индусы едут в США, пытаясь зарабатывать среднюю ЗП по рынку, причем они идут на всякие хитрости, чтобы скрыть свой низкий уровень образования/обучения. Иногда едут в США как body shopper ы, зарабатывая 1/2 средней ЗП, потом меняя работу на нормальную. Они везде, в общем. Лезут во все щели, ибо для них такая сытая жизнь великое благо, а благодаря уже осевшим индусам в корпорациях их и берут чаще, более лояльны к визовому спонсорству. Кто ее видел Кремниевую долину тот, в частности, не ощутил лёгкую панику от вездесущих индусских программистов.)

Я делаю гипер-прокрастинацию в отпуске. Смотрю на море и часами читаю. Много дней. Потом очень хочется работать. Отпуск нужен. Клин клином.

Во всем этом точно что-то скрывается. Надо дальше моделировать, может быть, откроется истина.
github.com/alexmosc/abs_forex/blob/master/fx_currency_absolute_linear_dynamic.R Посмотрите — ваш подход через линейку в динамике, доллар = 1. Интересные временные ряды получились и корреляции довольно разумные, ИМХО. Например, Евро с Чешкой — 0.91 по первым разностям. Думаю, есть повод для арбитража?..
У нас просто моделирование. если эти валюты будут полезны для инвестирования значит хорошо, а если нет, то это просто умственное упражнение.
Решил посмотреть на ошибки попристальнее. Взял 17 валют и золотишко. Золотишко генерит большие отклонения. Попробовал также GLM

# clear environment

rm(list = ls()); gc()


## load libs

library(data.table)
library(ggplot2)
library(magrittr)
library(quantmod)
library(scales)

currs <- c(
     'eur',
     'chf',
     'gbp',
     'cad',
     'jpy',
     'rub',
     'cny',
     'cnh',
     'aud',
     'nok',
     'sek',
     'nzd',
     'try',
     'czk',
     'xau',
     'hkd',
     'mxn',
     'usd'
)

## download and bind historic rates for pairs --------------

rate.env <- new.env()

for(i in seq_along(currs)) for(j in seq_along(currs)[-seq_len(i)]){
     cat(currs[i], currs[j], "\n")
     quantmod::getFX(
          toupper(
               paste0(currs[i]
                      , '/'
                      , currs[j]
               )
          )
          , from = as.Date("2019-04-29")
          , to = as.Date("2019-04-29")
          , env = rate.env
     )
}

obs_rates = unlist(as.list(rate.env))

l_obs_rates = log(obs_rates)

currs = toupper(currs)

coef_matr = do.call(cbind, lapply(currs, function(currency){
     ifelse(grepl(paste0("^", currency), names(l_obs_rates)), 1,
            ifelse(grepl(paste0(currency, "$"), names(l_obs_rates)), -1, 
                   0
            ))
}))

colnames(coef_matr) = currs

regr_dat = data.frame(l_obs_rates, coef_matr)

# lm

lm_mod = lm(l_obs_rates ~ . + 0, data = regr_dat)

summary(lm_mod)

lm_coefs <- exp(coef(lm_mod))

lm_resids <- exp(lm_mod$fitted.values) / obs_rates - 1

lm_resids[which.max(abs(lm_resids))]

head(sort(abs(lm_resids), decreasing = T))

plot(lm_resids)

# glm

glm_mod = glm(l_obs_rates ~ . + 0, data = regr_dat, family = gaussian(link = "identity"))

summary(glm_mod)

exp(coef(lm_mod))

glm_coefs <- exp(coef(glm_mod))

glm_resids <- exp(glm_mod$fitted.values) / obs_rates - 1

glm_resids[which.max(abs(glm_resids))]

plot(glm_resids)
Я и не знал, что Yahoo столько пар может сформировать. Вау.
Аа. Увидел. Круто. Очень круто )
Ну, это бленд наших кодов. Я его посмотрел, lm построил. Дальше что делать, вопрос. Я хотел поизучать характеристики временных рядов. На первый взгляд они похожи на валютные пары. Длиннохвостные, нестационарные, есть автокорреляция. Но также при этом они между собой по первым разницам коррелируют.
Ага, понятно.

Ну, можно вытащить все возможные пары на один момент времени. Их около 90. Значит, будет 14 валют.
Воспроизвел ваш код. Очень интересно. Получается, судя по невязкам, что все таки не 100% фит, это наверное связано с точностью при операциях на матрице (обращение)?

> res$residuals
       eurusd        gbpusd        eurchf        eurgbp        gbpchf        usdchf 
 2.267840e-05 -2.352581e-05  1.528156e-05 -3.795996e-05 -1.443414e-05 -8.474192e-07 
Отлично. Вот, я тоже хотел свести к линейному решению, но не мог понять как дизайн сделать. Почитаю, позапускаю. Спасибо! И, да, похоже, для динамики нужны что-то типа панельные методы, я их не пробовал, но будет смысл покурить.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity