"С этой книгой читают" и быстрофикс (потенциальный)
Автор: wayerrЧетыре дня я смотрел на то, что этот виджет выдаёт. Насколько я могу предположить, принцип его работы выглядит примерно так:
Есть, допустим, три книги:
- "маски" - 1000 библиотек
- "кицунэ" - 20 библиотек
- "лисичка" - 10 библиотек
При этом:
- 5 пользователей добавили в библиотеку "кицунэ" и "лисичка"
- 10 пользователей имеют в библиотеке "маски", а также "кицунэ" или "лисичка"
Теперь представим сколько общих библиотек (ну то есть "эти книги читают вместе"):
маски | кицунэ | лисичка | |
маски | - | 10 | 10 |
кицунэ | 10 | - | 5 |
лисичка | 10 | 5 | - |
Теперь, если у нас задача найти самую "близкую" книгу, по числу общих библиотек для книги "кицунэ" или "лисичка", то на первом месте будут "маски".
Предположительно, именно так и работает виджет. Проблема в том, что никак не связано с похожестью книг, даже с похожестью для читателя.
Исправить это легко, надо поделить число "связей" (общих библиотек) на максимальное число библиотек пары сравниваемых книг (т.е. для пары "маски"-любая книга будем делить на 1000, для "кицуне"-"лисичка" на 20). Составим новую таблицу с таким подходом:
маски | кицунэ | лисичка | |
маски | - | 0.01 | 0.01 |
кицунэ | 0.01 | - | 0.25 |
лисичка | 0.01 | 0.25 | - |
Неожиданно, маленькое математическое колдунство даёт нам результат который:
- показывает хоть какую-то схожесть книг
- позволяет хоть как-то удовлетворить читателя, скрыв от него книгу про которую он и так знает
Если что, я не в курсе, как там виджет сейчас работает, это чисто предположения.