Практичный разбор классификации в Python для инвестиций: от данных и таргета до бэктеста, метрик риска и шагов к реальной ML-стратегии.

Классификация в Python для инвестиций: пошагово
В начале 2025 года многие частные инвесторы поймали себя на неприятной мысли: «новости» стали слишком шумными, а решения — слишком эмоциональными. И вот тут машинное обучение в инвестициях перестаёт быть модным словом и превращается в практичный инструмент дисциплины. Классификация в Python — один из самых простых способов превратить рыночные данные в конкретные действия: «покупать» или «продавать».
Сразу честно: модель, которая угадывает направление рынка «всегда», — миф. Но модель, которая даёт стабильное небольшое статистическое преимущество, помогает соблюдать правила и снижает долю импульсивных сделок — реальность. Особенно если вы понимаете, что именно вы прогнозируете, как это тестируете и где у вас «дырявые места» в данных.
Ниже — понятное, прикладное объяснение, как построить базовую ML‑классификацию в Python на рыночных данных (на примере ETF на S&P 500), и что нужно добавить, чтобы это стало похоже на взрослую инвестиционную систему, а не на демо‑скрипт.
Зачем инвестору классификация, а не «прогноз цены»
Классификация удобна тем, что вы прогнозируете не цену, а решение. Для реальных инвестиций и алгоритмической торговли это часто правильнее.
Когда вы пытаетесь «предсказать цену», вы неизбежно спорите с шумом: рынок может сходить на 0,2% вверх или вниз по причинам, не связанным с вашими факторами. А вот задача вида «завтра вероятнее рост или падение?» ближе к тому, как реально устроены правила входа/выхода.
Типичный формат финансовой классификации:
- Бинарная классификация: вверх/вниз, покупать/не покупать.
- Мультикласс: покупать/держать/продавать.
- Несбалансированная классификация: редкие события (кризисы, гэпы, дефолты), где «правильный» класс встречается редко.
Мой опыт: на старте лучше брать бинарную задачу, но оценивать её не одной «точностью», а тем, как она конвертируется в риск и доходность.
Какие данные и признаки реально работают в простом прототипе
Минимальный прототип можно собрать на дневных свечах (OHLCV): Open, High, Low, Close, Volume. Даже если вы потом уйдёте в фундаментал, макро или альтернативные данные — свечи останутся «скелетом» системы.
В базовом примере используются два признака:
Open - Close(внутридневное направление)High - Low(внутридневной диапазон)
Это не «волшебные индикаторы». Это просто компактный способ сказать модели:
- «каким был день по направлению»
- «насколько рынок был нервным»
Критично: правильно формулируем целевую переменную
Цель (таргет) должна соответствовать вашему горизонту решения. Если вы торгуете «на завтра», логично:
- класс
1: завтрашнее закрытие выше сегодняшнего - класс
-1: завтрашнее закрытие ниже или равно сегодняшнему
Ключевой момент: таргет строится через shift(-1) — то есть мы не подглядываем в будущее при создании признаков. Подглядывание (look-ahead bias) — главная причина «красивых» бэктестов и плохой реальности.
Пошаговая сборка модели классификации в Python (и что улучшить)
Ниже — логика, повторяющая учебный конвейер, но с комментариями «как сделать по‑взрослому».
Шаг 1. Библиотеки
Для базовой версии достаточно:
pandas,numpyдля данныхyfinance(или ваш источник) для котировокscikit-learnдля модели и метрикmatplotlibдля графиков
Если вы планируете развивать проект: добавьте sklearn.pipeline, StandardScaler, и библиотеку для бэктестинга (хотя бы свою минимальную).
Шаг 2. Данные: берём один ликвидный инструмент
В учебном примере берётся SPY (ETF на S&P 500) за 5 лет. Это удачно:
- высокая ликвидность
- низкие спрэды (в реальности меньше «потерь на трение»)
- меньше проблем с разрывами и корпоративными событиями
Практический совет:
- для РФ‑контекста можно тестировать и на ликвидных индексных инструментах/фьючерсах, но начинать проще с «чистых» рядов.
Шаг 3. Формируем таргет
Идея проста:
- если завтра выше — «buy»
- если ниже — «sell»
Важное улучшение для инвестора: добавьте зону нейтральности. Например, если изменение меньше 0,1% — это «шум», и можно ставить класс «0» (держать/ничего не делать). Это снижает количество сделок и часто улучшает результаты после комиссий.
Шаг 4. Признаки
Два признака — ок для старта, но для полезной стратегии я бы быстро расширил набор:
- волатильность (например, ATR или rolling std доходностей)
- тренд/импульс (скользящие средние, RSI без фанатизма)
- объём/объёмные аномалии
- лаговые доходности (1, 3, 5 дней)
Правило: лучше 8–20 осмысленных признаков, чем 200 «индикаторов ради индикаторов». Переобучение в финансах приходит быстро и тихо.
Шаг 5. Разделение train/test без ошибки новичка
В исходной логике используется разбиение 80/20 по времени — это правильно. Для финансов нельзя мешать будущие данные в обучение.
Что улучшить:
- используйте walk-forward (скользящее переобучение) или
TimeSeriesSplit. - храните отдельный «последний год» как финальный sanity‑check.
Шаг 6. Обучение модели (SVC)
Support Vector Classifier — хороший старт:
- работает на небольших объёмах признаков
- устойчив к шуму при грамотной настройке
Но есть нюанс: SVM чувствителен к масштабу признаков, поэтому в реальном проекте добавьте стандартизацию:
StandardScaler()+SVC()вPipeline
Шаг 7. Оценка качества: точность — не главное
В учебном выводе получается примерно:
- Train Accuracy: 54,98%
- Test Accuracy: 58,33%
58% выглядит скромно, но для рынков это может быть полезно — при условии, что:
- ваш выигрыш/проигрыш асимметричен (прибыльные сделки больше убыточных)
- вы контролируете просадку
- учтены комиссии и проскальзывание
Что стоит смотреть вместо одной accuracy:
- precision/recall по классу «покупать» (если вы торгуете только long)
- confusion matrix: сколько ложных входов
- метрики стратегии: CAGR, максимальная просадка, Sharpe, turnover
«В инвестициях точность важна меньше, чем стоимость ошибки.»
Шаг 8. Сигналы и доходности
В примере считается:
- лог‑доходность инструмента
- доходность стратегии как
Return * Predicted_Signal
Это хорошая учебная иллюстрация, но в реальной системе добавьте:
- комиссии (фикс + проценты)
- спрэды/проскальзывание
- запрет на торговлю в дни низкой ликвидности (для отдельных активов)
- риск‑менеджмент: стоп‑логика или волатильностное позиционирование
Шаг 9. Визуализация и проверка на здравый смысл
График кумулятивной доходности — это только начало. Я всегда проверяю ещё:
- как стратегия ведёт себя в «плохих» режимах рынка (резкие падения, боковики)
- не объясняется ли прибыль 2–3 эпизодами
- как меняется результат при небольших изменениях параметров
Если стратегия «ломается» от мелких правок — это не стратегия, это совпадение.
Как превратить учебную модель в AI‑инструмент для инвестрешений
Самый быстрый путь к пользе — не усложнять модель, а улучшать процесс. Вот набор шагов, который реально приближает к практической системе.
1) Сначала процесс, потом «умная модель»
Начните с конвейера:
- загрузка и очистка данных
- генерация признаков
- честный time-series split
- обучение + подбор гиперпараметров
- бэктест с комиссиями
- отчёт по метрикам риска
И только потом играйте с XGBoost, нейросетями и т.д.
2) Калибруйте вероятности и управляйте размером позиции
Классификатор может выдавать не просто класс, а вероятность (или score). В инвестициях это золото:
- высокая уверенность → большая позиция
- низкая уверенность → пропуск сделки
Даже простое правило «торговать только когда вероятность > 0,55» иногда улучшает результат сильнее, чем смена алгоритма.
3) Держите модель под контролем: дрейф и переобучение
Рынки в 2025 году часто переключаются между режимами (волатильность, ставки, геополитика). Это означает:
- модель, обученная на 2020–2021, может плохо жить в 2024–2025
Практика:
- переобучение по расписанию (например, раз в месяц)
- мониторинг деградации метрик
- «kill switch», если просадка превышает лимит
4) Отделяйте исследование от исполнения
Если цель — лиды (и в целом серьёзный инвестиционный продукт), важно разделить:
- исследовательский ноутбук (быстро проверять гипотезы)
- воспроизводимый пайплайн (чёткие версии данных, параметров, модели)
Это та грань, где «поигрался с ML» превращается в «строю систему принятия решений».
Частые вопросы, которые задают про классификацию в трейдинге
Почему 55–58% точности может быть достаточно?
Потому что доходность определяет не только «угадал/не угадал», но и:
- размер прибыли/убытка
- количество сделок
- комиссии
- риск‑менеджмент
Хорошая стратегия может иметь точность 45–50% и зарабатывать на соотношении прибыль/риск. И наоборот — 60% точности может сливать на редких больших убытках.
SVM — это не устаревшее?
Нет. Для табличных признаков SVM до сих пор уместен, особенно как baseline. Главное — стандартизация и настройка параметров.
Можно ли применить это к портфелю, а не к одному активу?
Да. Вы можете:
- строить сигналы по каждому активу
- переводить score в веса (например, по уверенности модели)
- добавлять ограничения по риску (макс. доля сектора, волатильность портфеля)
Что делать дальше, если вы хотите использовать AI в инвестициях серьёзно
Если вы только собрали первый классификатор в Python — это уже полезно: вы увидели полный цикл «данные → сигнал → оценка». Следующий шаг — сделать его честным и применимым: walk‑forward, комиссии, риск‑лимиты, и небольшой, но осмысленный набор признаков.
Я бы поставил такую цель на конец декабря 2025: собрать один воспроизводимый пайплайн, который вы можете прогнать за 5–10 минут и получить отчёт по стратегии. Это дисциплинирует сильнее, чем бесконечный подбор «самой умной модели».
Если вы хотите внедрить классификацию в инвестиционный процесс (от исследования до бэктеста и регламентов риска) — оставьте заявку на консультацию: разберём ваш горизонт, инструменты, ограничения и соберём план работ. А дальше вопрос уже интереснее: какие рыночные режимы ваша модель обязана пережить, чтобы ей можно было доверить деньги?
Дисклеймер: материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией. Любые операции на финансовых рынках связаны с риском.