DEV Community

Cover image for Recomendador de Anime con Amazon Personalize
Elizabeth Fuentes L
Elizabeth Fuentes L

Posted on • Updated on

Recomendador de Anime con Amazon Personalize

馃嚮馃嚜馃嚚馃嚤 Dev.to Linkedin GitHub Twitter Instagram Youtube

Para esta Demo utilizo una DataBase de Kaggle con nombre MyAnimeList Database 2020, la cual se encuentra disponible en este link:https://www.kaggle.com/hernan4444/anime-recommendation-database-2020

Introducci贸n

Cada vez los motores de recomendaci贸n est谩n cobrando relevancia en los sistemas para personalizar la experiencia del usuario y hacerla m谩s relevante. Ejemplos son la publicidad, recomendaciones en plataforma de Video On Demand, o sugerencias de nuevos contactos en redes sociales. Bien ejecutado un modelo de personalizaci贸n puede aumentar las ganancias de una empresa o disminuir los costos, pero por el contrario, si se hace mal, termina en una mala experiencia de cliente.

Una de las dificultades de estos proyectos es que requieren conocimientos y experiencia avanzada en Machine Learning (cosa que no todos pueden tener a la mano), por eso comenc茅 a explorar el servicio de Amazon Personalize que brinda de alguna manera un "servicio de motor de recomendaciones con tus propios datos", haciendo todo el proyecto much铆simo m谩s abordable y donde se pueden ver los resultados r谩pidamente.

Para entenderlo, arm茅 un proyecto basado en el repositorio original, y vamos a utilizar el servicio de Amazon Personalize para entrenar motores de recomendaci贸n de Animes utilizando las interacciones que han tenido los usuarios con estos animes, como tambi茅n la otros datos disponibles como Genero y Calificaci贸n.

El repositorio con el proyecto paso a paso est谩 en mi GitHub (Jupyter Notebooks)

Manos a la obra.

Primero 驴Que es Amazon Personalize?

  • Es un servicio que permite entrenar modelos de personalizaci贸n y obtener recomendaciones en tiempo real.

  • Basado en la misma tecnolog铆a de aprendizaje automatico (ML) utilizada por la tienda www.amazon.com.

  • Genera recomendaciones de gran relevancia utilizando t茅cnicas de Deep Learning.

  • No requiere tener la experiencia o conocimientos en Machine Learning. 馃槂 馃コ 馃帀馃帀

Fuente: https://aws.amazon.com/es/personalize/

Y...驴Como Funciona Amazon Personalize?

Imagen

  1. Debes proporcionar datos sobre usuarios y elementos para realizar la personalizaci贸n.

Los datos que utilizamos para modelar en Personalize son de tres tipos:

Dataset de Interacciones: este Dataset consiste en el momento en el que usuario interactu贸 con un 铆tem, por ejemplo clicks, compras, visualizaci贸n, calificaci贸n. Es el 煤nico Dataset obligatorio.

Item metadata (opcional), el cual contiene informaci贸n adicional de los 铆tems, tales como categor铆a o genero.

Dataset de Usuarios (opcional), que contiene informaci贸n de los usuarios como edad o sexo.

  1. Detr谩s de c谩maras, Amazon Personaliza autom谩ticamente:
  • Inspecciona los datos
  • Identifica lo que es significativo
  • Selecciona los algoritmos adecuados
  • Entrena y optimiza modelos de personalizaci贸n
  1. Despu茅s del entrenamiento se obtiene un modelo entrenado que se puede desplegar para hacer inferencias a trav茅s de una API.

Ahora, Nuestro proyecto Recomendador de Anime.

