三、用群体的过去行为预测相似个体的购物时间
前两节关注如何利用个体的过去行为数据预测其未来行为。在实践中,还存在其他的情况。
1、挑战:没有预测对象的过去数据
有的情境下,我们无法获取个体的过去行为数据。以传统的超市为例,顾客如果只用现金结账,则IT系统中记录的只是一笔笔交易,完全剥离不出每个顾客的记录。即便顾客使用微信、支付宝、银行卡结账,往往也只有流水号。若情况更好一点,也许有银行卡的后四位尾号,但并不足以清楚地剥离出每个顾客的购物记录。即便是超市老板,他有超市数据的完全使用权限,也会存在这类问题。
另外的情况下,我们甚至完全没有顾客的过去行为数据。例如,不可能有新顾客的以往数据,也不可能有顾客购买新上架商品的过去行为数据。想要基于顾客个体的过去数据预测其未来行为就变得完全不可能。
这个时候,我们往往需要通过群体的数据,来推测个体的行为。
2、用群体数据预测个体行为的方法
用群体预测个体与通过个体的过去行为预测其未来行为类似。本质都是要先获得描述个体行为方式的一个或者一套参数,具体需要几个参数取决于所用的概率分布。在前几节中,我们是用个体的过去行为数据计算出这些参数。在本节中,因为我们没有个体的过去数据,只好用群体的数据来计算这些参数。简单地说,要计算的参数和计算方法和前面相同,区别只是所依赖的数据集不同。本节是用群体的数据来代替个体的过去行为数据。
3、预测时的一致性前提
不论是用过去来预测未来,还是用群体来预测个体,所采用的数据与预测对象的一致性都是前提条件。我们在预测之前,需要认真判断一下。
用过去来预测未来,主要考虑的是未来与过去相比发生了多大的变化。如果变化是0,即完全没有变化,则可以完全用过去的数据代表未来。如果变化是100%,即变得完全不同,则完全不能用过去来推测未来。实际情况下,变化幅度通常在0~100%之间。最基础的模型往往假设变化是0,复杂的模型假设变化更大。
用群体来预测个体,主要考虑个体和群体的差别。如果差别是0,即个体和群体完全一样,则完全可以用群体的数据代表个体。如果差别是100%,即个体和群体完全不同,则完全不能用群体来推测个体。实际情况下,差别幅度通常在0~100%之间。最基础的模型往往假设差别是0,即认为个体只是群体中的单个例子,可以用某种概率模型表示。当个体和群体差别较大时,往往需要通过类似市场细分的思路,对群体进行细分,找出其中与个体最为相似的子群体,然后用这个子群体的数据来代表个体。分割出相似子群体后,要解决的问题就变成了用差别很小的群体数据来推算个体行为,这是前面两节已经解决的问题。
对一致性的判断通常有两种方法:一种是完全基于数据拟合,通过数据来检验一致性。例如,可以看看同一顾客前后两个阶段的概率分布是否发生变化;或者采用本书第六章提到的决策树的分类方法,对顾客进行分类。现在有很多机器学习的方法(决策树是其中一种),可以完全通过算力尝试得出最优解。另外一种判断一致性的方法,是运用管理经验。在数据驱动的时代,管理经验仍有价值。经验代表了很多横跨数据来源和数据维度的洞察(insight),往往能解开数据本身的迷局。讲述管理经验的书籍很多,本书重点仍旧是应用数据来支持决策,讨论的核心是如何分析数据,就不再展开管理经验方面的讨论了。
四、预测个体的购物次数
前三节,不论采用何种方法,我们的预测目标都是顾客未来的购物时间,也就是两次购物之间的时间间隔有多长。有了这个预测结果以后,当观察到顾客最近的购物发生在什么时间,我们就能预测他下次会在什么时间(例如哪一天)来购物。
1、任务转换:从预测“间隔天数”到预测“购物次数”
除了预测间隔时间外,有时企业需要预测顾客的购物次数或者购物数量。例如,要根据每个顾客的购物偏好,预测他未来一个季度会买多少产品,以便据此提前备货。或者,要预测他未来较长时间的购物次数,以便为计算顾客长期价值提供依据。例如,我们需要预测未来一定时期内,顾客逛店的次数或者买醋的次数。这个“一定时期”到底是多长,一个月、一个季度还是一年,取决于决策任务本身。通常,间隔越久,精确度就会越低。除非用于预测顾客生命周期价值或者顾客终身价值(customer lifetime value,CLV),否则,实践中的操作逻辑不是提高远期预测的精确度(这很重要,但很困难),而是不断重复地进行滚动预测,然后根据这个不断更新的预测来调整决策。好在实践中计算程序一旦写好了,不断重复的滚动预测本身并不会增加太多的工作量,只是计算机多花几秒的时间计算而已。
现在要用数学工具解决的问题变成了未来一定时期的逛店或买醋次数。要完成这个任务,包括两部分的工作:一是找出合适的概率分布;二是算出对应概率分布所需的参数。
2、从日志数据中找出反映购物次数出现频次的概率分布
这很像是要画出一个类似于图1-1那样的图形,只不过现在要反映的不是不同的购物间隔天数出现的频次,而是一定时期内不同购物次数出现的频次。也就是说,横轴发生了变化,从“间隔天数”变成了“购物次数”。例如,可以统计出某个顾客过去12个月中不同月购物次数出现的频次。其实就是数一数他12个月中每个月来了店里几次,然后看看每类次数出现的频率。
我们依据的原始数据还是表3-1或者类似的交易日志数据(log data)。之前的分析只说有表3-1这样的数据,虽然当时说可以从微信上下载,但没再说细节。现在你已经对数据分析有了一些感觉,我们可以开始讲点细节了。本书之所以没有一开始就讲各种细节,主要是避免读者陷到这些细枝末节中,反而看不到全局。
表3-1可以看作一种日志数据。日志数据就是记录什么时刻发生了什么事情的数据。更规范的表述是,日志数据是IT系统记录的过程性事件的数据。每一条日志数据都包含4W(who,when,where,what)内容。根据提取数据时的关注点,所生成的供分析用的日志数据也可以只包含2W(when, what)。通常情况下,时间信息(when)总是会包含在内,否则就不是“日志”了。通过查看日志数据,你可以了解具体哪个用户、在具体什么时间、在哪台设备上或者什么应用系统中、执行了什么具体操作。
针对表3-1那样的日志数据,经过统计就能得到表2-2那样的数据表。
下面我们新建一个表,只取表2-2前三列的数据,并且在第一列“间隔天数”右侧插入新的一列,列名为“每月购物次数”(即用30天/间隔天数),得到表3-2。注意,每月购物次数和该次数出现的次数(频次、概率)完全是不同的概念,因而“出现频次”“概率”两列完全不受刚才转换的影响,没有任何变化。
然后,我们需要找一个概率分布来描述表3-2中的“每月购物次数”和“概率”,得到一个类似于图3-1那样的形状。只不过这次的横坐标不是代表“间隔天数”而是代表“每月购物次数”。
前两节已经说过,购物次数的概率除了可能服从图3-1那样的指数分布,还可能服从正态分布、Gamma分布或Beta分布。根据第二节,其具体是哪种分布,只需要用数据拟合一下就能知道了。
3、计算相应概率分布的具体参数值
不论购物次数服从什么样的概率分布(即“山”的形状),只要它能够用某种数学公式(实际是概率分布公式)表示,并且包含的是数量有限的参数,我们总能想办法算出这些参数来。例如,假设找到的概率分布可以用公式“y=a+bx”表示(概率分布当然不是这个样子,只是用它来简单代表),那么a和b即为参数。我们希望所有的顾客都能用这一个概率分布来表示,希望不同顾客的区别只是a和b的差别。如果用下标“zqs”代表顾客赵轻松、用下标“lzh”代表顾客李中华,我们希望这两个顾客都能用“y=a+bx”这样的公式表示,x代表已知的,y代表想预测的。这里用的只是一个概念性公式,概率分布公式完全不是这个样子,但道理是一样的。对两个顾客而言,公式形式是一样的,区别只是预测赵轻松行为时,我们要用赵轻松的参数a和b,即azqs和bzqs;而预测李中华行为时,则用参数alzh和blzh。
因为azqs和alzh并不相同,我们希望能够用另外的包含某种参数的公式把azqs和alzh也表示出来。因为这个例子是从概率的视角考虑问题,所以,我们也会再用某种概率分布来表示a的分布,该分布代表了azqs和alzh按照什么样的概率会取什么具体的值。这就有点像图3-5那样,允许其中的λ值服从某种分布,只不过这里是允许azqs和alzh服从某种分布。事件本身就转化成一个只是跟概率有关的数学问题了。
4.预测所用的基础模型:NBD
下面引入比较容易理解的基础模型负二项分布(negative binomial distribution,NBD),来说明实际计算的思路。复杂的还有“BG/NBD”和“GG/NBD”等,区别只是考虑了更多的参数变化。这里提到NBD模型,一是感谢作者们当年的研究,二是便于想要更深入了解细节的读者据此追根溯源,三是表明多数其他模型是改变了该模型的某些前提条件演变而来的。理解了NBD的核心思想,理解其他更复杂的模型就会比较容易。
回顾图1-1,不论它是什么形状,总是能够用某种公式近似地表示出来。如果图1-1代表顾客赵轻松的情况,那么依此类推,如果李中华是编号为n的顾客,那么应该还有个编号为1-n的图代表顾客李中华的情况。
我们希望能用一个公式代表所有顾客,希望不同顾客的区别只是参数不同而已,而不能每个顾客的公式都不一样。更具体地说,如果表示赵轻松购物间隔天数的概率分布公式是“y=a+bx”,而表示李中华购物间隔天数的概率分布公式是“y=a+bx3+sin(x)”,那么分析起来就会很困难。以笔者有限的见识来看,目前的数学研究似乎还没有找到一个相对简单的公式来表示所有的形状。当然,好消息是按照机器学习(machine learning)的思想,总是能够建立一个足够复杂的公式,通过用计算机一次次(也许是百万次)地尝试,总能找到那么一套参数(也许是几十或几百个参数),能够比较准确地表示(即拟合)多个顾客共用的购物间隔天数的概率分布。你别把这个事情想得复杂了,本质上就是需要用数学公式表示一条形状怪异的曲线。所需要的参数数量取决于曲线的怪异程度。但反正是计算机程序尝试每种可能的取值(不是解公式的思路,而是依靠计算能力尝试每个值),总能够找到一个足够复杂的公式来表示这条曲线。然后,我们再用另外的公式(可能也是概率分布公式),表示上述统一公式中不同参数的分布情况,就能用于实际预测了。道理很简单,只是如果曲线复杂了,参数就会多,如果参数本身的取值也复杂,表示参数分布的公式也会复杂。两个复杂的公式叠加在一起,复杂度的增加可能就不是相加关系,而是相乘或者指数关系了。
你可以把NBD模型理解成图3-5代表的思路。NBD模型的数学表达具体是什么样子在这里也不重要,就用“y=a+bx”来简单代表它。NBD模型首先要找到一个形式上统一的公式(假设它叫作公式A)来表示顾客个体购物间隔天数(或者一定时期内的购物次数)的概率分布,然后找到另外一个公式(假设它叫作公式B)来表示公式A中代表每个顾客的参数的分布。
什么样的公式能够表示顾客个体购物间隔天数(或者购物次数)的概率分布呢?回顾图1-1,我们需要找一个公式(其实是某种概率分布的数学公式),以便能够表示类似的形状。这可能是指数分布、正态分布、Gamma分布或Beta分布等。第二节已经讲过了。
不同行业的业务特点不同,业务数据所形成的图形形状也会不同。抛开业务本身,可以单纯根据数据来找什么样的概率分布能够更好地作为代表,也就是前面说过的直接用程序代码拟合数据即可。
回顾刚才提到的NBD分析思路,“首先找一个公式A来表示顾客个体购物间隔天数(或一定时期内的购物次数)的概率分布,然后再找一个公式B来表示公式A中代表每个顾客的参数的分布”。大数据时代,因为有了具体到顾客个体层面行为的各种数据(即某个特定ID的消费者在某个时间点具体做了什么),完全可以通过各种简单计算,实现针对顾客个体的上述分析。
具有不同前缀的NBD公式形式各异,但实质是一样的。某种形式的NBD公式可能是下面这样的(本节的目标不是讲数学和公式,而是解释其内涵。你可以看看公式的形式,有个感性认识。不用管它看起来有多复杂,反正我们已经知道其中那些参数都能算出来。无论多复杂的公式,写程序代码计算就是了):
NBD模型认为泊松分布很合适作为公式A,所以下一节需要说清楚泊松分布的特点及适合的原因。非连续数据(如计数数据和本书情境中的购物次数、购物数量等)的取值往往是有限范围的非负整数,用传统的回归(例如线性最小二乘估计、对数线性回归),会有严重的异方差。如果存在很多为零的数据,尤其是为零的数据还无法取对数,此时往往用跟泊松分布有关的回归方法更妥当。因为泊松分布也适用于预测群体的购物次数,所以,我们先把跟顾客群体的购物次数预测有关的情境说清楚了,再来说泊松分布的计算细节。
五、预测群体的购物次数
前两节关注的是如何预测特定个体的未来行为。预测的基础是具有顾客个体的数据。这意味着IT系统中记录的每项交易都可以归属到具体顾客名下,即便并不知道这个顾客的任何背景信息,但至少知道他和IT系统中记录的过去发生的某次交易对应的顾客是同一个人。有了这些信息,就能用这个顾客的过去行为数据(例如,购物记录),预测该顾客的未来行为;或者,可以用与他相似的顾客群的过去行为数据,预测该顾客(例如新顾客)的未来行为。注意,后者虽然用的是顾客群的数据,但每笔交易都能对应到特定的顾客。也就是说,所拥有的数据的核心特点,是每一行为都有清楚对应的具体顾客。这是本章前几节分析方法所依赖的数据的核心特点。但现实并不总是这么美好,还会有新的挑战。
1.挑战:没有个体层面的顾客数据+需要预测群体行为
现在针对一个新的情境:企业看到了一群顾客产生的行为,但无法区分每个行为对应哪个具体顾客。例如,店里今天来了100人次的顾客,但这100人次到底是100个不同的顾客,还是50个顾客都来了两次,或其他情形,无从知晓。或者,店里卖掉了50瓶醋,但无从知道是50个顾客买走的,还是10个顾客每人买了5瓶醋或者是其他组合。这个时候,我们能够观察到群体的行为及其结果(有数据),但是无法从中剥离出个体行为及其结果,也就是“数据的颗粒度不够小”。
在另外的情况下,预测任务也会发生变化。从预测个体行为转到从群体的层面上预测数量。例如,需要预测某段时间内来店里的顾客数量,好据此安排员工人数;或者,需要预测某款产品在某段时间内的销售量,好据此来安排每次的进货量以及间隔多久进货。这时候,我们关注的不是独立个体顾客的行为及其结果,而是一群顾客的行为及其结果。
2.新情境的数据:时间和销量
总会有这么一些情境,企业无法获得充分和详细的数据。例如,没有顾客ID信息。这可能是因为店铺只记录来了多少人,买了什么东西,但没有记录买东西的是谁。或者,顾客只是来逛逛,没有任何购物记录,自然没有留下任何身份信息。店铺能记下来的只有什么时间来了多少顾客之类的信息。这在实体店是最常见的情况。
需要再次说明(以防读者是跳到这里开始阅读的),这里提到的顾客ID,并不是身份证号或者手机号之类的敏感信息,更多的是指给顾客的一个编号,目的是下次顾客再干什么的时候,我们能够识别出是上次的某个顾客。你甚至可以把这个ID简单理解成某个绰号,例如“那个穿格子衣服的顾客”。只不过顾客数量太多,通常起绰号根本行不通,而起编号是一种有效办法。很多企业推出会员卡,即便完全是匿名的,只要一个顾客对应一个卡号,顾客购物时提供此卡号,仍旧能极大地降低分析数据的难度,所对应的数据分析方法也会有很大的不同。
如果没有详细信息(例如ID),这时候又该如何进行分析呢?
学者们提出NBD模型的时候,当时的数据环境可能就这么简陋。店铺无法获知顾客是谁(也没有任何形式的会员卡),能做的只是统计一下每段时间(一刻钟或一小时或一天等)有多少顾客来,即分时段的客流量信息。如果不是实名(或者提供某种ID,如手机号)购票,那么当前各地的景点面对的仍旧是同样的数据环境。所以,NBD系列模型仍有用武之地。
继续用钱广的例子。他汇总了一下3月份每天卖掉的醋的瓶数。我们用表3-1的时候知道某个顾客于什么时间(几点几分)买了什么。到这一节,数据环境变差了,没有了顾客的个体信息,只能看到群体的统计结果。钱广的汇总结果如表3-3所示:
表3-3第一列是日期,第二列是当日销量。为便于读者统计表中数据,对表中销量排了序。这样,所有同样的销量都紧挨在一起。需要注意的是,第二列数据的顺序对结果并没有任何影响。第一列和第二列构成的Excel表,是任何店铺都可以统计出来的。
例子中的店铺也可以换成景区,销量则换成游客数,那么表3-3就变成了某景区的客流量统计表。我们也可以统计每小时的销量或者游客数,或者每个月的销量或者游客数。统计什么内容和多长时间段的数据,取决于决策问题。我们简单计算后发现,在钱广的例子中,这个月31天一共卖掉了62瓶醋,平均每天卖掉2瓶。用符号λ表示日均销量,记为 λ=2。后面会用到这个。
表3-3的前两列是多数行业都能统计出的原始数据。现在增加新的两列。第三列是逐个计算某销量出现了多少次,对某销量每次出现编个序号。例如,销量为0,有4次,小记为4;而销量为7只出现了1次,小记为1。从最后一行的汇总数据来看,这个月一共销售了62瓶醋,销量合计出现了31次。
表3-3第二列的销量数字,最低是0(没有卖出商品),最高是7。这个月没有出现过某天卖出5瓶醋或6瓶醋的情况。计算模型的参数其实只需要第四列的数据,即某销量出现了几次。把表3-3中的第二列和第四列重新整理一下,就得到了表3-4。
从表3-4能够看出,有10天的日销量是1,有1天的日销量是7。换个角度说,日销量是1出现了10次,而日销量为7只出现了1次。日销量是5和6完全没有出现。
如果每个月都能统计出表3-4这样的表格,怎么知道将来某一天销量为几的概率呢?如果统计的是每周的销量,就可以用来预测未来一周销量是某个数的概率。或者,换个角度,从出现可能性(即概率)的角度来思考,看看最可能出现的日销量是多少(也即概率最大的销量是几)。
3、群体行为的概率分布基础:泊松分布
实际计算时总是绕不开各种数学工具(这一章用到的数学工具主要是概率分布)。因为要保证通俗易懂,所以本书还需要说清楚概率分布的本质和管理应用。我们先从上一节介绍过的内容说起,进而引出需要用到的新的概率分布。
在之前例子中,已知的是某个顾客过去一段时间每次购物的日期(例如表3-1)。据此,我们可以算出每两次购物之间间隔了多少天,并由此得到不同间隔天数出现的频次分布(例如表2-2)。
指数分布要回答的问题是:“要等到该顾客下一次来购物(视作发生一个随机事件),需要经过多少天?”Gamma分布要回答的问题是:“等到这个顾客第n次购物(视作发生n次随机事件),需要经历多长时间?”所以,Gamma分布可以看作n次指数分布的独立随机变量(如购物、逛店)的加总,也就是说,在表示Gamma分布的公式中:α=1时,是指数分布;而α=n时,是常见的Gamma分布。
上述情境是已知单一顾客(或按顾客群统计)购物间隔天数的出现频次(见表2-2),关注的是未来“再发生1~n次购物,要经过多少天”。简单地说,这是一个对间隔天数的预测。
如果把上述预测任务列出来,可以写成:
● 预测情境:再发生1(或1~n)次购物
● 预测任务:要经过多少天(例如m天)
当把预测情境和预测任务对调,就变成了:
● 预测情境:再经过若干天(例如m天)
● 预测任务:会再发生多少次购物(例如n次)
任务从预测发生若干次购物要经过的时间间隔,变成了预测经过某个时间间隔要发生的购物次数。也就是说,要预测的是“某个时间段内,购物事件发生的次数”。或者换个角度来描述“购物事件发生的次数”,就变成了“某个时间段内,发生n次购物的概率”。泊松分布恰好适合用来描述这个现象。泊松分布的标准说法是:当一个事件(如购物)以固定的平均速率出现(例如平均每天或每小时出现多少次)且随机、独立(假设某人是否购物只与自身需求有关,与其他顾客无关)出现时,这个事件(如购物)在单位时间内(未来一天或者一小时)出现的次数(多少次购物)近似服从泊松分布。结合购物情境就是,某个时间段内,会有多少顾客来店里,或者某款产品会有多少销量,顾客量或者销量服从泊松分布。
泊松分布是从二项分布演化来的。设想下面这样一个实践情境,商场来了n位顾客,其中有b位顾客买了东西。我们可以简单计算每位顾客的购买概率Pr(buy)=。其中“Pr”是probability(即概率)的缩写。如果将来有m位顾客来逛商场,那么其中有k位顾客会购物的概率又是多少?当顾客数量很多时(数学上表示为n趋向无穷),Pr(buy)就趋向于泊松分布。
泊松分布有三个前提条件,即
(1)顾客购物是小概率事件;
(2)购物的顾客相互之间是独立的,其购物与否与他人无关;
(3)顾客购物的总体概率是稳定的。
前两个条件看似不易满足:感觉来逛商场的顾客一半左右都购物了;购物的人多也会影响未购物的顾客,使其产生购买行为。只有第三个条件能满足,即有可能会有相对固定比例的顾客产生购物行为。虽然前两个条件看似不易满足,但泊松分布在实际的商业预测上确实还挺管用。
下面稍微抽象地描述泊松分布的作用。当已知某随机事件(如购物行为)在某个时间段(如一天)内发生的平均次数(例如表3-3中每天卖出2瓶醋),泊松分布可用于预测在新情境(通常是将来或者新的顾客群)同样长的时间段内(如仍为一天),该购物行为发生n次(即sales=n)的概率。
泊松分布表示的是事件发生的次数,“次数”是离散变量,所以泊松分布是离散随机变量的分布。
指数分布是两件事情发生的平均间隔时间,“时间”是连续变量,所以指数分布是连续随机变量的分布。
4.通过泊松分布预测不同销量的概率
泊松分布的数学表达如下所示:
式中,Pr表示概率,sales表示销量,在比较正式或专业的表达式中,“sales”常常简写为“S”。前面已经说过,本书的目的是帮助企业管理者理解各种模型,表达时注重可理解而不是研究者通行的“规范”或者“正确”,所以我们把常见的泊松分布的形式表示为式(3-5),以便于直观理解。
n的含义是表3-4中的第一列中的0~7的某个数,λ表示平均日销量。“Pr(sales=n|λ)”括号内的竖线表示λ为参数的条件概率,n!表示n的阶乘,本书已在Gamma分布那一小节的式(3-3)下方介绍了阶乘的计算。
式(3-5)左侧表示“概率(销量=n)”,其含义是“销量=n的概率是多大”。右侧是计算公式,其中e是自然数,通常取2.718 28,λ是根据表3-3计算出的平均日销量。从表3-3第一列能够看出一共是31天,第二列表示一共卖出了62瓶醋。平均日销量的计算是用62除以31,等于2,即λ=2。你也可以只用表3-4中的数据,通过∑(销量×次数)算出总的销量,即“0×4+1×10+2×7+3×5+4×4+5×0+6×0+7×1=10+14+15+16+7=62”。把这些计算细节写出来是希望帮助读者理解其中的含义,这个过程其实就是加总表3-3的第二列,只不过这里不是逐一加总(用的是加法),而是先统计了每种日销量出现了几次,然后相乘再加总(用了乘法)。我们也可以直接用Excel表中的“=SUM()”函数对表3-3的第二列数据求和。如果只有表3-4,而没有原始的表3-3,则需要把加法变成乘法。
现在有了λ=2,只要套用式(3-5)右侧的计算方法,就能计算出不同销量出现的次数所对应的概率。式(3-5)左侧其实是概率质量函数(probability mass function,PMF)(类似于概率密度函数),只不过泊松分布是针对离散值,所以得到的是概率值。在表3-4的基础上,在其右侧添加两列,就形成了表3-5。最后一列的概率质量函数值的理论合计值应该是1(即100%)。因为小数点后四舍五入只保留了4位,所以实际合计值是0.950 7。这个概率乘以总的出现次数31,就得到了采用泊松分布预测得到的不同销量出现的次数,为了便于和第二列进行对比,可以把它安排在表3-5的第三列。你可以把第三列的预测值和第二列的实际值(也叫观测值)进行对比,两者存在偏差,但不算很大。如果对比最后一行的合计值,可以看到预测值29.48比实际值31小了4.9%,即(31-29.48)/31=4.9%。从实际的企业决策看,5%以内的误差似乎尚能接受。
要判断表3-4和表3-5的第一列和第二列(即销量和出现次数)代表的实际情况是否符合泊松分布,可以用Python中的“scipy.stats. chisquare”,对表3-5的实际值(第二列)和泊松分布的预测值(第三列)进行卡方检验。当然,你还可以安装Python Poisson E-Test,以便更精确地判断预测值和实际值之间的误差程度。
如果把表3-5的第二列和第三列画在一张图上进行对比,就得到了图3-7。你可以看看预测值和实际值之间有多大的误差,有个直观的感受。
刚才的预测过程的核心是泊松分布及其参数λ。生活中有很多能统计出固定频率(即λ)的事件。例如,某景点统计全月的游客量,发现日均大约2 000人次。但如果查看每日游客量,则会发现波动很大。同理,某超市每月汇总某品牌的醋的销量,发现平均每天卖出10瓶左右,但每日实际销量波动很大。只看单日数据很难看出规律。根据历史数据,我们能够算出一个相对固定的平均值(即λ),据此则可以预测每日出现不同销量的概率大小。
这种现象的核心特点是,如果统计很短时间段内的发生次数(比如不同销量出现的次数),可能发现完全没有规律。但统计稍微长的一段时间的发生次数,会发现存在一个相对稳定的数值。
5.通过泊松过程预测一段时间的销量
表3-3和表3-4表示的都是单位时间(这里是“每天”)的相关信息(卖出了几件商品及其出现次数)。如果想预测一段时间(例如20日至30日)的销量及其出现次数,那又该怎么办呢?
此处引入一个新的公式,即
对比一下式(3-5),(3-6)在式(3-5)的等号左右不同位置增加了t。t表示时间长度。当式(3-6)中的t=1时,式(3-6)就变成了:
这就又变成式(3-5)了。
式(3-6)表达的是“泊松过程”。我们可以把泊松分布理解成单位时间(即t=1时)的泊松过程。这样,表3-3、表3-4和表3-5其实都是关注单位时间(即一天)的销量、该销量实际出现的次数及其预测值。如果想知道一周(即t=7时)不同销量出现的次数及其预测值,就要用到式(3-6)表示的泊松过程了。
我们把“泊松过程”和前面介绍过的指数分布和Gamma分布联系起来,看看是否更容易理解。钱广的店每小时有λ(假设λ=2)位顾客光顾并服从泊松分布,那么从0位顾客光顾到第1位顾客光顾所经过的时间服从指数分布。同样,第1位到第2位,第2位到第3位,乃至到第n位顾客之间的时间间隔都服从指数分布。指数分布所包含的参数“λexponential”的值是根据这里的λ值算出来的,即λexponential===0.5。λexponential=是由指数分布和泊松分布本身的定义决定的。指数分布表示的是上一位顾客光顾到下一位顾客光顾的时间间隔,Gamma分布就是把这些时间间隔加起来,如果在Gamma分布中n=2(就是式(3-3)中代表interval的t,这里为了表示顾客数量,不再用t而是n),就是从第0位顾客到第2位顾客的时间服从Gamma分布。如果n=1,2,…,N,Gamma分布描述的是当这家店有n位顾客到达时所需要的时间。可以把泊松分布和Gamma分布看作“互逆”的分布。Gamma分布是给定概率λ和发生次数k,预测间隔时间T。泊松分布则是给定概率λ和间隔时间T,预测此间隔时间内的发生次数k。
泊松分布从某种意义上也可以看作指数分布的一种对应。只是它针对的是离散数据。例如,两次购物间隔的天数只能是整数。从这个意义上讲,泊松分布针对的数据类型与我们讨论的决策情境最接近。随着参数λ取值的不同,泊松分布的图形形状可能对称,也可能偏左。不同λ值对应的泊松分布的图形形状如图3-8所示。这个图中,横坐标仍代表销量,只不过这个图中表示销量的符号用的是k而不是式(3-5)中的n。纵坐标表示的是该销量对应的概率质量(对应离散的销量值),你就把它简单理解为出现该销量的概率。虽然它从严格意义上来讲不是这个含义,但好在是否能够“全面把握”和理解这个含义不算太重要,我们真正在乎的是表3-5中的第三列,即便我们的理解不准确,通过公式计算出的结果也是没有问题的。
本章使用了两种数据,一种是能够从中辨识出特定个体的数据,另一种是无法区分个体的总量数据。这基本覆盖了数据颗粒度很小(个体数据)和数据颗粒度很大(群体数据)的两极情况。现实中各种环境下的数据,基本上都落在了这个两极区间内。本章提到的各种分析模型能解决多数的现实问题。
本章提到的NBD模型采用的是简单的泊松分布。这其实是学者们尝试过多种概率分布后,找到的一个既简单又有效的概率分布。NBD模型的起源是“Pareto/NBD”模型,其主要考虑的是顾客会流失。在此基础上,又考虑了顾客的异质性(就是顾客和顾客之间可能不一样),学者们进而构建出“BG/NBD”和“GG/NBD”模型。“BG”其实是Beta和Gamma,“GG”其实是Gamma和Gamma。虽然本章没有提到这些模型的任何细节,但你也能猜出来这两个新模型采用的概率分布不同。大概“BG/NBD”模型认为公式A对应Beta分布,公式B对应Gamma分布,而“GG/NBD”模型的公式A和公式B都对应Gamma分布。你只要有这个层次的理解就够了。入门以后,将来想要了解更多细节,还可以去看论文原文。采用“Pareto/NBD”、“BG/NBD”和“GG/NBD”模型计算顾客的重复性行为和第四章的顾客价值的具体程序(用Python语言编写的)。
欢迎诸位企业家朋友随时与朗玛峰团队沟通交流

