Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 101
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Много из этого вы сами знаете и делали, но напишу полнее, чтобы исключить какие-то допущения о которых мы говорим одинаково, но делаем иначе.
Всё этой из советов с этого форума, и опыта.
Спасибо.
Отвечу по пунктам.
Нужно иметь тщательно отточенную фитнесс функцию для оценки параметров модели. Если функция оценит конкретные параметры модели и выбранные предикторы высокой оценкой - то в тесте на новых данных должны быть хорошие результаты.
(далее я буду иметь ввиду для любой оценки что чем она выше, тем лучше)
Такая функция есть. Мне не нужен R^2 (хотя по началу я ставил цель подтвердить, что рынок тупо предсказуем с точки зрения регрессии). Я использую запописную функцию оценки МО и суммы пунктов со спредом. Эта функция работает внутри цикла CV и отбирает лучшие параметры для обучения модели.
Фитнесс функция в цикле должна повторить хотя бы 50 раз:
1) поделить данные на 2 части, 50%/50%. Должны быть как рандомные выборки с помощью sample, так и последовательные (кусок для тренировки где-то из середины, а для валидации - то что его окружает в начале и в конце исходных данных). В том числе и крайние варианты, где тренировка на первой половине таблицы, а валидация на последней, и наоборот. Я считаю что для тренировки важно иметь как последовательно отобранные примеры, так и случайные. На картинке наглядней видно несколько примеров разбиения случайно и последовательно, зелёные строки - для тренировки, жёлтые - для валидации.
Это не совсем понятно. Просто не пойму какие повторы вы имеете в виду.
У меня опять же есть 99 обучающих множеств (по 10 лет). Каждое множество уникально с точки зрения примеров, но все они взяты из одного временного отрезка "до".
На каждом множестве я запускаю CV, где от 2 до 10 фолдов (их также перебираю по циклу).
Но у меня строго все фолды отделены по времени. Считаю, это незыблеммо правильным методом.
И так, 99 * кол-во комбинаций параметров CV (сотни) = сотни обученных моделей ,которые показывают на валидационных фолдах лучшую метрику качества.
Дальше есть такое же количество отложенных выборок, взятых из временного отрезка "после" (который составляет 5 лет). Они также уникальны. Я делаю nested CV: проверяю каждую полученную модель на CV опытом на отложенной выборке. Получается два вектора значений метрики качества: на CV и на отложенной выборке.
Вопрос знатокам:
в случае, если у меня конститентные данные и подходящая модель (пакет), что я ожидаю получать на отложенных выборках?
Ответ: метрика качества (МО) на отложенных выборках должна быть скоррелирована с метрикой качества на валидационных фолдах.
В реальности достичь этого большая проблема.
Зачем это нужно? Чтобы я мог уверенно отбирать лучшие модели только полагаясь на свою кроссвалидацию. Так как я уже проверил, что она дает консистентный результат с будущем.
Комитеты и прочие верхнеуровневые модели также должны пройти тест на пригодность на той отложенной выборке, на которой они никоим образом не обучались.
2) обучить модель на тренировочной выборке (параметры модели и используемые предикторы во всём цикле одинаковые, те что вы пытаетесь оценить), далее спрогнозировать этой моделью эти самые данные, и поставить оценку предсказанию - точность, r^2, или что-то ещё. Я например результат регрессии округляю к классам, и использую функцию Cohen's Kappa для оценки, она из caret, мне понравилось больше чем точность классификации или точность регрессии. Но работает только для двух классов. Для трёх классов я затрудняюсь что-либо предложить, важно чтобы оценка учитывала точность по каждому классу отдельно, и выдавала некую общую оценку исходя из этого.
3) Применить обученную модель для прогноза данных из валидационой выборки, оценить прогноз той-же функцией.
4) обе оценки (тренировка и валидация) должны быть близки между собой, и при этом как можно выше. Я использую такой код для финальной оценки - (min(score1,score2) - (max(score1,score2)-min(score1,score2))) - от минимального значения отнимается их дельта.
В конце каждой итерации получится некая оценка, и из-за случайных разбиений данных она может варьироваться от -1 до 1 (или в другом интервале, зависит от использемой функции). Считаем их среднее значение, и возвращаем как результат фитнесс функции. Дополнительно я от фитнесс значения отнимаю небольшое число (0.0001) за каждый используемый предиктор, чтобы штрафовать модель за слишком большой набор необходимых данных.
Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?
Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?
Если все так, то мы прямо близко все делаем.
Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?
Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?
Если все так, то мы прямо близко все делаем.
Что означает "корреляция"? "+1"? "-1"? Чего с чем?
Вот 50 результатов прогона мне понятны. На 50 результатах уже можно применять статистику, считать среднюю, отклонения, а главное доверительный интервал....
результат торговли за вчера можно посмотреть?
YНе скажу что идеально, но всётаки модель на 80% обобщилась....
Что означает "корреляция"? "+1"? "-1"? Чего с чем?
Вот 50 результатов прогона мне понятны. На 50 результатах уже можно применять статистику, считать среднюю, отклонения, а главное доверительный интервал....
Не, вы не вникли, СС.
Корреляция метрики качества на отложенной выборки с метрикой качества на кроссвалидации (типа, тестовая выборка, которая оценивает обученную модель). Если у нас сотни обученных моделей, получается два вектора метрик качества.
Пример: точность классификации на кроссвалидации 57%, на отложенной выборке 50%. И таких значений сотни (тысячи). У нас же сотни и тысячи моделей обученных есть. Вот и возникает вопрос.
Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?
Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?
Если все так, то мы прямо близко все делаем.
В коде это как-то так:
В коде это как-то так:
Да просто скажите словами, вы сравниваете какие выборки? Есть обучение, есть тест (многократные обучение и тест = кроссвалидация). Есть валидация (отложенная выборка).
У меня три столбца:
обучение все. ---- тестовые фолды кроссвал. ----- отложенные наблюдения
0,7 0,65 0,55
... .... ....
То, что обучение с тестом коррелирует, это ерунда, потому что выбранная модель в резульате обучается на всем множестве, части которого входили в тест.
А вот то ,что тестовые оценки коррелируют с отложенными - это для меня важно.
Вашими терминами, я сравниваю обучение и тест.
Валидационной (отложенной) выборки у меня, получается, при обучении модели нету. Отложенной выборкой у меня выступят новые данные, которыми будет торговать модель после обучения.
То, что обучение с тестом коррелирует, это ерунда
Поэтому я и делаю многократное разбиение данных и многократное обучение модели заново. Если параметры модели неудачные, то средний результат на тестовых выборках будет гораздо ниже среднего результата на обучающих выборках
Вашими терминами, я сравниваю обучение и тест.
Валидационной (отложенной) выборки у меня, получается, при обучении модели нету. Отложенной выборкой у меня выступят новые данные, которыми будет торговать модель после обучения.
Поэтому я и делаю многократное разбиение данных и многократное обучение модели заново. Если параметры модели неудачные, то средний результат на тестовых выборках будет гораздо ниже среднего результата на обучающих выборках
В том, что вы делаете есть цимус.
Однако вы попробуйте еще сделать отложенную выборку. Это же классика. Train, Test, Validation.
И еще усложните процедуру. Для каждой модели, которая как-бы хорошо работает с точки зрения обучения и тестирования, назовем эту модель X, сделайте валидацию на отложенных данных. Вы таким образом получаете представление о том, верно вы выбираете модель или нет, используя только обучение и тест. Сделайте много моделей с разными параметрами, выберите лучшие (10, 100, 1000). Провалидируйте. Вы поймете, ваша "лучшая" метрика отражается на будущих данных или нет. Только после этого в бой.