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

 
Mihail Marchukajtes:
В самом начале вы абсалютно правы. Наконецто появились здравомыслящие люди в ветке. Да классификация оценивает патерн, на предмет истиности или ложи, ну или говорит незенаю, как предложил Решетов, А уже сам патерн несёт в себе предсказательную составляющую, и важен не сам патерн, а именно реакция рынка на него. И если эта реакция идентичка как в обучении то сеть сделает правильный вывод. Так что как то так....
Что ж делать то? Наивный Баесовский классификатор пытаться натянуть, или jПредикторы изучать?
 
Yuri Evseenkov:
Что ж делать то? Наивный Бесовский классификатор пытаться натянуть, или жПредикторы изучать?
xЧто за классификатор Бесовский???? Не понял, Сейчас Решетов Сделал жутко крутую штуку, по принципу вкл, выкл, бабло. А вы всё паритесь со своим R. Делая кучу не нужным манипуляций с данными. И что за пример с ирисом???? Интересно посмотреть как его Предиктор раскусит....
 
Mihail Marchukajtes:
xЧто за классификатор Бесовский???? Не понял, Сейчас Решетов Сделал жутко крутую штуку, по принципу вкл, выкл, бабло. А вы всё паритесь со своим R. Делая кучу не нужным манипуляций с данными. И что за пример с ирисом???? Интересно посмотреть как его Предиктор раскусит....
Да я об R только здесь узнал. А в слове Баесовский классификатор случайно пропустил букву (может по Фрейду).  А что программа Решетова крута, не спорю. Про ирис не знаю.
 
Yuri Evseenkov:
Да я об R только здесь узнал. А в слове Баесовский классификатор случайно пропустил букву (может по Фрейду).  А что программа Решетова крута, не спорю. Про ирис не знаю.
IШайтан машина Решетова :-)
 
Mihail Marchukajtes:
xЧто за классификатор Бесовский???? Не понял, Сейчас Решетов Сделал жутко крутую штуку, по принципу вкл, выкл, бабло. А вы всё паритесь со своим R. Делая кучу не нужным манипуляций с данными. И что за пример с ирисом???? Интересно посмотреть как его Предиктор раскусит....

 результат торговли за вчера можно посмотреть? 

 
Mihail Marchukajtes:
IШайтан машина Решетова :-)
Может удалим посты начиная с моих описок?
 
mytarmailS:

Почему индикаторы никогда не работали и не будут работать? Мое мнение... 

кто то что то пробовал? мысли какие то появились? или даже не понятно было о чем речь?
 
2 Dr.Trader.

Привет.

Да, я пробовал собрать комитет. 

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

Такая же история с отдельными моделями. Я делаю ошибку, отбирая модель по отложенной выборке. После нее модель может запросто слить.
 

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

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

Например у вас есть данные для обучения, 5 лет. И параметры для gbm - n.trees, interaction.depth, shrinkage, n.minobsinnode, distribution, bag.fraction.

Фитнесс функция в цикле должна повторить хотя бы 50 раз:
1) поделить данные на 2 части, 50%/50%. Должны быть как рандомные выборки с помощью sample, так и последовательные (кусок для тренировки где-то из середины, а для валидации - то что его окружает в начале и в конце исходных данных). В том числе и крайние варианты, где тренировка на первой половине таблицы, а валидация на последней, и наоборот. Я считаю что для тренировки важно иметь как последовательно отобранные примеры, так и случайные. На картинке наглядней видно несколько примеров разбиения случайно и последовательно, зелёные строки - для тренировки, жёлтые - для валидации. 


