English
preview
Архитектура машинного обучения для MetaTrader 5 (Часть 12): Калибровка вероятностей для финансового машинного обучения

Архитектура машинного обучения для MetaTrader 5 (Часть 12): Калибровка вероятностей для финансового машинного обучения

MetaTrader 5Торговые системы |
72 0
Patrick Murimi Njoroge
Patrick Murimi Njoroge

Содержание

  1. Почему классификаторы не откалиброваны
  2. Метрики калибровки
  3. Методы калибровки
  4. Контракт финансовых данных: калибровка без утечек
  5. Модуль afml.calibration
  6. Диагностический конвейер
  7. Заключение
  8. Прикреплённые файлы


Введение

Методы определения размера ставки из Части 10 принимают прогнозную вероятность и возвращают размер позиции. Множитель Келли из Части 11 использует ту же вероятность и корректирует позицию с учётом асимметрии выплат. Оба расчёта настолько хороши, насколько хороша вероятность, которую они получают.

Случайный лес, который прогнозирует вероятность 0,68 при фактической доле выигрышей 0,55, не просто неточен. Он систематически чрезмерно уверен, и эта чрезмерная уверенность напрямую попадает во все последующие расчёты размера позиции. Функция get_signal сопоставляет завышенную вероятность с более высоким z-score и, следовательно, с большей позицией. Доля Келли растёт вместе с прогнозной вероятностью. Даже небольшая перепостановка по Келли в каждой сделке в итоге разрушит банкролл, который выдержал бы те же сделки при корректном размере позиции.

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

В этой статье мы рассматриваем модуль afml.calibration и его роль в конвейере. Вы узнаете: (1) почему классификаторы на основе деревьев склонны к чрезмерной уверенности и как это видно на диаграмме надёжности; (2) что измеряют оценка Брайера, ECE и MCE; (3) когда использовать изотоническую регрессию вместо масштабирования Платта; (4) как калибровать без временной утечки, используя внефолдовые прогнозы из PurgedKFold; и (5) как некалиброванность распространяется от вероятностей к размерам позиций, P&L и распределениям Sharpe по путям CPCV.

Эта статья является Частью 12 серии "Архитектура машинного обучения MetaTrader 5" . Часть 10 и Часть 11 создали набор инструментов определения размера ставки, в который затем передаётся шаг калибровки из этой статьи. Статья «Единый конвейер валидации» утвердила PurgedKFold как корректное разбиение CV, а CPCV — как корректную среду бэктестирования; оба подхода используются здесь для подгонки калибровки и финальных диагностических графиков. Часть 8 и Часть 9 построили инфраструктуру HPO, которая дала модель, выходы которой калибруются в этой статье.


Почему классификаторы не откалиброваны

Проблема чрезмерной уверенности

Классификатор считается хорошо откалиброванным, если среди всех наблюдений, которым он присвоил прогнозную вероятность 0,70, примерно 70% действительно относятся к положительному классу. Прогнозная вероятность и наблюдаемая частота совпадают. Это свойство называется калибровкой и отличается от точности. Классификатор может правильно ранжировать наблюдения, но при этом систематически быть чрезмерно уверенным или недостаточно уверенным в назначаемых абсолютных значениях вероятности.

Классификаторы на основе деревьев, такие как случайные леса и деревья градиентного бустинга, структурно склонны к чрезмерной уверенности. Причина заключается в том, как они формируют оценки вероятности. Случайный лес усредняет доли голосов по входящим в него деревьям. Каждое дерево, обученное минимизировать неоднородность, обычно создаёт оценки на уровне листьев, сгруппированные около 0 и 1. Среднее по ансамблю таких экстремальных оценок оказывается смещённым к хвостам. Истинная доля выигрышей 0,55 часто отображается в прогнозную вероятность 0,65 или 0,70. У деревьев градиентного бустинга есть родственная, но немного иная проблема. Они оптимизируют целевую функцию в логит-пространстве, которое откалибровано в пространстве log-odds, а не вероятностей. Затем финальное сигмоидное преобразование выдаёт слишком экстремальные вероятности, когда число раундов бустинга велико относительно реального сигнала в данных.

В финансовом машинном обучении эта проблема усиливается. Отношение сигнал/шум низкое, модели обучаются на ограниченном числе независимых наблюдений, поскольку одновременность меток уменьшает эффективный размер выборки, а вневыборочная точность обычно находится в диапазоне 0,52–0,65, где разрыв между прогнозной и истинной вероятностью максимален. Модель с реальным, но умеренным преимуществом (точность около 0,57) часто присваивает вероятности в диапазоне 0,60–0,80, подразумевая гораздо более сильную уверенность, чем реально поддерживают данные.

Диаграмма надёжности

Диаграмма надёжности делает эту чрезмерную уверенность видимой. По оси x показана прогнозная вероятность, сгруппированная по бинам. По оси y показана наблюдаемая доля положительных исходов в каждом бине. Идеально откалиброванный классификатор даёт прямую диагональную линию от (0,0) до (1,1). Чрезмерно уверенный классификатор даёт кривую, прогибающуюся ниже диагонали. Наблюдениям с прогнозной вероятностью 0,70 фактически соответствует доля выигрышей ближе к 55%. Разрыв между диагональю и калибровочной кривой прямо показывает, насколько уверенность модели превышает то, что поддерживают данные.

Бутстрэп-доверительные интервалы вокруг кривой крайне важны в финансовых приложениях. При небольшом числе независимых наблюдений из-за одновременности меток кривая надёжности получается шумной. Одноточечная оценка качества калибровки ненадёжна. bootstrap_reliability_ci генерирует 95% доверительные полосы путём ресэмплинга пар «наблюдение–прогноз» с возвращением. Это даёт статистически честное представление о том, где калибровочная кривая оценена надёжно, а где нет.

Надёжность калибровки

Рисунок 1. Двухпанельная иллюстрация надёжности калибровки до и после изотонической калибровки

  • Слева — исходные вероятности: калибровочная кривая случайного леса почти везде проходит ниже диагонали. Наблюдениям с прогнозной вероятностью 0,70 соответствует фактическая доля выигрышей ближе к 0,55. Бутстрэп-полосы 95% доверия показаны затенённой областью вокруг кривой.
  • Справа — калиброванные вероятности (изотоническая калибровка): после изотонической калибровки с использованием внефолдовых прогнозов через PurgedKFold, кривая близко следует диагонали на всех уровнях вероятности. Доверительные полосы сужаются в диапазоне умеренных вероятностей, где наблюдений больше всего.


Метрики калибровки

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

Оценка Брайера

Оценка Брайера — это среднеквадратичная ошибка между прогнозными вероятностями и бинарными исходами:

Brier = (1/N) * sum((p_i - y_i)**2)

Она вознаграждает резкость (вероятности, близкие к 0 или 1) и штрафует некалиброванность. Модель, которая прогнозирует 0,5 для каждого наблюдения, получает оценку Брайера 0,25 на сбалансированном наборе данных. Модель, которая одновременно хорошо откалибрована и уверена, получает оценку Брайера ниже этого базового уровня. Оценка Брайера раскладывается на компонент калибровки и компонент разрешающей способности. Изотоническая калибровка напрямую улучшает компонент калибровки, оставляя разрешающую способность неизменной.

Ожидаемая ошибка калибровки

ECE измеряет средневзвешенную абсолютную разницу между средней прогнозной вероятностью и наблюдаемой частотой по бинам:

ECE = sum_b (|B_b| / N) * |mean_pred_b - mean_true_b|

где B_b — множество наблюдений в бине b. ECE взвешивается по размеру бина, поэтому бины с большим числом наблюдений сильнее влияют на итоговую оценку. Для финансовых приложений квантильное разбиение часто предпочтительнее равномерного. Распределение прогнозных вероятностей обычно сосредоточено около базовой частоты, и равномерные бины оставляют большинство интервалов пустыми, сжимая почти всё в два-три центральных бина.

Максимальная ошибка калибровки

MCE измеряет наихудшую абсолютную разницу по всем бинам:

MCE = max_b |mean_pred_b - mean_true_b|

MCE — консервативная метрика. Она отражает не среднее значение, а худшую область диапазона вероятностей. В финансовых приложениях худшей областью обычно является хвост высокой уверенности, где модель назначает 0,75–0,90, но фактически даёт долю выигрышей 0,58–0,65. Именно эта область создаёт самые крупные размеры позиций через get_signal и самые высокие доли Келли. MCE выявляет проблемы в этом хвосте, которые ECE может скрыть из-за усреднения.

Совместное использование метрик

