Хабрахабр

Эффективная онлайн-оценка качества при разработке веб-сервисов. Лекция Яндекса

Разработка сервисов сейчас базируется на оценке их качества. Чтобы оценить взаимодействие пользователей с продуктом, проводятся онлайн-эксперименты, и только потом принимаются решения о запусках и обновлениях. Например, в 2015 году Google ежедневно проводил до 1000 подобных экспериментов. Растёт и число небольших компаний, которые используют AB-тестирование. На очередной встрече «Яндекс изнутри» разработчик-исследователь Алексей Друца рассмотрел современные математические методы, лежащие в основе платформ для онлайн-оценки.

— Мой доклад будет про онлайн-оценку качества для эффективной разработки веб-сервисов. Сначала расскажу о нашей команде, о том, чем мы занимаемся.

Мы в отделе научных исследований занимаемся самыми разными областями компьютерных наук. Это и анализ данных, и теоретические основы машинного обучения, обработка естественных текстов, компьютерное зрение и информационный поиск, а также иногда удается позаниматься аукционами и теорией игр.

д. Наш небольшой отдел постоянно публикуется на ведущих конференциях в этих областях, таких как NIPS, ICML, KDD, CVPR, ACL и т.

Здесь лишь те статьи, которые были опубликованы за последние несколько лет.

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

Одна из них получила награду лучшей статьи на ведущей конференции по информационному поиску в 2015 году. За последние пять лет мне и моим коллегам удалось внести существенный вклад в развитие этой тематики, мы опубликовали 14 статей на ведущих конференциях.

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

Пример эксперимента приведен на этом слайде. В каждый момент проводятся десятки экспериментов. Рядом с результатами правой выдачи присутствуют миниатюрные картинки. Мы видим два варианта выдачи по одному и тому же поисковому запросу.

Правильный ответ скажу позже. Как вы считаете, правый вариант выдачи лучше, чем левый, и улучшает сервис?

На правом варианте отсутствует фактоид. На слайде опять приведены два варианта выдачи на один и тот же поисковый запрос.

Правильный ответ скажу позже. Как вы считаете, правый вариант сервиса лучше, чем левый?

Поэтому давайте разберемся, что же находится под капотом AB-тестирования. Ответ на мои запросы сильно зависит от того, что мы вкладываем в понятие «улучшить».

Для каждого эксперимента выделяется некоторый набор пользователей, который будет участвовать в этом эксперименте. Нелишне вспомнить ключевые опорные моменты этого процесса. Например, поровну. Далее этот набор делится случайным образом на две группы. Мы половину пользователей определяем в группу А, а половину — в группу В.

Например, группе А вы показываете текущую рабочую версию продукта, которая показывается большинству пользователей, а группе В — новую экспериментальную версию продукта, где зашита, например, новая функциональность, которую вы хотите протестировать. Затем каждой из этих групп показывается собственная версия вашего сайта, веб-сервиса или продукта.

Например, это может быть одно число для каждого пользователя. После истечения какого-то времени, вы завершаете эксперимент, например, через неделю или две, и собираете со всех пользователей некоторую статистику, информацию об их поведении. Мы эти числа агрегируем среди всех пользователей в каждой группе, и получаем число для каждой из групп. Это число — например, количество сессий пользователей на сайте в течение эксперимента — мы называем ключевой метрикой. Таким образом мы получаем по одному числу для каждой группы. Иногда это называется агрегированной метрикой или критерием оценки. Для нашего примера это среднее количество сессий на пользователя в каждой из групп.

Имея эти два числа, мы берем их разницу, и сравниваем эту разницу с нулем, чтобы понять, изменилась ли ваша метрика в положительную сторону или в отрицательную, а также запоминаем, насколько большая эта разница была.

Все мы знаем, что разделение пользователей на группы случайно, поведение пользователей тоже вполне подчиняется случайному процессу, а потому наблюдение вашей разницы — это некая случайная величина. Но этого вам недостаточно знать. Или реализация случайной величины.

