iiuniversitet.ruЦентр обучения нейросетямОткрыть каталог

Статистика для бизнес-данных

Помогает считать средние и процентили, находить тренды и выбросы, проверять гипотезы и не делать поспешных выводов.

СкиллAnthropicClaudeApache-2.0Загрузить архив в ClaudeПроверка не требуетсяСлужебный: его вызывают другие скиллы
Что делает
Помогает считать средние и процентили, находить тренды и выбросы, проверять гипотезы и не делать поспешных выводов.
Когда брать
Когда анализируешь распределения, проверяешь значимость A/B-теста, ищешь аномалии, считаешь корреляции или читаешь чужие статистические выводы.
Пример запроса
Проверь, действительно ли вариант B лучше A в этом A/B-тесте, или разница случайна.
Нужно подключить
Python

Входит в плагин data. В Cowork и Claude Code можно поставить плагин целиком.

Как включить

  1. Нажмите «Скачать на русском» и сохраните архив.
  2. В Claude откройте Настройки → Capabilities → Skills → Upload skill и выберите архив.
  3. Включите скилл переключателем.
Для терминала

Распакуйте архив и положите папку statistical-analysis в ~/.claude/skills/. Файл SKILL.md должен лежать внутри этой папки.

Текст

---
name: statistical-analysis
description: Применяй статистические методы, включая описательную статистику, анализ трендов, поиск выбросов и проверку гипотез. Используй, когда анализируешь распределения, проверяешь значимость, ищешь аномалии, считаешь корреляции или интерпретируешь статистические результаты.
user-invocable: false
---

Скилл «Статистический анализ»

Описательная статистика, анализ трендов, поиск выбросов, проверка гипотез и подсказки о том, когда к статистическим утверждениям стоит относиться осторожно.

Методика описательной статистики

Центральная тенденция

Выбирай подходящую меру центра в зависимости от данных:

СитуацияЧто использоватьПочему
Симметричное распределение, выбросов нетСреднееСамая эффективная оценка
Скошенное распределениеМедианаУстойчива к выбросам
Категориальные или порядковые данныеМодаЕдинственный вариант для нечисловых данных
Сильно скошенные данные с выбросами (например, выручка на пользователя)Медиана + среднееПриводи обе; разрыв показывает скошенность

Для бизнес-метрик всегда приводи среднее и медиану вместе. Если они сильно расходятся, данные скошены, и одно среднее вводит в заблуждение.

Разброс и изменчивость

  • Стандартное отклонение: насколько значения обычно отклоняются от среднего. Используй для нормально распределённых данных.
  • Межквартильный размах (IQR): расстояние от p25 до p75. Устойчив к выбросам. Используй для скошенных данных.
  • Коэффициент вариации (CV): стандартное отклонение / среднее. Используй, чтобы сравнивать изменчивость метрик в разных масштабах.
  • Размах: максимум минус минимум. Чувствителен к выбросам, но быстро показывает протяжённость данных.

Процентили в бизнес-контексте

Приводи ключевые процентили — они расскажут больше, чем одно среднее:

p1:   нижний 1% (нижняя граница / минимальное типичное значение)
p5:   нижний край нормального диапазона
p25:  первый квартиль
p50:  медиана (типичный пользователь)
p75:  третий квартиль
p90:  верхние 10% / активные пользователи
p95:  верхний край нормального диапазона
p99:  верхний 1% / экстремальные пользователи

Пример формулировки: «Медианная длительность сессии — 4,2 минуты, но верхние 10% пользователей проводят в сессии больше 22 минут, поднимая среднее до 7,8 минуты.»

Описание распределений

Охарактеризуй каждое числовое распределение, которое анализируешь:

  • Форма: нормальное, скошенное вправо, скошенное влево, двугорбое, равномерное, с тяжёлыми хвостами
  • Центр: среднее и медиана (и разрыв между ними)
  • Разброс: стандартное отклонение или IQR
  • Выбросы: сколько их и насколько они экстремальны
  • Границы: есть ли естественный минимум (ноль) или максимум (100%)?

Анализ трендов и прогнозирование

Как выявлять тренды

Скользящие средние, чтобы сгладить шум:

# 7-day moving average (good for daily data with weekly seasonality)
df['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()

# 28-day moving average (smooths weekly AND monthly patterns)
df['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()

Сравнение по периодам:

  • Неделя к неделе (WoW): сравнение с тем же днём прошлой недели
  • Месяц к месяцу (MoM): сравнение с тем же месяцем ранее
  • Год к году (YoY): золотой стандарт для сезонного бизнеса
  • Тот же день прошлого года: сравнение конкретного календарного дня

Темпы роста:

Простой рост: (текущее - предыдущее) / предыдущее
CAGR: (конечное / начальное) ^ (1 / число лет) - 1
Логарифмический рост: ln(текущее / предыдущее)  -- лучше для нестабильных рядов

Выявление сезонности

Проверь наличие периодических закономерностей:

  1. Построй график исходного временного ряда — сначала визуальный осмотр
  2. Посчитай средние по дням недели: есть ли чёткая недельная закономерность?
  3. Посчитай средние по месяцам года: есть ли годовой цикл?
  4. При сравнении периодов всегда используй сравнение год к году или одинаковых периодов, чтобы не путать тренд с сезонностью

Прогнозирование (простые методы)

Для бизнес-аналитиков (не специалистов по данным) используй простые методы:

  • Наивный прогноз: завтра = сегодня. Используй как базовый уровень.
  • Сезонный наивный прогноз: завтра = тот же день на прошлой неделе или в прошлом году.
  • Линейный тренд: проведи линию по историческим данным. Только для явно линейных трендов.
  • Прогноз по скользящему среднему: используй среднее за последний период как прогноз.

Всегда сообщай о неопределённости. Давай диапазон, а не точечную оценку:

  • «Мы ожидаем 10–12 тыс. регистраций в следующем месяце по тренду последних 3 месяцев»
  • НЕ «В следующем месяце мы получим ровно 11 234 регистрации»

Когда передавать задачу специалисту по данным: нелинейные тренды, несколько сезонностей, внешние факторы (расходы на маркетинг, праздники) или когда точность прогноза важна для распределения ресурсов.

Обнаружение выбросов и аномалий

Статистические методы

Метод Z-оценки (для нормально распределённых данных):

z_scores = (df['value'] - df['value'].mean()) / df['value'].std()
outliers = df[abs(z_scores) > 3]  # More than 3 standard deviations

Метод IQR (устойчив к ненормальным распределениям):

Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]

Метод процентилей (самый простой):

outliers = df[(df['value'] < df['value'].quantile(0.01)) |
              (df['value'] > df['value'].quantile(0.99))]

Работа с выбросами

НЕ удаляй выбросы автоматически. Вместо этого:

  1. Изучи: это ошибка в данных, настоящее экстремальное значение или другая группа?
  2. Ошибки в данных: исправь или удали (например, отрицательный возраст, метки времени 1970 года)
  3. Настоящие экстремальные значения: оставь, но подумай об устойчивых статистиках (медиана вместо среднего)
  4. Другая группа: выдели в отдельный сегмент для отдельного анализа (например, корпоративные клиенты и малый бизнес)

Сообщай, что ты сделал: «Мы исключили 47 записей (0,3%) с суммой транзакции больше $50 тыс.: это крупные корпоративные заказы, которые анализируются отдельно.»

Обнаружение аномалий во временных рядах

Чтобы находить необычные значения во временном ряду:

  1. Посчитай ожидаемое значение (скользящее среднее или то же значение год назад)
  2. Посчитай отклонение от ожидаемого
  3. Отметь отклонения за пределами порога (обычно 2–3 стандартных отклонения остатков)
  4. Различай точечные аномалии (одно необычное значение) и точки излома (устойчивый сдвиг)

Основы проверки гипотез

Когда использовать

Используй проверку гипотез, когда нужно понять, реальна ли наблюдаемая разница или она могла возникнуть случайно. Типичные случаи:

  • Результаты A/B-теста: вариант B действительно лучше A?
  • Сравнение «до и после»: изменение в продукте действительно сдвинуло метрику?
  • Сравнение сегментов: у корпоративных клиентов действительно выше удержание?

Схема

  1. Нулевая гипотеза (H0): разницы нет (исходное допущение)
  2. Альтернативная гипотеза (H1): разница есть
  3. Выбери уровень значимости (alpha): обычно 0,05 (5% вероятность ложноположительного результата)
  4. Посчитай статистику критерия и p-значение
  5. Интерпретируй: если p < alpha, отклоняй H0 (есть свидетельство реальной разницы)

Распространённые критерии

СценарийКритерийКогда использовать
Сравнение средних двух группt-критерий (для независимых выборок)Нормальные данные, две группы
Сравнение долей двух группz-критерий для долейКонверсии, бинарные исходы
Сравнение парных измеренийПарный t-критерий«До и после» на одних и тех же объектах
Сравнение средних трёх и более группANOVAНесколько сегментов или вариантов
Ненормальные данные, две группыU-критерий Манна — УитниСкошенные метрики, порядковые данные
Связь между категориямиКритерий хи-квадратДве категориальные переменные

Практическая и статистическая значимость

Статистическая значимость означает, что разница вряд ли возникла случайно.

Практическая значимость означает, что разница достаточно велика, чтобы влиять на бизнес-решения.

Разница может быть статистически значимой, но практически бессмысленной (это обычное дело на больших выборках). Всегда приводи:

  • Размер эффекта: насколько велика разница? (например, «Вариант B повысил конверсию на 0,3 процентного пункта»)
  • Доверительный интервал: каков диапазон правдоподобных истинных эффектов?
  • Влияние на бизнес: во что это превращается в выручке, пользователях или других бизнес-показателях?

Размер выборки

  • Малые выборки дают ненадёжные результаты, даже при значимых p-значениях
  • Практическое правило для долей: для базовой надёжности нужно хотя бы 30 событий на группу
  • Чтобы обнаружить небольшие эффекты (например, изменение конверсии на 1%), могут понадобиться тысячи наблюдений на группу
  • Если выборка мала, скажи об этом: «При всего 200 наблюдениях на группу у нас ограниченные возможности обнаружить эффекты меньше X%»

Когда стоит осторожно относиться к статистическим утверждениям

Корреляция — не причинность

Когда находишь корреляцию, явно рассмотри:

  • Обратную причинность: возможно, B вызывает A, а не A вызывает B
  • Скрытые переменные: возможно, C вызывает и A, и B
  • Совпадение: при достаточном числе переменных случайные корреляции неизбежны

Что можно сказать: «У пользователей функции X удержание выше на 30%» Чего нельзя говорить без дополнительных доказательств: «Функция X вызывает рост удержания на 30%»

Проблема множественных сравнений

Когда проверяешь много гипотез, некоторые окажутся «значимыми» случайно:

  • Если проверить 20 метрик при p=0,05, примерно одна окажется значимой ложно
  • Если ты просматривал много сегментов, прежде чем нашёл отличающийся, отметь это
  • Скорректируй результат на множественные сравнения поправкой Бонферрони (раздели alpha на число проверок) или укажи, сколько проверок было выполнено

Парадокс Симпсона

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

  • Всегда проверяй, сохраняется ли вывод в ключевых сегментах
  • Пример: общая конверсия растёт, но в каждом сегменте падает — потому что структура сместилась к сегменту с более высокой конверсией

Ошибка выжившего

Можно анализировать только те объекты, которые «выжили» и попали в набор данных:

  • Анализ активных пользователей игнорирует тех, кто ушёл
  • Анализ успешных компаний игнорирует те, что прогорели
  • Всегда спрашивай: «Кого нет в этом наборе данных, и изменило бы их включение вывод?»

Экологическая ошибка

Агрегированные тренды могут не относиться к отдельным людям:

  • «В странах с более высоким X выше Y» вовсе НЕ означает, что «у людей с более высоким X выше Y»
  • Будь осторожен, применяя выводы на уровне групп к отдельным случаям

Привязка к конкретным числам

Остерегайся ложной точности:

  • «Отток в следующем квартале составит 4,73%» подразумевает большую уверенность, чем есть на самом деле
  • Предпочитай диапазоны: «Мы ожидаем отток в пределах 4–6% по историческим закономерностям»
  • Округляй уместно: «Около 5%» часто честнее, чем «4,73%»

Перевод: iiuniversitet. Оригинал: https://github.com/anthropics/knowledge-work-plugins/tree/main/data/skills/statistical-analysis, лицензия Apache-2.0. Изменения: перевод на русский язык.

Оригинал на английском
---
name: statistical-analysis
description: Apply statistical methods including descriptive stats, trend analysis, outlier detection, and hypothesis testing. Use when analyzing distributions, testing for significance, detecting anomalies, computing correlations, or interpreting statistical results.
user-invocable: false
---

# Statistical Analysis Skill

Descriptive statistics, trend analysis, outlier detection, hypothesis testing, and guidance on when to be cautious about statistical claims.

## Descriptive Statistics Methodology

### Central Tendency

Choose the right measure of center based on the data:

| Situation | Use | Why |
|---|---|---|
| Symmetric distribution, no outliers | Mean | Most efficient estimator |
| Skewed distribution | Median | Robust to outliers |
| Categorical or ordinal data | Mode | Only option for non-numeric |
| Highly skewed with outliers (e.g., revenue per user) | Median + mean | Report both; the gap shows skew |

**Always report mean and median together for business metrics.** If they diverge significantly, the data is skewed and the mean alone is misleading.

### Spread and Variability

- **Standard deviation**: How far values typically fall from the mean. Use with normally distributed data.
- **Interquartile range (IQR)**: Distance from p25 to p75. Robust to outliers. Use with skewed data.
- **Coefficient of variation (CV)**: StdDev / Mean. Use to compare variability across metrics with different scales.
- **Range**: Max minus min. Sensitive to outliers but gives a quick sense of data extent.

### Percentiles for Business Context

Report key percentiles to tell a richer story than mean alone:

```
p1:   Bottom 1% (floor / minimum typical value)
p5:   Low end of normal range
p25:  First quartile
p50:  Median (typical user)
p75:  Third quartile
p90:  Top 10% / power users
p95:  High end of normal range
p99:  Top 1% / extreme users
```

**Example narrative**: "The median session duration is 4.2 minutes, but the top 10% of users spend over 22 minutes per session, pulling the mean up to 7.8 minutes."

### Describing Distributions

Characterize every numeric distribution you analyze:

- **Shape**: Normal, right-skewed, left-skewed, bimodal, uniform, heavy-tailed
- **Center**: Mean and median (and the gap between them)
- **Spread**: Standard deviation or IQR
- **Outliers**: How many and how extreme
- **Bounds**: Is there a natural floor (zero) or ceiling (100%)?

## Trend Analysis and Forecasting

### Identifying Trends

**Moving averages** to smooth noise:
```python
# 7-day moving average (good for daily data with weekly seasonality)
df['ma_7d'] = df['metric'].rolling(window=7, min_periods=1).mean()

# 28-day moving average (smooths weekly AND monthly patterns)
df['ma_28d'] = df['metric'].rolling(window=28, min_periods=1).mean()
```

**Period-over-period comparison**:
- Week-over-week (WoW): Compare to same day last week
- Month-over-month (MoM): Compare to same month prior
- Year-over-year (YoY): Gold standard for seasonal businesses
- Same-day-last-year: Compare specific calendar day

**Growth rates**:
```
Simple growth: (current - previous) / previous
CAGR: (ending / beginning) ^ (1 / years) - 1
Log growth: ln(current / previous)  -- better for volatile series
```

### Seasonality Detection

Check for periodic patterns:
1. Plot the raw time series -- visual inspection first
2. Compute day-of-week averages: is there a clear weekly pattern?
3. Compute month-of-year averages: is there an annual cycle?
4. When comparing periods, always use YoY or same-period comparisons to avoid conflating trend with seasonality

### Forecasting (Simple Methods)

For business analysts (not data scientists), use straightforward methods:

- **Naive forecast**: Tomorrow = today. Use as a baseline.
- **Seasonal naive**: Tomorrow = same day last week/year.
- **Linear trend**: Fit a line to historical data. Only for clearly linear trends.
- **Moving average forecast**: Use trailing average as the forecast.

**Always communicate uncertainty**. Provide a range, not a point estimate:
- "We expect 10K-12K signups next month based on the 3-month trend"
- NOT "We will get exactly 11,234 signups next month"

**When to escalate to a data scientist**: Non-linear trends, multiple seasonalities, external factors (marketing spend, holidays), or when forecast accuracy matters for resource allocation.

## Outlier and Anomaly Detection

### Statistical Methods

**Z-score method** (for normally distributed data):
```python
z_scores = (df['value'] - df['value'].mean()) / df['value'].std()
outliers = df[abs(z_scores) > 3]  # More than 3 standard deviations
```

**IQR method** (robust to non-normal distributions):
```python
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
```

**Percentile method** (simplest):
```python
outliers = df[(df['value'] < df['value'].quantile(0.01)) |
              (df['value'] > df['value'].quantile(0.99))]
```

### Handling Outliers

Do NOT automatically remove outliers. Instead:

1. **Investigate**: Is this a data error, a genuine extreme value, or a different population?
2. **Data errors**: Fix or remove (e.g., negative ages, timestamps in year 1970)
3. **Genuine extremes**: Keep them but consider using robust statistics (median instead of mean)
4. **Different population**: Segment them out for separate analysis (e.g., enterprise vs. SMB customers)

**Report what you did**: "We excluded 47 records (0.3%) with transaction amounts >$50K, which represent bulk enterprise orders analyzed separately."

### Time Series Anomaly Detection

For detecting unusual values in a time series:

1. Compute expected value (moving average or same-period-last-year)
2. Compute deviation from expected
3. Flag deviations beyond a threshold (typically 2-3 standard deviations of the residuals)
4. Distinguish between point anomalies (single unusual value) and change points (sustained shift)

## Hypothesis Testing Basics

### When to Use

Use hypothesis testing when you need to determine whether an observed difference is likely real or could be due to random chance. Common scenarios:

- A/B test results: Is variant B actually better than A?
- Before/after comparison: Did the product change actually move the metric?
- Segment comparison: Do enterprise customers really have higher retention?

### The Framework

1. **Null hypothesis (H0)**: There is no difference (the default assumption)
2. **Alternative hypothesis (H1)**: There is a difference
3. **Choose significance level (alpha)**: Typically 0.05 (5% chance of false positive)
4. **Compute test statistic and p-value**
5. **Interpret**: If p < alpha, reject H0 (evidence of a real difference)

### Common Tests

| Scenario | Test | When to Use |
|---|---|---|
| Compare two group means | t-test (independent) | Normal data, two groups |
| Compare two group proportions | z-test for proportions | Conversion rates, binary outcomes |
| Compare paired measurements | Paired t-test | Before/after on same entities |
| Compare 3+ group means | ANOVA | Multiple segments or variants |
| Non-normal data, two groups | Mann-Whitney U test | Skewed metrics, ordinal data |
| Association between categories | Chi-squared test | Two categorical variables |

### Practical Significance vs. Statistical Significance

**Statistical significance** means the difference is unlikely due to chance.

**Practical significance** means the difference is large enough to matter for business decisions.

A difference can be statistically significant but practically meaningless (common with large samples). Always report:
- **Effect size**: How big is the difference? (e.g., "Variant B improved conversion by 0.3 percentage points")
- **Confidence interval**: What's the range of plausible true effects?
- **Business impact**: What does this translate to in revenue, users, or other business terms?

### Sample Size Considerations

- Small samples produce unreliable results, even with significant p-values
- Rule of thumb for proportions: Need at least 30 events per group for basic reliability
- For detecting small effects (e.g., 1% conversion rate change), you may need thousands of observations per group
- If your sample is small, say so: "With only 200 observations per group, we have limited power to detect effects smaller than X%"

## When to Be Cautious About Statistical Claims

### Correlation Is Not Causation

When you find a correlation, explicitly consider:
- **Reverse causation**: Maybe B causes A, not A causes B
- **Confounding variables**: Maybe C causes both A and B
- **Coincidence**: With enough variables, spurious correlations are inevitable

**What you can say**: "Users who use feature X have 30% higher retention"
**What you cannot say without more evidence**: "Feature X causes 30% higher retention"

### Multiple Comparisons Problem

When you test many hypotheses, some will be "significant" by chance:
- Testing 20 metrics at p=0.05 means ~1 will be falsely significant
- If you looked at many segments before finding one that's different, note that
- Adjust for multiple comparisons with Bonferroni correction (divide alpha by number of tests) or report how many tests were run

### Simpson's Paradox

A trend in aggregated data can reverse when data is segmented:
- Always check whether the conclusion holds across key segments
- Example: Overall conversion goes up, but conversion goes down in every segment -- because the mix shifted toward a higher-converting segment

### Survivorship Bias

You can only analyze entities that "survived" to be in your dataset:
- Analyzing active users ignores those who churned
- Analyzing successful companies ignores those that failed
- Always ask: "Who is missing from this dataset, and would their inclusion change the conclusion?"

### Ecological Fallacy

Aggregate trends may not apply to individuals:
- "Countries with higher X have higher Y" does NOT mean "individuals with higher X have higher Y"
- Be careful about applying group-level findings to individual cases

### Anchoring on Specific Numbers

Be wary of false precision:
- "Churn will be 4.73% next quarter" implies more certainty than is warranted
- Prefer ranges: "We expect churn between 4-6% based on historical patterns"
- Round appropriately: "About 5%" is often more honest than "4.73%"

Источник: anthropics/knowledge-work-plugins / data / statistical-analysis ↗. Ссылка проверена 2026-10-10.