算法怎么“知道”我们在“购物车”里放了什么?

  人们早已经习惯在打开一个网页的同时,可能会被推送各类商品广告,有时我们会调侃说自己又“被大数据”了。但很少有人知道,为了让这则毫不起眼的商品广告出现在适合的屏幕上,屏幕背后已经上演过一出蔚为壮观的群集大战:

  不同广告代理公司的系统对“你”进行识别和计算,根据识别结果各自把出价信息发送到广告竞价平台,广告竞价平台通过比价选择出价最高者,出价最高者获得这个广告展示机会,最终一则商品广告出现在“你”的屏幕上。

  这种通过实时竞价方式购买每一次曝光机会的广告形态,是互联网时代广告主在做重定向精准投放时最常用的方式,也是完全依赖“算法”的一种广告形态,因为以上那一连串竞价动作都必须在一秒钟以内完成。

  在重定向领域中最为知名的公司是出身于法国的科韬广告(北京)有限公司(Criteo),这家诞生于 2005 年的广告公司靠“算法”已经市值 27 亿美元,从 2010 年开始每年总营收都以超过 60% 的速度增长,2015 年的总营收超过 11 亿欧元。

  计算驱动下的精准投放

  尽管不知道“你”是谁,但在你加载一个网页时,系统已经在极短的时间里从 2 个维度对“你”进行了“计算”:花多少钱能够且值得购买这个为你展示广告的机会;购买成功后,广告以什么样的形式出现在你的屏幕上更有可能激发你的购买欲。

  “在广告投放的过程里,引擎和算法会对具体给你投放什么广告有一个推荐。比如你晚上在网上商店看到的是一双红色高跟鞋,看了半天没买就出去了,我们再投给你的广告,可能是一些红色高跟鞋,也可能是一双靴子,我们会有一个人工智能的引擎去预测。”

  Criteo 中国区总裁郑家强解释说,所有展示的广告都以海量数据和智能算法为基础,对消费者的具体行为和购买意愿进行分类,海量数据来自 PC 端的 Cookie,移动端则根据 ID 做预测。

  在看似简单的广告投放过程中,“算法”几乎无处不在。“出价算法”去实时衡量每一位用户的价值,给出恰当的价格去竞价;“预测算法”寻找到合适的用户后,投放那些更可能激发用户购买的产品广告;“推荐算法”则是量体裁衣给用户推荐适合的相关产品。

  比如 Criteo 为一位广告主投放广告,在找到合适的用户之后,会先对这个用户做转化率预测,转化率高者出高竞价,“比如我觉得这个人的价值是5,我的竞价就接近5,如果这个人价值是2,我用 5 去竞价,那我就可能亏本,因为他的转化率低于预期。”郑家强说,描述起来只有简单几句话,背后需要系统有强大的计算能力。

Criteo 中国区总裁郑家强

  除此之外,Criteo 还需要利用创意优化引擎去了解和迎合用户的喜好,同一款产品,需要提供不同的方式、颜色深浅、图片表现形式等方案,Criteo 要准备多达三万种创意组合去吸引屏幕前品味不同的的消费者去点击。

  美国知名电子商务技术公司 Monetate 的报告显示,97% 的用户在离开网站时不会发生任何购买行为,90% 的销售可能会在消费者首次接触网站内商品后的 15 天内发生。

  基于此,Criteo 用算法引擎帮广告主识别和找到潜在消费者,预测他们可能会购买的产品,再把个性化的广告推送到他们的眼前,激发用户点击、跳转,直到最终购买。

  比如会引导 15 天内可能转化为消费者的“潜在消费者”,去返回他们首次访问网站时所浏览的商品,并最终产生购买。另外,也追踪距上次访问 400 天内的流失用户,根据他们的浏览行为和兴趣爱好做分析再向他们推荐商品,让这些更早以前的访问者或休眠用户能够再次与网站产生互动。

  只做模糊识别,不做精准画像

  在《人工智能时代》一书中,作者杰瑞·卡普兰有这样一段描述:“任何时候,在你买东西、访问网站或者发表评论时,都有一支由电子智能体组成的雇佣军在暗处‘观察’着你。”

  在互联网时代,企业穷尽办法获取信息去为用户画像,力求比用户更懂用户,但“用户画像”往往让用户没有安全感。

  做用户画像的公司通常从互联网和社交媒体中获取用户的性别、教育程度、收入水平、社交喜好等诸多信息,再根据这些数据信息推送商品广告。郑家强认为这种“用户画像”的方式相比于重定向的精准投放,其实并不准确,因为大多数时候是在做猜测。

  Criteo 所在的重定向广告并不在乎用户的真正身份,不会去给用户做画像,也不会给用户做个人身份标签,甚至投放时也不关心广告位所在媒体的内容是什么。

  “我们只关心在竞价的过程中,买到的这个广告位值不值得,如果用一个很准确的价格去买到这个位置,就能很好地控制转化背后的成本。” 郑家强解释说,Criteo 在做预测和投放时使用第一方数据,不会也没办法对具体每一个用户画像。

  比如某位用户去过当当网浏览,只要他的 cookie 没变,虽然 Criteo 不知道这位用户是谁,但可以知道这个账户浏览了当当的很多商品页,使用这些第一方数据就足够做引擎分析。Criteo 需要的不是更多的用户数据,而是要预测转化率够高,出价够准确,这都要依赖机器学习能力和算法的提高。

  而回到文章的最开始“算法怎么知道我们在购物车里放了什么?”,其实随着机器学习能力的提升,广告的投放更加精准,不是“算法”知道我们在购物车里放了什么,而是算法潜移默化在影响我们的购买。

http://news.cnblogs.com/n/550869/

时间: 2024-10-28 21:05:45

算法怎么“知道”我们在“购物车”里放了什么?的相关文章

一个文件中有40亿个整数,每个整数为四个字节,内存为1GB,写出一个算法:求出这个文件里的整数里不包含的一个整数

4个字节表示的整数,总共只有2^32约等于4G个可能.为了简单起见,可以假设都是无符号整数.分配500MB内存,每一bit代表一个整数,刚好可以表示完4个字节的整数,初始值为0.基本思想每读入一个数,就把它对应的bit位置为1,处理完40G个数后,对500M的内存遍历,找出一个bit为0的位,输出对应的整数就是未出现的.算法流程:1)分配500MB内存buf,初始化为02)unsigned int x=0x1;  for each int j in file  buf=buf|x<<j;  e

一个文件夹里放多少个文件合适?

FAT16文件系统  可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte):  卷的最大体积是4GB:每个卷上最多可以保存的文件数量是65,536个 (2^16):  根目录下可以保存的文件和文件夹数量最大值是512个(如果使用了长文件名,该数字还会减小) FAT32文件系统  可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1byte):  Windows自带的工具可以创建的卷的最大体积是32GB:  每个卷中最

k8s集群启动了上万个容器(一个pod里放上百个容器,起百个pod就模拟出上万个容器)服务器超时,无法操作的解决办法

问题说明: 一个POD里放了百个容器,然后让K8S集群部署上百个POD,得到可运行上万个容器的实验目的. 实验环境:3台DELL裸机服务器,16核+64G,硬盘容量忽略吧,上T了,肯定够. 1.一开始运行5000多个容器的时候(也就50个POD),集群部署后,10几分钟就起来了,感觉还不错. 2.增加压力,把50个POD增加到100个POD,感觉也不会很长时间,都等到下班后又过了半个小时,还是没有起来,集群链接缓慢,使用kubect里面的命令,好久都出不来信息,UI界面显示服务器超时. 心想,完

【算法学习】双调欧几里得旅行商问题(动态规划)(转)

双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描述:平面上n个点,确定一条连接各点的最短闭合旅程.这个解的一般形式为NP的(在多项式时间内可以求出) J.L. Bentley 建议通过只考虑双调旅程(bitonictour)来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到左直至出发点.下图(b)显示了 同样的7个点的最短双调路线.在这种情况下,多项式的算法是可能的.事实上,存

算法题之找出数组里第K大的数

问题:找出一个数组里面前K个最大数. 解法一(直接解法): 对数组用快速排序,然后直接挑出第k大的数.这种方法的时间复杂度是O(Nlog(N)).N为原数组长度. 这个解法含有很多冗余,因为把整个数组都排序了,而实际上我们不需要这样做. 解法二(K数组排序): 首先,创建一个长度为K的空数组.从原数组中先挑出K个数进行排序并放到这个空数组中.这一步的时间复杂度是O(Klog(K)). 接着,从剩下的N-K个值中,依次遍历并与上面数组的末尾的数(即里面的最大数)相比较,并插入到合适位置.这一步的时

一些算法案例,如一个数组里取是个随机数(前端网备份)

先来看:var arr = [1,2,3,4,5,undefined,7,8,9,10,11,12,13,14];var len = arr.length;console.log(len);console.log(arr);console.log(arr[5]);if(arr[5]){console.log(arr[5]);}else{console.log("b");}输出如下14(14) [1, 2, 3, 4, 5, undefined, 7, 8, 9, 10, 11, 12,

在MetaFile里放图片

procedure TForm1.Button1Click(Sender: TObject); var m : TmetaFile; mc : TmetaFileCanvas; b : tbitmap; begin m := TMetaFile.Create; b := TBitmap.create; b.LoadFromFile('C:\SomePath\SomeBitmap.BMP'); m.Height := b.Height; m.Width := b.Width; mc := TMet

/*基本算法实现*/Linux中string.h里几个函数的实现

string.h extern int strcmp(const char*,const char*); extern char* strcpy(char*,const char*); string.c int strcmp(const char *cs, const char *ct) { unsigned char c1, c2; while (1) { c1 = *cs++; c2 = *ct++; if (c1 != c2) return c1 < c2 ? -1 : 1; if (!c

十大经典排序算法(Javascript版)

1 冒泡排序 时间复杂度 O(n²) .额外空间复杂度O(1). 1)算法步骤 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2)动图演示 3)什么时候最快 当输入的数据已经是正序时,时间复杂度 O(n) . 4)什么时候最慢 当输入的数据是反序时,时间复杂度 O(n²)