Три метрики отвечают на разные вопросы. Оценка Брайера показывает, полезен ли вероятностный выход модели для принятия решений в целом. ECE показывает, насколько в среднем вероятности отклоняются от наблюдаемых частот. MCE показывает, какая область вероятностей является худшей и насколько сильно она некалибрована. Производственный конвейер должен отслеживать все три. Модель с хорошей ECE, но плохой MCE имеет конкретную область чрезмерной уверенности, которая при срабатывании будет давать неправильно подобранные размеры позиций. Модель с хорошей MCE, но плохой оценкой Брайера хорошо откалибрована, но не резка: её вероятности точны, но малоинформативны.


Методы калибровки

Изотоническая регрессия

Изотоническая регрессия подбирает неубывающую ступенчатую функцию, которая отображает исходные прогнозные вероятности в калиброванные вероятности. Она минимизирует сумму квадратов отклонений между ступенчатой функцией и истинными метками при условии, что функция монотонно не убывает. В результате получается кусочно-постоянное полностью непараметрическое отображение. Оно не делает предположений о функциональной форме некалиброванности и может исправлять произвольные калибровочные кривые, если они монотонны относительно исходных вероятностей.

Изотоническая регрессия является предпочтительным методом для финансового ML по трём причинам. Во-первых, она не делает распределительных предположений. Структура некалиброванности случайного леса, обученного на финансовых данных, не является лог-линейной. Изотоническая регрессия адаптируется к любой форме некалиброванности. Во-вторых, она сохраняет ранжирование прогнозов. Если наблюдение A имеет более высокую исходную вероятность, чем наблюдение B, оно будет иметь и более высокую калиброванную вероятность. Калибратор не меняет то, в каких наблюдениях модель наиболее уверена; он меняет только абсолютные значения вероятности. В-третьих, ступенчатая функция, создаваемая изотонической регрессией, поддаётся аудиту. Каждая точка калибровки сопоставляет конкретный диапазон исходных вероятностей с конкретным калиброванным значением, и это отображение можно проверить.

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

Масштабирование Платта

Масштабирование Платта подбирает логистическую регрессию к исходным оценкам, отображая их в калиброванные вероятности через сигмоидное преобразование:

p_calibrated = 1 / (1 + exp(-(A * score + B)))

где A и B подбираются методом максимального правдоподобия на калибровочном наборе. Масштабирование Платта предполагает, что некалиброванность лог-линейна. Это предположение достаточно хорошо работает для машин опорных векторов и некоторых деревьев градиентного бустинга, но плохо подходит для долей голосов случайного леса. Для случайного леса, калибровочная кривая которого имеет S-образное отклонение от диагонали, линейное отображение исправит средний диапазон, но оставит хвосты частично некалиброванными.

Масштабирование Платта следует предпочитать изотонической регрессии только тогда, когда калибровочный набор мал (менее 200 наблюдений), а некалиброванность примерно лог-линейна. Во всех прочих случаях, встречающихся в финансовом ML, изотоническая регрессия даёт более точный и более интерпретируемый калибратор.

Сравнение двух методов

 

Изотоническая регрессия

Масштабирование Платта

Функциональная форма Непараметрическая ступенчатая функция Логистическая (сигмоида)
Предположение Монотонные исходные вероятности Лог-линейная некалиброванность
Минимальный объём калибровочных данных Несколько сотен наблюдений Десятки наблюдений
Предпочтительно для Random Forest Да Нет
Ранжирование сохраняется Да Да
Риск переобучения Умеренный (ступенчатая функция может быть шумной) Низкий (только два параметра)


Контракт финансовых данных: калибровка без утечек

Почему стандартные процедуры калибровки не работают на финансовых данных

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

Во-первых, случайное разделение на обучение и калибровку допускает утечку информации через границу purge. Метки, пересекающие точку разделения, относятся к обеим сторонам. Обучающий набор содержит часть баров периода удержания метки, а калибровочный набор — другую часть. Модель уже видела рыночные условия, которые определят, будет ли прогноз на калибровочном наборе верным. Калибровка, подогнанная по таким прогнозам, будет оптимистически смещена.

Во-вторых, даже упорядоченное по времени разделение не соблюдает embargo. Последние наблюдения обучающего набора имеют общую атрибуцию доходности с первыми наблюдениями калибровочного набора. Без достаточного embargo на границе фолда purging и embargo должны гарантировать, что калибровочный набор не загрязнён событиями, которые модель неявно усвоила через перекрывающиеся метки.

