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

 
СанСаныч Фоменко:

2. См. видео:

Извини, но обычная заумь малообразованного аспиранта ...

Как говориться, за что купил, за то и продаю. Мне был задан вопрос, я привёл видео, где на него есть развёрнутый ответ. Лектор там не умничает, а шпарит по статистической теории  обучения.

см. Vapnik V.N. Statistical Learning Theory. NY: John Wiley, 1998

СанСаныч Фоменко:

1. Заметным ухудшением обобщающей способности, если убрать из выборки хотя бы один информативный предиктор


Поверь, к сожалению это ничего не доказывает. Более того, если набор предикторов плохой (много шумовых) то этот эффект будет тем сильнее, чем больше шума. Это объясняется очень просто: чем больше шума, тем проще алгоритму подобрать "удобное" значение.

Как говориться, на вкус и цвет ...

СанСаныч Фоменко:

По поводу твоего файла. 

1. Построить 6 моделей классификации на твоих данных не удалось: ошибка свыше 50%. Если хочешь могу выложить здесь результаты

Спасибо, за информацию. Результаты итак понятны - полное их отсутствие.

СанСаныч Фоменко:

2. Причиной такого результата является то, что у тебя очень плохой набор предикторов - шум, т.е. предикторы, не имеющие отношение к целевой переменной. Предикторы 6, 7  и 8 имеют некоторую предсказательную способность, но очень маленькую. Я с такими предикторами не работаю. Остальные просто шум.

Ну, дык. Без шума любой дурень сумеет правильно классифицировать. Шум там есть и в приличном количестве. Полезная информация тоже имеется. Вот, например, результаты старенького libVMR 3.01:

/**
 * The quality of modeling in out of sample:
 *
 * TruePositives: 245
 * TrueNegatives: 113
 * FalsePositives: 191
 * FalseNegatives: 73
 * Total patterns in out of samples with statistics: 622
 * Total errors in out of sample: 264
 * Sensitivity of generalization abiliy: 56.19266055045872%
 * Specificity of generalization ability: 60.752688172043015%
 * Generalization ability: 16.94534872250173%
 * Indicator by Reshetov: 0.1075044213677977

*/

Т.е. наковырял информации в обобщающей способсности почти на 17%

У новенького результативность заметно лучше.

 
Alexey Burnakov:
Используйте кроссвалидацию для подбора количества компонент. Лучшее значение на кроссвалидации затем проверяйте на валидацонном наборе.

Вышло опять не очень. Я бы взял 20 компонент, т.к. min(trainwinrate. validate1winrate, validate2winrate) самый большой по сравнению с другими количествами компонент. И получил бы результат во фронттесте ~55%, ещё хуже чем было. Странная модель вышла - процент выигрыша немного больше 50% (для форекса не подходит), кроссвалидация не работает, важность предикторов не вытащить. Можно только распечатать, и повесить на стенку :)


 
Yury Reshetov:

 * TruePositives: 245

 * TrueNegatives: 113
 * FalsePositives: 191
 * FalseNegatives: 73

То есть процент выигрыша на test.csv у вас 57,6%, да? Я попробую своим методом отсеять предикторы и обучить нейронку, завтра отпишусь о результатах.
 
Dr.Trader:

Вышло опять не очень. Я бы взял 20 компонент, т.к. min(trainwinrate. validate1winrate, validate2winrate) самый большой по сравнению с другими количествами компонент. И получил бы результат во фронттесте ~55%, ещё хуже чем было. Странная модель вышла - процент выигрыша немного больше 50% (для форекса не подходит), кроссвалидация не работает, важность предикторов не вытащить. Можно только распечатать, и повесить на стенку :)


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

Это результаты моего большого эксперимента. Из-за ошибки в винде код прервался и я не дообучил на всех символах. Но мне пока и этого хватит. На eurusd хорошие результаты.

 

Я вывел только максимальные найденные значения, без указания параметров. Есть уже неплохой результат. Тонкости настройки GBM помогают. 

 

Предсказывая eurusd на 512 минут вперёд, можно зарабатывать 1.5 пипса за сделку, я правильно понял? И спред тоже учитывается? Ещё важно знать максимальную просадку за это время, нет смысла торговать советником ради даже 10 пипсов, если просадка за эта время была всех двести. Для оценки торговли хорошо бы использовать Шарп ратио, но я в R такого не видел, для начала можно ограничаться recovery фактором: (итоговый профит)/(максимальная просадка по эквити за всё время).

