基于Spark、NoSQL的实时数据处理实践

本文基于TalkingData 张学敏 在公司内部KOL的分享主题《基于Spark、NoSQL实时数据处理实践》的整理,同时也在DTCC大会上做了同主题的分享。

主要介绍了项目的技术选型技术架构,重点介绍下项目面临的挑战和解决办法,还介绍了面对多维度多值多版本等业务场景时,使用BitmapHBase特性解决问题方法。

共分为上下两篇,本次发布上篇,下篇敬请关注。

一、数据相关情况

项目处理的数据主要来源于TalkingData的三条SASS业务线,他们主要是为移动应用开发者提供应用的统计分析、游戏运营分析以及广告监测等能力。开发者使用TD的SDK将各种事件数据发送过来,然后再通过SASS平台使用数据。

数据主要都和智能设备相关,包含的数据内容主要可以分为三部分,一部分是设备信息类,主要包括设备ID,比如Mac、IDFA等,还有设备的软硬件信息,比如操作系统版本号,屏幕分辨率等。另一部分是业务相关信息类,主要包括业务事件,会话信息,还有行为状态。关于行为状态,是我们在智能设备上使用算法推测终端持有者的行为状态信息,比如静止、行走、奔跑、乘车等。第三部分是上下文信息,包括设备连接网络的情况,使用的是蜂窝网络还是WiFi等,还有设备位置相关的信息,以及其他传感器相关的数据等。

关于设备体量,目前设备日活月活分别在2.5亿和6.5亿以上,每天的事件数在370亿左右,一天数据的存储量是在17T左右。

上图为整体的数据架构图,数据流向是自下往上。数据采集层使用的是TalkingData自研的SDK,通过SDK将数据发往数据收集层。数据收集层使用的是TalkingData自研的DataCollector,Collector会将数据发送到数据接入层的Kafka。每个业务线都有自己的Kafka集群,在Collector可以控制数据的流向,大多数据都是业务线一份,数据中心一份。数据处理层有两部分,一部分是使用Spark core或sql的离线计算。其中Spark是on yarn模式,使用yarn进行资源管理,中间通过Alluxio进行加速,使用Jenkins进行作业管理和调度,主要负责为业务方提供数据集和数据服务。

另一部分是使用Spark Streaming的实时计算,主要是为TalkingData管理层提供运营数据报表。数据存储层,主要功能是存放数据处理后的结果,使用分布式文件系统HDFS、Alluxio存放数据集,使用分布式数据库HBase、ScyllaDB,关系型数据库MySQL以及MPP型数据库GreenPlum存放服务相关的数据。数据应用层东西就比较多了,有供TalkingData内部使用的数据分析、探索平台,也有对外内外都可的数据服务、数据模型商城,以及智能营销云、观象台等。

二、项目面临的业务诉求

主要的可总结为四部分:

  • 首先是数据修正:离线计算是将数据存放在了HDFS上,如果数据有延迟,比如事件时间是昨天的数据今天才到,那么数据将会被错误的存放在今天的时间分区内。因为HDFS不支持随机读写,也不好预测数据会延迟多久,所以在离线计算想要完全修正这些数据,成本还是比较高的。
  • 其次是时序数据需求:之前的业务都是以小时、天、周、月等时间周期,面向时间断面  的宏观数据分析,随着公司业务扩展,比如营销、风控等行业,面向个体的微观数据分析的需求越来越多,所以需要能够低成本的把一个设备的相关的数据都取出来做分析。而面向时间断面的数据每天十几T,想从中抽出某些设备近1个月的数据就会涉及到500多T的数据。所以需要建立时序数据处理、查询的能力,能方便的获取设备历史上所有数据。
  • 第三是实时处理:离线计算少则延迟一个小时,多则一天或者更久,而有些行业对数据时效性要求是比较高的,比如金融、风控等业务,所以需要实时数据处理。同时,为了更多的丰富设备位置相关数据,我们还建立了WiFi、基站等实体的位置库,所以在实时数据处理时,需要实时读取这些库为那些连接了WiFi、基站但没位置数据的设备补充位置相关信息。
  • 第四是实时查询,这里描述的是面向实体、多维度、多值、多版本,接下来我详细介绍下。

我们将事件数据抽象出了各种实体,比如设备、位置、WiFi基站等实体,其中位置实体可以使用GeoHash或者网格表达。每个实体都有唯一ID以及多个维度信息,以设备实体为例,包括ID、软硬件信息等维度。单个维度又可能会包含多个值,比如WiFi,在家我连接的是WiFi1,到公司链接的是WiFi2,所以WiFi维度有WiFi1和WiFi2两个值。单个值又可能有多个时间版本,比如我在家连接WiFi1可能6点被捕获到一次,7点被捕获到两次。所以,最终建立可以通过指定实体ID,查询维度、列及时间窗口获取数据的能力。

三、技术选型和架构

数据接入层我们选择的是Kafka,Kafka在大数据技术圈里出镜率还是比较高的。Kafka是LinkedIn在2011年开源的,创建初衷是解决系统间消息传递的问题。传统消息系统有两种模型,一种是队列模型,一种是订阅发布模型。两者各有优缺,比如队列模型的消息系统可以支持多个客户端同时消费不同的数据,也就是可以很方便的扩展消费端的能力,但订阅发布模型就不好扩展,因为它是使用的广播模式。另一个就是,队列模型的消息只能被消费一次,一旦一个消息被某个消费者处理了,其他消费者将不能消费到该消息,而发布订阅模型同一消息可以被所有消费者消费到。Kafka使用Topic分类数据,一个Topic类似一个消息队列。Kafka还有个概念,叫consumer group,一个group里可以有多个消费者,同一个topic可以被一个group内的多个消费者同时消费不同的消息,也就是类似队列模型可以方便的扩展消费端能力。一个Topic也可以被多个group消费,group之间相互没有影响,也就是类似发布订阅模型,Topic中的一条消息可以被消费多次。所以Kafka等于说是使用Topic和Consumer group等概念,将队列模型和订阅发布模型的优势都糅合了进来。

现在Kafka官方将Kafka的介绍做了调整,不再满足大家简单的将其定位为消息队列,新的介绍描述是:可以被用来创建实时数据管道和流式应用,且具有可扩展、高容错,高吞吐等优势。另外,经过7年的发展,kafka也比较成熟了,与周边其他组件可以很方便的集成。但目前也有两个比较明显的劣势,一个是不能保证Topic级别的数据有序,另一个是开源的管理工具不够完善。

Spark现在听起来不像前几年那么性感了,但因为我们离线计算使用的Spark,有一定的技术积累,所以上手比较快。另外,Spark Streaming并不是真正意义上的流式处理,而是微批,相比Storm、Flink延迟还是比较高的,但目前也能完全满足业务需求,另外,为了技术统一,资源管理和调度统一,所以我们最终选用了Spark Streaming。

Spark Streaming是Spark核心API的扩展,可实现高扩展、高吞吐、高容错的实时流数据处理应用。支持从Kafka、Flum、HDFS、S3等多种数据源获取数据,并根据一定的时间间隔拆分成一批批的数据,然后可以使用map、reduce、join、window等高级函数或者使用SQL进行复杂的数据处理,最终得到处理后的一批批结果数据,其还可以方便的将处理结果存放到文件系统、数据库或者仪表盘,功能还是很完善的。

Spark Streaming将处理的数据流抽象为Dstream,DStream本质上表示RDD的序列,所以任何对DStream的操作都会转变为对底层RDD的操作。

HBase是以分布式文件系统HDSF为底层存储的分布式列式数据库,它是对Google BigTable开源的实现,主要解决超大规模数据集的实时读写、随机访问的问题,并且具有可扩展、高吞吐、高容错等优点。HBase这些优点取决于其架构和数据结构的设计,他的数据写入并不是直接写入文件,当然HDFS不支持随机写入,而是先写入被称作MemStore的内存,然后再异步刷写至HDFS,等于是将随机写入转换成了顺序写,所以大多时候写入速度高并且很稳定。

而读数据快,是使用字典有序的主键RowKey通过Zookeeper先定位到数据可能所在的RegionServer,然后先查找RegionServer的读缓存BlockCache,如果没找到会再查MemStore,只有这两个地方都找不到时,才会加载HDFS中的内容,但因为其使用了LSM树型结构,所以读取耗时一般也不长。还有就是,HBase还可以使用布隆过滤器通过判存提高查询速度。

HBase的数据模型也很有意思,跟关系型数据库类似,也有表的概念,也是有行有列的二维表。和关系型数据库不一样一个地方是他有ColumnFamily的概念,并且一个ColumnFamily下可以有很多个列,这些列在建表时不用声明,而是在写入数据时确定,也就是所谓的Free Schema。

HBase的缺点一个是运维成本相对较高,像compact、split、flush等问题处理起来都是比较棘手的,都需要不定期的投入时间做调优。还有个缺点是延迟不稳定,影响原因除了其copmact、flush外还有JVM的GC以及缓存命中情况。

ScyllaDB算是个新秀,可以与Cassandra对比了解,其实它就是用C++重写的Cassandra,客户端完全与Cassandra兼容,其官网Benchmark对标的也是Cassandra,性能有10倍以上的提升,单节点也可以每秒可以处理100万TPS,整体性能还是比较喜人的。与HBase、Cassandra一样也有可扩展、高吞吐、高容错的特点,另外他的延迟也比较低,并且比较稳定。

他和Cassandra与HBase都可以以做到CAP理论里的P,即保证分区容忍性,也就是在某个或者某些节点出现网络故障或者系统故障时候,不会影响到整个DataBase的使用。而他俩与HBase不一样的一个地方在于分区容忍性包证的情况下,一致性与高可用的取舍,也就是CAP理论里,在P一定时C与A的选择。HBase选择的是C,即强一致性,比如在region failover 及后续工作完成前,涉及的region的数据是不能读取的,而ScyllaDB、Cassandra选择的A,即高可用的,但有些情况下数据可能会不一致。所以,选型时需要根据业务场景来定。

ScyllaDB的劣势也比较明显,就是项目比较新,Bug和使用的坑比较多, 我在这里就不一一去说了。

前面分别简单介绍了选定的技术组件,及他们的优缺点,最终项目整体架构如上图所示,数据流向用灰色箭头代表,数据采集和收集都与离线计算一样,不同的是在Spark Streaming从Kafka消费数据时,会同时实时从ScyllaDB读取wifi、基站定位库的数据参与位置补充的计算,然后将处理的结果数据写入HBase。再往下类似Lambda架构,会对HBase中的数据离线做进一步的处理,然后再将数据离线通过Bulkload方式写入HBase,关于其中的Bitmap应用,后边再聊。

架构右边部分是服务相关的,首先是中间件,主要屏蔽了异构数据库对应用层服务的影响,再往上是规则引擎服务,因为我们上线在SDMK的应用服务有100多个,导致服务管理成本很高,并且也不利于物理资源的合理运用,所以上线了规则引擎服务,将所有服务的业务逻辑都通过规则表达,这样上线新服务就不需要重新申请服务器,只需要添加一条规则即可。等于是就将一百多个服务转换成了一个服务,当规则引擎负载较高时或者大幅降低后,可以很方便的进行资源的扩充和减少。SDMK是TalkingData研发的类似淘宝的交易平台,公司内、外的数据服务、数据模型都可以像商品一样在上面进行售卖。

DT数据侠专访崔晓波丨数据“独角兽”是怎样炼成的?

崔晓波简介

崔晓波毕业于南开大学,曾先后担任BEA亚太区电信技术中心总监和Oracle大中国区A&C技术总监。2011年,创立了TalkingData,将“数据改变企业决策,数据改善人类生活”作为公司愿景,践行“一切用数据说话”的原则,通过数据帮助客户实现一切可实现的价值,成为客户信赖的长期合作伙伴。

2010年,崔晓波和几个朋友来到地坛公园,一边晒太阳,一边讨论“创业”的事儿。

在这次创业之前,他身份很多元:包括黑客、程序员、连续创业者、国企处长、技术总监等等;在此之后 ,崔晓波用了七年的时间探索数据科学的商业道路,并成功打造了一个基于移动大数据分析的“独角兽”公司。

代号为“CXB”的“病毒少年”

与很多数据科学家的起点一样,崔晓波的数据之路也是从学生时代的计算机生涯开始的。

1993年,崔晓波考入了南开大学信管专业。中国九十年代的计算机大多还处于英特尔286、386的芯片时代,操作系统还是原始的OS2、DOS等,漏洞和Bug很多。当时与操作系统最直接相关的就是病毒了。很多学生为了完善操作系统的缺陷,开始研究病毒,进行一些“病毒攻防战”,比如第一代大麻病毒、小球病毒、变性病毒等。

国内第一代的程序员们,大多都是从“病毒”做起,崔晓波也是其中之一。

(图片说明:崔晓波在北京办公室接受DT君专访)

崔晓波回忆说,当时在他们系里,一个计算机学生的最高荣誉,就是能够被选中去“管理机房”。当时机房的管理团队都是学校最一流的计算机高手,他们为了保护机房的电脑,设置了很多高级的加密算法,让普通学生无法实现修改、删除计算机文件等。

然而过了一段时间,机房的管理人员发现有人绕过了他们的保护,在系统里留下了一段“CXB”的字符,颇有“到此一游”的意思,这说明有人破解了机房的加密算法。“于是他们就不断提高自己的加密算法难度,我就不断接着去破解,这种攻防战是最费脑筋的,但是也最有意思”。崔晓波回忆起当年的“病毒”攻防生涯,依然津津乐道。

管理机房的同学发现每次升级,都无法阻止“CXB”这段字符出现在系统里。这个代号的实际意义并不难猜,很快,学长们就找到了崔晓波。凭借这个“病毒绝活”,他被邀请加入了机房的管理团队。

在大学里研究“病毒”的时候,崔晓波逐渐结识了王江民、求伯君、吴晓军等中国最早的一批著名程序员们。其中,王江民的江民公司曾经发布了KV系列等中国最早的杀毒软件,是中国计算机软件领域的先行者。

一个有意思的小插曲是,早在90年代,崔晓波曾经就使用了一个数据科学的模型方法,破解了一款当时号称“无法破解”的杀毒软件:江民KV3000。只不过当时,他还没有意识到自己使用的就是数据科学的方法。

“KV3000中设置了大量的反跟踪陷阱,的确非常复杂,很难破译。”崔晓波回忆说,当时KV3000出来后,四个月都没有出现盗版,足以说明其复杂性。后来,崔晓波使用了一个模型的方法,恰好可以绕开那些逻辑陷阱,成功地进行了破解。

“我每破解完一个软件,就会取一个名字。我当时把破解了的KV3000取名为KK13,几天之后我去逛街,发现有人说KV3000被破解了!我很兴奋,赶紧买了一个回来,结果看到名字是KK13。特别搞笑。”崔晓波笑着说。

由于在计算机系统上出色的表现,崔晓波刚毕业就被吴晓军(DT君注:晓军电脑创始人,其发明的2.13汉卡是中国最早的汉字系统之一。)挖到了一家国企任职。

为了“务实”而来,为了“理想”离开

九十年代末是中国第一波互联网浪潮兴起的原点。腾讯、阿里、新浪、网易等这些后来的互联网大佬多是从98、99年开始起家,打造自己的互联网商业帝国。

而在太平洋的另一岸,美国的互联网也在经历着历史上最明媚的春天。这也吸引了很多优秀的中国程序员前去学习深造,寻找机会。

毕业了的崔晓波当时并没有考虑太多这些所谓的大趋势,来自新疆的他想法很实在——得先能在北京站住脚。“所以我就问了吴晓军两个问题:能解决北京户口么?能解决住房么?吴晓军说可以,我就来到了这家国企。当时真的没有考虑太多,直到进来才发现,这是一个卖农药和化肥的农产品公司,和数据、互联网几乎没什么关系。”

在那家公司里,崔晓波更多是被看成一个“修电脑的”,而不是什么互联网人才,这让一直很要强的他产生了一种强烈“要做事”的冲动。

“我当时看到了电子商务的可能性,于是就给领导写了一个关于创办农资交易网可行性报告。”虽然没太明白他要做什么,但是领导还是对崔晓波的想法提出了精神上的鼓励,以及物质上的“不支持”——只可以用公司的名头。于是,崔晓波就只能开始全部自己来。他为了创办农资交易网站,写了人生第一份BP(商业计划书),然后找融资、谈担保、拉货源等等。“最后还真在网站上卖出了一吨化肥!”崔晓波兴奋地回忆说。

后来他还牵头做了中国彩票网、中国企业网、棉花的交易系统等项目,是地地道道的连续创业者。这些项目大多取得了不错的效果——二十多岁的他那时已经成为系统内最年轻的处长,处理过上千万的投资交易,管理过几家不同类型的公司,从某种角度来说,他已经取得了世俗意义上的成功。

但这时他心中“理想主义”火苗却又在跳动了,最终,崔晓波还是选择了离开。国企体制化的环境与互联网“野蛮生长”的基因有着天然的冲突——“我觉得我不能一辈子呆在国企。”

崔晓波的离职当时还引起了一阵审计风波,因为大家不相信会有人放弃这么好的工作环境和待遇,去做其他的事情。他回忆当初的情景时说到:“领导当时还打趣说:‘小崔你是不是经济上有问题,你要老实交代啊’。”其实他当时只是觉得互联网和数据能做更多的事情,而自己不该局限于此。

离开国企后,崔晓波自降2/3的薪水,来到BEA System软件公司从头开始,一路从底层的合同工做起,到正式员工、管理岗,最后做到总监。BEA在2008年被Oracle收购,崔晓波也顺理成章地进入了Oracle。

这段外企的工作经历让崔晓波对现代的经营企业有了更多的认识。用崔晓波的话说,BEA教会了他如何运营一个创业团队,在Oracle则领悟到了如何把业务做大的秘诀。

一转眼到了2010年,已经在IT届摸爬滚打多年的他,再次逐渐开始思考创业的可能性。

理想主义的选择

那时的崔晓波已经35岁了,是Oracle大中华区A&C部门技术总监,在外企过着光鲜平稳的金领生活。不过,这份平静很快就被一块叫做“数据”的石子打破,并在以后的时间里不断地在他的生命中泛起波澜。

关于这次脱产创业,崔晓波一开始并没有想太多。他从自己过往的经历中,觉得看到了一个未来可能的新趋势——数据,于是认为自己应该去做这件事儿。

他们在创业初期讨论的话题非常理想主义,甚至“不接地气”。不谈市场、不聊客户、不提需求等一切商业的基本元素,崔晓波每天就只思考一个问题:做数据到最后,究竟是在做什么?

这有点像创业者版本的“人生三问”(虽然简化成了一个问题):我是谁?我从哪里来?我要到哪里去?——在崔晓波创业初期, 这种终极的创业哲学问题是最让崔晓波最操心的事情。某种程度上,这源自于崔晓波自己性格中对于理想主义的偏好。

在崔晓波职业生涯的几次选择中,每当现实与内心想法产生冲突的时候,他总会选择“唯心”一把。从开始做数据到现在,他会经常说到一种“数据信仰”,几乎把这种唯心式偏好发挥到了极致。

不过,如果你把自己还原到2010年的场景中,你会自然地感觉这种天马行空讨论,并不会有什么结果。彼时,“数据科学”在国内还不是一种显学,没有多少人留意它;互联网世界还集中在Web端的流量争抢中,3Q大战激战正酣;Nokia的功能机依然在手机市场上独霸天下,占据着中国市场将近50%的市场份额。

但是程序员出身的崔晓波,让他在当时对数据行业做了两个非常“务实”的判断:第一,手机将不再只限于通话;第二,数据将在移动互联网端产生爆发。

数据“独角兽”

“2008年的时候,我曾经有一次加入腾讯的机会。Pony(马化腾)当时跟我说了一句话,我印象非常深,虽然那个时候腾讯还没有如今这么大的规模,但他坚信:腾讯未来将改变人们的通信方式。”

崔晓波深以为然。虽然听起来有点俗套,但他认为伟大的企业普遍都有一个宏远的愿景。他从“数据分析”这个核心商业点出发,最后为公司定下了两个愿景:数据改变企业决策,数据改善人类生活。他认为未来企业的决策方式一定会从“经验性地拍脑袋”,转变为“科学地看数据”,而且未来人类的生活,都将会因为数据而发生深刻的改变。

不过理想很丰满,现实却很骨感。在创业的几年中,为了应对不断变化的市场环境,崔晓波也带领着公司几度改变业务方向。

覆盖手机端的移动互联网大数据分析是崔晓波的起点。从最开始的数据分析工具、到后来企业级的定制化数据服务,再到聚焦于几个垂直行业,做数据产品(数据集、数据模型和数据应用)。如今,TalkingData的月活跃用户已经突破了7亿,服务超过12万款移动应用以及10万多应用开发者,如今已经成为国内领先的独立第三方数据智能服务商。

如果仅仅是做数据分析,崔晓波并不是最早的一批先行者。百度等一批手握流量的企业其实早就开始了这方面的业务探索,但是很多公司为了流量和短期的变现,逐渐将数据分析与营销、广告等业务打包在一起,很难发挥出数据分析的客观性价值。于是崔晓波决定从侧面切入——“专注地做数据”。不推销、不打包,坚持第三方独立,崔晓波选择的落脚点,为自己的业务积累下了一批批忠实客户和良好的业界口碑。

“刚开始有些客户不相信,但是他们观察了两年后,发现我们真是这样,只专注于数据这一件事儿,不参与其他推广活动。有些客户的业务,也真的因为引入了数据分析而实现了快速增长,例如游戏、金融等行业。”

后来,当业务高速发展的时候,他们也走过一些弯路,比如布局DSP广告。“我们花了很大的精力和财力投入到DSP(Demand-Side Platform,需求方平台)广告的业务上,希望帮助广告主优化广告效果,但是忙活了很久都没有什么效果。”崔晓波最后认识到,这是因为国内的广告流量数据被污染得非常严重,以至于无法进行有效分析预测。平台主并不希望让自己的流量公开透明,从而影响财路,这使得整个行业的保护主义盛行。这也让崔晓波意识到第三方平台的局限性——如果平台的数据不真实,那么流量分析就是没有价值的。

创业初期,崔晓波的公司基本模仿了BEA时期的创业模式,非常高效;后来随着规模的扩大,他逐渐将在Oracle时期学到的渠道管理方法,移植了进来,通过打造数据生态的方式,拓展自己的数据源,优化产品和服务。

到2017年底,在各大媒体评的报告中,他的公司以超过10亿美元的估值成长为国内数据分析领域领先的“独角兽”企业。

以人为本的数据科学

2016年AlphaGo与李世石的围棋大战,可以称得上是数据科学世界的里程碑事件。由于这次比赛后,AI(人工智能)话题开始发生井喷式的增长,正式引发了2017年全球的AI产业热潮。

作为业余围棋五段选手,崔晓波和聂卫平老先生一起解说了李世石与AlphaGo当年的第三场比赛。“看完第三场后的第一感受就是绝望”,崔晓波说,“人类最好的棋手,在AI面前一点机会都没有,AI一步都不会下错。”

(图片说明:AlphaGo大战李世乭;图片来源:纪录片《AlphaGo》电影截图)

崔晓波认为,AlphaGo当时所展示出的AI技能主要在三个方面:价值网络、策略网络和蒙特卡洛搜索树搜索,其中蒙特卡洛树搜索是这次AI浪潮的核心。但是经历了一年多的发展,AI在其他行业的应用,并没有向人展示出类似在围棋领域足够的震撼。崔晓波说;“AI的本质只有一个,就是帮人做决定,但是除了在特定的诸如围棋等领域,AI还不能够达到比人更好的决策水平。”

所以,与其研究AI如何帮人做决定,崔晓波认为当下更实际的是,不如利用数据科学研究“人”本身究竟是如何做决定的。他受到MIT的人类动力实验室的启发,在公司成立了一个“人本实验室”,把数据科学与社会学、心理学等人文科学结合起来,研究人心里的内在动机和社会行为。

“目前,大部分商业数据公司主要是通过数据,观察人的活动行为,进而判断人的特点,作出相应的商业决策,并不关心人心理做决策的真正原因和动机。”崔晓波认为,人本实验室就是为了弥补这一点,让数据科学更加“以人为本”。“在数据时代,人的心智也在发生急剧的变化,这是我们做这个实验室的初衷”,崔晓波说到。

2017年底,崔晓波的人本实验室团队,用机器学习等数据科学的方法,重新对北京城市的人群做了一次分类。由于工业化和城市化的影响,传统的城市人群会根据阶层划分,在城市中形成多个中心化的网络布局,例如北京的金融街、CBD、某某学区等,这直接影响了城市规划和资源分配方式。

当崔晓波用时空大数据重新观察北京的人群时,他发现了一种基于时空折叠的新的分类方法。由于人们的作息时间、生活方式不同,有些传统意义上应该是某一阶层的人群,其实在生活中完全没有交集——他们都在国贸出现,但是永远碰不到——这就会让一个城市缺乏活力,影响资源的分配效益。数据科学给出了七种人群划分,然后,他们再用社会科学的方法去解读、验证它。

只有了解数据,又了解人的行为模式和动机,才能够进行更好的用数据改善人类生活。这可能是未来数据科学,离我们普通人最近的样子。

在采访的最后,崔晓波总结自己,是一个数据科学领域里“务实的理想主义者”。这听起来有点矛盾,不过,纵观他的职业生涯,他对人对事总是“很实在”,对自己对未来却又充满“理想”。在虚实之间,他似乎总能找到一种奇妙的平衡状态,践行着自己的数据科学之道。

注:

本文转自公众号:DT数据侠

原文作者:程一祥

TalkingData-2018年2月移动游戏Benchmark

TalkingData2018年2月移动游戏Benchmark解读:

付费率:2018年2月,移动游戏用户的付费率在Android平台略有下滑,在iOS平台有所回升,其中,动作类移动游戏在Android平台的付费率环比下降1.0%,在iOS平台则环比增长4.0%;

用户活跃度:2018年2月,Android和iOS平台移动游戏用户的活跃状况有所提升,其中,策略类移动游戏在Android和iOS平台的周活跃率分别环比增长5.3%和8.1%,月活跃率则分别环比增长4.6%和3.9%;

用户留存率:2018年2月,整体上Android和iOS平台移动游戏用户的一日玩家比例略有增长,次日留存率和7日留存率有所下降。其中,休闲类移动游戏在iOS平台的一日玩家比例环比增长0.7%,其次日留存率和7日留存率则分别环比下降0.7%和5%;

使用时长&次数:2018年2月,移动游戏用户的日均游戏次数和平均每次游戏时长总体保持稳定发展态势。其中,卡牌类移动游戏在iOS平台的日均游戏次数环比下降3.4%,平均每次游戏时长环比下降1.6%。

更多移动互联网的行业数据和报告,请登录TalkingData移动观象台

关于TalkingData

TalkingData 成立于2011年,是国内领先的第三方数据智能服务商。借助以SmartDP为核心的数据智能应用生态为企业赋能,帮助企业逐步实现以数据为驱动力的数字化转型。

7分钟视频,3大方面,让我们来聊聊数据可视化这件事儿

点击播放《7分钟视频,3大方面,让我们来聊聊数据可视化这件事儿》

《数中生智》第三期节目来啦!

你眼中的数据可视化是什么样子?

年终汇报的图表?

媒体报道的信息图?

每年“双十一”剁手节的成交量大屏?

No No No

数据可视化可并不只是

“用美观的画面展示统计结果”

本期栏目我们将跟随

TalkingData产品经理彭嘉的脚步

一同进入数据可视化的世界

探索不为人知的冷知识和黑科技

发现数据可视化的魅力与价值

数据可视化从哪来?

Markdown

William Playfair

来来来,同学们,抬起头来看黑板哈!(敲黑板!)

我们现在常用的传统图表(柱状图、饼状图等等)都是由英国人威廉 · 普莱费尔(William Playfair)于1768年所著的《商业和政治图解》一书中首次发明的。直到20世纪50年代,基于计算机图形学的发展,才慢慢出现了我们现在在网络和电子媒体上看到的数字可视化作品。

(课后练习:朗读并背诵全文)

你可能不了解的数字可视化案例

Markdown

浑天仪

数字可视化并非仅局限于2D的平面作品,也可以是3D的实物装置。我们非常熟悉的浑天仪,其实也是基于观测到的天体运行数据,定量展示天体运行规律的数据可视化应用。

Markdown

伦敦霍乱

数据可视化还有一个重要的作用,就是在探索问题时验证想法,例如英国人流行病学家约翰·斯诺(John Snow)通过在地图上做标记,成功发现霍乱规律并停用了被致病水源的水泵,进而阻止了1854年伦敦霍乱疫情的蔓延,成为地图数据可视化的典型应用。

Markdown

萤火虫飞行轨迹

近年来,一些科学家和艺术家又通过传感器收集数据,以数字化的艺术形式来引起大众的情感共鸣,比如德国物理学家克里斯蒂安 · 克维塞克(Kristian Cvecek)通过长时间曝光捕捉萤火虫的飞行轨迹,令人惊艳的美丽画面展示出萤火虫的迁徙规律。

实际生活中,数据可视化对商业有着非凡的意义和价值,比如彭嘉的日常工作就经常需要使用可视化工具去探索数据的特征,发现同一份数据在不同业务背景下的不同特征。

Markdown

比如借助TalkingData开发的“城市透镜”,对北京市移动设备日常潮汐流动做了分析,实现更动态、更深入的洞察我们所生活的城市。

数据可视化的未来

Markdown

电影《黑客帝国》

未来,数据可视化可能不再局限于媒介、屏幕,而像《黑客帝国》那样,直接与人脑连接,跳过以眼睛为载体的视觉体验,真正在大脑意识中看到数据的样子。

互联网已经只能用PC上网的Web1.0 时代,发展到通过手机即可随时随地访问网络、实现人与人互联的Web2.0 时代,未来将会是万物相连的Web3.0 时代,所有物体最细微、最难以观察的变化都能被人类所采集。

面对指数级增长的数据,该如何从海量数据中发现规律并进行展现,是数据可视化未来需要解决的问题,也是需要我们不断探索的方向。

本期节目就到这里,感谢大家的关注,我们下期节目再见。

节目中所提到的案例使用了:

开源的UI组件库iView:https://www.iviewui.com

开源的地理信息可视化框架inMap:http://inmap.talkingdata.com

以及全新的位置大数据可视化平台DMap(尚未发布,敬请期待)

详细了解这些有意思的数据可视化应用:

2015年京东双十一实时可视化战报:https://www.digitaling.com/projects/16070.html

2017年淘宝双十一可视化大屏幕介绍:http://mp.163.com/v2/article/detail/D27QI6NP0511KPLK.html

一个苏格兰痞子改变了我们看数据的方式:https://www.atlasobscura.com/articles/the-scottish-scoundrel-who-changed-how-we-see-data

数据之美·数据的可变性:http://www.cbdio.com/BigData/2015-11/04/content_4089275.htm

图表的重要性:Anscombe的四组数据:http://www.matrix67.com/blog/archives/2308

全美印象地图:https://www.ted.com/talks/r_luke_dubois_insightful_human_portraits_made_from_data

中国偏见地图:http://roll.sohu.com/20160107/n433755438.shtml

更多参考资料:

威廉姆•普莱费尔(William Playfair)介绍:https://en.wikipedia.org/wiki/William_Playfair

约翰斯诺(John Snow)介绍:https://en.wikipedia.org/wiki/John_Snow

智慧商业,数据之选

 

日前,腾讯云联合国内领先的数据智能服务商TalkingData,在“2018 云+未来峰会”上正式对外公布了面向线下品牌商的数据智能产品——智选。这是一款将海量数据与机器学习有机整合,旨在解决实体门店的选址、商圈经营等场景问题,为智慧零售及多元化线下产业助力的数据智能产品。

近年来传统零售行业面临着前所未有的挑战,从网络、电商的飞速发展,至逐渐升级的线上线下有机整合,体验提升,智慧零售逐渐走进生活,改变着人们的消费习惯。智慧零售是新技术和实体产业的完美融合,倡导开放共享的生态模式,核心是社群、数字化、体验,以支付为原点、以“人”为中心、以大数据为驱动,帮助实体零售实现“降本提能”,拓展业务能力、耦合行业资源。这些元素在本次发布的“智选”产品中都得到了充分体现。

开店是线下品牌商面临的第一个问题,如何选择符合自身品牌特质的区域,目标城市、目标客群是否符合自身需求?各区块之间存在什么样的差异?具体到运营层面,目标区块内的潜在客户对商品的需求是怎样的?对不同品牌的接受度如何等问题,都是线下零售业面临的挑战。以往,由于缺乏有效的数据支持,这些问题往往得不到解答。而像选址、商圈运营等决策问题,只能靠人工收集材料后凭借过往经验进行判断。

“智选”依托于强大人本数据、地理信息数据和商业经济数据,结合经典模型和预测算法,从商圈区位洞察、潜客浓度探索、职住通勤研究,以及商圈配套与经济研究等多种角度,帮助企业在新消费环境下打破时空信息的不对称,高效量化推动基于位置商圈的经营决策,获得竞争先机。

“智选”致力于对选址中三大核心问题的解决:

  1. 从跟随友商式的“盲选”模式,向“优质区位优选”模式的演进;
  2. 从商圈宏观客流研究模式,向潜客深入挖掘的演进;
  3. 从研究汇报模式,向直抵根源的营业额预测方向演进;

结合经典选址模型实现的“一键区位推荐”,是“智选”的一大特色。综合考量全城市每个区块区位的客流和人口规模、意向客群浓度、区位商业浓度氛围、周边临近竞争形势,量化为模型评分,将原本需要几个月完成的工作秒级一键输出;推荐选址点精确至百米街道级别。打破过去被动评估模式,让品牌联营商在城市进驻时的门店覆盖战略,能够做到有的放矢。

图1:图为“一键区位推荐功能”
为某零售商精选的百米精度高分段区位

除了提供便捷、高效的智能选址功能外,“智选”通过强大数据能力,全方位、深度分析意向商圈区域,对商圈客流坪效进行评定,涵盖客流、性别、年龄、职业、兴趣爱好、消费偏好、区域配套设施等全面维度;同时提供月份、周度、全日24小时的客流潮汐变化,帮助零售企业全面评估其意向客群在客流中的深度和占比。在量化数据的基础上,为选址的开、停、并、转研究场景提供决策支持。

图2:图为“商圈区域洞察功能”
为某餐饮加盟店出具的部分深度客群洞察

此外,选址和客群研究的最终目标是门店业绩得到保障,解决选址点的销售预测问题是从根本解决的方法。“智选”通过在机器学习预测上的经验积累,将成熟的生产级预测评估模型整合在产品中,以“品牌-城市-训练”的方式,在线高效提供选址点的销售预测数据,为经营分析人员提供量化、准确的决策支持,极大提升以位置为核心的商圈经营策略成功率。

图3:图为“机器学习云选功能”
为某连锁便利品牌预测的百米店址区位与月营业额匹配关系

腾讯云大数据应用产品总经理聂晶表示:“通过结合双方优势,利用先进的大数据建模能力,共同致力于“智选”平台为行业带来革新,让大数据更加公正、准确、便捷地为线下企业提供商业化选址。

聂晶 腾讯云大数据应用产品总经理

TalkingData产品副总裁闫辉表示:“双方的合作,使得我们的业务理解和算法得以落地,打破时空信息的不对称。如今我们联手发布产品,让更多的实体品牌客户选址更便利,改变原有大海捞针的被动选择为有的放矢。”

闫辉 TalkingData产品副总裁

 

关于腾讯云

腾讯云——腾讯倾力打造的云计算品牌,以卓越科技能力助力各行各业数字化转型,为全球客户提供领先的云计算、大数据、人工智能服务,以及定制化行业解决方案。

关于TalkingData

TalkingData 成立于2011年,是国内领先的第三方数据智能服务商。借助以SmartDP为核心的数据智能应用生态为企业赋能,帮助企业逐步实现以数据为驱动力的数字化转型。

重磅!TalkingData-2018Q1移动游戏行业报告

一、行业状况

游戏时间碎片化,娱乐场景更多元

移动游戏作为线上休闲娱乐的一种方式,其随时随地能够适用较多人群的特性,受到大部分用户的青睐,无论是居家、乘车或者身处公司等场景,人们往往会利用闲暇的碎片化时间进行游戏,调查显示超过30%的玩家每天至少花费2小时打游戏。

Markdown

2017年-移动游戏用户游戏场景分布   数据来源:TalkingData

Markdown

2017年-移动游戏用户日均游戏时长分布  数据来源:TalkingData

研发运营精细化,洞悉玩家促发展

移动游戏行业参与者对游戏研发和运营拥有充分的经验积累,在研发上仍将工作重心放在核心玩法和互动体验上面,在洞察玩家时普遍以数据指标和玩家评论作为重要分析依据,用户优先和精细化发展策略帮助参与者紧跟市场步伐,洞悉玩家偏好。

Markdown

2017年-移动游戏行业参与者游戏研发关注点  数据来源:TalkingData

Markdown

2017年-移动游戏行业参与者洞察玩家方式  数据来源:TalkingData

端游IP骤升温,游戏厂商挖红利

随着移动游戏行业加快对端游IP的移植速度,大量端游IP开始通过改编或者重制等形式进入移动游戏市场,而持有较多端游IP资源的腾讯、网易等厂商则凭借技术、运营等积累,不断加码端游IP在移动游戏市场的投入并取得成效。

Markdown

2015-2017年-主流畅销游戏IP类型分布情况  数据来源:TalkingData
Markdown
2015-2017年-端游IP所属厂商分布情况
数据来源:TalkingData

新作冲榜愈艰难,卡牌游戏持降温

老游戏凭借稳定的玩家基础和良好的运营支撑,将生命周期进一步延长,截至2017年12月,主流老游戏的平均运营时间接近30个月,这也间接增加了新上线游戏冲击榜单的压力,尤其是竞争较激烈的角色扮演类市场,而卡牌游戏的热度则继续退减。

Markdown

2015-2017年-主流老游戏运营周期概况  数据来源:TalkingData

Markdown

2015-2017年-主流畅销新游戏市场分布情况  数据来源:TalkingData

精品游戏大厂造,头部游戏聚玩家

游戏精品化带来的直接影响是用户向头部作品集聚,马太效应下,优质游戏的用户基础会更稳固,游戏的各项运营指标也会优异;与此类似,一线厂商凭借广泛的市场布局和高额的研发投入,能够让旗下游戏满足并沉淀多元兴趣偏好的用户。

Markdown

2016-2017年-头部(TOP10)游戏用户覆盖率分布情况  数据来源:TalkingData

Markdown

2016-2017年-腾讯&网易游戏用户覆盖率分布情况  数据来源:TalkingData

二、人群洞察

热血汉子用户

注1:热血汉子用户人群,是指相对偏好动作射击、体育竞技等移动游戏的男性用户群体。下同。

手游忠实老玩家,娱乐时光宅家中

移动游戏伴随移动互联网应运而生,给予用户在移动碎片化生活中放松身心的娱乐空间,热血男儿中3/4的游戏网龄至少达到3年,87%曾为游戏付费,接近一半的日均游戏至少1个小时,而且4成以上的愿意在家中、交通工具或公司等场景下玩游戏。

Markdown

热血汉子用户-移动游戏网龄及付费概况  数据来源:TalkingData

Markdown

热血汉子用户-移动游戏时长及场景概况  数据来源:TalkingData

亲朋好友常开黑,游戏达人志趣同

热血男儿的亲朋好友同样是游戏达人,能够通吃“农药”和“吃鸡”,大约7成的人都会玩“农药”和“吃鸡”,享受这两款游戏所带来的欢愉;大约96%的热血男儿最近一个月会玩至少1款游戏,而近期经常玩的游戏则包括《王者荣耀》、《绝地求生》等。

Markdown

热血汉子用户-亲朋好友玩“农药”或者“吃鸡”游戏概况  数据来源:TalkingData

Markdown

热血汉子用户-最近所玩游戏概况  数据来源:TalkingData

注2:“吃鸡”玩家:指统计周期内安装过《荒野行动》、《穿越火线:枪战王者》、《小米枪战》、《终结者2:审判日》等具有“逃杀”玩法的游戏的用户人群。

注3:“农药”玩家:指统计周期内安装过《王者荣耀》游戏的用户人群。

堪当游戏多面手,高额付费剁手忙

在安装偏好方面,热血汉子安装游戏的款数整体较高,仅安装1-2款的TGI指数不足90,安装3款以上的TGI指数则均超过120,说明热血汉子游戏偏好比较广泛;在付费偏好方面,热血汉子在100元以上的TGI指数则均超过130,说明付费意愿比较强烈。

Markdown

热血汉子用户-移动游戏安装偏好分布  数据来源:TalkingData

Markdown

热血汉子用户-移动游戏付费偏好分布  数据来源:TalkingData

游戏佳人用户

注4:游戏佳人人群,是指相对偏好恋爱养成、模拟经营等主要面向女性玩家的移动游戏用户群体。下同。

东北女人更爱玩,奇迹暖暖受追捧

1/3的游戏佳人分布在华东地区,说明华东地区不仅盛产美女,也是女性玩家集聚地,相比移动互联网人群,游戏佳人在东北地区的TGI指数超过120,说明东北女人也比较偏好移动游戏;游戏佳人不仅青睐奇迹暖暖的甜美,也喜欢王者荣耀的英姿。

Markdown

游戏佳人用户-区域分布  数据来源:TalkingData

Markdown

游戏佳人用户-移动游戏TOP20   数据来源:TalkingData

花费金钱求美好,真实世界亦重要

57%的游戏佳人曾为移动游戏买单,她们愿意将金钱花费在更厉害、更好看、以及皮肤/英雄等,比较重视游戏内的实力和装扮;43%的游戏佳人还未向移动游戏付费,有一半人以为免费的就挺好,40%的人则认为不如花在真实生活中。

Markdown

游戏佳人用户-有付费行为概况  数据来源:TalkingData

游戏佳人爱包包,购物天性买买买

游戏佳人整体比较偏好餐饮、医疗、零售卖场等消费,注重吃穿以及健康,相比移动互联网人群,游戏佳人在箱包的TGI指数超过200,说明她们对箱包情有独钟;在生活消费的移动应用上,她们偏好手机淘宝、支付宝、美团、拼多多和京东等App。

Markdown

游戏佳人用户-消费偏好概况  数据来源:TalkingData

Markdown

游戏佳人用户-生活消费相关应用TOP20  数据来源:TalkingData

寓教于乐用户  

注5:寓教于乐人群,是指通过移动游戏等益智启蒙应用,帮助家中孩童快乐成长的用户群体。

游戏娱乐常相伴,动漫Q版惹人爱

寓教于乐人群享有充分的游戏和娱乐机会,他们通过游戏的方式促进孩童智力的发展,儿童益智游戏的TGI指数达到289,说明游戏发挥着教育作用;在游戏风格上,寓教于乐人群相对偏好中国动漫、像素风格和Q版画风,可爱风格更能俘获童心。

Markdown

寓教于乐用户-游戏类型偏好  数据来源:TalkingData

Markdown

寓教于乐用户-游戏风格偏好  数据来源:TalkingData

热门新游戏

“呱儿”已失宠,旅行是真爱

2018年初,《旅行青蛙》风靡中国,被玩家视为“儿子”的小青蛙开始引爆朋友圈,从其百度指数和覆盖率变化趋势看,玩家养蛙的热度并没有长久维持下去,相比让“呱儿子”外出旅行,人们更在意本身的旅行,超过1/3的用户都会安装旅行应用。

Markdown

《旅行青蛙》-用户趋势  数据来源:TalkingData

Markdown

《旅行青蛙》-用户旅行偏好  数据来源:TalkingData

恋爱超次元,生活有格调

作为一款面向女性用户的恋爱经营游戏,《恋与制作人》在上线之后俘获了许多女性玩家的芳心,游戏热度尽管相比上线初期有所减少但仍维持相对稳定的表现,用户在游戏之余还较为偏好阅读、健康美容、教育、图片摄影和娱乐票务等应用。

Markdown

《恋与制作人》-用户趋势  数据来源:TalkingData

Markdown

《恋与制作人》-用户媒介偏好  数据来源:TalkingData

浴血杀场展雄风,竞技游戏燃基情

“吃鸡”游戏掀起的战斗热潮开始推向全球,正版IP光环的《绝地求生:刺激战场》持续吸引玩家,大约75%的男性玩家在“吃鸡”这场战斗中大展雄风,角色扮演、动作竞技、策略、冒险解谜、射击等富有激情的游戏同样吸引他们浴血其中。

Markdown

《绝地求生:刺激战场》-用户趋势  数据来源:TalkingData

Markdown

《绝地求生:刺激战场》-用户性别结构和游戏偏好  数据来源:TalkingData

三、行业趋势

贴近年轻人文化潮流,营销方式需创新

在移动互联网主导的新媒体时代下,年轻人的活力和思维得到极大释放,他们倾向通过感性和自由的方式表达个性自我,追求自由自在、刺激/乐趣、新潮/酷、定制化、激情等精神诉求,“打王者”、“吃鸡”、“刷短视频”、“斗图”等成为一种流行文化。目前来看,年轻人群自我表达的需求还没有完全被满足,移动游戏作为现代休闲娱乐方式之一,能够利用设备、技术、内容等的创新,迎合年轻人碎片化的互动娱乐需求,移动游戏产品如果想要更广泛触动年轻人群,需要改善在创新创意方面的策略。

Markdown

年轻人群观念倾向  数据来源:TalkingData

触动玩家游戏情怀,经典归根游戏本源

几乎在每一位玩家心目中,一段关于游戏的记忆都会令人难以忘怀,那些陪伴成长或青春的游戏往往演变成为经典,例如“马里奥”、“奇迹”、“魔兽”、“梦幻”、“QQ飞车”等对玩家情怀的投射并没有停歇过。从PC时代到移动时代,移动互联网赋予经典更多互动性和创新空间,许多玩家不仅没有消失对于经典作品的认同感,而且欣然接受游戏厂商所重新打造的移动游戏作品,因此,回归游戏本源的初心将能够让“情怀”不仅仅是情怀。

Markdown

玩家“入坑”的主要因素  数据来源:TalkingData

Markdown

《QQ飞车》-用户覆盖变化趋势  数据来源:TalkingData

小程序游戏新机遇,产品轻量不轻松

微信等社交平台的小游戏,将在2018年成为一个新风口,依托天然导量的超级入口,充满想象空间的小游戏市场吸引很多开发者跃跃欲试。小游戏由于门槛低、玩法轻度,适应人们碎片化的移动互联网生活,而且能够利用社交平台的人际关系网络增进互动性。所以,小游戏市场存在着大机会。但是,目前小游戏的发展也面临着变现等问题,尽管某些小游戏已经在商业化上迈出第一步,但是如何取得玩法与盈利的平衡,以及处理与平台的利益分配关系,将使得小游戏战场变得风云诡谲。

Markdown

微信平台小游戏数量趋势  数据来源:TalkingData

Markdown

微信平台小游戏(示例)

瞄准出海新商机,按需服务成常态

越来越多中国移动游戏开发者参与到拓展全球市场的行列,推出动作、角色扮演、策略等类型符合海外用户需求的产品,未来中国移动游戏将更加普遍借助Apple App Store和Google Play Store等生态系统,将产品和服务推向南美、欧洲、非洲、中东、北美和大洋洲等更多市场。

Markdown

中国移动游戏出海类型分布  数据来源:TalkingData

Markdown

中国移动游戏出海用户分布

 

Markdown

Markdown

技术专栏丨10大机器学习算法速览,带你开启AI之旅

原文作者:Sunil Ray
译者:TalkingData 张永超
原文链接:https://www.analyticsvidhya.com/blog/2017/09/common-machine-learning-algorithms/

简介

从广义上讲,机器学习算法有三种类型:

监督学习

该算法是由一个目标/结果变量(也成为因变量)组成,该变量可以从一组给定的预测变量中预测出来。使用这些变量的组合,我们可以生成一个由输入映射到所需输出的的函数。该算法的训练过程会尝试将模型的预测准确度提高到训练数据所需的程度。具体的算法有:回归、决策树、随机森林、kNN、Logistic回归等等。

无监督学习

该算法中,没有任何的目标/结果变量以用来预测/估计。基本上用于不同的群体间的聚类,通常该算法用于对不同的群体进行分组。具体的算法有:Apriori算法,K-means等。

强化学习

该算法是比较新的一个机器学习算法分类,使用该算法,机器会被训练来做出一些特定的决策。此时机器会被暴露在一个特定的环境中,通过反复试验不断的训练自己,知道最终得到一个比较好的决策结果。该算法会从过去的经验中学习,并尝试捕捉最佳的结果知识以做出更加准确的决策。典型的算法有:马尔可夫决策过程等。

通用机器学习算法列表

下面是一些通用的机器学习算法,这些算法基本上能够解决大部分的数据相关问题:

1.    线性回归(Linear Regression)

2.    逻辑回归(Logistic Regression)

3.    决策树(Decision Tree)

4.    支持向量机(SVM)

5.    朴素贝叶斯(Naive Bayes)

6.    k近邻(kNN)

7.    k均值(K-Means)

8.    随机森林(Random Forest)

9.    降维算法(Dimensionality Reduction Algorithms)

10.  梯度增强算法(Gradient Boosting algorithms)

  • GBM
  • XGBoost
  • LightGBM
  • CatBoost

1线性回归

线性回归主要用于根据连续的变量来估计实际值(例如:房屋成本,通话次数,总销售额等)。在该算法中,我们通过拟合最佳的分界线来建立独立变量和因变量之间的关系。该最佳的拟合线称为回归线,并可以由线性方程Y = a * X + b表示。例如:我们要求一个五年级的孩子根据班上同学的体重来排序,而不告诉他同学们的具体体重。他会怎么做呢?他可能会根据同学们的身高和体型来判断某个同学的体重,然后进行排序。我们并没有告诉他身高和体型与体重之间的关系,而他已经可以通过眼睛的观察来得到身高和体型与体重之间的关系了,而这个关系是符合上述线性回归的方程的。

在上述方程中:

  • Y — 因变量
  • a — 倾斜量
  • X — 自变量
  • b — 截距

系数a和b是基于最小化数据点与回归线之间的距离的平方差的总和而得出的。

假设我们有一些人员的身体和体重的数据,将其绘制在图表中。如下图所示:

这里我们已经找到了最佳的拟合线,其方程表示为y = 0.2811*x + 13.9,为图中黑色线。那么我们就可以使用这个方程来根据某人的身高,得到其体重了。

线性回归主要有两种类型:单一线性回归和多元线性回归。单一线性回归顾名思义,就是仅由一个独立的自变量表征,而多元线性回归由多于一个自变量来表征。在寻找最佳拟合线时,可以拟合多项式或曲线回归。

本文中的代码大部分为演示所用,在实际应用中需要替换甚至重写部分代码,请慎重复制粘贴!

Python code

1# Import Library
2# Import other necessary libraries like pandas, numpy…
3from sklearn import linear_model
4# Load Train and Test datasets
5# Identify feature and response variable(s) and values must be numeric and numpy arrays
6x_train=input_variables_values_training_datasets
7y_train=target_variables_values_training_datasets
8x_test=input_variables_values_test_datasets
9# Create linear regression object
10linear = linear_model.LinearRegression()
11# Train the model using the training sets and check score
12linear.fit(x_train, y_train)
13linear.score(x_train, y_train)
14# Equation coefficient and Intercept
15print(‘Coefficient: \n’, linear.coef_)
16print(‘Intercept: \n’, linear.intercept_)
17# Predict Output
18predicted= linear.predict(x_test)

2逻辑回归

不要被这个名字所糊弄了! 其实逻辑回归并不是回归算法。它基于给定的一组自变量来估计离散值(二进制值,如0/1,是/否,真/假)。简单的说,它通过将数据拟合到logit函数来预测事件发生的可能性。因此,它通常也被称为logit回归。因为它预测了可能性,即概率,因此其输出值在0和1之间。例如:你的朋友给你出了一道难题,并且他并不知道你的知识范围,而你能给出的结果只有能解决或者不能解决。假如这道题是高级物理学科的题目,你可能只有大学本科的经历,你给出能解决的概率可能只有20%,而如何你恰好是一个物理学博士,你给出解决的概率可能就有80%了,这就是逻辑回归。

从数学的含义上讲,逻辑回归就是结果的对数几率被建模为预测变量的线性组合。如下:

1odds = p / (1 - p) = probability of event occurrence / probability of not event occurrence
2ln(odds) = ln(p / (1 - p))
3logit(p) = ln(p / (1 - p)) = b0+b1X1+b2X2+b3X3....+bkXk

上述公式中,p是存在感兴趣特征的概率。它选择最大化观察样本值的可能性的参数,而不是最小化平方误差的总和(如在普通回归中那样)。

Python code

1# Import Library
2from sklearn.linear_model import LogisticRegression
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create logistic regression object
5model = LogisticRegression()
6# Train the model using the training sets and check score
7model.fit(X, y)
8model.score(X, y)
9# Equation coefficient and Intercept
10print(‘Coefficient: \n’, model.coef_)
11print(‘Intercept: \n’, model.intercept_)
12# Predict Output
13predicted= model.predict(x_test)

3决策树

决策树是一种主要用于分类问题的监督学习算法。该算法不仅仅支持分类问题,还支持连续因变量问题。在这个算法中,我们将人口分成两个或更多的齐次集合。这是基于最重要的属性/独立变量来完成的,以尽可能地形成不同的组。

如上图所示,可以看到该算法根据多个属性将一个群体分为了四个不同的群体,以识别“他们是否会参加比赛”。为了分组,它使用各种技术,如基尼,信息增益,卡方,熵等。

另一种理解决策树的绝佳方式是玩一个微软上经典的游戏 — Jezzball。基本上,你有一个有活动墙壁的房间,你需要创造墙壁,这样最大的区域就会被清理掉。

因此,每一次你使用墙壁来划分房间,你都将试图将一个房间划分为两部分。决策树也非常类似这种方式。

Python code

 1# Import Library
 2# Import other necessary libraries like pandas, numpy...
 3from sklearn import tree
 4# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
 5# Create tree object 
 6model = tree.DecisionTreeClassifier(criterion='gini') # for classification, here you can change the algorithm as gini or entropy (information gain) by default it is gini  
 7# model = tree.DecisionTreeRegressor() for regression
 8# Train the model using the training sets and check score
 9model.fit(X, y)
10model.score(X, y)
11# Predict Output
12predicted= model.predict(x_test)

4SVM(支持向量机)

SVM是一个分类方法。在该算法中,我们将每个数据项绘制为n维空间中的一个点(其中n是您拥有的要素数),每个要素的值都是特定坐标的值。

例如,如果我们只有个人的身高和头发长度两个特征,我们首先在二维空间中绘制这两个变量,其中每个点有两个坐标(这些坐标被称为支持向量)。

现在,我们将找到一些分割两个不同分类数据组之间线。而这条线将使得两组数据中最近点的距离最远。

 

在上面所示的例子中,将数据分成两个不同分类组的线是黑线,因为两个最近点离线最远。这条线就是我们的分类器。然后,根据测试数据在线两侧的位置,就可以区分测试数据属于哪个类了。

Python code

 1# Import Library
 2from sklearn import svm
 3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
 4# Create SVM classification object 
 5model = svm.svc() # there is various option associated with it, this is simple for classification. You can refer link, for mo# re detail.
 6# Train the model using the training sets and check score
 7model.fit(X, y)
 8model.score(X, y)
 9# Predict Output
10predicted= model.predict(x_test)

5朴素贝叶斯

朴素贝叶斯是一种基于贝叶斯定理的分类技术,假设预测变量之间具有独立性。简而言之,朴素贝叶斯分类器假定类中特定特征的存在与任何其他特征的存在无关。例如,如果果实呈红色,圆形,直径约3英寸,则可认为其为苹果。即使这些特征依赖于彼此或者依赖于其他特征的存在,朴素贝叶斯分类器也会考虑所有这些特性来独立地贡献该水果是苹果的可能性。

朴素贝叶斯模型很容易构建,对于非常大的数据集特别有用。贝叶斯定理提供了一种从P(c),P(x)和P(x | c)计算后验概率P(c | x)的方法。看下面的公式:

这里:

  • Pc | x是给定预测器(属性)的类(目标)的后验概率。
  • Pc是类的先验概率。
  • Px | c是预测器给定类的概率的可能性。
  • Px是预测变量的先验概率。

例子:让我们用一个例子来理解它。下面我有一个天气和相应的目标变量“是否参加比赛”的训练数据集。现在,我们需要根据天气情况来分类球员是否参加比赛。让我们按照以下步骤来执行它。

  • 将数据集转换为频率表
  • 通过查找像Overcast probability = 0.29和播放概率为0.64的概率来创建Likelihood表。
  • 现在,使用朴素贝叶斯方程来计算每个类别的后验概率。具有最高后验概率的类别是预测的结果。

Python code

1# Import Library
2from sklearn.naive_bayes import GaussianNB
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link
5# Train the model using the training sets and check score
6model.fit(X, y)
7# Predict Output
8predicted= model.predict(x_test)

6kNN (k-最近邻)

kNN可以用于分类和回归问题。然而,它在业内的分类问题中被更广泛地使用。 K最近邻算法是一个简单的算法,它存储所有可用的案例,并通过其k个邻居的多数投票来分类新案例。被分配给类的情况在距离函数测量的k近邻中最为常见。

这些距离函数可以是欧几里得,曼哈顿,闵可夫斯基和海明距离。前三个函数用于连续函数,第四个函数(Hamming)用于分类变量。如果K = 1,那么该情况被简单地分配给其最近邻居的类别。有时,在执行kNN建模时选择K是一项挑战。

kNN可以很容易地映射到我们的真实生活中。如果你想了解一个你没有信息的人,你可能想知道他的亲密朋友和他进入的圈子并获得他/她的信息!

选择kNN之前需要考虑的事项: * KNN在计算上很耗时 * 在使用kNN时,变量应该被标准化,否则更高的范围变量会偏向它 * 在进入kNN之前要更多地进行数据预处理,如异常值,噪音消除等。

Python code

1# Import Library
2from sklearn.neighbors import KNeighborsClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create KNeighbors classifier object model 
5KNeighborsClassifier(n_neighbors=6) # default value for n_neighbors is 5
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)

7K-均值(K-Means)

K-均值是一种解决聚类问题的无监督算法。其过程遵循一个简单的方法,通过一定数量的聚类(假设k个聚类)对给定的数据集进行分类。群集内的数据点与同级群组是同质且异质的。

例如在白纸上随机撒上的墨水, K-均值有点类似这个活动,每一块墨水水渍可以理解为一个群组。

  • K-means如何形成群集:
  • K-means为每个簇选取k个点,称为质心。
  • 每个数据点形成具有最接近质心的群集,即k个群集。
  • 根据现有集群成员查找每个集群的质心。这里我们有新的质心。
  • 由于我们有新的质心,请重复步骤2和3.从新质心找到每个数据点的最近距离,并与新的k-簇进行关联。重复这个过程直到收敛发生,即质心不变。

如何确定K的值:

在K-means中,我们有簇,每个簇都有自己的质心。质心与聚类内的数据点之间的差的平方和构成该聚类的平方值的和。另外,当所有群集的平方值总和相加时,群集解决方案的平方和总和为总和。

我们知道,随着群集数量的增加,这个值会持续下降,但是如果您绘制结果,您可能会看到平方距离的总和急剧下降到某个k值,然后再慢得多。在这里,我们可以找到聚类的最佳数量。

Python code

1# Import Library
2from sklearn.cluster import KMeans
3# Assumed you have, X (attributes) for training data set and x_test(attributes) of test_dataset
4# Create KNeighbors classifier object model 
5k_means = KMeans(n_clusters=3, random_state=0)
6# Train the model using the training sets and check score
7model.fit(X)
8# Predict Output
9predicted= model.predict(x_test)

8

随机森林

随机森林是一个决策树集合的术语。在随机森林中,集成了多个决策树(所谓的“森林”)。要根据属性对新对象进行分类,每棵树都会给出一个分类,并且该树会为该分类“投票”。森林选择票数最多的分类,即为最终的分类。

每株树种植和生长如下:

  • 如果训练集中的病例数为N,则随机抽取N个病例的样本,但需要更换。这个样本将成为培育树的培训集。
  • 如果有M个输入变量,则指定一个数m << M,以便在每个节点处从M中随机选择m个变量,并且使用这些m上的最佳分割来分割节点。在森林生长期间,m的值保持不变。
  • 每棵树都尽可能地生长。没有修剪。

Python code

1# Import Library
2from sklearn.ensemble import RandomForestClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create Random Forest object
5model= RandomForestClassifier()
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)

9

维度降低算法

在过去的4-5年里,在每个可能的阶段数据采集呈指数级增长。企业/政府机构/研究机构不仅拥有新的资源,而且还在详细捕获数据。

例如:电子商务公司正在抓住更多有关客户的细节,例如他们的人口统计数据,网络爬行历史,他们喜欢或不喜欢的内容,购买历史记录,反馈信息等等,以便为他们提供比最近的杂货店老板更多的个性化关注。

作为一名数据科学家,我们提供的数据还包含许多功能,这对构建良好的健壮模型听起来不错,但是存在挑战。你如何确定1000或2000年以外的重要变量?在这种情况下,降维算法可以帮助我们连同各种其他算法,如决策树,随机森林,PCA,因子分析,基于相关矩阵的识别,缺失值比等。

Python code

 1# Import Library
 2from sklearn import decomposition
 3# Assumed you have training and test data set as train and test
 4# Create PCA obeject pca= decomposition.PCA(n_components=k) #default value of k =min(n_sample, n_features)
 5# For Factor analysis
 6# fa= decomposition.FactorAnalysis()
 7# Reduced the dimension of training dataset using PCA
 8train_reduced = pca.fit_transform(train)
 9# Reduced the dimension of test dataset
10test_reduced = pca.transform(test) 

10梯度下降算法

10.1. GBM

当我们处理大量数据以进行具有高预测能力的预测时,GBM是一种增强算法。 Boosting实际上是一种学习算法集合,它将几个基本估计量的预测结合起来,以提高单个估计量的鲁棒性。它将多个弱预测器或平均预测器组合成强大的预测器。这些提升算法在Kaggle,AV Hackathon,CrowdAnalytix等数据科学竞赛中始终运作良好。

Python code

1# Import Library
2from sklearn.ensemble import GradientBoostingClassifier
3# Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
4# Create Gradient Boosting Classifier object
5model= GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)
6# Train the model using the training sets and check score
7model.fit(X, y)
8# Predict Output
9predicted= model.predict(x_test)

10.2. XGBoost

XGBoost是另一个经典的渐变增强算法,被称为在一些Kaggle比赛中获胜的关键性算法。

XGBoost具有非常高的预测能力,使其成为事件精确度的最佳选择,因为它具有线性模型和树学习算法,使得该算法比现有梯度增强技术快近10倍。

支持包括各种目标函数,包括回归,分类和排名。

XGBoost最有趣的事情之一就是它也被称为正规化提升技术。这有助于减少过度装配建模,并且对Scala,Java,R,Python,Julia和C ++等一系列语言提供大量支持。

在许多包含GCE,AWS,Azure和Yarn群集的机器上支持分布式和广泛的培训。 XGBoost还可以与Spark,Flink和其他云数据流系统集成在一起,每次迭代过程中都有内置的交叉验证。

Python code

 1from xgboost import XGBClassifier
 2from sklearn.model_selection import train_test_split
 3from sklearn.metrics import accuracy_score
 4X = dataset[:,0:10]
 5Y = dataset[:,10:]
 6seed = 1
 7X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=seed)
 8model = XGBClassifier()
 9model.fit(X_train, y_train)
10#Make predictions for test data
11y_pred = model.predict(X_test)

10.3. LightGBM

LightGBM是一种梯度提升框架,使用基于树的学习算法。它的设计是分布式和高效的,具有以下优点:

  • 更快的训练速度和更高的效率
  • 降低内存使用量
  • 更好的准确性
  • 支持并行和GPU学习
  • 能够处理大型数据

该框架是一种基于决策树算法的快速高性能梯度提升算法,用于排序、分类和许多其他机器学习任务。它是在Microsoft的分布式机器学习工具包项目下开发的。

由于LightGBM基于决策树算法,因此它将树叶以最佳拟合进行分割。因此,当在Light GBM中的同一片叶上生长时,叶式算法可以比平面式算法减少更多的损失,因此可以获得更好的精度,而现有的任何增强算法都很难达到这些精度。

Python code

 1data = np.random.rand(500, 10) # 500 entities, each contains 10 features
 2label = np.random.randint(2, size=500) # binary target
 3train_data = lgb.Dataset(data, label=label)
 4test_data = train_data.create_valid('test.svm')
 5param = {'num_leaves':31, 'num_trees':100, 'objective':'binary'}
 6param['metric'] = 'auc'
 7num_round = 10
 8bst = lgb.train(param, train_data, num_round, valid_sets=[test_data])
 9bst.save_model('model.txt')
10# 7 entities, each contains 10 features
11data = np.random.rand(7, 10)
12ypred = bst.predict(data)

10.4. Catboost

CatBoost是Yandex最近开源的机器学习算法。它可以轻松地与Google的TensorFlow和Apple的Core ML等深度学习框架相整合。

CatBoost最棒的部分是它不需要像其他ML模型那样的大量数据训练,并且可以处理各种数据格式;不会破坏它的可靠性。

在使用和执行Catboost算法之前,请确保数据中的缺失值已经被处理。

Catboost可以自动处理分类变量而不显示类型转换错误,这有助于您更专注于更好地调整模型。

Python code

1import pandas as pd
2import numpy as np
3from catboost import CatBoostRegressor
4#Read training and testing files
5train = pd.read_csv(“train.csv”)
6test = pd.read_csv(“test.csv”)
7#Imputing missing values for both train and test
8train.fillna(-999, inplace=True)
9test.fillna(-999,inplace=True)
10#Creating a training set for modeling and validation set to check model performance
11X = train.drop([‘Item_Outlet_Sales’], axis=1)
12y = train.Item_Outlet_Sales
13from sklearn.model_selection import train_test_split
14X_train, X_validation, y_train, y_validation = train_test_split(X, y, train_size=0.7, random_state=1234)
15categorical_features_indices = np.where(X.dtypes != np.float)[0]
16#importing library and building model
17from catboost import CatBoostRegressormodel=CatBoostRegressor(iterations=50, depth=3, learning_rate=0.1, loss_function=‘RMSE’)
18model.fit(X_train, y_train,cat_features=categorical_features_indices,eval_set=(X_validation, y_validation),plot=True)
19submission = pd.DataFrame()
20submission[‘Item_Identifier’] = test[‘Item_Identifier’]
21submission[‘Outlet_Identifier’] = test[‘Outlet_Identifier’]
22submission[‘Item_Outlet_Sales’] = model.predict(test)

总结

至此,相信你对机器学习的各个主要算法有了一个大概的了解,文中给出了各个算法的逻辑代码,你可以从这里开始,尝试解决一些问题,并在过程中加深理解。关于数据,你可以在网络上找到很多,而且在一些所使用到的Python库中也常内置了各种数据集,你可以查看相应的官方文档查找并直接使用。

万字长文,细数零售业中的那些数据挖掘问题(下)

引言

本文是 TalkingData 首席数据科学家张夏天翻译自 Highly Scalable Blog 的一篇文章,介绍了零售业中的数据挖掘问题。

本文内容包括零售业中的多个常见问题,如响应建模、推荐系统、需求预测、价格差异、促销活动规划、类目管理、财务影响等。

其中涉及的资源分配优化问题、个性化推荐、定向广告等业务问题,上下两篇完整阅读大约需要两个半小时。

本次发布下篇,上篇请查看——

《万字长文,细数零售业中的那些数据挖掘问题(上)》

问题 4: 价格差异

问题定义

零售商向客户提供一组产品时,针对每个用户都制定不同的价格来最大化整体的收入。另外,该问题可以重新定义为提供定向折扣从而在基线价格上改变价格。

应用

价格差异被广泛的应用在零售业并且存在非常多种显性和隐性的形式:

优惠券,店铺级价格分区,和折扣都是价格差异的例子。

价格区分与通过数量折扣来提升销售是相关的。

动态定价能用价格差异的原则和模型来增量的调整价格。

尽管我们在问题的定义中暗示了是细粒度的个体定价方式,但是这是非常极端的情况更多常见的方法是对大的客户分群设置不同的价格。

解决方案

价格区分是最基础的经济和营销问题 [SM11],因此

此处 G 是利润,Q 是销售数量,P 是单位价格,V 是可变的单位成本(大致相当于零售商拿到的批发价格),而是固定成本如管理成本。公式(4.1)中的价格和销量是互相依赖的,因为随着价格的提高需求会下降,反之亦然。价格和销量的关系通常可以用一个线性函数来逼近,这一函数具有一个一般被称为需求弹性的系数:

换言之, 需求弹性是需求量的百分比变化与价格的百分比变化的比率。公式(4.1)和(4.2)可以可视化如下:

需求曲线是一条由需求弹性和零售商利润定义的斜线,数值上等价于(Po-V) · Q0,此处 P0 是由零售商设定的单位产品价格。一方面,当价格接近可变成本时利润趋近于 0,虽然销售量很高。

另一方面,高价格将导致销售量下降,结果利润也会变得很小。这基本上意味着价格服从于一个数值优化问题,并且零售商可以用统计技术来估计需求弹性并找到使得公式(4.1)最大化的最优价格。

这一方法,即所谓计量价格优化的实用性是比较有限的 [SM11] 因为又公式(4.1)表达的模型过于简化了市场行为并丢弃了在竞争市场中一些重要的影响价格-数量关系的因素。例如,价格大幅度下降可能会引发竞争对手降低整个行业价格的对称反应,所以所有的市场参与者最终都会处于一个销售量和利润都较低的状况。

尽管计量价格优化有很多局限性,但公式(4.1-4.2)揭示了价格差异的本质。对于任意一个价格, 无论它有多优化,这一价格都是一种折衷。因为一些客户会因为这一价格太贵而放弃购买,尽管他们可能愿意以更低的在 P0 和 V 之间的价格(依然对两种利润是正向贡献)购买该产品。

此外,一些客户可以容忍高于 P0 的价格,尽管他们产生的销售量会相对较小。在这两种情况下,零售商无法获取位于需求曲线和可变成本线围成的三角区域之中的额外利润。

价格差异是一种自然的方法来克服单一常规价格的限制,通过根据客户的付款意愿将客户分群并向不同的客户群体提供不同的价格。考虑一个这种策略的特殊情况,在前一图表的常规价格外补充了一个较高的溢价(注意与单一价格策略相比利润区域如何增加):

这一考虑带来了零售商如何把相同的产品以不同的价格卖给不同的客户这一挑战性问题。一般而言,这需要在具有不同付费意愿的客户之间设置区隔以使得高付费意愿的客户不能以为低付费意愿客群设定的价格来付费。零售商可以使用如下几种区隔机制:

  • 店铺区域:连锁零售商店一般都位于不同的社区内,这些社区具有不同的平均家庭收入、平均家庭规模、最近竞争商店距离等人口属性和竞争性因素。这就自然对客户的价格敏感性以及寻找替代供应商的能力或者意愿做了区分。这使得零售商可以在店铺的级别上在不同区域设置不同的价格。

  • 包装大小:诸如软饮料或化妆品之类的快速消费品(FMCG)具有较高的周转率,消费者自然可以选择是频繁购买少量产品或者储存大量的产品。这种权衡也受到诸如家庭规模等人口因素的影响。这一机制通过购买大型或小型包装的意愿来创建区隔,并为不同包装尺寸设置不同的单位边际价格。买一送一(BOGO)优惠也与此机制有关。

  • 促销活动:客户可以根据他们是否愿意等待较低价格还是以正常价格立即购买来区分。此种客户分群方式被广泛应用于服饰领域,在该领域季节性促销是主要的营销机制之一。

  • 优惠券:许多客户不会愿意以常规价格来购买某一产品,但是当有折扣价时却会考虑购买。因此零售商可以从折扣中获得额外的客户,尽管他们贡献的毛利率相较于那些以正常价格购买的产品的客户较低。另一方面,向太过广泛的受众提供折扣可能是有害的,因为那些愿意以正常价格购买的客户也会使用折扣(当没有折扣的时候)。前面章节中讨论过的响应建模技术有助于解决这一问题。然而有一种 19 世纪就存在的传统解决方案——优惠券。优惠券代表需要付出一定努力才能赚取或兑换的价格折扣(例如,客户必须在报纸上找到它,剪下来并在商店出示),这就通过花费时间和精力获得折扣的意愿区分了客户。

  • 销售渠道:不同的销售渠道自然代表不同的区隔,因为客户对购买渠道的选择与他们的支付意愿密切相关。例如,与在杂货店购买相同葡萄酒的顾客相比,酒类商店顾客的价格敏感性一直较低 [CU13]。

尽管这些技术已经应用很久了,但是要建立一个完整的折扣优化模型是非常挑战的。并且,据我们所知,所有现有的模型都有这样或者那样的局限性。在本节剩下的部分我们考虑两个价格差异模型,这两个模型是根据美国超市(特别是 Safeway 在芝加哥子公司的数据)的数据设计并在这些数据上做过验证的。

基于数量和地点的差异

文献 [KJ05] 提出了这一模型,该模型的目标是联合优化基于包装大小的数量折扣和店铺级别的区域价格。这一模型与我们在需求预测章节中讨论的模型非常相似,只是该模型引入了更多的包装大小和折扣参数。

让我们考虑这样一种情况,一个零售商运营多个店铺,销售的某种产品也有几种品牌,产品的规格也有几种,例如可口可乐和百事可乐分别有 2 听装、4 听装和 6 听装。目标是优化每种包装的单位产品价格,这里假设单位产品价格是可以根据产品规格和店铺来调整。我们从标准的多元逻辑特模型(multinomial logit – MNL)开始,这一模型在前一节需求预测中讨论过。

它表示顾客在时间 t 在商店 s 购买产品 j 的概率,J 是产品的数量(所有品牌的所有规格加上)。时间以相对较长的时间间隔(如周)进行测量。参数变量 x 可以使用以下回归模型进行估计:

此处 zj 是产品规格,Pjts 是价格,djts 是折扣力度(单位美元),ruts 整合了诸如最近竞争商店等竞争性因素,而 fjts 则整合了环境变化因素如天气。因此, 回归参数 αk 基本上对应着客户对品牌、规格的偏好、对价格的敏感性、对折扣的响应度、对竞争者的偏好、对变化因素的敏感性,以及折扣对价格敏感性的影响等等。

文献 [KJ05] 认为促销案例中的价格敏感性回归模型应该比以上仅用一个回归量来表达价格敏感性更复杂,因为客户会有囤积产品的情况,这就使得过去的促销会提高其对当前产品价格的敏感性。这一方面可以通过将相应的回归器分解为两个部分来建模,如下所示:

以上公式中 α3 是平均敏感度而第二项则表示记忆效应。其中 W 是表示历史深度,即过去的周数,p0 表示常规价格,而 p 是实际的折后价格。类似的,也有观点认为对促销的敏感性也与最近的促销有关:

此处 wj 是最近的促销活动过去的周数。促销敏感性对 wj 依赖基于以下假设,两次促销之间的周期越长,则对促销的响应度越高。

公式(4.3)允许我们预测销售量,所以价格优化问题能够根据公式(4.1)分时间周期来定义:

以上公式中 cjt 表示批发价格,而 Qjt 表示预测的销售量。此处的优化约束条件是为了避免由市场竞争或者客户行为等主要因素的变化引起的剧烈的价格变化和偏移。

文献 [KJ05] 提出了这一特殊的约束条件,这一约束要求优化后的产品份额加权平均价格(表示产品的市场份额)不会超过优化前的份额加权平局价格(表示原始价格)。这一优化问题(4.4)可以在店铺水平上得到求解,这意味着在规格和地点上都可以做差异化,或者仅在连锁店级别上来差异化数量折扣。

个性化折扣和优惠券

尽管上面的模型在店铺层面做价格差异也隐含了客户层次上的价格差异,但是这一模型不是为单个客户的折扣优化来设计的。接下来我们考虑文献 [JT13] 提出的另一种模型,这一模型是为了专门优化个性化折扣和优惠券的。这一模型的主要优势是它不仅是优化折扣的粒度,同时也尝试为指定用户提供折扣的最优时间和折扣的最优有效期。这些时间属性上的优化思想来自于以下假设:一个客户购买的概率不是随时间恒定的,而是会随着时间变化的,因此对每一个用户而言都存在最优的折扣时间窗口。

这一模型的主要缺陷是其只能对特定品牌如厂商促销来进行优化,而不能用于品类管理。你为了对折扣的时间属性建模,假设对产品的折扣力度为 d,我们将客户 u 在时间 t 购买产品的概率分解为购买产品的概率和客户在在时刻 t 购买的概率乘积:

对给定产品的购买概率密度函数能够用公式(4.3)中用过的 MNL 的模型来估计。在时刻时购买的概率密度函数在文献 [JT13] 中由厄兰分布来建模:

此处参数变量 yu 可以用回归模型来估计,该回归模型与公式(4.3)中用来估计参数变量的类似,会用一个回归量来描述折扣力度,因此之后可以对其进行优化。

上面定义的购买概率使得我们能够对给定客户的销售量 Qu 作为折扣力度(以美元为单位)、折扣起始时间、和折扣周期的函数来建模:

以上推导可以使得我们导出如下毛利率优化问题:

这里 m 是在正常价格下的毛利率。以上公式中的第一项对应着收入,收入由三个方面组成(促销前的收入、促销期间的收入和促销后的收入);第二项对应着营销活动的成本。下图描述了这一优化问题:

顶部的第一个图显示了客户 u 购买的概率密度函数曲线,此图中对于给定产品在正常价格时的销量对应着 S0 区域。一个固定的永久折扣增加的销量对应的区域为 S1,因此总收入和促销成本(如中间的图所示)是与 S0 和 S1 成正比的。

时间优化的促折销使得收入与 S0+S2 成正比, 其成本与 S02+S2(如底部的图所示)。固定折扣促销和时间优化的促销之间的这种差异表明在概率密度函数具有某些数量性质时存在利用时间优化来改善毛利率的潜力。

问题 5:促销活动规划

问题定义

零售商向客户提供一组产品时,针对每个用户都制定不同的价格来最大化整体的收入。另外,该问题可以重新定义为提供定向折扣从而在基线价格上改变价格。

零售商准备一次促销活动,即对某个或者一组特定商品进行有时限的折扣。对促销活动的规划需要估计到下列有关的值:

  1. 哪些产品的库存需要避免在活动结束前缺货?

  2. 什么样的价格会最大化收入?价格可以考虑是一个恒定值或者是一个从活动开始到结束不同时间段的函数。

我们将考虑库存水平是预先确定的,零售商试图计算最优价格这种情况。这是时尚零售商在处理季节性清仓和款式翻新 [JH14, CA12] 中遇到的典型问题。这一问题可以以不同的方式来定义,如将需求预测和价格优化作为独立的问题来处理,也可以同时优化库存水平和价格,总之其目的是最大化收入。

应用

促销活动的规划在零售中有如下的应用:

  • 清仓和季节性促销是时尚零售业中的主要应用。

  • 某些商业模式如快闪零售(也被称为弹出零售)只有促销活动一种销售方式。

  • 快消品和易腐品的零售商可以使用促销活动策划来调整销售节奏与产品保质期同步 。

解决方案

动态需求预测和价格优化是经济学中所研究的基础问题,被称为收入管理。收入管理的理论在书籍如 [TA05] 中有很好的阐释和系统化的介绍。在服务业中的预定服务,如机票、体育场座位、酒店房间、租车等等场景中可以找到收入管理自动化的最先进和最有效率的例子。要理解这些技术可以如何在零售领域中使用,我们来考察由 RueLaLa(一个时尚零售商)提出来的方法论。

我们假设一个零售商计划对 N 个产品或者产品组(产品组中的产品价格相同,如不同口味的酸奶,或者不同花色的 T 恤)进行打折。设 P 为价格集合,该集合包含每个产品可以设定的价格。在实践中,P 通常是根据业务规则组成的比较小集合。例如,价格下限可以根据零售商的盈利水平定义为 29.90, 价格调整幅度根据心理价格可以设定为 5 美元,则 P=$29.9,$34.9,$39.9,$44.9,$49.9。

假设促销活动中的所有产品或者产品组都有某些共同点,例如同属于相同的类目“女鞋”或者“平安夜食品”,因此对一个产品的需求潜在的依赖于其他可替代产品的价格。

通过引入变量 S,其等于所有参与促销活动的竞争产品(产品组)的价格之和,而对某一产品估计的期望需求则为数学期望 E{Q | i,pj,S},此处 Q 是表示需求量的随机变量,i=1,2,……,N 是产品的索引,而 j =1,2,……,|P| 是单个产品或产品组的价格。既然 Q 与产品价格 S 和都相关,这就隐含地包含了产品价格与可替代产品的评价价格的比值对需求和其弹性都是有影响的。

现在我们可以在假设 S 为固定的并对所有可能的 S 求解这一优化问题 [JH14]:

当产品 i 的价格为 pj 时,二值变量 δi,j∈0,1 为 1,否则为 0。上述优化问题中的目标函数可以自然地表达为促销活动的收入。第一项约束保证每个产品的价格都在 P 之中(原文可能有问题),而第二项约束保证所有产品的价格之和为 S。其他关于库存水平的约束也可以加入到优化问题中来。

以上的优化问题需对需求 E{Q | i,pj,S} 做估计,这可以用前面章节中做需求预测和价格分群的技术来解决。然而,需要非常注意到缺货(而且是可取的)是促销活动中非常典型的情况,因此对很多产品的需求预测建模所要用到的历史数据都是被截断的。

正如 [JH14] 中所建议的那样,可以通过使用在此前促销期间没有缺货的产品的数据为不同产品类别构建画像来解决此问题,并使用这些画像来调整相应类别的需求曲线。

问题 6: 类目管理

问题定义

零售商根据类目销售产品。一个类目表示一组相对内聚的产品,这些产品有很多共同点(如”甜点”、“女式牛仔”等),所以客户有可能在他们的首选产品因某些原因缺货时愿意用另一产品来替代。

产品缺货的主要原因有永久性的品种减少(如因为有限的货架空间)和暂时的性的售罄。类目管理的目标是利用替代效用用优化方法计算出一个产品子集,这一子集在满足物理约束如可用的货架空间的情况下可以最大化毛利率。

应用

品类管理是一项相对专业化的工作,但是当目标是优化一个产品类目的整体收益而不是一个单一产品的收益时,它也会涉及到在促销优化问题中存在的替代效应问题。零售商一般情况下对类目的整体收益的关心程度远胜于对单个产品的优化,因此在本节中讨论的方法可以被用在很多不同的应用中以实现最优解决方案。本节研究的模型可以直接应用于以下类目管理方式:

  • 仓库的产品库存水平优化。一个特别重要的应用是对易腐产品的库存管理,这需要考虑到保质期和过去产品造成的潜在损失。

  • 优化货架的布局来调整相关产品的份额。

  • 类目规划(在类目中加入或者移除哪些产品)

解决方案

从计量经济学的角度来看,类目管理问题是由收益递减规律引起的。或者更具体地说,收入和成本与类目的规模关系是不同的,总的趋势是消费者购买能力在某个时候达到饱和,同时由于店铺面积和其他运营成本的增加,成本持续增长:

这一趋势引出了类目优化问题。这是一个非常具有挑战性的问题,因为它需要对整个类目中所有产品之间的相互依赖关系建模。然而,尽管面临这些挑战,在 [KOK07] 中已经提出了一种切实可行的类目优化模型,并在荷兰的连锁超市 Albert Heijn 中应用。在研究这一方法之前,我们先引入下列符号:

  • N={1,2,……,J} – 零售商给用户提供的一个类目下面的最大产品集合,即所有品类。

  • fi∈{0,1,2,……} – 产品 j 的库存水平。零售商通过选择 f 为 0(产品不出现在品类中)或者非 0 来优化品类。

  • F0 – 统一库存单位度量下的库存总容量。这里有个假设是所有产品的库存水平之和不能超过 F0。库存总容量可以由仓库或者店铺的可用货架空间所约束。

  • Nh ⊂ N – 店铺 h 的品类,是总品类的子集。

  • dj 表示产品 j 的原始需求率(当所有 N 品类都展示给客户时有多少顾客会选择该产品)

  • Dj – 观察到的产品的需求率(每天因为原始意愿或者替代效应而实际选择产品 j 的数量)。对给定产品观察到的需求与原始需求和其他产品的可获得性(替代效应)有关系,其可以被视为函数:

Dj({f1,……,fJ},{d1,……,dJ})

使用上述符号,品类优化问题可以形式化如下:

其中毛利率 Gj 是给定产品和其对应的观测需求的函数。这一函数很大程度上与零售商的商业模式有关,所以我们下面介绍一些通用的函数模板,基于这些模板可以根据实际的使用情况来定制毛利率函数:

公式(6.2)将观测需求乘以毛利率 m,这是对毛利润最简单的建模方式。该公式隐含假设了补货及时而没有缺货的情况。杂货这样的快消品正是属于这种情况,但是在其他领域如服饰则必须如公式(6.3)那样考虑缺货的情况。销售易腐货物的零售商还要考虑货损,公式(6.4)通过引入单位损失变量 L 来对此进行建模。

为讨论方便,后面我们假设所有产品的补货都是及时的,所以缺货是不可能或者是可忽略的。因此我们可以将 j∈{0,1} 作为二值变量来表示产品是否在类目中。更复杂的处理缺货的模型可以在 [KOK07] 中找到。

要解决(6.1)中的优化问题,我们需要定义观测需求函数。在无缺货假设下,需求函数可按照下面公式来建模:

其中 αk-j 是产品 k 被产品 j 替换的概率。上述公式是比较自明的:第一项是原始需求,而第二项是所有被从类目中移除的产品的累计替代需求。

公式(6.5)需要估计替代概率 αk-j 和原始需求率 dj。为了做这些估计,我们假设下列变量是已知的(我们已经在本文的前面章节讨论过需求预测):

  • Qjh,j∈Nh – 每个客户在店铺对产品的需求。假设 Kh 是一天内进过店铺 h 的客户数量, 则 Dj = Kh * Qjh。

  • Q0jh,j∈Nh – 每个客户在店铺 h 具有全品类产品时的需求(假设商店的品类是全的)。因为品类齐全所以不存在替代效应,因此 Q0jh 就是原始需求。

估计替代率 αk-j 是比较困难的事情因为产品集合 J 中有多达不同 J2的替代率。不过,[KOK07] 找到了下述客户行为的简化模型,在实践中这一模型有足够的精度并仅需要用一个而不是 J2 个变量:如果产品 k 买不到,客户会选择其第二选择产品来替代的概率为 δ,这一概率对一个类目下的所有产品都是一样的,则客户不买任何东西的概率为(1- δ)。这一模型引出了如下替代率的简单公式:

为了估计 δ, 我们将给定店铺的总需求定义为Qjh(可由历史数据来估计)之和,

另一方面,该值也可以根据公式(6.5)估计如下:

现在 δ 可以通过最小化总需求的实际值和预测值之间的差异来估计:

求解优化问题(6.1)的下一步是计算公式(6.5)中使用的原始需求率。我们首先注意到店铺 h 对 N 中所有产品的总需求可以按如下方式计算:

其中 Vh 是每天到访店铺 h 的客户总数。在公式(6.10)中,所有 Q0jh 之和乘以 Vh 表示在给定全品类时的的总需求。然而的值时针对拥有全品类的店铺估计得的,其值时与给定店铺相关(如地点,店铺面积等等)而没有被建模的。这可以通过公式(6.7)估计的类目需求和从公式(6.8)预测的需求比值来补偿调整。

在一个品类有限的店铺,总需求是以下两个部分的和:对给定店铺品类中存在的商品的需求和对中其他产品的需求。两部分的比率可以由表示如下:

自然的,Th * rh 表示对品类中存在的产品的需求分额,而(1- Th * rh)则表示对不在品类中的产品的需求份额。最后,我们对单一产品的需求可以当作是总需求的一部份来计算:

所有公式(6.12)和(6.9)中的系数都可以根据数据来估计,因此我们可以把所有公式展开到原始优化问题(6.1)中,则这个问题可以使用 [KOK07] 提出的数值方法来求解。

公式(6.1)将为每个产品都产生一个假定的最有库存水平 fj。这些库存水平值可以用来调整库存和优化货架布局。值得注意的是该模型使得零售商可以做假设分析来评估对品类和库存水平的改变会如何影响毛利率。

例如,零售商可以画出毛利率根据给定产品或者产品组的库存水平变化的函数曲线。这些曲线对易腐产品尤其具有描述性,因为毛利率是凸函数,当库存水平为 0 时函数值为 0,而当库存水平过高时毛利率因为产品过期造成的损失也会为 0,毛利率的最优值是在两种极端情况之间。

问题 7:财务影响

如果缺乏上述被讨论的优化方法的财务表现方面的数据,我们对这些方法和对应的数据问题的概述将是不完整的。尽管这些数据是不难获取的,但对此我们仍然需要谨慎对待,因为财务表现与零售商的商业模型机密相关,并且事实上我们无法隔离其他环境因素如市场增长或者竞争对手的行动对优化问题的影响。

除此之外,这些数字可能因很多因素而有很大的差异,所以本文中我们的目标只是提供一些基准,使得读者可以对优化的潜在幅度有所了解。以下列表收集了一些关于这些优化方法对财务影响的实例:

响应模型广泛用于整个营销过程,从零售到推广活动 [EP13]。经常有报道称,与随机投放相比,响应模型可以将推广活动的收益率提高 20-30%,而提升模型可以带来 15% 左右的实质性提升或在其他方法都不起作用的困难的情况下实现盈利 [PS08]。

在 RueLaLa 的实践中对 [JH14] 中提出的营销活动优化进行了全面评估,得出的一般结论是,综合优化模型比之前使用的启发式算法能提高约 10% 的收入。 [CA12] 中提出的并经 Zara 验证过的事件优化模型声称可提供 5.8% 的收入增长。

类目管理框架已在 Albert Heijn 进行了验证,以优化 37 个商店中 25 个子类别的分类。发现在这 25×37 = 1295 个情况中,使用传统方法有 701 个不理想,在使用了新的类目管理方法进行优化后可以提高约 6.2% 的毛利率。

最后,值得注意的是,大多数这里讨论的优化方法不会显著的影响零售商的成本,因此收入的提升大概率的直接带来净利润的提升。

结论

在前面的章节中我们概述了一些零售相关的计量经济学问题,给出了其应用和用例,并且阐述了可以应用到这些问题上的数据分析方法和优化模型。在最后的一节中,我们将把上述这些模型联系起来以提供一个全景式的总结。

由点到面

本文的主要目的是描绘完全依赖于数据挖掘和数值优化的决策自动化框架。因此,将这个框架可视化为一个消费数据并产生可执行动作和决策的管道是合理的。

首先,我们可以将数据探索和知识发现流程放入一个单独的层级中,该层级主要使用无监督学习算法,并且主要依靠人为因素来评估数据挖掘结果,例如客户群或者是购买产品的频繁项集。

虽然这些过程在实践中非常重要,但它们很难集成到自动优化过程中来,因为模式的发掘通常依赖于手工流程而且通常相比于增量式优化它对战略决策更有用。不过这一层的输出可以配置到下游的过程中,例如,新发现的客户群可用于定义新的倾向模型或引入并优化专属折扣。

接下来的两层分别与建模和优化有关。广义而言,建模层的基本目标是提供一个全面的消费者模型,定量描述他或她的价格敏感性,对活动和折扣的响应倾向,用一种产品替代另一种产品的意愿,对推荐的接受度,等等。

但是在实践中建立这样一个全面的模型是非常困难的,所以我们使用多种专用模型来处理不同的问题。然而,需要指出的是,这种想象中的消费者模型涉及到所有类型的优化问题,因此获取有关客户行为各个方面的全面数据至关重要。

优化层的主要挑战是多目标的联合优化。联合优化对计算来说是一个严重的挑战,而且最重要的是联合优化受到底层预测模型能力的限制,所以几乎所有的优化技术都只能处理一个或两个目标。

我们把这些层都放到下图中。组件之间存在许多可能的依赖关系和相互作用,因此我们仅展示了一个与响应建模相关的样例程流,以免图变得过于混乱。

定价的重要性

在这些不同的问题和目标中,我们需要非常重视定价决策以及所有于定价有着直接或间接关系的的优化问题。让我们用一个经典例子来说明定价决策的重要性。会议一下企业利润的基本公式:

G = Q · (P – V)- C

其中 Q 是销售量,P 是价格,V 是可变成本,而 C 表示固定成本。假设一个服装零售商每月以 40 美元的单价销售 10 万件服装,假设每件服装的批发价是 25 美元而固定成本为一个月 50 万美元。我们可以计算销售量、价格、可变成本和固定成本在变化百分之一的情况下是如何影响利润的:

在这个例子中,我们可以看到定价对利润的影响比其他变量大得多。尽管这是一个过于简单和任意的例子,这一模式在众多不同行业的不同企业中存在。这使我们得到如下结论:零售商应特别关注与定价(折扣、个性化价格、动态定价等)有关的优化方法以及支持这些方法的数据挖掘流程。

我们也注意到全渠道零售可以给自动定价优化带来新的机会。既然价格差异是最有力的定价技术之一,则定价优化的理想环境是为每一个客户提供显示或隐式(折扣)的个性化价格,而且所有的价格是可以动态调整的。数字渠道恰好提供了这些条件,其中每个客户都有自己独立和动态的对零售商的视图。

隐含维度的重要性

如我们已经提到的,许多零售业中的优化问题与用户的行为模型是内在相关的。在个人客户层面建立这种模型的能力是数据挖掘技术带来的最重要的好处之一,也是一对一营销的关键推动力。

客户建模的最复杂的例子可以在推荐系统中找到,这些系统通常使用隐式维度的概念来捕捉客户和产品的心理特征。这一概念非常的重要,它可能远远超出推荐系统的范围,但据我们所知,它并没有如期望的那样在其他应用中被广泛应用。这使我们得出这样一个结论,即整体的优化系统可以将推荐领域的最先进的技术应用到那些不常见的应用中而受益。

展望

在零售业中实现完全的自动化决策是极具雄心的。甚至可以说,在实践中想要衡量这些优化方法的表现几乎是不可能的,因为观察到的收益提升可能与市场趋势,竞争对手的行动,顾客品味的变化以及其他因素相关。

这个问题在经济学教科书中被称为内生性问题,这对于数据驱动优化技术的研发者和用户来说都是一个巨大的挑战,而且即使看起来成功的案例也会受到该问题的挑战而显得其结果没那么可靠。

尽管如此,在过去的十年中,主要的零售商一直在寻求将数据挖掘与数值优化技术结合在一起的技术的整体解决方案。这种先进的系统将是企业数据管理演进的下一个阶段,它将遵循对数据仓库的共识并大量采用数据学科学方法。

— 全文终 —

万字长文,细数零售业中的那些数据挖掘问题(值得收藏)

引言

本文是TalkingData 首席数据科学家张夏天翻译自Highly Scalable Blog 的一篇文章,介绍了零售业中的数据挖掘问题。

本文内容包括零售业中的多个常见问题,如响应建模、推荐系统、需求预测、价格差异、促销活动规划、类目管理、财务影响等。

其中涉及的资源分配优化问题、个性化推荐、定向广告等业务问题,上下两篇完整阅读大约需要两个半小时。

本次发布上篇,下篇敬请关注。

原文作者为 Ilya Katsov

零售是数据科学和数据挖掘重要的商业应用领域之一。零售领域有着丰富的数据和大量的优化问题,如优化价格、折扣、推荐、以及库存水平等可以用数据分析优化的问题。

全渠道零售,即在所有线上和线下渠道整合营销、客户关系管理,以及库存管理的崛起产生了大量的关联数据,大大增强了数据驱动型决策的重要性和能力。

尽管已经有许多关于数据挖掘在营销和客户关系管理方面的书,如[BE11, AS14, PR13 etc.],但绝大多数书的结构更像是数据科学家手册,专注在算法和方法论,并且假设人的决策是处于将分析结果到业务执行上的中心位置。

在这篇文章中我们试图采用更加严谨的方法和系统化的视角来探讨基于数据分析的经济学模型和目标函数如何使得决策更加自动化。在这篇文章里, 我们将描述一个假想的收入管理平台,这一平台基于零售商的数据并控制零售策略的很多方面,如价格、营销和仓储。

我们专注在将经济学框架和数据挖掘方法的组合有以下两个主要的原因:

  • 我们可以从经济学教科书上找到上百个与零售有关的经济学模型,因为关于市场、折扣、竞争等问题在上个世纪得到了深入的研究。然而,许多模型都是高度参数化的(即严格的由带有有限参数的公式所定义)并且不能足够灵活而精确地对现实世界的问题建模。

    但数据挖掘提供了很多非参数建模技术,可以帮助创建灵活而实用的模型。在最近十年里,也有许多成功的平衡抽象模型和机器学习技术的文章和案例研究已经发表。

  • 快速的数据循环使得在现代零售业中可以使用相对简单的模型做出更加准确的预测,因为小规模增量式的预测一般而言要比大决策更加容易。

    例如,因为对于一个新的颠覆性产品在消费者心中的感知价值是未知的,要计算它的最优价格是很困难的。但是根据需求和库存水平实时调整促销价格则是相对容易的。有一些成功的商业解决方案对价格优化就几乎丢弃了经济学模型,简单的根据销售闭环的反馈情况来决定价格的上升和下降[JL11]。

以上两点意味着在零售业自动化决策和动态优化具有很高的潜力,因此我们专注于研究这个领域。本文很大篇幅用于综述零售业者和研究人员发表的成果,这些成果都是他们在综合应用抽象经济学模型和数据挖掘方法构建实际的决策和优化系统中产生的。

特别的,本文主要受到3 个案例研究的启发,分别出自Albert Heijn [KOK07],荷兰最大的连锁超市,Zara [CA12],一家国际服装零售商,以及RueLaLa [JH14],一家创新在线时尚零售商。我们同样综合了来自Amazon、Netflix、LinkedIn 和许多独立研究者和商业项目的结果。同时,我们避免使用那些缺乏实践支持的学术结果。

我们的研究主要着眼于与收入管理相关的优化问题,包括营销和定价等问题。更加特殊的数据挖掘应用,如供应链优化和欺诈检测, 数据挖掘过程实现的细节(如模型质量的验证)则不在这我们研究的范畴内。

本文剩余部分组织如下:

  • 我们首先引入一个简单的框架将零售商的行为,利润和数据联系在一起。此框架将作为更统一的方式来描述分析问题。
  • 本文的主体部分探讨了一系列与零售业相关的优化问题。我们将在不同章节逐个介绍这些问题。每个章节会简要描述问题,并提供一组业务案例和应用,以及详细介绍如何将问题分解成经济学模型和数据挖掘任务,使得可以通过数值优化方法来解决业务问题。
  • 然后,我们会有一个章节专门讨论这些方法在实际应用中的可期的经济收益。 
  • 最后,总结部分会对这些问题之间的依赖关系进行讨论,从而阐明一般的原则和关键点。

优化框架

本文介绍了6 个主要与营销和定价相关的优化问题,这些问题都能够应用数据挖掘技术来解决。尽管这些问题非常不同,但我们尝试建立了一般性的框架来帮助设计求解所需的优化和数据挖掘任务。

该框架的基本思想是用一个经济指标,例如毛利率作为优化目标,并将这一目标作为零售商行为(如营销活动或者分类调整)的函数。

同时计量经济学目标也是数据的一个函数,即计量经济模型应该被零售商的特性参数化,从而在其输出中产生一个数值,如毛利率。

例如,某零售商在计划一个邮件营销活动。可行的行动空间可被定义为一组对于每个客户发送/不发送决策集合,而活动的毛利率则决定于营销动作(有些人会接受激励而另一些人不会)以及给定客户的期望收入和邮件成本。这一方法可以更形式化的由如下公式表达:

此公式里G是可用于分析的数据,是零售业者行为和决策空间,是计量经济模型函数,其参数是d和A,而A 是最优策略。这一框架由文献[JK98]整理提出。

模型G 的设计十分依赖于问题本身。在大部分情况下,对毛利率建模和优化都是合理的。但是,有些情况下其他的目标也是有可能的,就如下一章探讨的响应建模。同时需要注意的是优化问题(1)也跟时间有关系,因为环境会随着如新产品的上架、竞争对手的行动等因素变化,零售业者自己的行为也会产生影响。

数据挖掘在这一优化问题中的角色是非常重要的,因为计量模型G 通常都比较复杂且必须基于数据通过回归等数据挖掘技术学习确定。

在某些情况下因为复杂性太高(如用户的行为很难精确预测)或者因为无法将现有数据做外推(如对于完全新的服务),模型是无法完全确定的。这时,可以用A/B 测试和问卷调查来获得额外的数据来改进模型的精度。

问题1: 响应建模

问题描述

在广告或者特价优惠活动中,需要决定将一些资源投放给一些客户。而这些资源都是有成本的,如邮寄印制商品的目录的资金成本,或者一些负面效应(如使得用户取消邮通知订阅)。

同时, 这些资源将会影响用户的决策,如促使他们更多地消费或者购买更高价值的产品。其目标是找到一组最靠谱的候选客户,对他们投入资源后能够使得业绩最大化。

投入的资源可以是同质的(如所有参加的客户都得到同样的激励)也可以是个性化的。在后一种情况下,零售业者将对每个不同的客户提供不同的激励如不同产品的优惠券来最大化总体的收益目标。

应用

响应建模被广泛的应用在营销和客户关系管理上:

  • 确定特定的折扣、优惠券和特价,需要识别出客户对这些激励的反应。
  • 有这对性的邮件促销、活动和赠品(如4S 店提供的免费太阳眼镜)通常需要识别出最优价值的客户来降低营销费用。
  • 客户挽留计划需要识别出那些可能会离开但可以通过激励来改变主意的客户。例如,电商可以向那些放弃购物车或者离开搜索会话的客户发送特价优惠。
  • 在线目录和搜索结果可以根据客户对某些商品的的喜好来重新调整。
  • 响应建模帮助优化了电邮促销来避免不必要的垃圾邮件,这些垃圾邮件可能会让客户取消邮件订阅。

求解

基于以上的讨论,我们现在可以认识到这个问题就是资源分配的优化问题,而优化问题由一个目标函数驱动。一个最基本的方法是根据每个客户的响应概率和期望净价值来对促销活动的整体利润建模。

这里Pr(R│u;I) 是给定客户u 对激励I 的响应概率,g(u|R)) 是这个客户响应的激励的净价值,而c 则是激励的成本。公式中第一项是响应从响应用户获得的净收益,而第二项则是对应在没有响应的客户上的期望损失。目标是通过找到一组最有可能响应活动并能贡献高利润的客户子集来最大化G。因为公式(1.1) 可以约简如下:

这里E{g|u;I} 表示对给定客户在假定他会接受激励的情况下的毛利率的数学期望,而客户的选择标准则要符合以下条件:

同时,最优的客户子集U 可以定义为最大化毛利率的子集:

我们也可以以随机分配激励为基准的净值最大化。为此,我们假设参与该次营销活动的客户数固定为|U|。首先,我们将公式(1.2) 展开,显示的包括对于随机选取的|U| 个客户的营销活动的期望毛利率。

此处E{g|I} 是所有客户上的平均净价值。这一平均净价值是常数,因此在 |U| 确定的情况下在目标函数中可以被略去。因此,公式(1.2)在固定的情况下同样可以得到(1.3):

然而,文献[VL02] 提出这一模型存在一定的缺陷,因为该模型偏向于易于接受激励的客户,而没有考虑那些有没有激烈都会贡献同样利润的的客户。为解决这一缺陷,我们需要根据以下四种情况来计算客户集合U 的毛利率:

  • G1 – 根据公式(1.2)选择 U 并向中所有客户发送激励
  • G2 – 随机选择 U 并向 U 中所有客户发送激励
  • G3 – 根据公式(1.2)选择 U 但是不发送任何激励
  • G4 – 随机选择 U 但是不发送任何激励

公式(1.2)是最大化之差即相较于随机投放的提升度。另一种方法是优化,这一目标函数不仅仅度量相较于随机投放的提升度同时还考虑去除掉在同样的客户集合上不做任何激励的提升度。在此情况下,公式(1.2)变为如下形式:

此处最后一项对应的是未被激励的客户的期望净价值。这一方法被称为差分响应分析或者提升度建模由文献[BE09] 提出。

值得注意的是,公式(1.2)和(1.4)都不是通过最大化营销费用来优化的。考虑如下情况,每个响应的用户可以贡献100 美元的净利润,而激励费用为1 美元。如果一个客户组有100 万客户,其中有0.5% 的潜在响应者,则花费最大的营销活动是对每个客户都做触达则最终将损失50 万美元(总的响应者贡献的50 万美元净价值减去活动费用100 万美元)。

公式(1.4)对于各种类型的价格折扣特别重要(优惠券、临时价格折扣、特价)。考虑如下问题:“一个零售商应该向每天都买苹果的人提供苹果优惠券吗?” 根据公式(1.2),回答是肯定的。因为这个人很有可能会使用优惠券。

然而,更可能的是这个客户用更低的价格购买了同样数量的苹果,根本上这会降低零售商的利润。公式(1.4)考虑了默认的客户行为从而消除了这一问题。我们在下一节将继续讨论价格区分问题因为这一是个复杂的问题远超了公式(1.4)范畴。

公式(1.2)和(1.4)中净收入的数学期望能够基于过去客户对激励是否接受的历史数据用分类或者回归模型来确定。这一问题可能是非常有挑战性的,特别是当需要评估的激励与过往出现过的都存在某种程度上的差异。

在这种情况下,全规模的活动上线之前需要在一个客户测试组上进行测试。另外,对于零售业者而言毛利率并非唯一的关键指标。在公式(1.2)和(1.4)中使用的毛利率度量关心的是第一次付款后即时的汇报,从客户关系管理的角度看这是非常简单的视角。

零售业者还会关心其他不同的度量,度量上的多元性是如此巨大以至于有一门专门研究这个问题的经济学分支- 倾向性建模[SG09, LE13] – 这一学科发展了不同的模型来预测用户未来的行为。最重要的倾向性模型包括:

  • 生命价值预测。生命价值模型是估计一个客户在其生命周期内可以贡献的收入或者利润总额。这一指标对于那些目标为获取新客的营销活动而言是很重要的。
  • 钱包份额预测。钱包份额模型用来估计用户对于某些类型商品,如杂货或者服饰,在某一零售商及其在各竞争对手那花钱的比例。这一度量能够揭示哪些客户具有贡献高收入的潜力,因为这一模型能够用在忠诚计划和提升使用的营销活动中。
  • 类型扩展倾向。该模型估计首次购买某一类型的商品后,从休闲产品转换到奢侈品的可能性。这一模型能够帮助设计目的是获得使用扩展的活动。
  • 流失倾向。这一模型估计客户从给定零售商流失并转换到竞争对手的可能性。如果客户具有较高的流失倾向则可以定向进行挽留活动。例如,一个零售商可以识别出那些放弃了在线购物车或者退出了搜索会话但是提供一定折扣或者赠品后会改变主意的客户。
  • 购物习惯改变倾向。每个客户的购物习惯最终确定了其对一个零售商的价值,即客户的购买频率、购买什么产品、购买什么类型的产品等等。这些习惯通常是稳定的,一旦零售商改变一个客户的分层,这个分层将会持续。

因此,零售业者通常对找到那些对改变习惯比较开放的客户感兴趣, 如那些从一个城市迁移到另一个城市的人群, 从学校毕业的学生,​​ 刚刚结婚的人群等等。一个典型的例子是预测客户是否在怀孕早期[DG12] 因为新生命的诞生会显着的改变客户的购物行为。

以上模型都能够嵌入类似公式(1.4)的公式来代替毛利率目标。我们在后面的小节中将针对讨价格差异化的情况下对折扣的响应倾向建模的情况仔细探讨倾向性建模。关于倾向性建模的更多细节可以参考[FX06] 和[SG09] 两本书。

这一框架也能够扩展到在多个可能的激励方案中选择最优的方案。例如,一个零售商可以估计对于两个激烈方案A 和B(例如巧克力冰激淋和香草冰激淋)的期望表现然后对于给定的用户可以根据以下标准[WE07]来选择最优的选项:

最后,值得注意的是响应建模是与客户分群紧密耦合的:

  • 响应建模能够用来检验通过聚类行程的客户分群的可行性。一个分群应该对特定的营销计划有持续的响应。
  • 倾向性模型是基于客户数据训练得到的回归和分类模型。客户分群可以参考对于主要回归量的分析结果。另一方面,从聚类结果中也可以发现合理的倾向性模型。

问题2:推荐

问题说明

一组激励中的每一项激励对应着一个产品或者其他目录项目。展示这些激励并不直接与费用成本相关,但是只有有限数量的激励能够展示给用户。从这个角度来说,每个激励的展示都会占用一定的屏幕空间或者客户的注意力,所以给客户提供的某个激励的负面激励能够被机会成本的损失来度量。

在这样的目标下就需要将激励的子集对于每个客户而言都是个性化的(如网站上的推荐)从而最大化群体的购买表现。

应用

该问题最典型的应用有推荐系统, 个性化搜索结果, 和定向广告。此外还有一些其他重要的应用:

  • 厂商赞助折扣可以归为这类问题,因为零售商对激励的成本不关心(由厂商覆盖这部分成本), 他们仅关心有效的定向。厂商赞助的活动被广泛的应用在很多零售细分领域,如杂货店或者百货商店,因为这些厂商市场份额的提升有很重的依赖。
  • 交叉销售的营销能也够从推荐模型中获益,因为一些推荐技术能够揭示出客户画像中的隐含维度,如生活方式。这些能力对于跨类之间的推荐是特别有用的,可以基于客户服饰方面的消费行为向客户推荐家居或者厨具。
  • 推荐系统可以将用户的购买和浏览历史概括为心心理学画像,因此乏味的着装品味或者运动型的生活方式能够量化测量。同样的技术也可以根据竞争者销售产品的来对竞争者画像,就像根据客户购买来对客户画像。
  • 一些推荐算法能够基于文本描述来区分产品的心理维度,如生活方式等。所以商家可以利用它们来评估产品描述,也可以用来获得关于产品定位的适当措辞的建议。

特别需要注意的是尽管推荐通常被认为是线上服务特有的,但其所产生的基本原则和技术对于零售业的许多方面也是非常重要的。因为这些技术致力于揭示客户对产品兴趣的隐含关系。而这是零售商最基本的任务。

解决方案

推荐系统在过去20年是非常受关注的研究领域,[JZ10, RR10] 两本书提供了对几十种在各种论文,演讲和白皮书中提出的推荐算法和技术的系统化视角。

某种程度上,推荐技术的高度多样性在于一些实现推荐时遇到的挑战,如客户评分的稀疏性,计算的可扩展性,以及缺乏新物品和客户的信息。

显然,我们无法在本节中综述哪怕一下部分方法和算法,而且在此处探讨这些也没有太多的意义,因为这样的综述俯拾皆是。相反我们将关注于驱动设计推荐系统的目标和效用函数而基本上忽略这一问题的算法和技术侧的细节。

从计量经济学的观点来看,推荐系统问题与电商和全渠道商业在很多零售领域的兴起带来销售品类的快速扩张是紧密相关。大的平类增加了很多非畅销产品,每一个产品的销售量和贡献的收入都是很少的,但是这个“长尾”的总体贡献是非常显着的。

传统推荐技术如推广最畅销的商品不能有效利用非畅销商品的潜力,这就需要更巧妙的推荐方法在数百万他或者她从未探索过的产品中对其进行引导。

因为我们主要关注模型对客户在产品上的偏好的描述,我们将从根据效用函数的复杂性从简单到负责来介绍使用最广的推荐技术。我们将依据如下图所示的推荐技术层次分类图。这个层次分类综合了推荐系统的常用分类,但也不是完全一致:

单一目标

让我们从单一目标推荐任务的基本定义开始,这一定义被广泛的应用在推荐系统的文献之中。零售商向用户群体U={u_1,…,u_m } 销售物品J={j_1,…,j_n }。评分函数R:J×U 表示一个用户对一个物品的观点从负面(“不喜欢”)到正面(“喜欢”),通常使用数字来表示。

一些用户和物品对的评分值可以基于用户的评分或者通过分析购买历史,网站访问记录来估计。推荐任务则可以被定义为对给定用户-物品对(u,j) 评分值 ̃r_(u,j) 的预测。

有两种方法可以解决评级预测问题:通过查找与特定用户过去喜欢的项目相似的项目来独立估计每个用户的评分; 也可以通过对来自与给定用户类似的用户的评分进行平均来估计评分。这两种方法分别被称为内容过滤和协作过滤。

内容过滤

内容过滤的主要思想是基于对用户过往对于产品的偏好,行为和购买。尽管不可以对内容过滤做不同的解释, 我们选择将其作为分类问题[PZ07] 来强调数据挖掘的应用:

  • 每个用户可以被视作一个对物品预测评分的回归模型。一个特殊的例子是可以用二分类将物品分为两个类别- “喜欢”和“不喜欢”。
  • 一个用户的画像就是上面介绍的回归模型的一个实例。这一模型使用该用户的已知评分(显示评分,购买历史等等)来训练。
  • 给指定用户的推荐物品列表是通过对所有目录物品采用该用户对应的回归模型预测评分然后选择那些估计评分最高的物品子集来获得的。

尽管以上的过程似乎是是比较直接的,但是实际上确实非常挑战的。因为用户和物品是根本不同的实体,而且要找到一种可以直接将物品转换成回归模型可以使用的用户偏好这种微妙的东西。

最主要的问题是存货属性诸如品牌、物品名,或者价格对于衡量物品对用户的效用是根本不够的。尽管一些客户能够被满足忠于某品牌或价格取件的特征,但是需要更多微妙而有信息的维度如生活方式或者品味来描述观察到的模式和共性。

这些隐式的维度对于如电影、书籍、音乐,甚至是如服饰这样的有形物品都是非常重要的。零售商可以用如下的方法基于标准的分类技术来对带有隐含维度的物品打标签[GH02]:

  • 例如,服装可以用诸如时髦、保守、运动等标签来标识。 
  • 标准产品属性(如文本描述)旨在向客户提供特定的营销信息,因此它们隐含地包含了一些无形的属性。因此,人工评分项目的物品子集可以用于构建将从产品属性映射到隐含维度的分类模型。例如,可以使用贝叶斯分类方法来估计描述在隐含属性值出现时词出现的条件概率Pr(词项描述| 隐含属性值)。
  • 物品然后可以通过计算后验概率Pr(隐式属性值| 项目描述)来自动分类没有人工评分的商品。

一般化的来看,内容过滤和物品建模实际是信息检索任务,所以许多的为恩本挖掘和搜索技术(例如,[MA08] 的综述所提到的)可以被用来构建推荐系统。我们在此略过这些细节,因为从计量经济的角度来看这些都不是最重要的部分。

协同过滤. 前面部分提到的隐含维度的问题具有重要意义,此问题可以引导我们了解推荐技术的第二个系列。这个问题源于根本无法严格的对人的口味和倾向建模。

协同过滤是一种自然的,也许是唯一不需要对系统进行很多人工工作的解决方案- 推荐决策中对”人的因素”的需求通过其他用户的反馈来满足。

最基本的协同过滤模型[RE04, BR98] 直接由用户之间的相似度度量来定义:

此处r_u,j 为用户u 对j 物品的评分,U 是所有用户的集合或者启发式选取的给定用户的邻近用户,λ 是规范化系数,sim(u,v) 是两个用户之间的相似度度量, 而¯r_u 是戈丁用户的平均评分:

假设J_u 是一组用户评分过的物品。公式(2.1) 使用的平均用户评分概念来建模用户比其他用户在打分倾向上是偏高还是偏低,因为他们有的要求高有的要求低。虽然不是绝对必要,这一修正在实践是上非常重要并在最开始实现协同过滤时就被广泛应用了。

一般用余弦距离或者皮尔森相关系数来计算评分向量 J_u 和 J_v 之间的相似度。此外,文献 [ER98, SU09] 介绍了很多对于此基本相似度度量进行调整的多种方法来改进使用中的性能。

模型(2.1)存在一些显著的缺陷,首先这一模型的计算复杂性(与物品和用户数量成正比)很高,其次用户的评分是非常稀疏的。评分的稀疏性是指每个用户都只会对很小一部分物品进行评分,所以在计算向量 J_u 和向量 J_v 的相似度时经常会出现没有重合的元素,这会降低推荐的质量。

例如,众所周知 Amazon[SA01] 和 Netflix[YK08] 的评分矩阵中的评分缺失率达到 99%。为了克服这一限制,基于用户的模型(2.1)在通常被概念上非常相似的基于物品的模型 [SA01, YK08] 所取代:

其中物品之间的相似度度量是基于那些在两个物品上都有评分的用户的基准评分 ¯r_(u,j) 来计算的。基准评分同时考虑了用户偏差(用户的平均评分值相较于整体评分的偏差)以及物品偏差(物品的平均评分相较于整体评分的偏差)。

值得注意的是,有一简单的方法来实现公式(2.2),此方法通过寻找频繁项集(被频繁一起购买的物品)并基于在频繁项集的同现来计算相似度。这一方法因其简单被视为“穷人的推荐引擎”[RE03]。

模型(2.1)和(2.2)属于所谓最近邻模型,这些模型通过分析相似的用户或者物品的邻居来估计他们的评分。这一系列的算法也包括很多变种的技术 [SU09] 通过使用跟紧凑的概率模型或者其他近似方法来取代计算开销昂贵的检查邻居的方法。

尽管最近邻模型是一种被诸如亚马逊等领先的零售商验证过的推荐技术。但在根本上这些技术还是在根本上具有在内容过滤中就有的隐含维度所带来的问题。前面考虑的用户之间和物品之间的相似度度量对于揭示用户和无偏之间的复杂关系,其能力是有限的。

这与信息检索里面的同义搜索和多义搜索棉面临的问题是类似的,要揭示搜索者的实际意图,并将其意图翻译成文本和查询之间的相似度是非常挑战的事情。

为了解决这一问题,一种被称为隐含语义分析的的技术被提出来 [DR90]。该方法被提出来 10 年后被用来设计推荐系统 [SA00],并开创了一类新隐含因子模型。

隐含因子模型主要的思想能够被描述如下:评分函数 R 能够被表达成 m×n 矩阵(m 是用户数,n 是产品数), 其中的元素是评分值。这可以被当作一个线性空间问题。

推荐任务则可以被重新定义为用其他评分向量的组合来计算用户评分向量。实际上,公式(2.1)自然的就是一种权重由相似度函数定义的评分制的线性组合。然而,问题是评分矩阵缺失评分而稀疏,因偏见和随机因素通常带有噪音,而且基于物品维度则限制了揭示用户品味的能力,而品味通常是与一组物品相关而不是与单个物品相关。

换句话说, 被散落在巨大的低密度矩阵中并混有一定程度噪音的信号智能通过研究隐含模式才能显示出来。隐含因子模型的思想是用低维度的基来近似一个高维线性空间。这有助于达成以下目标:

  • 较少的维度能够帮助把信号的能量集中,则每个基向量对评分估计的贡献都是显著的。它通过丢弃简单的不适应这些较小的基啊的波动来减少噪声。
  • 基本的计算过程可以被设计来产生有着最少依赖的基向量,从而有效的揭示用户品味的主要倾向,这些倾向每个对应一个基向量。例如,Netflix 用这一方法来预测电影评分 [YK08, YK09] 时, 系统产生的维度清晰的对应着诸如喜剧,男女等坐标轴。

集合中的每个点沿着 R_1 和 R_2 维度都有着很大的坐标值并显示出数据的复杂而不规则的结构。然而,在另一个坐标系 B 中则揭示了数据可以被维度 B_1 有效描述,而维度 B_2 则并不重要,这暗示了这是一个一维的隐含因子模型。

某种程度上,隐含因子模型能够与离散余弦变换 (DCT) 相比较,离散余弦变换被用在图像压缩算法诸如 JPEG 中来用少量的谐波来近似图片。

以上的思考链引导我们到如下的隐含因子的形式化模型。首先选择维数b≪n,m 并将每个用户和物品都当作该维度空间中的一个向量。我们将用户u 的向量标识为p_u∈R^b, 物品j 的向量标识为q_j∈R^b。这些向量是基于评分举证计算R 得到的,计算过程中通过某种办法让向量b 的个分量都对应到上面所述的一个隐含维度。

因此,用户和物品都可以在同样的主题下进行编码,同时评分可以通过计算两个向量的内积,即将向量的维度两两对应相乘然后求和得到:

有许多不同的方法来计算用户和物品的隐含因子向量p_u 和q_j。最直接的方法就是用奇异值分解(SVD) 对评分矩阵R 进行分解。然而,基于计算稳定性和复杂性的考虑,在实践中一般使用迭代的梯度瞎讲优化方法[YK09]。

下图展示了卷积(2.1)和(2.3)之间的区别。左边对于给定物品的稀疏的评分向量与稀疏度相似的给定用户做卷积得到评分估计。而在右边,评分是通过计算两个降维后且能量密度很好的向量的卷积得到的。

多目标

以上讨论的推荐方法本质上都是由一个单一目标驱动,这一目标是提供最好的语义匹配或者预测偏好评分。然而,推荐精度并不是推荐系统设计的唯一考虑,零售商可能有兴趣对综合多个有冲突的目标在一起给用户提供推荐。

例如,食品杂货商可能有兴趣提升具有较短货架期的易腐食物的销量,时尚商店可能希望推广赞助品牌或当季款,更多的零售商可以从推荐较高利润率的产品或考虑产品库存水平避免以避免缺货来获得更好收益。

文献[JW10] 提出了多目标推荐系统并在LinkedIn[RP12] 中做了大规模验证。在LinkedIn 的例子中, 其主要的目标是给候选人推荐语义上匹配的工作机会,其次是显示找工作的行为。[RP12] 描述了该方法,将推荐任务定义为如下的优化问题:

此处:

  • ¯r 是由底层推荐系统基于语义匹配和相关性产生的原生推荐向量,¯r 中的第j 个元素表示的是第j 个产品的相关性分值(或排序)。
  • ¯f 是二级特征值向量,¯f 中的第个元素对应的是第j 个产品在次要目标上对应的分值。例如,这一向量可以产品的毛利率。
  • R(·) 是组合排序函数其综合了¯r 和¯f 形成一个新的物品排序平衡了两个目标。
  • g(·) 表示度量推荐系统性能的整体效用函数。
  • E{⋅} 对所有推荐效果的平均。
  • (·)_(1…K) 表示的是前K 个具有最高分数的元素,这里K 是给用户推荐的物品数。例如,如果¯r 中包括在册的所有n 个产品的推荐分,则¯r_(1..K) 对应的是K 个最值得推荐的产品。
  • dist(·) 是度量两个推荐向量之间的差异的距离函数,而c 是这一差异的限制阈值。根据[RP12], 一个合理而实际的距离度量是两个分值向量直方图的平方误差和。

上述优化问题的主要事项是是增加混合了次要目标的相关度分值的综合推荐的效用,但是对原声的相关性推荐结果和综合推荐结果的差异做惩罚来保证不会为了最求次要目标而完全牺牲相关性。

函数R(·) 的设计需要包括可调整的参数来调节两个目标的权重并决定哪个是主要的优化目标。这一方法可以直接的扩展到多于两个目标的情况。

我们能够使用大量的例子来展示上述优化模型是可以适配到实际的问题中去的。首先,考虑零售商要将收入目标整合到推荐分值里的情况。

整体的效用函数可以被期望毛利率定义,设m(p)∈[0,1] 为物品p 的规范化毛利率,而被购买的概率则由排序位置的倒数表示(即在推荐列表里排序越低的的物品,其转化概率越低)。

此处是概率规范化常数。综合排序函数可以被定义为如下:

其中β 是一个控制相关性和选取高毛利率产品之间的权衡的参数。这一参数决定了优化问题(2.4)的主要目标。

根据次要目标重新排序的另一个例子是促销特色商品,如打折产品或易腐货物。效用函数可以指定为特选产品在有K 个推荐项的推荐列表中的平均个数。

此处F(·) 是特选标志当物品是特选时为1,不是则为0。综合排序函数组合了相关性分值和特选标志,通过参数β 来权衡哪个是主要的优化目标。

以上的排序函数能够直接扩展到整合多个分离的特征,每个特征对最终排序分值的贡献尤其对应的权衡参数(所有参数需要联合起来优化):

关于问题(2.4)的数值优化算法的细节可以在[RP12] 中找到。

问题3: 需求预测

问题定义

零售商为客户提供一组产品。对给定产品的需求依赖于许多因素,包括产品本身的特性如价格或品牌,同类产品竞争对手的价格, 促销活动,甚至是天气。该问题的目标是整合这些因素来构建需求模型并且允许进行假设分析以预测对价格变化的响应,品类的扩充和减少,计算最佳库存水平,并分配货架空间单位。

应用

在本节中我们将讨论需求预测核心问题。这一问题可以被考虑为一个建造模块,该模块要求对影响需求的行为或者库存水平的限制建模:

  • 价格优化,促销活动计划, 以及定向折扣。
  • 品类管理和计划。
  • 库存水平优化。
  • 需求预测模型通常应用在市场营销活动设计中,因为这些模型能够解释需求回归量的影响。例如,一个需求预测模型可以揭示某一产品的价格敏感性(当价格变化时需求有多少变化)与包装大小和和销售区域的人口特性紧密相关,这就暗示了可以在不同的商店使用不同的价格并对不同包装的产品设定不同的单位毛利率。

我们将在后面的章节中把需求预测模型用在价格优化和品类计划问题上。

解决方案

需求预测可以被认为是一个相对简单的数据挖掘问题,只需要建立一个回归模型并用历史数据进行评估。然而,设计回归模型则不是那么简单的事情,因为需求受到很多有着复杂依赖关系的因素的影响。

在本节中,我们将研究文献[KOK07] 为Albert Heijn(一家荷兰的连锁超市)构建并验证的回归模型。这一模型基于早期的营销研究如[BG92],以及时尚零售商如RueLaLa[JH14] 和Zara[CA12] 的实践,这些实践中应用了相似的模型。

然而,重要的是要理解不同的优化问题需要不同的需求预测模型并且几乎不可能构建通用的需求模型来整合各种不同的需求影响因子。

我们从以下对一给定产品的需求模型开始:

此处:

  • V 是在给定时间窗口内顾客到访商店的数量,例如一天。
  • Pr(purchase | visit) 是客户在逛商店期间购买任意商品的概率。
  • Pr(j | purchase) 是当客户发生购买时在所有可选项中选择产品的概率。
  • E{Q | j;purchase} 是当客户选择了产品并购买时购买数量(单位数量)的数学期望。

公式(3.1)中的所有因素都可以用店铺的历史交易数据来估计。需求通常与日期(周几、节假日等)和店铺(大小、邻近区域的人口统计情况等等)相关,所以我们引入下标t 和h 来分别表示日期和店铺,而估计的需求就是这些参数的函数。

另外,商店属性,如大小、位置和平均消费者的收入可以纳入模型作为回归。根据[KOK07],商店访客的数量可以建模如下:

此处Tt 是天气温度,Wt 是天气舒适度指数(湿度、阴晴等),Bti 和Eti 分别是表示一天是星期几和公共假期的0/1 哑变量,H 是公共假期的天数,而α是回归系数。

购买事件是一个二值变量(购买/没有购买),所以我们可以用一个标准的建模方法- 将购买概率用一个Sigmoid 函数来表达并从数据估计指数参数:

则x 的回归模是:

此处Ajht 是哑变量,产品j 在促销时值为1 否则为0,Nh 是所有产品的数量,而β4 对应的是促销产品占整体销售产品中的百分比。

Pr(j | purchase) 的估计则更为棘手一些。客户选择建模在本质上是计量经济问题,是一个特别的经济学研究分支——选择建模理论。选择建模理论证明了多项logit 模型(MNL)是有效的方法来对多个选项中选择的概率进行建模。

此处会i 迭代遍历所有产品,yj 是一个参数变量。类似于购买事件的概率,我们对参数yj 建立了一个回归模型:

此处系数Γn+1 和数Γn+2 由所有产品共享,Rjht 和R 分别是单个产品的价格和产品的平均价格,而Ajht 和A 是促销哑变量和平均促销率,如上面对购买可能性回归模型描述的那样。

最后,单位产品的平均销售数量可以建模如下:

通过将上述模型代入根表达式(3.1),可以得到完全特别的需求预测模型。这一模型可以根据零售商的业务用例来调整,这些跳帧个可以通过增加更多的解释性变量如营销事件来完成。

技术专栏 | 深度学习与智能手机,那些被人工智能所改变的……

深度学习旨在升级智能手机的大脑

在大多数的广告行业当中,人们喜欢巨幅的宣传海报、带有耀眼光泽的宣传品以及各种前沿高科技的东西。当听见虚拟现实技术让曾经的摇滚明星以全息图的形式出现在舞台上时,所有人不禁心头一震,其中包括那些代理商们。

每个人都想方设法在新科技冲击的浪潮中,寻找爆点,以赚取名利。但目前人们的耳朵里已经听到太多的技术名词了,反而成了某种累赘,失去了诱惑力,比如深度学习的东西。

深度学习是机器学习的一个子集,目的是教会计算机在声音、图像和其他数据中找到某种规律或者模式。虽然乍看起来这并不能让普通人甚至那些营销人员兴奋起来,但事实是,世界上的科技巨头们:Facebooks、Apples、Googles、Netflixes、Microsofts、百度等等,都为此投入了大量的资金。例如,据报道,谷歌在2014年花费超过5亿美元收购了深度学习公司DeepMind。再例如百度是中国科技巨头,在硅谷和北京都开设了深度学习和以人工智能为中心的研发中心。而苹果公司也在大力聘请深度学习方面的专家。

为什么深度学习会如此火热?因为深度学习技术可以让你使用你的指纹解锁手机,它使Facebook和政府机构能够在图片中识别你的脸,这有助于Siri和Alexa了解你到底在说什么,广告商正在试验使用深度学习来计算有多少路人会抬头观看广告牌,自动驾驶汽车也正在使用深度学习来避免路障和行人等。

随着技术能力的发展,深度学习很快将会做的更多。未来学家们已经在考虑新的(有时是反乌托邦式的)它可以用于营销策略的方式,应用程序开发者们也越来越多地开始通过深度学习来增强图像和进行图像识别了。

至少在20世纪90年代以来,深度学习已经就作为一个学术研究领域而存在。但是由于其需要强大的计算和数据处理能力,鉴于当时的硬件限制,导致了创新的局限性。

随着硬件和软件技术的不断发展,到2010年初,学术界和一些企业开始尝试通过深度学习进行更多的实验。然后就像互联网一样,猫图像识别改变了一切。 2012年,Jeff Dean和Andrew Ng带领的Google研究团队将16,000个计算机处理器连接到一个神经网络自学成识别大量静止图像数据库中的猫的图像。

“结构化数据难以聚类,成本昂贵,但它是监督学习(最常见的机器学习)的基石,”位于洛杉矶的人工智能公司GumGum的计算机视觉技术主管Cambron Carter说。“Ng,Dean等人设法训练一个网络,从原始的YouTube缩略图中识别出猫,脸和人性化的结构,“

在谷歌取得突破之后,Facebook、IBM和微软等公司的团队都取得了进一步的发展,使得深度学习更便宜,更容易融入消费者的科技产品和服务中。

例如,百度2016年发布的研究报告使用人脸识别而不是门票来参加活动,Alexa的语音数据为亚马逊打开了一个丰富的新数据缓存。营销和广告公司已经在使用深度学习技术来推断Instagram图片和YouTube视频等数据。

深度学习军备竞赛

然而,深度学习的广泛应用并不容易,即使是上市的Google、Facebook和微软等公司也很关心如何将深度学习深入到他们目前的产品以及他们未来规划的研发中。

但是,大多数情况下,只能从公开的研究论文、会议演讲等方面获取一些零碎的知识,能够为未来深度学习的应用提供一些思路。例如自动驾驶汽车、虚拟现实、帮助盲人浏览世界、文字翻译、场景讲述等等。

Nvidia是一家硬件公司,其图形处理单元(GPU)由于深度学习的兴起而销售旺盛,在其网站上列出了用于识别图像中使用的字体的Adobe DeepFont,到国家中心适用于超级计算应用,可实时检测数百万英里外的引力波。

从根本上来说,深度学习可以让电脑做它们已经在做的事情,并且会更好。巧妙执行的深度学习算法意味着系统可以识别哪些车在Instagram照片中最常出现,或追踪观众观看电视广告多久才会感到厌倦。

由于机器学习专家群体相对较小,大型科技公司一直对其深度学习研究一反常态。鼓励百度,Facebook和微软等公司的研究人员发表论文;即使是超级诡秘的苹果公司也出版了自己的机器学习杂志。

苹果和其他供应商正在尽全力帮助软件开发者将深度学习功能集成到应用程序中。例如,微软提供免费的Cognitive Toolkit,据微软称,该工具包旨在通过让用户创建、训练和评估自己的神经网络来帮助创建企业级AI。该工具套件已经加速了一家中国公司AdDoc的野外空间数据分析,AdDoc技术可快速检测糖尿病并发症的发病情况。

智能手机=AI超级计算机?

摄影记忆,即时艺术作品,即时翻译,逼真的虚拟现实等等都会到你的口袋里。

在新的iOS 10/11中,神经网络人工智能在拍摄每张照片的十分之一秒内执行110亿次计算,以找出他们是谁,甚至是他们的心情。iOS10+的新照片应用程序只是越来越多的手持式人工智能的最新例子。 Aipoly发布的一款应用,可以识别物体并大声说出名字,以便让失明的人看到。只要将相机指向需要翻译的文字,Google翻译就可以将其翻译成你自己能看得懂的文字。而越来越多的应用程序嵌入了人工智能,让你的智能手机更加的智能化、人性化。

移动设备的发展也正在向着更加智能化发展,即将发布的某款手机,直接使用了人工智能芯片,让整台设备成了一个微型、但是快速的人工智能平台。可想而知,在不久的将来,人人都手持着一台人工智能计算机,时刻都在进行着人工智能活动。而更加智能化的应用程序正在改变着人类生活的各个方面。

我们将迈入一个全新的智能化时代,也将面临更加严峻的安全考验。让我们拭目以待。