销量预测设计

目录

      • 一、算法计算逻辑
        • 举个直观的例子
        • 销量预测
      • 二、项目背景
      • 三、算法与业务的关系
      • 四、关于业务人员对未来外部变量“打标签”:
      • 五、关于预测颗粒度:
      • 六、关于预测准确率和影响准确率的因素:

一、算法计算逻辑

销量预测算法建模要用到的数据:

观测变量Y:某个产品的销量数据
外部变量X:促销活动、以旧换新活动、节假日、疫情影响(可以是任何影响产品销量的变量,但是前提是可以持续被量化)

算法就是要根据这些数据,去建模建立一个模型。不管是统计学模型、机器学习模型或是人工神经网络模型。通俗来讲,建模的原理可以概括为:

历史数据去拟合一个函数式"Y = F(X)",用历史数据输入模型去拟合找到最优参数,使得将所有数据代入到这个函数式计算出来的误差最小。

举个直观的例子

为了方便直观理解,举一个机器学习里面最简单的例子,线性回归。预测某城市的房价(不是预测房价走势),影响房价的因素有距离市中心的距离,是否学区房,周边配套情况,房子面积等等。我们只考虑最简单的情况:假设我们不考虑时间因素(房价走势)只考虑 “面积” 这一个因素。

房价Y=F(面积X)房价Y = F(面积X) Y=F(X)
并且假设房价与面积是线性关系,得到
Y=kX+bY = kX + bY=kX+b
接下来我们就要用我们已有的数据:面积——房价

在这里插入图片描述
我们的算法模型:Y = kX + b ,但是k和b是未知的,如何确定k和b呢?

答案就是:用我们已有的所有数据去"试",不断尝试不同的k和b的值(并不是“瞎试”,是通过一种最优化的寻找方式),使得找到的k和b代入公式,能让所有数据拟合的平均误差最小。这个过程也成为模型训练,直观来讲:就是我们把数据X与Y的关系画一个散点图,Y = kX + b是一条直线,k和b可以唯一确定一条直线。模型训练的过程就是找到一条对所有数据拟合最好的直线。

注:理解了这个过程,就能很好的理解为什么我们用的电脑被叫做“计算机”,它最初就是为了帮人类解决复杂计算的而诞生的。一些复杂的关系,靠人工写不出表达式的关系,都可以借助计算机算出来供人类直接使用。
在这里插入图片描述
当训练完成后,我们得到了一个确定模型Y = kX + b(k和b是已知的),我们要预测房价只需要输入:

面积——X,就可以计算出对应的房价——Y。

销量预测

刚才举的例子是算法建模中,最简单的。实际业务中要复杂得多。考虑的变量,需要拟合的参数也更为复杂,并且它也不可能是简单的线性关系。下面我们回到我们要做的产品销量预测中:

观测变量Y:某个产品的销量数据
外部变量X:促销活动、以旧换新活动、节假日、疫情影响(可以是任何影响产品销量的变量,但是前提是可以持续被量化)

对于我们的销量预测来讲,要用历史销量订单数据去拟合一个函数式"F(变量)"(找到未来销量、历史销量、外部变量之间的关系)它的函数式长这样:

Y(t+i)=F(Y(t−i),X(t+i)),i=1,2,3.....Y(t+i) = F(Y(t-i),X(t+i)) , i = 1,2,3..... Y(t+i)=FY(ti)X(t+i)i=1,2,3.....

未来的销量Y(t+i)=F(历史一段时间的销量Y(t−i),未来一段时间外部变量X(t+i))未来的销量Y(t+i) = F(历史一段时间的销量Y(t-i),未来一段时间外部变量X(t+i)) Y(t+i)=F(Y(ti)X(t+i))

同样,当我们的建立的算法模型训练完毕后,就相当于得到了一个确定的关系式。接下来计算未来的销量Y(t+i)只需要输入:

  1. 历史一段时间的销量Y(t-i)
  2. 未来一段时间外部变量X(t+i)

