Crea il tuo sistema di consigli sui film usando Python

Pubblicato: 2021-03-09

Ti chiedi come Netflix suggerisca film che allineano così tanto i tuoi interessi? O forse vuoi costruire un sistema che possa dare tali suggerimenti anche ai suoi utenti?

Se la tua risposta è sì, allora sei nel posto giusto poiché questo articolo ti insegnerà come creare un sistema di consigli per i film usando Python.

Tuttavia, prima di iniziare a discutere del "Come", dobbiamo avere familiarità con il "Cosa".

Sommario

Sistema di raccomandazione: che cos'è?

I sistemi di raccomandazione sono diventati una parte integrante della nostra vita quotidiana. Dai rivenditori online come Amazon e Flipkart alle piattaforme di social media come YouTube e Facebook, ogni grande azienda digitale utilizza sistemi di raccomandazione per fornire un'esperienza utente personalizzata ai propri clienti.

Alcuni esempi di sistemi di raccomandazione nella tua vita quotidiana includono:

  • I suggerimenti che ricevi da Amazon quando acquisti prodotti sono il risultato di un sistema di raccomandazione.
  • YouTube utilizza un sistema di suggerimenti per suggerire video adatti ai tuoi gusti.
  • Netflix ha un famoso sistema di consigli per suggerire programmi e film in base ai tuoi interessi.

Un sistema di suggerimenti suggerisce agli utenti i prodotti utilizzando i dati. Questi dati potrebbero riguardare gli interessi inseriti dall'utente, la cronologia, ecc. Se stai studiando l'apprendimento automatico e l'intelligenza artificiale, è necessario studiare i sistemi di raccomandazione poiché stanno diventando sempre più popolari e avanzati.

Tipi di sistemi di raccomandazione

Esistono due tipi di sistemi di raccomandazione:

1. Sistemi di Raccomandazione Collaborativa

Un sistema di raccomandazione collaborativo suggerisce gli articoli in base alla somiglianza di utenti simili per quell'articolo. Raggruppa utenti con interessi e gusti simili e suggerisce i loro prodotti di conseguenza.

Ad esempio, supponiamo che tu e un altro utente siate piaciuti a Sholay. Ora, dopo aver visto Sholay e aver apprezzato, l'altro utente ha apprezzato Golmaal. Poiché tu e l'altro utente avete interessi simili, il sistema di raccomandazione suggerirebbe di guardare Golmaal in base a questi dati. Questo è il filtraggio collaborativo.

2. Sistemi di raccomandazione basati sul contenuto

Un sistema di suggerimenti basato sul contenuto suggerisce elementi in base ai dati che riceve da un utente. Potrebbe essere basato su dati espliciti ("Mi piace", "Azioni", ecc.) o dati impliciti (cronologia di visualizzazione). Il sistema di raccomandazione utilizzerà questi dati per creare un profilo specifico dell'utente e suggerirebbe elementi basati su tale profilo.

Costruire un sistema di consigli per i film di base

Ora che abbiamo trattato le nozioni di base sui sistemi di raccomandazione, iniziamo a creare un sistema di raccomandazione di film.

Possiamo iniziare a creare un sistema di raccomandazione per i film basato su Python utilizzando il set di dati MovieLens completo . Questo set di dati contiene oltre 26 milioni di classificazioni, 750.000 applicazioni di tag applicate a oltre 45.000 film. I dati del genoma dei tag presenti in questo set di dati con oltre 12 milioni di punteggi di pertinenza.

Stiamo utilizzando l'intero set di dati per creare un sistema di consigli per i film di base. Tuttavia, sei libero di utilizzare un set di dati più piccolo per questo progetto. Innanzitutto, dovremo importare tutte le librerie richieste:

Un sistema di raccomandazione di film di base basato su Python suggerirebbe i film in base alla popolarità e al genere del film. Questo sistema funziona sulla base dell'idea che i film popolari con acclamazione critica avranno un'alta probabilità di essere apprezzati dal pubblico generale. Tieni presente che un tale sistema di consigli sui film non fornisce suggerimenti personalizzati.

Per implementarlo, classificheremo i film in base alla loro popolarità e valutazione e passeremo un argomento di genere per ottenere i migliori film di un genere:

Ingresso

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

