机器学习在神策数据的应用

2021-08-24 10:16:37 浏览数 (1)

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!博客主页:https://buwenbuhuo.blog.csdn.net/

目录

  • 推荐
  • 一、前言
    • 1.产品和解决方案
    • 2.产品理念
  • 二、机器学习在神策数据的应用
    • 1.智能推荐
      • 个性化推荐:"为你推荐" “猜你喜欢”
      • 相关推荐:“相关商品” “买了又买”
      • 热门推荐:"今日热榜 " "今日爆款 "
      • 智能推荐的基本步骤
      • 智能推荐概念 — Embedding(最重要)
      • 智能推荐模型—基于用户行为的召回模型(最常见)
    • 2.智能预警
      • 智能判断指标是否异常
      • 自动分析出异常原因
      • 时空预测`Prophet`
        • 判断异常:预测指标的正常区间
        • 预测值 = 趋势 周期性 特殊事件
    • 3.用户预测
      • 用户预测的产品形态
      • 机器学习在神策数据的落地挑战
        • 自适应性
        • 可解释性

推荐

  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

一、前言

很抱歉,好久没有更新博文了。最近抽出点时间整理了这篇关于《机器学习在神策数据的应用和挑战》报告的文章。为什么说是抽出时间,总不能说最近总是打游戏不想更新博文吧。hh~

本次报告是在8月6号进行的,很抱歉快一个星期才进行整理。主讲人胡士文先生是神策算数据机器学习算法团队专家。如果需要视频的话可以私信博主,或者加交流群@群主。

在讲解之前,我们需要先简单介绍下神策数据 对于这个公司我们只需知道他是大数据分析及数字化运营解决方案的服务商,是To B型公司即可。除此之外,我们还需要了解产品和解决方案以及产品理念。

1.产品和解决方案

先从下往上简单介绍:

数据根基部分:

  • 数据治理平台:进行数据采集以及简单的数据治理。
  • 数据仓库:导入、查询、存储数据。
  • 数据智能:数据利用的数据智能引擎(此部分为重点介绍部分)

依托数据根基部分的两个大的应用场景:分析云和营销云

  • 分析云: 分析云顾名思义就是基于材料数据进行分析的功能或工作。例如用户行为分析,广告投放分析等。
  • 营销云: 主要针对客户针他们的用户进行营销的动作。做一些工具能够更好的帮助客户进行营销。例如智能推荐、规则推荐等。

2.产品理念

其产品理念是基于数据流的SDAF运营框架

数据运营拆分成四个步骤,分别是:Sense(感知)、Decision(决策)、Action(行动)、Feedback(反馈)。

在此我们以客户准备对用户做流失用户的召回或者留存率的提升作为切入点。

  • 首先需要感知数据: 看一下产品里面用户的留存率是多少,用户流失的原因严不严重。
  • 其次进行决策: 决策可以基于BI决策,也可以基于AI的机器学习的决策。借助一些机器学习的模型去预测接下来哪些用户会流失掉,可以知道高概率流失的用户就是我接下来需要重点关照的用户。
  • 决策完成后开始行动: 对高概率流失的用户进行一些处理动作。比如说发送短信、优惠券或者红包吸引他们让他们重新回到我们的产品里面。
  • 最后进行基于数据的分析与反馈: 最终需要看运行情况的最终结果。

此流程是一个不断迭代的流程(闭环)

二、机器学习在神策数据的应用

好了,终于开始了正式环节。

1.智能推荐

智能推荐的三个基本场景有:个性化推荐、相关推荐、热门推荐

个性化推荐:“为你推荐” “猜你喜欢”

个性化推荐一般是以用户为维度。比如说你在京东上查看笔记本电脑,下拉会发现有为你推荐的相关笔记本电脑。

相关推荐:“相关商品” “买了又买”

相关推荐以具体的物品为维度,推荐与物品相关的物品。比如说你查看蓝牙耳机,它会给你推荐其他相关的耳机商品信息。

热门推荐:"今日热榜 " "今日爆款 "

