Crea il tuo sistema di consigli sui film usando Python
Pubblicato: 2021-03-09Ti 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.
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: 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: 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.Che cos'è il filtro collaborativo e quali sono i suoi tipi?
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?
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?
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.