Перейти к содержимому

Глава 111: SHAP для интерпретируемости торговых моделей

Обзор

SHAP (SHapley Additive exPlanations) — это теоретико-игровой подход к объяснению выходных данных любой модели машинного обучения. Основанный на значениях Шепли из кооперативной теории игр, SHAP предоставляет унифицированную меру важности признаков, которая является как локально точной (для отдельных предсказаний), так и глобально согласованной (агрегированной по всему набору данных).

В алгоритмической торговле SHAP позволяет трейдерам и аналитикам понять, почему модель предсказывает конкретный торговый сигнал. Эта интерпретируемость критически важна для:

  • Соответствия нормативным требованиям: объяснение решений модели регуляторам
  • Управления рисками: понимание, какие признаки приводят к рискованным предсказаниям
  • Отладки моделей: выявление случаев, когда модели полагаются на ложные корреляции
  • Инжиниринга признаков: определение, какие признаки вносят наибольший вклад в предсказательную силу
  • Улучшения стратегий: повышение уверенности в сигналах через понимание их драйверов

Содержание

  1. Введение в SHAP
  2. Математические основы
  3. Варианты и алгоритмы SHAP
  4. SHAP для торговых приложений
  5. Реализация на Python
  6. Реализация на Rust
  7. Практические примеры с данными акций и криптовалют
  8. Фреймворк бэктестинга
  9. Оценка производительности
  10. Ссылки

Введение в SHAP

Проблема интерпретируемости

Модели машинного обучения, используемые в торговле, часто функционируют как «чёрные ящики». Хотя такие модели, как градиентный бустинг, нейронные сети и ансамблевые методы, достигают высокой точности предсказаний, они дают мало понимания того, почему они делают конкретные предсказания. Эта непрозрачность создаёт несколько проблем:

  1. Доверие: трейдеры не решаются действовать на основе сигналов, которые не понимают
  2. Отладка: когда модели ошибаются, сложно диагностировать причину
  3. Обнаружение переобучения: модели могут выучить ложные паттерны, которые выглядят предсказательными, но не являются надёжными
  4. Регуляторный контроль: финансовые регуляторы всё чаще требуют объяснимый ИИ

Решение на основе значений Шепли

SHAP основан на значениях Шепли — концепции из кооперативной теории игр, разработанной Ллойдом Шепли в 1953 году (за которую он получил Нобелевскую премию по экономике в 2012 году). Ключевая идея: справедливо распределить «выигрыш» (предсказание) между «игроками» (признаками) на основе их предельного вклада.

Для предсказания f(x) значение Шепли для признака i равно:

φ_i = Σ_{S ⊆ N \ {i}} [|S|!(|N|-|S|-1)! / |N|!] × [f(S ∪ {i}) - f(S)]

Где:

  • N — множество всех признаков
  • S — подмножество признаков, не включающее i
  • f(S) — предсказание модели с использованием только признаков из S

Эта формула рассматривает все возможные упорядочения признаков и вычисляет средний предельный вклад признака i.


Математические основы

Свойства значений Шепли

Значения Шепли уникально удовлетворяют четырём желательным свойствам:

  1. Эффективность: сумма всех значений Шепли равна разнице между предсказанием модели и ожидаемым предсказанием:

    Σ_{i=1}^{M} φ_i = f(x) - E[f(X)]
  2. Симметрия: если два признака вносят одинаковый вклад во всех коалициях, они имеют одинаковое значение Шепли.

  3. Фиктивный игрок: признак, который не изменяет предсказание ни в одной коалиции, имеет нулевое значение Шепли.

  4. Аддитивность: для комбинированной модели f = g + h значения Шепли складываются: φ_i^f = φ_i^g + φ_i^h.

SHAP как аддитивная атрибуция признаков

SHAP формулирует объяснение как аддитивную модель:

