Logotipo de Zephyrnet

Recomiende y filtre elementos dinámicamente según el contexto del usuario en Amazon Personalize | Servicios web de Amazon

Fecha:

Las organizaciones invierten continuamente tiempo y esfuerzo en el desarrollo de soluciones de recomendaciones inteligentes para brindar contenido personalizado y relevante a sus usuarios. Los objetivos pueden ser muchos: transformar la experiencia del usuario, generar una interacción significativa e impulsar el consumo de contenido. Algunas de estas soluciones utilizan modelos comunes de aprendizaje automático (ML) basados ​​en patrones de interacción históricos, atributos demográficos de usuarios, similitudes de productos y comportamiento de grupo. Además de estos atributos, el contexto (como el clima, la ubicación, etc.) en el momento de la interacción puede influir en las decisiones de los usuarios mientras navegan por el contenido.

En esta publicación, mostramos cómo usar el tipo de dispositivo actual del usuario como contexto para mejorar la efectividad de su Amazon Personalizerecomendaciones basadas en Además, mostramos cómo utilizar dicho contexto para filtrar recomendaciones de forma dinámica. Aunque esta publicación muestra cómo se puede usar Amazon Personalize para un caso de uso de video a pedido (VOD), vale la pena señalar que Amazon Personalize se puede usar en múltiples industrias.

¿Qué es Amazon Personalizar?

Amazon Personalize permite a los desarrolladores crear aplicaciones con el mismo tipo de tecnología ML que utiliza Amazon.com para recomendaciones personalizadas en tiempo real. Amazon Personalize es capaz de ofrecer una amplia gama de experiencias de personalización, incluidas recomendaciones de productos específicos, reclasificación personalizada de productos y marketing directo personalizado. Además, como un servicio de IA completamente administrado, Amazon Personalize acelera las transformaciones digitales de los clientes con ML, lo que facilita la integración de recomendaciones personalizadas en sitios web, aplicaciones, sistemas de marketing por correo electrónico y más.

¿Por qué es importante el contexto?

El uso de los metadatos contextuales de un usuario, como la ubicación, la hora del día, el tipo de dispositivo y el clima, brinda experiencias personalizadas para los usuarios existentes y ayuda a mejorar la fase de inicio en frío para los usuarios nuevos o no identificados. El fase de arranque en frío se refiere al período en el que su motor de recomendaciones proporciona recomendaciones no personalizadas debido a la falta de información histórica sobre ese usuario. En situaciones en las que existen otros requisitos para filtrar y promocionar elementos (por ejemplo, en noticias y clima), agregar el contexto actual de un usuario (estación o hora del día) ayuda a mejorar la precisión al incluir y excluir recomendaciones.

Tomemos el ejemplo de una plataforma VOD que recomienda programas, documentales y películas al usuario. Según el análisis de comportamiento, sabemos que los usuarios de VOD tienden a consumir contenido de menor duración, como comedias de situación, en dispositivos móviles y contenido de mayor duración, como películas, en su televisor o computadora de escritorio.

Resumen de la solución

Ampliando el ejemplo de considerar el tipo de dispositivo de un usuario, mostramos cómo proporcionar esta información como contexto para que Amazon Personalize pueda aprender automáticamente la influencia del dispositivo de un usuario en sus tipos de contenido preferidos.

Seguimos el patrón de arquitectura que se muestra en el siguiente diagrama para ilustrar cómo se puede pasar automáticamente el contexto a Amazon Personalize. La derivación automática del contexto se logra mediante Amazon CloudFront encabezados que se incluyen en solicitudes como una API REST en Puerta de enlace API de Amazon que llama a un AWS Lambda Función para recuperar recomendaciones. Consulte el ejemplo de código completo disponible en nuestro Repositorio GitHub. Proporcionamos un Formación en la nube de AWS plantilla para crear los recursos necesarios.

En las siguientes secciones, veremos cómo configurar cada paso del patrón de arquitectura de muestra.

Elige una receta

Las recetas son algoritmos de Amazon Personalize que se preparan para casos de uso específicos. Amazon Personalize proporciona recetas basadas en casos de uso comunes para modelos de entrenamiento. Para nuestro caso de uso, construimos un sencillo recomendador personalizado de Amazon Personalize utilizando la receta de Personalización del usuario. Predice los elementos con los que un usuario interactuará en función del conjunto de datos de interacciones. Además, esta receta también utiliza elementos y conjuntos de datos de usuarios para influir en las recomendaciones, si se proporcionan. Para obtener más información sobre cómo funciona esta receta, consulte Receta de personalización del usuario.

Crear e importar un conjunto de datos

Aprovechar el contexto requiere especificar valores de contexto con interacciones para que los recomendadores puedan usar el contexto como características al entrenar modelos. También tenemos que proporcionar el contexto actual del usuario en el momento de la inferencia. El esquema de interacciones (consulte el siguiente código) define la estructura de los datos de interacción de usuarios a elementos históricos y en tiempo real. El USER_ID, ITEM_IDy TIMESTAMP Amazon Personalize requiere campos para este conjunto de datos. DEVICE_TYPE es un campo categórico personalizado que estamos agregando para este ejemplo para capturar el contexto actual del usuario e incluirlo en el entrenamiento del modelo. Amazon Personalize utiliza este conjunto de datos de interacciones para entrenar modelos y crear campañas de recomendación.

{ "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "ITEM_ID", "type": "string" }, { "name": "DEVICE_TYPE", "type": "string", "categorical": True }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0"
}

De manera similar, el esquema de elementos (consulte el siguiente código) define la estructura de los datos del catálogo de productos y videos. El ITEM_ID es requerido por Amazon Personalize para este conjunto de datos. CREATION_TIMESTAMP es un nombre de columna reservado pero no es obligatorio. GENRE y ALLOWED_COUNTRIES son campos personalizados que estamos agregando para este ejemplo para capturar el género del video y los países donde se permite reproducir los videos. Amazon Personalize utiliza este conjunto de datos de elementos para entrenar modelos y crear campañas de recomendación.

{ "type": "record", "name": "Items", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "ITEM_ID", "type": "string" }, { "name": "GENRE", "type": "string", "categorical": True }, { "name": "ALLOWED_COUNTRIES", "type": "string", "categorical": True }, { "name": "CREATION_TIMESTAMP", "type": "long" } ], "version": "1.0"
}

En nuestro contexto, datos históricos se refiere al historial de interacción del usuario final con videos y elementos en la plataforma VOD. Estos datos generalmente se recopilan y almacenan en la base de datos de la aplicación.

Para fines de demostración, usamos la biblioteca Faker de Python para generar algunos datos de prueba que imitan el conjunto de datos de interacciones con diferentes elementos, usuarios y tipos de dispositivos durante un período de 3 meses. Después de definir el esquema y la ubicación del archivo de interacciones de entrada, los siguientes pasos son crear un grupo de conjuntos de datos, incluir el conjunto de datos de interacciones dentro del grupo de conjuntos de datos y, finalmente, importar los datos de entrenamiento al conjunto de datos, como se ilustra en los siguientes fragmentos de código:

create_dataset_group_response = personalize.create_dataset_group( name = "personalize-auto-context-demo-dataset-group"
) create_interactions_dataset_response = personalize.create_dataset( name = "personalize-auto-context-demo-interactions-dataset", datasetType = ‘INTERACTIONS’, datasetGroupArn = interactions_dataset_group_arn, schemaArn = interactions_schema_arn ) create_interactions_dataset_import_job_response = personalize.create_dataset_import_job( jobName = "personalize-auto-context-demo-dataset-import", datasetArn = interactions_dataset_arn, dataSource = { "dataLocation": "s3://{}/{}".format(bucket, interactions_filename) }, roleArn = role_arn
) create_items_dataset_response = personalize.create_dataset( name = "personalize-auto-context-demo-items-dataset", datasetType = ‘ITEMS’, datasetGroupArn = items_dataset_group_arn, schemaArn = items_schema_arn ) create_items_dataset_import_job_response = personalize.create_dataset_import_job( jobName = "personalize-auto-context-demo-items-dataset-import", datasetArn = items_dataset_arn, dataSource = { "dataLocation": "s3://{}/{}".format(bucket, items_filename) }, roleArn = role_arn
)

Recopile datos históricos y entrene el modelo

En este paso, definimos la receta elegida y creamos una solución y una versión de la solución con referencia al grupo de conjuntos de datos definido previamente. Cuando crea una solución personalizada, especifica una receta y configura los parámetros de entrenamiento. Cuando crea una versión de la solución para la solución, Amazon Personalize entrena el modelo que respalda la versión de la solución según la receta y la configuración de entrenamiento. Ver el siguiente código:

recipe_arn = "arn:aws:personalize:::recipe/aws-user-personalization" create_solution_response = personalize.create_solution( name = "personalize-auto-context-demo-solution", datasetGroupArn = dataset_group_arn, recipeArn = recipe_arn
) create_solution_version_response = personalize.create_solution_version( solutionArn = solution_arn
)

Crear un punto final de campaña

