SlideShare a Scribd company logo
1 of 93
Download to read offline
Диско —
Рекомендательная система
Яндекса
Михаил Ройзнер
Яндекс.Музыка и Яндекс.Радио
Музыка Радио
music.yandex.ru, radio.yandex.ru 3
Яндекс.Маркет
market.yandex.ru 4
Яндекс.Дзен
Персональный журнал
› Знает, что вы любите
› Собирает статьи по всему Интернету
› Рекомендует лучшее для вас
zen.yandex.ru 5
Простая схема взаимодействия
6
Простая схема взаимодействия
6
Яндекс.Сервис
Простая схема взаимодействия
6
Яндекс.Сервис Диско
Простая схема взаимодействия
6
Яндекс.Сервис Диско
Информация о пользователе
Информация об объектах
Простая схема взаимодействия
6
Яндекс.Сервис Диско
Информация о пользователе
Информация об объектах
Рекомендации на основе содержания
7
Вася
Рекомендации на основе содержания
7
Вася
Большой куш
Поймай меня,
если сможешь
Счастливое 

число Слевина
Лучшее
предложение
Нравится
Рекомендации на основе содержания
7
Игра на
понижение
Карты, деньги,
два ствола
Волк с 

Уолл-стрит
11 друзей Оушена
Рекомендации
Вася
Большой куш
Поймай меня,
если сможешь
Счастливое 

число Слевина
Лучшее
предложение
Нравится
Netflix Prize
› 2006–2009
› 100 млн оценок
› Задача: улучшить качество
предсказания оценки пользователя
на 10%
› $1 000 000
netflixprize.com 8
Коллаборативная
фильтрация
Похожим пользователям — похожие объекты
10
Похожим пользователям — похожие объекты
10
Дэдпул
?Вася
Похожим пользователям — похожие объекты
10
Дэдпул
?
Катя
Люди 

Икс
Человек

паук
Железный 

человек
Капитан 

Америка
Света
Маша
Петя
4
3
5
5
4
4
5
4
5
4
4
4
4
4
5
5
5
4
3 5Вася
Похожим пользователям — похожие объекты
10
Дэдпул
Катя
Люди 

Икс
Человек

паук
Железный 

человек
Капитан 

Америка
Света
Маша
Петя
4
3
5
5
4
4
5
4
5
4
4
4
4
4
5
5
5
4
3 5 4.6Вася
Недостатки коллаборативной фильтрации
› Проблема холодный старта
11
Недостатки коллаборативной фильтрации
› Проблема холодный старта
› Особенности предметной области
11
Недостатки коллаборативной фильтрации
› Проблема холодный старта
› Особенности предметной области
› Контекст действий пользователя
11
Гибридная система
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
пол
возраст
времясуток
…
геолокация
признаки
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
пол
возраст
времясуток
…
геолокация
признаки
like
dislike
like
like
like
dislike
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
пол
возраст
времясуток
…
геолокация
признаки
like
dislike
like
like
like
dislike
Матрикснет
› Мощный алгоритм машинного обучения
› Основан на градиентном бустинге
деревьев решений (GBDT)
› Поддерживает различные типы задач
машинного обучения (регрессия,
классификация, ранжирование)
› Устойчив к переобучению
› Хорошо работает даже без настройки
yandex.ru/company/technologies/matrixnet 13
пол
возраст
времясуток
…
геолокация
признаки
like
dislike
like
like
like
dislike
like
14
Матрикснет
15
Матрикснет
Пользователь
Крипта (предсказанные
возраст, пол, доход,
интересы)
Поисковый запросы
Посещенные сайты
16
Матрикснет
Пользователь
Крипта (предсказанные
возраст, пол, доход,
интересы)
Поисковый запросы
Посещенные сайты
Объект
Метаинформация
Признаки контента
(жанры, категории, теги)
Совместные факторы
17
Матрикснет
Статистика (различные
исторические агрегаты)
Пользователь
Крипта (предсказанные
возраст, пол, доход,
интересы)
Поисковый запросы
Посещенные сайты
Объект
Метаинформация
Признаки контента
(жанры, категории, теги)
› Вместо явных идентификаторов
можно использовать агрегат по
истории
Статистические агрегаты
› Вместо явных идентификаторов
можно использовать агрегат по
истории
Статистические агрегаты
– CTR документа
› Вместо явных идентификаторов
можно использовать агрегат по
истории
Статистические агрегаты
– CTR документа
– Доля лайков среди всех
прослушиваний трека
› Вместо явных идентификаторов
можно использовать агрегат по
истории
› Можно использовать всю историю
действий с объектом или только
персональную
Статистические агрегаты
– CTR документа
– Доля лайков среди всех
прослушиваний трека
› Вместо явных идентификаторов
можно использовать агрегат по
истории
› Можно использовать всю историю
действий с объектом или только
персональную
Статистические агрегаты
– CTR документа
– Доля лайков среди всех
прослушиваний трека
– Сколько раз данный
пользователь слушал данный
трек
› Вместо явных идентификаторов
можно использовать агрегат по
истории
› Можно использовать всю историю
действий с объектом или только
персональную
› Можно использовать связи
объектов
Статистические агрегаты
– CTR документа
– Доля лайков среди всех
прослушиваний трека
– Сколько раз данный
пользователь слушал данный
трек
› Вместо явных идентификаторов
можно использовать агрегат по
истории
› Можно использовать всю историю
действий с объектом или только
персональную
› Можно использовать связи
объектов
Статистические агрегаты
– CTR документа
– Доля лайков среди всех
прослушиваний трека
– Сколько раз данный
пользователь слушал данный
трек
– Когда пользователь 

в последний раз покупал товар 

той же категории
› Среднее значение какого-то
признака объектов, с которыми
взаимодействовал пользователь
Статистические агрегаты
› Среднее значение какого-то
признака объектов, с которыми
взаимодействовал пользователь
Статистические агрегаты
– Средняя цена просмотренных
пользователей товаров
› Среднее значение какого-то
признака объектов, с которыми
взаимодействовал пользователь
› Среднее значение какого-то
признака пользователей, которые
взаимодействовали с объектом
Статистические агрегаты
– Средняя цена просмотренных
пользователей товаров
› Среднее значение какого-то
признака объектов, с которыми
взаимодействовал пользователь
› Среднее значение какого-то
признака пользователей, которые
взаимодействовали с объектом
Статистические агрегаты
– Средняя цена просмотренных
пользователей товаров
– Средний возраст пользователей,
покупающих этот товар
Совместные факторы
20
Матрикснет
Статистика (различные
исторические агрегаты)
Пользователь
Крипта (предсказанные
возраст, пол, доход,
интересы)
Поисковый запросы
Посещенные сайты
Объект
Метаинформация
Признаки контента
(жанры, категории, теги)
Совместные факторы
21
Матрикснет
Матричная факторизация
Статистика (различные
исторические агрегаты)
Пользователь
Крипта (предсказанные
возраст, пол, доход,
интересы)
Поисковый запросы
Посещенные сайты
Объект
Метаинформация
Признаки контента
(жанры, категории, теги)
Матричная факторизация (SVD)
22
≈
Users
Items
×
Users
Items
d
d
R P Q
brui = hpu, qii =
dX
k=1
p(k)
u q
(k)
i
Обучение модели — оптимизация функционала
23
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Обучение модели — оптимизация функционала
24
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Обучение модели — оптимизация функционала
25
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Обучение модели — оптимизация функционала
26
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Градиентный спуск
27
Обновление параметров 

на каждой итерации:
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
Градиентный спуск
27
Обновление параметров 

на каждой итерации:
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
Стохастический градиентный спуск
28
Обновление параметров 

на каждой итерации:
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
NEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
Стохастический градиентный спуск
28
Обновление параметров 

