Personalización de recomendaciones con AWS Lambda - Amazon Pinpoint

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Personalización de recomendaciones con AWS Lambda

En Amazon Pinpoint, puede recuperar recomendaciones personalizadas de un modelo de recomendación y agregarlas a los mensajes que envíe desde campañas y recorridos. Un modelo de recomendación es un tipo de modelo de aprendizaje automático (ML) que encuentra patrones en los datos y genera predicciones y recomendaciones basadas en los patrones que encuentra. Predice lo que un usuario en particular preferirá de un determinado conjunto de productos o elementos, y proporciona esa información como un conjunto de recomendaciones para el usuario.

Mediante el uso de modelos de recomendación con Amazon Pinpoint, puede enviar recomendaciones personalizadas a los destinatarios de mensajes en función de los atributos y el comportamiento de cada destinatario. Con AWS Lambda, también puede personalizar y mejorar estas recomendaciones. Por ejemplo, puede transformar dinámicamente una recomendación de un solo valor de texto (como un nombre de producto o un ID) a contenido más sofisticado (como un nombre de producto, una descripción y una imagen). Y puede hacerlo en tiempo real, cuando Amazon Pinpoint envía el mensaje.

Esta característica está disponible en las siguientes regiones de AWS: Este de EE. UU. (Norte de Virginia), Oeste de EE. UU. (Oregón), Asia-Pacífico (Bombay), Asia-Pacífico (Sídney) y Europa (Irlanda).

Uso de recomendaciones en mensajes

Para utilizar un modelo de recomendación con Amazon Pinpoint, comienza creando una solución de Amazon Personalize e implementando esa solución como una campaña de Amazon Personalize. A continuación, se crea una configuración para el modelo de recomendación en Amazon Pinpoint. En la configuración, especifique la configuración que determina cómo recuperar y procesar los datos de recomendación de la campaña de Amazon Personalize. Esto incluye si se debe invocar una función de AWS Lambda para realizar un procesamiento adicional de los datos que se recuperan.

Amazon Personalize es un servicio de AWS diseñado para ayudarle a crear modelos de ML que ofrezcan recomendaciones personalizadas en tiempo real para los clientes que utilizan las aplicaciones. Amazon Personalize lo guía a través del proceso de creación y entrenamiento de un modelo de ML y, posteriormente, de preparación e implementación del modelo como una campaña de Amazon Personalize. A continuación, puede recuperar recomendaciones personalizadas en tiempo real de la campaña. Para obtener más información sobre Amazon Personalize, consulte la Guía para desarrolladores de Amazon Personalize.

AWS Lambda es un servicio informático que permite ejecutar código sin aprovisionar ni administrar servidores. El código se empaqueta y se carga en AWS Lambda como una función de Lambda. AWS Lambda ejecuta a continuación la función cuando esta se invoca. Una función se puede invocar manualmente, automáticamente en respuesta a eventos o en respuesta a solicitudes de aplicaciones o servicios, como Amazon Pinpoint. Para obtener más información sobre cómo crear e invocar funciones de Lambda, consulte la Guía para desarrolladores de AWS Lambda.

Después de crear una configuración de Amazon Pinpoint para un modelo de recomendación, puede agregar recomendaciones del modelo a los mensajes que envíe desde campañas y recorridos. Para ello, utilice plantillas de mensaje que contienen variables de mensaje para los atributos recomendados. Un atributo recomendado es un punto de enlace dinámico o atributo de usuario diseñado para almacenar datos de recomendación. Estos atributos se definen al crear la configuración para un modelo de recomendación.

Puede utilizar variables para los atributos recomendados en los siguientes tipos de plantillas de mensaje:

  • Plantillas de correo electrónico, para los mensajes de correo electrónico que envía desde campañas o recorridos.

  • Plantillas de notificaciones push, para notificaciones push que envía desde campañas.

  • Plantillas de SMS, para mensajes de texto SMS que envía desde campañas.

Para obtener más información acerca del uso de modelos de recomendación con Amazon Pinpoint, consulte Modelos de machine learning en la Guía para usuarios de Amazon Pinpoint.

Si configura Amazon Pinpoint para invocar una función de Lambda que procesa datos de recomendación, Amazon Pinpoint realiza las siguientes tareas generales cada vez que envía recomendaciones personalizadas en un mensaje para una campaña o recorrido:

  1. Evalúa y procesa la configuración y el contenido del mensaje de la plantilla de mensaje.

  2. Determina que la plantilla de mensaje está conectada a un modelo de recomendación.

  3. Evalúa los parámetros de configuración para conectarse al modelo y utilizarlo. Estos se definen mediante el recurso Modelo de recomendación para el modelo.

  4. Detecta una o más variables de mensaje para los atributos recomendados definidos por los parámetros de configuración del modelo.

  5. Recupera los datos de recomendación de la campaña de Amazon Personalize que se especifican en la configuración del modelo. Utiliza la operación GetRecommendations de la API de tiempo de ejecución de Amazon Personalize para realizar esta tarea.

  6. Agrega los datos de recomendación adecuados a un atributo dinámico recomendado (RecommendationItems) para cada destinatario del mensaje.

  7. Invoca la función de Lambda y envía los datos de recomendación de cada destinatario a esa función para su procesamiento.

    Los datos se envían como un objeto JSON que contiene la definición de punto de enlace para cada destinatario. Cada definición de punto de conexión incluye un campo RecommendationItems que contiene una matriz ordenada de 1 a 5 valores. El número de valores de la matriz depende de los parámetros de configuración del modelo.

  8. Espera a que la función de Lambda procese los datos y devuelva los resultados.

    Los resultados son un objeto JSON que contiene una definición de punto de enlace actualizada para cada destinatario. Cada definición de punto de enlace actualizada contiene un nuevo objeto Recommendations. Este objeto contiene 1-10 campos, uno para cada atributo recomendado personalizado definido en los parámetros de configuración del modelo. Cada uno de estos campos almacena datos de recomendación mejorados para el punto de enlace.

  9. Utiliza la definición de punto de enlace actualizada para que cada destinatario sustituya cada variable de mensaje por el valor adecuado para ese destinatario.

  10. Envía una versión del mensaje que contiene las recomendaciones personalizadas para cada destinatario del mensaje.

Para personalizar y mejorar las recomendaciones de esta manera, comience por crear una función de Lambda que procese las definiciones de punto de conexión enviadas por Amazon Pinpoint y devuelva las definiciones de punto de conexión actualizadas. A continuación, asigne una política de función de Lambda a la función y autorice a Amazon Pinpoint a invocar la función. A continuación, configure el modelo de recomendación en Amazon Pinpoint. Al configurar el modelo, especifique la función que se va a invocar y defina los atributos recomendados que se van a utilizar.

Creación de la función de Lambda

Para obtener información sobre cómo crear una función de Lambda, consulte Introducción en la Guía para desarrolladores de AWS Lambda. Cuando diseñe y desarrolle la función, tenga en cuenta los siguientes requisitos y directrices.

Datos de eventos de entrada

Cuando Amazon Pinpoint invoca una función de Lambda para un modelo de recomendación, envía una carga que contiene la configuración y otros ajustes para la campaña o recorrido que envía el mensaje. La carga incluye un objeto Endpoints, que es un mapa que asocia los ID de puntos de enlace con las definiciones de punto de enlace para los destinatarios de los mensajes.

Las definiciones de punto de conexión utilizan la estructura definida por el recurso de punto de conexión de la API de Amazon Pinpoint. Sin embargo, también incluyen un campo para un atributo dinámico recomendado denominado RecommendationItems. El campo RecommendationItems contiene uno o varios elementos recomendados para el punto de conexión, tal como se devuelve de la campaña de Amazon Personalize. El valor de este campo es una matriz ordenada de 1 a 5 elementos recomendados (como cadenas). El número de elementos de la matriz depende del número de elementos recomendados que haya configurado Amazon Pinpoint para recuperar para cada punto de conexión o usuario.

Por ejemplo:

"Endpoints": { "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z" }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z" } }

En el ejemplo anterior, la configuración de Amazon Pinpoint relevante es:

  • El modelo de recomendación está configurado para recuperar tres elementos recomendados para cada punto de enlace o usuario. (El valor de la propiedad RecommendationsPerMessage se establece en 3). Con esta configuración, Amazon Pinpoint recupera y agrega solo los elementos recomendados primero, segundo y tercero para cada punto de conexión o usuario.

  • El proyecto está configurado para utilizar atributos de usuario personalizados que almacenan el nombre, el apellido y el vecindario de cada usuario. (El objeto UserAttributes contiene los valores de estos atributos).

  • El proyecto está configurado para utilizar un atributo de punto de enlace personalizado (AddressType) que indica si el punto de enlace es la dirección preferida del usuario (canal) para recibir mensajes del proyecto. (El objeto Attributes contiene el valor de este atributo).

Cuando Amazon Pinpoint invoca la función de Lambda y envía esta carga como datos de evento, AWS Lambda transfiere los datos a la función de Lambda para su procesamiento.

Cada carga útil puede contener datos de hasta 50 puntos de enlace. Si un segmento contiene más de 50 puntos de conexión, Amazon Pinpoint invoca la función repetidamente, para un máximo de 50 puntos de conexión a la vez, hasta que la función procesa todos los datos.

Datos y requisitos de respuesta

A medida que diseñe y desarrolle la función de Lambda, tenga en cuenta las cuotas para los modelos de machine learning. Si la función no cumple las condiciones definidas por estas cuotas, Amazon Pinpoint no podrá procesar y enviar el mensaje.

Tenga en cuenta también los siguientes requisitos:

  • La función debe devolver definiciones actualizadas de punto de enlace en el mismo formato que proporcionaron los datos de evento de entrada.

  • Cada definición de punto de conexión actualizada puede contener 1-10 atributos recomendados personalizados para el punto de conexión o el usuario. Los nombres de estos atributos deben coincidir con los nombres de atributo que especifique al configurar el modelo de recomendación en Amazon Pinpoint.

  • Todos los atributos personalizados recomendados deben devolverse en un solo objeto Recommendations para cada punto de enlace o usuario. Este requisito ayuda a garantizar que no se produzcan conflictos de nombres. Puede agregar el objeto Recommendations a cualquier ubicación en una definición de punto de enlace.

  • El valor de cada atributo recomendado personalizado tiene que ser una cadena (valor único) o una matriz de cadenas (valores múltiples). Si el valor es una matriz de cadenas, le recomendamos que mantenga el orden de los elementos recomendados que devolvió Amazon Personalize, como se indica en el campo RecommendationItems. De lo contrario, es posible que el contenido no refleje las predicciones del modelo para un punto de enlace o usuario.

  • La función no debe modificar otros elementos en los datos del evento, incluidos otros valores de atributo para un punto de enlace o usuario. Solo debe agregar y devolver valores para los atributos personalizados recomendados. Amazon Pinpoint no aceptará actualizaciones de ningún otro valor de la respuesta de la función.

  • La función tiene que estar alojada en la misma región de AWS que el proyecto de Amazon Pinpoint que está invocando la función. Si la función y el proyecto no están en la misma región, Amazon Pinpoint no puede enviar datos de eventos a la función.

Si no se cumple ninguno de los requisitos anteriores, Amazon Pinpoint no será capaz de procesar y enviar el mensaje a uno o más puntos de conexión. Esto puede provocar un error en la actividad de la campaña o recorrido.

Por último, se recomienda reservar 256 ejecuciones simultáneas para la función.

En general, la función de Lambda debe procesar los datos de evento que envía Amazon Pinpoint y devolver definiciones de punto de conexión modificadas. Puede hacerlo iterando a través de cada punto de enlace en el objeto Endpoints y, para cada punto de enlace, creando y estableciendo valores para los atributos recomendados personalizados que desee usar. El controlador de ejemplo siguiente, escrito en Python y siguiendo con el ejemplo anterior de datos de eventos de entrada, muestra esto:

import json import string def lambda_handler(event, context): print("Received event: " + json.dumps(event)) print("Received context: " + str(context)) segment_endpoints = event["Endpoints"] new_segment = dict() for endpoint_id in segment_endpoints.keys(): endpoint = segment_endpoints[endpoint_id] if supported_endpoint(endpoint): new_segment[endpoint_id] = add_recommendation(endpoint) print("Returning endpoints: " + json.dumps(new_segment)) return new_segment def supported_endpoint(endpoint): return True def add_recommendation(endpoint): endpoint["Recommendations"] = dict() customTitleList = list() customGenreList = list() for i,item in enumerate(endpoint["RecommendationItems"]): item = int(item) if item == 1210: customTitleList.insert(i, "Hanna") customGenreList.insert(i, "Action") elif item == 1527: customTitleList.insert(i, "Catastrophe") customGenreList.insert(i, "Comedy") elif item == 1815: customTitleList.insert(i, "Fleabag") customGenreList.insert(i, "Comedy") elif item == 2009: customTitleList.insert(i, "Late Night") customGenreList.insert(i, "Drama") elif item == 4582: customTitleList.insert(i, "Agatha Christie\'s The ABC Murders") customGenreList.insert(i, "Crime") elif item == 6542: customTitleList.insert(i, "Hunters") customGenreList.insert(i, "Drama") endpoint["Recommendations"]["Title"] = customTitleList endpoint["Recommendations"]["Genre"] = customGenreList return endpoint

En el ejemplo anterior, AWS Lambda transfiere los datos de evento al controlador como parámetro event. El controlador itera a través de cada punto de enlace del objeto Endpoints y establece valores para los atributos recomendados personalizados denominados Recommendations.Title y Recommendations.Genre. La instrucción return devuelve cada definición de punto de conexión actualizada a Amazon Pinpoint.

Siguiendo con el ejemplo anterior de datos de eventos de entrada, las definiciones de punto de enlace actualizadas son:

"Endpoints":{ "endpointIDexample-1":{ "ChannelType":"EMAIL", "Address":"sofiam@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.875Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"SofiaMartínez", "UserAttributes":{ "LastName":[ "Martínez" ], "FirstName":[ "Sofia" ], "Neighborhood":[ "East Bay" ] } }, "RecommendationItems":[ "1815", "2009", "1527" ], "CreationDate":"2020-02-26T18:56:24.875Z", "Recommendations":{ "Title":[ "Fleabag", "Late Night", "Catastrophe" ], "Genre":[ "Comedy", "Comedy", "Comedy" ] } }, "endpointIDexample-2":{ "ChannelType":"EMAIL", "Address":"alejandror@example.com", "EndpointStatus":"ACTIVE", "OptOut":"NONE", "EffectiveDate":"2020-02-26T18:56:24.897Z", "Attributes":{ "AddressType":[ "primary" ] }, "User":{ "UserId":"AlejandroRosalez", "UserAttributes":{ "LastName ":[ "Rosalez" ], "FirstName":[ "Alejandro" ], "Neighborhood":[ "West Bay" ] } }, "RecommendationItems":[ "1210", "6542", "4582" ], "CreationDate":"2020-02-26T18:56:24.897Z", "Recommendations":{ "Title":[ "Hanna", "Hunters", "Agatha Christie\'s The ABC Murders" ], "Genre":[ "Action", "Drama", "Crime" ] } } }

En el ejemplo anterior, la función modificó el objeto Endpoints que recibió y devolvió los resultados. El objeto Endpoint de cada punto de enlace contiene ahora un nuevo objeto Recommendations, que contiene los campos Title y Genre. Cada uno de estos campos almacena una matriz ordenada de tres valores (como cadenas), donde cada valor proporciona contenido mejorado para un elemento recomendado correspondiente en el campo RecommendationItems.

Asignación de una política de función de Lambda

Antes de poder utilizar la función de Lambda para procesar los datos de recomendación, debe autorizar a que Amazon Pinpoint invoque la función. Para conceder permiso de invocación, asigne una política de función de Lambda a la función. Una política de función de Lambda consiste en una política de permisos basada en el recurso que designa qué entidades pueden usar una función y qué acciones pueden realizar dichas entidades. Para obtener más información, consulte Uso de políticas basadas en recursos para AWS Lambda en la Guía para desarrolladores de AWS Lambda.

La siguiente política de ejemplo permite a la entidad principal del servicio de Amazon Pinpoint usar la acción lambda:InvokeFunction para una campaña de Amazon Pinpoint en particular (campaignId) en un proyecto de Amazon Pinpoint concreto (projectId):

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:accountId:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } } }

La política de función requiere un bloque Condition que incluye una clave AWS:SourceArn. Esta clave especifica qué recurso puede invocar la función. En el ejemplo anterior, la directiva permite que una campaña concreta invoque la función.

También puede escribir una política que permita a la entidad principal del servicio de Amazon Pinpoint utilizar la acción lambda:InvokeFunction para todas las campañas y recorridos de un proyecto de Amazon Pinpoint específico (projectId). La siguiente política de ejemplo se muestra esto:

{ "Sid": "sid", "Effect": "Allow", "Principal": { "Service": "pinpoint.us-east-1.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "{arn:aws:lambda:us-east-1:accountId:function:function-name}", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } } }

A diferencia del primer ejemplo, la clave AWS:SourceArn del bloque Condition de este ejemplo permite que un proyecto en particular invoque la función. Este permiso se aplica a todas las campañas y recorridos del proyecto.

Para escribir una política más genérica, utilice caracteres comodín (*) que sustituyan a varios caracteres. Por ejemplo, puede utilizar el siguiente bloque de Condition para permitir que cualquier proyecto de Amazon Pinpoint invoque la función:

"Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*" } }

Si desea utilizar la función de Lambda con todos los proyectos de la cuenta de Amazon Pinpoint, le recomendamos que configure el bloque Condition de la política de la forma anterior. Sin embargo, como práctica recomendada, debe crear políticas que incluyan solo los permisos necesarios para realizar una acción específica en un recurso específico.

Autorización de Amazon Pinpoint para invocar la función

Después de asignar una política de función de Lambda, puede agregar permisos que permitan a Amazon Pinpoint invocar la función para un proyecto, campaña o recorrido específico. Puede hacerlo utilizando AWS Command Line Interface (AWS CLI) y el comando add-permission de Lambda. En el ejemplo siguiente se muestra cómo hacer esto para un proyecto específico (projectId):

$ aws lambda add-permission \ --function-name function-name \ --statement-id sid \ --action lambda:InvokeFunction \ --principal pinpoint.us-east-1.amazonaws.com \ --source-arn arn:aws:mobiletargeting:us-east-1:accountId:recommenders/*

El ejemplo anterior está preparado para Unix, Linux y macOS. En Microsoft Windows, reemplace el carácter de continuación de línea de barra diagonal inversa (\) por un símbolo de intercalación (^).

Si el comando se ejecuta correctamente, aparecerá un resultado similar al siguiente:

{ "Statement": "{\"Sid\":\"sid\", \"Effect\":\"Allow\", \"Principal\":{\"Service\":\"pinpoint.us-east-1.amazonaws.com\"}, \"Action\":\"lambda:InvokeFunction\", \"Resource\":\"arn:aws:lambda:us-east-1:111122223333:function:function-name\", \"Condition\": {\"ArnLike\": {\"AWS:SourceArn\": \"arn:aws:mobiletargeting:us-east-1:111122223333:recommenders/*\"}}}" }

El valor de Statement es una versión de cadena JSON de la instrucción que se agregó a la política de la función Lambda.

Configuración del modelo de recomendación

Para configurar Amazon Pinpoint para invocar la función de Lambda de un modelo de recomendación, especifique los siguientes ajustes de configuración específicos de Lambda para el modelo:

  • RecommendationTransformerUri: esta propiedad especifica el nombre o el nombre de recurso de Amazon (ARN) de la función de Lambda.

  • Attributes: este objeto es un mapa que define los atributos personalizados recomendados que la función agrega a cada definición de punto de conexión. Cada uno de estos atributos se puede utilizar como variable de mensaje en una plantilla de mensaje.

Puede especificar estos valores mediante el recurso Modelos de recomendación de la API de Amazon Pinpoint (al crear la configuración de un modelo) o el recurso Modelo de recomendación de la API de Amazon Pinpoint (si actualiza la configuración de un modelo). También puede definir estos ajustes mediante la consola de Amazon Pinpoint.

Para obtener más información acerca del uso de modelos de recomendación con Amazon Pinpoint, consulte Modelos de machine learning en la Guía para usuarios de Amazon Pinpoint.