Creați-vă propriul sistem de recomandare de filme folosind Python
Publicat: 2021-03-09Te î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.
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: 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: 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.Ce este filtrarea colaborativă și care sunt tipurile sale?
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?
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ă?
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.