Правильная процедура: внефолдовая калибровка через PurgedKFold

Правильный подход использует внефолдовые (OOF) прогнозы из PurgedKFold. Для каждого фолда модель обучается на обучающем разбиении, прогнозирует на валидационном разбиении, а затем валидационные прогнозы объединяются в полноразмерный OOF-массив. Этот OOF-массив обладает тремя свойствами: (1) каждый прогноз создан моделью, которая не обучалась на данном наблюдении; (2) purging предотвращает утечку меток через границы фолдов; (3) embargo уменьшает временное загрязнение от соседних баров. Затем калибратор подгоняется по этим OOF-прогнозам относительно истинных меток.

from afml.calibration.calibration import CalibratorCV
from afml.cross_validation.cross_validation import PurgedKFold

cv = PurgedKFold(n_splits=5, t1=events['t1'], pct_embargo=0.01)

# Wrap the base classifier — CalibratorCV is itself an sklearn estimator
calibrated_clf = CalibratorCV(estimator=clf, cv=cv)

# fit() does three things in sequence:
#   1. generates OOF predictions via PurgedKFold
#   2. fits a calibration map (isotonic by default; Platt via method='platt')
#   3. refits the base estimator on the full dataset
calibrated_clf.fit(X, y, sample_weight=sample_weight)

# OOF probabilities are stored for diagnostics (used in Section 6)
oof_probs_raw = calibrated_clf.oof_probs_

# At inference time: predict_proba applies the fitted calibration map automatically
calibrated_probs = calibrated_clf.predict_proba(X_new)[:, 1]

Веса выборки при калибровке

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


Модуль afml.calibration

Модуль имеет два слоя. Основной интерфейс — CalibratorCV, sklearn-совместимый оцениватель. Он (1) генерирует OOF-прогнозы через PurgedKFold, (2) подбирает калибровочное отображение (по умолчанию изотоническое; Платт через method='platt') и (3) переобучает базовый оцениватель на полном наборе данных. Поскольку он реализует стандартный интерфейс оценивателя, его можно компоновать с любым sklearn-конвейером, поиском по сетке или циклом кросс-валидации. Слой метрик и визуализации предоставляет отдельные функции — brier_score, expected_calibration_error, maximum_calibration_error, calibration_report, plot_reliability, и plot_reliability_with_ci — которые принимают numpy-массивы и возвращают скалярные значения или графики. fit_platt_scaling доступен как низкоуровневый конструктор для масштабирования Платта при вызове вне интерфейса CalibratorCV .

from afml.calibration.calibration import (
    CalibratorCV,
    brier_score,
    expected_calibration_error,
    maximum_calibration_error,
    calibration_report,
    plot_reliability_with_ci,
)
from afml.cross_validation.cross_validation import PurgedKFold
import matplotlib.pyplot as plt

cv = PurgedKFold(n_splits=5, t1=events['t1'], pct_embargo=0.01)

# Step 1: Fit — OOF generation, calibration map fitting, and base refit in one call
calibrated_clf = CalibratorCV(estimator=clf, cv=cv)
calibrated_clf.fit(X, y, sample_weight=sample_weight)

# Step 2: Collect raw OOF probs (stored by fit()) and calibrated equivalents.
# For method='isotonic' (default), calibrator_ is an IsotonicRegression: use .predict().
# For method='platt', calibrator_ is a LogisticRegression: use .predict_proba(raw.reshape(-1,1))[:,1].
oof_probs_raw = calibrated_clf.oof_probs_
oof_probs_cal = calibrated_clf.calibrator_.predict(oof_probs_raw)

# Step 3: Evaluate
report = calibration_report(y, oof_probs_raw, oof_probs_cal)
print(report)

# Step 4: Plot reliability diagram with bootstrap CI
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
plot_reliability_with_ci(y, oof_probs_raw, ax=axes[0],
                         title="Raw Probabilities", random_state=42)
plot_reliability_with_ci(y, oof_probs_cal, ax=axes[1],
                         title="Calibrated Probabilities", random_state=42)

Интеграция в конвейер