Например, это может быть всем известный Т-тест Стьюдента. Чтобы понять, отличается ли та наблюдаемая разница от возможного шума в данных, мы применяем статистический тест.

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

Давайте подробнее разберемся в этих двух свойствах. Эти два процесса подводят нас к двум ключевым свойствам или определениям метрики, которыми должна метрика обладать.

В действительности наблюдаемая разница средних величин метрики Х для версий А и В является несмещенной оценкой среднего эффекта влияния, который в свою очередь также является разницей, но уже математических ожиданий метрики Х для версии А и версии В.

Давайте представим, что в результате эксперимента мы получили дельту, равную одному проценту увеличения числа сессий на пользователя. Таким образом нужно всегда помнить, что наблюдаемая дельта является реализацией случайной величины. На экране это указано как большой отрезок. Много это или мало? Наверное, это очень большая величина.

Средний эффект влияния равен нулю. Но чтобы в этом разобраться, надо выяснить, можем ли мы наблюдать такую дельту, если версии сервиса неразличимы.

Здесь все сильно зависит от того, какого распределение этой дельны. Часто это условие еще называют нулевой гипотезой. И нетрудно заметить, что в случае, если мы имеем дело с распределением синего цвета, то вероятность наблюдать эту дельту намного меньше при нулевой гипотезе, чем если мы имеем дело с распределением зеленого цвета. На экране приведены два возможных варианта распределений.

Чтобы понимать или быть уверенным в значимости того наблюдения или наблюдаемого изменения, мы вычисляем вероятность наблюдать эту дельту или больше при условии нулевой гипотезы.

Чтобы вычислить эту вероятность, как правило, мы применяем всем известный Т-тест Стьюдента, который основан на Т-статистике.

Первая величина — дисперсия метрики Х для каждой из групп. Вот ее формула, в числителе дельта, а в знаменателе еще две величины. Чем выше модуль Т-статистики, тем более мы уверены в наблюдаемом изменении в нашей дельте. Вторая — размер выборки каждой из групп.

Рассмотрим выражение для Т-статистики. Давайте внимательнее разберемся, при каких условиях модуль Т-статистики будет больше. Понятно, что этот модуль Т-статистики будет выше, если числитель будет больше, если эксперимент будет сильно менять метрику. Оно зависит от трех величин. Например, если эксперимент будет сдвигать метрику на 10%, на 20%, на 30%. Только при этом условии числитель будет больше. Какие еще большие числа мы можем вообразить?

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

Но этот способ плохой, потому что снижает пропускную способность экспериментальной платформы, а значит, ее эффективность. Самый простой способ — повысить количество пользователей, которое мы используем в эксперименте.

Таким образом мы постепенно приходим к такому понятию как чувствительность метрики. Альтернативный способ — снижать дисперсию метрики. Чем выше чувствительность, тем более слабые изменения мы можем замечать в нашем эксперименте. Для простоты будем считать, что это средний модуль Т-статистики по всем экспериментам. Или альтернативно мы можем использовать меньше пользователей в эксперименте, чтобы наблюдать те же изменения, которые наблюдали и раньше, но на том же уровне значимости, что и при исходном количестве пользователей.

Основным ключом к повышению чувствительности является уменьшение дисперсии метрики, о чем я говорил раньше.

Перейдем ко второму понятию — метрике направленности.

Оказывается, в данном примере количество кликов на пользователя увеличилось, что говорит о положительном эффекте. Рассмотрим две метрики: количество кликов на пользователя за время эксперимента и количество сессий на пользователя. Посетители лучше используют результаты выдачи.

Это означает, что пользователи стали чаще возвращаться на наш сайт, чтобы решать повседневные задачи. Кроме того, количество сессий на пользователя также выросло.

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

Количество кликов увеличено, а количество сессий уменьшено в эксперименте. В итоге что мы имеем?

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

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

