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

> 💡 **Для кого это руководство?**
>
> Этот документ предназначен для аналитиков и разработчиков, которые хотят научиться применять статистические методы для проверки (валидации) торговых гипотез и анализа данных с помощью `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.  Тест автоматически сравнивает доходности длинных и коротких зон и сообщает вам, есть ли между ними статистически значимая разница.

---

## 🔗 См. также

- **[Справочник API (statistical.md)](../api/analysis/statistical.md)**: Полный список классов, методов и примеры синтаксиса.
