Что такое коэффициент корреляции Пирсона и как его использовать

Коэффициент корреляции Пирсона... Страшно звучит, но на самом деле это всего лишь статистическая взаимосвязь двух переменных. Формулу расчёта можно посмотреть в Википедии. Расчёт коэфициента Пирсона можно использовать в системах рекомендаций и определения схожих предпочтений. Попробую объяснить человеческим языком.
Предположим мы являемся владельцами ресурса, который за деньги (или за просмотр рекламы) предоставляет возможность смотреть свежие фильмы  онлайн и в хорошем качестве. Мы конечно заинтересованы в том, что бы каждый наш посетитель приходил снова и снова и для этого нам необходимо максимально точно, в соответствии с его вкусами, рекомендовать каждому пользователю те фильмы которые ему гарантированно понравяться. Одна из фишек нашего ресурса - это то, что каждый пользователь отмечает просмотренный фильм по десятибальной шкале а мы в свою очередь рекомендуем профили других пользователей, которые так же смотрели те же фильмы что и вы, и не только смотрели но и поставили этим фильмам те же или близкие к вашим оценки. У этих пользователей по расчётам системы близкие к вашим вкусы, но они смотрели и другие фильмы, которые вы ещё не видели но которые вам скорей всего понравяться. Ведь всегда больше вероятность, что если у человека схожий с вашим вкус то и другие фильмы которые ему понравились понравяться и вам.
Одна из возможностей расчитать того человека, у которого вкус максимально приближён к вашему это определение коэффициента корреляции Пирсона.
Предположим, есть два пользователя - Таня и Олег. Оба они посмотрели пять фильмов (Трансформеры, Титаник, Лютый, Призрак дома на холме и Ликвидация) и каждому поставили свою оценку по десятибальной шкале.
Наша цель - определить насколько схожи вкусы этих пользователей используя для этого расчёт коэфициента Пирсона.
Ниже представлен простейший код на PHP. Оценки Тани представленны массивом $kritik1 а Олег у нас соответственно это $kritik2.

 
$kritik1 = array(
"0" => "9",
"1" => "9",
"2" => "10",
"3" => "8",
"4" => "9");

$kritik2 = array(
"0" => "9",
"1" => "5",
"2" => "8",
"3" => "6",
"4" => "2");
$kol = 5;

$result = pirson($kritik1,$kritik2,$kol);
echo $result;

//Функция вычисления коореляции Пирсона
function pirson($kritik1,$kritik2,$kol){
//Вычисляем сумму всех оценок фильмам для каждого критика
$length = count($kritik1);
for($i = 0; $i<$length; $i++){
$sum1+=$kritik1[$i];
$sum2+=$kritik2[$i];
//Вычисляем сумму, полученную возведением в квадрат каждой оценки
$pow1+=pow($kritik1[$i],2);
$pow2+=pow($kritik2[$i],2);
//Вычисляем сумму произведений
$psum+=$kritik1[$i]*$kritik2[$i];
}
//Приступаем к вычислению коофициента
$num = $psum-($sum1*$sum2/$kol);
$itog = sqrt(($pow1-pow($sum1,2)/$kol)*($pow2-pow($sum2,2)/$kol));
$res = $num/$itog;
return $res;
}
?>



Результат будет от 1 до -1.  Положительная единица означает, что вкусы пользователей абсолютно идентичны, а отрицательная единица означает полное несовпадение вкусов. В нашем случае коэффициент Тани и Олега равен 0.2. Нельзя сказать, что у них схожие вкусы, но ведь на сервисе есть и другие киноманы у которых коэффициент будет выше и фильмотеку которого мы сможем порекомендовать.
Так же расчёт коэффициента Пирсона используется на сайтах знакомств для определения наиболее подходящего партнёра именно для вас.

P.S. Вдохновением для написания этой статьи послужила книга Тоби Сегарана "Программируем
коллективный разум".

Комментарии

Популярные сообщения из этого блога

Простой скрипт проверки доступности хоста

Генератор русских имён и фамилий на Python

Букмарклет для скачивания видео с SaveFrom