Airbnb个性化推荐
Airbnb个性化推荐场景
Airbnb使用场景:
双边的房屋短租平台(顾客,房东)
顾客通过搜索或者系统推荐找到房源 => 贡献了Airbnb 99%的booking
一个顾客很少会预定同一个房源多次
一个房源在某时间段内只能被一个顾客租用
数据存在严重的稀疏性
List Embedding
将每个房源 => 房源embedding
数据集由 N 个用户的点击会话 (Session) 组成,其中每个会话定义为一个由用户点击的 M个房源 id 组成的的不间断序列
只要用户连续两次点击时间间隔超过30分钟,就认为是一个新的Session
目标是通过集合S,学习出每个房源listing的d维( 32 维)embedding表示,让相似listing在embedding空间中距离更近
借鉴了word2vec中的skip-gram算法
房源embedding,把每个用户连续点击过的房源Session看做一个句子,每个房源当做word,训练出房源的embedding
Word2Vec的使用
• 通过Embedding,把原先词所在空间映射到一个新的空间中去,使得语义上相似的单词在该空间内距离相近。
• Word Embedding => 学习隐藏层的权重矩阵
• 输入层是one-hot编码,输出层是概率值
• 输入层和输出层大小与词库大小相等
• 隐藏层的神经元数量为hidden_size(Embedding Size)
• 对于输入层和隐藏层之间的权值矩阵W,大小为[vocab_size, hidden_size]
• 输出层为[vocab_size]大小的向量,每一个值代表着输出一个词的概率
• 假设有多个训练样本(juice,apple) (juice,pear) (juice,banana)
• 中心词是juice,规定窗口内有apple、pear、banana,共同的输入juice,对应不同word输出。用这些样本训练后,得到的概率结果,apple、pear、banana的概率值会比较高 => 它们在对应隐藏层中的参数是相似的
• 计算apple, pear, banana对应的隐藏层向量之间余弦相似度,会比较高
• word2vec可以让单词之间具有相似性和类比关系
• 我们想要的结果并不是模型本身,而是隐藏层的参数,即让输入向量转换为新的embedding
•
List Embedding的评估
List Embedding的离线评估:
在使用基于embedding的推荐系统进行线上搜索测试之前,需要进行多次离线测试。目的是比较不同参数训练出来的embedding,决定embedding维度,算法思路等。
评估标准,测试用户最近的点击推荐的房源,有多大可能最终会产生预订
Step1,获取用户最近点击的房源,以及需要排序的房源候选列表,用户最终预订的房源
Step2,计算点击房源和候选房源在embedding空间的余弦相似度
Step3,对候选房源按照相似度进行排序,观察最终预订的房源在排序中的位置
搜索中的房源根据embedding的相似性进行了重新排序,并且最终被预订房源的排序是按照每次预定前的点击的平均值来计算,追溯到预定前的 17 次点击
List Embedding的评估:
用多种方式验证embedding的有效性
K-means 聚类,将embdding进行聚类,然后可以发现其在地理位置上的区分度
embeddng之间的余弦相似度
不同类型的listing之间的余弦相似度
不同价格范围的listing之间的余弦相似度
除了基础属性(价格,地理位置)很明显的能直接获取,还有隐属性可以通过embedding来发现,比如房屋的文理
计算了每个listing embedding的k近邻,并对比这个listing和k近邻 => Embedding Evaluation Tool
YouTube上有专门的视频展示,证明Embedding很有用 => 让相似listing在embedding空间中距离更近
List Embedding的冷启动
基于List Embedding的相似房源推荐
每个 Airbnb 房源详情页面都包含一个「相似房源」的轮播,推荐与当前房源相似并且可以在相同时间段内预订的房源
在有了list embedding之后,进行了 A/B 测试,基于embedding的推荐使「相似房源」点击率增加了21%,通过「相似房源」产生的预订增加了 4.9%
在基于embedding的推荐中,相似房源是通过在list embedding空间中找到 k个最近邻居
对于学习好的list embedding,通过计算 与来自相同目的地的所有房源的向量 之间的余弦相似性,找到指定房源 的所有可预订的相似房源(条件是入住和退房日期,房源需要在该时间段内可预订)=> 最终得到的k个最高相似性的房源组成相似房源列表
User Type Embedding与Listing Type Embedding
一些长期的行为,比如一个人在很久之前在另外一个城市预定过房间,那么在当前城市很有可能还是会喜欢预定同类型的房源
进一步从预定的Listing中来捕获这些信息
构造数据集:由前面的点击序列变成预定序列,数据集为N个用户预定的Listing 组成的session集合,每个sesison可以表示为
存在的问题:
训练数据集会很小,因为相比点击,预定的数据小一个数量级。
很多用户在过去只预定过一次,这些数据是没法用来训练模型
需要进一步去掉那些在平台上总共就被预定的次数很少的Listing(比如少于5-10次的Listing)
时间跨度太长,可能用户的喜欢偏好已经发生变化
基于Embedding的实时个性化搜索
计算用户的user type embedding与候选listing的listing type embedding之间的余弦相似度
推荐给用户相似度高的listing
Fintech数据分析
Fintech应用场景
Fintech:
Financial + technology,通过科技手段,使得金融服务变得更加效率
金融业务:保险、银行、券商、基金需要有科技为其支撑。此外,互联网公司也在开展金融业务,如蚂蚁金服
Fintech公司&人才发展
Fintech行业社招面对科技公司的software engineer和金融行业内有数字技能和商业分析本领的复合型人才
典型公司:蚂蚁金服,京东金融,Grab,Sofi,Oscar Health,Nubank,Robinhood,Atom Bank,Lufax,Bloomberg,Factset,PayPal
如何使用Python进行量化交易
量化交易(vnpy, jointquant,ricequant)