共计 7385 个字符,预计需要花费 19 分钟才能阅读完成。
导读:本次分享的主题是哈啰打造自动化增长算法闭环的实际,上篇将次要介绍哈啰 C 端算法场景和挑战及哈啰被动增长算法。
哈啰 C 端算法场景和挑战
首先看一下哈啰的 C 端算法大略有哪些场景。哈啰 C 端算法最终的目标是要服务于咱们出行业务的增长,同时也要搀扶咱们生存服务相干的业务。目前在端内流量类型有很多,包含咱们惯例的 banner、弹窗,还有一些组件。端外咱们会对打车逆风车鼎力投放广告,次要是在公共的广告平台,包含在一些运营商的零碎上投广告。还有一些收费流量,次要是指在微信和抖音这样的公域和私域流量。另外,有一块特色就是咱们线下的门店以及两轮车,咱们能够把它看成一些智能的硬件,或者说一些智慧的门店,通过咱们的 AloT 平台接入到公司零碎中,也是一个重要的流量起源。
这些不同的流量类型和咱们当初的各种业务穿插起来,就会发现哈啰的 C 端场景太多了,而对哈啰这样一个中等规模的公司来讲,就呈现了场景泛滥和开发的人力非常无限的矛盾。同时咱们本人团队也会有一些技术谋求,如果只反对业务,不仅对咱们没有成长,而且成果也未必会达到最好。所以业务撑持和技术深耕间也是一个矛盾。
既然搜广推有这么多服务场景和矛盾,咱们在最后半年的实际过程中,一直造成如何解决这个矛盾的方法论,根本的思维就是不要反复造轮子。咱们在进步算法开发效率的同时,各个域将行业最新经典的技术和自主翻新相结合。
最后咱们撑持业务还是用一些最简略的定制的模型,包含 Tree 模型和 CTR 预估中的一些经典的模型,业务也只是从体量最大的出行业务开始,其中对两轮这部分它的支出经营咱们进行一个业务策略的高度形象。
在 2021 年,咱们开始依照一个新的方法论打造整个算法体系。首先咱们要有对立的 C 端算法体系。C 端算法体系无论是搜广推,还是咱们说的营销以及其余的流量散发等,它的根底技术是高度同质的,是有可能做对立的。
另外咱们在计算的过程中,想把哈啰增长引擎给打造进去。咱们底层的机器学习平台是咱们自主研发的贾维斯 AI 平台,所有算法同学都在下面工作。下层的话,咱们在算法铺量的过程中打造了搜推引擎和营销引擎,对少部分的场景,也就是对两轮支出经营开始做自动化经营的实际。自动化经营,就是要对策略要做一个高度形象。而策略也是分不同层级的,咱们会参考 OKR 拆解的办法,把策略从一个指标级的策略,拆解到 KR 级的策略,再拆解到 Task 级的策略。因为用户经营的工作是绝对标准化的,所以这个流程是齐全能够自动化的拆解下来。
对于打造对立的 C 端算法体系,让各个域不要反复造轮子,让咱们来看一张图。最右边一块是哈啰所有的流量,最左边一块是哈啰所有投放的内容,包含一些营销内容,以及咱们传统的社区,还有一些咱们的电商商品和本地生存的一些服务商品的内容。
这些商品从流量侧看,咱们要晋升流量效率,这个就是 eCPM。从业务侧的视角看,咱们要晋升它的用户增量以及支出,也就是 GMV,而用户增长次要看 ROI。这几个域都会用同一套的技术体系,也就是业界罕用的多路召回和 Rank 算法。咱们这外面的各个模块和业界会稍有不同,有些畛域比如说 Rank 中咱们会重点建设因果推断及 L2R 的技术。在多路召回中,咱们会建设 Graph Embedding,以及一些知识库搜寻这样的召回体系。
咱们会把基于流量的算法叫被动增长算法,因为不须要咱们额定造一些资源位,打搅用户做一些推送。而咱们将用户增长和支出增长定义为被动的增长算法。
哈啰被动增⻓算法
4w2h
被动增长算法是咱们对一个用户心愿进行一些营销动作,也就是广义的营销算法。整个营销它是一个链路,用的是一套 4w2h 的体系。第一,你要抉择什么样的人来做投放,就是精准定向。第二,你投放的内容是什么,就是咱们的素材,包含文案、图片、卖点等等。第三,你要抉择什么机会,抉择什么素材来投放,这在咱们这块叫做智能触达,包含 push 也是放在这一块。第四,投放给一个用户的营销,基本上会通过流动的模式,或者说工作的模式等等,工作是能够自动化的生成。当然最重要的一块是咱们的补贴,因为大部分的营销它要是有肯定的实实在在的开销,能力把用户给最终吸引过去,所以要有补贴,补贴在出行和本地生存畛域是一个很外围的事件。
精准定向
精准定向,在哈啰这边它有两种模式。一种是从一个大的池子中挑选出少部分的精准用户,咱们这叫行业包。还有一种是 LookAlike,给一个种子人群,依据类似度扩充它的规模,在咱们这边的支流办法是行业包。因为和广告畛域不同,咱们的用户池子其实是已知的,次要是哈啰注册的 5 亿用户,而后在池子中捞一部分人对各个不同的业务进行一些拉新促活。
最简略的形式其实是有监督,但有监督会有很多的问题。比如说第一个问题,高潜的用户会很快耗尽。像很多新业务,如果是用有监督的形式,如果这个池子比拟小,可能一两个月池子就被耗尽了,接下来就没有高潜用户能够营销。另外,咱们有很多动作是拉新,新用户显著特色是比拟稠密的,可能样本也比拟少。然而最大的问题是在精准定向这个畛域,它是没有真正的负样本的,比方一个用户的营销不起作用,不肯定是他对这个业务不感兴趣,有可能他是对营销不感兴趣。因为人的心理特地简单,大部分人看到一个营销动作,本能其实不会有太大的反馈。
咱们的负样本并不是一个真正负样本,应该叫未知样本。所以这里的解决办法就要用到半监督的形式。即从未知的样本中,辨认出真正的负样本,咱们会应用 PU- Learning 技术,最终的成果是在等同 ROI 的根底上,把咱们拉新的潜客规模扩充 2 -10 倍。同时像特色少的问题,基本上会用穿插业务的特色,比方打车和酒店就是一个高度相干的业务,他们之间特色就有很多能够复用。另外两轮是咱们用户基数最大的一个业务,很多业务线在拉新建设的时候,都会复用两轮的特色。
接下来咱们来看 PU- Learning 是怎么做的。一开始咱们用的是最传统的 TSA 算法,也就是特务样本技术。咱们首先会在正样本中挑选出一些,伪装它是一个负样本,混在未知样本的池子里,相当于人为进步一个正负样本辨别的难度,而后在未知样本和正样本当选进去一些特务样本,伪装它是一个负样本,和正样本在一块训练一个分类模型,而这个分类模型咱们是心愿尽量把负样本中的未知特务样本,也就是那局部正样本和真正的负样本给辨别开来。
一旦分类器建设之后,咱们就用第一步的分类器来给所有样本打一个分,把其中分低的作为真正的负样本。而后再建第二个样本池子,在这样重复的迭代过程中,直到咱们把特务样本齐全辨认进去,做到一个收敛状况。通过这种办法,咱们就能把未知样本中真正的负样本给辨认进去。
前面咱们又做了一些改良,因为传统 TSA 算法会有几个问题。第一个问题是你正负样本划分的阈值,它其实是一刀切的,并不是一个正当的值。所以咱们用 EM 算法把散布给聚类起来,学到了它真正的正负样本的阈值。这其实也是对正样本进行了数据加强,因为正样本在咱们这边非常少。而另一个改良点,咱们一开始用的 PU- Learning 基准模型其实是 GBM,GBM 套着 GBM,工夫长了肯定会实现信息茧房效应。所以咱们在第一步和第二步的模型前面进行了一个辨别,第二步模型改成 DeepFM,通过 GBM 和 DeepFM 的穿插迭代的学习,缩小信息茧房的问题。
刚刚讲的是第一种形式——行业包,即在一个大的池子中捞出一部分精准人群。另一种形式是 LookAlike,这是更传统的一种形式。咱们用的技术是 Graph Embedding,通过用户之间的行为或者某种关联给用户作为点,用户有行为关联的建设一个边,最初把用户的 Embedding 给学习进去,从而通过这种向量,用类似度的计算能把用户的人群扩充。
Graph Embedding 当初曾经绝对成熟,然而在哈啰的次要挑战是这个图怎么构建。因为它和传统电商不同,最重要的是辨认出强的行为,怎么把用户之间的边给连接起来。
第一种咱们会用时空,实在用户在出行中的时空空间上的关联给它建设图,比如说同一个地块,同一个时间段,两个不同的用户产生了同类行为,如给单车开关锁,这样它就能连一个边,但这种行为还不够强。咱们参考了电商畛域的行为构建形式,咱们在想是不是咱们整个 APP 所有的事件,所有的物料的行为都能够用来建图,于是咱们在首页进行了摸索。
这里有一个图,比如说下面的 icon,两头的 banner,还有上面的种种其余的营销物料,其实在不同资源地位以及每一个物料,它都有一个物料 ID,同时它也是某个业务推出来的物料,这三者的联合就能惟一确定一个 item 是什么货色。用户在咱们整个首页点的所有 item 的一个序列,通过这种序列也能够来结构用户之间的边。
咱们的技术模型选用的是 EGES,因为哈啰还是一种偏工具的 APP,而且行为的确没有像电商的购买行为这么强,所以 SideInfo 对咱们来讲就会更加重要。
同时哈啰的用户量还是很大的,当然咱们选的是近几天沉闷的用户作为咱们的向量池子来扩大,非沉闷用户的话也就给刨掉了。如果是全量的话,几亿的用户算下来计算的性能耗不起。过后的向量引擎选的是 Milvus,一开始咱们也试验过其余向量引擎,但比照下来 Milvus 的性能是最好的。咱们在几千万用户以及几十维向量这样的规模下,能够做到小时级别的全量用户的向量化。Milvus 线上的查问也能达到近实时查问的水平,最终的试验成果通过向量的类似度进行量级的放大。咱们能够扩充人群的规模 10-1000 倍不等,同时保障 ROI 相比人工策略始终是晋升的。当然放大规模越大,晋升幅度也会越小。
咱们在构图的过程中用的是用户的工夫序列,但目前还没有把一些非信息流的页面的事件,或者说各个业务私域的一些事件序列给拉排进来。这须要更对立的数据埋点体系的建设,也会是往年的一个重点。
智能补贴
有了定向的人群之后,咱们就须要晓得怎么做补贴。补贴能够认为是这几个畛域中对咱们最外围的一个域。补贴这个域,基本上因果推断曾经逐步成为技术支流。一开始咱们用的是 CTR 预估的办法,来看一个用户喜不喜欢点券之类的货色。但实际上用户并不是只有点和不喜爱点这两类,而是有四类,包含营销敏感、天然转化、金石为开和副作用类。因为局部用户其实你不营销,他本人喜爱这个业务可能也会来,营销并没有带来增量的作用。还有局部用户对营销比拟恶感,营销之后他反而不来了,影响他的留存和沉闷等等。
举个具体的例子,假如咱们有两类用户各 1 万集体,卖一个商品是 10 元,券是 8 折券,当初想给这两拨人来决定到底给谁发 8 折的券。比如说本来状况下 B 类用户发券了之后的购买率是 1.5%,不发券是 1.4%,但实际上发券这个动作带来的增量的购买率只有 0.1%,A 类用户反而带来的增量购买率更大,是 0.5%。所以并不是说 B 类用户的购买率高,更应该给他发券,而是 A 类用户发券带来的增量效应更大,才更应该给他发券。
那 B 类用户到底应不应该发券呢?其实还能够看收益的增量。如果把咱们发过券之后,打折带来的损失以及咱们购买率晋升带来的增益,合起来算的话,B 类用户甚至还是亏的。不发券能挣 1400 块钱,然而发券之后因为打了折,反而只能挣 1200 块钱。所以对 B 类用户就不应该发券,只用对 A 类用户进行发券。
所以对因果效应的建模是咱们的一个重点,咱们用的是 Uplift model。第一版咱们建了两种 Uplift model,它实用的场景不同。第一种是基于 Tree 构建的,原始的 Uplift Tree 相当于是做一个增量转化率的预估。增量转化为什么选 Tree,第一它是对 Uplift 进行间接建模的,而不是说建两个不同的模型,它的建模精度会比拟好。另外 Tree 的可解释性是绝对强的,咱们晓得 Tree 基本上是通过决裂准则来模仿指标最大化的一个过程。咱们能够比照一下一般的决裂准则和 Uplift Tree 的决裂准则有什么区别,一般决裂准则就是信息增益最大化,Uplift Tree 最原始的形式是通过散布散度最大,来让咱们的干涉组和被干涉组,所谓干涉组也就是发券组,这两个组的散布差别最大,从而达到 Uplift 最大的成果。上面是一个示意图,通过 Uplift Tree 的决裂,咱们最终能够把人群真正辨别成 4 类不同类型的人群,最初只对营销敏感的这部分人群进行真正的营销,而其余三类并不需要营销。
当然这个原始的 Uplift Tree,它是针对转化率做增量的,而咱们事实的业务中大部分场景指标是收益,而不是转化率。所以咱们进行一个改良,把决裂准则改良成一种新的形式来做收益的最大化。
假如决裂前数据集是 θ,咱们就能够计算决裂前的收益是多少,也就是发券组和不发券组人均效益进行一个差,而后乘以一个平方,它其实是对欧氏间隔散布散度最大化的一个扩大的改良。而后是依据某个特色对以后节点进行决裂,失去一个决裂后的因果效应,决裂前和决裂后的因果效应的差,其实就代替了咱们之前的信息增益的最大化。通过决裂前和决裂后因果效应差值的最大化,来作为咱们的一个决裂准则,就这样一直抉择新的特色,这是第一层的决裂。第二层就选另一个特色接着决裂,一直抉择这种迭代递归的过程,最终整个构建进去。这就是一个 TreeLift 的过程。
TreeLift 的难点是怎么结构样本,因为事实中不存在平行时空,咱们不可能对一个人同时发券又不发券。那怎么样让模型学习发券相比不发券的增量收益呢?咱们想到是用群体来代替个体,如果是两个同质的群体,其实能够学习发券群体和不发券群体之间的增量收益。这就通过结构随机试验的形式,也是当初 Uplift 畛域的一个支流办法。最终的成果,咱们在自有的数据集和业界的公开数据集及传统的经典办法做了一个比照,发现它的 Uplift 曲线是最大的,相比咱们本人的响应模型,在场景下的收益大略有 4.7% 的晋升。
另一个是咱们的 DeepLift 的模型,DeepLift 模型是咱们在 DragonNet 的根底上进行改良的。DragonNet 有几个长处,它不须要用随机试验,随机试验的结构老本是很高的,你的模型前面基本上没有方法做主动的更新。咱们用 DragonNet 通过向量化模仿了一个随机试验,同样它又结构了一个偏向分的子网络,可能做一个样本筛选,能够把因果无关的一些特色变量筛掉,而大量的特色其实和因果并没有关系。咱们在 DragonNet 根底上做了一些改良,第一是减少了模型的复杂度,第二是扭转它的 loss,更加的贴近业务。因为原始的 DragonNet 其实和原始的 Uplift Tree 一样,并没有以收益为指标,而是以转化率为指标。因而咱们各种 loss 减少了新的 G 的网络,以及扭转了它根底的 loss 的形式。咱们 DeepLift 模型的网络结构能够看左边,DeepLift 咱们更多应用在一些须要自动更新的场景。
智能文案
晓得了什么人,也晓得补贴多少钱,这个素材自身对用户的冲击力是更间接的。咱们通过智能文案对整体的点击率,不同款式的点击率,包含 banner、push、弹窗等等,造成了 30%-100% 不等。营销畛域的文案广泛都是比拟短、比拟正式的那种文字,和电商 title、视频的题目不太一样。另外绝对于内容畛域,咱们的语料并没有那么短缺,所以一开始它的文案生成用的是模板的形式,在模版中加上一些动静词包。但在往年曾经革新成了模板加上语句通顺度的辨认这样的形式,大量裁减咱们的文案候选集,减少多样性,缩小用户的疲劳。
另外在有监督模型根底上,咱们减少了 EE 的模块,因为文案的多样性,还有新文案,新素材的疾速试验是特地重要的。具体 EE 的算法,咱们用的是最奢侈的 Epsilon-Greedy 算法。
智能广告外投
方才讲的几种营销办法都是针对收费流量的,或者说次要针对咱们端内的一些资源。而很多像端外,比如说像巨量引擎、广点通这些,咱们须要做智能的广告外投。以前相当于我是作为一个广告平台,来收广告主的钱,而当初我作为一个广告主,要在平台上投放,怎么样能力投的成果更好呢?
比如说咱们场景次要是在四轮拉新,四轮拉新其实还有很多问题,第一个就是特色少的问题,广告打算的马太效应很重大,甚至配置可能截然不同的打算,有的打算耗费很高,大部分的打算耗费很低。所以大量耗费很低的打算,如果数据又不多,你想提前辨认这个打算在将来体现的成果不好,给他做提前下线,而缩小对将来的开销的损失。那怎么做呢?就是要在底层做用户完单预估,这个打算外面的局部用户曾经产生了转化,通过这部分的用户完单预估来推算整个打算的品质。另外打算自身它有一些投放的成果反馈,尽管大部分打算它的投放量还没有那么大。通过这两个模型,咱们能做到劣质打算的预判,对它进行提前的关停。而对优质打算咱们可能做主动的补估算,最终咱们想实现通过主动投放,把整个广告的估算、打算、素材,还有定向条件等各个维度全副自动化。
广告打算的预估次要在特色这一块,它的特色比拟非凡。第一,ID 类的特色特地多。广告打算的打算广告组以及上面的素材是一层一层的,有很强的语义关系,同一个组上面的广告打算基本上都是一个类型。这些 ID 类型有很多语义相似性,咱们须要用 w2v 进行提前 embedding。同时它的数值特色和广告参数配置特色又比拟少,所以这里须要通过大量的穿插来扩大这个特色的表白。之后咱们用一个传统的 FM 模型进行宽深的预估。咱们这里预估用的是多分类,而不是二分类。过后咱们比照了回归和多分类的成果,发现回归的难度,特地在广告打算缺数据的状况下,是十分难的,还是多分类的成果会比拟好一点。
广告打算的投放,它更多是离线的投放,每天会对打算做一次调整,并不是实时的干涉广告平台的竞价引擎。施行干涉咱们次要通过 RTA 和 RTB 的形式,用的技术也是因果推断技术。咱们把用户分为五类,对曾经转换的用户间接通过规定屏蔽掉,不须要把已有的用户再拉新一遍。剩下的用户依据对咱们平台动向水平的不同,分成 uplift 几档,而后辨认出不同用户品质分,通过各大广告平台提供的 API 来干涉它的竞价引擎。最终咱们通过这两种形式,在打车的乘客以及逆风车的车主上,投放老本会有显著的升高。
下篇将介绍哈啰被动增长算法和哈啰增长引擎的实际,敬请关注。
(本文作者:贾立)
浏览哈啰技术更多干货合集
前端 | 后端 | 挪动端 | 算法 | 项目管理
本文系哈啰技术团队出品,未经许可,不得进行商业性转载或者应用。非商业目标转载或应用本文内容,敬请注明“内容转载自哈啰技术团队”。