Después de entrenar su modelo, lo implementa en un campaña. Una campaña crea y administra un punto final de escalado automático para su modelo entrenado que puede usar para obtener recomendaciones personalizadas usando el GetRecommendations API. En un paso posterior, usamos este punto final de campaña para pasar automáticamente el tipo de dispositivo como un contexto como parámetro y recibir recomendaciones personalizadas. Ver el siguiente código:

create_campaign_response = personalize.create_campaign( name = "personalize-auto-context-demo-campaign", solutionVersionArn = solution_version_arn
)

Crear un filtro dinámico

Al obtener recomendaciones de la campaña creada, puede filtrar los resultados en función de criterios personalizados. Para nuestro ejemplo, creamos un filtro para satisfacer el requisito de recomendar videos que solo se pueden reproducir desde el país actual del usuario. La información del país se transmite dinámicamente desde el encabezado HTTP de CloudFront.

create_filter_response = personalize.create_filter( name = 'personalize-auto-context-demo-country-filter', datasetGroupArn = dataset_group_arn, filterExpression = 'INCLUDE ItemID WHERE Items.ALLOWED_COUNTRIES IN ($CONTEXT_COUNTRY)'
) 

Crear una función Lambda

El siguiente paso en nuestra arquitectura es crear una función Lambda para procesar las solicitudes de API provenientes de la distribución de CloudFront y responder invocando el punto final de campaña de Amazon Personalize. En esta función de Lambda, definimos la lógica para analizar los siguientes encabezados HTTP de la solicitud de CloudFront y los parámetros de la cadena de consulta para determinar el tipo de dispositivo y el ID de usuario, respectivamente:

  • CloudFront-Is-Desktop-Viewer
  • CloudFront-Is-Mobile-Viewer
  • CloudFront-Is-SmartTV-Viewer
  • CloudFront-Is-Tablet-Viewer
  • CloudFront-Viewer-Country

El código para crear esta función se implementa a través de la plantilla de CloudFormation.

Crear una API REST

Para que la función Lambda y el punto de enlace de la campaña de Amazon Personalize sean accesibles para la distribución de CloudFront, creamos un punto de enlace de API REST configurado como un proxy de Lambda. API Gateway proporciona herramientas para crear y documentar API que enrutan solicitudes HTTP a funciones de Lambda. La función de integración de proxy de Lambda permite que CloudFront llame a una única función de Lambda para abstraer las solicitudes al punto final de la campaña de Amazon Personalize. El código para crear esta función se implementa a través de la plantilla de CloudFormation.

Crear una distribución de CloudFront

Al crear una distribución de CloudFront, debido a que se trata de una configuración de demostración, inhabilitamos el almacenamiento en caché mediante una política de almacenamiento en caché personalizada, lo que garantiza que la solicitud vaya al origen en todo momento. Además, usamos una política de solicitud de origen que especifica los encabezados HTTP requeridos y los parámetros de cadena de consulta que se incluyen en una solicitud de origen. El código para crear esta función se implementa a través de la plantilla de CloudFormation.

Recomendaciones de prueba

Cuando se accede a la URL de la distribución de CloudFront desde diferentes dispositivos (computadora de escritorio, tableta, teléfono, etc.), podemos ver recomendaciones de video personalizadas que son más relevantes para su dispositivo. Además, si se presenta un usuario frío, se presentan las recomendaciones adaptadas para el dispositivo del usuario. En las siguientes salidas de muestra, los nombres de los videos solo se usan para representar su género y tiempo de ejecución para que sea identificable.

En el siguiente código, a un usuario conocido que le encanta la comedia basada en interacciones pasadas y que accede desde un dispositivo telefónico se le presentan comedias de situación más breves:

Recommendations for user: 460 ITEM_ID GENRE ALLOWED_COUNTRIES 380 Comedy RU|GR|LT|NO|SZ|VN 540 Sitcom US|PK|NI|JM|IN|DK 860 Comedy RU|GR|LT|NO|SZ|VN 600 Comedy US|PK|NI|JM|IN|DK 580 Comedy US|FI|CN|ES|HK|AE 900 Satire US|PK|NI|JM|IN|DK 720 Sitcom US|PK|NI|JM|IN|DK

Al siguiente usuario conocido se le presentan largometrajes cuando accede desde un dispositivo de TV inteligente basado en interacciones pasadas:

Recommendations for user: 460 ITEM_ID GENRE ALLOWED_COUNTRIES 780 Romance US|PK|NI|JM|IN|DK 100 Horror US|FI|CN|ES|HK|AE 400 Action US|FI|CN|ES|HK|AE 660 Horror US|PK|NI|JM|IN|DK 720 Horror US|PK|NI|JM|IN|DK 820 Mystery US|FI|CN|ES|HK|AE 520 Mystery US|FI|CN|ES|HK|AE

