全部产品
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 钉钉智能硬件

pCTR/pCVR预估

更新时间:2017-10-16 10:48:36

pCTR/pCVR预估一共分为两个阶段流程:实验阶段流程、线上系统对接流程。在实验阶段,阿里云将融合您的部分历史投放数据及阿里大数据进行pCTR/pCVR建模,并产出一份实验报告,您可根据实验报告决定是否进行线上系统的正式对接;在线上系统对接阶段,意味着您已决定将pCTR/pCVR模型应用到线上的实际广告投放过程中。

两个阶段的流程如下:

一、pCTR/pCVR实验阶段流程

Step 1:准备离线实验数据

离线实验数据概述

在线上对接阶段,您将通过API向营销引擎请求一个创意列表的pCTR/pCVR。

因此在实验阶段,为了估计每个创意的pCTR/pCVR,阿里云营销引擎的算法需要上述创意集合的广告展现、点击/转化数据来训练模型。希望能够提供15天的展现、点击/转化数据,包含:

  1. request id —— adx上的广播id,用于分析数据
  2. user id —— 比如imei和idfa,用于做IDMapping和关联阿里大数据
  3. 媒体特征、用户特征和广告特征 —— 用于pCTR/pCVR模型

离线实验数据详细要求

对数据进行采样处理

为了避免数据过大,可对数据做采样处理,处理原则如下:

  1. 对点击/转化数据,可做下采样(下采样方案见下文),但要保证总点击数不少于15W;其中,若您要进行pCTR预估,则需保证每个创意点击数不少于5K;若您进行pCVR预估 ,则需保证每个广告主转化数不少于5K;
  2. 对于负样本,可做下采样(下采样方案见下文),建议下采样比在5~10之间;
  3. 采样应保证完全随机,避免有偏采样。
下采样方案

为了避免数据过大导致传输困难,提供数据时建议采用如下手段压缩传输数据量:

  1. 数据预排序:将日志数据按照用户id和时间排序,在部分客户数据上可提升一倍的压缩比;
  2. 负样本采样:非点击/转化数据,可做3~10倍采样,以便降低数据量;负采样应保证采样后负样本是正样本的5~10倍;负采样应保证随机性,尽可能避免有偏采样。
数据格式要求

提供的数据格式请提供tsv格式,每行一条记录,字段以tab分割,字段需清洗tab键以避免字段混乱。

注意!!!为保证离线实验与在线服务一致,即使是下表中“非必需”字段,也需提供缺省值占位,STRING类型字段的缺省值为空字符串,INT类型字段的缺省值为0,请勿用NULL作为缺省值。

详细字段列表如下:

字段分类 字段名 字段描述 是否必需 类型 备注
#通用字段 request_id ADX广播id 必需 STRING 本次请求唯一标识,这个标识需要能用来关联后续的点击、转化等行为;没有请用随机串填充,并确保尽量不冲突
user_id 经过MD5哈希后的IMEI或IDFA 必需 STRING 其中IMEI格式:长度为15位,且必须全部为阿拉伯数字;IDFA格式:长度为36位,由英文字母和阿拉伯数字组成,所有英文字母为大写,由4个“-”连接,一段为8个字符,二、三、四段为4个字符,五段为12个字符,如:1E2DFA89-496A-47FD-9941-DF1FC4E6484A
user_id_type 标识user_id的类型是IMEI/IDFA 必需 STRING IMEI/IDFA
request_ts 广播时间 必需 INT 如:1497451799
impression_ts 展示时间 必需 INT 如:1497451899
click_ts 点击时间 pCTR/pCVR必需 INT 如:1497451999
click_num 点击次数 pCTR/pCVR必需 INT
convert_ts 转化时间 pCVR必需 INT 如:1497452099
convert_num 转化次数 pCVR必需 INT
#媒体信息 url 超链接 非必需 STRING
refer 非必需 STRING
appname app名 非必需 STRING 务必UTF-8编码
apppkg app包名 必需 STRING
adslot 广告位 必需 STRING
adslot_width 广告位宽度 必需 INT
adslot_height 广告位高度 必需 INT
adslot_visibility 广告位位置信息,在第几屏 必需 INT
#设备信息 network 网络 必需 STRING 2g/3g/4g/wifi
carrier 运营商,比如电信、联通、移动 必需 STRING Telecom/Unicom/Mobile
device_brand 手机品牌 非必需 STRING 若未解析,请将整个device名写入device_name字段
device_type 手机、平板 非必需 STRING phone/pad
device_model 手机型号 非必需 STRING
device_name 手机商品名 非必需 STRING
os 手机系统 非必需 STRING ios/android
os_ver 手机系统版本号 非必需 STRING
#用户信息 user_agent 必需 STRING
ip 用户IP 必需 STRING 如:171.9.25.175
geo_code 地理位置 非必需 STRING
contry 国家 非必需 STRING 如:中国,中文用UTF-8编码,下同
province 非必需 STRING 如:黑龙江省
city 城市 非必需 STRING 如:哈尔滨市
#广告信息 advertiser_id 广告主 必需 INT
campaign_id 营销活动 必需 INT
adgroup_id 广告组 必需 INT
creative_id 创意 必需 INT
#其它信息 media_info ADX广播的媒体额外信息,json格式 非必需 STRING
user_info ADX广播的用户额外信息,json格式 非必需 STRING  

实验数据其它说明

  • 由于工作日和休息日的区别,广告投放会天然存在七天的周期性,这种周期性在某些广告主上尤为明显。因此在pCTR/pCVR模型中,7天训练数据和1天测试数据是最低要求,2周训练数据能够让模型更好地跟踪点击率/转化率变化的趋势。此次引入阿里大数据后,阿里数据和您的数据的交叉特征会让模型膨胀非常厉害,更容易出现数据稀疏导致pCTR/pCVR模型训练不够充分的情况。因此本次采用2周以上的训练数据,能够对模型效果有一个更好的保证。
  • 本次提供的数据不包含竞价计费信息,因此不会造成您敏感商业数据的泄露。同时,由于数据采样的存在,也难以分析广告主的投放,您的广告主的隐私能够得到充分保障。

Step 2:离线实验数据格式自查

由于实验数据文件会非常大,为避免数据处理返工,需要您对已准备好的数据文件进行自查。

自查脚本说明:

  1. 需要python 3环境
  2. 命令行参数

    —input 输入文件, 要校验的文件

    —type ctr/cvr 是ctr模型还是cvr模型的校验

    —skip 跳过头部几行

  3. 例子: python data_checker.py —input data.tsv —type ctr —skip 1

Step 3:上传离线实验数据

请通过阿里云OSS服务上传实验数据。上传过程需要使用OSSCMD进行操作,具体流程如下:

  1. 下载并安装OSSCMD
  2. 通过OSSCMD上传您准备好的本地文件(请上传唯一一个文件),命令行代码如下:
  1. $ python osscmd put local_existed_file_name oss://common-test2017/your_oss_file_name
  • 注意:可以使用 oss ,需要联系花邪或墨魂开通子账号后才能上传
  • 上传成功后,请在钉钉群里知会花邪或墨魂。

Step 4:阿里云侧进行算法建模并产出实验报告

阿里云将基于您所提供的实验数据进行pCTR/pCVR模型的搭建,并在1~2周左右的时间产出实验报告。

参考实验报告的样例如下:


  1. 用户特征模型的F1-score对比基线模型提升了xx%。
  2. 对于转化流量,用户特征模型给出的转化率为xx%,基线模型给出的转化率yy%,能够帮助您以高x倍的价格竞争高转化流量。
  3. 对于未转化流量,用户特征模型给出的转化率为xx%,基线模型给出的转化率为yy%,降低z%的流量报价,理论上近似节约z%的预算。
  4. 结论2、3是假设按eCPM出价,在一价结算下近似估计的结果,不代表实际实验能拿到的收益,但一定程度上能够反映用户特征模型对投放的影响。以下是评估报表:
实验 是否转化 转化数 imp量 预估转化率 实际转化率/预估转化率
基线模型 未转化 0 xxxxxxxx x% 0
基线模型 转化 xxxxx xxxxx y% xx
用户特征模型 未转化 0 xxxxxxxx z% 0
用户特征模型 转化 xxxxx xxxxx v% yy

以下细节分析供技术和业务人员参考,更细节数据见附件(附件本样例暂不提供):

基线模型pCVR 基线模型OE 用户特征模型pCVR 用户特征模型OE
转化量高段 均值 xxxx xxxx xxxx xxxx
方差 xxxx xxxx xxxx xxxx
转化量低段 均值 xxxx xxxx xxxx xxxx
方差 xxxx xxxx xxxx xxxx
展现量高段 均值 xxxx xxxx
方差 xxxx xxxx
展现量低段 均值 xxxx xxxx
方差 xxxx xxxx  

实验报告产出后,您可根据报告结果决定是否采买pCTR/pCVR服务并进行线上对接。

二、pCTR/pCVR线上系统对接流程

当您已经完成离线实验阶段的验证,需要进行线上系统的对接,请参照此流程。

pCTR/pCVR接口请求基于HTTP协议进行传输,HTTP URL为:http://oa-dmp.data.aliyun.com/getprediction? HTTP Body中包含真实的请求参数parameter结构体和请求签名sign,以protobuf的格式存储,请求方式采用HTTP POST。

  1. message ScoreRequest
  2. {
  3. required ScoreRequestParameter para = 1;
  4. required string sign = 2 [default = ""];
  5. }

所有 API 参数属性有三种形式:

  • Required:必须赋值,不能为空
  • Optional:可选赋值,可以为空
  • Repeated:需要重复赋值 N 次,N≥0

请求pCTR/pCVR接口步骤如下:

  • 测试期间:在阿里云官网注册账号,获得AccessKey Id和AccessKey Secret,联系钉钉:『营销引擎技术支持』获取dsp_id。测试期过后,需要采买营销引擎服务,在系统中获取AccessKey Id、AccessKey Secret、dsp_id。

  • 构建请求参数parameter结构体:

  1. enum DmpIdType // 即user_id_type
  2. {
  3. IMEI = 0;
  4. IDFA = 1;
  5. IMEI_MD5 = 2;
  6. IDFA_MD5 = 3;
  7. }
  8. enum PredictType
  9. {
  10. CTR = 0;
  11. CVR = 1;
  12. }
  13. message AdInfo {
  14. optional uint64 advertiser_id = 1 [default = 0]; // 广告主
  15. optional uint64 campaign_id = 2 [default = 0]; // 营销活动
  16. optional uint64 adgroup_id = 3 [default = 0]; // 广告组
  17. optional uint64 creative_id = 4 [default = 0]; // 创意
  18. }
  19. message UserTag
  20. {
  21. repeated uint32 taglist = 1; // 该字段不用填充
  22. }
  23. message UserInfo {
  24. optional string user_agent = 1 [default = ""];
  25. optional string ip = 2 [default = ""]; // 如:171.9.25.175
  26. optional string geo_code = 3 [default = ""];
  27. optional string country = 4 [default = ""]; // 如:中国,中文用UTF-8编码,下同
  28. optional string province = 5 [default = ""]; // 如:黑龙江省
  29. optional string city = 6 [default = ""]; // 如:哈尔滨市
  30. optional string area = 7 [default = ""];
  31. optional UserTag gd_tag = 8; // 不用填充
  32. repeated string tag_list2 = 9; //不用填充,保留给其他
  33. repeated string tag_list3 = 10; //不用填充,保留给其他
  34. }
  35. // UserInfo的8,9,10号字段不用填充。
  36. message DeviceInfo {
  37. optional string network = 1 [default = ""]; // 2g/3g/4g/wifi
  38. optional string carrier = 2 [default = ""]; // Telecom/Unicom/Mobile
  39. optional string device_brand = 3 [default = ""]; // 手机品牌
  40. optional string device_type = 4 [default = ""]; // phone/pad
  41. optional string device_model = 5 [default = ""]; // 手机型号
  42. optional string device_name = 6 [default = ""]; // 手机商品名
  43. optional string os = 7 [default=""]; // ios/android
  44. optional string os_ver = 8 [default=""]; // 手机系统版本号
  45. }
  46. message MediaInfo {
  47. optional string url = 1 [default = ""];
  48. optional string refer = 2 [default=""];
  49. optional string appname = 3 [default=""]; // APP名
  50. optional string apppkg = 4 [default=""]; // APP包名
  51. optional string adslot = 5 [default=""]; // 广告位
  52. optional int32 adslot_width = 6 [default=0]; // 广告位宽度
  53. optional int32 adslot_height = 7 [default=0]; // 广告位高度
  54. optional int32 adslot_visibility = 8 [default=0]; // 广告位位置信息,在第几屏
  55. }
  56. message ScoreRequestParameter {
  57. optional string request_id = 1 [default = ""]; // 本次请求唯一标识,这个标识需要能用来关联后续的点击、转化等行为
  58. optional uint64 dsp_id = 2 [default = 0];
  59. optional PredictType predict_type = 3 [default = CVR];
  60. optional string access_key_id = 4 [default = ""];
  61. optional string user_id = 5 [default = ""]; // 将IMEI或IDFA经过MD5哈希,其中IMEI格式:长度为15位,且必须全部为阿拉伯数字;IDFA格式:长度为36位,由英文字母和阿拉伯数字组成,所有英文字母为大写,由4个“-”连接,一段为8个字符,二、三、四段为4个字符,五段为12个字符,如:1E2DFA89-496A-47FD-9941-DF1FC4E6484A
  62. optional DmpIdType user_id_type = 6 [default = IMEI];
  63. optional int64 timestamp = 7; // 如:1497451799
  64. optional MediaInfo media_info= 8;
  65. optional DeviceInfo dev_info = 9;
  66. optional UserInfo user_info = 10;
  67. repeated AdInfo ad_info = 11; // 关于创意的信息,是一个数组,用来支持多个创意的打分,一次最多支持10个,超出的话会返回广告数太多的错误码。
  68. }
  • 生成请求签名sign:

    1. 将parameter构建好之后调用protobuf的接口将它序列化为字符串StringToSign;
    2. 用Access Key Secret对前面所得的串进行签名,签名算法是先进行HmacSha1再对结果进行base64编码,base64(HmacSha1(StringToSign));
  • 发起请求后,获得请求响应,HTTP Body中包含protobuf结构:

  1. message ScoreResponse
  2. {
  3. required int32 result_code = 1 [ default = 0 ];
  4. repeated double score = 2; // 对应输入的每个广告的预测分数值,第一个值对应第一个AdInfo的打分,依次对应。
  5. }

