Cree su propio sistema de recomendación de películas usando Python
Publicado: 2021-03-09¿Te preguntas cómo Netflix sugiere películas que se alinean tanto con tus intereses? ¿O tal vez desea crear un sistema que también pueda hacer tales sugerencias a sus usuarios?
Si su respuesta fue sí, entonces ha venido al lugar correcto ya que este artículo le enseñará cómo construir un sistema de recomendación de películas usando Python.
Sin embargo, antes de comenzar a discutir el 'Cómo', debemos estar familiarizados con el 'Qué'.
Tabla de contenido
Sistema de recomendación: ¿Qué es?
Los sistemas de recomendación se han convertido en una parte muy integral de nuestra vida diaria. Desde minoristas en línea como Amazon y Flipkart hasta plataformas de redes sociales como YouTube y Facebook, todas las principales empresas digitales utilizan sistemas de recomendación para brindar una experiencia de usuario personalizada a sus clientes.
Algunos ejemplos de sistemas de recomendación en su vida diaria incluyen:
- Las sugerencias que recibe de Amazon cuando compra productos son el resultado de un sistema de recomendación.
- YouTube utiliza un sistema de recomendación para sugerir videos adecuados para su gusto.
- Netflix tiene un famoso sistema de recomendación para sugerir programas y películas según tus intereses.
Un sistema de recomendación sugiere productos a los usuarios mediante el uso de datos. Estos datos pueden ser sobre los intereses ingresados por el usuario, el historial, etc. Si está estudiando el aprendizaje automático y la inteligencia artificial, entonces es imprescindible estudiar los sistemas de recomendación, ya que se están volviendo cada vez más populares y avanzados.
Tipos de sistemas de recomendación
Hay dos tipos de sistemas de recomendación:
1. Sistemas de recomendación colaborativa
Un sistema de recomendación colaborativo sugiere elementos de acuerdo con la similitud de usuarios similares para ese elemento. Agrupa a usuarios con intereses y gustos similares y sugiere sus productos en consecuencia.
Por ejemplo, suponga que a usted y a otro usuario les gustó Sholay. Ahora, después de ver Sholay y darle me gusta, al otro usuario le gustó Golmaal. Debido a que usted y el otro usuario tienen intereses similares, el sistema de recomendación le sugeriría que vea Golmaal en función de estos datos. Esto es filtrado colaborativo.
2. Sistemas de recomendación basados en contenido
Un sistema de recomendación basado en contenido sugiere elementos en función de los datos que recibe de un usuario. Podría basarse en datos explícitos ('Me gusta', 'Compartir', etc.) o datos implícitos (historial de visualización). El sistema de recomendaciones usaría estos datos para crear un perfil específico del usuario y sugeriría artículos basados en ese perfil.
Creación de un sistema básico de recomendación de películas
Ahora que hemos cubierto los conceptos básicos de los sistemas de recomendación, comencemos a construir un sistema de recomendación de películas.
Podemos comenzar a construir un sistema de recomendación de películas basado en Python utilizando el conjunto de datos completo de MovieLens . Este conjunto de datos contiene más de 26 millones de calificaciones, 750 000 aplicaciones de etiquetas que se aplican a más de 45 000 películas. Los datos del genoma de la etiqueta presentes en este conjunto de datos con más de 12 millones de puntajes de relevancia.
Estamos utilizando el conjunto de datos completo para crear un sistema básico de recomendación de películas. Sin embargo, puede usar un conjunto de datos más pequeño para este proyecto. Primero, tendremos que importar todas las bibliotecas requeridas:
Un sistema básico de recomendación de películas basado en Python sugeriría películas de acuerdo con la popularidad y el género de la película. Este sistema funciona basado en la noción de que las películas populares con elogios de la crítica tendrán una alta probabilidad de ser del agrado de la audiencia en general. Tenga en cuenta que un sistema de recomendación de películas de este tipo no ofrece sugerencias personalizadas.
Para implementarlo, ordenaremos las películas según su popularidad y calificación y pasaremos un argumento de género para obtener las mejores películas de un género:
Aporte
md = pd. read_csv('../input/movies_metadata.csv')
md.cabeza()
Producción
adulto | pertenece_a_la_colección | presupuesto | géneros | video | identificación | imdb_id | titulo original | visión de conjunto | ingresos | título | |||||||
Falso | ('id'L 10194, 'nombre': 'Colección Toy Story') | 30000000 | [{'id': 16, 'name': 'Animación'}… | Falso | 862 | tt0114709 | Historia del juguete | Dirigidos por Woody, los juguetes de Andy viven felices... | 373554033 | Historia del juguete | |||||||
1 | Falso | Yaya | 65000000 | {{'id': 12, 'nombre': 'Aventura'}… | Falso | 8844 | tt0113497 | Jumanji | Cuando los hermanos Judy y Peter... | 262797249 | Jumanji | ||||||
2 | Falso | ('id': 119050, 'nombre': 'Viejos gruñones) | 0 | {{'id': 10749, 'nombre': 'Romance'}… | Falso | 15602 | tt0113228 | Viejos gruñones | Una boda familiar reaviva la antigua… | 0 | Viejos gruñones | ||||||
3 | Falso | Yaya | 16000000 | {{'id': 35, 'name': 'Comedia'}… | Falso | 31357 | tt0114885 | Esperando para exhalar | Engañado, maltratado y pisoteado… | 81452156 | Esperando para exhalar |
Aporte
md['géneros'] = md['géneros'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) demás [])
La fórmula de nuestro gráfico
Para crear nuestra tabla de las mejores películas, usamos las calificaciones de TMDB. Usaremos la fórmula de calificación ponderada de IMDB para crear nuestro gráfico, que es el siguiente:
Calificación ponderada (WR) = (iaouaouaouaouaou)
Aquí, v representa la cantidad de votos que obtuvo una película, m es la cantidad mínima de votos que una película debe tener para estar en la lista, R representa la calificación promedio de la película y C es la media de votos para todo el informe. .
Construyendo los gráficos
Ahora que tenemos el conjunto de datos y la fórmula en su lugar, podemos comenzar a construir el gráfico. Solo agregaremos aquellas películas a nuestras listas que tengan un mínimo de 95% de votos. Comenzaremos con la creación de un gráfico de los 250 principales.
Aporte
recuento_de_votos = md[md['recuento_de_votos'].notnull()]['recuento_de_votos'].astype('int')
vote_averages = md[md['vote_average'].notnull()]['vote_average'].astype('int')
C = vote_averages.mean()
C
Producción
5.244896612406511
Aporte
m = recuento_de_votos.cuantil(0,95)
metro
Producción
434.0
Aporte
md['año'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan más np.nan)
Aporte
calificado = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularidad', 'géneros']]
calificado['voto_count'] = calificado['vote_count'].astype('int')
calificado['voto_promedio'] = calificado['voto_promedio'].astype('int')
calificado.forma
Producción
(2274, 6)
Como puede ver, para obtener un lugar en nuestra lista, una película debe tener un mínimo de 434 votos. Es posible que haya notado que la calificación promedio que debe tener una película para ingresar a nuestro gráfico es 5.24.
Aporte
def calificación_ponderada(x):
v = x['recuento_de_votos']
R = x['voto_promedio']
retorno (v/(v+m) * R) + (m/(m+v) * C)
Aporte
calificado['wr'] = calificado.aplicar(valoración_ponderada, eje=1)
Aporte
calificado = calificado.sort_values('wr', ascendente=Falso).head(250)
Con todo esto en su lugar, construyamos el gráfico:
Mejores películas en general
Aporte
cabeza.calificada(15)
Producción
título | año | recuento_de_votos | voto_promedio | popularidad | géneros | wr | |
15480 | Comienzo | 2010 | 14075 | 8 | 29.1081 | [Acción, Thriller, Ciencia Ficción, Misterio, A… | 7.917588 |
12481 | El caballero oscuro | 2008 | 12269 | 8 | 123.167 | [Drama, Acción, Crimen, Suspense] | 7.905871 |
22879 | Interestelar | 2014 | 11187 | 8 | 32.2135 | [Aventura, Drama, Ciencia Ficción] | 7.897107 |
2843 | club de la pelea | 1999 | 9678 | 8 | 63.8696 | [Drama] | 7.881753 |
4863 | El Señor de los Anillos: La Comunidad del Anillo | 2001 | 8892 | 8 | 32.0707 | [Aventura, Fantasía, Acción] | 7.871787 |
292 | ficción de la pulpa | 1994 | 8670 | 8 | 140.95 | [Thriller, Crimen] | 7.868660 |
314 | Cadena perpetua | 1994 | 8358 | 8 | 51.6454 | [Drama, Crimen] | 7.864000 |
7000 | El Señor de los Anillos: El Retorno del Rey | 2003 | 8226 | 8 | 29.3244 | [Aventura, Fantasía, Acción] | 7.861927 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | [Comedia, Drama, Romance] | 7.860656 |
5814 | El Señor de los Anillos: Las Dos Torres | 2002 | 7641 | 8 | 29.4235 | [Aventura, Fantasía, Acción] | 7.851924 |
256 | Guerra de las Galaxias | 1977 | 6778 | 8 | 42.1497 | [Aventura, Acción, Ciencia Ficción] | 7.834205 |
1225 | Regreso al futuro | 1985 | 6239 | 8 | 25.7785 | [Aventura, Comedia, Ciencia Ficción, Familia] | 7.820813 |
834 | El Padrino | 1972 | 6024 | 8 | 41.1093 | [Drama, Crimen] | 7.814847 |
1154 | El imperio Contraataca | 1980 | 5998 | 8 | 19.471 | [Aventura, Acción, Ciencia Ficción] | 7.814099 |
46 | Se7en | 1995 | 5915 | 8 | 18.4574 | [Crimen, Misterio, Thriller] |
¡Listo, ha creado un sistema básico de recomendación de películas basado en Python!

Ahora reduciremos las sugerencias de nuestro sistema de recomendación a las basadas en género para que pueda ser más preciso. Después de todo, no es necesario que a todos les guste El Padrino por igual.
Estrechando el género
Entonces, ahora modificaremos nuestro sistema de recomendación para que sea más específico para cada género:
Aporte
s = md.apply(lambda x: pd.Series(x['géneros']),axis=1).stack().reset_index(level=1, drop=True)
s.nombre = 'género'
gen_md = md.drop('géneros', eje=1).join(s)
Aporte
def build_chart(género, percentil=0.85):
df = gen_md[gen_md['género'] == género]
recuento_de_votos = df[df['recuento_de_votos'].notnull()]['recuento_de_votos'].astype('int')
vote_averages = df[df['vote_average'].notnull()]['vote_average'].astype('int')
C = vote_averages.mean()
m = vote_counts.quantile(percentil)
calificado = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularidad']]
calificado['voto_count'] = calificado['vote_count'].astype('int')
calificado['voto_promedio'] = calificado['voto_promedio'].astype('int')
calificado['wr'] = calificado.aplicar(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vote_count']) * C), eje=1)
calificado = calificado.sort_values('wr', ascendente=Falso).head(250)
regreso calificado
Ahora hemos creado un sistema de recomendación que clasifica las películas del género romántico y recomienda las mejores. Elegimos el género romántico porque no aparecía mucho en nuestra tabla anterior.
Las mejores películas de romance
Aporte
build_chart('Romance').head(15)
Producción
título | año | recuento_de_votos | voto_promedio | popularidad | wr | |
10309 | Dilwale Dulhania Le Jayenge | 1995 | 661 | 9 | 34.457 | 8.565285 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | 7.971357 |
876 | Vértigo | 1958 | 1162 | 8 | 18.2082 | 7.811667 |
40251 | Su nombre. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | A algunos les gusta caliente | 1959 | 835 | 8 | 11.8451 | 7.745154 |
1132 | cine paraíso | 1988 | 834 | 8 | 14.177 | 7.744878 |
19901 | hombre de papel | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | cantar calle | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | El apartamento | 1960 | 498 | 8 | 11.9943 | 7.599317 |
38718 | la doncella | 2016 | 453 | 8 | 16.727405 | 7.566166 |
3189 | Luces de la ciudad | 1931 | 444 | 8 | 10.8915 | 7.558867 |
24886 | La forma en que se ve | 2014 | 262 | 8 | 5.71127 | 7.331363 |
45437 | En un instante | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | Titánico | 1997 | 7770 | 7 | 26.8891 | 6.981546 |
19731 | Libro de jugadas Silver Linings | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
Ahora, tiene un sistema de recomendación de películas que sugiere las mejores películas según el género elegido. Recomendamos probar este sistema de recomendación con otros géneros como Acción, Drama, Suspenso, etc. Comparta las tres mejores películas de su género favorito que sugiere el sistema de recomendación en la sección de comentarios a continuación.
Obtenga más información sobre un sistema de recomendación de películas
Como ya debe haber notado, construir un sistema de recomendación de películas basado en Python es bastante simple. Todo lo que necesita es un poco de conocimiento de la ciencia de datos y un poco de esfuerzo para crear un sistema de recomendación completamente funcional.
Sin embargo, ¿qué sucede si desea crear sistemas de recomendación más avanzados? ¿Qué sucede si desea crear un sistema de recomendación que una gran empresa podría considerar usar?
Si está interesado en obtener más información sobre los sistemas de recomendación y la ciencia de datos, le recomendamos que tome un curso de ciencia de datos. Con un curso, aprenderá todos los conceptos fundamentales y avanzados de la ciencia de datos y el aprendizaje automático. Además, estudiará con expertos de la industria que lo guiarán a lo largo del curso para ayudarlo a evitar dudas y confusiones.
En upGrad, ofrecemos múltiples cursos de ciencia de datos y aprendizaje automático. Puede elegir cualquiera de los siguientes según sus intereses:
- Diploma PG en ciencia de datos
- Maestría en Ciencias en Ciencia de Datos
- Certificación PG en Ciencia de Datos
- Diploma PG en Aprendizaje Automático e IA
- Maestría en Ciencias en Aprendizaje Automático e IA
Además de estos cursos, ofrecemos muchos otros cursos en ciencia de datos y aprendizaje automático. ¡Asegúrate de echarles un vistazo!
Pensamientos finales
Ahora sabe cómo construir un sistema de recomendación de películas. Una vez que haya creado el sistema, asegúrese de compartirlo con otros y mostrarles su progreso. Los sistemas de recomendación tienen una amplia gama de aplicaciones, por lo que aprender sobre ellos seguramente le dará una ventaja en la industria.
El filtrado colaborativo es un tipo de sistema de recomendación que se acerca a la construcción de un modelo basado en las preferencias del usuario. El historial de los usuarios actúa como el conjunto de datos para el filtrado colaborativo. El filtrado colaborativo es de 2 tipos que se mencionan a continuación: El filtrado basado en contenido recopila los datos del usuario y sugiere los elementos en consecuencia. Algunas de sus ventajas, así como desventajas, se mencionan a continuación: El algoritmo de filtrado colaborativo se está convirtiendo en el principal algoritmo de conducción para muchas aplicaciones populares. Cada vez más empresas se centran en ofrecer contenido rico y personalizado. Por ejemplo, probablemente haya visto este mensaje en muchos sitios web de comercio electrónico. Los clientes que compran esto también compraron.¿Qué es el filtrado colaborativo y cuáles son sus tipos?
1. Filtrado colaborativo basado en usuarios: La idea detrás de este tipo de filtrado colaborativo es que tomamos un usuario por preferencia, digamos "A" y encontramos otros usuarios que tienen preferencias similares y luego proporcionamos "A" esas preferencias de estos usuarios que no ha encontrado todavía.
Filtrado colaborativo basado en ítems: Aquí en lugar de encontrar a los usuarios con preferencias similares, buscamos películas similares al gusto de “A” y recomendamos aquellas películas que aún no ha visto. ¿Cuáles son las ventajas y desventajas del filtrado basado en contenido?
Ventajas
1. A diferencia del filtrado colaborativo, el modelo no necesita recopilar datos sobre otros usuarios con preferencias similares, ya que toma las sugerencias del propio usuario principal.
2. La modelo puede recomendarte algunas de las mejores películas según tus preferencias que solo unos pocos han visto.
Desventajas
1. Esta técnica requiere mucha información sobre un determinado dominio, por lo que la calidad de las funciones que proporciona es más o menos la misma que las funciones diseñadas a mano.
2. Su capacidad para recomendar películas es limitada ya que solo funciona de acuerdo a los intereses existentes de los usuarios. ¿Qué aplicaciones populares utilizan algoritmos de filtrado colaborativo?
Las siguientes son algunas de las aplicaciones que tienen una base de usuarios popular en todo el mundo:
1. YouTube usa este algoritmo junto con otros algoritmos poderosos para proporcionar recomendaciones de videos en la página de inicio.
2. Los sitios web de comercio electrónico como Amazon, Flipkart y Myntra también usan este algoritmo para brindar recomendaciones de productos.
3. Las plataformas de transmisión de video son el ejemplo más grande aquí que utiliza la calificación de los usuarios, la calificación promedio y el contenido relacionado para brindar sugerencias personalizadas.