Yet another rating system

Отже, тема рейтингових систем продовжує розбурхувати уми хабрапользователей. З'являються все нові і нові схеми, формули, тести. І кожен раз все зводиться до одного й того ж питання: як поєднати середню оцінку користувачів з нашою впевненістю в цій оцінці. Наприклад, якщо один фільм отримав 80 позитивних і 20 негативних голосів, а інший - 9 позитивних і 1 негативний, то який з фільмів краще? Не претендуючи на створення нової універсальної рейтингової системи, я все ж запропоную один з можливих підходів до вирішення саме цього питання.

Апроксимація нормальним розподілом

Взагалі, саме формулювання - оцінити деяке значення і нашу впевненість в ньому - наштовхує на думку про використання моделі розподілу ймовірностей, наприклад, нормального розподілу.

Що таке нормальне Розподіл ?!

Для тих, хто прогулював пари мат. статистики, нагадаю, що з себе представляє нормальний розподіл, та й взагалі розподіл ймовірностей. Припустимо, ми прийшли на зупинку і побачили, як прямо перед нами поїхав автобус. Ми знаємо, що наступний приїде приблизно через 15 хвилин (на 15-й хвилині). Ну, може на 16й. Або навпаки, на 14й. В принципі, водій може поквапитися і приїхати вже на 12 хвилині, але ймовірність цього набагато нижче. Графік внизу якраз і показує розподіл ймовірностей приїзду автобуса в кожну хвилину: швидше за все він приїде на 15й хвилині, з трохи меншою ймовірністю - на 14й або 16й, і зовсім з невеликою ймовірністю на 12й або 18й.

Yet another rating system

При цьому слід розуміти, що значення по осі Y - це не ймовірність, а щільність ймовірності (probability density function, PDF). Сама ймовірність вираховується як площа під графіком між двома значеннями X1 і X2, наприклад, ймовірність, що автобус прийде між 15 і 16 хвилиною в даному випадку дорівнює 0.248. Але про це пізніше.

Нормальний розподіл характеризується двома параметрами - середнє значення (mean, тут - 15 хвилин) і дисперсією (variance, розкид), яка показує ступінь невизначеності середнього значення: чим більше дисперсія, тим ширше графік, і тим менше ми впевнені в тому, коли ж нарешті прийде цей автобус.

Рейтинг, як правило, це просто число, якийсь кінцевий результат оцінювання. А власне оцінювати ми будемо передбачуване якість фільму (кавомолки, статті, користувача - потрібне підкреслити). На графіку нижче показані графіки розподілів для двох гіпотетичних фільмів.

Yet another rating system

Перший фільм (синя лінія) викликав суперечливі відгуки (середнє значення розподілу одно 0.5). На відміну від нього, другий фільм (зелена лінія) отримав більше позитивних, ніж негативних оцінок, проте людей проголосувало значно менше, тому і в результаті ми впевнені набагато менше (дисперсія набагато більше, ніж в першому графіку).

В принципі, нормальний розподіл само по собі вже дозволяє непогано моделювати рейтинг (теоретичне обгрунтування для цього дає центральна гранична теорема). Однак у статистиці є і більш зручний інструмент для цього.

Бета-розподіл

Так само, як і нормальне, бета-розподіл задається двома параметрами - alpha> 0 і beta> 0 (записується як X

B (alpha, beta)). Одако на відміну від нормального, завжди має форму дзвони, бета-розподіл має набагато більшу гнучкість. Зокрема, при alpha = 1 і beta = 1 даний розподіл перетворюється в рівномірний (темно-синя лінія на малюнку внизу), при alpha <1 и beta <1 функция распределения принимает форму колодца (зелёная линия), а при alpha> 1 і beta> 1 стає схожа на нормальне (червона і світло-блакитна лінії).

Yet another rating system

Для всіх прикладів понадобатся наступні обсяги імпорту:

Попередній графік був згенерований наступним кодом:

Крім цього, бета-розподіл володіє декількома цікавими властивостями:

  1. Воно обмежене кінцевим інтервалом. Якщо ми хочемо «замкнути» можливі значення в інтервал від 0 до 1, то бета-розподіл - як раз те, що треба.
  2. Воно симетрично щодо своїх параметрів. Графік B (alpha, beta) буде дзеркальним відображенням графіка B (beta, alpha).
  3. alpha і beta діють на різні сторони графіка щільності. При збільшенні alpha графік зміщується і нахиляється вправо, при збільшенні beta - навпаки, вліво.
  4. Дисперсія при збільшенні будь-якого з параметрів зменшується.

оцінок

А що, якщо використовувати в якості параметрів alpha і beta відповідно кількість позитивних і кількість негативних оцінок користувачів? При цьому спочатку бета розподіл можна форматувати одиницями для обох параметрів (що, взагалі кажучи, буде відповідати лапласовского згладжування). У цьому випадку спочатку наша оцінка щодо якості фільму буде рівномірно розподілена (ми нічого не знаємо про нього), а кожен голос буде збільшувати один з параметрів, зменшувати дисперсію і зрушувати графік або вправо (alpha параметр, позитивні відгуки), або вліво (beta параметр , негативні відгуки). При цьому наша оцінка якості фільму ніколи не вийде за межі інтервалу [0..1] і, по суті, буде показувати ймовірність того, що фільм сподобається середньостатистичному глядачеві.

Розглянемо кілька прикладів. Коли з'являється новий фільм. про який ще ніхто не висловив свою думку, його параметри alpha і beta дорівнюватимуть одиниці, а графік щільності буде еквівалентний графіком рівномірного розподілу:

Yet another rating system

Виявилося, що інформацію про фільм завантажив сам Режисер. Сам завантажив, і сам же проголосував. Природно, позитивно. Та ще й п'ятьох своїх помічників попросив допомогти. Підсумок: alpha = 1 + 1 + 5 = 7, beta = 1.

Yet another rating system

Колишня дружина режисера побачила сторінку фільму і вирішила зіпсувати рейтинг, разом з коханцем проголосувавши негативно. Підсумок: alpha = 7, beta = 1 + 2 = 3:

Yet another rating system

Після 8 голосів середня оцінка, з урахуванням лапласовского згладжування, буде дорівнює alpha / (alpha + beta) = 7/10 = 0.7. Однак з графіка видно, що дисперсія отриманого розподілу все ще висока, а значить наша впевненість в такій оцінці - низька.

Припустимо, що протягом першого тижня прокату за фільм проголосувало ще 90 осіб, причому так, що параметр alpha в результаті виявився дорівнює 70, а beta - 30. Середня оцінка буде, як і раніше, дорівнює 70/100 = 0.7, проте графік значно зміниться:

Yet another rating system

Дисперсія на другому графіку набагато менше. Тобто при збільшенні кількості голосів наша уверененность в оцінці якості фільму також збільшується.

Все це добре, але користувач не хоче бачити якісь дивні графіки. Йому потрібен рейтинг - цифра, за якою він зможе визначити, чи варто дивитися фільм або краще піти почитати книгу. В принципі, маючи параметри бета-розподілу можна порахувати середню оцінку і дисперсію, і якимось чином намагатися їх комбінувати (наприклад, ділити середню оцінку на логарифм дисперсії). Але можна піти і більш статистично правильним шляхом.

Щоб розмова була більш предметною, візьмемо для прикладу 2 фільми: один з попереднього розділу з розподілом B (70, 30) і інший, більш популярний. з розподілом B (650, 350). Графіки розподілів зображені на малюнку нижче:

Yet another rating system

З одного боку, середнє значення оцінок для першого фільму вище - 0.7 проти 0.65. Однак, другий фільм подивилося набагато більше людей, тому ще невідомо, якою була б оцінка першого фільму після такої ж кількості відгуків. Так як же їх порівняти?

Один з варіантів порівняння - це порахувати мінімальну довірче якість фільму, число, що показує мінімальну оцінку, яку може отримати фільм після нескінченної кількості відгуків. У статистиці не прийнято доводити все до абсолюту, тому в якості рівня довіри візьмемо не 100%, а стандартні 95%. Це означає, що ми хочемо бути на 95% впевнені, що фільм не гірше. ніж X. Графічно це означає, що 95% площі під графіком повинно знаходитися праворуч від X:

