更猛更持久的广告投放,闲鱼程序员的年终奖全靠它。。。

简介:

作者:闲鱼技术-抚凌

业务背景

  1. 用户增长,是开源节流促成长的过程,是包含了有效用户增长、用户成长、用户变现、用户传播、防止用户流失等一整套增长流程,而非单纯数量上的增长。
  2. 在实践中,增长手段主要聚焦在如何获取用户和提升用户活跃度上。在用户获取成本不断升高的背景下,任何一种获取用户的方式都变得昂贵且效果难以评估,就好比我们都知道广告投出去有一半钱是浪费掉了,但却不知道是哪部分。
  3. 为了评估增长手段的有效性,首先需要一种能在各个渠道追踪用户行为的手段。一般会使用设备指纹技术来唯一标识用户,即通过一系列设备信息生成设备的唯一标识,用设备标识来替代用户标识作为追踪用户的手段。

问题定义

可以用于标识出该设备的设备特征或者独特的设备标识被称为设备。设备指纹因子通常包括计算机的操作系统类型,安装的各种插件,浏览器的语言设置及其时区 、设备的硬件ID,手机的IMEI,电脑的网卡Mac地址,字体设置等,通过某种Hash算法生产特征字符串来用作设备指纹。设备指纹服务有两个核心问题需要解决问题:

  1. 设备ID的有效性:无论使用单一还是多种信息来源,设备指纹的有效性取决于设备ID的有效性。存在两种可能无效情况,ID冲突和ID漂移。ID冲突指不同设备拥有了相同的ID,ID漂移指一台设备在不同环境或时间获取时获取到了不同的ID。
  2. 设备服务架构的扩展性和可靠性:不同的渠道可能会定义不同的设备ID组合作为设备指纹的来源,在多个渠道间交互时需要支持和兼容多种ID组合的查询和转化;设备服务需要广泛应用于增长手段的各个环节,服务的访问量会明显大于一般的产品链路服务,因此对可靠性也有较高要求。
    我们针对这两个核心问题,在下文中分别给出对应的问题分析和解法。

设备指纹ID

Android设备可以获取的ID

  1. IMEI——国际移动设备识别码(International Mobile Equipment Identity),即通常所说的手机序列号、手机“串号”,用于在移动电话网络中识别每一部独立的手机等移动通信设备,相当于移动电话的身份证。几乎所有的设备都可以返回这个串号,并且唯一较好。它根据不同的手机设备返回IMEI,MEID或者ESN码。
  2. IMSI——国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。当手机上装有 Sim 卡并且可用时,返回该值,不同 Sim 卡的返回值不同。
  3. MAC——可以使用手机Wifi或蓝牙的MAC地址作为设备标识。 并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在时获取不到。
  4. ANDROIDID——安卓ID,在设备第一次启动的时候生成并保存,并且可能会在恢复出厂设置后重置该值。理论上是大部分是重置的。通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。

iOS设备可以获取的ID

  1. IDFA——Identifier For Advertising。直译就是广告id, 在同一个设备上的所有App都会取到相同的值,是苹果专门给各广告提供商用来追踪用户而设的,iOS默认设置是允许追踪。用户可以在设置里重置此id的值,或限制此id的使用,故此id有可能会取不到值。iOS6及之后版本可以使用。
  2. IDFV——Identifier for Vendor,提供给APP供应商使用的ID。每个设备在所属同一个APP供应商的应用里,都有相同的值。iOS6及之后版本可以使用。
  3. UDID——Unique Device Identifier。设备的唯一设备识别符。UDID从iOS5开始被禁止使用。
  4. UUID——Universally Unique Identifier,通用唯一标识符。可以在应用启动时生成,它保证对在同一时空中的所有机器都是唯一的。但除非本地保存后获取本地址,每次调用生成的ID均不相同。
  5. MAC——同Android中的定义,iOS7开始只能获取一个固定值。

新一代的设备指纹技术

传统的设备识别手段主要依赖于单一的信息源,与此不同,新一代的设备指纹技术使用更多的信息来完成设备的识别。它通过网络收集终端设备的特征信息,并在分析与鉴别的基础上,对每一组从终端设备采集的特征信息组合赋予唯一的设备指纹ID,用以标识该终端设备。一般具有开发能力的厂商均有自己的一套生成方案,同时也有第三方的厂商提供解决方案以供使用。以下以阿里使用的UMID(唯一设备ID)为例,说明设备指纹ID在各平台上所具有的能力。

  1. iOS上的能力

    1. 卸载重装App, UMID不变
    2. 跨App,UMID不变
    3. 限制广告跟踪,(采集不到IDFA),UMID不变
    4. 还原广告标识,(IDFA变更),UMID不
    5. 恢复出厂设置,UMID不变
    6. 备份恢复不会导致两个设备UMID一致
    7. 准确识别是否越狱
    8. 准确识别越狱之后是否被Hook
  2. Android上的能力

    1. Android 6.0下无采集IMEI/MAC权限,UMID不变
    2. 修改IMEI/IMSI/MAC/aid,UMID不变
    3. Android 7.0跨APP,UMID不变
    4. 平行空间UMID不变
    5. 准确识别各种模拟器
    6. 准确识别是否Root
    7. 准确识别是否被Hook

