Я сделал так в приложенном коде, что курс связан через итерации. Первый раз можно привести курсы к любому желаемому значению. Например вашим оптимизатором. Далее используется последнее полученное значение. Это теплый старт. Начинаем с уже готового решения. Поэтому получается без скачков. Но и доп.условий нет никаких.
Согласен. Но мне не нравится, что usd = 1 = const, не будет меняться с течением времени. Хотелось бы, чтобы был скрытый параметр (Абс.Валюта), не заменяемый существующей валютой, то есть, без вашего ограничения.
Тогда все будет меняться, например, так:
В этом эксперименте оптимизация без ограничений но со слабенькой регуляризацией, а начальные значения валют положены равными 1 (пальцем в небо). Дальше они меняются от своих предыдущих значений. Получается warm-starts метод.
У нас же результат оптимизации — это курс некоей абсолютной валюты к известным валютам.
Можно сказать и так…
Но, вообще, мне ближе концепция, что нет никакой абсолютной валюты, а есть абсолютные курсы валют. Они измеряются в неизвестных попугаях, но эти попугаи для всех валют одинаковые. Допустим, это что-то типа золота (в период до реформы Бреттон-Вудской системы, кажется, так).
И тогда результат оптимизации — это абсолютные курсы валют (но лучше сказать, учитывающие все взаимоотношения валют в валютных парах). Так вот, приравнивая usd к 1 внутри лосс-функции мы будем всегда получать, что доллар почти ей и равен, а, учитывая вашу постановку задачи, если все валюты выражаются через Абсолютную валюту, то она и будет долларом. то есть все меряем через доллар?
Да, наложено условие, чтобы обменный курс к доллару был максимально близок к единице
все таки не совсем понятно. Мне в коде читается так, что просто доллар = 1. А обменные курсы это пары, они восстанавливаются в оригинальном значении, но такими, чтобы везде usd = 1. То есть, ценность доллара единица, и это априорная гипотеза.
Исходя из здравого смысла я наложил дополнительное условие, чтобы валюта была как можно ближе к доллару.
Это не совсем понял. Судя по вашему коду (который у меня тоже также отработал), вы говорите алгоритму, чтобы доллар был ближе к 1, что и есть вроде как единственное ограничение, да?
Получается, мы хотим, чтобы доллар был единицей всегда, а остальные курсы выражались через эту единицу (что будет выполняться, даже если в паре доллара нет)? И тогда в динамике доллар будет иметь константную ценность? Это разумно?
Полезная статья, спасибо! В результате, хм, parallel даже победил. Мне кажется под Unix меньше всяких посторонних процессов, поэтому чище идет, меньше оверхеда… ИМХО.
Спасибо, да, тоже заметил такую инвариантность. То есть, если стартовые значения сделать в районе 100, то решений тоже будет куча, но уже тоже в районе 100.
Избежать этого можно положив, например, usd + eur + chf + gbp = 1, но тогда метод оптимизации должен быть другой.
Можно оптимизировать через конечно-разностный метод с ограничениями или, например, вообще gradient-free.
Но вопрос вот в чем, является ли надежным предположением, что ценность валют вообще находится в рамках какой-то плотности вероятности, диапазона и т.д.
Интересно: если взять USD/JPY, курс будет уже на других порядках, так как йена миллионами исчисляется в быту. А если взять белорусский зайчик, там будут еще другие порядки. То есть, валюта зайчик вообще будет иметь ценность 0.000… от основных валют. А например Индекс доллара (взвешенный курс) гуляет около 100…
Гауссово распределение в некотором смысле максимально компактное, у него самые тощие хвосты из всех возможных. Из-за этого любая ошибка во входных или промежуточных данных, которая не укладывается в рамки гауссова распределения (а большинство — не укладываются), вызывает «панику-панику» и сносит ваш алгоритм в неведомые дали. Что вы, собственно, и наблюдаете. Решение: разбираться с распределениями (строить гистограммы шумов, аппроксимировать их разными стат. моделями и считать критерий Колмогорова-Смирнова). А затем подбирать вид штрафной функции исходя из наиболее подходящего распределения.</blockquot
У мня невязки уходят в ноль, задача решается на 100%, я не то делаю, что думаете вы. Тут нет выбросов, смещающих решение. Просто бесконечно много решений. В МНК это может быть возможно, если число независимых переменных намного больше числа наблюдений, не понимаю как у меня это получается.
Меня минусуют не оправдано. Это бред. МНК это устоявшийся термин для решения через b = (A * At)-1 * At * Y.
Это называется ordinary least squares, МНК. Если я решаю регрессионную задачу и использую квадраты невязок, через градиентный спуск, бред говорить об МНК, другие расчеты, другая сложность, другие результаты могут быть, в конце концов… Я мог выбрать фитнеса функцию как сумму модулей невязок, например… Понятно, я надеюсь…
1) производные не разностные, в тексте написано ясно (вы читали его?):
Можно только работать с конвертируемыми валютами. В эксперименте все такие.
Веса это и есть курсы валют, если вы поняли метод, то восстанавливаются оригинальные котировки пар, то есть, валюты стоят ровно столько, чтобы выражение одной валюты через другую было почти 100% оригинальным.
Тот факт, что я минимизирую сумму квадратов отклонений не делает метод МНК, я ее использую теорию матриц вообще, я делаю то, что делает нейронная сеть...
Я сделал так в приложенном коде, что курс связан через итерации. Первый раз можно привести курсы к любому желаемому значению. Например вашим оптимизатором. Далее используется последнее полученное значение. Это теплый старт. Начинаем с уже готового решения. Поэтому получается без скачков. Но и доп.условий нет никаких.
Тогда все будет меняться, например, так:
В этом эксперименте оптимизация без ограничений но со слабенькой регуляризацией, а начальные значения валют положены равными 1 (пальцем в небо). Дальше они меняются от своих предыдущих значений. Получается warm-starts метод.
Полный код: github code
Можно сказать и так…
Но, вообще, мне ближе концепция, что нет никакой абсолютной валюты, а есть абсолютные курсы валют. Они измеряются в неизвестных попугаях, но эти попугаи для всех валют одинаковые. Допустим, это что-то типа золота (в период до реформы Бреттон-Вудской системы, кажется, так).
И тогда результат оптимизации — это абсолютные курсы валют (но лучше сказать, учитывающие все взаимоотношения валют в валютных парах). Так вот, приравнивая usd к 1 внутри лосс-функции мы будем всегда получать, что доллар почти ей и равен, а, учитывая вашу постановку задачи, если все валюты выражаются через Абсолютную валюту, то она и будет долларом. то есть все меряем через доллар?
А вот это
все таки не совсем понятно. Мне в коде читается так, что просто доллар = 1. А обменные курсы это пары, они восстанавливаются в оригинальном значении, но такими, чтобы везде usd = 1. То есть, ценность доллара единица, и это априорная гипотеза.
Это и была задача исследования. А конечная цель (у автора оригинальной статьи) — применить метод портфельной оптимизации к абс.валютам.
Это не совсем понял. Судя по вашему коду (который у меня тоже также отработал), вы говорите алгоритму, чтобы доллар был ближе к 1, что и есть вроде как единственное ограничение, да?
Получается, мы хотим, чтобы доллар был единицей всегда, а остальные курсы выражались через эту единицу (что будет выполняться, даже если в паре доллара нет)? И тогда в динамике доллар будет иметь константную ценность? Это разумно?
Спасибо! Я посмотрю.
Попробую так, да.
Можно оптимизировать через конечно-разностный метод с ограничениями или, например, вообще gradient-free.
Но вопрос вот в чем, является ли надежным предположением, что ценность валют вообще находится в рамках какой-то плотности вероятности, диапазона и т.д.
Интересно: если взять USD/JPY, курс будет уже на других порядках, так как йена миллионами исчисляется в быту. А если взять белорусский зайчик, там будут еще другие порядки. То есть, валюта зайчик вообще будет иметь ценность 0.000… от основных валют. А например Индекс доллара (взвешенный курс) гуляет около 100…
Результат:
Финальные решения похоже стали более равномерно распологаться в [0;1]. Ошибка опускается до 0,05 или выше.
Это называется ordinary least squares, МНК. Если я решаю регрессионную задачу и использую квадраты невязок, через градиентный спуск, бред говорить об МНК, другие расчеты, другая сложность, другие результаты могут быть, в конце концов… Я мог выбрать фитнеса функцию как сумму модулей невязок, например… Понятно, я надеюсь…
1) производные не разностные, в тексте написано ясно (вы читали его?):
Это производная от дифференцмруемой ф-и. Дальше она умножается на скорость обучения, и все, классика жанра… Я ещё сделал gradient clipping [0;1].
Я решаю задачу БЕЗ линейной алгебры, то есть, без матана. Я исследую результат.
Это generalized linear model или что? Я вот не понял сейчас почему веса тут нужны, вот от слова совсем не понял…
Я вообще, мне не ясно как свести задачу к МНК, не ясен дизайн матрицы, я бы и по матану попробовал решить, и через GLM…
Foreign Exchange включает намного больше, а на нашей бирже торгуется малая часть кроссов. В основном с рублем.
Можно только работать с конвертируемыми валютами. В эксперименте все такие.
Веса это и есть курсы валют, если вы поняли метод, то восстанавливаются оригинальные котировки пар, то есть, валюты стоят ровно столько, чтобы выражение одной валюты через другую было почти 100% оригинальным.
Мой код.
Тот факт, что я минимизирую сумму квадратов отклонений не делает метод МНК, я ее использую теорию матриц вообще, я делаю то, что делает нейронная сеть...
Попрошу вас немного прояснить ваш аргумент