2) обучить модель на тренировочной выборке (параметры модели и используемые предикторы во всём цикле одинаковые, те что вы пытаетесь оценить), далее спрогнозировать этой моделью эти самые данные, и поставить оценку предсказанию - точность, r^2, или что-то ещё. Я например результат регрессии округляю к классам, и использую функцию Cohen's Kappa для оценки, она из caret, мне понравилось больше чем точность классификации или точность регрессии. Но работает только для двух классов. Для трёх классов я затрудняюсь что-либо предложить, важно чтобы оценка учитывала точность по каждому классу отдельно, и выдавала некую общую оценку исходя из этого.
3) Применить обученную модель для прогноза данных из валидационой выборки, оценить прогноз той-же функцией. 
4) обе оценки (тренировка и валидация) должны быть близки между собой, и при этом как можно выше. Я использую такой код для финальной оценки - (min(score1,score2) - (max(score1,score2)-min(score1,score2))) - от минимального значения отнимается их дельта.

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

Я это применяю вместе с генетикой, которая подбирает предикторы и параметры модели, максимизируя фитнесс значение.

 

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

Как долго будет давать хорошие прогнозы такой комитет - неизвестно, но учитывая что данные для обучения были на 5 лет, то комитет будет жить явно меньше чем следующих 5 лет.
И ещё один важный момент - если после всего затраченного времени на создание комитета он будет убыточно торговать - то используемый для прогноза пакет не подходит для форекс. Может быть в нём слишком много степеней свободы, или просто не подходит. Лучше взять другой пакет. Или можно попробовать уменьшить процент данных для тренировки с 50% до ещё меньше.

 

Всё этой из советов с этого форума, и опыта.

 
Dr.Trader:

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

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

Например у вас есть данные для обучения, 5 лет. И параметры для gbm - n.trees, interaction.depth, shrinkage, n.minobsinnode, distribution, bag.fraction.

Фитнесс функция в цикле должна повторить хотя бы 50 раз:
1) поделить данные на 2 части, 50%/50%. Должны быть как рандомные выборки с помощью sample, так и последовательные (кусок для тренировки где-то из середины, а для валидации - то что его окружает в начале и в конце исходных данных). В том числе и крайние варианты, где тренировка на первой половине таблицы, а валидация на последней, и наоборот. Я считаю что для тренировки важно иметь как последовательно отобранные примеры, так и случайные. На картинке наглядней видно несколько примеров разбиения случайно и последовательно, зелёные строки - для тренировки, жёлтые - для валидации. 


2) обучить модель на тренировочной выборке (параметры модели и используемые предикторы во всём цикле одинаковые, те что вы пытаетесь оценить), далее спрогнозировать этой моделью эти самые данные, и поставить оценку предсказанию - точность, r^2, или что-то ещё. Я например результат регрессии округляю к классам, и использую функцию Cohen's Kappa для оценки, она из caret, мне понравилось больше чем точность классификации или точность регрессии. Но работает только для двух классов. Для трёх классов я затрудняюсь что-либо предложить, важно чтобы оценка учитывала точность по каждому классу отдельно, и выдавала некую общую оценку исходя из этого.
3) Применить обученную модель для прогноза данных из валидационой выборки, оценить прогноз той-же функцией. 
4) обе оценки (тренировка и валидация) должны быть близки между собой, и при этом как можно выше. Я использую такой код для финальной оценки - (min(score1,score2) - (max(score1,score2)-min(score1,score2))) - от минимального значения отнимается их дельта.

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

Я это применяю вместе с генетикой, которая подбирает предикторы и параметры модели, максимизируя фитнесс значение.

 

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

Как долго будет давать хорошие прогнозы такой комитет - неизвестно, но учитывая что данные для обучения были на 5 лет, то комитет будет жить явно меньше чем следующих 5 лет.
И ещё один важный момент - если после всего затраченного времени на создание комитета он будет убыточно торговать - то используемый для прогноза пакет не подходит для форекс. Может быть в нём слишком много степеней свободы, или просто не подходит. Лучше взять другой пакет. Или можно попробовать уменьшить процент данных для тренировки с 50% до ещё меньше.

 

Всё этой из советов с этого форума, и опыта.

Превосходное подведение итогов.

Поздравляю! 

Причина обращения: