500px.com алгоритм ранжирования

Недавно мне стало интересно, как http://500px.com/ вычисляет их рейтинг "Pulse". "Пульс" - это оценка от 1..100 в зависимости от популярности фотографии.

Я думаю, что он может использовать некоторые из следующих критериев:

  • Количество лайков
  • Количество "избранных"
  • Количество комментариев
  • Всего просмотров
  • возможно время с момента загрузки фото
  • может быть, некоторые другие неочевидные критерии, такие как количество подписчиков, рейтинг пользователя, модель камеры или аналогичные

Как бы я получить такой алгоритм?

Любой совет о том, как реализовать алгоритм с этими критериями (и, возможно, некоторый код) будет также оценен.

3 ответа

Решение

Я не знаю много о сайте, но системы, подобные этой, обычно работают одинаково. Нормализуйте набор взвешенных значений, чтобы получить одно сопоставимое значение.

Определите свой список правил, взвесьте их в зависимости от важности, а затем выполните их все вместе, чтобы получить окончательное значение.

В этом случае это будет что-то вроде.

  1. Общее количество посещений = 10%
  2. Общее количество лайков = 10%
  3. Количество посещений / количество лайков = 40% (популярность = процент посетителей, которым это понравилось)
  4. количество лайков за последние 30 дней = 20% (текущая популярность)
  5. рейтинг автора = 20%

Теперь нам нужно нормализовать значения этих правил. В зависимости от ваших данных, шкалы чисел и т. Д. Это будет отличаться для каждого правила, поэтому нам нужно работоспособное значение, например, от 1 до 100.

Пример нормализации для вышеперечисленного:

  1. = процент посещений из 50 000 посещений (хорошее количество посещений)

    (vists / 50000 ) * 100

  2. = процент лайков из 10000 лайков (хорошее количество лайков)

    (likes / 10000) * 100

  3. = процент посетителей, которым это понравилось

    (likes / vists) * 100

  4. = процент лайков за последние 30 дней из 1000 лайков (хорошее количество лайков за 30 дней)

    (likesIn30Days / 1000) * 100

  5. = произвольный рейтинг автора

Убедитесь, что все они имеют максимальное значение 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.

Другие вопросы по тегам