В наших экспериментах такие метрики очень тяжело сдвинуть, очень тяжело изобрести новую функциональность, которая существенно повысит лояльность пользователей или количество задач, которые они решают в своей повседневной жизни через наш сервис. При этом эти метрики имеют очень низкую чувствительность.

Их очень легко сдвинуть. Напротив, метрики активности имеют путанную направленность, но при этом имеют очень высокую чувствительность. Попробовать, посмотреть, что с ней происходит. Любой эксперимент, который внедряет функциональность, изменяющую или затрагивающую дизайн, сразу приводит к изменению метрики: если пользователям не нравится эта новая функциональность, они вынуждены ее изучить. В результате они совершают больше или меньше кликов, если отвлекаются на совершение другого действия, и важной задачей является увеличение чувствительности метрик лояльностей, но при сохранении их направленности.

Чувствительность, потому что это позволит выявить более слабые изменения метрики, а также использовать меньше пользователей. Суммируя, мы имеем следующую задачу: улучшить чувствительность ключевой метрики, но сохранить ее направленность. А направленность нужно сохранить, чтобы делать правильные выводы об изменении качества системы. И то, и другое повышает эффективность или производительность платформы по проведению экспериментов.

Далее я расскажу об одном из приемов повышения чувствительности метрики, который применяется в Яндексе, и про который мы опубликовали статью на конференции KDD в 2016 году.

Данная техника основана на вычитании предсказаний значения метрики из самой метрики для понижения ее дисперсии.

Предположим, мы рассматриваем в качестве ключевой метрики количество сессий, проведенных данным пользователем на нашем сайте в течение эксперимента. Давайте рассмотрим временной отрезок, который схематично разбит на два подинтервала, на период времени, в котором проводится эксперимент, и на некоторый период времени до этого эксперимента.

Например, количество сессий этого пользователя, которые он провел в предэкспериментальный период. Пусть также у нас имеется некоторый набор показателей, фичей, характеризующих пользователя. Кроме того мы можем использовать какие-то статистические характеристики пользователя, например, пол, возраст, какие-то еще данные, если они нам доступны. Аналогично в качестве фичей могут выступать другие метрики, которые мы измерили в этом периоде.

Например, это может быть простая линейная модель. Наконец, пусть мы имеем некоторый предсказатель, который на основе данных показателей предсказывает нашу ключевую метрику. Например, самым простым и хорошим предсказателем является количество сессий, проведенных пользователем в предэкспериментельный период, если длительность предэкспериментального периода равна длительности эксперимента.

На нашем примере это означает, что вместо того, чтобы смотреть на количество сессий в эксперименте, мы будем смотреть, каково изменение в количестве сессий по сравнению с тем, сколько мы ожидали на основе нашего предсказания. Суть этой техники составляет следующий подход: мы вместо того, чтобы использовать метрику Х, используем метрику Y, которая равна метрике Х, минус предсказанное значение метрики Х.

На самом деле, мы можем доказать следующие теоретические гарантии про нашу технику. Давайте разберемся, почему эта техника работает. Например, вследствие того, что вы не используете факторы, собранные с пользователя, после начала эксперимента. Во-первых, если ваш предсказатель не зависит от экспериментальной выдачи, которую вы проверяете или тестируете. А значит, наблюдаемое изменение метрики Y будет несмещенной оценкой исходной метрики Х. В этом случае вы гарантировано получаете следующее утверждение: средний эффект влияния новой метрики равен в точности среднему эффекту влияния старой метрики. Таким образом мы гарантируем, что метрика Y имеет ту же направленность, что и метрика Х.

Предположим, что вы используете предсказатель, который является оптимальным среди моделей машинного обучения, которые замкнуты относительно умножения на скалярную величину. Давайте рассмотрим теперь вопрос чувствительности. Это означает, что метрика Y точно понижает дисперсию, либо, как мы выяснили, повышает чувствительность. Тогда нетрудно доказать, что дисперсия метрики Y будет гарантировано меньше дисперсии метрики Х.

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

