Creați-vă propriul sistem de recomandare de filme folosind Python

Publicat: 2021-03-09

Te întrebi cum sugerează Netflix filme care îți aliniază atât de mult interesele? Sau poate doriți să construiți un sistem care poate face astfel de sugestii și utilizatorilor săi?

Dacă răspunsul dvs. a fost da, atunci ați ajuns la locul potrivit, deoarece acest articol vă va învăța cum să construiți un sistem de recomandare de filme folosind Python.

Cu toate acestea, înainte de a începe să discutăm despre „Cum”, trebuie să fim familiarizați cu „Ce”.

Cuprins

Sistem de recomandare: ce este?

Sistemele de recomandare au devenit o parte integrantă a vieții noastre de zi cu zi. De la retaileri online precum Amazon și Flipkart până la platforme de social media precum YouTube și Facebook, fiecare companie digitală importantă folosește sisteme de recomandare pentru a oferi clienților o experiență personalizată de utilizator.

Câteva exemple de sisteme de recomandare în viața de zi cu zi includ:

  • Sugestiile pe care le primiți de la Amazon atunci când cumpărați produse sunt rezultatul unui sistem de recomandare.
  • YouTube folosește un sistem de recomandare pentru a sugera videoclipuri potrivite pentru gustul dvs.
  • Netflix are un sistem faimos de recomandare pentru a sugera emisiuni și filme în funcție de interesele tale.

Un sistem de recomandare sugerează utilizatorilor produse folosind date. Aceste date ar putea fi despre interesele introduse de utilizator, istoricul etc. Dacă studiați învățarea automată și AI, atunci este o necesitate să studiați sistemele de recomandare, deoarece acestea devin din ce în ce mai populare și avansate.

Tipuri de sisteme de recomandare

Există două tipuri de sisteme de recomandare:

1. Sisteme colaborative de recomandare

Un sistem de recomandare colaborativ sugerează articole în funcție de asemănarea utilizatorilor similari pentru acel articol. Grupează utilizatorii cu interese și gusturi similare și sugerează produsele lor în consecință.

De exemplu, să presupunem că tu și un alt utilizator ți-a plăcut Sholay. Acum, după ce l-a urmărit pe Sholay și i-a plăcut, celuilalt utilizator i-a plăcut Golmaal. Deoarece dumneavoastră și celălalt utilizator aveți interese similare, sistemul de recomandare v-ar sugera să urmăriți Golmaal pe baza acestor date. Aceasta este filtrarea colaborativă.

2. Sisteme de recomandare bazate pe conținut

Un sistem de recomandare bazat pe conținut sugerează articole pe baza datelor pe care le primește de la un utilizator. Se poate baza pe date explicite („Like”, „Partajări” etc.) sau date implicite (istoricul vizionărilor). Sistemul de recomandare ar folosi aceste date pentru a crea un profil specific utilizatorului și ar sugera articole bazate pe acel profil.

Construirea unui sistem de bază de recomandare a filmelor

Acum că am acoperit elementele de bază ale sistemelor de recomandare, să începem construirea unui sistem de recomandare de filme.

Putem începe să construim un sistem de recomandare de filme bazat pe Python utilizând setul de date complet MovieLens . Acest set de date conține peste 26 de milioane de evaluări, 750.000 de aplicații de etichete care sunt aplicate la peste 45.000 de filme. Datele genomului etichetei prezente în acest set de date cu peste 12 milioane de scoruri de relevanță.

Utilizăm setul complet de date pentru a crea un sistem de bază de recomandare a filmelor. Cu toate acestea, sunteți liber să utilizați un set de date mai mic pentru acest proiect. Mai întâi, va trebui să importam toate bibliotecile necesare:

Un sistem de bază de recomandare a filmelor bazat pe Python ar sugera filme în funcție de popularitatea și genul filmului. Acest sistem funcționează pe baza noțiunii că filmele populare cu aclamații critice vor avea o probabilitate mare de a fi apreciate de publicul general. Rețineți că un astfel de sistem de recomandare de filme nu oferă sugestii personalizate.

Pentru a-l implementa, vom sorta filmele în funcție de popularitatea și evaluarea lor și vom introduce un argument de gen pentru a obține cele mai bune filme ale unui gen:

Intrare

md = pd. read_csv('../input/movies_metadata.csv')

md.head()

Ieșire

