x

嘘。这是更好的侧面。

(试试风景吧!)

算法之旅

数据科学是如何融入Stitch Fix的manbetx万博体育app 官方下载

日志 p 1 - p = α + + Zb 最小值 j 一个 Σ Σ 一个 ij ij 酸处理 一个 ij = 1 j Σ 一个 ij { 0 1 } , 我,我 一个 ij < k j j Σ x t = f ( x t , u t , w t ) p ( 我→j ) = 分对数 ( β 0 + β 1 x 1 ) p ( 1 ) = β ex_cell + α 1 p ( 1 | 设计师 ) + α 2 p ( 1 | 客户端 ) c 年代 j

在Stmanbetx万博体育app 官方下载itch Fix,我们正在改变人们找到他们喜欢的东西的方式。我们的客户想要符合他们个人喜好的完美衣服,但又没有搜索的负担或不得不跟上当前的潮流。我们的商品是从市场中挑选出来的,并辅以我们自己的设计来填补空白。它是最新的、极其广泛的和多样化的——确保每个人都能得到一些东西。在这个“市场”的两边都有丰富的数据,使得Stitch Fix可以成为一个matchmaker,将客manbetx万博体育app 官方下载户与他们喜欢的风格联系起来(他们自己永远也不会找到的)。

我们的商业模式使前所未有的数据科学成为可能,不仅在推荐系统,而且在人力计算,资源管理,库存管理,算法时装设计和许多其他领域。实验和算法开发深深地扎根于Stitch Fix所做的一切。manbetx万博体育app 官方下载我们将在滚动的过程中详细描述几个示例。

那么数据是怎样的呢?除了我们从客户那里得到的丰富的反馈数据,我们还收到了大量关于我们的服装和客户的前期数据。我们的买家和设计师捕捉尺寸和风格细节,我们的客户在注册时填写一份配置文件,这是经过校准的,以最少的客户努力为我们获得最有用的数据。

让我们首先浏览一下装运请求的填写过程,看看在这个过程中扮演角色的许多算法中的一些,然后缩小到更大的范围。

客户体验第1部分:简介和要求

如前所述,当客户初次注册时,他或她填写一个Style Profile(它可以在任何时候更新)。然后,安排交付就很容易了:一个算法被用来填充一个日历,她从中选择一个交付日期。

仓库作业

发货请求由将其分配给仓库的算法处理。该算法根据其位置相对于客户的组合计算每个仓库的成本函数以及不同仓库中的库存如何符合客户的需求。

这组成本计算是为每个客户进行的,以产生一个成本矩阵。

客户对仓库的分配是一个二元优化问题。

全局最优包括这个特定客户的仓库分配。

然后,装运请求被路由到Humans + Machines造型算法。

智能机器

首先,机器执行各种算法,以产生库存的排序列表。

筛选步骤从考虑中删除客户端在以前的发货中接收到的样式,或客户端要求避免的具有属性的样式。

对于剩下的每个样式,机器会尝试评估这个特定客户会喜欢那个特定样式的相对可能性。这是一个困难的问题,我们用许多不同的方法来解决它——这里只讨论其中的几个。但总的来说,请注意,我们使用不同算法的匹配分数多次标记每个项目,然后对它们进行排序。

在某种程度上,这个问题是一个经典的协同过滤问题:给定不同客户对不同风格的反馈,我们必须填补(稀疏)矩阵中的空白,以预测发送一种风格给尚未收到它的客户的结果。因此,我们<我>做使用一些标准的协同过滤算法(例如,那些喜欢你喜欢的东西的人也喜欢……)。

然而,与大多数协同过滤问题不同的是,我们有很多明确的数据,既来自客户的自我描述,也来自服装属性。这有助于解决冷启动问题,如果我们采用考虑这些数据的算法,还可以获得更高的准确性。

其中一种方法是混合效果建模,它特别有用,因为我们的问题是纵向的:它让我们了解(和跟踪)我们的客户的偏好随着时间的推移,无论是单独的还是作为一个整体。

除了许多可用的显式特性外,我们还可以从其他数据(结构化和/或非结构化)中推断出一些客户端和风格的特别相关的潜在(未说明的)特性,并使用它们来提高性能。

例如,一个新客户可能会告诉我们,她穿的是中号衬衫,但她到底喜欢穿小号的中号衬衫还是大号的中号衬衫?同样的问题也适用于我们库存中特定款式的服装。(请注意,在这张图中,为了简单起见,我们将适合视为一维的,但实际上在Stitch Fix,我们将它视为多维的。)manbetx万博体育app 官方下载

通过客户的适合反馈和购买历史,我们可以了解特定的客户和风格属于这个范围。这些潜在的特征可以用于我们的混合效应模型和其他地方。

将我们的问题进一步超越经典的协同过滤,我们还需要考虑许多照片和文本数据:库存风格的照片、Pinterest的板,以及我们从客户那里收到的大量书面反馈和请求说明。

有时候很难用语言来描述你的风格偏好,但是当你看到它的时候你就知道了——所以我们让我们的机器查看顾客喜欢的衣服的照片(比如从Pinterest上),然后在我们的库存中寻找视觉上相似的物品。我们使用训练过的神经网络来推导“固定”图像的向量描述,然后计算这些向量与库存中每件物品的预先计算向量之间的余弦相似度。

自然语言处理用于根据客户的请求说明和来自其他客户关于同一项目的文本反馈对项目进行评分。

所有这些算法得分——以及其他许多类似的得分——在排序和提供选项给人类专业造型师考虑时都会被考虑在内。

相亲

一旦完成这个机器排名,装运请求将被路由到一个人。

人类比机器更具有异质性。所有的机器都是一样的——只选一个。但人类造型师将更适合某些客户,而不是其他客户。所以我们用算法来优化这个匹配。

为了做到这一点,我们首先计算每个可用的造型师和在当前期间要求发货的每个客户之间的匹配分数。这个匹配分数是客户和设计师(如果有的话)之间的历史,以及客户声明的和潜在的风格偏好和设计师之间的相似性的复杂函数。

随后,造型师分配优化问题与上面描述的仓库分配问题类似,除了(a)它只需要考虑那些等待发货的客户,(b)我们必须更频繁地重新运行优化问题,以考虑到造型师在工作时排队的不同规模。

智能工具的智能人类

虽然机器非常适合死记硬背的计算任务,但还有其他任务需要即兴发挥、了解社会规范和与客户打交道的能力。这些任务属于人类的范围。这就是我们的造型师进行只有人类才能完成的计算的地方。

为了给货物定型,造型师在定制的界面中选择一项任务,以帮助她快速深入地了解客户。

我们的人工计算团队对这个界面的各种变化进行了大量测试,帮助我们了解造型师是如何做出决定的。

这些知识在许多方面帮助我们:提高我们的算法造型,提高我们的造型师训练程序,并不断改进造型师使用拼写盒的界面。

最终,造型师会从库存清单中挑选好衣服,然后写一份个人笔记,描述客户在特定场合如何搭配这些衣服,或者如何与衣柜里的其他衣服搭配。

这就完成了造型过程,现在可以处理货物了。

智能物流

在这一处理步骤中可以发现各种运筹学问题。

例如,给定要装运的物品,挑选者通过仓库来填满箱子的最佳路线是什么?

这个拾取路径问题是NP-hard Traveling Salesman problem的一个实例。在实践中,我们甚至更进一步地研究可以同时挑选的货物的最优分组。

然后将货物按客户要求的交付日期交付给客户。

客户体验第二部分:试穿和反馈

但这仅仅是个开始。

她打开盒子,很高兴,留下她想要的,然后寄回去休息,然后<我>告诉我们她对每件衣服的看法。她和Stitch Fix之间有一种共生关系,她给了我们非常深刻的反馈,我们不仅用这些反馈来更好地为她manbetx万博体育app 官方下载服务,也可以更好地为其他客户服务。

最后一段

以下是填写单批货物申请的流程:客户端创建一个概要文件和要求一批风格,我们匹配他们仓库,我们人类造型算法和设计师一起工作,来选择风格,设计师写了一张小纸条,我们交付货物,和客户保持他们喜欢什么,返回休息,并为我们提供了反馈。

但这只是一次装运。缩小后,我们可以把系统看作一个整体。在这个层次上,业务的另外两个方面变得清晰起来:

(1)我们必须不断补充库存,为客户购买和/或设计新服装,这为我们提供了从丰富的数据中获益的绝佳机会;

(2)我们必须预测客户的需求,以确保在正确的时间有足够的资源到位。

让我们先看看如何预测客户的需求,然后再考虑库存管理和新样式开发。

状态机

我们看待这个需求预期问题(以及相关问题)的一种方式是考虑每个客户端在每个时间点的“状态”。他们是新客户吗?他们是通过推荐还是自己来的?他们的衣柜快满了吗?在生活发生变化后,她们是否正处于扩充衣橱的阶段?或者只是想尝试新事物?根据他们的状态,他们可能会有不同的发货节奏,不同的电子邮件联系方式,等等。

我们记录了我们与每个客户的每一个接触点——我们发送的每一个项目,收到的每一个反馈,每一个推荐,每一封电子邮件等等。

有了这些数据,我们就可以了解客户的状态以及他们处于不同状态时的需求。然后,我们可以检测状态的变化,并考虑可能的触发器。这个过程本身就能让我们的客户更快乐。

一旦我们定义并理解状态,检测并理解客户在状态之间的转换,我们就可以开发状态转换矩阵和马尔科夫链模型,使我们能够研究系统级的效应。

需求建模

这些马尔科夫链模型的众多用途之一是预测未来的需求,这很重要,因为我们经常需要在库存到达仓库前几个月购买库存。我们还必须确保在正确的时间拥有正确数量的资源和可用的人工造型师。

库存管理

由于客户需求导致的库存损耗最终必须由购买新的库存来抵消。其中一个挑战是正确把握购买的时机,这样我们就可以为造型师保持足够的库存可用性,同时最小化订购成本和持有成本(与库存曲线下区域相关的运营成本和机会成本)。

满足未来的需求只是我们的库存管理挑战之一:我们还必须适当地将库存分配给不同的仓库,偶尔也会捐赠旧库存,为新款式腾出空间。我们可以使用算法来帮助我们处理这些过程。

(注意,情况要比这个简单的例子复杂得多,因为我们必须深入研究每个仓库中不同类型和风格的服装的可用性。但为了保持整洁,我们在这里只使用简单的插图。)

买什么款式的多少?哪些商品应该送到哪个仓库?什么时候应该捐赠存货?

我们通过使用一个系统动力学模型来回答这些问题,将其与历史数据拟合,并在预测中给出量化的不确定性时使用它进行鲁棒优化。

新风格的发展

容量的挑战并不是库存替换的唯一考虑因素:我们还希望购买和开发新的服装,以持续改善我们的库存,帮助我们的造型师给更广泛的客户基础带来更大的快乐。

并且为我们的Stitch Fix独家品牌设计新风格提供了一个很好的manbetx万博体育app 官方下载机会,为特定的客户细分定制新设计,而其他品牌往往服务不足。

我们从遗传算法中获得了灵感:我们使用重组、突变和适应度测量——自然母亲在自然选择中进化时使用的相同机制。

第一步是将每个样式看作一组属性(“基因”)。

然后以这种方式考虑我们的大量风格,并考虑我们对每种风格的客户反馈(“适应性”)。

现在考虑通过重新组合现有样式的属性,并可能稍微改变它们来创建新样式。请注意,可能的组合数量非常大(∏<我>k<年代米一个ll>我)。

下一步,我们会稍微偏离规范的遗传算法:我们不会简单地根据适合度进行选择,然后释放随机重组和突变,作为下一代风格,我们在某种程度上更挑剔,会把什么样的风格纳入我们的清单。

我们首先开发一个模型,用于说明给定的一组属性适合目标客户端的程度。然后,我们用这个模型来强调我们认为有很高可能性恋爱的一系列属性。

然后,我们与人类设计师合作,审查和完善这个系列,并最终产生下一代的风格。

这些新款式被生产出来,并提供给造型算法,然后让顾客满意,并继续进化的循环。

我们的算法团队确实有很多工作要做。

到目前为止,我们已经接触了一些项目在我们的三个垂直对齐的团队:造型算法,商品算法和客户算法。

数据平台

数据平台团队提供数据和计算基础设施——以及一组内部SaaS产品——允许垂直排列的数据科学家高效地进行分析、编写算法并将其投入生产。该平台很好地封装了数据分布、并行化、自动伸缩、故障转移等特性。这使得数据科学家可以把主要精力放在<我>科学方面仍然享有可伸缩系统的好处。数据平台工程师专注于构建……呃,平台。也就是说,它们没有业务逻辑和需求的负担,它们没有上下文。这是全堆栈数据科学家的工作。其核心思想是“工程师不应该编写ETL”。我们的数据平台团队使数据科学家能够进行算法开发,从概念到生产。

DOC_1066 lda2vec 年代 j (1) ,年代 j (2) ,年代 j (3) 年代 j 服装向量 j c (1) c (2) c (3) c 客户向量 一个 B TX c 1 2月 14 客户端数据 装运要求 项目的选择 设计师指出 客户反馈 仓库作业 客户 (1) 新风格的发展 库存管理 (2) 状态机 需求建模 仓库分配。 人类的计算 相亲 Recomm。系统 物流优化 最小值 j x Σ Σ d ij x ij 酸处理 x ij { 0 1 } x ij S≤| | - 1 年代 V,年代 i, j S, i j Σ x ij = 2 j Σ 在哪里 d ij = | p (y) - p j (y) | + | p (x) - p j (x) | + β ij 如果 k 酸处理( p (x) > γ k ) & ( p (x) < γ k + 1 )& ( p j (x) > γ k ) & ( p j (x) < γ k + 1 ) 然后 β ij = 2 最小值 (( p (x) - γ k ), ( γ k + 1 - p (x) ), ( p j (x) - γ k ), ( γ k + 1 - p j (x) )) 其他的 β ij = 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 在哪里 x k = 一些因素(例如季节,最近的邮件,月相) p ( 反式。我→j ) = 分对数 ( β 0 + β 1 x 1 + β 2 x 2 + ) 客户端状态 Σ 需求 t = n 我,不 p (需求| ) ij = f ( shipping_cost ij , shipping_time ij , inventory_match ij ,…… ) 0.235 0.172 0.624 0.382 0.832 客户 仓库 j 成本 0.347 0.825 0.722 0.533 0.874 0.193 TX CA WI 作业 一个 0 1 0 1 0 0 0 0 1 TX CA WI 最小值 j 一个 Σ Σ 一个 ij ij 酸处理 一个 ij = 1 j Σ 一个 ij { 0 1 } , 我,我 一个 ij < k j j Σ 成本矩阵 优化 解决方案 解决在这个客户端行缺失的元素… 吗? 0.83 吗? 0.54 吗? 0.27 吗? 0.92 吗? 0.13 吗? 吗? 0.85 0.76 吗? 匹配 反馈 0.47 0.23 0.59 0.14 0.62 0.90 显式的 客户端功能 0.21 0.74 0.53 0.26 0.85 显式的 风格 特性 c 年代 j 吗? 吗? 吗? 吗? 吗? 潜在的 风格 特性 吗? 吗? 吗? 吗? 吗? 吗? 潜在的 客户端功能 ij = f ( fix_history ij , 反馈 ij , style_profile_alignment ij ,…… ) 比赛的分数 0.235 0.624 0.172 0.825 0.347 0.722 0.193 0.874 0.533 造型师 j 客户 作业 一个 0 1 0 1 0 0 0 0 1 最小值 j 一个 Σ Σ 一个 ij ij 酸处理 一个 ij = 1 j Σ 一个 ij { 0 1 } , 我,我 一个 ij < k j j Σ P ( corrict_prediction. ) = β ex_cell + α 1 P ( 1 | 设计师 ) + α 2 P ( 1 | 客户端 ) 一个 B 日志= α + + Zb , b ~ N (0,Σ) p 1 - p { { 固定 影响 随机 影响 比赛成绩, 协同过滤 混合效应模型 卷积神经网络 NLP的请求说明 如潜在的大小 年代 l 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 刺激 摄入 API load_my_data (params…) run_my_algorithm (params . .) deploy_to_production (params…) 余弦 相似 0.62 固定 图像 她喜欢 向量 描述 图像 的衣服 在库存 向量 描述 17 42 35 86 59 17 42 35 86 59 兴奋 开始! 我有, 婚礼 即将到来的 嗯。我的衣橱 是完整的 datetime 事件 状态1 状态2 状态3 状态2 时间 需求 仓库 CA仓库 TX仓库 WI仓库 PA仓库 GA仓库 补充 分配 捐赠 交付 返回 (1) 新风格的发展 库存管理 模型 x t = f ( x t , u t , w t ) 在哪里 x =库存水平 u =购买、分配和清除 决定 w =需求预测 总成本 TC 持有成本 h 订货费用 K 订单数量 成本 每单位 TC * 问* 问* K 需求 h 1/2 ( ) 2.14 h / w 1.27 1.32 h / w 9.53 1.87 h / w 3.93 1.52 h / w 8.42 1.17 h / w 2.55 2.83 h / w 2.84 1.72 h / w 4.42 1.19 h / w 1.93 1.73 h / w 6.14 1.32 h / w 9.23 1.52 h / w 7.26 2.31 h / w 3.24 1.52 h / w 8.42 1.52 h / w 7.23 1.52 h / w 8.42 衣橱 仓库 初始种群 选择 复合 突变 下一个人口


埃里克·科尔森,布莱恩·科菲,塔里克·瑞秋和利兹·克鲁兹


迈克·博斯托克的<一个href="https://d3js.org/" target="_">D3.js和吉姆Vallandingham的<一个href="http://vallandingham.me/scroller.html" target="_">scrollytelling代码

灵感来自于
Stephanie Yee和Tony Chu的<一个href="http://www.r2d3.us/visual-intro-to-machine-learning-part-1/" target="_">机器学习的视觉介绍,
Victor Powell和Lewis Lehe<一个href="http://setosa.io/ev/" target="_">解释视觉项目,
和Ilya Katsov<一个href="https://highlyscalable.wordpress.com/2015/03/10/data-mining-problems-in-retail/" target="_">零售领域的数据挖掘问题

这次互动之旅的目的只是为了在Stitch Fix分享一些数据科学的各种应用。manbetx万博体育app 官方下载可以肯定的是,我们很难将范围限制在上面的10个故事——还有更多的故事已经在制作中,甚至还有更多的故事正在构思中。然而,我们所称的应用数据科学中的许多内容长期以来一直作为优雅的微观经济学理论的多样化主体而存在。由于缺乏数据和计算资源来实际应用这些概念,历史上这些概念在教科书之外的使用一直受到限制;目前将这些概念局限于纯粹理论的最后堡垒是人和文化(组织是出了名的难以改变)。然而,Stitchmanbetx万博体育app 官方下载 Fix似乎没有这些障碍。也许我们所做的唯一特别的事情就是通过一种独特的商业模式赋予我们丰富的数据,然后培育一个数据科学家可以成功的环境。由此,好奇心、创造力和想要产生影响的欲望为剩下的铺平了道路。