Recomendador de anime: Mide el impacto de las recomendaciones personalizadas en los usuarios.
Tags: aws, datascience, spanish, machinelearning
Published: 2023-04-18 12:53:37

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)

github: https://github.com/aws-samples/aws-recomendador-anime/tree/main/recomendador-de-anime

---
series: Recomendador de anime
---


En este último episodio de la serie Recomendaciones personalizadas de anime aprenderás a como recolectar las métrica envidas por [Amazon Personalize](https://docs.aws.amazon.com/es_es/personalize/latest/dg/what-is-personalize.html) de las interacciones de los usuarios con la aplicación y evaluar el impacto de las recomendaciones personalizadas entregadas en la aplicación web, de esta forma poder comparar el comportamiento del recomendador y sus [campañas](https://docs.aws.amazon.com/es_es/personalize/latest/dg/campaigns.html). (Fig. 1). 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z3vxh7skyi58sggb6g06.png)
 
Fig. 1 Arquitectura para monitorear campañas de Amazon Personalize.


Siguiendo los pasos de los blogs anteriores puedes construir una aplicación web capaz de entregar una experiencia personalizada de recomendaciones de animes de la preferencia del usuario y, a medida que se utiliza con mayor frecuencia, puede ir entregando recomendaciones cada vez más relevantes. 

En una plataforma de streaming, como la simulada en la serie **"Recomendaciones personalizadas de anime"**, es posible medir el comportamiento de los usuarios mediante el rastreo de indicadores como las tasas de clicks (CTR) o vistas efectivas al contenido, el total de películas/series vistas y la duración del contenido visualizado. En el caso de una plataforma de e-commerce, los indicadores a medir serían los CTR y la cantidad de compras realizadas.

Medir el comportamiento de los usuarios respecto a las recomendaciones entregadas es importante porque permite saber la efectividad del recomendador y el impacto de las [campañas](https://docs.aws.amazon.com/es_es/personalize/latest/dg/campaigns.html). 

El impacto de las recomendaciones se mide definiendo atribución de métricas (Metric atributions) para cada tipo de evento, esto lista los eventos que se desea conocer y crea informes basados en los datos de interacciones y elementos que importas y en las métricas que específicas.

Por ejemplo, si quisieras comparar la efectividad de dos campañas distintas (Fig. 2) defines las atribuciones a las métricas para cada escenario, “escenario_a” para la campaña A y “escenario_b” para la campaña B, de esa forma separar los dos escenarios al rescatar las métricas. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5tbizq0u2q6ehiuh3ky2.png)
 
Fig. 2 Arquitectura para monitorear campañas de Amazon Personalize con dos escenarios distintos.

Resumen de los episodios anteriores: 

- [Cómo crear un modelo de recomendaciones personalizadas.](https://dev.to/aws/como-crear-un-modelo-de-recomendacion-basado-en-machine-learning-37mj)
- [Cómo desplegar el modelo recomendador de anime en una API REST](https://dev.to/aws/agrega-autenticacion-a-tu-aplicacion-web-20fl)
- [Crea una aplicación web para probar las recomendaciones personalizadas de anime en tiempo real.](https://dev.to/aws/como-desplegar-el-modelo-recomendador-de-anime-en-una-api-rest-2lo7) 
- [Agrega autenticación a tu aplicación web](https://dev.to/aws/agrega-autenticacion-a-tu-aplicacion-web-20fl).
- Medir el impacto de las recomendaciones personalizadas en los usuarios. (este episodio).


¡A construir! 🧰🚀


**Manos a la obra 🚀 👩🏻‍🚀**

### Paso 1: Despliega la aplicación web de recomendaciones personalizadas de anime en tiempo real.

1.	Sigue los pasos del episodio [Cómo crear un modelo de recomendación personalizado](https://aws.amazon.com/es/blogs/aws-spanish/como-crear-un-modelo-de-recomendacion-basado-en-machine-learning/) e ignora el paso final donde se borran los recursos. 
2.	Sigue los pasos del episodio [Cómo desplegar el modelo recomendador de anime en una API REST](https://aws.amazon.com/es/blogs/aws-spanish/como-desplegar-el-modelo-recomendador-de-anime-en-una-api-rest/) e ignora el paso final donde se borran los recursos.
3.	 Sigue los pasos del episodio [Crea una aplicación web para probar las recomendaciones personalizadas de anime en tiempo real](https://aws.amazon.com/es/blogs/aws-spanish/crea-una-aplicacion-web-para-probar-las-recomendaciones-personalizadas-de-anime-en-tiempo-real/) e ignora el paso final donde se borran los recursos.
4.	Sigue los pasos del episodio Cómo agregar autenticación a tu aplicación web e ignora el paso final donde se borran los recursos.

### Paso 2: Asignar la política necesaria para exportar datos hacia [Amazon CloudWatch](https://aws.amazon.com/es/cloudwatch/).
  
1.	En la [consola de AWS Identity and Access Management](https://console.aws.amazon.com/iam/) ingresa al menú de Rol y busca y selecciona el [Rol IAM](https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/id_roles.html) creado con nombre PersonalizeRoleAnime creado en el Episodio 1. 
2.	En el nuevo menú en Añadir permisos selecciona Crear política insertada (Fig. 3) 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p8mr55lc1chir008h51h.png)
 
Fig. 3 Crear política insertada a IAM Role existente.
3.	En la pestaña JSON copia lo siguiente: 

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Resource": "*"
    }
  ]
}
```

4.	Selecciona **Revisar la política** nombra la política: “PersonalizeMetric”, y selecciona **Crear una política**, al finalizar deberías ver 3 políticas.

### Paso 3: Copia los valores necesarios para crear la atribución de métricas. 

1.	[Amazon Personalize Dataset Group](https://docs.aws.amazon.com/personalize/latest/dg/how-it-works-dataset-schema.html) ARN: 
-	En la [consola de Amazon Personalize](https://console.aws.amazon.com/personalize/home) accede a Manage dataset groups.
-	Selecciona el nombre del Dataset group creado en el [episodio 1](https://aws.amazon.com/es/blogs/aws-spanish/como-crear-un-modelo-de-recomendacion-basado-en-machine-learning/), en mi caso personalize-anime (Fig. 4).


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13qz4tkswfe28bhs33jw.png)
Fig. 4 Dataset groups de Amazon Personalize

-	Al final del nuevo menú ingresa a Dataset group details y copia y guarda el valor de ARN (Fig. 5). 




![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t30j066469mwy16bjiov.png)

Fig. 5 ARN del Dataset Group.

2.	[Ruta del Bucket de Amazon Simple Storage Service (S3)](https://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/UsingBucket.html) a guardar las métricas: 
-	Utiliza el mismo Bucket que creaste en el episodio 1. 

3.	[AWS Identity and Access Management Role ARN](https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/id_roles.html) con los permisos y políticas necesarias para recolectar las métricas de Amazon Personalize y escribir en el Bucket de S3. 
-	Utiliza el mismo IAM Role que creaste en el [episodio 1](https://aws.amazon.com/es/blogs/aws-spanish/como-crear-un-modelo-de-recomendacion-basado-en-machine-learning/) y editaste en el paso anterior. 

### Paso 4: Crea la atribución de métrica. 

Se crea con una llamada a la API [`CreateMetricAttribution`](https://boto3.amazonaws.com/v1/documentation/api/1.26.93/reference/services/personalize/client/create_metric_attribution.html), identificando los eventos y como se miden, Amazon Personalize tiene disponible dos funciones: 

- `SUM(DatasetType.COLUMN_NAME)`: donde `DatasetType` corresponde al DataSet de Iteraciones o de Items, y solo se puede aplicar a columnas con valores numéricos. 

- `SAMPLECOUNT()`: Solo se puede aplicar al dataset Interactions.

Por ejemplo, en una aplicación de Personalize [Video on demand](https://docs.aws.amazon.com/personalize/latest/dg/VIDEO_ON_DEMAND-use-cases.html) si se quisiera medir la cantidad de clics emplea `SAMPLECOUNT()` y en el caso de querer medir el evento Watch (ver) seria con la función `SUM(Items.LENGTH)`. 

Para el caso de la aplicación web Recomendador de Anime, puedes medir la cantidad de los eventos **RATING**, **CLICK** y **WATCH**, definimos: 

```
metrics_list = [
	{
		"eventType": "CLICK",
		"metricName": "COUNT_CLICK",
		"expression": "SAMPLECOUNT()"
	},
	{
		"eventType": "RATING",
		"metricName": "COUNT_RATING",
		"expression": "SAMPLECOUNT()"
	},
	{
		"eventType": "WATCH",
		"metricName": "COUNT_WATCH",
		"expression": "SAMPLECOUNT()"
	}
]

```

Adicionalmente es necesario configurar el destino de la atribución de métrica (`metricsOutputConfig`), el rol de IAM tiene los permisos necesarios para exportar la data a [Amazon CloudWatch](https://aws.amazon.com/es/cloudwatch/),  si deseas habilitar la opción de publicar métricas en Amazon S3 cada vez que crees un trabajo de importación de conjuntos de datos, introduce el bucket de Amazon S3 de destino como path. 

```
output_config = {
    "roleArn": role_arn,
    "s3DataDestination": {
    "path": Full_s3_path    
    }
}

```

Para este episodio Ful_s3_path es “`s3://bucket-epidosio1/metrics/`", reemplaza `bucket-episodio1` por el rescatado en el Paso 3.

A continuación, crea la atribución de métrica y guarda el ARN de este con el siguiente comando: 

```
response = personalize.create_metric_attribution(
name = metric_attribution_name,
datasetGroupArn = dataset_group_arn,
metricsOutputConfig = output_config,
metrics = metrics_list
)
metric_attribution_arn = response['metricAttributionArn']
```

Sustituye los valores:

- `metric_attribution_name` = "personalize-anime-metrics"

-  `datasetGroupArn` = es el valor de Amazon Personalize Dataset Group ARN rescatado en el Paso 3. 

Puedes visualizar las métricas creadas en la consola: 
1.	En la consola de Amazon Personalize, en el Dataset groups del proyecto a la izquierda ve al menú de Metric attribution. 
2.	Al final en Metric attributes puedes ver las métricas que acabas de crear (Fig. 6)



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3qweume685urepoaxq3c.png)
 
Fig. 6 Metrics attributes.

El código lo puedes ver en el notebook [`07_Metric_attribution.ipynb`](https://github.com/aws-samples/aws-recomendador-anime/blob/main/recomendador-de-anime/07_Metric_attribution.ipynb).

### Paso 5: Envía eventos. 

Los eventos se envían atreves de la función [`put_events()`](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/personalize-events/client/put_events.html) de Amazon Personalize, los eventos que recolectan las métricas corresponde al valor de eventValue en los parámetros de la función. 

Por ejemplo, con las siguientes líneas el usuario con Id 223 y sesión sessionId123 envía un evento RATING donde califica el Item 100 con valor 8: 

```
personalize_events.put_events(
trackingId = TRACKING_ID,
userId= 223,
sessionId = 'sessionId123',
eventList = [{
'eventType': “RATING”,
'itemId': ”100”,
'eventValue': 8,
'sentAt': time.mktime(date_time.timetuple())}]
)
```

El valor de `TRACKING_ID` corresponde al ID del [Event Tracker](https://docs.aws.amazon.com/personalize/latest/dg/recording-events.html) de Amazon Personalize, lo obtienes en el menú de Event Tracker del Dataset groups (Fig. 7)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1aags13s07nrh9piel3c.png)
Fig. 7 Tracking ID de Event Tracker

¿Recuerdas el ejemplo de escenario A y B que mencioné al principio? Fig. 2, se puede implementar sumándole el parámetro `eventAttribution` de `metricAttribution` a llamada de la API [`put_events()`](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/personalize-events/client/put_events.html), el cual corresponde al nombre de cada escenario, por ejemplo, “escenario_a” para la campaña A y “escenario_b” para la campaña B, de esa forma separar los dos escenarios al rescatar las métricas, para la aplicación de recomendaciones de anime la campaña A será la creada para recomendar anime similares ([SIMS recipe](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-sims.html)) y la campaña B la creada para recomendar anime personalizados de acuerdo a las preferencias del usuario ([User-Personalization recipe)](https://docs.aws.amazon.com/personalize/latest/dg/native-recipe-new-item-USER_PERSONALIZATION.html). 



```
personalize_events.put_events(
trackingId = TRACKING_ID,
userId= 223,
sessionId = 'sessionId123',
eventList = [{
'eventType': “RATING”,
'itemId': ”100”,
'eventValue': 8,
'metricAttribution': {'eventAttributionSource': 'escenario_a'}
'sentAt': time.mktime(date_time.timetuple())}]
)
```

También puedes proporcionar el parámetro recommendationId, al pasar recommendationId en `put_events`, Amazon Personalize atribuye el evento a la campaña que recomendó el item, para identificar las recomendaciones que le muestra al usuario como datos de impresiones o para medir el impacto de las recomendaciones. 

Una vez creada la atribución de métrica puedes generar eventos desde la aplicación web o manualmente empleando el código en el notebook [`07_Metric_attribution.ipynb`](https://github.com/aws-samples/aws-recomendador-anime/blob/main/recomendador-de-anime/07_Metric_attribution.ipynb). 


### Paso 6: Visualiza las métricas. 

Las métricas las puedes obtener de dos formas: 

Métricas generadas por el trabajo de importación: cuando importamos datos de forma masiva con la llamada a la API [`create_dataset_import_job()`](https://boto3.amazonaws.com/v1/documentation/api/1.26.93/reference/services/personalize/client/create_dataset_import_job.html). 

Para generar el archivo de atribución de métricas agrega el parámetros `publishAttributionMetricsToS3 = True` para generar la atribución de métrica y sean almacenadas en el bucket de  salida configurado en el paso 4, para más información revisa [Publishing metrics to Amazon S3](https://docs.aws.amazon.com/personalize/latest/dg/metric-attribution-results.html#metric-attribution-results-s3).

```
response = personalize.create_dataset_import_job(
    jobName = 'YourImportJob',
    datasetArn = 'dataset_arn',
    dataSource = {'dataLocation':'s3://bucket/file.csv'},
    roleArn = 'role_arn',
    importMode = 'FULL|INCREMENTAL',
    publishAttributionMetricsToS3 = True
)

```

Cuando finalice el trabajo de importación podrás ver unos archivos como en Fig. 8. 


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/grzhextbt5bkd1la7879.png)
 
Fig. 8 Atribución de métricas desde trabajos de importación.


Explorando el contenido con [Amazon S3 Select](https://docs.aws.amazon.com/es_es/AmazonS3/latest/userguide/selecting-content-from-objects.html) (Fig. 9) puedes observar las columnas:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g0tiof0fwisvi5n85trh.png)
 
Fig. 9 Contenido archivo atribución de métricas resultado del trabajo de importación.


- `METRIC_NAME`: corresponde al valor de metricName. 
- `EVENT_TYPE`: El tipo del evento. 
- `VALUE`: Valor del evento. 
- `MATCH_FUNTION`: corresponde al valor de expression.
- `EVENT_ATTRIBUTION_SOURCE`: SOURCE_NAME_UNDEFINED, corresponde a eventos generados desde los import Jobs o sin el parámetro eventAttributionSource. 
- `TIMESTAMP`: Momento en el cual se generó el evento.
 
Métricas generadas a través del Event Tracker:  cuando se envían las interacciones del usuario son enviadas a Amazon Personalize con la función `put_events()`. Amazon CloudWatch registra los eventos y los lista en las métricas de Amazon Personalize, visualiza esta métricas:

1.	En el menú de Metric attribution del dataset selecciona Go to your CloudWatch account (Fig. 10)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/40ofy0oukmjgx0p4mmv6.png)
 
Fig. 10  Menú métricas de Amazon Personalize.


2.	En el menú de la izquierda CloudWatch selecciona Métricas, luego Todas las métricas y en el buscador escribe AWS/Personalize (Fig. 11)


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t2cmvsh4k1uh7zzx4uri.png)
 
Fig. 11 Métricas para Amazon Personalize.


Amazon CloudWatch recolecta, sin necesidad de configuración previa, métricas asociadas a los eventos de Amazon Personalize. Puedes ver métricas de hasta dos semanas previas, y también puedes generar alarmas de acuerdo al comportamiento de las métricas. Si deseas saber más te dejo este [link](https://docs.aws.amazon.com/personalize/latest/dg/cloudwatch-metrics.html).   

3.	Para visualizar las métricas configuradas selecciona AWS/Personalize > DatasetGroupArn, EventAttributionSource, y luego selecciona el Nombre de las métricas que creaste (Fig. 12).



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6hqdxlz6k2hi7tqzw143.png)
 
Fig. 12 Visualización métricas Amazon CloudWatch.


En la Fig. 12 se observa el comportamiento de los dos escenarios (SIMS y USER-PERSONALIZATION), la cantidad de CLICKS para ambas campañas es parecida, lo que dice que ambas campañas son atractivas a primera vista, pero la cantidad de WATCH (contenido visto o consumido) nos dice que la campaña USER-PERSONALIZATION tiene mayor éxito, mayor CTR Click trough rate = Tasa de clicks. 

Con este análisis de datos, se pueden tomar decisiones informadas y dar prioridad a las recomendaciones personalizadas utilizando la campaña USER-PERSONALIZATION. Además, se pueden realizar ajustes y volver a entrenar el modelo de la campaña SIMS para mejorar su efectividad. Es importante seguir monitoreando los datos para retroalimentar y hacer mejoras continuas que aseguren la mejor experiencia para los usuarios.
 
Prueba tu aplicación web, compártela para generar más métricas y tener más datos que explorar en Amazon CloudWatch.


### Paso 8: Exporta las métricas, consúltalas, haz análisis e Inteligencia empresarial (BI) (Opcional). 


Si quieres ir más allá exportando las métricas para hacer consultas, análisis y BI con ellas, te cuento brevemente como puedes desbloquear esas habilidades. 

Las métricas visualizadas en Amazon CloudWatch se pueden exportar a un bucket de S3 casi en tiempo real creando un flujo para las métricas, [acá los pasos para crearlo](https://docs.aws.amazon.com/es_es/AmazonCloudWatch/latest/monitoring/CloudWatch-Metric-Streams.html). Con las métricas en S3 puedes empezar a hacer consultas con [Amazon Athena](https://docs.aws.amazon.com/es_es/athena/latest/ug/create-table.html) o usar [Amazon QuickSight](https://docs.aws.amazon.com/es_es/quicksight/latest/user/welcome.html) para generar visualizaciones e inteligencia empresarial (Fig. 13).



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r1z10ha5yfe9l85mouxa.png)
 
Fig. 13 Exporta las métricas de Amazon S3, genera tablas en Amazon Athena y visualiza en Amazon QuickSight.

Puedes ir más allá y aplicar herramientas de [Machine Learning](https://aws.amazon.com/es/blogs/aws-spanish/introduccion-artificial-intelligence-y-machine-learning-para-desarrollares-de-aplicaciones/) en las métricas, cómo predecir qué puede pasar en el futuro o detectar comportamientos anómalos usando [Amazon Forecast](https://aws.amazon.com/es/forecast/), [Amazon Lookout for Metrics](https://aws.amazon.com/es/lookout-for-metrics/) o [Amazon QuickSight](https://docs.aws.amazon.com/quicksight/latest/user/making-data-driven-decisions-with-ml-in-quicksight.html).

### Paso 9: Limpieza de recursos en la cuenta de AWS (Opcional).

1.	Ve a la consola de Amazon Personalize. 
2.	Selecciona el Dataset group del proyecto
3.	Ve a Metricts attribution y en Metric attribution overview selecciona Delete.



## Conclusiones

Observar cómo cambian las métricas te ayuda a seguir el impacto de las recomendaciones en los usuarios. Si algo no está funcionando como debería, puedes ajustar las campañas y hacer mejoras hasta alcanzar el resultado deseado. Es importante usar la retroalimentación constante para asegurar que las recomendaciones tengan el impacto deseado en los usuarios.

Si seguiste los pasos de la serie no solo fuiste capaz de crear la aplicación web de recomendaciones de anime, también lograste desbloquear varias habilidades técnicas en el camino de su construcción:

🚀 Creaste un modelo de recomendaciones personalizadas basado en machine learning, 
🚀 Creaste un API REST que permite entregar esas recomendaciones de forma segura escalable, 
🚀 Desplegaste el recomendador personalizado en una aplicación web y le 
🚀 Integraste a la aplicación web registro con credenciales de usuario y contraseña
🚀 En este episodio sumaste análisis al comportamiento de las recomendaciones entregadas a través de métricas en un dashboard. 

Te dejo estos recursos para que sigas aprendiendo de las herramientas utilizadas: 

- [Measure the Business Impact of Amazon Personalize Recommendations ](https://aws.amazon.com/es/blogs/machine-learning/measure-the-business-impact-of-amazon-personalize-recommendations)
- [CloudWatch metrics for Amazon Personalize Amazon Personalize Monitor](https://docs.aws.amazon.com/personalize/latest/dg/cloudwatch-metrics.html)
- [Repositorio: GitHub Measuring impact of recommendations](https://github.com/aws-samples/amazon-personalize-samples/tree/master/next_steps/evaluation/measuring_impact_of_recommendations)
- [QuickSight Workshops](https://catalog.workshops.aws/quicksight/en-US)
- [Amazon Forecast Workshop](https://catalog.us-east-1.prod.workshops.aws/workshops/b28f3502-ca9f-4e12-8b84-59e454c1ed53/en-US)
- [Introduction to Amazon Lookout for Metrics - Workshop
](https://catalog.us-east-1.prod.workshops.aws/workshops/a99b0406-f6d5-4202-9531-55fe81fc010c/en-US)

----

##¡Gracias!

Te dejo mis redes: 

🇻🇪🇨🇱 [Dev.to](https://dev.to/elizabethfuentes12) [Linkedin](https://www.linkedin.com/in/lizfue/) [GitHub](https://github.com/elizabethfuentes12/) [Twitter](https://twitter.com/elizabethfue12) [Instagram](https://www.instagram.com/elifue.tech) [Youtube](https://www.youtube.com/channel/UCr0Gnc-t30m4xyrvsQpNp2Q)

github: https://github.com/aws-samples/aws-recomendador-anime/tree/main/recomendador-de-anime