Зависимые запросы
и завышенная чувствительность
slabod@, 01.09.2017
Offline-тестирование
1
2
3
4
All queries
1. Генерация корзины
2. Ранжирование
3. Рассчёт метрики
4. Стат-тест
Зависимость значений метрики
1
2-3
All queries
(all possible \(x_i\) values)
\(q_i, q_j\) выбираются равномерно и попарно независимо
Для всех \(i, j\) случайные величины \(x_i, x_j\) независимы
Зависимость \(p_{value}\)
1
All queries
(all possible \(p_{value}\) )
В каждом эксперименте
генерируется новая корзина \(Q_i\)
Все \(p_i, p_j\) попарно независимы
2-3
4
Зависимость \(p_{value}\)
1
2-3
All queries
(all possible \(p_{value}\) )
Реальная ситуация:
единственная корзина на набор экспериментов
Зависимые \(p_i, p_j\) ?
4
Зависимость запросов
1
2-3
All queries
(all possible \(p_{value}\) )
Пусть
\(q_1 = \) "vk.com"
\(q_2 = \) "моя страница"
Значения \(x_1, x_2\) сильно зависимы
4
Пусть два эксперимента похоже изменяют качество на кластере "vk.com" и на нескольких других
Вердикт стат-теста про эти эксперименты похож
Нельзя считать значения \(p_i, p_j\) абсолютно независимыми:
\(p_i\) более зависимы, чем при отсутствии кластеров
Основная гипотеза:
Наличие в корзине похожих запросов повышает чувствительность метрик
Напомним определение чувствительности:
Каждый эксперимент корректен сам по себе,
но их выводы зависимы между собой
Маленькое значение \(p_{value}\) вносит большой вклад в Sensitivity
Эксперименты \(E_1 \: \text{и} \: E_2\) похоже и значительно меняют качество на кластере
\(\Longrightarrow\) их значения \(p_{value}\) вносят большой вклад одновременно
План сравнения чувствительности
- Разбить запросы на корзины похожести
- Вычисление метрики в корзине
- Линеаризация:
для каждой группы дополнение до одинакового размера средним значением
- Сравнение с некластеризованным случаем
Наивная кластеризация
Запросы в одном кластере \(\Longleftrightarrow\)
у них есть общее слово длины хотя бы 4
Проблема:
Запросы объединяются в длинные цепочки
\(q_1\) — \(q_2\) — \(\ldots\) — \(q_l\)
длиной до нескоких сотен.
Несколько очень больших групп и много маленьких, сильно падает чувствительность.
Модификация Kruskal's algorithm
Ограничиваем размер кластера!
- Для всех \(n\) запросов вычисляем попарную похожесть через DSSM
— скалярное произведение нормированных семантических векторов
- Перебираем все пары \((q_1, q_2)\) и объединяем пару в один кластер, если размер кластера не превышает \(k\)
Требование к кластеризации:
Запросы из разных групп должны быть независимы.
Утверждение:
второй алгоритм минимизирует максимальную похожесть в паре из разных кластеров для всех разбиений с заданным размером кластера \(k\)
Результат кластеризации
proxima-5
bucketized_
proxima-5
proxima-5
bucketized_
proxima-5
При разбиении на группы размера 0.02 величины корзины разница в чувствительности около 5%
Это статистически значимое падение
Проверка эффекта кластеризации
на чувствительность
- Сравнение кластеризации на основе зависимости
и кластеризации со случайным разбиением
- Сравнение кластеризации на реальных экспериментах
и на искусственно сгенерированных данных
Случайные группы
Несколько итераций разбиения запросов на случайные группы с тем же набором размеров, что группы зависимости.
Чувствительность падала статистически незначимо.
Нет оснований отвергнуть предположение "разбиение со случайными группами порождает такую же чувствительность, как отсутствие разбиения".
Синтетические данные
Дано:
\(c_1, c_2, \ldots, c_n\) — контроль
\(e_1, e_2, \ldots, e_n\) — эксперимент
Как сгенерировать синтетические данные, не заботясь о зависимости между \(c_i, e_i\)?
Сгенерируем массив разностей \(c_i - e_i\) !
Синтетические данные
Для искусственных данных среднее относительное понижение чувствительности равно 0.0177
Для реальных данных относительное понижение чувствительности на единственной итерации равно 0.0573
Выводы
- Разбиение реальных данных на корзины зависимости сильнее понижает чувствительность, чем разбиение сгенерированных синтетических данных
\(\Longrightarrow\) Без разбиения для искусственных данных вычисляется ненастоящая, "завышенная" чувствительность.
- Разбиение реальных данных на случайные корзины зависимости не понижает чувствительности
\(\Longrightarrow\) Mетод разбиения на корзины важен.
Спасибо за внимание!
Подробности на вики-странице:
https://wiki.yandex-team.ru/users/slabod/dependent-queries/
Dependent Queries
By Michael Slabodkin
Dependent Queries
- 83