adult aparține_colecției buget genuri video id imdb_id titlul_original Prezentare generală venituri titlu
Fals („id’L 10194, „nume”: „Colecție Toy Story”) 30000000 [{'id': 16, 'name': 'Animvation'}… Fals 862 tt0114709 Povestea jucariilor Conduse de Woody, jucăriile lui Andy trăiesc fericite... 373554033 Povestea jucariilor
1 Fals NaN 65000000 {{'id': 12, 'name': 'Adventure'}... Fals 8844 tt0113497 Jumanji Când frații Judy și Peter... 262797249 Jumanji
2 Fals („id”: 119050, „nume”: „Bătrâni morocănos) 0 {{'id': 10749, 'name': 'Romance'}… Fals 15602 tt0113228 Bătrâni morocănos O nuntă de familie reaprinde vechiul... 0 Bătrâni mai morocănos
3 Fals NaN 16000000 {{'id': 35, 'name': 'Comedia'}... Fals 31357 tt0114885 Așteptând să expire Înșelat, maltratat și călcat... 81452156 Așteptând să expire

Intrare

md['genuri'] = md['genuri'].fillna('[]').aplicare(eval_literal).aplicare(lambda x: [i['nume'] pentru i în x] if isinstance(x, listă) ) altfel [])

Formula pentru diagrama noastră

Pentru a crea topul nostru de filme de top, am folosit evaluările TMDB. Vom folosi formula de evaluare ponderată a IMDB pentru a crea graficul nostru, care este după cum urmează:

Evaluare ponderată (WR) = (iaouaouaouaouaou)

Aici, v reprezintă numărul de voturi pe care le-a primit un film, m este numărul minim de voturi pe care trebuie să le obțină un film în top, R reprezintă evaluarea medie a filmului și C este votul mediu pentru întregul raport. .

Construirea graficelor

Acum că avem setul de date și formula la locul lor, putem începe să construim diagrama. Vom adăuga doar acele filme în topurile noastre care au minimum 95% voturi. Vom începe cu crearea unui top 250.

Intrare

vot_counts = md[md['vote_count'].notnull()]['vote_count'].astype('int')

vote_average = md[md['vote_average'].notnull()]['vote_average'].astype('int')

C = vote_averages.mean()

C

Ieșire

5.244896612406511

Intrare

m = vot_counts.quantile(0,95)

m

Ieșire

434,0

Intrare

md['an'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan else np.nan)

Intrare

calificat = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['titlu', 'an ', 'vote_count', 'vote_average', 'popularity', 'genres']]

qualified['vote_count'] = calificat['vote_count'].astype('int')

qualified['vote_average'] = calificat['vote_average'].astype('int')

calificat.forma

Ieșire

(2274, 6)

După cum puteți vedea, pentru a obține un loc în topul nostru, un film trebuie să aibă minimum 434 de voturi. Poate ați observat că ratingul mediu pe care trebuie să îl aibă un film pentru a intra în topul nostru este 5,24.

Intrare

def rating_ponderat(x):

v = x['vote_count']

R = x['vote_average']

întoarcere (v/(v+m) * R) + (m/(m+v) * C)

Intrare

qualified['wr'] = qualified.apply (evaluare_ponderată, axa=1)

Intrare

calificat = qualified.sort_values('wr', ascending=False).head(250)

Cu toate acestea la locul lor, să construim diagrama:

Cele mai bune filme în general

Intrare

calificat.head(15)

Ieșire

titlu an vot_count vot_media popularitate genuri wr
15480 Inceput 2010 14075 8 29.1081 [Acțiune, Thriller, Science Fiction, Mister, A... 7,917588
12481 Cavalerul intunecat 2008 12269 8 123.167 [Dramă, Acțiune, Crimă, Thriller] 7,905871
22879 Interstelar 2014 11187 8 32,2135 [Aventură, Dramă, Science Fiction] 7,897107
2843 Club de lupte 1999 9678 8 63,8696 [Dramă] 7,881753
4863 Stăpânul Inelelor: Frăția Inelului 2001 8892 8 32.0707 [Aventură, Fantezie, Acțiune] 7,871787
292 Pulp Fiction 1994 8670 8 140,95 [Thriller, Crimă] 7,868660
314 Răscumpărarea Shawshank 1994 8358 8 51,6454 [Dramă, Crimă] 7,864000
7000 Stăpânul Inelelor: Întoarcerea Regelui 2003 8226 8 29,3244 [Aventură, Fantezie, Acțiune] 7,861927
351 Forrest Gump 1994 8147 8 48,3072 [Comedie, Dramă, Romantică] 7,860656
5814 Stăpânul inelelor: Cele două turnuri 2002 7641 8 29,4235 [Aventură, Fantezie, Acțiune] 7,851924
256 Razboiul Stelelor 1977 6778 8 42,1497 [Aventură, Acțiune, Science Fiction] 7,834205
1225 Inapoi in viitor 1985 6239 8 25,7785 [Aventură, Comedie, Science Fiction, Familie] 7,820813
834 Nasul 1972 6024 8 41,1093 [Dramă, Crimă] 7,814847
1154 Imperiul loveste inapoi 1980 5998 8 19.471 [Aventură, Acțiune, Science Fiction] 7,814099
46 Se7en 1995 5915 8 18,4574 [Crimă, mister, thriller]

Voila, ați creat un sistem de bază de recomandare de filme bazat pe Python!

Acum vom restrânge sugestiile sistemului nostru de recomandare la bazate pe gen, astfel încât să poată fi mai precis. La urma urmei, nu este necesar ca tuturor să placă Nașul în mod egal.

Restrângerea genului

Deci, acum vom modifica sistemul nostru de recomandare pentru a fi mai specific pentru gen:

Intrare

s = md.apply(lambda x: pd.Series(x['genuri']),axis=1).stack().reset_index(level=1, drop=True)

s.name = 'gen'

gen_md = md.drop('genuri', axa=1).join(e)

Intrare

def build_chart(gen, percentile=0,85):

df = gen_md[gen_md['gen'] == gen]

vot_counts = df[df['vote_count'].notnull()]['vote_count'].astype('int')

vote_average = df[df['vote_average'].notnull()]['vote_average'].astype('int')

C = vote_averages.mean()

m = vot_counts.quantile(percentila)

calificat = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['titlu', 'an ', 'vote_count', 'vote_average', 'popularity']]

qualified['vote_count'] = calificat['vote_count'].astype('int')

qualified['vote_average'] = calificat['vote_average'].astype('int')

qualified['wr'] = qualified.apply(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vot_count']) * C), axa=1)

calificat = qualified.sort_values('wr', ascending=False).head(250)

reveni calificat

Am creat acum un sistem de recomandare care sortează filmele din genul romantic și le recomandă pe cele de top. Am ales genul romantic pentru că nu a apărut prea mult în topul nostru anterior.

Top filme în romantism

Intrare

build_chart('Romance').head(15)

Ieșire

titlu an vot_count vot_media popularitate wr
10309 Dilwale Dulhania Le Jayenge 1995 661 9 34.457 8,565285
351 Forrest Gump 1994 8147 8 48,3072 7,971357
876 Vertij 1958 1162 8 18.2082 7,811667
40251 Numele dumneavoastră. 2016 1030 8 34,461252 7,789489
883 Unora le place fierbinte 1959 835 8 11,8451 7,745154
1132 Cinema Paradiso 1988 834 8 14.177 7,744878
19901 Paperman 2012 734 8 7.19863 7,713951
37863 Strada Sing 2016 669 8 10,672862 7,689483
882 Apartamentul 1960 498 8 11,9943 7,599317
38718 Slujitoarea 2016 453 8 16,727405 7,566166
3189 Luminile orașului 1931 444 8 10,8915 7,558867
24886 Felul în care arată 2014 262 8 5,71127 7,331363
45437 Într-o clipă 2017 146 8 20,82178 7,003959
1639 Titanic 1997 7770 7 26,8891 6,981546
19731 Silver Linings Playbook 2012 4840 7 14,4881 6,970581

Acum, ai un sistem de recomandare de filme care sugerează filme de top în funcție de genul ales. Vă recomandăm să testați acest sistem de recomandare și cu alte genuri, cum ar fi Acțiune, Dramă, Suspans etc. Distribuiți primele trei filme din genul dvs. preferat, sugerat de sistemul de recomandare în secțiunea de comentarii de mai jos.

Aflați mai multe despre un sistem de recomandare de filme

După cum trebuie să fi observat până acum, construirea unui sistem de recomandare de filme bazat pe Python este destul de simplă. Tot ce aveți nevoie este puțină cunoaștere a științei datelor și puțin efort pentru a crea un sistem de recomandare complet funcțional.

Cu toate acestea, ce se întâmplă dacă doriți să construiți sisteme de recomandare mai avansate? Ce se întâmplă dacă doriți să creați un sistem de recomandare pe care o mare corporație ar putea lua în considerare?

Dacă sunteți interesat să aflați mai multe despre sistemele de recomandare și știința datelor, atunci vă recomandăm să urmați un curs de știință a datelor. Cu un curs, veți învăța toate conceptele fundamentale și avansate ale științei datelor și ale învățării automate. În plus, veți studia de la experți din industrie care vă vor ghida pe tot parcursul cursului pentru a vă ajuta să evitați îndoielile și confuziile.

La upGrad, oferim mai multe cursuri de știință a datelor și de învățare automată. Puteți alege pe oricine dintre următoarele, în funcție de interesele dvs.:

  • Diploma PG în Data Science
  • Master în Știința Datelor
  • Certificare PG în știința datelor
  • Diploma PG în Machine Learning și AI
  • Master în învățare automată și IA

Pe lângă aceste cursuri, oferim multe alte cursuri în știința datelor și învățarea automată. Asigurați-vă că le verificați!

Gânduri finale

Acum știi cum să construiești un sistem de recomandare de filme. După ce ați creat sistemul, asigurați-vă că îl partajați altora și arătați-le progresul dvs. Sistemele de recomandare au o gamă diversă de aplicații, așa că învățarea despre ele vă va oferi cu siguranță un avantaj în industrie.

Ce este filtrarea colaborativă și care sunt tipurile sale?

Filtrarea colaborativă este un tip de sistem de recomandare care abordează construirea unui model bazat pe preferințele utilizatorului. Istoricul utilizatorilor acționează ca un set de date pentru filtrarea colaborativă. Filtrarea colaborativă este de 2 tipuri, care sunt menționate mai jos:

1. Filtrarea colaborativă bazată pe utilizatori: Ideea din spatele acestui tip de filtrare colaborativă este că luăm un utilizator ca preferință, să spunem „A” și găsim alți utilizatori care au preferințe similare și apoi furnizăm „A” acele preferințe ale acestor utilizatori pe care le nu a întâlnit încă.
Filtrare colaborativă bazată pe articole: aici, în loc să găsim utilizatori cu preferințe similare, găsim filme similare cu gustul lui „A” și recomandăm acele filme pe care nu le-a vizionat încă.

Care sunt avantajele și dezavantajele filtrării bazate pe conținut?

Filtrarea bazată pe conținut colectează datele de la utilizator și sugerează elementele în consecință. Unele dintre avantajele, precum și dezavantajele sale, sunt menționate mai jos:
Avantaje
1. Spre deosebire de filtrarea colaborativă, modelul nu trebuie să colecteze date despre alți utilizatori cu preferințe similare, deoarece preia sugestiile de la utilizatorul principal însuși.
2. Modelul îți poate recomanda unele dintre cele mai bune filme în funcție de preferințele tale pe care doar câțiva le-au vizionat.
Dezavantaje
1. Această tehnică necesită o mulțime de informații despre un anumit domeniu, astfel încât calitatea caracteristicilor pe care le oferă este mai mult sau mai puțin aceeași cu caracteristicile proiectate manual.
2. Capacitatea sa de a recomanda filme este limitată, deoarece funcționează numai în funcție de interesele existente ale utilizatorilor.

Ce aplicații populare folosesc algoritmi de filtrare colaborativă?

Algoritmul de filtrare colaborativă devine algoritmul de conducere principal pentru multe aplicații populare. Din ce în ce mai multe companii se concentrează pe furnizarea de conținut bogat personalizat. De exemplu, probabil ați văzut acest mesaj pe multe site-uri de comerț electronic Clienții care cumpără acest lucru au cumpărat și ei.
Următoarele sunt câteva dintre aplicațiile care au o bază de utilizatori populară în întreaga lume:
1. YouTube folosește acest algoritm împreună cu alți algoritmi puternici pentru a oferi recomandări video pe pagina de pornire.
2. Site-urile web de comerț electronic precum Amazon, Flipkart și Myntra folosesc, de asemenea, acest algoritm pentru a oferi recomandări de produse.
3. Platformele de streaming video sunt cel mai mare exemplu aici, care utilizează evaluarea utilizatorilor, evaluarea medie și conținutul asociat pentru a oferi sugestii personalizate.