Los pason para llevar a cabo nuestro recomendador se describen a continuaci贸n, pero en resumen son:

  1. Crear un DatasetGroup
  2. Creacion de Esquemas y Datasets
  3. Importar los datos a los datasets
  4. Seleccionar un algoritmo (recipe), Crear una solution y Solution version (modelo entrenado)
  5. Crear un endpoint de inferencias (Campa帽a)
  6. Creaci贸n de un Event Tracker (para actualizar los DataSets)
  7. Opcionales: Creaci贸n de Filtros
  8. Resultados
  9. Opcional: Rest API

creacion

Paso 1: Crear un DataSet Group

Para crear nuestro proyecto de personalize, primero debemos crear el Dataset Group. Es una especie de grupo donde est谩n todos los recursos (no solo los datasets). Puedes crear varios Dataset Groups y tus modelos no se van topar entre si.

Por ejemplo, es posible que tenga una aplicaci贸n que proporciona recomendaciones para la transmisi贸n de v铆deo y otra que recomienda libros de audio. En Amazon Personalize, cada aplicaci贸n tendr铆a su propio grupo de conjuntos de datos.

Y en nuestro GitHub seria estas lineas:

create_dataset_group_response = personalize.create_dataset_group(
    name = "personalize-anime"
)
dataset_group_arn = create_dataset_group_response['datasetGroupArn']

Enter fullscreen mode Exit fullscreen mode

Paso 2: Creaci贸n de un conjunto de datos y un esquema

Una vez que haya completado Paso 1, ya estar谩s preparado para crear un conjunto de datos. Cuando se crea un conjunto de datos, tambi茅n se crea un esquema para el conjunto de datos. El esquema de Amazon Personalize sobre la estructura de tus datos y permite a Amazon Personalize analizar los datos.

Para nuestra Demo GitHub seria:

Interaction DataSet

Podemos ver que costa de 5 columnas 3 de ellas las requeridas: user_id (que es el ID del usuario), 铆tem_id (el ID del anime) y timestamp (cuando ocurrio esta evaluaci贸n).

interaction

Adicionalmente tenemos valores opcionales que son Event_value (Valor obtenido por el anime) y event_type (que es el tipo del valor, en este caso rating), estos dos 煤ltimos son opcionales pero importante para nuestro modelo.

El esquema se crea con las siguientes lineas de c贸digo:

interactions_schema = schema = {
    "type": "record",
    "name": "Interactions",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "USER_ID",
            "type": "string"
        },
        {
            "name": "ITEM_ID",
            "type": "string"
        },
        {
            "name": "TIMESTAMP",
            "type": "long"
        },
        {
            "name": "EVENT_VALUE",
            "type": "float"
        },
        {
            "name": "EVENT_TYPE",
            "type": "string"
        },

    ],
    "version": "1.0"
}

create_schema_response = personalize.create_schema(
    name = "personalize-anime-interactions1",
    schema = json.dumps(interactions_schema)
)
Enter fullscreen mode Exit fullscreen mode

Items DataSet

En nuestro caso los items corresponde al listado de animes, con su ID (el cual es requerido), estudio que lo creo, a帽o de su lanzamiento, y g茅neros.

items

Los opcionales deben incluir categorical= true, de lo contrario Amazon personalize no utilizara este campo para entrenar el modelo, adem谩s estas caracter铆sticas las podemos usar para los filtros, que mencionaremos despu茅s.

El esquema se crea con las siguientes lineas de c贸digo:

itemmetadata_schema = {
    "type": "record",
    "name": "Items",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "ITEM_ID",
            "type": "string"
        },
        {
            "name": "STUDIOS",
            "type": "string",
            "categorical": True
        },
        {
            "name": "YEAR",
            "type": "int",
        },
        {
            "name": "GENRE",
            "type": "string",
            "categorical": True
        },


    ],
    "version": "1.0"
}
Enter fullscreen mode Exit fullscreen mode

Paso 3: Importaci贸n de los datos

Ahora estar谩s listo para importar los datos de entrenamiento a Amazon Personalize. Al importar los datos, puedes optar por importar registros en bloque, importar registros individualmente o ambos, seg煤n los requisitos del negocio y la cantidad de datos hist贸ricos recopilados. Indistintamente deben estar en un bucket en S3 con permisos para Amazon Personalize.

