Классификация в Python для инвестиций: пошагово

Искусственный интеллект в промышленности и умных фабрикахBy 3L3C

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

машинное обучениеpythonклассификацияsvmалготрейдингбэктестинвестиционные стратегии
Share:

Featured image for Классификация в Python для инвестиций: пошагово

Классификация в 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) Сначала процесс, потом «умная модель»

Начните с конвейера:

  1. загрузка и очистка данных
  2. генерация признаков
  3. честный time-series split
  4. обучение + подбор гиперпараметров
  5. бэктест с комиссиями
  6. отчёт по метрикам риска

И только потом играйте с 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 минут и получить отчёт по стратегии. Это дисциплинирует сильнее, чем бесконечный подбор «самой умной модели».

Если вы хотите внедрить классификацию в инвестиционный процесс (от исследования до бэктеста и регламентов риска) — оставьте заявку на консультацию: разберём ваш горизонт, инструменты, ограничения и соберём план работ. А дальше вопрос уже интереснее: какие рыночные режимы ваша модель обязана пережить, чтобы ей можно было доверить деньги?

Дисклеймер: материал носит образовательный характер и не является индивидуальной инвестиционной рекомендацией. Любые операции на финансовых рынках связаны с риском.

🇷🇺 Классификация в Python для инвестиций: пошагово - Russia | 3L3C