«Есть ложь, наглая ложь и статистика» — этот афоризм, по утверждению Марка Твена, принадлежит премьер‑министру Великобритании Бенджамину Дизраэли. А по мнению скептиков — самому Твену. Как бы там ни было, статистика не так уж и врёт, по крайней мере не больше, чем машинное обучение (ML). Более того — в некоторых случаях она может оказаться привлекательнее, надёжнее и значительно дешевле, чем обучение и внедрение ML‑моделей.

В этой статье я пропущу очевидные вещи вроде среднего, медианы и моды и сразу перейду к более интересным и полезным инструментам. Примеры и код — на Python, с использованием библиотек numpy, pandas.

1. Средневзвешенное значение — более честное, чем обычное среднее значение

Обычное среднее — показатель капризный. Оно неустойчиво к выбросам и часто искажает картину. Например:

В компании директор получает $10, а уборщица — $0.10. Суммируем и делим на двоих — получаем среднюю зарплату $5.05. Уверен, уборщица с такой арифметикой не согласится.

Взвешенное среднее решает проблему:

import numpy as np  

salary = np.array([10.0, 0.10])  
weight = np.array([1, 10])  

result = np.sum(salary * weight) / np.sum(weight)  
print(f"Weighted average: ${result:.2f}")

? Результат: $1.00 — уже куда ближе к реальности.

Где это полезно:

  • при анализе доходов по каналам продаж;

  • при учёте доли клиентов в группах;

  • в расчётах с сильным перекосом в частотах.

2. Стандартное отклонение — насколько сильно данные «колеблются» вокруг среднего значения

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

Пример: зарплаты в компании

import pandas as pd  
import numpy as np  

data = {  
    "Employee": ["Ivan", "Maria", "Oleg", "Anna", "CEO"],  
    "Salary": [500, 400, 450, 550, 5000]  
}  

df = pd.DataFrame(data)  
n = len(df['Salary'])  
mean_ = df['Salary'].mean()  
s = np.sqrt(np.sum((df['Salary'] - mean_) ** 2) / (n - 1))  

print(f"Standard deviation: {s:.2f}")  

? Результат: 2024.41 — огромный разброс, вызванный зарплатой директора.

Вывод: стандартное отклонение сразу показывает, что у нас сильное смещение и простое среднее здесь неадекватно.

3. Дисперсия — квадратичная версия отклонения

Дисперсия — это то же стандартное отклонение, только без корня. То есть отклонения считаются в квадрате единиц (рубли², кг² и т.д.), и интерпретировать её сложнее. Тем не менее она полезна, когда нужно сравнить стабильность и однородность данных.

Пример: кофейня и количество продаж

import numpy as np  

sales = np.array([90, 95, 92, 93, 91, 200, 210])  
mean_sales = np.mean(sales)  
dispersion = np.sum((sales - mean_sales) ** 2) / (len(sales) - 1)  

print("Variance:", dispersion)  

? Среднее = 110 чашек, но на деле будни продают по 90–95, а выходные — по 200+. Дисперсия покажет неоднородность и поможет понять, что данные нужно разделять по сегментам.

4. Корреляция Пирсона — линейная зависимость (с оговорками)

Корреляция — вещь полезная. Она показывает, как одна переменная линейно связана с другой. Подчеркну: линейно и математически. Это не означает причинно-следственную связь, и это важно помнить.

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

Пример: сколько учишься — так и пишешь тест

import numpy as np  

X = np.array([1, 2, 3, 4, 5])  # study hours  
Y = np.array([50, 55, 60, 65, 70])  # test scores  

x_mean = np.mean(X)  
y_mean = np.mean(Y)  

corXY = np.sum((X - x_mean) * (Y - y_mean))  
corr_sqrt = np.sqrt(np.sum((X - x_mean)**2) * np.sum((Y - y_mean)**2))  

res = corXY / corr_sqrt  
print(f"Pearson correlation: {res:.2f}")

? Результат будет 1.00 — идеальная линейная зависимость.

Зачем тогда квадрат корреляции?

Чтобы понять, какая доля изменений одной переменной объясняется другой. Если r = 0.9, то r² = 0.81 → 81% изменений объясняются, остальное — случайность или другие факторы.

В ML это называют коэффициент детерминации, и он активно используется для оценки качества регрессий.

5. Тест «хи-квадрат» — соответствуют ли наши ожидания реальности?

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

Так вот, хи-квадрат помогает узнать, насколько прогноз отличается от полученного результата.

? И, как всегда в статистике, есть свои подводные камни:

·         оба набора данных должны быть одинаковой длины — что логично;

·         в ожидаемых значениях не должно быть нулей, математика не любит их, особенно при делении;