Despu茅s de haber formateado los datos de entrada (Formatear los datos) y cargados en S3 (Cargar a un bucket de S3), debemos importar los datos de forma masiva a Amazon Perzonalice mediante la creaci贸n de un trabajo de un import job.

Los import jobs son una herramienta de importaci贸n masiva que rellena el DataSet group con los datos del bucket de S3.

En nuestra Demo GitHub creamos el import job:

create_dataset_import_job_response = personalize.create_dataset_import_job(
    jobName = "personalize-anime-item-import",
    datasetArn = items_dataset_arn,
    dataSource = {
        "dataLocation": "s3://{}/{}".format(bucket_name, itemmetadata_filename)
    },
    roleArn = role_arn
)

dataset_import_job_arn = create_dataset_import_job_response['datasetImportJobArn']
Enter fullscreen mode Exit fullscreen mode

Paso 4: Creaci贸n de la soluci贸n

Ahora ya puedes crear una soluci贸n. La soluci贸n hace referencia a la combinaci贸n de una receta de Amazon Perzonalice, par谩metros personalizados y una o mas versiones de la soluci贸n. Despu茅s de crear una soluci贸n con la Version Solution que mejor desempe帽o tenga, creas la campa帽a y obtienes las recomendaciones.

Para crear una soluci贸n en Amazon Personalize, debe hacer lo siguiente:

1- Elija un recipe: Un recipe un t茅rmino de Amazon Personalize que especifica un algoritmo apropiado para entrenar para un caso de uso determinado.

Los recipe son algoritmos preparados para casos de uso espec铆ficos que te permite crear un sistema de personalizaci贸n sin experiencia previa en aprendizaje autom谩tico.

Amazon Personalize proporciona 3 tipos de recipe:

User personalization: cosiste en un modelo al cual yo le paso un usuario y me entrega un listado de 铆tems recomendados para ese usuario.

Ac谩 tenemos un ejemplo de amazon.com donde recomienda productos basados en la historia de compras.

personalization

Personalized Ranking: Le paso un usuario y un listado de 铆tems y me los entrega ordenados de acuerdo a la preferencia de ese usuario.

Un ejemplo de esto son los productos que te recomienda Amazon en los correos de confirmaci贸n de compras.

Personalized_Ranking

Similar items: Se basa en el concepto de filtrado colaborativo, si otro usuario compra el mismo articulo que tu, entonces el modelo te recomienda art铆culos que ese otro usuario ha comprado.

similar

M谩s informaci贸n: aqu铆

Asi cremos el recipe SIMS en nuestara Demo GitHub:

sims_create_solution_response = personalize.create_solution(
    name = "personalize-anime-sims",
    datasetGroupArn = dataset_group_arn,
    recipeArn = SIMS_recipe_arn
)
Enter fullscreen mode Exit fullscreen mode

Esto se repite para Personalized Ranking y User Personalization.

2. Creaci贸n de una versi贸n de soluci贸n (entrene un modelo): Entrena el modelo de aprendizaje autom谩tico que Amazon Personalize utilizar谩 para generar recomendaciones para tus clientes.

Esto tarde un rato, as铆 que ten paciencia.

3. Evaluar la versi贸n de soluci贸n: Una vez tengamos listas las versiones, debemos evaluar si es la mas adecuada, para eso personalize deja una parte de la data fuera del entrenamiento que usa para probarlo.

Y nos entrega el siguiente cuadro con la evaluaci贸n:

metricas

Coverage es el porcentaje de los items que el modelo est谩 recomendando en general. Es decir por ejemplo en SIMS, tiene un coverage de 45% es decir hay un 55% de items que no est谩n siendo recomendados.

