500px.com алгоритм ранжирования
Недавно мне стало интересно, как http://500px.com/ вычисляет их рейтинг "Pulse". "Пульс" - это оценка от 1..100 в зависимости от популярности фотографии.
Я думаю, что он может использовать некоторые из следующих критериев:
- Количество лайков
- Количество "избранных"
- Количество комментариев
- Всего просмотров
- возможно время с момента загрузки фото
- может быть, некоторые другие неочевидные критерии, такие как количество подписчиков, рейтинг пользователя, модель камеры или аналогичные
Как бы я получить такой алгоритм?
Любой совет о том, как реализовать алгоритм с этими критериями (и, возможно, некоторый код) будет также оценен.
3 ответа
Я не знаю много о сайте, но системы, подобные этой, обычно работают одинаково. Нормализуйте набор взвешенных значений, чтобы получить одно сопоставимое значение.
Определите свой список правил, взвесьте их в зависимости от важности, а затем выполните их все вместе, чтобы получить окончательное значение.
В этом случае это будет что-то вроде.
- Общее количество посещений = 10%
- Общее количество лайков = 10%
- Количество посещений / количество лайков = 40% (популярность = процент посетителей, которым это понравилось)
- количество лайков за последние 30 дней = 20% (текущая популярность)
- рейтинг автора = 20%
Теперь нам нужно нормализовать значения этих правил. В зависимости от ваших данных, шкалы чисел и т. Д. Это будет отличаться для каждого правила, поэтому нам нужно работоспособное значение, например, от 1 до 100.
Пример нормализации для вышеперечисленного:
= процент посещений из 50 000 посещений (хорошее количество посещений)
(vists / 50000 ) * 100
= процент лайков из 10000 лайков (хорошее количество лайков)
(likes / 10000) * 100
= процент посетителей, которым это понравилось
(likes / vists) * 100
= процент лайков за последние 30 дней из 1000 лайков (хорошее количество лайков за 30 дней)
(likesIn30Days / 1000) * 100
= произвольный рейтинг автора
Убедитесь, что все они имеют максимальное значение 100 (если оно закончилось, уменьшите его). Затем нам нужно объединить все это в зависимости от их веса:
Популярность = (1 * 0.1) + (2 * 0.1) + (3 * 0.4) + (4 * 0.2) + (5 * 0.2)
Это все из головы и грубо. Очевидно, есть и гораздо более эффективные способы для этого, поскольку вам не нужно нормализовать процент на каждом этапе, но я надеюсь, что это поможет вам понять суть.
Обновить
У меня нет никаких ссылок или дополнительного чтения. Я никогда не работал с ним как с более широкой концепцией только в небольших реализациях.
Я думаю, что большая часть того, что вы читаете, будет методологической системой ранжирования в целом и теориями. Потому что в зависимости от ваших правил и формата данных ваша реализация будет сильно отличаться. Кажется, такая огромная концепция, когда на самом деле она сводится к 10 строкам кода, не считая агрегирования ваших данных.
Вы можете также обратиться к следующему
500px объясняет их (пока что устаревший) алгоритм ранжирования импульсов в своем блоге: https://500px.com/blog/52/how-rating-works-and-why-there-s-a-lot-more-to-a-rating-than-just-a-number
Довольно интересно и отличается от того, что предлагают решения на SO.