热门推荐基本上无个性化需求,主要呈现的是热度较高的话题。比如说知乎热榜,微博热搜等。

智能推荐的基本步骤

智能推荐在算法的角度分解成三个步骤:召回、排序、规则

  • 召回: 在一个场景内有很多可以给用户呈现的内容,以今日头条为例。今日头条有千万量级的文章,但是每一个用户能够一次性去浏览的信息是及其有限的,所以推荐的第一步需要经过召回这个步骤,通过召回进行初步粗略的筛选用户可能感兴趣的内容。比如说本人喜欢历史和地理。那么就会把与历史和地理相关的内容返回到候选集合当中。
  • 排序: 对召回阶段存入到候选集合的内容进行打分。打分的依据是通过模型去预测用户对每一个内容的可能感兴趣的程度。本质是做预测。
  • 规则: 通过业务规则进行排序。比如说置顶的内容就是根据置顶规则实现的。

智能推荐概念 — Embedding(最重要)

个人理解在智能推荐里面最重要的概念是EmbeddingEmbedding有些地方叫词向量,有的地方叫词嵌入。叫法不同,但是本质上是一样的,本质上是做一个向量化的事情。

Embedding并不是起源于推荐,而是起源于2013年谷歌发表的一篇论文《word2vec》。思想是把一篇文章里面的每一个词映射到向量空间里面去。这样词就可以在向量空间里做一些相似计算。这篇文章奠定了2013年以后的所有的三元处理技术的一个发展和研究的方向。

2016年Youtube发表一篇借鉴《word2vec》的思路,只不过把向量化的思路搬到了智能推荐的场景下。文章的主要内容是用一个向量来描述一个用户/物品/文章。这样做的好处就是把一个推荐的问题转化为一个向量计算的问题。如果能够将一个用户编码成一个向量,将一个视频或者一篇文章也能编码成一个向量。那么这时再想做推荐就很简单了。推荐无非就是说从数学上计算一下跟用户向量最相近的物品向量是什么。把跟用户向量最相近的物品推荐给用户。

从16年以后推荐系统的尝试也都是基于Embedding来进行的,深度学习在推荐系统中的应用,本质上是在将用户和物品做更精准的向量化表示。

智能推荐模型—基于用户行为的召回模型(最常见)

基于Embedding的推荐算法也有很多,现在机器学习的推荐算法都是基于Embedding的概念进行各种改进而成的。

  • 基于用户行为的召回模型(双塔)

从深度学习的本身来说,这个模型并不是一个太复杂的模型,他其实就是一个简单的前馈神经网络,前馈神经网络有几个比较重要的方面。

第一个方面是它分成了两路,我们叫其为双塔。左边的塔输出的是用户的特征,用户的特征在推荐系统中最重要的是这个用户以往有过什么样的行为,比如说这个用户以前点击过或者观看过什么样的文章或者视频或者商品。左边的塔在建模用户的特征,目的是希望左边前馈神经网络最后这一层的输出用来表示用户的Embedding。左边最后输出的是一个k-v的向量,作为用户的vector的表示。

右侧这个塔也是典型的前馈神经网络,它的输入是一些物品类的特征,以一个文章为例,输入的就是这个文章的主题、文章的作者,以及文章的正文,可能还有文章的其他的一些属性。作为特征输入进去。右边的这个塔也被称为Item的塔,最终的目的是给物品做一个向量化的标识,最后输出的是一个k-v的向量,向量标识物品本身。

最后通过用户的向量和物品的向量做一个计算。如果说用户点击了这篇文章,希望模型能够训练到用户和文章的相似度是比较高的程度。如果用户没有点击过这篇文章,希望模型能够训练到用户和文章的相似度是不高的程度。

