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

 
Maxim Dmitrievsky #:
Вот в генетике мы берем переменные и максимизируем по критерию. Здесь так не получится, ибо классификация. Связи между прибылью и метками классов нет. В лучшем случае получится ерунда. Поэтому такие критерии и вынесены в eval_metrics

Нет в жизни счастья)

[Удален]  
Aleksey Nikolayev #:

Нет в жизни счастья)

Даже из названия loss ф-я это ф-я потерь между эталонными значениями и моделью

С какой стороны здесь рукав в виде прибыли 
 
Maxim Dmitrievsky #:
Даже из названия loss ф-я это ф-я потерь между эталонными значениями и моделью

С какой стороны здесь рукав в виде прибыли 

По сути, из области МО переходим в более общую область оптимизации. Всё же, "заработать как можно больше" - это не совсем то же самое что "быть правым как можно чаще".

 
Andrey Dik #:

1. v

2. вот рисунок, типа кривая какой то гипотетической функции обучения

вас устроит, что сетка остановится на локальном экстремуме 1? а может быть 2? или какой, 3, типа посередине? так не известно заранее сколько их там локальных экстремумов, их может быть 100500 а может и больше. Поэтому важно стремление найти наивысший из всех локальных, до которых алгоритм в состоянии добраться.

Очень красиво и доказательно в смысле обоснования поиска глобального максимума. 

Но это на истории.

А если добавить бар справа? Красота сохраниться? Или все рухнет? Рынок НЕстационарен. Вы верите тестеру? Он ведь находит, красота прямо, в цвете... 

 
Maxim Dmitrievsky #:
Вот в генетике мы берем переменные и максимизируем по критерию. Здесь так не получится, ибо классификация. Связи между прибылью и метками классов нет. В лучшем случае получится ерунда. Поэтому такие критерии и вынесены в eval_metrics 
качество классификации же можно как то оценивать. соответственно максимизация этой оценки и есть цель оптимизации
 
Maxim Dmitrievsky #:
Даже из названия loss ф-я это ф-я потерь между эталонными значениями и моделью

С какой стороны здесь рукав в виде прибыли 

есть рукав

[Удален]  
Andrey Dik #:
качество классификации же можно как то оценивать. соответственно максимизация этой оценки и есть цель оптимизации
Ну лосс между исходными и обученными, минимизируется. Можно добавку небольшую вычитать в виде прибыли нормированную конечно попробовать, но надо ли оно
 
СанСаныч Фоменко #:

Очень красиво и доказательно в смысле обоснования поиска глобального максимума. 

Но это на истории.

А если добавить бар справа? Красота сохраниться? Или все рухнет? Рынок НЕстационарен. Вы верите тестеру? Он ведь находит, красота прямо, в цвете... 

Не важно, на истории или в будущем. И тестер сам по себе тут ни причем.

Важно свойство алгоритма (алгоритма оптимизации индивидуально или в составе с сеткой) находить глобальный оптимум оценочного критерия. Подчеркиваю - оценочного критерия. Оценочный критерий это не обязательно и/или только прибыль. Это может быть что угодно, к примеру, оценочный критерии работы на OOS чем не критерий (минимазации разницы между сэмпл и оос)? - это на вскидку. Критерии могут быть какими угодно и какой угодно сложности. Важно понимать, что критерий "Прибыль" - очень овражная, к тому же дискретная штука, поэтому люди пытаются придумывать более гладкие, более монотонные оценочные критерии, что в целом повышает качество оптимизации самого по себе и обучения нейронки в частности.

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

Плато - да, есть такое понятие, но это не относится к оптимизации, это вопрос классификации схожих наборов параметров ко какому то признаку. Искать устойчивое плато - отдельная комплексная задача.

 

Наконец-то получилась своя лосс-функция, дериватив представлен в виде произведения Шарпа, ошибки и весов.

is_max_optimal=False указывает на то, что идет уменьшение значения, но так как я еще умножил на -1, то получается обратное.

class SharpeObjective(object):
  def calc_ders_range(self, approxes, targets, weights):
    assert len(approxes) == len(targets)
    if weights is not None:
      assert len(weights) == len(approxes)

    result = []
    for index in range(len(targets)):
      preds = [approxes[i] for i in range(len(targets))]
      preds = [i if i>0 else -1*i for i in preds]
      sharpe = np.mean(preds)/np.std(preds)
      der1 = targets[index] - approxes[index]
      der2 = -1

      if weights is not None:
        der1 = -1 * sharpe * der1 * weights[index]
        der2 = der2 * weights[index]

      result.append((der1, der2))
    return result

class Sharpe(object):
    def get_final_error(self, error, weight):
        return error

    def is_max_optimal(self):
        return False

    def evaluate(self, approxes, target, weight):
        assert len(approxes) == 1
        assert len(target) == len(approxes[0])
        preds = np.array(approxes[0])
        target = np.array(target)
        preds = [i if i > 0 else -1*i for i in preds]
        sharpe = np.mean(preds)/np.std(preds)
        return sharpe, 0

model = CatBoostRegressor(learning_rate=0.1, loss_function=SharpeObjective(), eval_metric=Sharpe())
[Удален]  
Evgeni Gavrilovi #:

Наконец-то получилась своя лосс-функция, дериватив представлен в виде произведения Шарпа, ошибки и весов.

is_max_optimal=False указывает на то, что идет уменьшение значения, но так как я еще умножил на -1, то получается обратное.

Улучшились результаты обучения?)