Ваш "ОСНОВНОЙ недостаток" не редкость.Как вы говорите, Amazon будет «связан» со всем.Это довольно распространенная проблема с любой системой рекомендаций, которая пытается использовать такие отношения.Я не делал этого с категориями магазинов, но проблема очень похожа на построенную мной систему выбора / ранжирования видео.
Обычный способ предотвратить доминирование популярного материала - вместо использованияколичество соответствующих категорий, вы даете веса на оценки для каждого магазина.Общие весовые коэффициенты: 1/category_count
или 1/sqrt(category_count)
.
Представьте себе три магазина:
Jim's Books - 2 categories: ["Books", "Music"]
Amazon - 10 categories: ["Books", "Music", "Movies", "Housewares", etc.]
Ralph's Remainders - 3 categories: ["Books", "Music", "Movies"]
Теперь, если вы ищете магазины, похожие на книги Джима, вы подходитекатегории.Очевидно, что и Amazon, и Ralph включают категории «Книги» и «Музыка», и если бы вы использовали только количество совпадающих категорий, обе имели бы одинаковый балл.
Но если вы используете весовой коэффициент, тогда их оценки сильно отличаются.С весовым коэффициентом 1/category_count
:
Amazon - 10 categories, weighting factor = 1/10.
Ralph's - 3 categories, weighting factor = 1/3.
Таким образом, Amazon получит оценку сходства 0,20, а Ральфа получит оценку сходства 0,66.
Если коэффициент взвешивания равен 1/sqrt(category_count)
, затем:
Amazon - weighting factor = 1/sqrt(10) = 0.316
Ralph's - weighting factor = 1/sqrt(3) = 0.562
В этом случае оценка Amazon составляет около 0,632, а оценка Ральфа - 1,124.
Я обнаружил, что 1/sqrt(category_count)
обычно лучше, потому что этоуменьшает подавляющий эффект очень популярных магазинов (то есть тех, которые имеют много категорий), но не настолько, чтобы эти магазины не попадали в результаты.Использование 1/category_count
придает слишком большое значение магазинам, которые имеют только одну или две категории.