通过这么一个简单的神经网络的结构,就能够训练到用户的向量和内容的向量。

  • 为什么使用双塔而不使用一个统一的神经网络呢? 这是基于工程实践上的考虑,以今日头条或者抖音为例。比如我做一次下滑的操作,产品上会很快的把推荐结果给返回出来。也就是说整个推荐系统,在工业界其实是对时效性要求是很高的,通常的一次操作在100-200ms内把结果返回出来。但是在像今日头条这种场景下,整个的内容量是很大的,数据量有千万级别是可被推荐的,在工程上怎么能够在100ms以内或200ms以内完成所有ItemUser的符合兴趣度的计算呢?双塔模型提供了一个能够近似的解决问题的方法。也就说通过两个不同的塔建模用户和内容,如果能够提前把模型给训练好,那么就可以单独的把用户的向量和内容的向量都提前给计算出来。计算这一步就不需要在用户请求的时候去计算,可以提前把用户的向量和内容的向量去计算好,当用户发送请求过来的时候,只需要去查找跟用户向量最相似的几千个物品向量即可。在线上只需要做查找的工作,不需要做计算的工作。在整个工程性能上,在几百毫秒的量级上能够实时的返回用户感兴趣的推荐的结果,所以进行这个设计。

2.智能预警

核心功能共有两个,分别为:智能判断指标是否异常和自动分析出异常原因。下面专门针对这两个方面做讲解。

智能判断指标是否异常

  • 智能预警的应用背景: 在分析产品里面,帮用户采集许多基础数据。以很多的互联网客户为例,把分析产品当成一个基础的数据平台来使用。平台基本上会帮客户采集他们产品的所有的用户行为数据,客户会在分析平台看DAU(Daily Active User)、客户的留存率、下单次数等等比较核心的业务指标。

在看指标的场景下,会有一个非常核心的需求,我们需要及时的帮助客户去发现指标是否异常。举个很简单的例子。比如说以外卖客户为例,他可能需要实时的监控订单数,如果订单数在某个时间点发生了很异常的变化的话,很有可能是他的产品某个方面出问题了。指标的异常是非常需要客户区关注和关心的点。这里核心的需求:需要帮助客户去做指标的监控和预警。传统的预警方式就是配一些规则。比如说今天的指标低于昨天的20%就进行报警,又或者订单比上个月低15%就进行报警等。

以往的预警都是通过一些规则去进行的,这样做会出现什么样的问题呢?这样是不灵活的。第一我们不知道要怎样区配置怎样的规则是合理的。第二是数据呈现出周期性和趋势的时候很难用一个规则去描述这个指标是否异常。针对于此,使用机器学习的方式去预测这个数据是异常还是正常的,让其变成一个机器学习的问题。

自动分析出异常原因

此部分的第二个核心需求是当指标发生异常的时候,怎样能够迅速的自动的定位到异常的原因是什么。还以订单数据异常为例。

假设平台上的订单量,14点的订单量突然发生明显的下降,老板这是肯定关心的是指标下降的原因是什么,如果能够自动分析出ios的订单量是正常的,但是安卓的订单量是异常的。可能有理由去怀疑安卓端产品发生的BUG导致了订单的异常。

在这个场景下第二个比较重要的需求是如何能够自动的在已经能够判断出指标已经发生异常的情况下,能够自动的找到异常发生的原因。

时空预测Prophet

在智能预警这一块比较核心的需求:如何能够智能的判断出当前的指标是否正常。将其转化成预测问题,通过预测这个指标当前的正常区间应该是什么。

判断异常:预测指标的正常区间

指标预测的问题其实就是时序预测的问题。时序预测的问题其实有很多种解决的方法。它可以是一个分类的问题,用分类的方法去做,假设如果在某个业务场景下,能够拿到许多标注数据,能够知道哪些数据点是正常的,哪些数据点是异常的。可以用分类的模型去解决这些问题。

但是在我们这个场景下,因为其是一个比较标准化的解决方案。没办法去假设有很多标准数据。所以此部分的解决方案选择的是一个时序预测的方式去预测指标的正常区间,当真实发生的指标不在预测区间里面,我们就认为指标发生了一次预警。

预测值 = 趋势 周期性 特殊事件