Precision 5, 10 y 25 son las precisi贸n de las recomendaciones por ejemplo si recomiendo 10 items y el usuario interactu谩 con 2, mi precision a 10 es de 20%

Normalized discount gain 5,10 y 25 es muy similar a precisi贸n pero ac谩 el orden importa, y hay incentivo por entregar las recomendaciones en orden real de interacci贸n

Si quieres mejorar el coverage debes garantizar que el modelo tenga en cuenta los 铆tems nuevos y los antiguos con poca preferencia, esto lo puedes modificar seteando el parametro campaignConfig al crear la campa帽a.

M谩s Informaci贸n: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/personalize.html#Personalize.Client.create_campaign

Paso 5: Crear un endpoint de inferencias (Campa帽a)

Una vez tomada la decisi贸n sobe nuestra Version Solution con mejor desempe帽o creamos la campa帽a y la desplegamos.

Lo hacemos con esta lineas de comandos:

sims_create_campaign_response = personalize.create_campaign(
    name = "personalize-anime-SIMS",
    solutionVersionArn = sims_solution_version_arn,
    minProvisionedTPS = 1
)
sims_campaign_arn = sims_create_campaign_response['campaignArn']
Enter fullscreen mode Exit fullscreen mode

Paso 6: Creaci贸n de un Event Tracker

Amazon Personalize puede hacer recomendaciones basadas en tiempo real, solo con data hist贸rica, o con una mezcla de ambos. Crea el Event Tracker para que Amazon Personalize pueda aprender de la actividad m谩s reciente de su usuario y actualizar las recomendaciones mientras utilizas la aplicaci贸n. Esto mantiene tus datos de interacciones actualizados y mejora la relevancia de las recomendaciones de Amazon Personalize.

Lo hacemos con esta lineas de comandos:

response = personalize.create_event_tracker(
    name='AnimeTracker',
    datasetGroupArn=dataset_group_arn
)
Enter fullscreen mode Exit fullscreen mode

Paso 7: Opcional - Filtros

Ahora que todas las campa帽as est谩n implementadas y activas, podemos crear filtros. Que te permite filtrar por una condici贸n del 铆tem dataset, en nuestro caso haremos un filtro para los g茅neros, tambi茅n podemos filtrar por campo a帽o o estudio.

createfilter_response = personalize.create_filter(
            name=genre,
            datasetGroupArn=dataset_group_arn,
            filterExpression='INCLUDE ItemID WHERE Items.GENRE IN ("'+ genre +'")'
        )
Enter fullscreen mode Exit fullscreen mode

Paso 8: Resultados

Para ver los resultados trabajamos el notebook 05_Probando_Recomendaciones, donde puedes ver los siguientes resultados.. y adem谩s crear los tuyos.

Similar Items (SIMS)

aws_personalize

User Personalization

aws_personalize

Usando Filtros

filtros

Paso 9: Opcional - Rest API 馃槈

Rest API para POC Amazon Personalize

api

El objetivo de este proyecto es un despliegue r谩pido de una API RESTfull para invocar las campa帽as de Amazon Personalize. Esto lo haremos con Cloud Development Kit (CDK) en Python.

Este proyecto est谩 tal cual (as-is) para probar las predicciones de Amazon Personalize utilizando API Gateway y Lambda.

https://github.com/ensamblador/recomendaciones-rest-api

Ac谩 el video del evento

video

Fuentes adicionales

Este proyecto esta basado en el repocitorio oficial de AWS:
https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/workshops/POC_in_a_box

Developer Guide : https://docs.aws.amazon.com/es_es/personalize/


隆Gracias!

Te dejo mis redes:

Dev.to Linkedin GitHub Twitter Instagram Youtube

Sigue mi comunidad:
AWS Girls Chile
AWS Girls Chile Instagram
AWS Girls Chile Youtube
AWS Girls Chile meetup

馃嚮馃嚜馃嚚馃嚤

Top comments (0)