Блог им. dvstarkov
Продолжаю разбирать kNN v2. В прошлый раз feature mining не сработал. Теперь проверяю гиперпараметры, но не хаотично, а по одному — с заморозкой всего остального.
Что заморожено: K=75, feature set — текущий кандидат из 10 фич, target = median(fwd_5d), bucket-механика, walk-forward, costs = 0.
N — сколько топ-инструментов берём в портфель на каждый день. Прогнал N ∈ {1, 2, 3, 4, 5, 7, 10}.
| N | IS Score | IS Calmar | IS CAGR | IS MDD | VAL Score |
|---|---|---|---|---|---|
| 1 | 2.1164 | 0.7200 | 58.43% | −81.16% | 2.1805 |
| 2 | 1.9501 | 0.5826 | 46.44% | −79.71% | 2.1683 |
| 3 | 2.3053 | 0.8577 | 45.97% | −53.60% | 2.2966 |
| 4 | 2.3698 | 0.9429 | 43.99% | −46.66% | 2.4222 |
| 5 | 2.0417 | 0.7826 | 36.48% | −46.61% | 2.5191 |
| 7 | 1.9244 | 0.7286 | 33.43% | −45.88% | 2.3967 |
| 10 | 1.7674 | 0.6463 | 30.79% | −47.64% | 2.5893 |
Что видно:
Плато на 3–4. N=3 и N=4 дают близкие IS Score (2.31 и 2.37). Обрыв на N=5.
N=1 и N=2 — высокая доходность, но глубокая просадка. N=1 даёт CAGR 58%, но MDD −81%. Это не торговля, это рулетка.
VAL попал в тест. N=10 на VAL даёт лучший Score 2.5893, но я его не смотрю. Это тест, а не критерий выбора. N не меняется.
Выбор: N=4. Плато, лучший IS Score, приемлемый MDD.
Теперь горизонт и агрегатор. H ∈ {3, 5, 10, 20}, агрегатор median vs mean.
| H | agg | Score | CAGR | MDD |
|---|---|---|---|---|
| 5 | median | 2.3698 | 43.99% | −46.66% |
| 3 | median | 2.0043 | 37.94% | −51.64% |
| 10 | median | 1.9729 | 36.74% | −51.60% |
| 20 | median | 1.8898 | 38.50% | −63.52% |
| 10 | mean | 1.7199 | 35.29% | −65.00% |
| 20 | mean | 1.6705 | 35.03% | −67.14% |
| 3 | mean | 1.6235 | 33.03% | −68.75% |
| 5 | mean | 1.5869 | 32.34% | −67.57% |
Median >> mean. На H=5 median даёт 2.37, mean — 1.59. Разница 0.78. Median устойчив к выбросам, mean ловит хвостовой шум. Для kNN с bucket-механикой median критичен.
H=5 — оптимум. H=3 даёт 2.00, H=5 — 2.37, H=10 — 1.97, H=20 — 1.89. Пятидневный горизонт — естественный для этой модели.
| K | Score | CAGR | MDD |
|---|---|---|---|
| 75 | 2.3698 | 43.99% | −46.66% |
| 50 | 2.3503 | 42.97% | −44.94% |
| 150 | 2.0751 | 39.05% | −51.23% |
| 100 | 1.9614 | 35.82% | −48.06% |
K=50 и K=75 — плато (разница 0.02). K=100 и K=150 — падение. Малое K работает, большое размывает. K=75 остаётся.
Финальная конфигурация: 10 фич, N=4, target = median(fwd_5d), K=75, bucket = 5 expanding quantiles, costs = 0.
IS: Score = 2.3698, Calmar = 0.9429, Sortino = 1.4269, CAGR = 43.99%, MDD = −46.66%, coverage = 89.0%.
VAL: Score = 2.4222, Calmar = 0.9668, Sortino = 1.4554, CAGR = 35.06%, MDD = −36.27%.
Baseline exp_016 (7 фич): IS = 2.1456. Кандидат (10 фич): IS = 2.3698. Δ IS = +0.2242.
Модель уже была на лучших параметрах. Фриз. Больше ничего не крутим.
Вопрос к сообществу: кто-нибудь сталкивался с тем, что VAL систематически даёт выше IS на kNN-моделях? Это переобучение наоборот или просто везение на коротком отрезке?
Ничего не понятно, но очень интересно… было до того, как Клода не спросил. Тоже поэкспериментирую.
Чтобы на вопросы из двух постов ответить — ту техникал и ту дип для меня, наверно.
Кстати где-то у меня тут чат про AI в трейдинге завалался).
А вот же он: t.me/+3b1J_hgnBqk2OTAy
Народу достаточно для поддержания дискуссий, и компетенций тоже. Но активности щас нет, но ее можно всколыхнуть).