Кейсы роста
Epic Growth
3974

Как Badoo связал миллионы людей, изменив алгоритм рекомендаций

Тимур Гарифзянов, Product Lead Magic Lab (Badoo, Bumble and others), рассказал, как менялся алгоритм рекомендательной системы Badoo и как это помогло сгенерить миллионы матчей.

В закладки

Почему решили изменить привычный алгоритм

Как любая крупная компания, мы хотим стать ещё больше. Как одно из направлений решили изучить a-ha-моменты пользователей. Оказалось, ретеншн значительно выше, когда пользователь получает первый матч — находит взаимную симпатию.

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

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

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

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

Как тестировали изменения

Достаточно быстро мы поняли, что A/B-тесты нам не помогут, так как не получалось выделить контрольную группу или изолировать часть людей. К тому же всё это не дало бы ответов, как это повлияет на экосистему в целом.

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

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

После нескольких итераций выбрали такой подход: взяли несколько метрик, которые непосредственно влияют на наш алгоритм — как много мужчин и женщин, процент использования приложения, процент payer-ов и средний возраст. Разделили страны на три сегмента, например, условно в Аргентине у нас довольно много людей и они достаточно хорошо платят, а в Белоруссии не очень много людей, но зато есть хорошее соотношение.

Далее разделили страны на три группы и смотрели, в каких странах эксперимент работает одинаково. Например, будучи уверенными, что эксперимент в Аргентине и в Швейцарии будет работать примерно одинаково, не факт, что он сработает в России.

Будучи уверенными, что эксперимент в Аргентине и в Швейцарии будет работать примерно одинаково, не факт, что он сработает в России.

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

Результат

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

Через несколько итераций мы оптимизировали нашу основную метрику — на 50% больше людей у нас получают матч в первый же день пользования продуктом.

За 2018 год это позволило нам сгенерить — 2,7 млрд матчей.

А совсем скоро, 14 октября, на конференции про рост продуктов Epic Growth Conference Тимур расскажет, как команда строит и развивает систему матчинга, какие есть подводные камни и про особенности тестирования таких систем.

Больше докладов по продуктовому маркетингу — в Telegram-канале.

Материал опубликован пользователем.
Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "Epic Growth", "author_type": "self", "tags": ["\u043f\u0440\u043e\u0434\u0430\u043a\u0442\u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442"], "comments": 24, "likes": 19, "favorites": 65, "is_advertisement": false, "subsite_label": "growth", "id": 86396, "is_wide": false, "is_ugc": true, "date": "Thu, 03 Oct 2019 13:00:23 +0300", "is_special": false }
0
{ "id": 86396, "author_id": 304042, "diff_limit": 1000, "urls": {"diff":"\/comments\/86396\/get","add":"\/comments\/86396\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/86396"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 393615, "last_count_and_date": null }
24 комментария
Популярные
По порядку
Написать комментарий...
7

Интересно было бы увидеть статистику без учета ботов ;)

Ответить
0

Мы не используем ботов, если вы про это. У нас есть отдельная команда которая борется с любыми аккаунтами так или иначе нарушающими правила, эти аккаунты в статистике мы не учитываем

Ответить
3

"У нас нету ботов" "Мы не парсим фотки".

Я вам поверил, особенно когда наткнулся на семейные фотографии мёртвой пары:) 

Не говоря о фотографиях девушек/парнях, которые про баду/тиндеры вообще не слышали.

Ответить
1

Да с появлением stylegan в этом смысла нет. Сейчас спокойно можно нагенерить каких угодно фоток. 

Ответить
0

Использование чужих фото как раз нарушает правила нашего сайта. Для борьбы в том числе с такими профилями мы используем фото верификацию. Мы рассказывали про нее например тут https://techcrunch.com/2016/03/25/badoo-launches-photo-verification-for-safer-more-efficient-online-dating/?guccounter=1&guce_referrer_us=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&guce_referrer_cs=nFzLwujj6PIB9fOS1vDXcQ. Но иногда такие профили проскакивают через фильтр, вы можете на них пожаловаться и наша служба поддержки отреагирует

Ответить
0

Особенно остро данная корреляция видна в местах где баду мало кто пользуется, например в отдаленных регионах и городах на 100к населения, просвайпал 10-20 реальных анкет и потом понеслись фейки:))  

Ответить
1

Да ладно недавно видел фотки подруги времен института, а сейчас серьезная дама с двумя детями. Говорит что не размещала и вообще нахер надо ...

Ответить
6

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

Ответить
4

Офтоп:
Объясните мне смысл приема повторять цитату отдельно крупно. Почему нельзя выделить ее прямо в тексте? Хорошо ещё не как у некоторых: повторяют ее вообще отдельно от контекста.

Ответить
4

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

Ответить
0

Реальную женщину можно в Badoo найти? 

Ответить
4

Вадим, все женщины на Баду реальные 

Ответить
0

Спасибо! 

Ответить
3

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

Ответить
1

Одаа, создал аккаунт что бы спросить это. Верю-верю. 

P. S. Такой же реальный, как и ваши женщины в баду 🤣

Ответить
0

Легко, я там много раз знакомился, не всегда все выходило как хотелось, но это уже совсем другая история))

Ответить
0

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

Ответить
2

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

Ответить
0

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

Ответить
0

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

Ответить
0

Подтяните безопасность лучше.
https://rt-solar.ru/events/news/1699/

Ответить
0

"Например, будучи уверенными, что эксперимент в Аргентине и в Швейцарии будет работать примерно одинаково"- не совсем понятно почему так?!

Ответить

Комментарий удален

0

Вы бы лучше объяснили почему приложения для девушек и парней (функционал) разный, что за дискриминация?

Ответить

Комментарий удален

{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }