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

Постановка задачи
Рассмотрим типичную задачу из прикладного ML и рекомендательных систем. У нас есть пользователи и объекты (товары, сервисы, подписки), описанные набором числовых признаков. Мы хотим понять, какие пользователи похожи друг на друга и какие объекты им подходят.
Предположим, каждый пользователь описывается вектором:
Это классический случай, где признаки:
имеют понятный физический смысл;
измеряются в разных единицах;
должны вносить сопоставимый вклад.
Шаг 1: нормализация признаков
Без нормализации евклидово расстояние работать не будет корректно. Доход в тысячах просто "раздавит" возраст и частоту покупок.
Один из простейших и часто используемых подходов – min-max нормализация:
В реальном проекте min и max считаются по всей выборке, но для примера зафиксируем их вручную.
Допустим, у нас есть два пользователя:
После нормализации оба пользователя превращаются в точки в одном и том же масштабе.
Шаг 2: евклидово расстояние между пользователями
Теперь мы можем корректно измерить "общую близость" профилей.
Формула евклидова расстояния:
PHP-реализация:
Использование:
Малое значение означает, что пользователи похожи по совокупности признаков. В нашем случае расстояние ≈ 0.4197 означает, что пользователи довольно хорошо различаются по возрасту, доходу и активности покупок. Именно по этому принципу работают:
kNN для поиска похожих пользователей,
сегментация клиентов,
cold-start рекомендации.
Важно подчеркнуть: евклидово расстояние отвечает на вопрос "насколько профили близки в целом", а не "насколько они хорошо взаимодействуют с каким-нибудь объектом".
Шаг 3: переход к объектам и dot product
Теперь добавим объекты – например, товары. Пусть каждый товар описывается вектором предпочтений:
Это уже не профиль пользователя, а направление, в котором "смотрит" товар.
Пример:
Теперь мы хотим понять, насколько пользователь и товар подходят друг другу. Здесь евклидово расстояние уже не так удобно. Нам важно, чтобы большие значения признаков пользователя усиливали релевантные признаки товара.
Именно здесь появляется dot product:
PHP-код:
Использование:
Если значение большое, это означает:
пользователь сильно выражен по тем признакам,
которые важны для данного товара.
В нашем случае по результату можно сделать вывод: если этот товар важен для людей с высоким доходом и активными покупками, то пользователь A подходит умеренно, но не идеально.
Такой скор – это основа рекомендательных систем:
матричная факторизация,
embeddings пользователей и товаров,
нейросетевые рекомендатели.
Почему здесь работают разные меры
Евклидово расстояние хорошо отвечает на вопрос:
"Кто из пользователей похож друг на друга?"
Dot product отвечает на другой вопрос:
"Насколько хорошо пользователь и объект сочетаются?"
Это принципиально разные задачи, и попытка решать их одной и той же мерой часто приводит к плохим результатам.
Если сказать коротко, но точно:
расстояние – про близость;
скалярное произведение – про взаимодействие и силу отклика.
Практическое резюме кейса
Именно такая комбинация лежит в основе большинства production-рекомендательных систем – от простых e-commerce решений до сложных ML-пайплайнов.
Last updated