на каждой итерации:
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
qNEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
pNEW
u = pu 2⌘
⇣ X
i2Du
hpu, qii rui qi + pu
⌘
NEW
i = qi 2⌘
⇣ X
u2Di
hpu, qii rui pu + qi
⌘
Alternating Least Squares (ALS)
29
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Обновление параметров на каждой итерации с помощью
метода наименьших квадратов:
Alternating Least Squares (ALS)
29
pNEW
u = argmin
pu
⇣ X
i2Du
hpu, qii rui
2
+ kpuk2
⌘
= (QT
u Qu + I) 1
QuRu
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
Обновление параметров на каждой итерации с помощью
метода наименьших квадратов:
Alternating Least Squares (ALS)
29
pNEW
u = argmin
pu
⇣ X
i2Du
hpu, qii rui
2
+ kpuk2
⌘
= (QT
u Qu + I) 1
QuRu
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
pNEW
u = argmin
pu
⇣ X
i2Du
hpu, qii rui
2
+ kpuk2
⌘
= (QT
u Qu + I) 1
QuRu
Обновление параметров на каждой итерации с помощью
метода наименьших квадратов:
Alternating Least Squares (ALS)
29
pNEW
u = argmin
pu
⇣ X
i2Du
hpu, qii rui
2
+ kpuk2
⌘
= (QT
u Qu + I) 1
QuRu
X
(u,i)2D
hpu, qii rui
2
+
X
u2U
kpuk2
+
X
i2I
kqik2
! min
qNEW
i = argmin
qi
⇣ X
u2Di
hpu, qii rui
2
+ kqik2
⌘
= (PT
i Pi + I) 1
PiRiqNEW
i = argmin
qi
⇣ X
u2Di
hpu, qii rui
2
+ kqik2
⌘
= (PT
i Pi + I) 1
PiRi
pNEW
u = argmin
pu
⇣ X
i2Du
hpu, qii rui
2
+ kpuk2
⌘
= (QT
u Qu + I) 1
QuRu
Особенности реализации и модификации
› Обучение в реальном времени
30
Особенности реализации и модификации
› Обучение в реальном времени
› Учёт неявных предпочтений пользователей (алгоритм IALS)
30
Особенности реализации и модификации
› Обучение в реальном времени
› Учёт неявных предпочтений пользователей (алгоритм IALS)
› Учёт связей между объектами
30
Особенности реализации и модификации
› Обучение в реальном времени
› Учёт неявных предпочтений пользователей (алгоритм IALS)
› Учёт связей между объектами
› Подбор гиперпараметров
30
Полная схема рекомендаций
32
32
Диско
32
Обновление
параметров
пользователя
Диско
История
пользователя
32
Обновление
параметров
пользователя
Диско
Отбор

кандидатов
История
пользователя
32
Обновление
параметров
пользователя
Диско
Отбор

кандидатов
Обученная

модель
История
пользователя
32
Обновление
параметров
пользователя
Диско
Отбор

кандидатов
Обученная

модель
История
пользователя
Подсчет 

факторов
32
Обновление
параметров
пользователя
Диско
Отбор

кандидатов
Оценка
релевантности
Обученная

модель
История
пользователя
Подсчет 

факторов
33
34
35
Диско
Оценка
релевантности
Подсчет 

факторов
Отбор

кандидатов
Обновление
параметров
пользователя
История
пользователя
Обученная

модель
35
Диско
Оценка
релевантности
Подсчет 

факторов
Отбор

кандидатов
Обновление
параметров
пользователя
История
пользователя
Обученная

модель
Составление
рекомендаций
35
Диско
Оценка
релевантности
Подсчет 

факторов
Отбор

кандидатов
Обновление
параметров
пользователя
История
пользователя
Обученная

модель
Составление
рекомендаций
Ключевые особенности системы Диско
36
Ключевые особенности системы Диско
› Обучается в реальном времени
36
Ключевые особенности системы Диско
› Обучается в реальном времени
› Сочетает коллаборативную фильтрацию 

и рекомендации на основании контента
36
Ключевые особенности системы Диско
› Обучается в реальном времени
› Сочетает коллаборативную фильтрацию 

и рекомендации на основании контента
› Использует как внутреннюю, так и внешнюю историю
пользовательских действий
36
Ключевые особенности системы Диско
› Обучается в реальном времени
› Сочетает коллаборативную фильтрацию 

и рекомендации на основании контента
› Использует как внутреннюю, так и внешнюю историю
пользовательских действий
› Поддерживает оптимизацию различных целевых метрик,
интересных для сервиса
36
Ключевые особенности системы Диско
› Обучается в реальном времени
› Сочетает коллаборативную фильтрацию 

и рекомендации на основании контента
› Использует как внутреннюю, так и внешнюю историю
пользовательских действий
› Поддерживает оптимизацию различных целевых метрик,
интересных для сервиса
› Увеличивает DISCOvery
36
Результаты использования системы Диско
Музыка и Радио
› Среднее время прослушивания на пользователя: +50%
› Возвращаемость пользователей: +100%
Маркет
› Переходы в магазины: +146%
› Доход через блоки рекомендаций: +110%
Дзен
› Запущен новый сервис. CTR после запуска: +220%
37
Полезные ссылки
› IALS: Pilászy, Zibriczky, Tikk. Fast ALS-based Matrix Factorization
for Explicit and Implicit Feedback Datasets. RecSys-2010.
› Spark: spark.apache.org
› Oryx: github.com/cloudera/oryx
› Hyperopt: github.com/hyperopt/hyperopt
› XGBoost: github.com/dmlc/xgboost
38
39
Михаил Ройзнер
Ведущий разработчик
Контакты
@MRoizner
MRoizner
+7 (916) 131 57 69
roizner@yandex-team.ru

More Related Content

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Михаил Ройзнер