В рамках BI решаются различные задачи, в том числе и с помощью статистических методов, для корректного выбора которых важно обращать внимание на содержание задачи. Например, если нужны только средние значения для графика, то действительно достаточно их рассчитать. Но иногда требуется решить другие задачи, например, не просто расчет средних значений двух выборок, но и сравнение средних двух выборок, чтобы узнать, в какой выборке среднее больше или меньше. Кроме того, данных для сравнения может быть столько, что они могут не умещаться на графике. В этом случае важно переключиться на подходящую статистическую гипотезу и использовать корректные статистические методы, намного более интересные, чем отображение средних значений на графике. Здесь могут быть эффективны методы дисперсионного анализа (ANOVA), или, в частном случае, когда речь идет о расчетах для одного фактора — методы сравнения средних двух выборок, и, например, метод Кохрена-Кокса. О том, какие результаты подобный подход дает на практике, а также о преимуществах работы с DAX при сравнении средних значений, читайте под катом.
Давайте начнем с простого. Можно проиллюстрировать разницу в важности выбора подходящего метода на примере броска монеты. Система событий для броска монеты состоит из двух событий: орел A с вероятностью PA = 0.5 и решка B с вероятностью PB = 0.5. Например, нам нужно узнать не среднее значение «вероятности орла» или «вероятности решки», а лишь узнать, стандартная ли это монета, причем встречаются «стандартные» и «явно нестандартные монеты», т. е. «выдает» ли монета вероятности 0.5 орла и 0.5 решки, или условно среднее значение вероятности орла для монеты больше среднего значения монеты, взятой за «эталонную».
Предположим, мы сделали 4 броска монеты и 4 раза подряд получили орла. Теоретическая вероятность такого равна 0.54 = 1/16 = 0.0625. Таким образом, на основе всего 4 наблюдений с вероятностью 1 — 0.0625 = 0.9375 уже можно утверждать, что монета нестандартная. Таким образом, в таком случае и не нужно условно проводить 10 или 100 бросков монеты, чтобы более точно оценить вероятность выпадения орла, если нас устраивает доверительная вероятность 0.9375.
Это простейшая иллюстрация, показывающая пользу корректного выбора статистических методов и статистических гипотез. В этом примере нет двух выборок, но видно, что вид гипотезы и используемые методы «решают всё» и определяют успех исследования и получаемые результаты, в частности, количество наблюдений, точность результатов и т.д.
Аналогичные приемы можно использовать и в прикладных сферах, например при анализе продаж по клиентам с учетом возвратов и так далее, т.е. пример с монетой не является отвлеченным и его можно адаптировать под любую реальную практическую задачу.
Существуют разные статистические методы для сравнения средних двух выборок, например, однофакторный дисперсионный анализ ANOVA и соответствующие критерии. Многофакторный ANOVA может учитывать дополнительные факторы, однако в базовом случае достаточно одного из критериев однофакторного ANOVA, в данном случае рассмотрен критерий Кохрена-Кокса, который позволяет работать с двумя выборками разного размера, что позволяет более гибко его применять.
Алгоритм применения критерия Кохрена-Кокса
Он описан во многих источниках, есть смысл привести его ещё раз здесь для удобства понимания расчетов.
-
Даны две независимые выборки:
(размер
)
(размер
)
-
Вычисляем выборочные средние:
-
Вычисляем исправленные выборочные дисперсии (в знаменателе размер выборки минус 1):
-
Находим t-статистику Кохрена-Кокса:
-
Определяем число степеней свободы по формуле Уэлча, причем округляем
до ближайшего целого числа:
Определяем критическое значение
из таблицы распределения Стьюдента для одностороннего теста с уровнем значимости
, причем это значение
положительно.
-
Принимаем или отвергаем
:
Если
, отвергаем
в пользу
, т.е. среднее первой выборки значимо меньше среднего второй выборки.
Если
, нет оснований отвергать
, т.е. разница между средними не является статистически значимой.
Таким образом, критерий Кохрена-Кокса позволяет проверить гипотезу о том, что одно среднее меньше другого, даже если выборки разного размера и имеют разные дисперсии. Это делает его более гибким, чем стандартный t-критерий Стьюдента.
Пример расчета критерия Кохрена-Кокса в Visiology
Рассмотрим схему данных с таблицей продаж sales
с полями идентификатор клиента customer_id
, номер заказа sales_order_number
, сумма продажи sales_amount
и полная сумма с учетом возвратов и скидок total_amount
, и таблицу с клиентами customer
с полями идентификатор клиента customer_id
и имя клиента lastname
.

