В прошлой статье я вывел формулу, которая прогнозирует рейтинг на основе оценок статьи и средней оценки по сайту. Думал в этой статье, я покажу качество ее прогноза, улучшу прогноз за счет дисперсии. Однако, появилась еще одна проблема.
![image](https://habrastorage.org/r/w1560/storage2/ed9/1c8/753/ed91c87534732a5ff9229855355a6293.png)
Эта формула прогнозирует рейтинг статьи в будущем.
Однако, даже, если наш прогноз будет на 100% верным, он ничего не скажет о той оценке которую поставили бы статье все пользователи сайта. Он спрогнозирует, то какую в среднем оценку поставят пользователи, который на нее перейдут и проголосуют.
Т.е. существует два условия:
Второе условие не такое существенное — мы можем считать, что голосует случайная доля пользователей. Однако, для первого условия мы такое допущения сделать не можем: пользователи читают заголовок статьи и ее анонс. Например, на хабре статья про фотошоп будет интересна только меньшинству, однако, если она будет хорошо написана все дизайнеры поставят ей 5 звезд и она обгонит другие статьи с более широкой аудиторией. Лучше показывает эту проблему пример с порносайтом. На котором часть картинок всякие извращения, которые интересны только меньшинству, а у большинства вызывают отвращение.
Вместо проблемы «одного голоса» приходит проблема «меньшинств». Если на вашем сайте возникла такая проблема, то нужно рейтинг сделать линейно зависящим от числа голосов. Например вместо корня из n написать просто n в формуле в начале этой статьи. Однако, в этом случае, богатые будут богатеть.
Можно исключить извращения из общего рейтинга, однако, как поступить, если нет таких тематик которые нравятся абсолютному большинству пользователей как на Хабре.
Лучше всего характеризует эту картину рейтинг с одним возможным исходом: просто плюс. Проблемы одного голоса в нем нет, однако проблема «богатые богатеют» сильна, поскольку число голосов линейно зависит от просмотров. Мы можем ее снизить.
Допустим, перед нами стоит задача увеличить, число нажатий на «мне нравится» за счет сортировки: это хороший показатель позитивных эмоций, которые вызывают сайт. Вдобавок нажатие на эту кнопку привлекает дополнительный трафик на сайт с соц. сетей, если эта кнопка вконтактовская или фейсбучная. Это отличный показатель и он менее абстрактны, чем рейтинг.
Мы можем спрогнозировать, ровно также как и сделали с рейтингом из пяти звезд. Для этого посчитаем средний CTR и с помощью какой-то из формул из вики. Например, формулой на стекле (она же формула Вилсона). Затем узнаем какая именно часть веса недостоверна и заменим ее средней.
![image](http://codecogs.izyba.com/gif.latex?Ri-cRi%20+c\bar{R}\\\\%20\begin{cases}%20&%20Ri=\hat{P}=\frac{Clicks}{Visits}%20\\%20&%20L=Min(confidence\%20interval)%20\\%20&%20c=\frac{(Ri-L)%20}{Ri}%20\end{cases})
Вилсон слишком длинный и, поэтому, я приведу пример для нормальной аппроксимации.
![image](http://codecogs.izyba.com/gif.latex?c=\frac{Ri-(Ri-Z_{1-a/2}%20\sqrt{\frac{Ri(Ri-1)}{n}})%20}{Ri}=Z_{1-a/2}%20\sqrt{\frac{(Ri-1)}{nRi}})
Мы снова получаем корень из n. Поскольку формула из прошлой статьи выведена из нормального распределения, а это нормальная аппроксимация биномиального. Однако, во многих случаях выдача будет хуже чем при сортировке просто по числу плюсов.
Допустим, мы разработали алгоритм «Кассандра», который делает прогноз со 100% точностью. Даже если на статью не было ни одного перехода. Но в большинстве случаев число кликов уменьшится за счет уменьшения числа просмотров страниц.
Мы не учли того, что число переходов на статью зависит от ее темы и от ее заголовка и анонса. Может быть хорошая статья общедоступной тематики перекрываться отличной статьей из узкой темы, которая интересна только десятой доле пользователей.
Чтобы избежать этого нужно каким-то образом спрогнозировать CTR анонса статьи. Самый простой метод это сделать посчитать число переходов из главного меню на категорию статьи (или посмотреть в гугл аналитикс число посещений станицы категории) и считать CTR статьи пропорциональным популярности категории. Сам CTR нас мало интересует, нас больше всего интересует на сколько CTR одной категории больше другой. Если умножить вси рейтинг на определенное число, то порядок сортировки не изменится.
Однако, CTR статьи зависит не только ее анонса и темы, ни и ее места на странице. Мы можем предположить, что у каждой статьи есть определенный CTR на 10 месте, а с 1 по 9 есть определенные коэффициенты на сколько он увеличивается. Однако, если выдача консервативна, результаты расчета коэффициентов будут статистически недостоверны, поскольку, на определенном месте будет находится только одна статья.
Из этого следует необходимость «разбавления» выдачи. Либо нужно проводить автоматические А/Б тестирования либо рассчитать разницу CTR между позициями заменяя все позиции по очереди одной статьей. Какой из этих вариантов — быстрее и проще — я подумаю на досуге.
![image](https://habrastorage.org/storage2/ed9/1c8/753/ed91c87534732a5ff9229855355a6293.png)
Эта формула прогнозирует рейтинг статьи в будущем.
Проблема меньшинств
Однако, даже, если наш прогноз будет на 100% верным, он ничего не скажет о той оценке которую поставили бы статье все пользователи сайта. Он спрогнозирует, то какую в среднем оценку поставят пользователи, который на нее перейдут и проголосуют.
Т.е. существует два условия:
- Пользователь должен перейти на статью
- Пользователь должен проголосовать
Второе условие не такое существенное — мы можем считать, что голосует случайная доля пользователей. Однако, для первого условия мы такое допущения сделать не можем: пользователи читают заголовок статьи и ее анонс. Например, на хабре статья про фотошоп будет интересна только меньшинству, однако, если она будет хорошо написана все дизайнеры поставят ей 5 звезд и она обгонит другие статьи с более широкой аудиторией. Лучше показывает эту проблему пример с порносайтом. На котором часть картинок всякие извращения, которые интересны только меньшинству, а у большинства вызывают отвращение.
Вместо проблемы «одного голоса» приходит проблема «меньшинств». Если на вашем сайте возникла такая проблема, то нужно рейтинг сделать линейно зависящим от числа голосов. Например вместо корня из n написать просто n в формуле в начале этой статьи. Однако, в этом случае, богатые будут богатеть.
Можно исключить извращения из общего рейтинга, однако, как поступить, если нет таких тематик которые нравятся абсолютному большинству пользователей как на Хабре.
Просто плюс
Лучше всего характеризует эту картину рейтинг с одним возможным исходом: просто плюс. Проблемы одного голоса в нем нет, однако проблема «богатые богатеют» сильна, поскольку число голосов линейно зависит от просмотров. Мы можем ее снизить.
Допустим, перед нами стоит задача увеличить, число нажатий на «мне нравится» за счет сортировки: это хороший показатель позитивных эмоций, которые вызывают сайт. Вдобавок нажатие на эту кнопку привлекает дополнительный трафик на сайт с соц. сетей, если эта кнопка вконтактовская или фейсбучная. Это отличный показатель и он менее абстрактны, чем рейтинг.
Мы можем спрогнозировать, ровно также как и сделали с рейтингом из пяти звезд. Для этого посчитаем средний CTR и с помощью какой-то из формул из вики. Например, формулой на стекле (она же формула Вилсона). Затем узнаем какая именно часть веса недостоверна и заменим ее средней.
Вилсон слишком длинный и, поэтому, я приведу пример для нормальной аппроксимации.
Мы снова получаем корень из n. Поскольку формула из прошлой статьи выведена из нормального распределения, а это нормальная аппроксимация биномиального. Однако, во многих случаях выдача будет хуже чем при сортировке просто по числу плюсов.
Что мы прогнозируем?
Допустим, мы разработали алгоритм «Кассандра», который делает прогноз со 100% точностью. Даже если на статью не было ни одного перехода. Но в большинстве случаев число кликов уменьшится за счет уменьшения числа просмотров страниц.
Мы не учли того, что число переходов на статью зависит от ее темы и от ее заголовка и анонса. Может быть хорошая статья общедоступной тематики перекрываться отличной статьей из узкой темы, которая интересна только десятой доле пользователей.
Чтобы избежать этого нужно каким-то образом спрогнозировать CTR анонса статьи. Самый простой метод это сделать посчитать число переходов из главного меню на категорию статьи (или посмотреть в гугл аналитикс число посещений станицы категории) и считать CTR статьи пропорциональным популярности категории. Сам CTR нас мало интересует, нас больше всего интересует на сколько CTR одной категории больше другой. Если умножить вси рейтинг на определенное число, то порядок сортировки не изменится.
Однако, CTR статьи зависит не только ее анонса и темы, ни и ее места на странице. Мы можем предположить, что у каждой статьи есть определенный CTR на 10 месте, а с 1 по 9 есть определенные коэффициенты на сколько он увеличивается. Однако, если выдача консервативна, результаты расчета коэффициентов будут статистически недостоверны, поскольку, на определенном месте будет находится только одна статья.
Из этого следует необходимость «разбавления» выдачи. Либо нужно проводить автоматические А/Б тестирования либо рассчитать разницу CTR между позициями заменяя все позиции по очереди одной статьей. Какой из этих вариантов — быстрее и проще — я подумаю на досуге.