A un usuario frío (desconocido) que accede desde un teléfono se le presentan programas más cortos pero populares:

Recommendations for user: 666 ITEM_ID GENRE ALLOWED_COUNTRIES 940 Satire US|FI|CN|ES|HK|AE 760 Satire US|FI|CN|ES|HK|AE 160 Sitcom US|FI|CN|ES|HK|AE 880 Comedy US|FI|CN|ES|HK|AE 360 Satire US|PK|NI|JM|IN|DK 840 Satire US|PK|NI|JM|IN|DK 420 Satire US|PK|NI|JM|IN|DK 

A un usuario frío (desconocido) que accede desde un escritorio se le presentan las mejores películas y documentales de ciencia ficción:

Recommendations for user: 666 ITEM_ID GENRE ALLOWED_COUNTRIES 120 Science Fiction US|PK|NI|JM|IN|DK 160 Science Fiction US|FI|CN|ES|HK|AE 680 Science Fiction RU|GR|LT|NO|SZ|VN 640 Science Fiction US|FI|CN|ES|HK|AE 700 Documentary US|FI|CN|ES|HK|AE 760 Science Fiction US|FI|CN|ES|HK|AE 360 Documentary US|PK|NI|JM|IN|DK 

El siguiente usuario conocido que accede desde un teléfono devuelve recomendaciones filtradas según la ubicación (EE. UU.):

Recommendations for user: 460 ITEM_ID GENRE ALLOWED_COUNTRIES 300 Sitcom US|PK|NI|JM|IN|DK 480 Satire US|PK|NI|JM|IN|DK 240 Comedy US|PK|NI|JM|IN|DK 900 Sitcom US|PK|NI|JM|IN|DK 880 Comedy US|FI|CN|ES|HK|AE 220 Sitcom US|FI|CN|ES|HK|AE 940 Sitcom US|FI|CN|ES|HK|AE 

Conclusión

En esta publicación, describimos cómo usar el tipo de dispositivo del usuario como datos contextuales para que sus recomendaciones sean más relevantes. El uso de metadatos contextuales para entrenar modelos de Amazon Personalize lo ayudará a recomendar productos que sean relevantes tanto para los usuarios nuevos como para los existentes, no solo a partir de los datos del perfil, sino también desde una plataforma de dispositivo de navegación. No solo eso, el contexto como la ubicación (país, ciudad, región, código postal) y la hora (día de la semana, fin de semana, día de la semana, temporada) abre la oportunidad de hacer recomendaciones relacionadas con el usuario. Puede ejecutar el ejemplo de código completo utilizando la plantilla de CloudFormation proporcionada en nuestro Repositorio GitHub y clonar los cuadernos en Estudio Amazon SageMaker.


Acerca de los autores


Gilles-Kuessan Satchivi
es un arquitecto de soluciones empresariales de AWS con experiencia en redes, infraestructura, seguridad y operaciones de TI. Le apasiona ayudar a los clientes a crear sistemas de buena arquitectura en AWS. Antes de unirse a AWS, trabajó en comercio electrónico durante 17 años. Fuera del trabajo, le gusta pasar tiempo con su familia y animar al equipo de fútbol de sus hijos.

Aditya Pendyala es Arquitecto de Soluciones Sénior en AWS con sede en Nueva York. Tiene una amplia experiencia en la arquitectura de aplicaciones basadas en la nube. Actualmente trabaja con grandes empresas para ayudarlas a crear arquitecturas de nube altamente escalables, flexibles y resilientes, y las guía en todo lo relacionado con la nube. Tiene una Maestría en Ciencias en Ciencias de la Computación de la Universidad de Shippensburg y cree en la cita "Cuando dejas de aprender, dejas de crecer".

Prabhakar Chandrasekaran es un administrador técnico sénior de cuentas con AWS Enterprise Support. Prabhakar disfruta ayudar a los clientes a crear soluciones de IA/ML de vanguardia en la nube. También trabaja con clientes empresariales brindándoles orientación proactiva y asistencia operativa, ayudándolos a mejorar el valor de sus soluciones cuando usan AWS. Prabhakar tiene seis AWS y otras seis certificaciones profesionales. Con más de 20 años de experiencia profesional, Prabhakar era ingeniero de datos y líder de programa en el espacio de servicios financieros antes de unirse a AWS.

punto_img

Información más reciente

punto_img