В рамках производственного конвейера, созданного в Части 9, калибровка активируется передачей calibrate=True в ModelDevelopmentPipeline.run(). После того как clf_hyper_fit возвращает лучший оцениватель, calibrate_model() вызывается автоматически. Он создаёт CalibratorCV вокруг этого оценивателя, используя PurgedKFold с теми же n_splits и pct_embargo что и на шаге HPO, затем вызывает fit() на полном обучающем наборе. С этого момента self.best_model является подогнанным экземпляром CalibratorCV поэтому все последующие вызовы predict_proba() возвращают калиброванные вероятности без изменения вызывающего кода.

# Run the full pipeline with calibration enabled
model, features, metrics, config = pipeline.run(
    calibrate=True,
)

# pipeline.calibrator holds the fitted CalibratorCV for post-hoc diagnostics
valid = ~np.isnan(pipeline.calibrator.oof_probs_)
oof_brier = np.mean(
    (pipeline.calibrator.oof_probs_[valid] - y.values[valid]) ** 2
)

# Reliability diagram directly from OOF predictions
plot_reliability_with_ci(
    y, pipeline.calibrator.oof_probs_,
    title="OOF — Raw Probabilities",
)
plot_reliability_with_ci(
    y, pipeline.calibrator.calibrator_.predict(
           pipeline.calibrator.oof_probs_[valid]),
    title="OOF — Calibrated Probabilities",
)

После завершения pipeline.run() заполняются два атрибута. pipeline.best_model — это CalibratorCV экземпляр, используемый для всех последующих применений модели. pipeline.calibrator содержит тот же объект для диагностического доступа, включая диаграммы надёжности, сравнения оценки Брайера и исходные OOF-вероятности, доступные через calibrator.oof_probs_.

Есть одно соображение по ONNX, когда в конвейере установлен export_onnx=True . CalibratorCV не имеет сопоставления с оператором ONNX, поэтому _save_all_artifacts() разворачивает калибратор и экспортирует внутренний sklearn-оцениватель как источник ONNX. Изотоническое отображение отдельно сохраняется как сериализованный объект IsotonicRegression . На этапе развертывания в MetaTrader 5 ONNX-модель выдаёт исходные вероятности; они проходят через calibrator.calibrator_.predict() как шаг постобработки перед тем, как вероятности попадут в слой определения размера ставки.


Диагностический конвейер

Запуск шага калибровки отдельно показывает, что исходные вероятности некалиброваны, а изотоническая регрессия их исправляет. Это необходимо, но недостаточно. Аргумент становится убедительным только тогда, когда эффект прослеживается по всей цепочке: от вероятностей к размерам позиций, затем к P&L и, наконец, к распределениям Sharpe по путям.

Цепочка распространения некалиброванности

Цепочка распространения некалиброванности от исходных вероятностей к Sharpe по путям

Следующие шесть рисунков делают эту цепочку явной.

Распределение размера позиции

Поскольку get_signal является монотонной функцией вероятности, систематический сдвиг распределения вероятностей создаёт предсказуемый сдвиг распределения размеров позиций. Чрезмерно уверенные вероятности, сосредоточенные в диапазоне 0,60–0,80, отображаются в выходы get_signal в диапазоне 0,20–0,60. Диаграмма рассеяния исходных и калиброванных размеров позиций показывает, что почти каждое наблюдение находится выше диагонали равного размера, подтверждая, что исходная модель систематически завышает размер позиции относительно калиброванной.

Распределение размера позиции — исходные против калиброванных

Рисунок 2. Трёхпанельная иллюстрация распределения размера позиции

  • Слева — гистограмма : get_signal для исходных (оранжевые) и калиброванных (зелёные) вероятностей. Исходное распределение везде сдвинуто вправо; калибровка возвращает его ближе к центру.
  • В центре — диаграмма рассеяния: исходный и калиброванный размер позиции для каждого наблюдения. Точки выше диагонали представляют наблюдения, для которых исходная модель завышает размер позиции; почти все наблюдения находятся выше неё.
  • Справа — средний размер позиции по децилям: средний размер позиции в каждом дециле вероятности для исходной и калиброванной моделей. Избыточный размер в верхних децилях, где чрезмерная уверенность максимальна, отмечен отдельно.

Анализ преимущества по децилям

Завышение размера становится опасным в сочетании с тем фактом, что высоковероятностные прогнозы исходной модели не соответствуют пропорционально высоким фактическим долям выигрышей. Анализ преимущества по децилям делит наблюдения на десять бинов по прогнозной вероятности и строит среднюю прогнозную вероятность против фактической доли выигрышей в каждом бине. Хорошо откалиброванная модель даёт диаграмму рассеяния, где бины следуют диагонали. Чрезмерно уверенная модель создаёт бины в верхних децилях, которые заметно расположены выше неё: модель прогнозирует 0,70, но фактически даёт 0,57.

