亚马逊AWS官方博客

借助 Amazon Personalize 提升电商个性化推荐效果的最佳实践

背景

当今电子商务网站和移动应用程序面临着为客户提供个性化在线购物体验的巨大挑战。随着商品种类和客户数量的不断增长,如何从海量商品中精准推荐最合适的商品,提高客户转化率和营收,成为电商企业的当务之急。

个性化推荐系统通过分析客户的历史行为数据(如浏览、加购物车、购买等),自动学习每个客户的偏好,并结合当下上下文,为其推荐感兴趣的个性化商品内容。相比传统的基于人工规则的推荐,基于机器学习的个性化推荐具有更强的精准度和智能化程度,是提升电商营销转化的利器。

Amazon Personalize 是亚马逊云科技提供的一个完全托管的机器学习服务,可以为开发者快速构建个性化推荐系统。它采用无服务器架构,用户只需准备好数据并调用 Amazon Personalize,就能部署业界一流的自然语言处理、计算机视觉、机器学习推荐算法模型。本文将介绍如何利用 Amazon Personalize 服务,结合电商业务最佳实践,构建高效的个性化推荐系统。

Amazon Personalize 使用

Amazon Personalize 的基础使用在此前已有多篇介绍,此处不做过多赘述,可以参考:

使用 Amazon Personalize 快速搭建推荐服务

Amazon Personalize 的工作流程及最佳实践

此篇 Blog 将集中于电商个性化推荐场景使用 Amazon Personalize 的最佳实践。

最佳实践

Dataset

对于电商场景,AWS Personalize 推荐了以下数据 schema 设计:

  • item schema
{
    "type": "record",
    "name": "Items",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "ITEM_ID",
            "type": "string"
        },
        {
            "name": "GENRES",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "TITLE",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "CATE",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "CATE_CNT",
            "type": "int"
        },
        {
            "name": "STATUS",
            "type": "int"
        },
        {
            "name": "GOOD_STATUS",
            "type": "int"
        },
        {
            "name": "PUB_TIME",
            "type": "long"
        },
        {
            "name": "TAG",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "ORIGIN_PRICE",
            "type": "double"
        },
        {
            "name": "CURRENT_PRICE",
            "type": "double"
        },
        {
            "name": "SALE_NUMBER",
            "type": "long"
        },
        {
            "name": "SALE_AMOUNT",
            "type": "double"
        },
        {
            "name": "DETAIL_PIC_NUM",
            "type": "int"
        },
        {
            "name": "CREATION_TIMESTAMP",
            "type": "long"
        }
    ],
    "version": "1.0"
}
  • User Schema
{
    "type": "record",
    "name": "Users",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "USER_ID",
            "type": "string"
        },
        {
            "name": "GENDER",
            "type": [
                "null",
                "int"
            ]
        },
        {
            "name": "ID_TYPE",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "REGISTER_TIME",
            "type": [
                "null",
                "long"
            ]
        },
        {
            "name": "PROVINCE",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        },
        {
            "name": "CITY",
            "type": [
                "null",
                "string"
            ],
            "categorical": true
        }
    ],
    "version": "1.0"
}
  • Interactions Schema(EVent_Type:click,wish,bag,buy)
{
    "type": "record",
    "name": "Interactions",
    "namespace": "com.amazonaws.personalize.schema",
    "fields": [
        {
            "name": "USER_ID",
            "type": "string"
        },
        {
            "name": "ITEM_ID",
            "type": "string"
        },
        {
            "name": "EVENT_TYPE",
            "type": "string"
        },
        {
            "name": "EVENT_VALUE",
            "type": [
                "float",
                "null"
            ]
        },
        {
            "name": "TIMESTAMP",
            "type": "long"
        },
        {
            "name": "DEVICE",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        },
        {
            "name": "PLATFORM",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        },
        {
            "name": "OS",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        },
        {
            "name": "OS_VERSION",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        },
        {
            "name": "CLIENT_VERSION",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        },
        {
            "name": "IMPRESSION",
            "type": [
                "string",
                "null"
            ],
            "categorical": true
        }
    ],
    "version": "1.0"
}

虽然亚马逊云科技提供了一些参考 schema,但更好的做法是根据自身业务场景和领域知识自定义设计 schema。上面 schema 是一个女装电商的真实案例,性别信息不是特别重要,绝大部分用户都是女性,年龄信息客户也没有收集,对于其他平台型电商,性别,年龄信息还是高质量的 metadata。

对于如果您添加您自己的类型为 string 的元数据字段,它必须包含 categorical 属性。对于 string 类型,一定要设置“categorical”: true 属性,一个类别的的取值最长 1000 个字符,就是 len(A|B|C|D|E…..) 最大 1000。

参数设置

下架商品处理

  • 在 Items Schema 中添加一个`STATUS`字段,默认值为 1
  • 当商品下架时,通过 PutItem 更新对应 ItemId 的`STATUS`值为 0
  • 在获取推荐时使用 Filter 过滤掉`STATUS=0`的项目

防止推荐重复商品

如不想给用户推荐已经下单或者加入购物车的商品,甚至是不想用已经有过交互记录的商品,需要创建 Filter。

  • 在数据集组中选择需要过滤的数据集
  • 选择创建过滤器
  • 在过滤器中选择输入表达式

以下表达式排除用户加入购物车或下单的项目:

EXCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("bag", "buy")

以下表达式包括用户以任何方式与之交互的项目:

INCLUDE ItemID WHERE Interactions.EVENT_TYPE IN ("*")
  • 在 get_recommendations 里面添加 filterArn 参数

当然,也可以通过用户或者商品的 meta data 进行过滤,以及多个条件过滤。

算法配方选择

Amazon Personalize 提供两种不同的资源来给用户提供推荐:1)根据预定义好的场景选择推荐器(不需要再选择算法和训练模型)。电商推荐器支持五种预置的场景(https://docs.aws.amazon.com/personalize/latest/dg/ECOMMERCE-use-cases.html),推荐器对 Dataset 有相对固定的要求(ECOMMERCE 数据集 https://docs.aws.amazon.com/personalize/latest/dg/ECOMMERCE-datasets-and-schemas.html);2)根据需求选择算法配方,然后自行训练模型。本章重点介绍第2种训练模型的方式,目前 Personalize 一共支持六种类型的算法配方(前面推荐的 Dataset 最佳实践适用这种方式,属于自定义数据集 Custom dataset)。

根据不同的场景,我们可以选择不同的算法配方。

  1. 对用户进行推荐,如首页场景。为不同的用户提供个性化推荐,可以使用 USER_PERSONALIZATION 算法配方来训练模型,提高用户参与度和转化率。
  2. 对用户进行排序推荐,如精选 Collection 场景。为不同的用户提供个性化的精选列表或搜索结果排序,可以使用 PERSONALIZED_RANKING 算法配置训练模型。PERSONALIZED_RANKING 模型会根据指定用户的预测兴趣水平重新排列一组输入项目(如特定的节日促销商品或搜索结果),从而创建一个个性化列表。PERSONALIZED_RANKING 能够提升客户体验,增加客户忠诚度和参与度。
  3. 推荐热门或流行的项目,如 APP 中的近期流行展示版块。要推荐热门或流行的商品,可以使用 POPULAR_ITEMS 算法配方。如果您的客户非常重视其他用户正在互动的内容,那么使用 POPULAR_ITEMS 会很合适。比如推荐爆火的某些商品。
  4. 推荐相似项目,如购物车场景。在推荐类似的商品时,如购物车中的“你可能还喜欢”,“经常被一起购买的商品”,或产品无货时“相似推荐”等场景,可以使用 RELATED_ITEMS 算法配方。推荐类似商品可以帮助客户发现新商品,从而提高用户转化率。
  5. 推荐下一个最佳操作。如果希望实时为您的用户推荐下一个最佳操作,比如注册会员计划,可以 PERSONALIZED_ACTIONS 算法配方。推荐下一个最佳操作可以提高客户忠诚度,产生更多收入,并改善用户体验。
  6. 用户细分。根据历史数据进行用户细分,可以使用 USER_SEGMENTATION 算法配方,筛选出最有可能与具有特定属性的项目互动的用户。获取用户细分可帮助您创建营销活动,向不同的用户细分推广不同的商品。

在电商的不同场景中,USER_PERSONALIZATION,PERSONALIZED_RANKING,和 RELATED_ITEMS 是最常使用的算法配方。

游客/匿名用户推荐

  • 建议对于匿名用户,建议生成一个唯一的 userid,这个后续会一直与用户注册的真实的用户 ID 绑定,后续可以用这个 userid 进行推荐;
  • 若现在客户的匿名用户 ID 与注册之后是两个 ID,可以在匿名用户 PutEvents 的时候创建 sessionid,后续注册用户通过同样一个 sessionid 将匿名的交互与注册之后的交互进行关联,这样同样一个用户的点击记录就可以关联起来

推荐策略

可使用不同配方菜单或活动相结合,满足差异化推荐需求。

对于 USER_PERSONALIZATION 算法配方,可调节 exploration 权重(0-1 之间),控制历史行为与实时探索的影响:

– exploration_weight 更低(越接近 0),更关注最新的用户行为

– exploration_weight 更高(越接近 1),更关注之前的用户偏好或相关性较低的项目(如新商品)

在采用 User-Personalization-v2 算法配方时,Amazon Personalize 会为您处理 exploration 配置。为确保推荐包含新商品,您可以根据创建时间戳使用 promotions 来包含新商品。

其他建议

总结

通过合理设计数据 Schema、选择合适的算法配方、优化推荐策略和模型训练策略等综合措施,可以有效提升个性化推荐系统在电商场景的营销转化率。AWS Personalize 作为完全交钥匙的推荐服务,大幅降低了算法工程的技术门槛,是电商企业推荐系统建设的优选方案。

本篇作者

汤哲

亚马逊云科技行业解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计,同时致力于 AWS 云服务知识体系的传播与普及。在软件开发、安全防护等领域有实践经验,目前关注电商、直播领域。

刘燕峰

亚马逊云科技资深解决方案架构师,负责基于亚马逊云科技的云计算方案架构的咨询和设计,有丰富的移动互联网、大型平台类应用系统研发和架构设计实践经验。拥有十年以上 IT 领域从业经历,曾专注于数字原生企业的云架构设计和咨询,现负责制造行业技术架构设计和支持。

彭金冬

亚马逊云科技解决方案架构师,负责电商行业客户的架构设计和技术支持。