就可以计算出未来一段时间的销量。

根据不同产品的数据特点,采用了以下算法模型

  • Arima:可以拟合趋势、季节,可以输出预测区间估计
  • ExponentialSmoothing:可以拟合趋势、季节,模型稳定性强
  • Coston:专门用于间歇性需求预测。
  • Prophet:可以拟合趋势、季节,同时还能考虑多个外部变量的影响,可以输出预测区间估计。

二、项目背景

供应链管理是所有跟实体经济相关的企业遇到最具有挑战的问题之一。公司现有供应链计划有待优化。
引入算法预测终极目标:代替业务人员预测,为业务解决库存短缺和过剩的问题。当然,这不是一蹴而就的,需要数据、算法和IT流程不断完善,以及业务人员的建议和反馈。

现阶段,算法预测作为只能作为辅助,为业务人员提供数据参考。并且需要业务人员的反馈和建议反过来去完善算法。

现阶段引入算法预测的目的是为人工决策提供一个参考,并不是直接立马取代人工预测,并不是直接按照算法预测值做生产计划。

现阶段做供应链计划的总的思路:“从数据开始,由判断结束”。尽可能减少数据与业务之间的信息不对称。

  1. 算法工程师距离数据最近,具备数据分析和挖掘能力,可提供相对客观数据分析,但是拿到的只有数据,不懂业务和市场;
  2. 销售负责人距离市场近,懂业务,但是容易受到市场波动和业务(业绩指标压力)的影响,层层批报充满博弈,容易加剧“牛鞭效应”。
  3. 简而言之就是:公司大了,有数据的没判断,有判断的没数据。
  4. 目前算法预测的数据,是根据历史销量(历史需求量)预测的,输出的预测数是未来的需求量,不能直接用于生产计划参考。需要减去现有库存加上安全库存才是理论上生产的数量,最后还需要参考最小生产批量才能最终确定生产多少。
  5. 需求预测的完整流程:算法根据历史数据建模得到一个预测数,给到销售负责人,然后销售负责人根据自己多年业务和市场经验,给出自己的判断,即在算法给出的预测数的基础上进行一定的调整。

打个比方,算法预测某个产品下个月的需求量大概是1000台,但是销售的负责人知道上个月这个产品只卖几天就卖断货了,没库存了导致上个月卖得少,还有好几个客户想买,在等库存。所以上个月的销量并不能真实的反应市场实际需求。,预计下个月销量会有50%的提升,所以最后调整下个月的需求量为1500。现有库存是0,安全库存是500,所以理论上需要生产1000(1+50%)- 0 +500 = 2000台。但是这个产品的最小生产批量是2200,所以最终确定生产2200台。

在这里插入图片描述

三、算法与业务的关系

算法永远是为公司业务服务的。现有“从数据开始,由判断结束”思路,是为了减少数据与业务之间的信息不对称。
关于算法预测值为2000,人工预测为3000,这是很正常的。算法预测的目的并不是要往人工预测方向靠拢,毕竟人工预测如果足够准确,那么公司也不会增加算法预测。衡量算法预测值是否准确的,并不是人工预测值,而是实际需求值。这并不意味着算法与业务是对立关系,恰恰相反,在“需求预测”不断完善的过程中,二者是相互合作,相互依赖的关系,最终还是服务于业务,优化公司供应链计划。

四、关于业务人员对未来外部变量“打标签”:

只需要打未来人工已知(可以确定)的变量。比如促销活动这种,对应的业务人员是知道未来一段时间内是否有促销计划。对于节假日这种标签是不需要打标签的,算法建模前可以直接从万年历获取。
需要主要的是:外部变量并不是却多越好,这可能听起来跟人的常识相违背。原因如下:

  1. 建模用到的外部变量要准确对应历史数据,并且是对历史事件的客观反应。
  2. 数据量不够大的情况下,过多的外部变量。反而会降低模型的泛化能力,导致模型“过拟合”
  3. 考虑的外部变量要能持续被量化。

比如疫情这个外部变量,对经济影响很大,对产品销量同样很大。但是,如何量化一个销售区域的疫情严重程度。人工可能觉得很简单,觉得网络信息这么发达网上一查就知道。但是实际上,人能看得到的文字视频计算机并不认识。说到这里你可能会觉得,那也简单,现在网上可以查到,每个省份每天的新增、治愈、死亡病例。用这些数据计算机不就能看懂了吗?其实不然,一个销售区域包含多个省份,每个省份人口基数,人口密度,经济实力,医疗条件都不一样,每个省份对我司产品的贡献值也是不一样的,并且疫情从爆发到现在我国防疫能力,防疫政策都是一个动态变化的过程,像国外的疫情已经是躺平政策,官方已经不在统计疫情相关数据。

所以战争因素、政治因素、疫情因素它本质上是通过影响经济因素去产品销量的。这个东西是很难被量化的。退一步来讲,即便我们找到了最客观最合理的手段去量化它,也很难提升预测的准确率,甚至有可能降低准确率。因为,我们是预测未来的销量,我们用考虑这个外部变量就要知道未来几个月这个变量的值。如果我们强行考虑这个外部变量,那就需要自己去预测这个外部变量它在未来几个月的值是多少,这就意味着又回到了人工预测未来了。

五、关于预测颗粒度:

现有的颗粒度如下:

  • 产品颗粒度:同一个A箱。
  • 区域颗粒度:所有区域总量,不单独预测渠道。
  • 时间颗粒度:按照月份聚合数据。

算法在销量预测开始前首先需要考虑的就是:在合适的颗粒度上做预测。通常要考虑的颗粒度有,时间颗粒度,产品颗粒度,区域颗粒度……

一般来说,会优先考虑在颗粒度大的地方做预测,其背后逻辑是颗粒度越大,需求聚合效应越明显,从数理统计来讲,可预见性就越强,数据模型就越可靠。公司销量数据特点表现为:类似与“长尾商品”销售数据的特点,即为间歇性需求,大多数商品一年当中有需求的月份不到6个月。之前区域颗粒度细分到销售小区每月需求量为0的比例高达70%以上:
在这里插入图片描述
对于区域A、B、C、D这种需求过于稀疏序列是几乎不具备可预测性的。必须进一步加大预测的颗粒度,聚合数据。

当然,这并不是越大越好。具体在哪个颗粒度上面做预测是由业务决定的,一般来讲是业务能接受的最大颗粒度。对于一个实际项目来讲,颗粒度不是越大好的原因如下:

  1. 不同性质的产品是不能聚合在一起的。
  2. 如果一个产品在不同渠道的销售策略,促销活动,相差很大是不能聚合在一起的做预测的。否则外部变量量化难度大。
  3. 颗粒度越大,对于业务人员来讲参考性越弱。对于某一个销售大区区域的负责人,如果给到所有销售区域的预测总数,那么这个总数对这个销售大区区域的负责人的参考意义是不大的。
  4. 时间颗粒度越大,数据量越小。如果按照季度或者每年的数据去聚合,那么得到的数据量会大大减小。

六、关于预测准确率和影响准确率的因素:

所有算法从业者都知道,算法行业里有一句很经典的话:数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限。

如果把数据建模的过程比作烧饭做菜的过程。那么,算法工程师扮演的就是厨师,算法服务的业务扮演的角色就是订餐的顾客。产品经理则是负责登记顾客需求和传达需求的中间人相当于店小二,提供相关数据的数仓人员就相当于提供食材的采购。一个完整的项目大概需要经历以下过程:

  1. 首先第一步要做的就是要确定做什么菜,店小二拿登记顾客需求后。登记顾客要吃哪些菜,每个菜在口味上有什么要求,整理成需求清单后然后给到厨师。(产品经理将需求文档给到算法)
  2. 厨师根据店小二的需求清单,确定需要哪些食材,列一个清单给到采购。(算法根据需求文档输出一个设计文档,其中包括了需要获取哪些数据,给到数据组)
  3. 采购将食材给到厨师,厨师开始烧饭做菜。(算法拿到数据后,开始建模)
  4. 烹饪完毕后店小二将做好的饭菜给到顾客。(开发完毕后给到业务,验收)

单从预测准确率上来讲:

  1. 首先,是要有数据,不然“巧妇难为无米之炊”。
  2. 其次,是拿到的数据质量要高。如果ERP系统中存在大量的错误记录、对应关系、脏数据以及业务人员不规范操作。数据建模注定是“垃圾进,垃圾出”。
  3. 最后,是算法工程师的专业能力和对业务的了解程度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET Core开发实战(第23课:静态文件中间件:前后端分离开发合并部署骚操作)--学习笔记(下)...

23 | 静态文件中间件:前后端分离开发合并部署骚操作这里还有一个比较特殊的用法一般情况下,我们前后端分离的架构,前端会编译成一个 index.html 文件和若干个 CSS 文件和 JavaScript 和图片文件CSS 文件和 JavaScript 和图片文件一般会部署在…

springboot 历史版本文档_乘风破浪,SpringBoot入门

SpringBoot入门篇前言在普通的java项目中,大量的xml文件配置起来相当繁琐,导致了开发效率非常低下,整合第三方框架的配置可能会存在冲突问题导致部署效率低,打包方式是将项目打成一个war包放入到tomactwebapps目录下执行。简单来说…

简洁直观解释精确率、召回率、F1 值、ROC、AUC

混淆矩阵 当我们在做二分类预测时,把预测情况与实际情况的所有结果两两混合,结果就会出现以下4种情况,就组成了混淆矩阵。 P(Positive):代表正样本N(Negative):代表负样…

基于Tensorflow搭建卷积神经网络CNN(水果识别)保姆及级教程

项目介绍 TensorFlow2.X 搭建卷积神经网络(CNN),实现水果识别。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠,然后经过全连接层,最后用softmax映射为每个类别的概率,概率最大的即为识别结果…

如何编写高性能的C#代码(四)字符串的另类骚操作

原文来自互联网,由长沙DotNET技术社区编译。如译文侵犯您的署名权或版权,请联系小编,小编将在24小时内删除。作者介绍:史蒂夫戈登(Steve Gordon)是Microsoft MVP,Pluralsight的作者,…

statusbar 尺寸 显示图标_移动端页面设计规范尺寸大起底 - 椰树飘香

移动端尺寸繁多,包括IOS和安卓,尺寸多达十余种,所以移动页面尺寸的适配一直是前端和设计的头疼。今天来总结一下当前市场上的一些移动端尺寸,方便设计师和前端去考虑适配。但是最好还是针对自己的产品做调查,根据数据去…

新建项目上传gitee(码云)教程

登录码云 新建一个仓库后,复制HTTPS地址: 本地项目操作 打开需要上传gitee的项目文件夹,并打开Git Bash窗口 本地仓库初始化: git init添加到暂存区 git add .提交到本地仓库 git commit -m "first commit"关联到…

OpenSilver: 通过WebAssembly 复活Silverlight

本月早些时候,Userware发布了第一个版本的OpenSilver,微软Silverlight 的开源重新实现。OpenSilver 通过WebAssembly 实现无需任何其他插件在 浏览器上运行。OpenSilver 的当前版本可作为"技术预览"版本提供,它涵盖了大约 60% 的原…

db2有主键时默认hash分区_MySQL分区表最佳实践

前言:分区是一种表的设计模式,通俗地讲表分区是将一大表,根据条件分割成若干个小表。但是对于应用程序来讲,分区的表和没有分区的表是一样的。换句话来讲,分区对于应用是透明的,只是数据库对于数据的重新整…

程序员过关斩将-- 喷一喷坑爹的面向UI编程

点击上方“蓝字”关注我们菜菜哥,求你个事呗?说来听听,假装你男朋友可不干不是哦,是正经事。前几天一个项目UI改了,好多人跟着加班修改,怎么样尽量避免这种情况呢?UI修改顶多和客户端开发人员关…

python二维散点分布图_深入理解皮尔逊相关系数amp;python代码

1.常见理解误区(1)计算出变量A和变量B的皮尔逊相关系数为0,不代表A和B之间没有相关性,只能说明A和B之间不存在线性相关关系。例:温度和冰淇淋销量之间的散点图像如下,可以发现大致成二次函数图像&#xff0…

hdu4911 Inversion-归并排序

解题思路: 如果原序列的逆序对数大于交换次数,那么最少的逆序对数量就是原序列逆序对-交换次数。 如果原序列的逆序对数小于等于交换次数,那么最少的逆序对数量为0,因为交换次数超过逆序对数,可以把这些逆序对全部消除…

【.net core】电商平台升级之微服务架构应用实战

一、前言这篇文章本来是继续分享IdentityServer4 的相关文章,由于之前有博友问我关于微服务相关的问题,我就先跳过IdentityServer4的分享,进行微服务相关的技术学习和分享。微服务在我的分享目录里面是放到四月份开始系列文章分享的&#xff…

c语言将一个已知头结点的单链表逆序_C语言实现常用数据结构:静态链表数组实现(第5篇)...

「今天是学习C语言第 148 天」纸上学来终觉浅,绝知此事要躬行。—— 陆游「冬夜读书示子聿」# 静态链表使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系。实现要点:1.数组下标为0的位置为头结点,指…

集成平台集群任务动态分派

源宝导读:MIP集成平台是为了解决企业大量异构系统之间快速、稳定集成的需要,助力企业数字化转型,明源云自主研发的平台系统。本文将对"事件任务分派"场景的架构设计以及实践成果进行分享。背景MIP集成平台是为了解决企业大量异构系…

dotcpp1115 DNA-打印图案

题目描述 小强从小就喜欢生命科学,他总是好奇花草鸟兽从哪里来的。终于, 小强上中学了,接触到了神圣的名词–DNA.它有一个双螺旋的结构。这让一根筋的小强抓破头皮,“要是能画出来就好了” 小强喊道。现在就请你帮助他吧 输入 输…

akb48_AKB48里历史——六年的终结

注:这是2012年发行的一本在BUBUKA连载的基础上补充了一些内容的粉丝公式教科书,从里面找了部分内容翻译了一下,节选的内容主要说的是2011年的事情,以当时作者的视角,是AKB48第一次新老粉丝换代的时期。前田敦子和大岛优…

[头脑风暴] 解读Docker Bridge网络模型

背景这几天在研究Kubernetes, 遇到一个有意思的nodejs镜像:luksa/kubia# 不带端口映射启动容器 docker run -it -d luksa/kubia # 连接到默认的Bridge网桥,容器IP是 172.17.0.2之后,在宿主机使用容器IP和8080 端口可访问该容器…

kodi pvr 不能安装_「家庭影音串流」电视最强播放器KODI使用方法

本文作者:空翻的帕兹文章适用电脑手机等全平台设备,在用户没有nas的情况下如何使用串流电视最强播放器KODIKodi是由XBMC基金會開發的開源媒體播放器,原名XBMC(最後一個以XBMC命名的版本是13.2「Gotham」,14.0 「Helix」是第一個以…

docker部署flask项目

项目本地运行 1.到github或者自己创建一个flask项目,确保在本地是可以运行成功的 2.上传到自己的代码仓库 服务器部署 1.安装docker yum install docker -y2.配置加速器 DaoCloud加速器采用自主研发的智能路由及缓存技术,并引入了现金的协议层优化…