Кейс 1: Сравнение объектов и пользователей

Использование евклидова расстояния

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

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

Пользователи и товары в одном пространстве

Постановка задачи

Рассмотрим типичную задачу из прикладного ML и рекомендательных систем. У нас есть пользователи и объекты (товары, сервисы, подписки), описанные набором числовых признаков. Мы хотим понять, какие пользователи похожи друг на друга и какие объекты им подходят.

Предположим, каждый пользователь описывается вектором:

x=(возраст,доход,частота покупок)x = (\text{возраст}, \text{доход}, \text{частота покупок})

Это классический случай, где признаки:

  • имеют понятный физический смысл;

  • измеряются в разных единицах;

  • должны вносить сопоставимый вклад.

Шаг 1: нормализация признаков

Без нормализации евклидово расстояние работать не будет корректно. Доход в тысячах просто "раздавит" возраст и частоту покупок.

Один из простейших и часто используемых подходов – min-max нормализация:

xi=ximin(xi)max(xi)min(xi)x_i’ = \frac{x_i - \min(x_i)}{\max(x_i) - \min(x_i)}

В реальном проекте min и max считаются по всей выборке, но для примера зафиксируем их вручную.

Допустим, у нас есть два пользователя:

После нормализации оба пользователя превращаются в точки в одном и том же масштабе.

Шаг 2: евклидово расстояние между пользователями

Теперь мы можем корректно измерить "общую близость" профилей.

Формула евклидова расстояния:

d(x,y)=i=1n(xiyi)2d(x, y) = \sqrt{\sum_{i=1}^{n} (x_i - y_i)^2}

PHP-реализация:

Использование:

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

  • kNN для поиска похожих пользователей,

  • сегментация клиентов,

  • cold-start рекомендации.

Важно подчеркнуть: евклидово расстояние отвечает на вопрос "насколько профили близки в целом", а не "насколько они хорошо взаимодействуют с каким-нибудь объектом".

Шаг 3: переход к объектам и dot product

Теперь добавим объекты – например, товары. Пусть каждый товар описывается вектором предпочтений:

y=(ориентация на возраст,ориентация на доход,ориентация на активность)y = (\text{ориентация на возраст}, \text{ориентация на доход}, \text{ориентация на активность})

Это уже не профиль пользователя, а направление, в котором "смотрит" товар.

Пример:

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

Именно здесь появляется dot product:

xy=i=1nxiyix \cdot y = \sum_{i=1}^{n} x_i y_i

PHP-код:

Использование:

Если значение большое, это означает:

  • пользователь сильно выражен по тем признакам,

  • которые важны для данного товара.

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

Такой скор – это основа рекомендательных систем:

  • матричная факторизация,

  • embeddings пользователей и товаров,

  • нейросетевые рекомендатели.

Почему здесь работают разные меры

Евклидово расстояние хорошо отвечает на вопрос:

"Кто из пользователей похож друг на друга?"

Dot product отвечает на другой вопрос:

"Насколько хорошо пользователь и объект сочетаются?"

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

Если сказать коротко, но точно:

  • расстояние – про близость;

  • скалярное произведение – про взаимодействие и силу отклика.

Практическое резюме кейса

circle-info

В реальных системах эти два подхода почти всегда используются вместе. Сначала мы ищем похожих пользователей или сегменты с помощью евклидова расстояния. Затем внутри сегмента ранжируем объекты с помощью dot product.

Именно такая комбинация лежит в основе большинства production-рекомендательных систем – от простых e-commerce решений до сложных ML-пайплайнов.

Last updated