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.

¿Qué es el filtrado colaborativo y cuáles son sus tipos?

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:

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?

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:
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?

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.
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.