Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 100
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В самом начале вы абсалютно правы. Наконецто появились здравомыслящие люди в ветке. Да классификация оценивает патерн, на предмет истиности или ложи, ну или говорит незенаю, как предложил Решетов, А уже сам патерн несёт в себе предсказательную составляющую, и важен не сам патерн, а именно реакция рынка на него. И если эта реакция идентичка как в обучении то сеть сделает правильный вывод. Так что как то так....
Что ж делать то? Наивный Бесовский классификатор пытаться натянуть, или жПредикторы изучать?
xЧто за классификатор Бесовский???? Не понял, Сейчас Решетов Сделал жутко крутую штуку, по принципу вкл, выкл, бабло. А вы всё паритесь со своим R. Делая кучу не нужным манипуляций с данными. И что за пример с ирисом???? Интересно посмотреть как его Предиктор раскусит....
Да я об R только здесь узнал. А в слове Баесовский классификатор случайно пропустил букву (может по Фрейду). А что программа Решетова крута, не спорю. Про ирис не знаю.
xЧто за классификатор Бесовский???? Не понял, Сейчас Решетов Сделал жутко крутую штуку, по принципу вкл, выкл, бабло. А вы всё паритесь со своим R. Делая кучу не нужным манипуляций с данными. И что за пример с ирисом???? Интересно посмотреть как его Предиктор раскусит....
результат торговли за вчера можно посмотреть?
IШайтан машина Решетова :-)
Почему индикаторы никогда не работали и не будут работать? Мое мнение...
Много из этого вы сами знаете и делали, но напишу полнее, чтобы исключить какие-то допущения о которых мы говорим одинаково, но делаем иначе.
Нужно иметь тщательно отточенную фитнесс функцию для оценки параметров модели. Если функция оценит конкретные параметры модели и выбранные предикторы высокой оценкой - то в тесте на новых данных должны быть хорошие результаты.
(далее я буду иметь ввиду для любой оценки что чем она выше, тем лучше)
Например у вас есть данные для обучения, 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% до ещё меньше.
Всё этой из советов с этого форума, и опыта.
Много из этого вы сами знаете и делали, но напишу полнее, чтобы исключить какие-то допущения о которых мы говорим одинаково, но делаем иначе.
Нужно иметь тщательно отточенную фитнесс функцию для оценки параметров модели. Если функция оценит конкретные параметры модели и выбранные предикторы высокой оценкой - то в тесте на новых данных должны быть хорошие результаты.
(далее я буду иметь ввиду для любой оценки что чем она выше, тем лучше)
Например у вас есть данные для обучения, 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% до ещё меньше.
Всё этой из советов с этого форума, и опыта.
Превосходное подведение итогов.
Поздравляю!