Анализ преимущества по децилям

Рисунок 3. Анализ преимущества по децилям (размер пузыря пропорционален числу наблюдений в дециле)

Долина перепостановки

Теория Келли даёт аналитический механизм, связывающий чрезмерно уверенные вероятности с разрушением P&L. Ожидаемая логарифмическая скорость роста стратегии ставок достигает максимума при истинной оптимальной доле Келли и падает по обе стороны: резко справа (перепостановка) и постепенно слева (недопостановка). Поскольку даже небольшая перепостановка по Келли на каждом наблюдении приводит к итоговому разорению через накопление отрицательного роста, правый нисходящий склон является опасной зоной. Чрезмерно уверенная модель стабильно рекомендует доли Келли выше оптимума, помещая стратегию на этот склон почти в каждой сделке.

Долина перепостановки по Келли

Рисунок 4. Долина перепостановки

Влияние на P&L

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

Влияние калибровки на P&L

Рисунок 5. Влияние на P&L

Устойчивость по путям CPCV

Одна симуляция кривой средств подвержена зависимости от пути. Результат отражает конкретную последовательность прогнозов модели, а не общее поведение калиброванной стратегии по сравнению с некалиброванной. Распределение путей CPCV из статьи о едином конвейере валидации решает эту проблему. φ[N, k] независимых путей симулируются, каждый со свежей последовательностью OOF-прогнозов из другой комбинации обучающих фолдов. Распределение коэффициента Sharpe по путям является надлежащей доказательной базой для оценки того, даёт ли калибровка реальное структурное улучшение или просто сдвигает один удачный путь.

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

Распределение Sharpe по путям CPCV — исходные против калиброванных

Рисунок 6. Двухпанельная иллюстрация распределения Sharpe по путям CPCV

  • Слева — Sharpe по каждому пути: коэффициент Sharpe по пути CPCV для исходных (оранжевые) и калиброванных (зелёные) вероятностей. Калиброванные пути в среднем выше и менее вариативны.
  • Справа — распределение: ядерная плотность Sharpe по путям для всех φ[N, k] путей. Калибровка сдвигает среднее, сужает стандартное отклонение и увеличивает долю путей с положительным Sharpe. PBO, рассчитанный по калиброванной матрице доходностей, ниже, что подтверждает: улучшение не является артефактом выбора пути.


Заключение

Аргумент в пользу калибровки в этом конвейере состоит не в том, что некалиброванные модели плохо ранжируют наблюдения. Случайные леса с достойными признаками действительно ранжируют наблюдения правильно. Реальная проблема в том, что абсолютные значения вероятности, которые они назначают, не соответствуют долям выигрышей, подразумеваемым этими вероятностями. Каждый метод определения размера позиции из частей 10 и 11 напрямую преобразует эти абсолютные значения в размеры позиций и доли Келли. Диагностический конвейер в разделе 6 количественно оценивает стоимость этого несоответствия на каждом этапе цепочки: пространство вероятностей, пространство позиций, P&L и распределение Sharpe по путям. Исправление — изотоническая калибровка по внефолдовым прогнозам через PurgedKFold — представляет собой один вызов функции, который не добавляет параметров модели, не вводит новых степеней свободы и создаёт отображение, которое можно полностью аудировать и периодически переоценивать по мере изменения распределения данных.