md.head()

Produzione

adulto appartiene_alla_raccolta bilancio generi video ID imdb_id titolo_originale panoramica reddito titolo
Falso ('id'L 10194, 'name': 'Toy Story Collection') 30000000 [{'id': 16, 'name': 'Animazione'}... Falso 862 tt0114709 Toy Story Guidati da Woody, i giocattoli di Andy vivono felici... 373554033 Toy Story
1 Falso Na N 65000000 {{'id': 12, 'name': 'Adventure'}... Falso 8844 tt0113497 Jumanji Quando i fratelli Judy e Peter... 262797249 Jumanji
2 Falso ('id': 119050, 'name': 'Grumpy Old Men) 0 {{'id': 10749, 'name': 'Romance'}... Falso 15602 tt0113228 Vecchi scontrosi Un matrimonio in famiglia riaccende l'antico... 0 Vecchi più scontrosi
3 Falso Na N 16000000 {{'id': 35, 'name': 'Commedia'}... Falso 31357 tt0114885 In attesa di espirare Tradito, maltrattato e calpestato... 81452156 In attesa di espirare

Ingresso

md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) altro [])

La formula per il nostro grafico

Per creare la nostra classifica dei film migliori, abbiamo utilizzato le valutazioni TMDB. Utilizzeremo la formula di valutazione ponderata di IMDB per creare il nostro grafico, che è il seguente:

Valutazione ponderata (WR) = (iaouaouaouaouaou)

Qui, v sta per il numero di voti che un film ha ottenuto, m è il numero minimo di voti che un film dovrebbe avere per entrare nella classifica, R sta per la valutazione media del film e C è il voto medio per l'intero rapporto .

Costruire le classifiche

Ora che abbiamo impostato il set di dati e la formula, possiamo iniziare a costruire il grafico. Aggiungeremo alle nostre classifiche solo i film che hanno un minimo del 95% di voti. Inizieremo con la creazione di un grafico dei primi 250.

Ingresso

conte_voti = md[md['conte_voto'].notnull()]['conte_voto'].astype('int')

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

C = voto_media.mean()

C

Produzione

5.244896612406511

Ingresso

m = conteggi_voti.quantile(0,95)

m

Produzione

434.0

Ingresso

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

Ingresso

qualificato = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'conteggio_voti', 'media_voti', 'popolarità', 'generi']]

qualificato['vote_count'] = qualificato['vote_count'].astype('int')

qualificato['vote_average'] = qualificato['vote_average'].astype('int')

forma.qualificata

Produzione

(2274, 6)

Come puoi vedere, per ottenere un posto nella nostra classifica un film deve avere un minimo di 434 voti. Potresti aver notato che la valutazione media che un film deve avere per entrare nel nostro grafico è 5,24.

Ingresso

def valutazione_pesata(x):

v = x['vote_count']

R = x['voto_media']

ritorno (v/(v+m) * R) + (m/(m+v) * C)

Ingresso

qualificato['wr'] = qualificato.apply(valutazione_pesata, asse=1)

Ingresso

qualificato = qualificato.sort_values('wr', ascendente=Falso).head(250)

Con tutto questo in atto, costruiamo il grafico:

I migliori film in assoluto

Ingresso

testa.qualificata(15)

Produzione