设备指纹ID选型

  1. 比较好的设备指纹ID,需要保证尽可能少的出现ID冲突和ID漂移。并且,在权限限制、设备信息篡改,系统重装、APP重装情况下也需要保证尽可能不变化。
  2. 集团内部的设备指纹ID方案已经经受住了大量业务的考验,不仅适用于做用户行为的追踪,同时也具有一定的安全防刷能力。因此,闲鱼用户设备信息采用UMID作为唯一标识。同时对于多个数据来源(闲鱼用户历史设备登录记录,闲鱼用户历史安全设备记录,闲鱼用户设备采集记录)打通,水平扩展可以支持的IMEI,IMSI,MAC,IDFA,YunosUUID,Google广告ID等ID的查询。

架构设计


闲鱼用户设备服务架构设计

闲鱼设备服务架构设计.png | center | 747x742

  1. MySQL——创建以umid为主键的闲鱼用户设备主表。一个用户可以有多个设备,一个设备仅记录最近使用的用户。数据量较大,需要做分库分表。
  2. HiStore——用于多维查询,数据从MySQL中同步。HiStore是阿里中间件技术团队研发的数据库产品,是一款基于独特的知识网格技术的列式数据库,定位于海量数据高压缩比列式存储,是低存储成本,低维护成本,海量数据OLAP存储引擎;有效的解决了海量数据存储的成本问题,以及在百亿数据场景下支持实时高效的多维度自由组合的检索。外部开源的解决方案有Infobright等。
  3. 实时读取——分布式key/value存储系统 Tair。Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。通过tair可以定制业务所需要的缓存,也可以作为持久化存储完整存储整个闲鱼用户设备表(以Umid为key)。外部开源产品可以选用Redis。

实践场景(广告投放)

  1. OCPC/OCPA/OCPM:

    OCPC是Optimized Cost per Click的缩写,即优化点击付费,本质还是按照cpc付费;OCPA是Optimized Cost per Action的缩写,即优化行为出价,本质还是按照cpa付费;Optimized Cost per Click的缩写,即优化点击付费,本质还是按照cpc付费;Optimized Cost per Mille的缩写,即优化千次展现出价,本质还是按照cpm付费。三种出价策略除了对应的优化目标不同,本质上都是采用更科学的转化率预估机制,帮助广告主在获取更多优质流量的同时提高转化完成率。系统会在广告主出价基础上,基于多维度、实时反馈及历史积累的海量数据,并根据预估的转化率以及竞争环境智能化的动态调整出价,进而优化广告排序,帮助广告主竞得最适合的流量,并降低转化成本。
  2. 广告投放的数据流示意图(以激活为例)

广告投放的数据流示意图.png | center | 799x551

  1. 闲鱼和广告商的数据流交互图

闲鱼广告商OCPC交互图.png | center | 531x735

  1. 流程说明

    1. 广告商在监测事件同步接口(接口一)中会同步点击数据给闲鱼。同步数据包含用户的设备信息(IDFA/IMEI/OS等)、业务信息(广告计划id/广告创意 id/点击时间等)和回调信息(回调地址或回调参数)
    2. 闲鱼接收到同步数据,根据OS将设备id设为key,将回调信息作为value存储在Tair中。
    3. 闲鱼用户激活或者注册时触发设备信息采集,经过清洗后更新至闲鱼用户设备表中。同时查询是否有可以匹配的回调信息,根据点击事件和转化目标,处理回调信息后回调用户转化目标数据给广告商。
    4. 广告商收到回调数据后,优化模型,更新出价,帮助闲鱼获取更适合转化的目标人群,降低转化成本。

总结

在目前的闲鱼用户增长实践中,广告投放优化已经给闲鱼带来了巨大的收益,有效的控制了广告投放的成本,使得增长团队可以进一步扩大广告投放的渠道和范围。除了用于广告投放优化,闲鱼设备服务还支撑了deeplink,智能投放和用户生命周期等一系列增长手段的尝试。未来,闲鱼技术团队还会进一步探索技术上的可能性,驱动闲鱼用户增长业务的发展。

相关文章
|
搜索推荐 Java 程序员
只有一个程序员开发和运营,BuiltWith网站年入1400万美元是怎么做到的?
国外有一位程序员叫 Gary Brewer,他一人撑起了一个公司,这个公司还年入 1400 万美元,约人民币 1 亿元。对此,你是啥想法?
180 0
|
自然语言处理 搜索推荐 安全
想知道企业需不需要大热的Sitecore CMS,弄清楚这十点就够了!
毫无疑问对于企业来说,数字化转型是长期霸榜的热门话题。而这其中Sitecore又凭借着个性化数字体验、全渠道数据洞察、自动化数字营销成为了这一话题的中心。
184 0
|
JSON 算法 fastjson
Fastjon2他来了,性能显著提升,还能再战十年
阿里官方给的定义是,FASTJSON是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
555 1
|
人工智能 运维 算法
“开盖有奖”背后的攻防战:我卧底进500个黑产群、捡了3000个瓶盖
没想到,“开盖有奖”的活动被黑灰产、羊毛党们盯上了,不止一名消费者在网上发起投诉。
508 0
“开盖有奖”背后的攻防战:我卧底进500个黑产群、捡了3000个瓶盖
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(一)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(一)
103 0
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(一)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(三)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(三)
77 0
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(三)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(四)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(四)
76 0
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(四)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(五)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(五)
71 0
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(五)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(二)
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(二)
102 0
程序人生 - 写完这篇文章后,我被保险公司追杀了几十条街(二)
当代职场人的报销之路,看看有你烦恼的瞬间么
当代职场人的报销之路,看看有你烦恼的瞬间么
当代职场人的报销之路,看看有你烦恼的瞬间么