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

 
Dr.Trader:

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


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

 Спасибо.

Отвечу по пунктам. 

 

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

 Такая функция есть. Мне не нужен R^2 (хотя по началу я ставил цель подтвердить, что рынок тупо предсказуем с точки зрения регрессии). Я использую запописную функцию оценки МО и суммы пунктов со спредом. Эта функция работает внутри цикла CV и отбирает лучшие параметры для обучения модели.

 

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

 Это не совсем понятно. Просто не пойму какие повторы вы имеете в виду.

У меня опять же есть 99 обучающих множеств (по 10 лет). Каждое множество уникально с точки зрения примеров, но все они взяты из одного временного отрезка "до".

На каждом множестве я запускаю CV, где от 2 до 10 фолдов (их также перебираю по циклу). 

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

И так, 99 * кол-во комбинаций параметров CV (сотни) = сотни обученных моделей ,которые показывают на валидационных фолдах лучшую метрику качества.

Дальше есть такое же количество отложенных выборок, взятых из временного отрезка "после" (который составляет 5 лет). Они также уникальны. Я делаю nested CV: проверяю каждую полученную модель на CV опытом на отложенной выборке. Получается два вектора значений метрики качества: на CV и на отложенной выборке.

Вопрос знатокам:

в случае, если у меня конститентные данные и подходящая модель (пакет), что я ожидаю получать на отложенных выборках?

Ответ: метрика качества (МО) на отложенных выборках должна быть скоррелирована с метрикой качества на валидационных фолдах.

 В реальности достичь этого большая проблема.

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

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

 
Dr.Trader:


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

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


Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?

Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?

Если все так, то мы прямо близко все делаем. 

 
Alexey Burnakov:

Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?

Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?

Если все так, то мы прямо близко все делаем. 

Что означает "корреляция"? "+1"? "-1"? Чего с чем?

Вот 50 результатов прогона мне понятны. На 50 результатах уже можно применять статистику, считать среднюю, отклонения, а главное доверительный интервал.... 

 
mytarmailS:

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

YНе скажу что идеально, но всётаки модель на 80% обобщилась....

 

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

Что означает "корреляция"? "+1"? "-1"? Чего с чем?

Вот 50 результатов прогона мне понятны. На 50 результатах уже можно применять статистику, считать среднюю, отклонения, а главное доверительный интервал.... 

Не, вы не вникли, СС.

 

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

 

Пример: точность классификации на кроссвалидации 57%, на отложенной выборке 50%. И таких значений сотни (тысячи). У нас же сотни и тысячи моделей обученных есть. Вот и возникает вопрос.

 
Alexey Burnakov:

Поясните, пож., тренировка - это имеется в виду оценка на фолдах кроссвалидации?

Близость оценко тренировки и валидации - имеет под собой корреляцию отложенной выборки с кроссвалидационным результатом?

Если все так, то мы прямо близко все делаем. 

В коде это как-то так:

fitness <- function(inputTestPredictors, inputTestModelParams) {
    allScores <- c()
    for(i in 1:50){
        rowSampleTrain <- sample(nrow(trainData), round(nrow(trainData)*0.5))
        rowSampleValidate <- setdiff(1:nrow(trainData), rowSampleTrain)
        #ещё нужно добавить с вероятностью 50% - деление строк просто по порядку, без sample

        model <- TrainModel(target ~., data=trainData[rowSampleTrain, inputTestPredictors], p1 = inputTestModelParams$parameter1, p2 = inputTestModelParams$parameter2)
        #вместо TrainModel - какойто пакет из R - rf, gbm, nnet, lm, ...

        predictResultsForTrain <- predict(object = model, newdata=trainData[rowSampleTrain, inputTestPredictors])
        predictResultsForValidate <- predict(object = model, newdata=trainData[rowSampleValidate, inputTestPredictors])

        score1 <- CalcPreditionQuality(predictResultsForTrain, trainData[rowSampleTrain, "target"]))
        score2 <- CalcPreditionQuality(predictResultsForValidate , trainData[rowSampleValidate, "target"]))
        score_final <- min(score1,score2) - (max(score1,score2) - min(score1, score2))
        allScores <- c(allScores, score_final)
        # CalcPreditionQuality - функция для оценки качества прогноза относительно ожидаемых значений. Например точность, или F-score, или каппа
    }
    predictorCountPenalty <- sum(inputTestPredictors==TRUE) * 0.0001
    return(mean(allScores) - predictorCountPenalty)
} 
 
Элементы машинного обучения на практике применяли не к обучению на истории торгов, а на истории использования комплекса сигналов\опций внутри собственных сессий роботизированной торговле, чтобы провести кореляцию к срабатыванию тех или иных моделей на "живом" рынке в тех или иных конфигурациях\состоянии рынка\сингналах.
 
Dr.Trader:

В коде это как-то так:

Да просто скажите словами, вы сравниваете какие выборки? Есть обучение, есть тест (многократные обучение и тест = кроссвалидация). Есть валидация (отложенная выборка).

У меня три столбца:

обучение все. ---- тестовые фолды кроссвал. ----- отложенные наблюдения

0,7 0,65 0,55

... .... ....

 

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

А вот то ,что тестовые оценки коррелируют с отложенными - это для меня важно. 

 

Вашими терминами, я сравниваю обучение и тест.
Валидационной (отложенной) выборки у меня, получается, при обучении модели нету. Отложенной выборкой у меня выступят новые данные, которыми будет торговать модель после обучения.

То, что обучение с тестом коррелирует, это ерунда

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

 
Dr.Trader:

Вашими терминами, я сравниваю обучение и тест.
Валидационной (отложенной) выборки у меня, получается, при обучении модели нету. Отложенной выборкой у меня выступят новые данные, которыми будет торговать модель после обучения.

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

В том, что вы делаете есть цимус.

Однако вы попробуйте еще сделать отложенную выборку. Это же классика. Train, Test, Validation.

И еще усложните процедуру. Для каждой модели, которая как-бы хорошо работает с точки зрения обучения и тестирования, назовем эту модель X, сделайте валидацию на отложенных данных. Вы таким образом получаете представление о том, верно вы выбираете модель или нет, используя только обучение и тест. Сделайте много моделей с разными параметрами, выберите лучшие (10, 100, 1000). Провалидируйте. Вы поймете, ваша "лучшая" метрика отражается на будущих данных или нет. Только после этого в бой. 

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