titolo anno conteggio_voto voto_media popolarità generi wr
15480 Inizio 2010 14075 8 29.1081 [Azione, Thriller, Fantascienza, Mistero, A... 7.917588
12481 Il Cavaliere Oscuro 2008 12269 8 123.167 [Drammatico, Azione, Crimine, Thriller] 7.905871
22879 Interstellare 2014 11187 8 32.2135 [Avventura, Drammatico, Fantascienza] 7.897107
2843 Club di Lotta 1999 9678 8 63.8696 [Dramma] 7.881753
4863 Il Signore degli Anelli: La Compagnia dell'Anello 2001 8892 8 32.0707 [Avventura, Fantasia, Azione] 7.871787
292 Pulp Fiction 1994 8670 8 140.95 [Thriller, crimine] 7.868660
314 La redenzione di Shawshank 1994 8358 8 51.6454 [Drammatico, crimine] 7.864000
7000 Il Signore degli Anelli: Il ritorno del re 2003 8226 8 29.3244 [Avventura, Fantasia, Azione] 7.861927
351 Forrest Gump 1994 8147 8 48.3072 [Commedia, Drammatico, Romantico] 7.860656
5814 Il Signore degli Anelli: Le Due Torri 2002 7641 8 29.4235 [Avventura, Fantasia, Azione] 7.851924
256 Guerre stellari 1977 6778 8 42.1497 [Avventura, Azione, Fantascienza] 7.834205
1225 Ritorno al futuro 1985 6239 8 25.7785 [Avventura, Commedia, Fantascienza, Famiglia] 7.820813
834 Il Padrino 1972 6024 8 41.1093 [Drammatico, crimine] 7.814847
1154 L'impero colpisce ancora 1980 5998 8 19.471 [Avventura, Azione, Fantascienza] 7.814099
46 Se7en 1995 5915 8 18.4574 [Crimine, Mistero, Thriller]

Voilà, hai creato un sistema di raccomandazione di film di base basato su Python!

Ora restringeremo i suggerimenti del nostro sistema di suggerimenti a quelli basati sul genere in modo che possano essere più precisi. Dopotutto, non è necessario che a tutti piaccia allo stesso modo Il Padrino.

Restringere il genere

Quindi, ora modificheremo il nostro sistema di suggerimenti per renderlo più specifico per genere:

Ingresso

s = md.apply(lambda x: pd.Series(x['generi']),asse=1).stack().reset_index(livello=1, drop=True)

s.name = 'genere'

gen_md = md.drop('generi', asse=1).join(s)

Ingresso

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

df = gen_md[gen_md['genere'] == genere]

conte_voti = df[df['conte_voto'].notnull()]['conte_voto'].astype('int')

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

C = voto_media.mean()

m = conteggi_voti.quantile(percentile)

qualificato = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'conteggio_voti', 'media_voto', 'popolarità']]

qualificato['vote_count'] = qualificato['vote_count'].astype('int')

qualificato['vote_average'] = qualificato['vote_average'].astype('int')

qualificato['wr'] = qualificato.apply(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' conteggio_voti']) * C), asse=1)

qualificato = qualificato.sort_values('wr', ascendente=Falso).head(250)

ritorno qualificato

Ora abbiamo creato un sistema di raccomandazione che ordina i film del genere romantico e consiglia i migliori. Abbiamo scelto il genere romance perché non si vedeva molto nella nostra classifica precedente.

I migliori film romantici

Ingresso

build_chart('Romance').head(15)

Produzione

titolo anno conteggio_voto voto_media popolarità wr
10309 Dilwale Dulhania Le Jayenge 1995 661 9 34.457 8.565285
351 Forrest Gump 1994 8147 8 48.3072 7.971357
876 Vertigine 1958 1162 8 18.2082 7.811667
40251 Il tuo nome. 2016 1030 8 34.461252 7.789489
883 A qualcuno piace caldo 1959 835 8 11.8451 7.745154
1132 Cinema Paradiso 1988 834 8 14.177 7.744878
19901 Cartaio 2012 734 8 7.19863 7.713951
37863 Canta via 2016 669 8 10.672862 7.689483
882 L'appartamento 1960 498 8 11.9943 7.599317
38718 L'ancella 2016 453 8 16.727405 7.566166
3189 Luci della città 1931 444 8 10.8915 7.558867
24886 Il modo in cui appare 2014 262 8 5.71127 7.331363
45437 In un batter d'occhio 2017 146 8 20.82178 7.003959
1639 Titanico 1997 7770 7 26.8891 6.981546
19731 Playbook Silver Linings 2012 4840 7 14.4881 6.970581

Ora hai un sistema di suggerimenti per i film che suggerisce i migliori film in base al genere scelto. Ti consigliamo di testare questo sistema di consigli anche con altri generi come Azione, Drammatico, Suspense, ecc. Condividi i primi tre film del tuo genere preferito che il sistema di consigli suggerisce nella sezione commenti qui sotto

Ulteriori informazioni su un sistema di suggerimenti per i film

Come avrai già notato, costruire un sistema di raccomandazione di film basato su Python è abbastanza semplice. Tutto ciò di cui hai bisogno è una piccola conoscenza della scienza dei dati e un piccolo sforzo per creare un sistema di raccomandazione completamente funzionante.

