Руководство: Рабочий процесс статистического анализа

💡 Для кого это руководство?

Этот документ предназначен для аналитиков и разработчиков, которые хотят научиться применять статистические методы для проверки (валидации) торговых гипотез и анализа данных с помощью bquant.

1. От Наблюдения к Доказательству

Основная цель количественного анализа — не просто найти интересные закономерности, а доказать, что они не являются случайностью. Модуль bquant.analysis.statistical предоставляет инструменты для этого второго, критически важного шага.

Если analyze_zones помогает найти и описать паттерны, то bquant.analysis.statistical помогает проверить и доказать их значимость.

2. Ключевые компоненты

В основе модуля лежат два основных класса:

  • StatisticalAnalyzer: Универсальный инструмент для “разведки” данных. Он отвечает за описательную статистику, анализ распределений, тесты на нормальность и корреляционный анализ.

  • HypothesisTestSuite: Специализированный набор тестов для быстрой проверки распространенных торговых гипотез. Например: “Приносят ли бычьи зоны статистически значимую прибыль?” или “Зависит ли доходность зоны от ее длительности?”.


3. Типичный рабочий процесс

Статистический анализ — это последовательный процесс, где каждый шаг строится на предыдущем.

Шаг 1: Описательная статистика (“Первый взгляд”)

Прежде чем строить сложные модели, необходимо понять “характер” ваших данных.

  • Что делаем? С помощью StatisticalAnalyzer.descriptive_statistics() получаем ключевые метрики: среднее, медиану, стандартное отклонение, асимметрию, эксцесс.

  • Зачем это нужно? Чтобы получить общее представление о масштабе и разбросе данных. Например, аномально высокое стандартное отклонение может говорить о выбросах, а ненулевая асимметрия — о несимметричности распределения доходностей.

Шаг 2: Анализ распределения (“Какова природа данных?”)

Многие статистические тесты (например, t-тест) предполагают, что данные распределены нормально. Это предположение необходимо проверить.

  • Что делаем? Используем StatisticalAnalyzer.normality_test(), который применяет тесты Шапиро-Уилка и Колмогорова-Смирнова.

  • Зачем это нужно? Если данные не являются нормальными, для сравнения выборок следует использовать непараметрические тесты (например, тест Манна-Уитни), которые более устойчивы к выбросам и ненормальным распределениям.

Шаг 3: Корреляционный анализ (“Что с чем связано?”)

Этот шаг помогает найти взаимосвязи между различными переменными.

  • Что делаем? Рассчитываем корреляционную матрицу и проверяем значимость каждой корреляции.

  • Зачем это нужно? Чтобы найти потенциальные предикторы для будущих моделей. Например, если вы обнаружили сильную корреляцию между объемом и волатильностью, объем можно использовать как одну из переменных в регрессионной модели для предсказания волатильности.

Шаг 4: Проверка гипотез (“Это реально или случайность?”)

Это ядро всего процесса. На этом этапе мы проверяем конкретные торговые идеи.

  • Что делаем? Используем HypothesisTestSuite для проверки заранее определенных гипотез. Например, test_bull_bear_asymmetry_hypothesis() проверяет, есть ли статистически значимая разница в средних характеристиках (например, доходности или длительности) между бычьими и медвежьими зонами.

  • Зачем это нужно? Чтобы получить объективный, основанный на p-value, ответ на вопрос, работает ли ваша торговая идея. Если p-value < 0.05, вы можете с 95% уверенностью утверждать, что наблюдаемый эффект (например, более высокая доходность в бычьих зонах) реален.


4. Связь с анализом зон

Пайплайн analyze_zones является идеальным поставщиком данных для статистического анализа. Словарь zone.features, который генерируется для каждой зоны, содержит множество готовых метрик (duration, price_return, volatility_score и т.д.), которые можно напрямую подавать в HypothesisTestSuite для проверки гипотез.

Пример:

  1. С помощью analyze_zones вы получаете список зон с их характеристиками.

  2. Вы передаете этот список в HypothesisTestSuite.test_zone_duration_hypothesis().

  3. Тест автоматически сравнивает доходности длинных и коротких зон и сообщает вам, есть ли между ними статистически значимая разница.


🔗 См. также