在时序预测目前用到的是开源的工具ProphetProphetfacebook开源的一个时间序列预测算法。在此仅简单介绍最核心的思想:把时序预测的一个值拆解成三个维度,分别是趋势、周期性和特殊事件。然后用三个独立的预测方法来分别预测指标的趋势,指标的周期性以及去预测指标的特殊事件对预测值的影响。特殊事件比如"双十一"和"618"。这样的一些比较大的特殊事件通常会对指标产生比较大的影响。

整个Prophet的一个比较大的思路就是把整个预测拆解成趋势、周期性和特殊事件三个维度去分别做出预测和拟合。

在趋势下和周期性这块具体怎么做的,感兴趣的可以去看prophet是怎么样做的,facebook是有开源的paper和代码的。

在此给出gitee地址以及主页地址: gitee地址:https://gitee.com/mirrors/prophet?utm_source=alading&utm_campaign=repo 主页地址:https://facebook.github.io/prophet/

3.用户预测

用户预测的核心需求就是如何从海量的用户中找到目标用户。

举几个常见的例子: 比如说客户他的哪些用户更有可能流失,流失是客户比较关心的一个指标和业务场景。他的需求可能是哪些用户有比较高的流失风险。还有一种场景是哪些用户是高转化概率的用户。如果我们能帮够他找到哪些用户是高流失的用户,那么客户接下来就可以有针对性的对用户进行一些针对的运营和活动,好让这些客户可以留存下来。如果能够帮客户找到哪些用户是可以转化的用户的话,客户可以针对用户进行一些营销的动作,能够完成用户转换,进而提升整个产品的收入。

在用户预测这个场景下,To C的思路和To B的思路会很不一样。如果说仅仅是一个C端的产品,要做一个用户预测的产品。会先做一些用户的样本,构建特征工程,然后做模型的训练和调参,最后得到预测结果。常用的模型有GBDT和LR这样的模型来进行用户预测。实际上在很多具体的C端产品下都是这样做的,比如说像世纪佳缘、珍爱网等相亲网站,他们要去预测哪一些用户会更有可能购买他们的高端的或者比较贵的相亲服务的可能。

但是在神策这种To B的产品下,面临的问题是很不一样的。下面主要讲解机器学习落地遇到一些问题和挑战以及解决方案。

可能有些读者对To B和To C不了解,个人看到知乎的一篇帖子讲解的很清晰。链接如下: To B和To C,你真的知道它们之间的区别么?

用户预测的产品形态

在此以流失为例。针对流失的定义在过去30天来过产品,并且未来七天之内没有做过任何行为的用户,我们认为他就是流失的用户。只要客户能够把流失定义清楚,这个功能就能够自动的帮客户计算出每一个用户流失的概率。但是由于神策是一个To B 产品的一种思路,是做的用户预测的产品。所以这个思路和普通的C端公司做用户的思路是不一样的。

机器学习在神策数据的落地挑战

以用户预测的场景为例,去介绍机器学习在神策数据的落地的挑战。

自适应性

自适应性这个词可能有点模糊,不好理解。传统的构建一个有效的模型的时候,我们通常需要进行以下几个步骤:

  • 数据采集
  • 特征工程
  • 模型选择和训练
  • 调参

去做这样一个预测模型,其实是需要投入比较多的人力的,并且周期也比较长。

假设我们去做一个用户预测模型,只做一次预测需要多久? 比如说预测珍爱网或者世纪佳缘哪些用户有可能购买高级相亲服务。从目前了解到的情况而言,就仅做一个预测来说,在一些数据基础和组织架构比较完善的公司最短大概两到三周能够去做一次预测。

回到神策的应用场景,我们要做的是一个产品化的功能。什么是产品化的功能,所谓产品化的功能就是我们提供给客户一个产品,这个产品能够帮助客户把用户预测这件事情给做出来。

按照传统的思路做下来的话他会有几个大的问题: 第一个就是整个周期很长,两到三周,并且很多公司没有能力做这件事情。 第二个更大的问题在To B的场景下,传统的方法无法形成产品化的解决方案。

针对于此探索出来的解决方案:自动机器学习(AutoML)

