dvstarkov
dvstarkov личный блог
Вчера в 15:48

Feature mining на 150 per-instrument фичах не сработал. Причина: median корреляция P&L субмоделей = 0.86

Привет, Smart-Lab. Я Данил, исследую рынок и торгую то, что наресёрчил. Это первый пост — сразу с материала, без прелюдий.

Задача. Есть kNN-бейзлайн для аллокации по 29 инструментам. Гипотеза: проблема в фичах. Решил прогнать полновесный greedy forward feature selection на 150 фичах. Логика: модель выбирает первую фичу с наибольшим Score, потом с одной фичей идёт по всему списку и выбирает вторую лучшую, и так далее — без предварительного стопа.

Что пошло не так на старте. Грид упал в баг: NaN-скоры для всех инструментов, включая BRENT, где всего 30% NaN. Причина оказалась в обработке состояния: state(t) с −1 либо пропускался, либо давал n_common = 0 при сравнении с аналогами. Починил, но осадок остался.

Результат greedy. 4085 секунд работы. Выбрана одна фича:

 
Шаг Фича Score
1 VOL_OF_VOL_20 1.8090

На второй итерации лучшая фича дала improvement −0.0616. Стоп по условию improvement < 0.001. 149 фич прогнаны впустую.

Диагностика. Прогнал распределение корреляций P&L субмоделей. 10878 пар:

 
Перцентиль Корреляция
p5 +0.6677
p10 +0.7939
p25 +0.8362
p50 +0.8574
p75 +0.8696
p90 +0.8790
p95 +0.8839

Гистограмма: 9924 пары из 10878 лежат в бакете [0.7, 0.9]. Это 91%.

Кластеризация. Union-find по порогам корреляций:

 
Порог Кластеров Размеры топ-кластеров
0.5 2 [145, 3]
0.7 2 [145, 3]
0.8696 (auto) 12 [135, 3, 1×10]
0.9 110 [9, 8, 5, 5, 3, 3, 3, 3, 2, 2]

При пороге 0.5 и 0.7 — фактически один кластер на 145 фич. Это не кластеры, это одна фича в 145 обёртках.

Финальный тест. Лучший результат среди всех конфигураций:

 
Конфигурация Score
Baseline (7 фич) 2.1456
Лучшая 1 фича 1.8090
thr=0.9, size=8 1.8499

Baseline не был «сильнее». Он был другим типом: 6 per-instrument + 1 cross-sectional.

Вывод. Все 150 per-instrument фич несут одну и ту же информацию — состояние инструмента в его собственной истории. Ортогональности нет. Feature mining на этом юниверсе закрыт.

Найденный ключ. Cross-sectional фичи ортогональны per-instrument. Проверил на baseline из 8 per-instrument фич (Score 1.85):

 
Добавленная фича Score Δ
+ Q2.01_CS_RET_RANK_20 2.30 +0.45
+ Q2.12_DIST_CS_MEDIAN 2.37 +0.07

Итог: 2.37 > 2.15 (baseline exp_016). Из 14 Q2 и 2 KURT фич зашли только две.

Гипотеза, почему именно эти две.

  • Q2.01 — rank инструмента по return 20d. Где мы в рейтинге.

  • Q2.12 — расстояние от CS median. Насколько далеко от центра.

Обе описывают положение в cross-section. Другие Q2 описывают другие свойства — correlation, beta, breadth. Не положение. Поэтому не зашли.

Вопрос к сообществу. Кто-нибудь находил ортогональные фичи через cross-sectional положение, а не через свойства? Интересно, какие ещё оси ортогональности существуют

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн