写点什么

阿里提出联合预估算法 JUMP:点击率和停留时长预测效果最优

2018 年 6 月 05 日

停留时长预估

对于停留时间的预估,我们借鉴了“生存分析”(Survival Analysis) 的思想,通过时间发生的时间去近似用户在一个内容上停留的时间;从概念上来说,停留时长被认为是“离开当前内容”这个事件的发生时间。如果我们记用户的停留时长的样本为 O,假设存在一个函数,将 O 映射到一个简单的分布 f 上:

这里 f 可能是一个高斯分布,伽马分布等。可以证明的是:

其中 F 表示累计概率分布(CDF),T 是对 O 的在线近似。那么有了上述公式后,我们就可以使用最大似然估计去预估样本的停留时间。我们分析了 RecSys15 数据及上的停留时间,原始分布如左下图,然而我们对停留时间取 log 后,得到了右下图。我们很高兴的发现在取 log 之后,停留时间是符合正态分布的。

于是我们取 g 为 log 函数,f 为正态分布函数,最终我们能得到似然函数:

学习建模

我们记一个用户的会话为一个行为序列:\(s_k=\{(i_j,\log \tau _j,\delta _j)\},j=1,2,\cdots ,k\)。其中 i 表示第 j 个点击的商品,\(\tau _j\) 表示停留时间,而\(\delta _j\) 是一个 bool 类型,表示是否是会话的最后一个商品(或者停留时间过长)。我们假设样本是从一个分布 P(S) 中采样出来,那么可以将分布分解为 2 项的积。

其中前一项表示点击率的似然,后一项表示停留时间的似然;\(s_{k-1}\) 表示会话中第 k 次点击前的行为。为了从会话的行为中抽取更多的有效信息,我们提出了一种三层 RNN 模型去编码。

Attention Layer: 我们设计注意力机制主要目的是去除会话中的噪音,保留真正有效的信息。表示 fast-slow 层的输出,a 对应 attention 的权重,对应的计算方法如下面公式:

Fast-Slow Layer: fast-slow 层提出了一种新奇的 RNN 网络。当我们处理第 j 个输入\((i_j,\log \tau _j,\delta _j)\) 的时候,会进入一个 F-S 处理单元,其中包括一个慢元子和一个快元子序列,慢元子会记忆更多长期的记忆,而快元子会更多的获取当前的信息。F-S 处理单元如下图所示:

Embedding Layer: 网络的最底层是一个 embedding 层,该层将一个二元组\((i_j,\log \tau _j)\) 映射到一个向量上,我们使用 batch-normalizing 对输入进行标准化:

实验

为了验证算法的性能,我们将 JUMP 算法对比了主流的基于会话的预估算法,验证在点击率预估和停留时长预估上的效果。对比的算法包括 GRU、IGRU、NARM、DTGRU,RMTP、ATRP、NSR,使用的数据集是 RecSys15、CIKM16 和 REDDIT。

点击率预估的结果如下表所示,我们可以看到在全部数据集上,JUMP 算法都能超越其他算法,取得最好的 Recall、MRR 和 NDCG 指标。

同时我们观察了 embedding 维度对 recall 指标的影响,结果如下图。我们可以到看随着 embedding 维度的提升,recall 指标都能得到一定的上升,但是基本都在 100 维左右达到最高;其次,我们仍然可以发现,JUMP 算法取得的效果是优于其他算法的,蓝色曲线总是在其他曲线之上。

除了点击率外,我们观察了在时间预估这个任务上的效果,结果如下表所示。对比 ATRP、RMTP 和 NSR 算法,JUMP 能明显提升预估的准度。

总结

本文提出了一种新奇的算法 JUMP,同时预估一个会话中的点击率和停留时间。主要有 3 点重要贡献:

  1. 使用生存分析的方法来建模用户的停留时间,建立在可靠的数据理论基础上;
  2. 提出了一种三层的 RNN 结构,基于注意力机制能提升模型的鲁棒性,降低噪音的影响;
  3. 使用了一种全新设计的 fast-slow 结构,加强对短会话的学习能力。大量实验验证了算法的有效性,在多个公开数据集上的结果,对比其他的算法都有大幅提升。

论文全文链接:

http://www.cs.zju.edu.cn/people/qianhui/pub/Zhou18.pdf

2018 年 6 月 05 日 17:548093

评论

发布
暂无评论
发现更多内容

技术扫盲:关于低代码编程的可持续性交付设计和分析

小傅哥

Java 小傅哥 服务端 低代码开发 可持续交付

MySQL查看及杀掉链接方法大全

Simon

MySQL

区块链溯源系统开发,区块链应用底层平台搭建方案

WX13823153201

区块链溯源系统开发

Dapr 知多少 | 分布式应用运行时

圣杰

架构 云原生 k8s dapr

浅谈nodejs进程和线程

梁龙先森

前端 nodejs 2月春节不断更

基于证券云服务的总体架构设计应该怎么做?

Jason Tien

一文带你熟悉Pytorch->Caffe->om模型转换流程

华为云开发者社区

网络 模型 PyTorch caffe 算子边界

容器 & 服务:一个Java应用的Docker构建实战

程序员架构进阶

Docker 容器 七日更 28天写作 2月春节不断更

话题讨论 | 你在互联网大厂是个啥级别?

架构精进之路

话题讨论 28天写作 话题王者

测试InfoQ 平台发布文章

木子的昼夜

【LeetCode】托普利茨矩阵Java题解

HQ数字卡

算法 LeetCode 28天写作 2月春节不断更

Apache Flink 在快手的过去、现在和未来

Apache Flink

flink

Flink SQL 性能优化:multiple input 详解

Apache Flink

flink

用Stylish精简极客时间专栏页面

闪闪带你学前端

CSS

架构师不至于“架构”-《架构师应该知道的37件事》阅读笔记

代码技艺

读书笔记 架构 架构师

Kafka.04 - Kafka 部署

insight

kafka 2月春节不断更

我身边的高T,问了Java面试者这样的问题......

京东科技开发者

MySQL 数据库

诊所数字化:诊所开展私域运营的优劣势

boshi

医疗 私域运营 七日更 28天写作

技术解析 | Doris SQL 原理解析

百度开发者中心

百度 Doris SQL优化

工作日志2-20

一锅水端平

私有云、公共云、混合云安全性的优点和缺点

浪潮云

云计算

配合Github Actions 做一个自动推送的 Rss 订阅机器人

Leetao

Python RSS Github Action

还愁追不到女神吗?一键生成舔狗日记,一秒速成舔狗之王

不脱发的程序猿

程序人生 28天写作 二月春节不断更 舔狗文化

我与技术面试那些事儿

魔王哪吒

CSS html 前端 28天写作 2月春节不断更

JVM又曾放过谁,垃圾终将被回收!

Simon郎

Java 大数据 架构 JVM 后端开发

WinDbg 分析高内存占用问题

圣杰

dotnet windbg

为什么不推荐使用汉字作为密码?

不脱发的程序猿

程序人生 密码学 28天写作 二月春节不断更

详解SSH 框架中对象调用流程

华为云开发者社区

spring hibernate struts SSH 框架

日记 2021年2月22日(周一)

Changing Lin

2月春节不断更

先收藏!关于Java类、接口、枚举的知识点大汇总

华为云开发者社区

Java 接口 枚举

超强前端面试真题+资源推荐

evantre

前端 面试题 面经

阿里提出联合预估算法JUMP:点击率和停留时长预测效果最优-InfoQ