Для примера, скажем есть сигнал 1. За год трейдер заработал 1000%, но его максимальная просадка была 50%. И при этом есть сигнал2, где автор заработал за год всего 600%, но его макс. просадка была 25%. Может показаться что трейдер 1 лучше (по прибыли), но на самом деле нет, он просто рискует в два раза больше. Recovery factor первого - 1000/50 = 20, у второго - 600/25 = 24. Значит лучше подписаться на второй сигнал, и при желании увеличить риск в два раза если есть желание рискнуть на 50% депозита.

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

 
Alexey Burnakov:

Коллеги, если будет время, можете мне позадавать вопросы под статьей? https://habrahabr.ru/company/aligntechnology/blog/303750/

 

А то Хабр молчит вообще! 

Хабр не молчит - Хабр читает.
Очень много буков.
 
Dr.Trader:

Предсказывая eurusd на 512 минут вперёд, можно зарабатывать 1.5 пипса за сделку, я правильно понял? И спред тоже учитывается? Ещё важно знать максимальную просадку за это время, нет смысла торговать советником ради даже 10 пипсов, если просадка за эта время была всех двести. Для оценки торговли хорошо бы использовать Шарп ратио, но я в R такого не видел, для начала можно ограничаться recovery фактором: (итоговый профит)/(максимальная просадка по эквити за всё время).

Для примера, скажем есть сигнал 1. За год трейдер заработал 1000%, но его максимальная просадка была 50%. И при этом есть сигнал2, где автор заработал за год всего 600%, но его макс. просадка была 25%. Может показаться что трейдер 1 лучше (по прибыли), но на самом деле нет, он просто рискует в два раза больше. Recovery factor первого - 1000/50 = 20, у второго - 600/25 = 24. Значит лучше подписаться на второй сигнал, и при желании увеличить риск в два раза если есть желание рискнуть на 50% депозита.

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

Да 1.5 пунта со спредом 1. 

Все остальные показатели будем оценивать вместе: я выложу сов.на мт4 на обученной модели.

К сожалению, в R я не могу посчитать Шарпа и иже с ними, так как у меня 49 случайных выборок, при наложении которых не восстанавливается последовательность сделок.

Результаты же приведены по 13000 сделок для eurusd в частности .
 
Dr.Trader:
То есть процент выигрыша на test.csv у вас 57,6%, да? Я попробую своим методом отсеять предикторы и обучить нейронку, завтра отпишусь о результатах.

Не выигрыша, а количества правильных предсказаний будущего направления цены. Классификатор на тестовой выборке выдаёт одно из двух значений: Positive - предполагается будущий рост цены, Negative - предполагается будущее снижение цены. Если он предсказал какой нибудь тестовый пример правильно, то ему засчитывается True. Если он ошибся, то False.

Sensitivity of generalization abiliy: 56.19266055045872% - правильно предсказан будущий рост цены: 100% * TP / (TP + FP) = 100% * 245 / (245 + 191)  = 100% * 245 / 436 = 56.192660550458715%

Specificity of generalization ability: 60.752688172043015% - правильно предсказано будущее снижение цены: 100% * TN / (TN + FN) = 100% * 113 / (113 + 73) = 100% * 113 / 186 = 60.75268817204302%

 
Yury Reshetov:

Не выигрыша, а количества правильных предсказаний будущего направления цены. Классификатор на тестовой выборке выдаёт одно из двух значений: Positive - предполагается будущий рост цены, Negative - предполагается будущее снижение цены. Если он предсказал какой нибудь тестовый пример правильно, то ему засчитывается True. Если он ошибся, то False.

Sensitivity of generalization abiliy: 56.19266055045872% - правильно предсказан будущий рост цены: 100% * TP / (TP + FP) = 100% * 245 / (245 + 191)  = 100% * 245 / 436 = 56.192660550458715%

Specificity of generalization ability: 60.752688172043015% - правильно предсказано будущее снижение цены: 100% * TN / (TN + FN) = 100% * 113 / (113 + 73) = 100% * 113 / 186 = 60.75268817204302%

Юрий, первая проба на ваших данных:

 

method loss_function cv_folds bag_frac model_params AUC_cv accuracy_train accuracy_validate
GBM bernoulli 4 0.4 0.015_|_7_|_70_|_600 0.429659 0.590361 0.50501
GBM bernoulli 4 0.6 0.02_|_5_|_110_|_600 0.485727 0.586345 0.51503

 

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

 

В общем, точность 51.5% на тесте - это лучшее, что получилось.

 

Даже не знаю, как у вас получается порядка 60%.