Давайте поймем, насколько мы можем понизить.

Это очень сильный и важный результат. Если мы дополнительно потребуем, чтобы ваш предсказатель был оптимален среди класса моделей, которые замкнуты относительно прибавления скалярной величины, тогда дисперсия метрики Y будет в точности равна среднеквадратичному отклонению вашего предсказателя. Чем лучше вы делаете ваш предсказатель, либо за счет модели, либо за счет факторов, тем сильнее вы понижаете дисперсию метрик и тем выше растет ее чувствительность. Таким образом степень, насколько вы понижаете дисперсию, равна в точности степени того, насколько вы улучшаете ваш предсказатель.

Новая метрика получилась сонаправленной с метрикой Х. Подведем итог. И кроме того, вы можете контролировать степень повышения чувствительности за счет улучшения качества предсказания вашей исходной метрики Х. Новая метрика Y понижает дисперсию или повышает чувствительность метрики Х.

Во-первых, независимость предсказателя от эксперимента, а во-вторых, тот факт, что ваш предсказатель является оптимальным с точки зрения среднеквадратичного отклонения в классе моделей, замкнутых относительно умножения и прибавления константы. Какие предположения мы для этого использовали?

На самом деле, таким свойством обладают линейные модели, а также широко используемые деревья решений, которые построены градиентным бустингом.

Кроме того, мы использовали 161 AB-тест как выборку, на которой вычисляли показатели производительности нашего подхода. Мы провели эксперименты, вернее исследования, в которых рассмотрели количество сессий в качестве ключевой метрики, использовали 51 фактор о пользователе, в частности количество сессий в предэкспериментальный период, и время первого захода пользователя в эксперимент.

Мы понизили дисперсию исходной метрики лояльности на 63%, что эквивалентно трехкратному сокращению числа пользователей, которые нам необходимы в эксперименте, чтобы получать Т-статистики того же уровня, как с исходной метрикой. В результате нам удалось достигнуть следующих результатов.

Все подробности об этом исследовании и эксперименте вы можете с легкостью прочитать в нашей статье, которую мы опубликовали в 2016 году. Наконец, мы в два раза большем количестве экспериментов замечали статистически значимые изменения.

Первое — вместо того, чтобы использовать в качестве ключевой метрики ту метрику, на которую вы смотрите, берите и вычитайте из нее предсказанные значения этой самой метрики. Давайте еще раз подведем, в качестве напоминания, основные моменты этой техники. За счет этого вы сможете добиться максимального сокращения дисперсии и повышения ее чувствительности. Кроме того, используйте продвинутые методы машинного обучения, чтобы качество предсказания вашего предсказателя было наилучшим.

Это будет гарантировать, что новая метрика не будет путать вас в принятии решений, то есть будете иметь ту же направленность, что и метрика Х. Наконец, обязательно следите за тем, чтобы факторы, которые используются в вашем предсказателе, были независимы от измеряемого или тестируемого функционала.

Если вы случайно окажетесь во Франции в конце апреля, то можете заглянуть и узнать в деталях, как устроена в Яндексе платформа для экспериментов, с какими подводными камнями можно столкнуться при ее развитии, а также какие современные технологии в ней применяют (на момент публикации расшифровки конференция уже прошла, слайды с указанного туториала можно найти по QR-коду — прим. Если вы хотите знать больше, во-первых, наша команда Яндекса организует полнодневный туториал на ведущей международной конференции по интернет-технологиям, ранее называемой WWW, сейчас это The Web Conference. ред.).

И мы ожидаем, что осветим там широко также тему онлайн-оценки качества. Поскольку не все в зале имеют возможность побывать на нашем туториале, мы готовим онлайн-курс для Coursera, который выйдет ориентировочно этим летом. Спасибо за внимание.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть