跳至正文

【高级案例】物料需求预测之(品牌)“客户集中度”分析

最近在阅读制造业大佬刘宝红老师的《供应链的三道防线:需求预测、库存计划、供应链执行》,还推荐给我的制造业客户阅读。前日在飞机上读到“客户集中度分析”,今天就使用客户的生产数据快速实现了一下,感觉还不错。

本文将制造发货的数据,改为Tableau Desktop自带的零售发货数据,介绍一下业务背景及其实现方法。

一、客户TOP与客户“集中度”分析的背景

在《供应链的三道防线》一书中,刘老师解释需求预测的重要性,并提供了多种方法辅助销售人员实现较为精准的需求预测(虽然所有的预测都是错的、有偏差的)。

需求预测的一个极佳起点是历史的发货明细,明细中藏着各种真相,比如客户的进货频率、物料的集中程度、发货数量的偏差等。在预测时,占比较大的关键客户是重点,很多公司的TOP客户往往占据了过半的销售需求,因此找到这些客户并加以预测时关键。

在Tableau中,我们很难计算“销售额占比前20%的客户”,这样这个计算涉及到每个客户的发货数量、排序、累计,这种聚合后的跨行计算是表计算(SQL窗口函数)的专长,需要在聚合表基础上做二次计算才能完成。好在Tableau提供了间接的替代方案,即“顶部集”。 我们可以使用参数、集、条形图、快速表计算快速验证客户的集中程度。

如下所示,我们发现销售额总和前50名的客户,累计占比占公司的22%。不断调整参数,我们可以找到近期的的客户数量。

但是,如果只看“每个客户的销售数量”,然后关注TOP客户,其实是不足以做好预测的。因为预测的单位不是客户,而是产品。从销售的角度看,“给每个具体的客户提供合适的产品”才是合理的销售过程,也是合理的销售单位。

基于此,就需要从“每个客户的产品构成”角度,进一步理解客户的集中度程度。假设一个产品100%的由某个客户所采购(定制化产品),那么预测就可以做到更高的准确性;而如果一个产品的最大客户占比不超过30%,说明客户集中度很低,预测准确性就必然大幅下滑——预测人员很难了解每个客户的需求并加以汇总,误差会随着因素增加而扩大。

这就是“客户集中度”的来源,即借助于每个产品的客户结构,聚焦占比较大的客户提高产品的预测准确性。客户集中度体现了两个关键维度之间的结构化关系——分析的对象是产品(物料),隐秘的结构化构成则是客户,理解这一点是关键。

二、限定每周范围下的(品牌)客户集中度

特别修改:鉴于Tableau默认的超市数据,每周的product name基本都是单一客户,因此V2使用Brand来重新计算“客户集中度”。 Jul 30, 2023

分析始于问题,先按照标准的问题结构,将问题明确如下:

  • 过去26周,每周的 (品牌)“客户集中度”

为了简化问题,这里虚拟了一个逻辑指标“客户集中度”,它虽然使用了“客户”,但其实是描述“品牌”的。这就是让整个问题变得难以理解的关键。接下来,先精确地理解分析范围、问题对象、问题答案。这里的关键当然是答案(度量)部分,为此,我们进一步展开如下:

  • 过去26周, 每周 的 单一客户销售过半的产品品牌相对于本周所售品牌数之比

在这里,问题答案是单一度量,单一度量是两个子度量的算术计算。接下来,难点就变成了,如何完成两个“子指标”计算。

本周所销售品牌数量“的指标范围等同于问题的维度(每周),因此分母字段可以使用数据表已有字段直接聚合而来,因此借助于Tableau的拖拽即可快速实现如下的可视化:

难点在于,我们如何筛选另一个“子指标”的聚合对象:单一客户销售过半的品牌。一方面,它包含了聚合(先完成客户的销售总和),另一方面它包含了跨行的占比(单一客户的聚合值需要和所有客户的聚合值计算比例)。

  • A=每周、每个品牌、每个客户的销售额总和
  • B=每周、每个品牌 的销售额总和
  • 如果A/B>=0.5 ,那么返回这个 品牌
  • 对上述品牌计数
  • 集中度:满足上述条件的 品牌,在本周动销品牌的比例

由于是单一客户在所有客户中的比例,直觉的思路是窗口函数(合计百分比),但合计百分比是对每个客户计算比例,而要相反TOP客户极其困难。从SQL角度看,虽然可以用窗口函数完成,但本题不是窗口计算的电信场景——窗口函数的专用场景是跨行的比较,比如排序、累计计算。合计百分比中的“合计”可以视为是无关方向的特殊窗口函数(partition by)。

而在Tableau中,考虑到表计算必须基于聚合值做二次聚合,且难以返回数据值再次聚合,这里借助于LOD表达式完成。

由于要引入多个全新的维度(品牌、客户),这里要么使用FIXED LOD,要么使用INCLUDE LOD。如下所述,使用include LOD快速完成上述的分子和分母,而后计算比例、返回集中度高的品牌,并再次聚合。

在此基础上,两个“子指标”再次计算,就可以获得(品牌)“客户集中度”指标了。

需要注意的是,最终的视图中,即没有客户、也没有产品,有的只是它们的结构关系,因此这个问题,可以作为结构化分析的关键案例了。

三、限定26周整体范围下的的客户集中度

在上述计算中,分子和分母都被限定了“某一周”的范围,这样理解上较为容易;但是这种计算的“集中品牌”就会在每周都品牌变化,集中度容易受到单周临时计划的影响(比如品牌A的最大客户本周正好没有下单,其他客户非常零散,那么本周就不是“集中品牌”)。

比如下图所示,品牌Eldon在某些周分散,但在12月18日这一周,单一客户Emily贡献了该品牌一半以上的销售,因此本周该品牌就属于高度集中品牌。

能否从整个26周的范围,统一确认一个品牌是否为“客户高度集中”,还是“不集中”呢? 这样在做物料的需求计划时,我们就免于每周的波动,聚焦关键品牌的关键客户。因此,我们也可以把“客户集中度”的分子,设置为“在过去26周范围中,单一客户销售量占比超过50%的品牌”,之后再和本周活跃的物料计算比值。

  • 分子:在过去26周完整范围中,单一客户销售量占比超过50%的品牌
  • 分母:本周的动销产品数量(SKU)

按照这个理解,我们可以用第二部分的计算略作调整,鉴于既要排除视图中“周”日期的级别,又要引用视图中没有的“产品、客户”级别,所以就是相对于当前问题级别完全独立的详细级别,就需要使用FIXED LOD完成了。 如下计算完成分子:

countd(if { FIXED  [Brand,[Customer Name]:SUM([Sales])}/{  FIXED [Brand]:SUM([Sales])} >0.5 
           then [Brand]   end )

使用这个逻辑,需要注意FIXED LOD计算和日期筛选器的优先级,嵌套子查询优先级默认早于where日期筛选,这里借助于Tableau上下文筛选器轻松解决。如下所示:

相比于第二步的方法,使用FIXED LOD获得的比例明显更小,因为消除了周之间的品牌波动。

读者可以思考一下上述两种方法,在企业中的应用场景。

喜乐君 Jul 29, 2023 于 G3高铁
V2 Jul 30, 2023

《【高级案例】物料需求预测之(品牌)“客户集中度”分析》有1个想法

  1. Pingback: 【制造业分析】安全库存分析与Tableau简述 – 喜乐君

评论已关闭。