Оценка единомыслия (с помощью корреляции оценок, выставленных книгам) важна для корректной работы системы рекомендаций — крайне полезного сервиса, может быть, основного на сайте, ибо многие на него и заходят именно для того, чтобы найти себе новое чтение. Имхо, сейчас рекомендации работают весьма приблизительно. Связано это с не вполне корректным алгоритмом анализа корреляции оценок. Который не учитывает, что разные юзеры используют психилогически разные системы оценок. Скажем, для одних 7 — это положительная оценка, а для других — в общем-то, отрицательная. Проще пояснить на примере. Пусть набор из 5 книг оценен одним юзером так: 8,9,10,9,8. А другой юзер выставил оценки 5,6,7,6,5. Действующая система даст отрицательную корреляцию -0.1. Но видно же, что мнения юзеров как минимум близки. Важно ведь не совпадение оценок, а совпадение отклонений от средней оценки данного юзера.
Предлагаю иную систему расчет корреляции. А именно: 1. Считается средняя оценка каждого юзера по всем оцененным книгам (возможно, с учетом веса крупной и малой форм); 2. Считается среднеквадратичное отклонение всей выборки оценок данного юзера. 3. Оценка диапазона 1...10 пересчитывается как нормированное на средний квадрат отклонение от среднего. 4. По выборке книг, оцененных одновременно двумя юзерами, считается корреляция как произведение векторов. То есть, берется сумма произведений оценок по каждой книге, деленная на евклидовы нормы двух векторов.
Полученная корреляция будет весьма иной, нежели рассчитанная по матрице. Скажем, в приведенном выше примере (если оба пользователя никаких других книг не оценивали, а потому среднее и дисперсию можно считать по приведенным пяти оценкам) она будет равна 1. Что, однако, тоже не совсем корректно, так как шкала 1...10 все же содержит некоторый психологический смысл.
Посему я бы предложил рассчитывать меру подобия мнений как среднюю между корреляцией матриц, рассчитываемой сейчас сайтом, и "векторной корреляцией", рассчитываемой указанным выше способом. Тогда в рассматриваемом примере мера подобия бы составила разумные 0.45 Единомышленники отбираются действующим способом, а вот прогноз оценки считается иначе: 1. Считается среднее "реальных" оценок единомышленников в смысле отклонения от средней (см. выше п.3) 2. Полученное значение считается прогнозным отклонением от моей средней оценки, соответственно, чтобы получить ее саму, нужно умножить на корень из дисперсии и прибавить среднюю.
Имхо, такая система будет давать более точные рекомендации. Во всяком случае, у меня в эксель "векторная корреляция" забита, и достаточно хорошо демонстрирует, что иные друзья мне вовсе и не друзья на самом деле. И наоборот, в некоторых редких случаях корреляция получается чуть выше. Кстати, да, "векторная корреляция" на реальных массивах данных чаще оказывается меньше "матричной". Во всяком случае, у меня. Поэтому, возможно, границы "уровней единомыслия" потребуется подправить.
|