Nikolay-Lysenko/readingbricks

View on GitHub
notes/machine_learning/statistics_and_ab_experiments.ipynb

Summary

Maintainability
Test Coverage
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "математическая_статистика"
    ]
   },
   "source": [
    "## Точечное оценивание параметров в классической статистике\n",
    "\n",
    "#### Постановка задачи\n",
    "\n",
    "Пусть есть параметрическое семейство вероятностных распределений $p_\\theta(x)$, параметризованное вектором $\\theta \\in \\mathbb{R}^k$ (в частности, при $k = 1$ это будет просто число). При этом для этого семейства не вводится жёсктих ограничений, над каким множеством должны быть распределения из него: например, каждое значение $x$ может быть кортежем вещественных и категориальных векторов.\n",
    "\n",
    "Обозначим за $(x_i)_{i=1}^n$, где $n \\in \\mathbb{N}$, кортеж из значений, которые были независимым образом просэмплированы из распределения $p_{\\theta_{true}}(x)$, где $\\theta_{true}$ — неизвестный зафиксированный вектор.\n",
    "\n",
    "Требуется построить функцию $f$, которая бы для произвольных $n$ кортеж $(x_i)_{i=1}^n$ отображала бы в оценку $\\hat{\\theta} \\in \\Theta \\subset \\mathbb{R}^k$, где $\\Theta$ — множество, в котором ищется оценка. Довольно часто $\\Theta$ совпадает с $\\mathbb{R}^k$, но иногда оно учитывает такие ограничения, как, скажем, неотрицательность некоторых компонент вектора $\\theta$. В русскоязычной литературе оценкой порой называют и саму функцию $f$, и возвращённое ей значение $\\hat{\\theta} = f\\left((x_i)_{i=1}^n\\right)$. Чтобы не было путаницы, в этой заметке $f$ будет называться оценивающей функцией (estimator), а $\\hat{\\theta}$ — оценкой (estimate).\n",
    "\n",
    "#### Свойства оценивающих функций\n",
    "\n",
    "Очевидно, строить оценивающие функции можно разными способами, поэтому необходимо ввести свойства, которыми в идеале они должны обладать. Эти свойства таковы:\n",
    "* несмещённость: $\\forall n \\ge 1$ $\\mathbb{E}_{p_{\\theta_{true}}(x)} f\\left((x_i)_{i=1}^n\\right) = \\theta_{true}$;\n",
    "* асимптотическая несмещённость (более слабое свойство, чем несмещённость): $\\lim_{n \\to +\\infty} \\mathbb{E}_{p_{\\theta_{true}}(x)} f\\left((x_i)_{i=1}^n\\right) = \\theta_{true}$;\n",
    "* состоятельность: $\\forall \\varepsilon > 0$ $\\lim_{n \\to +\\infty} \\mathbb{P}(\\Vert f\\left((x_i)_{i=1}^n\\right) - \\theta_{true} \\Vert > \\varepsilon) = 0$;\n",
    "* эффективность в некотором классе: $f$ имеет наименьшую ожидаемую среднеквадратичную ошибку $\\mathbb{E}[(f\\left((x_i)_{i=1}^n\\right) - \\theta_{true})^T(f\\left((x_i)_{i=1}^n\\right) - \\theta_{true})]$ среди всех оценивающих функций, принадлежащих этому классу.\n",
    "\n",
    "Пример оценивающей функции, являющейся несмещённой, но не являющейся состоятельной: $f\\left((x_i)_{i=1}^n\\right) = x_1$ как оценка для среднего при $x_i \\in \\mathbb{R}^l$. Пример оценивающей функции, не являющейся несмещённой, но являющейся состоятельной: $f\\left((x_i)_{i=1}^n\\right) = \\sum_{i=1}^n (x_i - \\frac{1}{n}\\sum_{1=1}^n x_i)^2$ как оценка для дисперсии при $x_i \\in \\mathbb{R}$. Эта же оценка является асимптотически несмещённой (и стала бы несмещённой, если бы добавили множитель $\\frac{n}{n - 1}$, вводящий поправку на то, что среднее, посчитанное по $n$ наблюдениям, «отбирает» одну степень свободы у этих $n$ наблюдений).\n",
    "\n",
    "#### Метод максимального правдоподобия\n",
    "\n",
    "Метод максимального правдоподобия задаёт оценивающую функцию $f$ в неявном виде как решение оптимизационной задачи:\n",
    "$$f\\left((x_i)_{i=1}^n\\right) = \\arg \\max_\\theta p_\\theta\\left((x_i)_{i=1}^n\\right) = \\arg \\max_\\theta \\prod_{i=1}^n p_\\theta(x_i),$$\n",
    "где последнее равенство опирается на независимость $x_i$. На практике от правой части берут логарифм: это не меняет точку максимума в оптимизационной задаче, но делает вычисления более стабильными.\n",
    "\n",
    "Если выборка $(x_i)_{i=1}^n$ действительно была порождена из какого-либо распределения из семейства $p_\\theta(x)$, а ещё никакое другое значение $\\theta \\ne \\theta_{true}$ не даёт то же самое распределение $p_{\\theta_{true}}(x)$, то метод максимального правдоподобия является состоятельным. Также он является эффективным в классе всех состоятельных оценивающих функций (неравенство Рао-Крамера).\n",
    "\n",
    "#### Обобщение на случай условных распределений\n",
    "\n",
    "Пусть теперь семейство распределений $p_\\theta(z)$ таково, что величины $z$, над которыми оно определено, разнородны: каждое значение $z$ можно разделить на признаки $x$ и целевую переменную $y$. Тогда $p_\\theta(z) = p_\\theta(x) p_\\theta(y \\vert x)$. Если интересует лишь задача предсказания $y$ по $x$ (то есть нужна дискриминативная модель), то можно ограничиться $p_\\theta(y \\vert x)$. Для такого условного распределения тоже можно оценивать параметр $\\theta$ в виде $\\hat{\\theta} = f\\left(((x_i, y_i))_{i=1}^n\\right)$.\n",
    "\n",
    "Тут становится видна связь с машинными обучением (на которое, кстати, можно посмотреть как на раздел статистики, где упор сделан на использовании вычислительных возможностей компьютеров и меньше внимания уделяется доверительным интервалам). Проиллюстрируем эту связь на примере. Пусть $x_i \\in \\mathbb{R}^k$, где $k$ то же самое, что в размерности $\\theta$, $y_i \\in \\mathbb{R}$, $p_\\theta(y \\vert x) = \\mathcal{N}_{(\\theta^T x, \\sigma^2)}$, где $\\sigma$ — среднеквадратическое отклонение шума. Оценка $\\hat{\\theta}$, полученная методом максимального правдоподобия в такой задаче, будет совпадать с вектором весов линейной регрессии, обученной методом наименьших квадратов. А если бы в $p_\\theta(y \\vert x)$ шум, отклоняющий $y$ от $\\theta^T x$ был бы не гауссовским, а лапласовским, в качестве функции потерь пришлось бы брать MAE, а не MSE."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "математическая_статистика"
    ]
   },
   "source": [
    "## Интервальное оценивание параметров в классической статистике\n",
    "\n",
    "#### Постановка задачи\n",
    "\n",
    "Как и в случае с [точечным оцениванием](__home_url__/notes/Точечное оценивание параметров в классической статистике) пусть есть параметрическое семейство вероятностных распределений $p_\\theta(x)$, параметризованное вектором $\\theta \\in \\mathbb{R}^k$. Обозначим за $(x_i)_{i=1}^n$, где $n \\in \\mathbb{N}$, кортеж из значений, которые были независимым образом просэмплированы из распределения $p_{\\theta_{true}}(x)$, где $\\theta_{true}$ — неизвестный зафиксированный вектор.\n",
    "\n",
    "В общем случае требуется построить функцию $f$, которая бы кортеж $(x_i)_{i=1}^n$ отображала бы во множество $I \\subset \\mathbb{R}^k$, такое что оно с вероятностью $\\alpha$ содержит $\\theta_{true}$, где $\\alpha$ задана заранее. Такие множества $I$ называют 100$\\alpha$%-ными доверительными множествами для значения $\\theta_{true}$. В частном случае $k = 1$ множество $I$ часто ищут в виде интервала, и тогда оно называется 100$\\alpha$%-ным доверительным интервалом.\n",
    "\n",
    "Концепцию доверительного множества порой неверно истолковывают, и, чтобы избежать этого, уточним, что означает, что $I$ с вероятностью $\\alpha$ содержит $\\theta_{true}$. По построению $I = f\\left((x_i)_{i=1}^n\\right)$, то есть $I$ является значением функции, аргумент которой случаен, а именно порождён из распределения $p_{\\theta_{true}}(x)$. Относительно этого распределения и берётся вероятность.\n",
    "\n",
    "#### Общая методология\n",
    "\n",
    "Краткости ради рассмотрим только случай доверительных интервалов, когда $\\theta \\in \\mathbb{R}$.\n",
    "\n",
    "Для решения задачи интервального оценивания достаточно найти такую функцию $g$, отображающую пару из кортежа $(x_i)_{i=1}^n$ и оцениваемого параметра $\\theta_{true}$ в вещественное число, которая обладала бы следующим свойством: распределение случайной величины $g\\left((x_i)_{i=1}^n, \\theta_{true}\\right)$ не зависит от $\\theta_{true}$, а его квантили можно вычислить. Если такая функция $g$ есть, то возьмём интервал от $\\frac{1 - \\alpha}{2}$-квантили до $\\frac{(1 + \\alpha)}{2}$-квантили распределения случайной величины $g\\left((x_i)_{i=1}^n, \\theta_{true}\\right)$. Обозначим его за $J$. Тогда $I = \\{\\theta: g\\left((x_i)_{i=1}^n, \\theta\\right) \\in J\\}$ является доверительным интервалом для $\\theta_{true}$.\n",
    "\n",
    "#### Примеры\n",
    "\n",
    "Вышеописанная методология ничего не говорит про то, откуда взять функцию $g$ с желаемыми свойствами, но из примеров может стать яснее, чем руководствоваться при её выборе.\n",
    "\n",
    "Пусть $p_\\theta(x)$ — семейство нормальных распределений, параметризованных вектором $\\theta = (\\mu, \\sigma^2)$, то есть вектором среднего и дисперсии.\n",
    "\n",
    "Для начала построим доверительный интервал для $\\mu_{true}$. Обозначим за $\\overline{x}$ эмпирическое среднее: $$\\overline{x} = \\frac{1}{n} \\sum_{i=1}^n x_i,$$\n",
    "а за $\\overline{s}$ — оценку среднеквадратичного отклонения:\n",
    "$$\\overline{s} = \\sqrt{\\frac{1}{n - 1} \\sum_{i=1}^n (x_i - \\overline{x})^2}.$$\n",
    "\n",
    "Положим, что:\n",
    "$$g\\left((x_i)_{i=1}^n, \\theta_{true}\\right) = \\frac{\\sqrt{n}(\\overline{x} - \\mu_{true})}{\\overline{s}}.$$\n",
    "Чтобы так подобрать функцию $g$, пришлось воспользоваться тем, что из математической статистики известно, что правая часть имеет распределение Стьюдента с $n - 1$ степенями свободы. Таким образом, квантили этого распределения могут быть вычислены, а само оно не зависит от $\\theta_{true}$. Если же обозначить $\\frac{(1 - \\alpha)}{2}$-квантиль распределения Стьюдента с $n - 1$ степенями свободы за $t_{(1 - \\alpha) / 2}$ ($\\frac{(1 + \\alpha)}{2}$-квантиль можно не вводить, ведь распределение Стьюдента симметричное), то получим, что для $\\mu_{true}$ 100$\\alpha$%-ный доверительный интервал имеет вид:\n",
    "$$\\left(\\overline{x} - \\frac{\\overline{s}}{\\sqrt{n}}t_{(1 - \\alpha) / 2}, \\overline{x} + \\frac{\\overline{s}}{\\sqrt{n}}t_{(1 - \\alpha) / 2}\\right).$$\n",
    "\n",
    "Теперь построим доверительный интвервал для $\\sigma_{true}^2$. Опять же, знание математической статистики позволяет подобрать функцию $g$:\n",
    "$$g\\left((x_i)_{i=1}^n, \\theta_{true}\\right) = \\frac{n-1}{\\sigma_{true}^2}\\overline{s}^2.$$\n",
    "Тут $g$ была выбрана так, чтобы правая часть имела $\\chi^2$-распределение c $n - 1$ степенями свободы. Обозначим его $\\frac{1 - \\alpha}{2}$-квантиль и $\\frac{(1 + \\alpha)}{2}$-квантиль за $\\chi_{(1 - \\alpha) / 2}^2$ и $\\chi_{(1 + \\alpha) / 2}^2$ соответственно. Тогда для $\\sigma_{true}^2$ 100$\\alpha$%-ный доверительный интервал имеет вид:\n",
    "$$\\left(\\frac{(n-1)\\overline{s}^2}{\\chi_{(1 + \\alpha) / 2}^2}, \\frac{(n-1)\\overline{s}^2}{\\chi_{(1 - \\alpha) / 2}^2}\\right).$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "математическая_статистика"
    ]
   },
   "source": [
    "## Проверка гипотез в классической статистике\n",
    "\n",
    "#### Постановка задачи\n",
    "\n",
    "В отличие от [точечного](__home_url__/notes/Точечное оценивание параметров в классической статистике) или [интервального](__home_url__/notes/Интервальное оценивание параметров в классической статистике) оценивания параметров проверка гипотез не требует, чтобы выборка была порождена из какого-либо элемента параметрического семейства вероятностных распределений. Более того, теперь может быть дана не одна выборка, а сразу несколько.\n",
    "\n",
    "Для начала всё же остановимся на ситуации, когда выборка одна. Тогда в общем случае предполагается, что есть два непересекающихся множества вероятностных распределений $P_0$ и $P_a$ над произвольным множеством $S$. Обозначим за $(x_i)_{i=1}^n$, где $n \\in \\mathbb{N}$, кортеж из элементов $S$, которые были независимым образом просэмплированы из распределения $p_{true}(x)$, про которое известно, что оно принадлежит либо $P_0$, либо $P_a$. Так называемая *нулевая гипотеза* гласит, что $p_{true}(x) \\in P_0$, в то время как *альтернативная гипотеза* гласит, что $p_{true}(x) \\in P_a$. Далее нулевая гипотеза иногда будет обозначаться как $H_0$, а альтернативная — как $H_a$. В задаче статистической проверки требуется установить, есть ли в выборке $(x_i)_{i=1}^n$ свидетельства в пользу того, что нулевую гипотезу следует отклонить в пользу альтернативной. Конкретная реализация, отображающая $(x_i)_{i=1}^n$ в бинарное решение, отвергать ли нулевую гипотезу, называется *статистическим тестом* или *статистическим критерием*.\n",
    "\n",
    "Не будет лишним обратить внимание на несимметричность нулевой и альтернативной гипотез. Статистическая проверка не выбирает одну из этих двух гипотез. Она лишь ищет свидетельства в пользу отклонения нулевой гипотезы, а если их не находит, то не отвергает её. Вполне может так получиться, что нулевая гипотеза не отклоняется, но, если поменять местами нулевую и альтернативную гипотезы, та гипотеза, которая исходно была альтернативной, тоже не будет отклонена.\n",
    "\n",
    "И, наконец, формализуем многовыборочные статистические тесты. В них дано $l$ выборок $(x_i^{(j)})_{i=1}^{n_j}$, где $j \\in \\{1, \\dots, l\\}$, а элементами множеств $P_0$ и $P_a$ являются кортежи длины $l$ из вероятностных распределений, причём предполагается, что в $P_0$ или в $P_a$ существует такой кортеж $\\mathrm{p}_\\mathrm{true}$, что $\\forall j \\in \\{1, \\dots, l\\}$ выборка $(x_i^{(j)})_{i=1}^{n_j}$ независимо просэмплирована из распределения, являющегося $j$-м элементом кортежа $\\mathrm{p}_\\mathrm{true}$. Приведённый только что формализм может звучать слишком абстрактно, поэтому вот простой пример. Пусть есть две выборки, порождённые из нормальных распределений, множество $P_0$ образуют все такие пары нормальных распределений, у которых математические ожидания равны, а множество $P_a$ образуют все такие пары нормальных распределений, у которых они не равны. Тогда статистический тест будет проверять гипотезу, что матожидания у этих двух распределений равны. Далее, чтобы не перегружать текст индексацией элементов, будут рассматриваться только одновыброчные тесты, но обобщение на случай многовыброчных тестов делается прямолинейным образом.\n",
    "\n",
    "#### Значимость и мощность\n",
    "\n",
    "Назовём *ошибкой первого рода* ситуацию, когда $H_0$ была верна, но её отвергли. Эту ситуацию ещё называют ложноположительным срабатыванием, когда контекст таков, что $H_0$ описывает штатное состояние, а $H_a$ гласит о наличии аномалии. Для заданного статистического теста для любого распределения $p(x) \\in P_0$ можно вычислить вероятность того, что если выборка $(x_i)_{i=1}^n$ порождена из $p(x)$, то этот тест отклонит $H_0$. Если множество $P_0$ содержит ровно один элемент, то мы можем эту вероятность назвать вероятностью ошибки первого рода для статистического теста в целом. Эту вероятность обозначают как $\\alpha$ и называют *значимостью* теста. Если во множестве $P_0$ больше одного элемента, для разных распределений из него могут получаться разные вероятности ошибки первого рода, поэтому без какого-то априорного распределения над элементами $P_0$ единую вероятность не получить (по крайней мере, в общем случае).\n",
    "\n",
    "Назовём *ошибкой второго рода* ситуацию, когда $H_0$ не отклонили, но верна была $H_a$. Эту ситуацию ещё называют ложноотрицательным срабатыванием. Если для некоторого статистического теста его вероятность ошибки второго рода обозначить за $\\beta$, то величину $1 - \\beta$ называют *мощностью* этого теста. Впрочем, на практике $P_a$ гораздо реже, чем $P_0$, содержит ровно один элемент, и поэтому мощность — это, скорее, теоретическое понятие. Ниже будет введено менее общее, но зато более прикладное понятие минимального детектируемого эффекта, которое можно считать дополнением к понятию мощности.\n",
    "\n",
    "#### Общий вид статистического теста\n",
    "\n",
    "Многие статистические тесты устроены так.\n",
    "\n",
    "Используется специально подобранная функция $g$, отображающая $(x_i)_{i=1}^n$ в вещественное число, такая что при верной $H_0$ распределение величины $g\\left((x_i)_{i=1}^n\\right)$ известно (в том смысле, что любую его квантиль можно вычислить). Тогда $g\\left((x_i)_{i=1}^n\\right)$ называют *тестовой статистикой* или *критической статистикой*.\n",
    "\n",
    "Для заданного уровня значимости $\\alpha$ подбирается множество $K \\subset \\mathbb{R}$, такое что $\\mathbb{P}\\left( g\\left((x_i)_{i=1}^n\\right) \\in K \\vert H_0 \\right) = 1 - \\alpha$. Например, $K$ можно положить равным отрезку от $\\frac{\\alpha}{2}$-квантили распределения тестовой статистики до его $(1 - \\frac{\\alpha}{2})$-квантили, но можно положить равным и лучу от $-\\infty$ до $(1 - \\alpha)$-квантили. Выбор $K$ во многом определяется $H_a$: если и экстремально низкие, и экстремально высокие значения тестовой статистики согласуются с $H_a$, то предпочтительнее первый вариант, но если экстремально низкие значения противоречат $H_a$ в ещё большей степени, чем $H_0$, то лучше второй вариант. А для более специфичных $H_a$ множество $K$ может оказаться и несвязным: например, если $H_a$ гласит, что параметр распределения равен какому-то числу, то $K$ может выглядеть как вся прямая с выколотым из неё отрезком меры $\\alpha$.\n",
    "\n",
    "Если $g\\left((x_i)_{i=1}^n\\right) \\in K$, то гипотеза не отклоняется, а иначе отклоняется.\n",
    "\n",
    "Понятно, что одна и та же гипотеза $H_0$ может отклоняться или не отклоняться в зависимости от $\\alpha$. Наименьшее значение $\\alpha$, при котором эта гипотеза не отклоняется, называется *фактическим уровнем значимости* (а ещё его же довольно часто называют $p$-значением). Фактический уровень значимости равен вероятности при верной $H_0$ пронаблюдать выборку $(x_i)_{i=1}^n$, для которой тестовая статистика имела бы такое же или ещё более экстремальное значение.\n",
    "\n",
    "#### Частный случай и менее общие понятия\n",
    "\n",
    "Остановимся на частном случае, когда:\n",
    "* $S = \\mathbb{R}$,\n",
    "* есть некоторое множество вероятностных распределений $P$,\n",
    "* $P_0 = \\{p(x) \\in P: \\mathbb{E}_p x = 0\\}$,\n",
    "* для $P_a$ есть три варианта:\n",
    "  - $P_a = \\{p(x) \\in P: \\mathbb{E}_p x \\ne 0\\}$ — *двусторонняя альтернатива*,\n",
    "  - $P_a = \\{p(x) \\in P: \\mathbb{E}_p x > 0\\}$ — *правосторонняя альтернатива*,\n",
    "  - $P_a = \\{p(x) \\in P: \\mathbb{E}_p x < 0\\}$ — *левосторонняя альтернатива*.\n",
    "\n",
    "Такая постановка возникает при [A/B-тестировании](__home_url__/tags/эксперименты), когда:\n",
    "* есть группа контроля и группа воздействия,\n",
    "* есть вещественная целевая метрика,\n",
    "* разности в целевой метрике на каком-то наборе пар, где первый элемент является объектом из группы воздействия, а второй — из группы контроля, образуют выборку $(x_i)_{i=1}^n$ (на самом деле, в A/B-тестах чаще используют двухвыборочные критерии, но ради незагромождённости изложения здесь введён такой вариант),\n",
    "* нулевая гипотеза гласит, что разницы между группами нет,\n",
    "* альтернативаня гипотеза может гласить, что или просто разница есть, или разница положительная, или разница отрицательная.\n",
    "\n",
    "Какую из трёх альтернатив выбрать, зависит от тестируемого изменения. Если знак изменения точно известен, тест можно сделать в два раза более чувствительным, выбрав соответствующую одностороннюю альтернативу. Если же есть сомнения в знаке изменения, лучше использовать двустороннюю альтернативу. При этом выбор альтернативы должен быть сделан ещё до начала A/B-эксперимента, ведь решение о знаке изменения, основывающееся на поступивших во время эксперимента данных, нарушает правило о том, что гипотезы нельзя выводить из тех же данных, на которых они проверяются (это чревато переподгонкой).\n",
    "\n",
    "Если выбрана двусторонняя альтернатива, а множество $P$ является семейством, параметризованным средним $\\mu$, то проверка гипотезы тесно связана с построением 100(1 - $\\alpha$)%-ного доверительного интервала для $\\mu_{true}$. Если 0 попадает в него, $H_0$ не отклоняется, а если не попадает, то отклоняется. Разные статистические тесты могут строить 100(1 - $\\alpha$)%-ные доверительные интервалы по-разному, опираясь на разные предположения о $P$. Если же выбрана односторонняя альтернатива, то связь с интервальным оцениванием тоже есть, но строиться будут доверительные лучи: до $+\\infty$ при правосторонней альтернативе и до $-\\infty$ при левосторонней альтернативе.\n",
    "\n",
    "Как ранее отмечалось, с формализацией мощности могут быть проблемы, если вероятность ошибки второго рода зависит от $p(x) \\in P_a$. В случае с A/B-тестированием это так: при $\\mathbb{E}_p x$, близких к 0, вероятность ошибки второго рода должна быть выше, чем при больших по модулю $\\mathbb{E}_p x$. Поэтому вместо мощности ориентируются на *минимальный детектируемый эффект* (MDE). По определению, это минимальное по модулю значение $\\mathbb{E}_p x$, для которого вероятность ошибки второго рода равна $\\beta$. Получается, что для меньших (по модулю) чем MDE значений разницы между группами вероятность ошибки второго рода будет больше $\\beta$, а для больших — меньше.\n",
    "\n",
    "MDE зависит от:\n",
    "* $\\beta$ (чем она выше, тем он ниже),\n",
    "* количества наблюдений $n$ (чем их больше, тем он ниже),\n",
    "* дисперсии одиночного наблюдения (чем она выше, тем и он выше),\n",
    "* равномерности разбиения на контрольную и тестовую группы (чем ближе они по размеру, тем он ниже, и чем более они стратифицированы по всем важным факторам, тем он ниже),\n",
    "* используемого статистического теста и степени соответствия выборки тем предположениям, на которые он опирается. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "выбор_модели",
     "эксперименты"
    ]
   },
   "source": [
    "## Об уместности онлайн-тестирования\n",
    "\n",
    "Рассмотрим задачу обучения с учителем, для которой есть несколько обученных моделей. Выбирая между ними одну для регулярного использования, можно принять решение, основываясь на тестировании этих моделей на отложенной выборке (так называемый оффлайн-тест). При таком подходе для каждой из моделей вычисляется некоторая [метрика качества](__home_url__/tags/метрики_качества), а выбирается модель с наилучшей метрикой. Однако иногда исторических данных бывает недостаточно, и вместо вычислительного эксперимента необходимо провести A/B-тесты, то есть эксперименты, подразумевающие взаимодействие с реальной средой и сбор обратной связи от неё (так называемые онлайн-тесты).\n",
    "\n",
    "Причины, по которым может потребоваться A/B-тестирование, таковы:\n",
    "* Прикладная задача может быть сведена к задаче машинного обучения разными способами, отличающимися друг от друга целевой переменной, процедурой подбора обучающих примеров и т.д. Тогда даже значения одной и той же метрики, посчитанные в разных задачах машинного обучения, нельзя сравнивать друг с другом, не говоря уже о том, что в каждой из этих задач может оптимизироваться своя метрика.\n",
    "* Даже если постановка задачи машинного обучения зафиксирована (то есть остаётся только выбрать метод машинного обучения, его гиперпараметры и список используемых признаков), целевая переменная может оказаться лишь приближением к интересующему показателю. Например, пусть дана выборка для задачи бинарной классификации, где надо определить, кликнет ли пользователь на рекламу некого автомобиля, а требуется увеличить продажи этих автомобилей при помощи показа интернет-рекламы. Нельзя исключать, что из двух сравниваемых классификаторов, предсказывающих вероятность клика, один покажет лучший результат при оффлайн-тесте за счёт того, что точнее будет выявлять тех, кто кликает на рекламу, просто чтобы посмотреть на изображения машин, но при этом будет хуже выявлять тех, кто кликает на рекламу, держа в уме возможность покупки рекламируемого автомобиля.\n",
    "* Внедрение модели изменяет среду, и поэтому на исторических данных можно измерить только качество модели на объектах, пришедших не из того распределения, из которого они будут приходить к внедрённой и какое-то время проработавшей модели.\n",
    "\n",
    "С другой стороны, нельзя забывать и о недостатках A/B-тестирования:\n",
    "* проведение реального эксперимента иногда бывает затратным по ресурсам или по времени ожидания результатов;\n",
    "* если объектов, над которыми проводится эксперимент, мало, то их разбиение на группы может быть субъективным, из-за чего становится сложно доказать кому-либо объективность результатов такого теста;\n",
    "* в процессе проведения эксперимента и его анализа можно допустить [ошибки](__home_url__/notes/Обзор возможных ошибок при проведении онлайн-экспериментов).\n",
    "\n",
    "Стало быть, применять A/B-тесты стоит только тогда, когда это действительно необходимо."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "эксперименты"
    ]
   },
   "source": [
    "## Распределение объектов по группам в онлайн-эксперименте\n",
    "\n",
    "В A/B-тестах есть группа контроля и одна или несколько групп воздействия (далее краткости ради далее будем говорить об одной). Также объект может не попасть ни в одну из групп. Например, если речь идёт об испытании нового лекарства, из всего населения планеты отбирается лишь малое число участников эксперимента, потому что размер группы воздействия ограничен из соображений минимизации ущерба, а размер группы контроля ограничивается тем, что наблюдение за каждым участником требует ресурсов. Или вот другой пример: если речь идёт о каком-либо сайте, на всём потоке его пользователей могут одновременно проводиться несколько разных A/B-тестов, пересекать которые не рекомендуется по техническим причинам. Ниже рассмотрим, какими способами можно решить, какие объекты попадут в группу контроля, какие объекты попадут в группу воздействия, а какие объекты не будут учитываться в текущем эксперименте.\n",
    "\n",
    "Основной критерий, которым надлежит руководствоваться при формировании группы контроля и группы воздействия, — между ними не должно быть никаких различий кроме того, что к группе воздействия будет применено экспериментальное изменение. Процедуру распределения объектов по группам время от времени можно валидировать, не оказывая никаких воздействий на обе группы — это называется A/A-тест. Если процедура работает корректно, статзначимая на уровне $\\alpha$ разница между группами должна возникать с вероятностью $\\alpha$. \n",
    "\n",
    "Если размеры групп малы, их состав нужно подбирать экспертным образом, чтобы убедиться, что они как можно более сопоставимы. Если группы настолько несопоставимы, что A/A-тест, проведённый на них, показал бы существенную с практической точки зрения разницу в целевой метрике, то весь эксперимент становится некорректным. Чтобы добиться сопоставимости групп, могут пригодиться следующие приёмы:\n",
    "* выделение пар похожих объектов, из которых один идёт в группу контроля, а другой в группу воздействия;\n",
    "* [стратификация](__home_url__/notes/Повышение чувствительности онлайн-экспериментов);\n",
    "* добавление синтетических контрольных объектов.\n",
    "\n",
    "Поясним подробнее, что означает последний вариант. Если размер группы воздействия должен составить менее половины от общего числа объектов, одному тестовому объекту можно сопоставить несколько контрольных, учитываемых с весами, в сумме дающими 1, — их линейная комбинация и будет рассматриваться как синтетический объект. Такой объект хорош тем, что его можно сделать более похожим на тестовый объект, чем любой отдельно взятый реальный контрольный объект. Завершая эту тему, стоит предупредить, что если статистический тест предполагает независимость наблюдений, нельзя один и тот же реальный контрольный объект использовать в нескольких синтетических объектах.\n",
    "\n",
    "Чем больше размеры групп, тем в меньшей степени необходимо следить за сопоставимостью групп. Вместо этого можно всё больше полагаться на случайность распределения по группам. При случайном распределении разница, которая могла бы обнаружиться при A/A-тесте, стремится к 0 с ростом размера групп. Тем самым из фактора, ставящего под вопрос корректность эксперимента, она сначала превращается в дополнительный источник дисперсии средних по группам значений целевой метрики, а затем и вовсе становится пренебрежимо малой.\n",
    "\n",
    "Хотя при больших размерах групп полностью случайное разбиение и является стандартом, иногда практичнее использовать псевдослучайное. Сначала опишем, как оно устроено, а затем разберём причину, по которой его выбирают.\n",
    "\n",
    "До начала эксперимента задаются доли объектов, которые отводятся под группу контроля и группу воздействия. Обозначим их за $q$ и $r$ соответственно и предположим, что $100q$ и $100r$ являются целыми числами. Также до начала эксперимента выбирается специальная строка, называемая солью (она служит для того, чтобы объект в каждом новом эксперименте распределялся независимо от предыдущих экспериментов). Когда какой-либо объект появляется, к его идентификатору добавляют эту соль, к результата конкатенации применяют хэш-функцию, а от её значения берут остаток от деления на 100. По определению хэш-функций, этот остаток должен быть равномерно распределён на множестве $\\{0, \\dots, 99\\}$. Если он меньше $100q$, то объект попадает в группу контроля, если он лежит в полуинтервале $[100q; 100(q+r))$, то объект попадает в группу воздействия, а если он равен $100(q+r)$ или больше, то объект не учитывается в эксперименте.\n",
    "\n",
    "Для случайного разбиения нужно где-то хранить отображение из идентификатора объекта в группу, в которую он попадает, чтобы на всём протяжении эксперимента объект либо испытывал воздействие, либо не испытывал. Поиск в подобном словаре имеет сложность $O(\\log_2 n)$, тогда как вычисление хэш-функции работает за $O(1)$. Иногда это важно: скажем, если речь идёт о пользователях сайта, время, отводимое на определение экспериментальных воздействий, которые нужно применить, может быть ограничено."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "эксперименты"
    ]
   },
   "source": [
    "## Повышение чувствительности онлайн-экспериментов\n",
    "\n",
    "#### Введение\n",
    "\n",
    "В заметке про [статистическую проверку гипотез](__home_url__/notes/Проверка гипотез в классической статистике) вводится понятие минимального детектируемого эффекта. Его снижение даёт следующие преимущества:\n",
    "* как это видно из названия, при прежних длительности и охвате можно будет делать подкреплённые данными выводы об изменениях, имеющих меньший эффект;\n",
    "* если сниженный MDE вернуть к исходному уровню за счёт сокращения длительности экспериментов, то можно будет быстрее выкатывать в продакшн полезные изменения;\n",
    "* если сниженный MDE вернуть к исходному уровню за счёт сокращения охвата, то можно будет одновременно запускать больше экспериментов.\n",
    "\n",
    "#### Оптимальный размер групп\n",
    "\n",
    "Под размером группы можно понимать:\n",
    "* декларируемый размер, то есть размер, который ожидается получить при выбранных настройках процедуры [распределения объектов по группам](__home_url__/notes/Распределение объектов по группам в онлайн-эксперименте); его можно задавать двумя способами:\n",
    "    - в абсолютном виде (т.е. как количество объектов в группе),\n",
    "    - в относительном виде (т.е. как долю от потока объектов, которая должна попасть в эту группу);\n",
    "* фактический размер, то есть количество объектов группы, пронаблюдавшихся в ходе эксперимента.\n",
    "\n",
    "Если есть ровно одна группа воздействия, декларируемые размеры групп лучше брать равными. Говоря верхнеуровнево, если какую-то группу увеличить за счёт другой, то снижение дисперсии среднего в увеличенной группе не скомпенсирует увеличение дисперсии среднего в уменьшенной группе. Для частного случая $t$-теста Стьюдента в предположении о том, что в группах одинаковые дисперсии, это можно доказать так. Обозначим дисперсию целевой метрики на одном объекте за $\\sigma^2$. Тогда для группы из $n$ объектов, просэмплированных независимо, дисперсия среднего целевой метрики будет равна $\\sigma^2 / n$. Так как $\\forall n \\in \\mathbb{N}$, $n > 1$, $\\forall k \\in \\mathbb{N}$, $k < n$, верно, что:\n",
    "$$ \\left(\\frac{\\sigma^2}{n - k} + \\frac{\\sigma^2}{n + k}\\right) > 2 \\frac{\\sigma^2}{n},$$\n",
    "получилось, что знаменатель $t$-статистики увеличится, если $k$ объектов из одной из групп перевести в другую.\n",
    "\n",
    "Ситуации, когда декларируемые размеры двух групп можно брать разными, тоже бывают. Если экспериментальное изменение по каким-либо причинам нельзя применить к большей доле объектов (например, потому что оно рискованное), контрольную группу можно увеличить по сравнению с группой воздействия, чтобы извлечь из оставшихся доступных объектов хоть какую-то пользу.\n",
    "\n",
    "Отдельно остановимся на ситуации, когда групп воздействия несколько, но группа контроля для них одна. Из общих соображений вытекает, что группы воздействия должны быть равны по размеру, а группа контроля должна быть больше, потому что она переиспользуется. Для $t$-теста Стьюдента минимизация знаменателя $t$-статистики имеет вид:\n",
    "$$\\frac{1}{n} + \\frac{1}{m} \\to \\min_{n, m} \\, \\mathrm{s. t.} \\, n + lm = N,$$\n",
    "где $n$ — количество объектов в группе контроля, $m$ — количество объектов в группе воздействия, $l$ — количество групп воздействия, $N$ — общее количество объектов (если оно неизвестно, то $n$ и $m$ можно заменить на доли, а в правой части ограничения поставить 1).\n",
    "\n",
    "Теперь перейдём к фактическому размеру. Тут всё просто: процедура распределения объектов по выборкам должна обеспечивать как можно более точное соответствие фактических размеров декларируемым. Например, если ситуация позволяет заранее распределить все объекты поровну, лучше не использовать случайное или псевдослучайное разбиение. Впрочем, влиянием отклонения фактического размера от декларируемого на чувствительность теста зачастую можно пренебречь. Исключение составляют ситуации, когда вместо усреднения делается суммирование целевой метрики по объектам (например, при некоторых вариантах бутстрэпа) — тогда случайные расхождения в количестве слагаемых становятся источником дополнительного шума в просуммированной метрике.\n",
    "\n",
    "#### Стратификация\n",
    "\n",
    "Если группы маленькие, а объекты разнородные, то разбиение на группы лучше проводить стратифицировано. Разнородность объектов будем понимать как то, что они могут быть разделены на несколько непересекающихся множеств, называемых стратами, и целевая метрика существенно меняется от страты к страте. При стратифицированном разбиении каждая страта обрабатывается отдельно, чтобы быть одинаково представленной во всех группах.\n",
    "\n",
    "Стратификация приводит к снижению дисперсии. Увидеть это можно так. Обозначим за $y$ значение целевой метрики, измеренной на одном объекте. Выразим $y$ как:\n",
    "$$y = \\mathbb{E}[y \\vert s] + \\varepsilon,$$\n",
    "где $s$ — метка страты, а $\\varepsilon$ — шум с нулевым средним и дисперсией $\\sigma_s^2$ (т.е. в разных стратах своя дисперсия отклонения от среднего по страте). Тогда дисперсия $y$ имеет вид:\n",
    "$$\\mathrm{Var} \\, y = \\mathrm{Var}\\left[\\mathbb{E}[y \\vert s]\\right] + \\sum_s p_s \\sigma_s^2,$$\n",
    "где $p_s$ — вероятность страты $s$, а $\\mathrm{Var}\\left[\\mathbb{E}[y \\vert s]\\right] = \\sum_s p_s \\left(\\left(\\mathbb{E}[y \\vert s]\\right)^2 - \\left(\\mathbb{E}[y]\\right)^2\\right)$. Дисперсия среднего по группе из $n$ таких объектов, просэмплированных независимо, в $n$ раз ниже.\n",
    "\n",
    "В случае со случайным или псевдослучайным разбиением для группы размера $n$ объекты, попадающие в неё, могли бы сэмплироваться независимо только в том случае, если бы всего было бесконечное количество объектов. Такое предположение можно считать практически верным, если, например, речь идёт о медицинском испытании, где группы имеют размер порядка сотен человек, что несопоставимо меньше населения планеты. Но чем ближе размер группы $n$ к общему количеству объектов, тем меньше независимости в сэмплировании последних объектов, ведь делается сэмплирование без возвращения. Иллюстративная крайность: если есть страта размера $l < n$ и так вышло, что первые $l$ объектов пришли из неё, то у оставшихся $n - l$ объектов вероятность прийти из этой страты становится нулевой. Таким образом, для дисперсии среднего по группе $\\overline{y}$ есть лишь оценка сверху:\n",
    "$$\\mathrm{Var} \\, \\overline{y} \\le \\frac{1}{n} \\left(\\mathrm{Var}\\left[\\mathbb{E}[y \\vert s]\\right] + \\sum_s p_s \\sigma_s^2\\right).$$\n",
    "\n",
    "Если же применяется стратифицированное разбиение, то, так как страты обрабатываются независимо, а при зафиксированной страте $s$ величина $\\mathbb{E}[y \\vert s]$ является константой, дисперсия среднего имеет вид:\n",
    "$$\\mathrm{Var} \\, \\overline{y} = \\frac{1}{n} \\sum_s p_s \\sigma_s^2.$$\n",
    "Это означает, что стратификация снижает дисперсию, но не более чем на $\\frac{1}{n} \\mathrm{Var}\\left[\\mathbb{E}[y \\vert s]\\right]$, причём чем ближе размер группы $n$ к общему количеству объектов, тем больший «запас» появляется в этой оценке сверху. Также из этой оценки хорошо видно, что стратификация не имеет смысла, если от страты к страте условные средние меняются незначительно.\n",
    "\n",
    "#### Предсказание целевой метрики, CUPED\n",
    "\n",
    "Пусть эксперимент начинается в момент времени $t$ и имеет длительность $d$. Для каждого из объектов рассчитаем значение целевой метрики, которая пронаблюдалась для него на отрезке времени $[t - d; t]$. Объявим это целевой переменной, а в качестве признаков будем использовать такие, что используют только информацию, доступную до момента времени $t - d$. В частности, можно использовать значение целевой метрики, подсчитанное на отрезке $[t - 2d; t - d]$. На таких данных обучим модель $f$. Затем пересчитаем признаки по информации, доступной до момента времени $t$, и сделаем предсказания на период эксперимента $[t; t + d]$. По окончании эксперимента рассчитаем [коэффициент детерминации](__home_url__/notes/Коэффициент детерминации) $R^2$ для этих предсказаний, но сделаем это только для объектов контрольной группы, ведь для объектов группы воздействия из-за эксперимента изменились условия. Если $R^2$ окажется меньше 0, то модель $f$ не подходит, нужно совершенствовать её. А вот если $R^2$ больше нуля, то он покажет, какая доля дисперсии будет убрана, если вместо исходной целевой метрики $y$ смотреть на $y - \\hat{y}$, где $\\hat{y}$ — предсказание модели $f$.\n",
    "\n",
    "Сравним вышеописанный метод со стратификацией. Дисперсия среднего целевой метрики $\\overline{y}$ складывается из различных составляющих, одной из которых является количество объектов той или иной страты, попавших в группу. Стратификация исключает эту составляющую, лишая её вариативности. А в вышеописанном методе по страте $s$ можно сделать предсказание для $\\mathbb{E}[y \\vert s]$, после вычитания которого различия между стратами сотрутся. Поскольку модель $f$ может использовать в том числе вещественные признаки, вычитание предсказаний является более общим решением, чем стратификация.\n",
    "\n",
    "Аббревиатурой [CUPED](https://www.researchgate.net/publication/237838291_Improving_the_Sensitivity_of_Online_Controlled_Experiments_by_Utilizing_Pre-Experiment_Data) (Controlled experiments Utilizing Pre-Experiment Data) обозначили одну из первых реализаций обсуждаемого метода (впоследствии появились и [другие](https://www.kdd.org/kdd2016/papers/files/adf0653-poyarkovA.pdf)). В ней по значению целевой метрики, подсчитанному на отрезке $[t - d; t]$, линейной регрессией без константы предсказывается значение целевой метрики, подсчитанное за период эксперимента $[t; t + d]$. Поскольку такая линейная регрессия имеет всего один обучаемый параметр и ограниченную выразительную силу, было решено, что проблема переподгонки под период эксперимента не стоит.\n",
    "\n",
    "#### Метрики-отношения, бакетирование, линеаризация\n",
    "\n",
    "Рассмотрим такой пример. Пусть есть старый рекламный баннер и новый, и хочется проверить, на какой больше кликают. В качестве целевой метрики можно взять количество кликов, а можно конверсию из показа в клик (CTR). Первый вариант менее предпочтителен, потому что содержит дополнительный шум, вызываемый неопределённостью наличия показа. Чтобы баннер показался пользователю, он должен выиграть рекламный аукцион, исход которого зависит в том числе от поведения других рекламодателей. В случае же с отношением общего количества кликов к общему количеству показов этот источник неопределённости устраняется. Данный пример показывает, что метрики-отношения можно использовать для повышения чувствительности.\n",
    "\n",
    "Увы, с метриками-отношениями в их сыром виде есть проблема, которую снова удобнее продемонстрировать на примере. Ради краткости предположим, что в группе всего два пользователя. На одного из них почему-то активно таргетировались другие рекламодатели, поэтому у него было всего два показа и один клик. У другого же пользователя было восемь показов и два клика. Метрика отношения среднего количества кликов к среднему количеству показов составит 0,3. Однако для статистического теста мало иметь среднее по группе, нужны ещё сами наблюдения. Если считать, что для наблюдений метрика равна 0,5 и 0,25, то получится, что среднее, посчитанное по этим наблюдениям, равно 0,375. Хотелось бы, чтобы это всё-таки было 0,3, потому что, во-первых, именно так получается по определению CTR, и, во-вторых, от второго пользователя поступило больше информации о конверсионности баннера. И это не просто вопрос несовпадения двух чисел: знак экспериментального эффекта или фактический уровень значимости могут поменяться из-за этого. Кто-то мог бы предложить считать каждый показ отдельным наблюдением бинарной переменной, но так будет нарушено предположение о независимости наблюдений, на которое опираются популярные статистические тесты, ведь исходы показов одному и тому же пользователю могут быть зависимы.\n",
    "\n",
    "Для смягчения вышеописанной проблемы можно воспользоваться бакетированием. Той же самой процедурой, какой объекты были поделены на группы, все объекты каждой группы делятся на $m$ подгрупп, называемых бакетами. Обычно $m$ берут равным 100 или 200. Для каждого бакета метрика-отношение считается по своему определению, а сами бакеты и становятся новыми объектами. Среднее по бакетам значение метрики-отношения будет тем ближе по матожиданию к значению метрики-отношения на всей группе, чем больше ожидаемый размер бакета. А если бакетирование применяется не к метрике-отношению, на него можно посмотреть как на разновидность бутстрэпа, возвращающую новую выборку размера $m$, в которой наблюдения в силу центральной предельной теоремы имеют распределение, близкое к нормальному.\n",
    "\n",
    "Другой способ работы с метриками-отношениями называется [линеаризация](https://www.researchgate.net/publication/322969314_Consistent_Transformation_of_Ratio_Metrics_for_Efficient_Online_Controlled_Experiments). Если исходно целевая метрика-отношение была определена как\n",
    "$$R = \\frac{\\sum_i N_i}{\\sum_i D_i},$$\n",
    "где $i$ пробегает по всем объектам группы, $N_i$ — значение метрики из числителя для $i$-го объекта, $D_i$ — значение метрики из знаменателя для $i$-го объекта, то линеаризация сводится к тому, что для каждого объекта вводится новая целевая метрика:\n",
    "$$L_i = N_i - c D_i,$$\n",
    "где $c$ — значение метрики-отношения $R$ в контрольной группе. В отличие от наивного решения $L_i = N_i / D_i$, разобранного выше, линеаризация сохраняет знак экспериментального эффекта и, более того, может улучшить чувствительность теста за счёт изменения масштаба, который имеет эффект ($R$ лежит от 0 до 1, но $\\overline{L}$ может быть любым вещественным числом)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "tags": [
     "эксперименты"
    ]
   },
   "source": [
    "## Обзор возможных ошибок при проведении онлайн-экспериментов\n",
    "\n",
    "Ошибки, которые можно допустить при A/B-экспериментах, могут быть разбиты на следующие виды.\n",
    "\n",
    "#### Дефекты планирования\n",
    "\n",
    "* **Отсутствие заранее предрассчитанных сроков проведения и процента, вовлечённого в эксперимент**. Ещё до запуска эксперимента необходимо выбрать [статистическую значимость](__home_url__/notes/Проверка гипотез в классической статистике) $\\alpha$ (как правило, её полагают равной 0,95 или, что лучше, 0,99) и статистическую мощность, обозначаемую как $(1 - \\beta)$ (ниже 0,8 её обычно не берут), а также определиться, двусторонняя или односторонняя альтернатива будет проверяться (если неизвестно, как повлияет экспериментальное изменение, нужно взять двустороннюю альтернативу; если есть уверенность, что эксперимент заведомо улучшающий или ухудшающий, то можно взять соответствующую одностороннюю альтернативу, чтобы повысить чувствительность). Далее необходимо оценить дисперсию целевой метрики и предположительный размер эффекта, вносимого тестируемым изменением. Если про эффект заранее сложно что-то сказать, можно взять минимальное значение эффекта, ради которого есть смысл внедрять изменение (то есть минимальный практически значимый эффект; практическую значимость не стоит путать со статистической значимостью). Наконец, сроки проведения эксперимента и процент, отводимый под контрольную группу и тестовую группу, надлежит подобрать так, чтобы добиться выбранной (или большей) мощности при условии, что эффект окажется таким, как предполагается. Иными словами, MDE должен быть равен предполагаемому эффекту (или быть меньше него). Все эти расчёты нужны, потому что если продолжительность и охват выбрать наугад, то потом в случае отсутствия статистической значимости нельзя будет отличить ситуацию, когда эффекта нет или он сильно меньше ожидавшегося, от ситуации, когда эксперимент слишком рано завершили.\n",
    "* **Смещение тестовой группы относительно контрольной по каким-либо параметрам**. По самой концепции A/B-экспериментов такого смещения быть не должно.\n",
    "* **Отличие контроля от того, что на текущий момент есть по умолчанию**. Строго говоря, A/B-эксперимент проверяет не универсальное наличие эффекта от воздействия, а наличие эффекта от воздействия, применённого в конкретном состоянии. Значит, во время эксперимента контроль должен быть репрезентативен по отношению к состоянию по умолчанию. Пример, как это условие может быть нарушено, таков. Допустим, провели ухудшающий эксперимент, в котором половина пользователей испытала воздействие, эффект от которого продолжается и по окончании эксперимента. Если сразу же после этого эксперимента на той же самой выборке, но с независимым разбиением на группы проводить какой-то другой эксперимент, то в его контроле половина пользователей будет не такой, какой она обычно бывает.\n",
    "* **Добавление дополнительных воздействий к тому, которое якобы исследуется**. Например, если внедряется какая-либо рекомендательная модель, заполняющая блок на странице интернет-магазина товарами, которые могли бы быть интересны пользователю, то, чтобы протестировать эффект от собственно модели, необходимо в контроле заполнить блок случайными и/или наиболее популярными товарами, а не убирать весь блок. Если убрать весь блок, будет тестироваться совместный эффект от наличия на странице блока и его заполнения в соответствии с моделью.\n",
    "* **Игнорирование эффекта новизны**. Иногда оказывается так, что экспериментальное воздействие улучшает метрики не из-за своей сути, а просто из-за того, что появляется что-то новое. Если есть основания считать, что так может произойти, лучше не учитывать в обсчёте эксперимента сколько-то первых дней. Также, если изменение будет принято, через какое-то время можно провести обратный эксперимент, чтобы эффект новизны играл уже против этого изменения.\n",
    "* **Несоответствие идентификаторов, по которым объекты разбиваются на группы, этим реальным объектам**. Например, если идентификатор пользователя на сайте меняется в зависимости от того, авторизован он или нет, то при разбиении по такому идентификатору вполне возможно, что некоторые пользователи будут попадать то в контрольную группу, то в группу воздействия. Наличие пересечения между этими группами создаст ряд проблем. Например, наблюдения в контрольной группе и в тестовой группе уже не будут независимы. Кроме того нельзя будет оценить отложенный эффект от воздействия.\n",
    "* **Использование для оказания воздействия способа, вносящего искажения**. Под искажениями имеется в виду, что воздействие может получаться то сильнее, то слабее, чем запланировано, или что воздействие может быть оказано на не совсем те объекты. В предельном случае из-за какой-либо ошибки может оказаться так, что воздействие не будет оказано ни на один объект, но если этого не заметить, то будет сделан вывод, что воздействие неэффективно, хотя на самом деле произошёл сбой в способе его оказания.\n",
    "\n",
    "#### Нарушение процедуры проведения, зафиксированной ещё до начала эксперимента\n",
    "\n",
    "* **Прекращение эксперимента при первом же появлении статистически значимой разницы в интересующей метрике**. Если не ждать заранее установленного конца эксперимента, а остановить его сразу же, как только $p$-значение опустится ниже уровня $(1 - \\alpha)$, полученное $p$-значение окажется заниженным. Чтобы убедиться в этом, обозначим за 0 момент старта эксперимента, за $T$ — момент конца эксперимента, а за $p(t, \\omega)$ — случайный процесс, задающий $p$-значение в момент времени $t$ при исходе случайности $\\omega$. Очевидно, что множество $\\{\\omega: p(T, \\omega) \\le 1 - \\alpha\\}$ является подмножеством множества $\\{\\omega: \\min_{t \\in [0, T]} p(t, \\omega) \\le 1 - \\alpha\\}$. По определению, статистическая значимость относится к первому множеству, а то, что, будет получено при досрочной остановке, подменит его на второе.\n",
    "* **Попытки продержать эксперимент дольше, чем планировалось** (чтобы $p$-значения, близкие к критическим, могли бы опуститься ниже критического порога). Опять же, как и в предыдущем пункте это приводит к тому, что $p$-значение, измеренное в момент некорректного конца, является заниженным, то есть на самом деле вероятность пронаблюдать подобный исход в условиях отсутствия разницы выше, чем $1 - \\alpha$. Если есть основания считать, что изначально необходимая продолжительность эксперимента была недооценена, с методологической точки зрения лучше запустить новый эксперимент и держать его положенное время.\n",
    "* **Извлечение гипотез из тех же данных, на которых они должны проверяться**. Например, нельзя добавлять новые метрики после того, как по ним или по предыдущим метрикам поступили данные, чтобы задним числом найти такие, по которым эксперимент можно бы было принять. Аналогично, после запуска эксперимента нельзя искать срезы, в которых результат был бы желаемым.\n",
    "\n",
    "#### Некорректное применение статистических тестов и неверная интерпретация их результатов\n",
    "\n",
    "* **Выдача отсутствия свидетельств за свидетельство отсутствия**. Если тест показывает, что нет статистически значимой разницы между контрольной группой и группой воздействия, это не означает, что доказано, что воздействие не имеет эффекта — это означает только то, что не обнаружено свидетельств наличия эффекта.\n",
    "* **Непоследовательность в применении вспомогательных методов, неоправданно завышающая или занижающая чувствительность статистического теста**. Рассмотрим это на примере, где такими методами являются бутстрэп и стратификация групп. Допустим, объекты бывают двух классов и математические ожидания целевой метрики отличаются в зависимости от класса. Тогда для разбиения на контрольную группу и группу воздействия можно поровну и случайно разделить сначала объекты одного класса, а потом другого, добившись тем самым равного соотношения классов в группах. Если теперь из таких групп сэмплировать выборки для бутстрэпа просто случайно (т.е. игнорируя соотношение классов), то статистическая значимость окажется заниженной, ведь в дисперсию среднего по выборкам вклад внесёт и случайная неравномерность распределения классов, тогда как для средних по группам такого вклада нет.\n",
    "* **Множественная проверка гипотез**. Если смотреть сразу на $n$ разнородных метрик, то шансы, что хотя бы для одной из них за время эксперимента появится статистическая значимость на уровне $\\alpha$, будут равны не $(1 - \\alpha)$, а, грубо говоря, $(1 - \\alpha^n)$. Поэтому, если разнородных метрик больше одной, нужно использовать специальные процедуры множественной проверки гипотез. Однако это не относится к связанным метрикам. Например, если воронка продаж устроена как «просмотр $\\rightarrow$ клик $\\rightarrow$ добавление в корзину $\\rightarrow$ заказ», то количество просмотров, количество кликов, количество добавлений в корзину и количество заказов являются связанными метриками, а их чувствительность убывает слева направо. Как действовать в ситуациях, когда наблюдается статистически значимое изменение менее чувствительной метрики без измененения более чувствительных метрик, разберём на примере. Предположим, есть статистически значимая разница между количествами заказов, но для остальных метрик статистически значимой разницы нет. Тогда:\n",
    "    - если эксперимент был нацелен на улучшение конверсии из корзины в заказ, то всё нормально, но при этом надо помнить, что такие узкоспециализированные эксперименты принимать надо ровно по тем метрикам, которые они затрагивают, а изменения прочих метрик считать случайными;\n",
    "    - если эксперимент был ориентирован на что-либо другое, то это аномалия, требующая разбирательства (скажем, могло оказаться, что в группе воздействия из-за бага стало возможным заказывать товары не в наличии, но потом эти заказы отменялись, и пользователям приходилось делать новые заказы).\n",
    "* **Игнорирование нюансов статистических тестов**. Бывает так, что тест Манна-Уитни говорит о статистически значимой разнице в пользу одной из двух групп, тогда как среднее значение метрики может быть лучше в другой группе. Это связано с тем, что среднее чувствительно к выбросам, тогда как тест Манна-Уитни учитывает только ранги. Если не смотреть на статистику теста Манна-Уитни, а смотреть только на разницу в средних и на $p$-значение, может быть сделан неправильный вывод о знаке эффекта, оказываемого экспериментальным воздействием.\n",
    "* **Применение теста ко всей выборке вместо целевого среза**. Допустим, экспериментальное воздействие применяется к элементу страницы сайта, до которого нужно ещё пролистать вниз. Тогда данные для статистического теста должны готовиться только по тем наблюдениям, в которых пользователь долистал до элемента, с которым проводится эксперимент (или, если эксперимент имеет отложенный эффект, только по тем пользователям, которые хоть раз долистали до элемента). Учёт лишних наблюдений внесёт дополнительный шум. Что ещё важнее, длительность и охват надо рассчитывать, учитывая вероятность долистывания до элемента. Без этого статистическая мощность будет занижена."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Tags",
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}