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

 
Evgeni Gavrilovi #:

Кто-нибудь подскажите как сделать кастомную метрику для catboost, нужен Шарп. 

Результат обучения модели с моей версией практически такой же как и при RMSE, значит где-то в коде есть ошибка. 

preds и target - это return (a[i]-a[i+1])

Не особо разбираюсь ни в питоне, ни в катбусте, но глупые вопросы задам)

1) Что такое data, почему среднее не от preds?

2) Вроде для градиентного бустинга нужно указать ещё формулы для градиента и гессиана?

 
Aleksey Nikolayev #:

Не особо разбираюсь ни в питоне, ни в катбусте, но глупые вопросы задам)

1) Что такое data, почему среднее не от preds?

2) Вроде для градиентного бустинга нужно указать ещё формулы для градиента и гессиана?

По всей видимости да, что-то пропустил. Использовал шаблон с официального сайта https://catboost.ai/en/docs/concepts/python-usages-examples

data - формируемый список из предсказаний модели, отрицательные значения перевел в положительные, чтобы потом вычислить их среднее арифметическое для Шарпа

 
Evgeni Gavrilovi #:

data - формируемый список из предсказаний модели, отрицательные значения перевел в положительные, чтобы потом вычислить их среднее арифметическое для Шарпа

А зачем? Для Шарпа считается среднее с исходными знаками. 

 
Aleksey Nikolayev #:

А зачем? Для Шарпа считается среднее с исходными знаками. 

Чтобы учитывались также ордера на продажу, допустим есть 2 точных прогноза -0,002 (20 пунктов) и +0,003 (минус - шорт, плюс - лонг)

Прибыль +0,005, среднее 0,0025, а без изменения знака будет 0,0005.


Оказывается для кастомной метрики необходима еще своя лосс-функция, по аналогии class RmseObjective(object)
 
Evgeni Gavrilovi #:

По всей видимости да, что-то пропустил. Использовал шаблон с официального сайта https://catboost.ai/en/docs/concepts/python-usages-examples

Есть два типа метрик loss_function и eval_metric. Вам скорее нужна первая, посмотрите здесь https://catboost.ai/en/docs/concepts/python-usages-examples#user-defined-loss-function

Но может я и ошибаюсь. Здесь есть более лучшие чем я спецы по питону и его восхвалители) Возможно, они вам помогут больше.

 
Evgeni Gavrilovi #:

Чтобы учитывались также ордера на продажу, допустим есть 2 точных прогноза -0,002 (20 пунктов) и +0,003 (минус - шорт, плюс - лонг)

Прибыль +0,005, среднее 0,0025, а без изменения знака будет 0,0005.

Ну это будет не Шарп тогда. Ещё, наверно, нужно не просто брать модуль, а умножать на знак прогноза (на минус один, если продажа и на один, если покупка)

[Удален]  
Evgeni Gavrilovi #:

Кто-нибудь подскажите как сделать кастомную метрику для catboost, нужен Шарп. 

Результат обучения модели с моей версией практически такой же как и при RMSE, значит где-то в коде есть ошибка. 

preds и target - это return (a[i]-a[i+1])

Значения запринтуйте какие получаете и сравните с другой метрикой. Запринтуйте сразу для обеих, для каждой итерации. В катбусте ранний останов не забудьте включить по максимуму пользовательского критерия  и “use best model=True” Можете просто Verbose включить, он сам запринтует значения метрик на каждой итерации.
 
Maxim Dmitrievsky #:
Значения запринтуйте какие получаете и сравните с другой метрикой. Запринтуйте сразу для обеих, для каждой итерации. В катбусте ранний останов не забудьте включить по максимуму пользовательского критерия  и “use best model=True” Можете просто Verbose включить, он сам запринтует значения метрик на каждой итерации.

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

Usage examples
Usage examples
  • catboost.ai
Regression CatBoostRegressor class with array-like data.
[Удален]  
Aleksey Nikolayev #:

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

Попробуем попозже 
 
Aleksey Nikolayev #:

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

У меня с xgboost'ом не получилось...
Вернее получилось но обучение не пошло,  там с градиентами надо хорошо подружиться, те нужно делать фитнес функцию градиентной,  с генетикой намного проще