Проверим, что в total_amount
есть значимая деградация по сравнению с sales_amount
в разрезе клиентов, что может быть обусловлено, например, возвратами или излишними скидками и может говорить о проблемах с продажами для клиента.
Создадим DAX меры в Visiology (платформа Visiology с каждой версией совершенствуется и дальше будет больше удобства):
Первая выборка = sales[total_amount]
Вторая выборка = sales[salesamount]
Число степеней свободы = (
STDEVX.S ( sales, sales[Первая выборка] )
/ COUNTX ( sales, sales[Первая выборка] )
+ STDEVX.S ( sales, sales[Вторая выборка] )
/ COUNTX ( sales, sales[Вторая выборка] )
)
* (
STDEVX.S ( sales, sales[Первая выборка] )
/ COUNTX ( sales, sales[Первая выборка] )
+ STDEVX.S ( sales, sales[Вторая выборка] )
/ COUNTX ( sales, sales[Вторая выборка] )
)
/ (
STDEVX.S ( sales, sales[Первая выборка] )
/ COUNTX ( sales, sales[Первая выборка] )
* STDEVX.S ( sales, sales[Первая выборка] )
/ COUNTX ( sales, sales[Первая выборка] )
/ ( COUNTX ( sales, sales[Первая выборка] ) - 1 )
+ STDEVX.S ( sales, sales[Вторая выборка] )
/ COUNTX ( sales, sales[Вторая выборка] )
* STDEVX.S ( sales, sales[Вторая выборка] )
/ COUNTX ( sales, sales[Вторая выборка] )
/ ( COUNTX ( sales, sales[Вторая выборка] ) - 1 )
)
Примечательно, что DAX в Visiology содержит необходимые статистические функции (не только обычные STDEV.S
и STDEV.P
, но и версии с итератором STDEVX.S
и STDEVX.P
), что позволяет удобно рассчитать оценку дисперсии на основе выборки STDEVX.S
со знаменателем n — 1, что и требуется для критерия.
Также используется мера для получения теоретического значения критерия Стьюдента на уровне значимости 0.05:
Теоретическое значение критерия = SWITCH (
TRUE,
sales[Число степеней свободы] <= 1, 12.70,
sales[Число степеней свободы] <= 2, 4.303,
sales[Число степеней свободы] <= 3, 3.182,
sales[Число степеней свободы] <= 4, 2.776,
sales[Число степеней свободы] <= 5, 2.571,
sales[Число степеней свободы] <= 6, 2.447,
sales[Число степеней свободы] <= 7, 2.365,
sales[Число степеней свободы] <= 8, 2.306,
sales[Число степеней свободы] <= 9, 2.262,
sales[Число степеней свободы] <= 10, 2.228,
sales[Число степеней свободы] <= 20, 2.086,
sales[Число степеней свободы] <= 30, 2.042,
sales[Число степеней свободы] <= 40, 2.021,
sales[Число степеней свободы] <= 50, 2.009,
1.967
)
Мера для наблюдаемого значения критерия Кохрена-Кокса (мера sales[SQRT]
подсчитана отдельно как корень также на основе
STDEVX.S
и COUNTX
):
Наблюдаемое значение = (
AVERAGEX ( sales, sales[Первая выборка] )
- AVERAGEX ( sales, sales[Вторая выборка] )
)
/ sales[SQRT]
)
Наконец, мера для проверки гипотезы:
Среднее первой выборки меньше среднего второй выборки =
IF (
sales[Наблюдаемое значение] < ( - sales[Теоретическое значение критерия] ),
"Среднее первой выборки меньше",
"Одинаковые"
)
В итоге можно получить дашборд (например, таблицу), в которой отмечены только клиенты со статистически значимым ухудшением total_amount
по сравнению с sales_amount
на уровне значимости 0.05, что может говорить, например, о проблемах с возвратом товара.

Таким образом, уже не нужно делать предположения по поводу отличий total_amount
и sales_amount
, и есть возможность руководствоваться формальным критерием с заданным уровнем значимости 0.05, а не сравнением средних значений «на глаз», что может формализовать и упростить анализ данных продаж, упрощает принятие решений.
Желаю успешных дашбордов :)