Pull to refresh

Comments 6

Спасибо за статью! Она помогла понять, что нужно собирать сырые данные данные теста и проверять вероятность ошибки false positive для метрики.
Могут ли быть нежелательные эффекты при ААБ–тесте: по А1 и А2 проверим вероятность ошибки false positive, а по А1 и Б делать выводы, если вероятность нас устаивает?
Имеет ли практический смысл проверять вероятность ошибки false negative?
  1. Мы проводим AAБ-тесты именно так. Но нежелательный эффект здесь все-таки есть. Предположим, что вероятность false-positive очень высока, например, 70%. Но нам "повезло": между группами A1 и A2 нет статистически значимой разницы. Но между группами A1 и B она, скорее всего, возникнет. И мы не поймем, что проблема с метрикой, пока не проведем достаточно большое число экспериментов, и не заметим, что A1A2-тест прокрашивается слишком часто. То есть, мне кажется, лучше совмещать подход, описанный в этой статье с ААБ-тестом: сначала проверить, что ошибка false-positive для метрики имеет разумное значение, а затем, с помощью ААБ-теста контроллировать, что ничего сильно не испортилось.


  2. Про false-negative, т. е. про ошибку второго рода. Да, конечно, ее имеет смысл проверять, если это легко сделать. Непосредственно false-negative мы не проверяли, т.к. эта ошибка зависит от реально существующей разницы между группами А и Б, то есть для каждой реальной разницы будет свое значение false-negative и не очень понятно, как эту разницу можно симулировать. О false-negative мы судим косвенным образом по false-positive. Если false-positive сильно меньше заданного уровня значимости, например, уровень значимости 5%, а false-positive = 0.5%, то это означает, что естественные колебания метрики от группы к группе значительно меньше, чем предполагает стат. тест. А это значит, что если между А и Б есть реальная разница, которая в несколько раз больше, чем естественные колебания метрики, то мы эту разницу, скорее всего, не увидим. А если бы стат. тест был бы точнее "настроен" на естественные колебания метрики, то есть false-positive примерно равнялся бы 5%, то тогда реальную разницу между А и Б стат. тест смог бы заметить.
То есть мы проводим ААБ тесты, по АБ части делаем выводы, а АА часть накапливаем и по нескольким десяткам последних для этой метрики проверяем, что он срабатывает (окрашивается) в рамках заданной вероятности false positive.

Да, примерно так. Но конкретно мы в компании смотрим пока что не на десятки, а на несколько АА-экспериментов. То есть, мы не пытаемся точно измерить false-positive по этим АА-тестам, а скорее проверяем, что нет сильных ухудшений. Например, если false-positive был равен 5% и вдруг увеличился в 5 раз и стал равен 25% (например, что-то сломалось и часть данных перестала логироваться), то на нескольких АА-тестах мы это заметим. Если false-positive изменился несильно и стал равен, скажем, 8%, то вряд ли мы такое заметим даже на нескольких десятках АА-тестах.

Вообще, спасибо за интересные вопросы!
Наибольшее обсуждение, в том числе, и внутри нашей команды вызвал вопрос про
ошибки второго рода (false-negative). В предыдущем комментарии я привел интуитивные соображения.
Здесь я постараюсь дать чуть более обоснованный ответ для Вас, для моих коллег и для всех читателей, кому это может быть интересно.


Итак, я хочу сказать, что ошибка первого рода, измерению которой и посвящена статья, несет в себе информацию и об ошибке второго рода.
Конечно, если стат. тест и метрика не являются какими-то экзотическими.


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


номер пары|разность метрик, X| есть ли разница между двумя группами пары, Y|
1 | 0.005 | 0 |
2 | 0.100 | 1 |
3 | 0.070 | 0 |
...


А роль стат. теста у нас выполняет алгоритм, который на вход принимает разность значений метрики между двумя группами (величину X)
и выдает ответ a(X) — есть ли, по мнению алгоритма, разница между группами А и Б.
Причем, пока что, никаких ограничений на выборку и на алгоритм мы не накладываем.
Алгоритм может быть любым. Он может давать ответ никак не учитывая выборку (например, в качестве алгоритма можно взять осминога Пауля).


Тогда, охарактеризовать качество алгоритма на размеченной выборке мы можем с помощью двух чисел: false-positive и false-negative.
Все остальные стандартные харакеристики: true-positive, true-negative, точность, полнота, F-мера
вычисляются из размеченной выборки и из этих двух чисел (из false-positive и false-negative).


В общем случае, false-positive и false-negative никак между собой не связаны. Алгоритм может очень редко ошибаться, предсказывая 1,
и очень часто ошибаться, предсказывая 0; а может редко ошибаться для 0, и часто ошибаться для 1.


А теперь давайте вспомним, что мы выполняем проверку стат. гипотез. Стат. тест, как алгоритм, обладает особенностью: если для
какой-то разности X_0 стат. тест предсказал 1, то для всех |X| > |X_0| стат. тест также будет предсказывать 1.
Размеченная выборка тоже обладает особенностью: X и Y сильно коррелированны. Чем больше модуль X,
тем чаще в Y будут встречаться 1.


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


Насколько сильно они скореллированны мне сложно сказать.
Конечно, степень коррелированности зависит от распределения значения метрики в группе.
Если предположить, что значение метрики в группе имеет мультимодальное распределение (например, двухгорбое), или,
что в этом распределении тяжелые хвосты (например, много сильных выборосов),
то корреляция между false-positive и false-negative уже не так очевидна.
Но часто значение метрики в группе — это среднее значение по всем пользователям в группе.
Мне сложно представить, чтобы среднее значение имело бы какое-то страшное распределение.
А если у значения метрики в группе хорошее одногорбое распределение с легкими хвостами,
то, мне кажется, что false-positive будет нести информацию и о false-negative.
То есть, по измеренной ошибке первого рода, можно делать вывод о качестве системы A/B-тестирования.

А теперь давайте вспомним, что мы выполняем проверку стат. гипотез.
Стат. тест, как алгоритм, обладает особенностью: если для какой-то разности X_0
стат. тест предсказал 1, то для всех |X| > |X_0| стат. тест также будет предсказывать 1.

В общем случае это, если я правильно понял утверждение, неверно. Статтесты (многие, во всяком случае) учитывают не только величину разности, но и свойства выборки. Т.е. можно себе представить ситуацию, когда при меньшей по модулю разности средних между A и B тест говорит, что изменения значимы, а при большей по модулю разности между тем же A и неким C тот же тест скажет, что значимой разницы нет.

Поэтому ошибку второго рода надо проверять всё-таки отдельно.
Sign up to leave a comment.