通过上图我们可以看到两个视角,第一个视角是传统的机器学习方案,从问题定义—>数据—>特征—>模型—>优化—>评估,传统的机器学习每一步都是人来做的。在自动机器学习的角度来看,只有问题的定义是人来做的,从特征—>模型—>优化—>评估都是自动去做的。 回归到用户行为预测,我们只需要用户定义问题,产品就可以根据用户的定义把结果计算出来。这一过程中,不需要用户做特征工程,也不需要客户进行调参等等,自动把结果计算出来。

  • 什么是自动机器学习? 1.尽可能少的人力投入 2.在有限的计算模型做出最优的模型效果
  • 在神策中自动机器学习要做的事情? 1.自动特征工程 2.自动模型选择和训练

自动特征工程是神策从20年以来探索机器学习怎么在To B的场景下怎么去做产品化的一个自己想到的一个点。因为手动特征工程对于客户来说是行不通的。一定要自动的帮客户做特征工程这件事情,哪怕自动特征工程会损失一些模型的准确性和精度。至少客户是能用的起来的。

  • 自动特征工程: 1、自动统计用户在过去一段时间每个行为的次数 2、如果是在流失正常的情况下,自动统计用户在过去一段时间每个行为的衰减情况。比如说预测这个用户是否流失,可能会去构造特征,比如说他过去一个月登录次数多少次,最近七天登录多少次,如果最近七天比过去一个月登录次数衰减很多。这就可能是一个比较关键的用户的可能将要流失的特征。 3、onehot / 分箱特征处理。 4、在做自动特征工程这一块,需要警惕特征穿越。特征穿越的意思是在模型训练的时候,能够拿到一些在实际预测中拿不到的特征。造成的结果就是模型训练的结果很好,但是在实际的预测中的结果很差。
  • 自动模型选择和训练 1、GBDT vs RF vs LR 2、超参自动遍历:grid search 3、优化方法自动遍历:SGD vs FTRL vs L-BFGS 4、由于数据量大,所以会做数据采样,能够加速这一块整个的计算
可解释性

如何让用户理解和信任模型结果 神策的产品是给客户去使用的,但是客户可能是对机器学习基本没有了解的人,他可能对机器学习跑出来的结果是不信任的。比如说用模型跑出来一部分用户的流失,告诉客户这是一批流失概率比较高的用户,他可能不理解为什么我们认为这批用户是流失概率比较高的。也有可能会不愿意使用神策产品的结果。

解决方案: 1、为什么这个用户会流失 ①使用者并不期望全面的解释。使用者期望的是造成这个结果的最重要的1-2个原因 ②造成这个用户会流失的最重要的1-2个特征是什么 2、为什么这个用户会转化

简单介绍下怎样计算特征重要性

使用的方法是SHAP value 此算法模型源自于博弈论:shapley value中的一个方法。 假设有模型m,特征(a,b,c),a’代表特征缺失

下面为举例

代码语言:javascript复制
m(a,b',c') - (a',b',c')   // 只用a特征对比什么特征都不用能够带来的收益是什么
1/2 * ((m(a,b,c') - m(a',b,c'))   (m(a,b',c) - m(a',b',c))) // 用a和不用a所带来的收益是什么
mm(a,b,c) - m(a',b,c)  // 用三个特征和只用b.c 两个特征的带来的收益是什么

把上面三个分别计算出来在除以3 计算出来的结果就是整个a这个特征对于整个模型预测的结果是什么
  • 思路就是利用SHAP value值最大的特征,做出预测结果的的解释原因 用户A会流失。因为最近30天未充值 用户B会流失,因为最近10次PK都输了 用户C会流失,因为他的2个好友最近都未登录 …

通过找到这样一些结果,能够让客户更好的理解模型,如果可解释性的原因是准确的话,也能够给客户一些知道和建议。

关于合作博弈论:Shapley value,笔者看到知乎上有一篇比较通俗的讲解,同时给出前人实现的代码地址,链接下如下: 合作博弈论:Shapley value GitHub地址:shap

文章内容到这里就结束了,如有不足敬请指出~


0 人点赞