Mineritul datelor (Big Data): Coeficientul de corelație Pearson
Să aruncăm o privire mai detaliată asupra evaluărilor utilizatorilor. Vedem că utilizatorii au comportamente foarte diferite atunci când vine vorba de evaluarea trupelor:
Angelica | Bill | Chan | Dan | Hailey | Jordyn | Sam | Veronica | |
Blues Traveler | 3.5 | 2 | 5 | 3 | – | – | 5 | 3 |
Broken Bells | 2 | 3.5 | 1 | 4 | 4 | 4.5 | 2 | – |
Deadmau5 | – | 4 | 1 | 4.5 | 1 | 4 | – | – |
Norah Jones | 4.5 | – | 3 | – | 4 | 5 | 3 | 5 |
Phoenix | 5 | 2 | 5 | 3 | – | 5 | 5 | 4 |
Slightly Stoopid | 1.5 | 3.5 | 1 | 4.5 | – | 4.5 | 4 | 2.5 |
The Strokes | 2.5 | – | – | 4 | 4 | 4 | 5 | 3 |
Vampire Weekend | 2 | 3 | – | 2 | 1 | 4 | – | – |
Lui Jordyn se pare că îi place totul. Evaluările ei variază de la 4 la 5.
Bill pare să evite extremele. Evaluările sale variază de la 2 la 4
Hailey este o persoană binară care dă fie 1, fie 4 trupelor.
Deci, cum putem compara, de exemplu, Hailey cu Jordan? „4” al lui Hailey înseamnă același lucru ca „4” al lui Jordyn sau „5” al lui Jordyn? Aș presupune că seamănă mai mult cu „5” al lui Jordyn. Această variabilitate poate crea probleme cu un sistem de recomandare.
Broken Bells sunt ok. Le-aș da un „4”.
Ador absolut Broken Bells! Sunt buni! Le dau un 4.
Coeficientul de corelație Pearson
O modalitate de a rezolva această problemă este utilizarea coeficientului de corelație Pearson. În primul rând, ideea generală. Luați în considerare următoarele date (nu din setul de date de mai sus):
BluesTraveler | NorahJones | Phoenix | TheStrokes | Weird Al | |
Clara | 4.75 | 4.5 | 5 | 4.25 | 4 |
Robert | 4 | 3 | 5 | 2 | 1 |
Acesta este un exemplu de ceea ce se numește „inflație de grad” în comunitatea de minerit a datelor. Cea mai mică evaluare a Clarei este 4 – toate ratingurile ei sunt cuprinse între 4 și 5. Dacă ar trebui să reprezentăm grafic acest grafic, ar arăta astfel
Linie dreaptă = Acord perfect !!!
Faptul că aceasta este o linie dreaptă indică un acord perfect între Clara și Robert. Ambii l-au clasat pe Phoenix ca fiind cea mai bună formație, Blues Traveler în continuare, Norah Jones după aceea și așa mai departe. Pe măsură ce Clara și Robert sunt de acord mai puțin, cu atât punctele de date se află mai puțin pe o linie dreaptă:
Acord destul de bun:
Acordul nu este atât de bun:
Deci, în grafic, acordul perfect este indicat printr-o linie dreaptă. Coeficientul de corelație Pearson este o măsură a corelației dintre două variabile (în acest caz specific corelația dintre Angelica și Bill). Acesta variază între -1 și 1 inclusiv. 1 indică un acord perfect. -1 indică un dezacord perfect. Pentru a vă oferi o impresie generală în acest sens, graficul de mai sus cu linia dreaptă are un Pearson de 1, graficul de mai sus pe care l-am etichetat „acord destul de bun” are un Pearson de 0,91, iar graficul „nu atât de bun” are un Pearson de 0,81 Deci putem folosi acest lucru pentru a găsi persoana care este cea mai asemănătoare cu persoana care ne interesează.
Formula pentru coeficientul de corelație Pearson este
Matematica
În afară de aspectul complex, problema cu formula de mai sus este că algoritmul pentru implementarea acestuia ar necesita mai multe treceri prin date. Din fericire pentru noi, oamenii algoritmici, există o formulă alternativă, care este o aproximare a lui Pearson:
Această formulă, pe lângă aspectul complex, este, mai important, instabilă din punct de vedere numeric, ceea ce înseamnă că ceea ce ar putea fi o mică eroare este amplificat de această reformulare. Marele plus este că o putem implementa folosind un algoritm cu o singură trecere. Să disecăm această formulă și să analizăm exemplul nostru:
BluesTraveler | NorahJones | Phoenix | The Strokes | Weird Al | |
Clara | 4.75 | 4.5 | 5 | 4.25 | 4 |
Robert | 4 | 3 | 5 | 2 | 1 |
Pentru început, să calculăm
Σi=1nxiyi
care este în prima expresie de la numărător. Aici x și y reprezintă Clara și Robert.
BluesTraveler | NorahJones | Phoenix | The Strokes | Weird Al | |
Clara | 4.75 | 4.5 | 5 | 4.25 | 4 |
Robert | 4 | 3 | 5 | 2 | 1 |
Pentru fiecare trupă vom merge împreună la mai multe ratinguri ale lui Clara și Robert și vom rezuma rezultatele:
(4.75 × 4)+ (4.5 × 3)+ (5 × 5)+ (4.25 × 2)+ (4 ×1) = 19 +13.5 + 25 + 8.5 + 4 = 70
Grozav! Acum să calculăm restul numărătorului:
(Σi=1nxi Σi=1nyi)/n
Astfel
Σi=1nxi
este suma evaluărilor Clarei, care este 22,5. Suma lui Robert este de 15 și ei au evaluat 5 trupe:
(22,5 ×15)/5 = 67,5
Deci, numărătorul din formulă este 70 – 67,5 = 2,5
Acum să disecăm numitorul.
√((Σi=1nxi2) – ((Σi=1nxi)2)/n))
În primul rând,
Am calculat deja suma evaluărilor Clarei, care este 22,5. Pătratul ei este 506,25. Împărțim asta la numărul de trupe cotate (5) și obținem 101,25.
Punem totul împreună:
√(101,875 −101,25) = 0,625 = 0,79057
Apoi facem același calcul pentru Robert:
√((Σi=1nxi2) – ((Σi=1nxi)2)/n)) = √(55 − 45) = 3,162277
Punând totul în valoare obținem:
r = 2,5 / 0,79057(3,162277) = 2.5 / 2.5 = 1.00
Așa că rezultă că a existat un acord perfect între Clara și Robert!
Exercițiu
Înainte de a merge mai departe, implementați algoritmul în Python. Ar trebui să obțineți următoarele rezultate.
>>> pearson(users['Angelica'], users['Bill'])
-0.90405349906826993
>>> pearson(users['Angelica'], users['Hailey'])
0.42008402520840293
>>> pearson(users['Angelica'], users['Jordyn'])
0.76397486054754316
>>>
Pentru această implementare veți avea nevoie de 2 funcții Python sqrt (rădăcină pătrată) și operatorul de putere ** care ridică argumentul său stâng la puterea argumentului său drept:
>>> from math import sqrt
>>> sqrt(9)
3.0
>>> 3**2
9
Soluție
Iată implementarea mea a coeficientului de corelație Pearson
def pearson(rating1, rating2):
sum_xy = 0
sum_x = 0
sum_y = 0
sum_x2 = 0
sum_y2 = 0
n = 0
for key in rating1:
if key in rating2:
n += 1
x = rating1[key]
y = rating2[key]
sum_xy += x * y
sum_x += x
sum_y += y
sum_x2 += x**2
sum_y2 += y**2
# if no ratings in common return 0
if n == 0:
return 0
# now compute denominator
denominator = sqrt(sum_x2 - (sum_x**2) / n) *
sqrt(sum_y2 - (sum_y**2) / n)
if denominator == 0:
return 0
else:
return (sum_xy - (sum_x * sum_y) / n) / denominator
Sursa: Ron Zacharski, A Programmer’s Guide to Data Mining – The Ancient Art of the Numerati. Licența CC BY-NC 3.0. Traducere și adaptare: Nicolae Sfetcu
Articol oferit sub licență CC BY-NC 3.0
Lasă un răspuns