发布于: Feb 8, 2022
“StockX 是一家来自底特律的初创公司,希望以独特的竞价/出价市场革新电子商务体系。我们平台的设计灵感源自纽约证券交易所,并将运动鞋与街头潮牌服饰等商品视为高价值可交易商品。凭借运营透明化的市场交易体验,StockX 将帮助消费者以真实市场价购买备受追捧的真品。”
2019年,StockX 公司正经历高速增长,我们的机器学习(ML)工程师小组也开始尝试使用 Amazon Personalize 在主页上添加“为您推荐”产品推荐行。最终,这项新功能成了主页上最受欢迎的部分。在本文中,我们将分享 StockX 使用 Amazon Personalize 的整个过程,探讨如何借此提供出色的定制化用户体验。
我们的市场动态需要提供个性化的用户体验。StockX 网站的流量激增,在很大程度上源自相关商品市场供应量的下降。没错,在运动鞋与街头潮牌服饰市场上,最受欢迎的一定是那些需要提前预订的限量版产品。虽然客户对于产品多样性的追求一直在增加,但是客户经常搜索的还是那些最新发布的特定热门款式。最终,我们的平台开始经历一波又一波强度几乎接近 DDoS 的合法流量,让我们意识到再不扩大后端的规模伸缩能力、我们将无法顺利开展自身业务。另外,我们的团队还计划在黑色星期五之前上线“为您推荐”功能。这项功能的基础,自然是强大的推荐引擎——我们希望该引擎同样拥有强大的扩展能力,可以实时调整以适应不断变化的客户意图。
在公司成立的三年当中,我们逐渐将用户体验的个性化视为核心发展目标。我们的客户群体已经从单纯的运动鞋爱好者,逐步发展为越来越多休闲及抱有好奇心的新用户。感恩节购物季则为我们提供绝佳机会,以更具个性化的体验吸引这些新客户,最终提高整体客户忠诚度。尽管即将到来的 2019 年假期为我们的计划增加了额外的时间限制,但 Amazon Personalize 切实帮助我们为不断发展的用户群体打造精心设计且引人入胜的体验,最终顺利应对季节性流量激增带来的一系列挑战。
早期阶段
我们的团队最初打算寻求第三方供应商来填补平台中的个性化缺失环节。但是,购买现成解决方案不仅成本高昂,而且对于我们独特的电商业务而言也缺少灵活性。我们需要更大的灵活施展空间,但又不太可能单纯依靠内部解决方案搞定全部难题。
接下来,我们开始考虑构建起与 Amazon Personalize 核心推荐引擎(分层递归神经网络,简称HRNN)类似的自定义神经网络。虽然我们的团队具备一定的自主建模能力,但却难以处理一系列令人头痛的变量:健壮性、可扩展性以及开发周期等等。我们需要争分夺秒地构建优质服务,为我们的客户提供引人入胜的体验并在假期购物季来临前及时将其上线。为了确定到底是该自建模型、还是直接选择现成解决方案,我们列举了构建机器学习微服务架构的基本要求。经过整理,我们的具体要求如下:
- 数据收集——建立高性能推荐程序的第一步,自然是对网站进行正确跟踪。除了通过调查、评级以及偏好设置等方式收集明确的客户喜好指标之外,我们还需要考虑从原始点击流中提取隐式证据,借此建立起更加精彩的使用体验。而收集点击流数据,自然成为创建高性能推荐程序的重要基础。
- 数据位置——在收集到正确的数据类型之后,下一步就是为该数据确定准确的存储位置。为此,我们需要找到点击流与产品目录数据所在的位置,并获取访问权限。
- 数据整理与特征工程——在找到数据源与存储位置之后,接下来需要找到其中真正有价值的部分。这是一项高度依赖于经验的过程,因为在进行实际尝试之前,我们往往很难预判算法如何从数据当中提取信号。
- 模型开发——这一步也是整个开发生命周期当中,数据科学元素最为密集的部分。大多数团队会以 notebook 中的原型为起点,逐步尝试解决业务问题,而后以面向对象的方式进行模型训练。这一步骤与之前各步骤相互依存,前者中的数据可用性也将直接影响候选模型集的实际组成。
- 模型测试与评估——在完成模型训练之后,必须启用快速健全性检查以执行定性分析,借此补充训练指标。我们建议大家先创建一个小规模可视化应用程序,用于在模型提出的建议内容旁边提示用户正在与哪些产品进行交互。这能让我们更直观地审视不同算法以及超参数设置对建议结果产生的影响,同时结合业务经验对结果做出比较。
- ETL开发——在确定数据中的主要特征之后,我们还应该建立一套自动化ETL体系,用于提取原始数据、执行特征工程,并将数据放置在生产训练程序能够轻松访问的位置。这一步至关重要,因为ETL中的任何细微错误都可能拉低输入数据质量、最终影响输出结果的置信度。更可怕的是,这类错误往往很难在训练结束后、输出可视化之前被检测出来。
- 后端服务开发——将模型推理机制与后端服务打包在一起,可以显著改善监控、稳定性与抽象性水平。对我们来说,这也是一条重要的“护堤”,防止流量的过度涌入。我们在 Amazon Web Services Lambda 中选择了无服务器解决方案,将 getRecommendations API 打包在 Amazon Personalize 当中。
- 生产部署—— CI/CD 等自动化流程,用于训练并部署模型的最新版本,保证建议结果始终符合客户的实际需求。一旦这一步骤出现问题,可能导致建议结果过时,最终降低客户参与度。在完成这一部分之后,我们的机器学习微服务架构也就构建完成了。
构建本地解决方案,意味着我们需要从头开始完成以上八个具体步骤。 Amazon Personalize 提供自动化特征工程与模型开发(步骤3和4)功能,帮助我们快速搞定这两个最为耗时的环节。使用 Amazon Personalize 提供的标准 HRNN(一套由 Amazon 本身使用过的、经过重重考验的实践模型),我们的用例只需要一套仅包含五列数据的简单数据集即可开始训练。将这两个步骤交由 Amazon Personalize 之后,我们得以专注于实现强大的 ETL、后端与生产部署系统。此外,我们还省下了更多时间用于实现第 5 步中提到的可视化流程——这是以往需要开发完整技术栈时,我们根本不敢想象的。当然,直接使用 Amazon Personalize 也会带来一定妥协,意味着我们将无法对标准算法中的具体杠杆做出针对性调整。
这自然在我们的团队内部引发激烈讨论:我们到底是该承担起高昂的成本,以换取对模型的完全控制;还是以可调整性为代价,完全信任 Amazon Web Services 提供的解决方案?最终,我们决定信任 Amazon Web Services在构建企业级机器学习模型方面的专业水平。我们的团队预见到,内部开发的深度学习推理引擎在可扩展性方面一定会带来巨大风险。如果不拿出时间进行负载测试,我们将很难衡量大规模流量涌入时系统的实际弹性,这将把 StockX 的整体业务置于随时可能崩溃的危险境地。另外,生产型深度学习微服务架构是个相对较新的议题,与此相关的文献资料并不完备,这同样令问题变得更加复杂。
相关文章