Задача
На основе существующего контента (за последние 30 дней) на данной странице Facebook определить какие записи потенциально будут более популярными.
Теория
Первый, и пожалуй ключевой вопрос с которым я столкнулся — «Что такое популярность поста и как её расчитать?».
Обычно, под популярностью записи в соц.сети подразумевают количество лайков под ней. Но наш случай не обычный. Если просто опираться на количество лайков, то мы не сможем определить потенциально популярную запись до того, как она фактически станет таковой.
Иногда используют соотношение лайков/время публикации. Таким образом можно вичислить прирост лайков за секунду. И где прирост больше, то и будет наш результат. От части такой подход правильный, но только от части.
Дело в том что прирост лайков у записай не линейный. И чем дольше пост опубликован тем менее его лайкают. И нам нужно учитывать этот спад активности.
Формула для расчета получается следующая:
R = likes / (time^?)
Где ? — наш коэффициент затухания. Его можно вычислить по формуле:
? = 1 / ?
Где ? — время в течении которого прирост лайков уменьшился в e раз.
Реализация
Нам понадобится:
- NodeJs, который будет каждый час загружать информацию об постах за последние 30 дней
- База данных, в которой будут храниться состояния записей предыдущего цикла
Алгоритм следующий:
- Загружаем записи из Facebook. Для каждой записи нам нужно:
- ID
- Время публикации
- Количество лайков
- Прирост лайков за час (этот параметр будем вычислять и дописывать сами)
- Найти и загрузить из БД состояние каждой записи, которое было сохранено во время предыдущего цикла (час назад)
- Вычисляем коэффициент спада индивидуально для каждой записи:
- Сравнив количество лайков текущего и предыдущего цикла, вычисляем прирост лайков за текущий час (?L)
- Теперь, когда у нас есть прирост лайков за текущий (?L) и предыдущий интервал (?pL) мы можем вычислить спад активности для текущей записи. Сделать это можно по формуле:
?p = 1 / ( (?pL - (?pL/e)) / ((?pL-?L)/time) )
Где time — количество секунд между запросами
- Вычисляем средний коэффициент спада (?) для всей страницы
- Вычисляем рейтинг для каждой записи по формуле
R = likes / (time^?)
- Вычисляем средний рейтинг для всей страницы
- Выбираем записи, чей индивидуальный рейтинг превышает среднее значение для страницы в 2 (или больше) раза.
- Сохраняем все записи в БД для следующей итерации. Не забудьте добавить поле со значением ?L
Используя такой подход мы можем определить те записи, которые с наибольшей вероятностью в будущем будут вызывать больше интереса. При расчетах мы берём во внимание как дату публикации записи так и активность аудитории, что позволяет получить наиболее точные результаты.
Комментарии (8)
seokirill
20.12.2016 17:52Такое уже есть, стоит недорого. Чуть отличается. Новый взгляд все равно уместен.
nikosias
20.12.2016 18:11XGBoost Как мне кажется более уместен. Было бы не плохо добавить «Время» и «День недели» «Праздники/Будни»
mikechips
20.12.2016 22:23Некоторые записи абсолютно внезапно хайпают, и начинают набирать огромнейшее количество лайков, хотя перед этим были никому на фиг не нужны. Так что всё относительно
KrasCoder
21.12.2016 01:10Интересный взгляд на маркетинговое использование соцсетей. А вот насчет «выстреливающих» постов, мне кажется эти явления находятся вне статистической оценки и носят скорее синергетический характер.
AlexUsov
21.12.2016 11:15+2Еще было бы неплохо учитывать тех, КТО лайкает записи. И формировать коэффициент от 0 до 1 по каждому пользователю, на который умножать его лайк. Выявив пользователей, которые ставят лайк записям, которые в будущем становятся трендами, можно сделать много интересного.
el777
Как результаты прогнозирования?