Как мне справиться с несбалансированными классами в задаче предсказания фондового рынка?

Вопрос или проблема

Я работаю над моделью предсказания, чтобы определить, нужно ли продавать, удерживать или покупать акцию через n дней. Каждый день (или строка в наборе данных) я классифицирую, нужно ли продавать, удерживать или покупать, основываясь на процентном изменении, и будет создан новый столбец, чтобы указать, какое действие следует предпринять в этот конкретный день.

Как мне справиться с несбалансированной классификацией в моем наборе данных при обучении моей модели? Набор для обучения выглядит следующим образом:

 1    1401
 0     835
-1     413

# 1 — это купить, 0 — удерживать, -1 — это продать

Судя по прочитанному, балансировка зависит от проблемы. Нужно ли мне балансировать данные для классификации предсказаний фондового рынка?

Заранее спасибо.

PS: Я использую SVM и наивный Байес.

Какие проценты вы используете для классов покупки, удержания и продажи? Судя по данным, которые вы предоставили в вопросе, я предполагаю, что это акция, которая в большинстве случаев росла, а не падала. Таким образом, если вы увеличите процентные пороги для акции, у вас получится сбалансированный набор данных.

Поскольку вы не предоставляете детали в своем вопросе, давайте предположим, что вы устанавливаете свои классы, чтобы сигнализировать “купить”, если изменение больше %1, продать, если меньше -%1, и удерживать где-то посередине. Но если вы установите порог “купить” на – скажем – %2 и порог “продать” на %0, у вас может получиться лучше сбалансированный набор данных.

Чтобы получить точные точки, которые дадут вам сбалансированные данные, вы можете использовать метод квантилей с q= 1/3.

Обычный подход к несбалансированным классам заключается в том, чтобы сделать обучающий и тестовый наборы как можно более однородными. Поэтому убедитесь, что пропорции классов в обоих наборах одинаковы. Существует множество факторов, которые можно учитывать при делении данных, но я предполагаю, что вам нужно просто основное решение. В sklearn это будет любая стратифицированная выборка.

Чтобы проверить, не вызывает ли дисбаланс классов проблемы, вы можете затем посмотреть, предсказывает ли модель некоторые классы в тестовом наборе хуже, чем другие. Вы могли бы затем скорректировать пороги для классификации образцов, чтобы избавиться от некоторых дисбалансов. Хотя я не думаю, что это будет так с теми двумя моделями, которые вы используете, но я могу и ошибаться, и не повредит проверить.

Также в наивном Байесе пропорции классов являются информативным вводом для модели. Они известны как априорные вероятности. Я думаю, что большинство библиотек заботится о вычислении априорных вероятностей самостоятельно, и вам не следует их изменять, если у вас нет на это уважительной причины.

Существует идеальное соответствие между правилом и решением. Вы знаете процентное изменение; теперь примените свое правило, чтобы сопоставить это с решением о покупке/продаже/удерживании.

Здесь нет машинного обучения, но даже если бы оно было, сейчас подходящее время, чтобы напомнить, что дисбаланс классов не является большой проблемой, когда используются надлежащие статистические методы. Модели, такие как SVM и наивный метод Байеса, полезны, потому что они открывают правила, о которых вы не знали. Логистическая регрессия определяет оптимальные коэффициенты, даже если мы указываем функциональную форму. Однако вы уже знаете правило для сопоставления процентного изменения с решением о покупке/удерживании/продаже. Вам не нужно его выяснять.

Ответ или решение

Чтобы эффективно справиться с задачей дисбаланса классов в задаче предсказания на фондовом рынке, необходимо рассмотреть несколько ключевых аспектов. Давайте разберем основные подходы, которые помогут вам улучшить модель предсказания в условиях дисбаланса классов, основываясь на вашем описании данных, где классы выглядят следующим образом:

  • 1 (покупка): 1401
  • 0 (удержание): 835
  • -1 (продажа): 413

1. Понимание природы вашей задачи

Прежде всего, важно осознать, что в вашем случае классы представляют собой действия на основе изменений процентной ставки акций. Дисбаланс классов может существенно повлиять на производительность модели, так как она может "учиться" в основном на более частом классе (покупка) и игнорировать реже встречающиеся (продажа). Прежде чем переходить к методам балансировки, необходимо выяснить причины дисбаланса и, возможно, адаптировать пороги классов.

2. Настройка порогов классов

Как вы упомянули, возможно, что классы были заданы слишком узко, что привело к значительному дисбалансу. Рассмотрите возможность увеличения или уменьшения процентных порогов, которые определяют классы "покупка", "удержание" и "продажа". Например, можно установить порог для "покупки" на уровне -2%, а "продажу" на уровне 0%. Подбор этих порогов можно осуществить, опираясь на квантильные значения, что позволит вам добиться лучших распределений классов.

3. Балансировка классов

Есть несколько методов, которые можно использовать для борьбы с дисбалансом классов:

  • Переподбор (Oversampling): Увеличение числа примеров из класса "продажа" и "удержание", чтобы достичь более сбалансированного распределения. Это можно сделать с помощью методов, таких как SMOTE (Synthetic Minority Over-sampling Technique), который создает синтетические примеры для меньшего класса.

  • Недостаток (Undersampling): Уменьшение числа примеров из класса "покупка", чтобы сбалансировать классы. Однако данный метод может привести к потере ценной информации.

  • Смешанный подход: Комбинирование методов переподборки и недостатка для оптимизации модели.

  • Модификация веса классов: Многие алгоритмы, включая SVM и Наивный Баес, позволяют задавать веса для классов. Увеличение веса для меньшей категории может помочь модели лучше распознавать менее представленные классы.

4. Кросс-валидация

Обеспечьте, чтобы ваша модель проходила через процесс кросс-валидации с учетом сбалансированных данных. Используйте стратифицированную выборку для гарантии того, что отношение классов в обучающей и тестовой выборках будет одинаковым. Это поможет избежать ситуации, когда модель будет высоко оценена из-за доминирования одного класса.

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

После тренировки моделей, важно проводить всестороннюю оценку их производительности. Используйте такие метрики, как F1-скор, ROC-AUC и Confusion Matrix, чтобы получить более полное представление о производительности модели по каждому классу. Это позволит вам избежать ситуации, когда высокая точность достигается лишь благодаря преобладанию одного класса.

Заключение

Управление дисбалансом классов в ваших данных предсказания фондового рынка — это сложная, но решаемая задача. Оптимизация порогов классов, использование методов балансировки, корректная оценка производительности могут существенно повысить вашу способность делать точные предсказания. Использование SVM и Наивного Баеса в сочетании с этими методами, безусловно, поможет вам в построении более надежной модели.

Оцените материал
Добавить комментарий

Капча загружается...