这些需求看似零乱,实际上都属于不同于“兴趣”的另一类问题,它需要知道“用户是什么人”。因此我们建设了情景挖掘体系来整合响应这类需求的工作。
图9 情景挖掘体系 情景引擎 最早建立情景引擎是为了满足某些DSP给大客户做SCRM的需求。客户需要运营社交网络上的粉丝和潜在客户,需要一些工具把消息分发给这些用户,比如: 把广告投放给微博里提及了“宝马”的用户; 发一条活动微博,然后把广告投放给跟这条微博互动的用户; 把广告投放给刚刚关注奔驰的用户。 针对这类需求我们实现了一个情景引擎,接入微博上所有主要用户行为数据,j2直播,按行为类别(谓语行为)分类存储,抽取出其中的对象(宾语个体),一个情景就定义为谓语+宾语,经过一系列中间计算后,形成“用户-情景列表”索引格式的数据,实时更新到线上缓存供定向服务使用。 情景引擎用Storm接入实时数据,计算后分钟级别更新到线上缓存,大部分是工程问题。里面涉及到算法的地方主要有两处: 数据清洗。接入的线上数据有垃圾流量,比如在话题区刷广告的。需要建一个反垃圾模块。 关系扩展。计算出来的情景-用户列表通常会有极强的长尾分布,即头部的情景占据海量用户,但我们在广告投放时希望大部分情景都能有相当数量的覆盖用户。因此会丢弃掉大部分长尾数据,对分布的中间部分做基于相似性或相关性的算法扩充。 中长期情景挖掘 基于情景引擎长期积累的数据,我们在上层建立了中长期情景标签体系(对外称为人生状态标签)。 人生状态标签体系一共有20多个标签,涵盖用户的求学、旅行、车房、职业、婚恋、育儿等状态。这些标签都是各自独立挖掘,挖掘的算法完全由其评价方法而定,并没有通用方法,而评价方法完全取决于源数据情况。下面给出几个例子: 大学生标签: 根据发微博的内容过滤出一个准确率比较高的大学生用户集合(大学生在某些场景下发的微博会带有区分度非常高的关键词)。然后对16-25岁之间的用户建模,特征主要包括关注特征、App使用特征,IBS特征。用过滤的用户集合为正样本,随机取一个负样本集合进行训练。对所有16-25岁之间但不在样本集合中的用户进行预测,取一个预定的数量。 差旅标签: 当前用户的位置与用户常驻城市不符,即看做用户在差旅状态。 豪车车主: 根据用户行业/头衔、影响力、社交关系等信息制定过滤策略。到用户微博页上人工验证。 用预估的方法会有一个问题,即很难保证做出来的正样本训练集是无偏的。一般来说,能够满足某种过滤条件的数据总是有偏的,通常更偏向于更好更活跃的用户。但在后期评估中发现,只要注意在模型里尽量不使用规则里的那些特征,关系并不大。另外,训练集偏向更好的用户也不算大问题,因为计算结果本来就要求优先保证更好的用户,那些不活跃的、特征缺失严重的用户对业务的影响相对不重要一些。 人生状态标签跟兴趣标签看上去有类似的地方,但从评价方式和应用出发点来看完全不同。例如,“用户对婴儿用品感兴趣”跟“用户是婴儿父母”是两回事。从广告投放的角度出发,我们从来不把这两者混为一谈,我们对前者的效果负责,但不对后者的效果负责。 (责任编辑:本港台直播) |