Ключевые выводы:

  • Калибровка и дискриминационная способность независимы. Модель, которая правильно ранжирует наблюдения, всё равно может быть чрезмерно уверенной. Оценка Брайера, ECE и MCE измеряют калибровку; AUC измеряет дискриминационную способность. Важны оба аспекта, и высокий AUC не оправдывает плохую калибровку, когда абсолютные значения вероятности используются для определения размера позиции.
  • Используйте method='isotonic' для классификаторов на основе деревьев. Масштабирование Платта предполагает лог-линейную некалиброванность, что не выполняется для случайных лесов. Изотоническая регрессия непараметрична и адаптируется к фактической форме некалиброванности. Используйте method='platt' только тогда, когда эффективный размер OOF-выборки после purging и embargo падает ниже примерно 200 наблюдений.
  • Калибруйте через PurgedKFold, а не через случайный отложенный набор. Случайное калибровочное разбиение допускает утечку информации через границу purge. OOF-прогнозы через PurgedKFold с корректным embargo — единственный допустимый источник калибровочных данных для финансовых данных с перекрывающимися метками.
  • Периодически переоценивайте калибратор. Отображение исходных вероятностей в калиброванные отражает структуру некалиброванности модели на распределении обучающих данных. После значительного сдвига режима или после переобучения модели на существенно другом наборе данных калибратор следует подогнать заново. Устаревшая калибровка лучше, чем её отсутствие, но она не является надёжной бесконечно.
  • Отслеживайте все три метрики. ECE измеряет средний разрыв; MCE измеряет худшую область; оценка Брайера измеряет общую полезность вероятностей для принятия решений. Стратегия с хорошей ECE, но высокой MCE имеет конкретную область вероятностей, создающую неправильно подобранные размеры позиций, которые усреднённые метрики не выявят.


Прикреплённые файлы

Файл Описание
__init__.py Инициализатор пакета — экспортирует публичный API из calibration.py, делая инструментарий калибровки напрямую импортируемым на уровне пакета.
calibration.py Основной интерфейс: CalibratorCV
sklearn-совместимый оцениватель, который:
  • Генерирует OOF-прогнозы через PurgedKFold (без временной утечки)
  • Подбирает калибровочное отображение, выбранное через method = 'isotonic' (IsotonicRegression) или 'platt' (логистическое масштабирование Платта) — поддерживает веса выборки
  • Переобучает базовый оцениватель на всех данных
  • Предоставляет predict_proba, predict, score (Probability‑Weighted Accuracy), brier_score, и oof_probs_ (исходные внефолдовые вероятности)
Вспомогательные функции:
brier_score, expected_calibration_error, maximum_calibration_error, compute_reliability, bootstrap_reliability_ci, plot_reliability, plot_reliability_with_ci, calibration_report, fit_platt_scaling.
README.md Пользовательская документация — обзор, ключевые возможности, примеры быстрого старта, справочник API и рекомендации по использованию модуля калибровки.


Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/21938

Прикрепленные файлы |
calibration.zip (13.92 KB)
Автоматизация торговых стратегий в MQL5 (Часть 31): Создание системы распознавания гармонического паттерна "3 Drives" с использованием Price Action Автоматизация торговых стратегий в MQL5 (Часть 31): Создание системы распознавания гармонического паттерна "3 Drives" с использованием Price Action
В этой статье мы разрабатываем систему распознавания гармонических паттернов "3 Drives" на языке MQL5, которая определяет бычьи и медвежьи гармонические паттерны "3 Drives" с использованием точек разворота и уровней Фибоначчи, открывая сделки с пользовательскими уровнями входа, стоп-лосса и тейк-профита в соответствии с вариантами, выбранными пользователем. Мы также повысим наглядность и информативность системы для трейдера с помощью графических объектов на графике.
Разработка торговой стратегии: Метод Butterfly Oscillator Разработка торговой стратегии: Метод Butterfly Oscillator
В этой статье мы продемонстрировали, как можно преобразовать увлекательную математическую концепцию Butterfly Curve («кривая-бабочка») в практичный торговый инструмент. Мы разработали индикатор Butterfly Oscillator и создали на его основе базовую торговую стратегию. Эта стратегия эффективно сочетает уникальные циклические сигналы осциллятора с традиционным подтверждением тренда на основе скользящих средних, формируя системный подход к выявлению потенциальных точек входа на рынок.
Особенности написания экспертов Особенности написания экспертов
Написание и тестирование экспертов в торговой системе MetaTrader 4.
Автоматизация торговых стратегий в MQL5 (Часть 30): Создание гармонического паттерна AB=CD на основе Price Action с визуализацией Автоматизация торговых стратегий в MQL5 (Часть 30): Создание гармонического паттерна AB=CD на основе Price Action с визуализацией
В этой статье мы разрабатываем советник распознавания паттернов AB=CD на языке MQL5, который определяет бычьи и медвежьи гармонические паттерны AB=CD с использованием точек разворота и уровней Фибоначчи, открывая сделки с точными уровнями входа, стоп-лосса и тейк-профита. Мы также улучшим визуальное представление паттерна с помощью графических объектов.