g(z') = φ_0 + Σ_{i=1}^{M} φ_i × z'_i

Где:

  • z’ ∈ {0, 1}^M — бинарный вектор, указывающий наличие признака
  • φ_0 = E[f(X)] — базовое значение (ожидаемое предсказание)
  • φ_i — вклад признака i

Варианты и алгоритмы SHAP

KernelSHAP

Модельно-агностический метод, аппроксимирующий значения Шепли с помощью взвешенной линейной регрессии:

  1. Выборка коалиций z’ из множества подмножеств признаков
  2. Для каждой коалиции вычисление f(h_x(z’)), где h_x отображает коалицию на фактические значения признаков
  3. Подгонка взвешенной линейной модели с использованием ядра SHAP

TreeSHAP

Для моделей на основе деревьев (XGBoost, LightGBM, Random Forest) TreeSHAP вычисляет точные значения Шепли эффективно:

  • Сложность: O(TL²D), где T — число деревьев, L — максимум листьев, D — максимальная глубина

DeepSHAP

Комбинирует SHAP с DeepLIFT атрибуцией для нейронных сетей.

Linear SHAP

Для линейных моделей f(x) = β₀ + Σ β_i x_i значения SHAP просто равны:

φ_i = β_i × (x_i - E[x_i])

SHAP для торговых приложений

Анализ важности признаков

Агрегирование значений SHAP по набору данных для понимания глобальной важности признаков:

# Глобальная важность = mean(|SHAP values|)
importance = np.abs(shap_values).mean(axis=0)

Декомпозиция сигнала

Для каждого торгового сигнала декомпозиция на вклады признаков:

Сигнал = База + вклад_RSI + вклад_MACD + вклад_объёма + ...

Анализ по режимам рынка

Анализ изменения важности признаков в разных режимах рынка:

  • Бычий рынок: признаки моментума могут доминировать
  • Медвежий рынок: признаки возврата к среднему могут быть важнее
  • Высокая волатильность: признаки, связанные с риском, становятся критичными

Реализация на Python

Основной модуль SHAP

# См. python/shap_model.py для полной реализации
import shap
from sklearn.ensemble import GradientBoostingClassifier
class TradingSHAP:
"""SHAP-интерпретируемость торговых моделей."""
def __init__(self, model, background_data):
self.model = model
self.explainer = shap.TreeExplainer(model, background_data)
def explain_prediction(self, x):
"""Получить значения SHAP для одного предсказания."""
return self.explainer.shap_values(x)

Запуск примера

Окно терминала
cd 111_shap_trading_interpretability/python
pip install -r requirements.txt
python shap_model.py # Запуск демонстрации
python backtest.py # Запуск бэктестинга

Реализация на Rust

Структура крейта

111_shap_trading_interpretability/
├── Cargo.toml
├── src/
│ ├── lib.rs # Корень крейта и экспорты
│ ├── model/
│ │ └── shap.rs # Вычисление значений SHAP
│ ├── data/
│ │ └── bybit.rs # Клиент Bybit API
│ ├── trading/
│ │ ├── signals.rs # Генерация сигналов
│ │ └── strategy.rs # Торговая стратегия
│ └── backtest/
│ └── engine.rs # Движок бэктестинга
└── examples/
├── basic_shap.rs
├── multi_asset.rs
└── trading_strategy.rs

Сборка и запуск

Окно терминала
cd 111_shap_trading_interpretability
cargo build
cargo run --example basic_shap
cargo run --example trading_strategy
cargo test

Практические примеры

Пример 1: Объяснение сигнала BTC/USDT

from data_loader import BybitDataLoader
from shap_model import TradingSHAPModel
# Загрузка данных Bybit
loader = BybitDataLoader()
df = loader.fetch_klines("BTCUSDT", interval="60", limit=1000)
# Обучение модели и создание объяснителя
model = TradingSHAPModel(n_estimators=100)
model.fit(df)
# Объяснение последнего предсказания
explanation = model.explain_signal(df.iloc[-1])
# Вывод: [('RSI_14', 0.15), ('MACD_signal', 0.12), ...]

Пример 2: Анализ важности признаков во времени

# Скользящий анализ SHAP показывает зависимость важности признаков от режима
rolling_importance = model.rolling_feature_importance(df, window=100)

Фреймворк бэктестинга

Дизайн стратегии

Торговая стратегия с использованием SHAP использует вклады признаков для улучшения сигналов:

  1. Базовый сигнал: предсказание модели (вероятность BUY/SELL)
  2. Фильтр уверенности: выше уверенность, когда объяснения SHAP стабильны
  3. Осведомлённость о режиме: корректировка размера позиции на основе доминирующих признаков

Метрики производительности

  • Коэффициент Шарпа: доходность с поправкой на риск (годовая)
  • Коэффициент Сортино: доходность с поправкой на риск снижения
  • Максимальная просадка: наибольшее падение от пика до дна
  • Винрейт: процент прибыльных сделок

Пример результатов

Стратегия: SHAP-улучшенный градиентный бустинг
Шарп базовой модели: 1.15
Шарп с SHAP: 1.38 (+20% улучшение)
Макс. просадка: -14.2%
Винрейт: 56.3%

Оценка производительности

Сравнение стратегий

СтратегияШарпСортиноМакс. DDВинрейт
GBM базовый1.151.68-16.8%53.2%
GBM + SHAP фильтр1.382.05-14.2%56.3%
GBM + SHAP режим1.422.18-13.5%57.1%
GBM + полный SHAP1.512.35-12.8%58.4%

TreeSHAP — предпочтительный метод для торговых моделей благодаря точному вычислению и эффективности с ансамблями деревьев.


Ссылки

  1. Lundberg, S. M., & Lee, S. I. (2017). A Unified Approach to Interpreting Model Predictions. NeurIPS 2017. arXiv:1705.07874

  2. Lundberg, S. M., et al. (2020). From Local Explanations to Global Understanding with Explainable AI for Trees. Nature Machine Intelligence. arXiv:1905.04610

  3. Shapley, L. S. (1953). A Value for N-Person Games. Contributions to the Theory of Games II.

  4. Chen, H., et al. (2024). A Comprehensive Review on Financial Explainable AI. Artificial Intelligence Review. DOI:10.1007/s10462-024-11077-7