·         хи-квадрат возвращает безразмерный результат: это не проценты и не «единицы измерения данных», а просто число, которое показывает, насколько сильно расхождение между ожиданиями и реальностью. Причём чем больше это число, тем сильнее расхождение.

Вот простой пример расчёта хи-квадрат-статистики:

import numpy as np  

O = np.array([1, 2, 3, 4, 7, 9, 11, 13, 14])  # observed  
E = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])    # expected  

xi = np.sum((O - E) ** 2 / E)  
print(f"Chi-square statistic: {xi:.2f}")

6. Распределение Пуассона — когда редкие события перестают быть неожиданностью

Распределение Пуассона используется, когда нужно предсказать, сколько раз случится редкое событие за фиксированный период времени или в определённой области. Это один из самых полезных и недооценённых инструментов статистики — особенно в бизнесе, где «редкие» события вроде жалоб, отказов или сбоев случаются регулярно.

Например:

  • Сколько клиентов позвонят в поддержку за вечер?

  • Сколько заказов поступит на сайт за час?

Пусть в среднем с лендинга приходит 3 заявки в день. Какова вероятность, что сегодня придут ровно 5?

в распределении Пуассона следующие переменные:

·         λ — среднее количество событий за интервал,

·         k — количество событий, которое нас интересует,

·         e — основание натурального логарифма (примерно 2.718),

·         k! — факториал числа k.

Пусть в среднем с лендинга приходит 3 заявки в день. Какова вероятность, что сегодня придут ровно 5?

import math   

λ = 3   # среднесуточное количество потенциальных клиентов  
 k = 5   # вероятность того, что сегодня будет ровно 5 потенциальных клиентов  

prob = (λ ** k) * math.exp(-λ) / math.factorial(k)   
print ( f"Вероятность 5 потенциальных клиентов: {prob: .4 f} " )

? Результат: 0.1008, то есть около 10.08%

Где пригодится:

  • в маркетинге — для оценки откликов на рекламу,

  • в техподдержке — чтобы спрогнозировать нагрузку на операторов,

  • в логистике — чтобы оценить число заказов/возвратов,

  • в безопасности — при анализе частоты инцидентов,

  • в финансах — при оценке количества просрочек или рисков.

Важное замечание:

Распределение Пуассона предполагает, что:

  1. события происходят независимо друг от друга;

  2. вероятность события постоянна для любого маленького отрезка времени;

  3. нельзя иметь два события одновременно (одно за раз).

7. Биномиальное распределение — успех или неудача с вероятностью

Так, дальше тоже интересно – биномиальное распределение – это такая штуковина, которая помогает понять сколько при фиксированном количестве независимых испытаний произойдёт успешный исход, с учетом того, что есть только два исхода успех/неудача

Ключевые характеристики биномиального распределения:

  • n — общее число испытаний (например, писем, бросков, клиентов)

  • k — количество успехов (например, открытые письма, победы)

  • p — вероятность успеха в каждом отдельном испытании

  • 1 - p — вероятность неудачи

 n = 100  # общее количество писем

k = 70   # количество открытых писем

p = 0.7  # вероятность открытия одного письма

import math   

n = 100  
 k = 70  
 p = 0,7  

b_coef = math.factorial(n) / (math.factorial(k) * math.factorial(n - k))   
prob = b_coef * (p ** k) * (( 1 - p) ** (n - k))   

print ( f"Вероятность 70 открытий: {prob: .6 f} " )  

Примеры, когда используется биномиальное распределение:

  1. Email-маркетинг: из 100 писем 70 открыли — насколько это вероятно, если шанс открытия 0.7?

  2. Контроль качества: из 20 деталей 2 бракованные — насколько это отклонение?

  3. A/B тесты: из 1000 пользователей 300 кликнули на кнопку — насколько это лучше, чем 250 у варианта B?

  4. Медицина: у 8 из 100 пациентов побочные эффекты — это в пределах нормы?

8. Экспоненциальное распределение — сколько времени осталось до следующего события?

Экспоненциальное распределение — это способ посчитать, сколько времени пройдёт до того, как произойдёт какое-то случайное событие, если такие события случаются равномерно, случайно и независимо друг от друга.

Например:

  • сколько времени пройдёт до следующего звонка в кол‑центр,

  • когда снова сломается техника,

  • через сколько минут придёт следующий клиент.

То есть, оно отвечает на вопрос: «Сколько ждать до следующего события, если такие события случаются с постоянной средней скоростью?»

import math   

lambd = 4    # avg 4 вызова/час  
 x = 1 / 3      # 20 минут = 1/3 часа  

prob = lambd * math.exp(-lambd * x)   
print ( f"Вероятность следующего вызова через 20 мин: {prob: .4 f} " )

Заключительные мысли

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

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

Источник изображения

Комментарии (0)