Tuttavia, cosa succede se si desidera creare sistemi di raccomandazione più avanzati? Cosa succede se si desidera creare un sistema di suggerimenti che una grande azienda potrebbe prendere in considerazione l'utilizzo?

Se sei interessato a saperne di più sui sistemi di raccomandazione e sulla scienza dei dati, ti consigliamo di seguire un corso di scienza dei dati. Con un corso imparerai tutti i concetti fondamentali e avanzati della scienza dei dati e dell'apprendimento automatico. Inoltre, studierai da esperti del settore che ti guideranno durante tutto il corso per aiutarti a evitare dubbi e confusione.

In upGrad offriamo più corsi di data science e machine learning. Puoi scegliere chiunque tra i seguenti a seconda dei tuoi interessi:

  • Diploma di PG in Data Science
  • Laurea Magistrale in Data Science
  • Certificazione PG in Data Science
  • Diploma PG in Machine Learning e AI
  • Laurea Magistrale in Machine Learning e AI

Oltre a questi corsi, offriamo molti altri corsi di data science e machine learning. Assicurati di controllarli!

Pensieri finali

Ora sai come creare un sistema di consigli sui film. Dopo aver creato il sistema, assicurati di condividerlo con gli altri e mostra loro i tuoi progressi. I sistemi di raccomandazione hanno una vasta gamma di applicazioni, quindi conoscerli ti darà sicuramente un vantaggio nel settore.

Che cos'è il filtro collaborativo e quali sono i suoi tipi?

Il filtraggio collaborativo è un tipo di sistema di raccomandazione che si avvicina alla creazione di un modello basato sulle preferenze dell'utente. La cronologia degli utenti funge da set di dati per il filtraggio collaborativo. Il filtro collaborativo è di 2 tipi menzionati di seguito:

1. Filtraggio collaborativo basato sull'utente: l'idea alla base di questo tipo di filtro collaborativo è che prendiamo un utente come preferenza, diciamo "A" e troviamo altri utenti con preferenze simili e quindi fornendo "A" quelle preferenze di questi utenti che non si è ancora incontrato.
Filtraggio collaborativo basato sugli elementi: qui invece di trovare utenti con preferenze simili, troviamo film simili al gusto di "A" e consigliamo quei film che non ha ancora visto.

Quali sono i vantaggi e gli svantaggi del filtraggio basato sui contenuti?

Il filtro basato sui contenuti raccoglie i dati dall'utente e suggerisce gli elementi di conseguenza. Alcuni dei suoi vantaggi, oltre agli svantaggi, sono menzionati di seguito:
Vantaggi
1. A differenza del filtraggio collaborativo, il modello non ha bisogno di raccogliere dati su altri utenti con preferenze simili poiché prende i suggerimenti dall'utente principale stesso.
2. Il modello può consigliarti alcuni dei migliori film in base alle tue preferenze che solo pochi altri hanno visto.
Svantaggi
1. Questa tecnica richiede molte informazioni su un determinato dominio, quindi la qualità delle funzionalità che fornisce è più o meno la stessa delle funzionalità progettate a mano.
2. La sua capacità di consigliare film è limitata poiché funziona solo in base agli interessi esistenti degli utenti.

Quali applicazioni popolari utilizzano algoritmi di filtraggio collaborativo?

L'algoritmo di filtraggio collaborativo sta diventando l'algoritmo di guida principale per molte applicazioni popolari. Sempre più aziende si stanno concentrando sulla fornitura di contenuti ricchi e personalizzati. Ad esempio, probabilmente hai visto questo messaggio su molti siti di e-commerce. Anche i clienti che lo acquistano hanno acquistato.
Di seguito sono elencate alcune delle applicazioni che hanno una base di utenti popolare in tutto il mondo:
1. YouTube utilizza questo algoritmo insieme ad altri potenti algoritmi per fornire consigli sui video nella home page.
2. Anche i siti Web di e-commerce come Amazon, Flipkart e Myntra utilizzano questo algoritmo per fornire consigli sui prodotti.
3. Le piattaforme di streaming video sono il più grande esempio qui che utilizzano la valutazione degli utenti, la valutazione media e i contenuti correlati per fornire suggerimenti personalizzati.