Yet another rating system

Практично всі статистичні бібліотеки для всіх реалізованих розподілів надають функцію ймовірності (cumulative probability function, CDF), яка приймає на вхід значення і повертає ймовірність, що випадкова величина виявиться менше цього значення. Тобто по суті функція CDF від деякого значення X повертає площа під графіком між нулем і X. Це відрізняється від того, що нам потрібно, в двох аспектах.

По-перше, нам потрібна площа з іншого боку - від X до 1. На щастя, як уже говорилося вище, бета-функція є симетричною відносно своїх параметрів, тому замість прямого бета-розподілу B (alpha, beta) ми можемо працювати зі зворотним - B (beta, alpha).

По-друге, нам потрібна функція, яка за заданою мірою впевненості (відсотку від всієї площі графіка) поверне шукане значення X. Найчастіше в мат. пакетах ця функція називається inverse CDF або якось так, але в SciPy використовується назва PPF (percent point function, в літературі також зустрічається під назвою quantile funtion).

Разом, щоб отримати значення мінімального довірчого якості фільму можна використовувати наступний код:

Після підрахунків вийшло, що з 95% ймовірністю перший фільм в кінцевому підсумку сподобається як мінімум 0.6227 від всіх глядачів, а ось другий - 0.6250 з них. Різниця всього в дві тисячні, але якщо використовувати ці оцінки в рейтингу, то другий фільм, навіть при меншій середньою оцінкою, виявиться вище в списку.

Ті ж розрахунки можна повторити і для фільмів, зазначених на самому початку посту: для фільму з пропорцією 80/20 мінімальне довірче якість дорівнюватиме 0.731, а для фільму з пропорцією 9/1 - 0.717, тобто кількість голосів знову переважує середню оцінку. Однак варто додати другого фільму за все один голос «за», і наш коефіцієнт для нього стає дорівнює 0.741, виводячи його на перше місце.

Варіації, достоїнства і недоліки

Всі коефіцієнти, зазначені тут, взяті, за великим рахунком, на око. Хоча, здається, вони і дають досить розсудливий результат, в реальному додатку є сенс спробувати для них різні значення. Наприклад, при великій кількості користувачів, які голосують за фільми, має сенс збільшувати відповідних установок на 1, а, наприклад, на 0.5 для кожного голосу. Або навіть вводити коефіцієнт загасання, коли кожен наступний голос має меншу вагу, ніж попередній - таким чином можна домогтися уповільнення зростання коефіцієнтів.

Крім того, можна поліпшити і початкову оцінку щодо фільму. У даній статті я виходив з того, що спочатку ми нічого не знаємо ні про сам фільм, ні про інших фільмах у нас в системі, тому на початку фільму присвоюється рівномірний розподіл (alpha = 1, beta = 1). Однак на практиці ми, як правило, щось вже знаємо про фільм заздалегідь і можемо використовувати цю інформацію в якості апріорної оцінки. Наприклад, ми можемо порахувати середню оцінку для попередніх фільмів цього режисера і форматувати параметри бета-розподілу відповідним чином. Навіть якщо ми нічого не знаємо про режисера (продюсе, сценариста, акторському складі), ми можемо використовувати середню оцінку по всіх фільмів в нашій базі даних.

В принципі, метод можна розширити і для більш градіровать оцінок, наприклад, для шкали від 0 до 10. У цьому випадку оцінки вище 5 будуть додаватися до параметру alpha, нижче 5 - до beta, а при оцінці рівно 5 - і alpha, і beta збільшуються на 0.5 (привіт Хабр!).

Нарешті, можна варіювати необхідний ступінь впевненості у відповіді або навіть міняти підхід, використовуючи замість мінімального довірчого якості площа під графіком всередині деякого фіксованого інтервалу.

Графік Beta-розподілу для цієї статті

Yet another rating system