Улучшение поиска врачей на сайте DocDoc
Привет! Я Женя Гурьянов, Chief Product Officer в компании DocDoc. В своих статьях я рассказываю, как внедрять и развивать «поиск» в продуктах. В этой статье я расскажу, как мы улучшали поисковую выдачу врачей на сайте DocDoc.
В первой статье я рассказываю про то, как наполнять бэклог развития «поиска» в продукте и как приоритизировать поисковые задачи.
Во второй статье я даю ответы на вопросы:
- Что такое релевантность?
- Как построить поиск книг в электронной библиотеке?
- Как построить поиск объявлений в онлайн-классифайде?
В третьей статье мы разбираемся с метриками поисковой выдачи, офлайн- и онлайн-оценками выдачи.
А сейчас я расскажу как применить вышеупомянутую теорию к конкретному случаю - поиску врачей на сайте DocDoc.
Поиск врачей на сайте DocDoc
Для читателей, которые не знакомы с продуктом DocDoc Запись к Врачу, я немного расскажу про него ниже.
Допустим вы хотите найти Невролога в Москве.
Вы заходите на сайт.
Вводите специальность врача - [невролог]. Можете выбрать метро, но пока ограничимся поиском по всей Москве.
Итак, в Москве найдено 3619 неврологов:
Вот так выглядит выдача:
Поставим продуктовые цели
Давайте сейчас с вами попробуем спроектировать Лучшую выдачу для пользователя!
Но какой показатель нам скажет о том, что пользователи стали более успешно находить врачей? Конверсия из трафика в запись к врачу.
Приоритизация доработки
Допустим, мы посмотрели, какой процент пользователей сайта и приложений пользуется поиском - 60-70% от всего трафика на сайт.
Также мы посмотрели, какой процент записей приходит с выдачи врачей - 70-80% от всех записей.
Кажется, что тема довольно-таки приоритетная.
Для наилучшего понимания поведения пользователей посмотрим, какой процент пользователей использует поиск только по специальности без дальнейшего уточнения запроса. Это 50% пользователей. Другая половина пользователей уточняет запрос: гео, детские врачи, выезд на дом, сортировки (стаж, отзывы, рейтинг).
Какие факторы могут влиять на выбор врача
Факторы, влияющие на конверсию пользователя из поиска врача в запись:
- Фото
- Пол врача
- Цена приема
- Рейтинг
- Есть ли научная степень у врача
- Опыт в годах
- Отзывы о враче
- Бренд клиники
- Доступное время приёма
- Расположение клиники (гео)
- Стаж врача
- Удобство записи (есть врачи с онлайн слотами, есть с отправкой формы-заявки, также записаться можно, позвонив по телефону)
- Скидка
- ещё что-то, о чем мы не знаем
Пользователь анализирует все эти факторы у себя в голове и принимает решение, записаться к конкретному врачу или нет. Нам надо научиться предсказывать поведение пользователя.
Построение модели
Наша модель должна принять на вход для каждого запроса и врача набор признаков, взвесить эти признаки и на выходе выдать некий ранк (скоринг) для врача.
По сути, модель должна предсказывать конверсию в запись к данному врачу.
Будем использовать линейную регрессию:
Самое главное теперь - это найти и подготовить данные для обучения. А конкретнее: поставить в соответствие Входным данным (признакам) - Выходные данные (реальные исторические конверсии по специальностям).
У нас есть исторические данные по тому, как вели себя пользователи при той или иной выдаче. Для анализа возьмем данные за последние полгода.
Так как 25% пользователей записываются с первой позиции и 50% с первых трех, мы решили для упрощения задачи брать данные при записи с первой позиции. То есть если при запросе специальности врач с конкретными характеристиками был на первой позиции, то смотрим какой процент пользователей записался к нему (конверсия с первой позиции).
Трудности и допущения
- У нас в базе хранится состояние рейтинга врача на сегодня. Мы не знаем исторические данные по рейтингу. Предположение: рейтинг меняется медленно (на самом деле это так).
- Мы не храним исторические данные по количеству отзывов. Только состояние на сегодня. Предположение: количество отзывов меняется медленно и накопившаяся за полгода дельта повлияла не сильно.
- Не храним историю по скидкам на первичный прием. Решение: используем цены без скидок (предполагаем, что на длительном лаге влияние сгладится).
Наконец, поговорим про основной нюанс работы с историческими данными... Мы берем данные по записям к врачам с первой позиции выдачи за полгода. В среднем на врача при таком условии приходится чуть больше 1 записи. Этого мало для анализа.
Решение: кластеризуем врачей по похожести друг на друга в терминах ранее обозначенных признаков. Получаем 70 кластеров врачей.
Вот пример врачей, которые попали в 1 кластер:
Мужчины, дешёвый приём, мало отзывов, средний стаж, средний рейтинг, без учёной степени...
Далее смотрим на конверсию по таким вот кластерам. Обучаем модель.
В итоге имеем обученную регрессионную модель для предсказания по признакам конверсии в запись для каждого из врачей.
Офлайн проверка
В процессе обучения мы что-то откинули, что-то упростили. Теперь нам очень интересно, отражает ли полученная нами модель реальность. Для этого мы использовали попарное сравнения врачей с помощью асессоров в Яндекс.Толоке. В одной из предыдущих статей я уже писал про офлайн проверку, в частности, про попарный подход.
Мы создали задание для асессоров, которое выглядело следующим образом:
Каждую пару оценивали 100 асессоров.
По итогу офлайн проверки оказалось, что вероятность выбора определенного врача оказывается пропорциональной его скору в модели. То есть наши предсказания совпали с оценкой асессоров. Коэффициент детерминации R^2>0,9.
Что дальше?
По понятным причинам я не могу раскрывать все нюансы подготовки поисковой модели к проду (например, некоторые признаки, которые мы учитываем в модели).
Сейчас мы уже проводим онлайн тестирование полученной нами модели на реальных пользователях. В АБ тесте мы разделили пользователей на 2 группы:
- контрольную 50%
видят старую выдачу, в которой руками на основе экспертного мнения прописано последовательное бинарное влияние нескольких факторов:
- если признак 1 равен определенному набору значений, то такие врачи выше в выдаче, остальные идут вниз
- переходим ко второму признаку; если признак 2 равен определенному набору значений, то такие врачи становятся выше среди тех, кто прошел вверх по признаку 1 и тд
Это некое дерево решений, построенное экспертом.
К сожалению, все нюансы текущей выдачи раскрывать не могу. - тестовую 50%
видят новую выдачу, описанную в статье выше.
Будем сравнивать в первую очередь конверсию в запись к врачу.
Когда мы получим результаты эксперимента и сделаем выводы, постараюсь выложить всё апдейтом в эту статью.
Ждите новых продуктовых историй!
Обычная история такая - у пациента есть симптомы, какая то проблема - но он не до конца уверен к какому врачу следует идти.