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

Статистик / DS

Send message

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

Поглядите мой код, там можно как-то ограничить loss, данные тянутся за 180 дней…
Согласен. Но мне не нравится, что usd = 1 = const, не будет меняться с течением времени. Хотелось бы, чтобы был скрытый параметр (Абс.Валюта), не заменяемый существующей валютой, то есть, без вашего ограничения.

Тогда все будет меняться, например, так:



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

Полный код: github code
У нас же результат оптимизации — это курс некоей абсолютной валюты к известным валютам.


Можно сказать и так…

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

И тогда результат оптимизации — это абсолютные курсы валют (но лучше сказать, учитывающие все взаимоотношения валют в валютных парах). Так вот, приравнивая usd к 1 внутри лосс-функции мы будем всегда получать, что доллар почти ей и равен, а, учитывая вашу постановку задачи, если все валюты выражаются через Абсолютную валюту, то она и будет долларом. то есть все меряем через доллар?
Про множитель я все понял, спасибо!

А вот это

Да, наложено условие, чтобы обменный курс к доллару был максимально близок к единице


все таки не совсем понятно. Мне в коде читается так, что просто доллар = 1. А обменные курсы это пары, они восстанавливаются в оригинальном значении, но такими, чтобы везде usd = 1. То есть, ценность доллара единица, и это априорная гипотеза.
Как я понимаю, необходимо было найти некий абсолютный курс, через который можно бы было выразить все остальные курсы.


Это и была задача исследования. А конечная цель (у автора оригинальной статьи) — применить метод портфельной оптимизации к абс.валютам.
Исходя из здравого смысла я наложил дополнительное условие, чтобы валюта была как можно ближе к доллару.


Это не совсем понял. Судя по вашему коду (который у меня тоже также отработал), вы говорите алгоритму, чтобы доллар был ближе к 1, что и есть вроде как единственное ограничение, да?

Получается, мы хотим, чтобы доллар был единицей всегда, а остальные курсы выражались через эту единицу (что будет выполняться, даже если в паре доллара нет)? И тогда в динамике доллар будет иметь константную ценность? Это разумно?
Полезная статья, спасибо! В результате, хм, parallel даже победил. Мне кажется под Unix меньше всяких посторонних процессов, поэтому чище идет, меньше оверхеда… ИМХО.
Спасибо, да, тоже заметил такую инвариантность. То есть, если стартовые значения сделать в районе 100, то решений тоже будет куча, но уже тоже в районе 100.

Избежать этого можно положив, например, usd + eur + chf + gbp = 1, но тогда метод оптимизации должен быть другой.


Можно оптимизировать через конечно-разностный метод с ограничениями или, например, вообще gradient-free.

Но вопрос вот в чем, является ли надежным предположением, что ценность валют вообще находится в рамках какой-то плотности вероятности, диапазона и т.д.

Интересно: если взять USD/JPY, курс будет уже на других порядках, так как йена миллионами исчисляется в быту. А если взять белорусский зайчик, там будут еще другие порядки. То есть, валюта зайчик вообще будет иметь ценность 0.000… от основных валют. А например Индекс доллара (взвешенный курс) гуляет около 100…

Вот так, с регуляризацией и избавлением от деления? Спасибо.

alpha <- 1e-4

express <- expression(
          (
               (eurusd - eur / usd) ^ 2 +
               (gbpusd - gbp / usd) ^ 2 +
               (eurchf - eur / chf) ^ 2 +
               (eurgbp - eur / gbp) ^ 2 +
               (gbpchf - gbp / chf) ^ 2 +
               (usdchf - usd / chf) ^ 2 +
               (usd^2 + eur^2 + chf^2 + gbp^2) * alpha
          ) * chf^2 * gbp^2 * usd^2 * eur^2
     )


Результат:



Финальные решения похоже стали более равномерно распологаться в [0;1]. Ошибка опускается до 0,05 или выше.
Гауссово распределение в некотором смысле максимально компактное, у него самые тощие хвосты из всех возможных. Из-за этого любая ошибка во входных или промежуточных данных, которая не укладывается в рамки гауссова распределения (а большинство — не укладываются), вызывает «панику-панику» и сносит ваш алгоритм в неведомые дали. Что вы, собственно, и наблюдаете. Решение: разбираться с распределениями (строить гистограммы шумов, аппроксимировать их разными стат. моделями и считать критерий Колмогорова-Смирнова). А затем подбирать вид штрафной функции исходя из наиболее подходящего распределения.</blockquot

У мня невязки уходят в ноль, задача решается на 100%, я не то делаю, что думаете вы. Тут нет выбросов, смещающих решение. Просто бесконечно много решений. В МНК это может быть возможно, если число независимых переменных намного больше числа наблюдений, не понимаю как у меня это получается.
Это не экономика. Это мат.стат. Посмотрите spurious correlations в google.
Меня минусуют не оправдано. Это бред. МНК это устоявшийся термин для решения через b = (A * At)-1 * At * Y.
Это называется ordinary least squares, МНК. Если я решаю регрессионную задачу и использую квадраты невязок, через градиентный спуск, бред говорить об МНК, другие расчеты, другая сложность, другие результаты могут быть, в конце концов… Я мог выбрать фитнеса функцию как сумму модулей невязок, например… Понятно, я надеюсь…

1) производные не разностные, в тексте написано ясно (вы читали его?):

2 * (eur/usd^2 * (eurusd — eur/usd)) + 2 * (gbp/usd^2 * (gbpusd —
gbp/usd)) — 2 * (1/chf * (usdchf — usd/chf))


Это производная от дифференцмруемой ф-и. Дальше она умножается на скорость обучения, и все, классика жанра… Я ещё сделал gradient clipping [0;1].

Если вы принципиально не готовы курить матан, сделайте хотя бы следующее


Я решаю задачу БЕЗ линейной алгебры, то есть, без матана. Я исследую результат.

Это сменит «вшитое» в МНК распределение с гауссова на хи-квадрат, которое всё же намного более гибкое в плане шумов.


Это generalized linear model или что? Я вот не понял сейчас почему веса тут нужны, вот от слова совсем не понял…

Я вообще, мне не ясно как свести задачу к МНК, не ясен дизайн матрицы, я бы и по матану попробовал решить, и через GLM…

Foreign Exchange включает намного больше, а на нашей бирже торгуется малая часть кроссов. В основном с рублем.

Можно только работать с конвертируемыми валютами. В эксперименте все такие.


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

Мой код.


Тот факт, что я минимизирую сумму квадратов отклонений не делает метод МНК, я ее использую теорию матриц вообще, я делаю то, что делает нейронная сеть...


Попрошу вас немного прояснить ваш аргумент

Information

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