Зависимые запросы
и завышенная чувствительность
slabod@, 01.09.2017
Offline-тестирование
1
2
3
4
All queries
1. Генерация корзины
2. Ранжирование
3. Рассчёт метрики
4. Стат-тест
Зависимость значений метрики
1
2-3
All queries
(all possible xi values)
qi,qj выбираются равномерно и попарно независимо
Для всех i,j случайные величины xi,xj независимы
Зависимость pvalue
1
All queries
(all possible pvalue )
В каждом эксперименте
генерируется новая корзина Qi
Все pi,pj попарно независимы
2-3
4
Зависимость pvalue
1
2-3
All queries
(all possible pvalue )
Реальная ситуация:
единственная корзина на набор экспериментов
Зависимые pi,pj ?
4
Зависимость запросов
1
2-3
All queries
(all possible pvalue )
Пусть
q1= "vk.com"
q2= "моя страница"
Значения x1,x2 сильно зависимы
4
Пусть два эксперимента похоже изменяют качество на кластере "vk.com" и на нескольких других
Вердикт стат-теста про эти эксперименты похож
Нельзя считать значения pi,pj абсолютно независимыми:
pi более зависимы, чем при отсутствии кластеров
Основная гипотеза:
Наличие в корзине похожих запросов повышает чувствительность метрик
Напомним определение чувствительности:
Каждый эксперимент корректен сам по себе,
но их выводы зависимы между собой
Маленькое значение pvalue вносит большой вклад в Sensitivity
Эксперименты E1иE2 похоже и значительно меняют качество на кластере
⟹ их значения pvalue вносят большой вклад одновременно
План сравнения чувствительности
- Разбить запросы на корзины похожести
- Вычисление метрики в корзине
- Линеаризация:
для каждой группы дополнение до одинакового размера средним значением
- Сравнение с некластеризованным случаем
Наивная кластеризация
Запросы в одном кластере ⟺
у них есть общее слово длины хотя бы 4
Проблема:
Запросы объединяются в длинные цепочки
q1 — q2 — … — ql
длиной до нескоких сотен.
Несколько очень больших групп и много маленьких, сильно падает чувствительность.
Модификация Kruskal's algorithm
Ограничиваем размер кластера!
- Для всех n запросов вычисляем попарную похожесть через DSSM
— скалярное произведение нормированных семантических векторов
- Перебираем все пары (q1,q2) и объединяем пару в один кластер, если размер кластера не превышает k
Требование к кластеризации:
Запросы из разных групп должны быть независимы.
Утверждение:
второй алгоритм минимизирует максимальную похожесть в паре из разных кластеров для всех разбиений с заданным размером кластера k
Результат кластеризации

proxima-5
bucketized_
proxima-5
proxima-5
bucketized_
proxima-5
При разбиении на группы размера 0.02 величины корзины разница в чувствительности около 5%
Это статистически значимое падение
Проверка эффекта кластеризации
на чувствительность
- Сравнение кластеризации на основе зависимости
и кластеризации со случайным разбиением
- Сравнение кластеризации на реальных экспериментах
и на искусственно сгенерированных данных
Случайные группы
Несколько итераций разбиения запросов на случайные группы с тем же набором размеров, что группы зависимости.
Чувствительность падала статистически незначимо.
Нет оснований отвергнуть предположение "разбиение со случайными группами порождает такую же чувствительность, как отсутствие разбиения".
Синтетические данные
Дано:
c1,c2,…,cn — контроль
e1,e2,…,en — эксперимент
Как сгенерировать синтетические данные, не заботясь о зависимости между ci,ei?
Сгенерируем массив разностей ci−ei !
Синтетические данные

Для искусственных данных среднее относительное понижение чувствительности равно 0.0177
Для реальных данных относительное понижение чувствительности на единственной итерации равно 0.0573
Выводы
- Разбиение реальных данных на корзины зависимости сильнее понижает чувствительность, чем разбиение сгенерированных синтетических данных
⟹ Без разбиения для искусственных данных вычисляется ненастоящая, "завышенная" чувствительность.
- Разбиение реальных данных на случайные корзины зависимости не понижает чувствительности
⟹ Mетод разбиения на корзины важен.
Спасибо за внимание!
Подробности на вики-странице:
https://wiki.yandex-team.ru/users/slabod/dependent-queries/
Dependent Queries
By Michael Slabodkin
Dependent Queries
- 123