返回码对照表:

result_code 描述
0 成功
1 服务端处理能力不足
2 接口不存在
3 uri输入有错
4 body为空或者提取错误
5 body 解析有错
6 接口不支持
7 时间戳过期
8 签名错误
9 ak不存在
10 ad 数目太多了

为了pCTR/pCVR模型的日常更新,需要回传数据:

  • 离线每日同步流量点击/转化数据:购买阿里云MaxCompute,将日志数据存储在您自有的ODPS表中,再将日志表授予只读权限给到营销引擎官方账户:ot@alibaba-inc.com。
  • 日志表的格式要求及建表语句如下:
  1. CREATE TABLE IF NOT EXISTS model_update_dataset (
  2. request_id STRING,
  3. user_id STRING,
  4. user_id_type STRING,
  5. request_ts INT,
  6. impression_ts INT,
  7. click_ts INT,
  8. click_num INT,
  9. convert_ts INT,
  10. convert_num INT,
  11. url STRING,
  12. refer STRING,
  13. appname STRING,
  14. apppkg STRING,
  15. adslot STRING,
  16. adslot_width INT,
  17. adslot_height INT,
  18. adslot_visibility INT,
  19. network STRING,
  20. carrier STRING,
  21. device_brand STRING,
  22. device_type STRING,
  23. device_model STRING,
  24. device_name STRING,
  25. os STRING,
  26. os_ver STRING,
  27. user_agent STRING,
  28. ip STRING,
  29. geo_code STRING,
  30. country STRING,
  31. province STRING,
  32. city STRING,
  33. advertiser_id INT,
  34. campaign_id INT,
  35. adgroup_id INT,
  36. creative_id INT,
  37. media_info STRING,
  38. user_info STRING,
  39. score DOUBLE
  40. )
  41. PARTITIONED BY (
  42. ds STRING COMMENT '20170901',
  43. dsp_id BIGINT,
  44. type BIGINT COMMENT '0=CTR, 1=CVR'
  45. )
  46. LIFECYCLE 360;
本文导读目录