基于机器学习方法对销售预测的研究
在开始今天的分享之前,我首先跟大家简单的聊一下,刚刚过去的双十一,大家可能更关心的是双十一的折扣,什么商品打了什么折扣。但是对于天猫而言,他们可能更关心的是双十一当天的销售额是多少,因为知道销售额,他就能提前做一个准备,做到未雨绸缪。
作者:唐新春来源:大数据杂谈|2016-12-28 15:19
很高兴“InfoQ”团队和“百分点大数据学院”牵头举办此次活动。“百分点大数据学院”是由百分点发起的大数据领域专业、开放的分享交流平台,通过定期举办线上线下活动,邀请大数据领域学术专家、技术领袖、企业高层,分享行业、技术、应用等方面最前沿的经验与见解。也非常感谢InfoQ的团队能够提供这么好的一个机会给大家做一次分享。我分享的主题是《基于机器学习方法对销售预测的研究》,从百分点运用机器学习落地服务的角度,介绍机器学习的核心思路和实践。
首先我先自我介绍一下,在加入百分点之前,曾在生物信息公司中负责生物大数据的分析和数据挖掘;在百分点负责在金融领域的征信模块开发、销售预测领域预测模型研究,以及零售类用户画像的研发等工作。
销售预测的基本情况
在开始今天的分享之前,我首先跟大家简单的聊一下,刚刚过去的双十一,大家可能更关心的是双十一的折扣,什么商品打了什么折扣。但是对于天猫而言,他们可能更关心的是双十一当天的销售额是多少,因为知道销售额,他就能提前做一个准备,做到未雨绸缪。
我们这边有三组数据,第一组是在双十一的前十天,网上有一个专家预测,双十一是1180亿,7天以后马云放出豪言,说今年的双十一可能要突破1500亿,去年是920多亿。在双十一的前一天,网上有一个专家预测了今年的双十一是1200亿,最后双十一是1207亿。
这里有两个问题,第一个问题,预测是怎么做出来的?第二个问题是:对于同一件事情它是预测出不同的结果,什么结果是好与坏?第一个问题是怎么预测的问题,第二个问题是预测的效果好与坏的问题。这就引出了我的主题,《机器学习对销售预测的研究》。
机器学习是常用的日常分析的方法,另一方面机器学习在海量数据中挖掘其中的规律效果非常好。
首先,说说,销售预测的现状和痛点。销售只是一个商业问题,要做的是满足用户的需求,同时对后续的运营做主导。而且它的目的并不仅是增加企业的销量,而是能够让企业能够获利,利润增加,所以它是一个商业问题。
对于这样一个商业问题,它在商业环境里面地位是显而易见的,这里面有物流、库存、促销、财务等等四个方面的作用。对于销售预测的痛点,有三方面:①商业环境变化莫测,要做到预测非常准确可能会比较困难;②销售预测并不是一个纯粹的销售预测,它与企业的整体的反应链相关的;③有企业产品比较单一,或者是服务比较单一,想要通过这个销售预测来做这个指导,来指导研发新的产品,或者是通过价格进行动态定价。
在我看来,我觉得核心的痛点就是预测的精确性的问题,也就是第一个痛点。如果第一个痛点很好的解决掉,后面痛点就很好解决。预测的精确性为什么是核心的痛点呢?这里面就要从预测开始讲起,我们对一个事件进行预测是这样一个过程,就是基于历史的情况进行推演出一个规律,通过这个规律来进行推演到未来。它的特点就是我的短期的预测的精度要远远高于长期的预测的精度,即,未来一周的预测要比未来三个月的精度要高。
同时对于预测的话,我们会有几个方面的假设,第一方面是变化模式,其实就是数据里面的规律,它是我们对于这个待预测事物的了解因素。比如说你要去预测明天彩票的号码,我们已经通过对彩票的分析我们知道没有因素是可以影响它的,所以我们是预测不了明天的彩票。这是第一个变化模式。
第二方面,我们要基于数据来做,你的数据量太少,我们这边也做不了,就是一定要达到数据量的级别我们才能做数据挖掘,或者机器学习。
第三方面,我们做机器学习,我们做预测,都会有一个理论框架,在整个理论框架下我们才能做,才能落地。所以这三方面就构成了我们今天要讲的销售预测的体系框架。销售预测体系框架到底是什么呢?
其框架就是销售预测的基本步骤,即确定预测目标、收集和理解数据、建立模型和评价指标。
销售预测的基本步骤
第一步,确定预测目标:首先要研究一下它的预测的对象,比如我要预测衣服,衣服是冬天的衣服,肯定是有季节性的,预测对象不一样,场景不一样,我们预测的方法也会不一样。
同时,做销售预测一般会有一个预期,我们希望这预测做未来4周的预测,还是未来5天的预测,这是有一个短期的预测和长期的预测。如果是希望太高的话我们可能达不到,希望太小,我们花费了这么多的时间和精力。通常而言,你要预测未来一个月的销量,至少需要两年的数据。
此外,因为需要跟业务进行对接,所以业务目标也很重要。一方面是模型的精确性,即,我们可以给出一个精确度,另一方面是模型的可解释性,即,我们的结果更多是要根据后面的业务部门来进行交接,进行沟通,这时候你就不能解释,好与不好为什么,这要带有可解释性。
综上所需,确定预测目标要分两方面进行权衡,即预测精确性和模型可解释性。
第二步,收集数据或理解数据阶段。而这一步通常包括三个小的子步骤,即:收集数据、数据探索和数据预处理。要尽可能多的获得数据,同时,还要理解数据背后的故事与含义。这里有一个小故事:我当时在做项目的时候,我当时电商的销售预测的时候,我看了一下库存,一般来说你卖出一件商品库存就会减,但是我在数据库里看库存为什么是负值呢?我就和业务部门进行沟通,原来他们把库存的默认值就是负值。这就是对于我们在做预测的时候,对数据背后的含义一定要理解清楚。这是一个数据探索。
而数据探索,其目的是为了更好地发现数据的规律,对应用建模提供一个指导方案。
数据预处理是因为同时收集的原始数据可能非常脏、质量非常差,需要做数据清洗。数据预处理的方法很多,这里主要介绍两个数据预处理方法,缺失值处理和数据转换。缺失值处理是指,发现缺失值的时候,需要理解缺失背后的原因是什么,是数据库的技术问题还是真正业务的原因导致它缺失?如果是后者业务原因导致缺失,我们再来考虑怎么处理缺失值,处理缺失值的方法大体有两类:直接删除法和插补法。直接删除法是将缺失率较高的特征或样本数据进行删除,而插补法是通过已有的数据对缺失值进行填补。而数据变换是指数据的分布与我们假设的数学模型会不一样,这样的数据将会对预测精度会有一定的影响。因此,导入模型之前我们就要把数据进行变换,一般有两种方法:直接对数据进行变换、Box-Cax变换。
第三步是应用建模。销售预测的方法有很多种类,本报告主要是介绍以下三类:第一类就叫主观预测法,即,专家法;第二类是时间序列法,即指数平滑法和自回归移动模型;第三类是机器学习中的回归算法。
销售预测的基本方法
专家法是指通过人的判断,人的经验对于未来的销售做一个预测,它的优点是比较快速,比较简单,就是很快就能够给一个结果。缺点就是我们预测的结果跟你预测的结果都不一样,带有差异性。这个专家法其实很多公司在前期他们都是用专家法来进行预测的。还有我们的客户他们在刚成立的电商,他也是用专家法来做的。
时间序列的方法中最简单是指数平滑法。它的特点是“重近轻远 ”,即通过不同的权重来控制预测的精度。优点是简单、适合于趋势预测;缺点是精确率不高。
ARIMA模型是相对比较复杂一点,其原理是用销量去预测未来销量
无论是指数平滑还是ARIMA模型,其预测对于趋势性较强的数据集效果比较好,但如果遇到趋势不那么强的数据集,则效果不太理想,这时,可以考虑用机器学习的方法进行销售预测。
机器学习的整体流程为:首先,将数据集划分为训练集和测试集,其次,对于训练集做特征筛选,提取有信息量的特征变量,而筛除掉无信息等干扰特征变量,再次,应用算法建立模型,最后,结合测试集对算法模型的输出参数进行优化。
这里主要介绍线性回归模型、决策树(回归树)模型、随机森林、xgboost、神经网络、支持向量回归等六种算法模型。
线性回归模型:假设销量与影响销量的因素是线性关系的,包括误差分布、线性方程和激活函数等。
决策树(回归):其原理是通过if-then规则对特征变量进行逐步决策来构建的模型。此处,可以举一个例子来简单讲解决策树算法的思想是什么?比如说我想给一个妹纸进行颜值评分,分值范围为[0,10]。评分的第一轮判断是五官是否端正?如果为否,打3分;如果为是,则进行第二轮判断,即身材,身材不好则打5分。身材好的话再进入第三轮判断,即是否有钱,有钱就是典型的白富美,就是9分。没钱则为7分。从图中可以看出,其判断决策的过程倒过来看是一个树,红色是它的叶子,叶子对应他的分值,黄色是变量。
随机森林是从决策树演变而成的一个算法,但其思想与决策树相比增加了集成思想。同时,其“随机”具有两层含义,第一层是对特征变量进行随机选择。第二层是,对训练集样本进行随机选择。
xgboost是基于传统的GBDT算法进行了优化的集成算法,它是数据挖掘大赛上面得分非常高的算法。它的思想是这样的,我给一个数据集,我现在有一个问题,就是要看他一家人当中是否会喜欢电子游戏,也是通过构建树的情况进行判断,比如年龄、性别进行判断,它会反映这个家庭成员对应的我们的样本会打一个分,最后男孩给2分,女孩给1分。有时候我们一棵树确定不了,我们就规定多棵树,树1和树2之间并不是独立的,第一棵树的时候对样本做第一次判断,判断的时候有对和错,但是我会更关注于我判断错的那一部分,我在规定第2棵树的时候,我把预测错的更多的考虑一下,就会变成第2棵树,我会过多的关注那些预测错的,再依次的来进行优化。
神经网络是指模拟大脑神经元的工作的非线性模型,神经网络是现在最火的一个深度学习的基础。其包括三个部分:输入层、隐藏层和输出层。输入层在销售预测中则为影响销量变换的各相关因素变量;输出层为销量;中间隐藏层为各相关因素变量到销量之间的一个非线性映射关系,通常为一个函数
神经网络是在反欺诈领域用得比较多,像现在的银行、互联网金融,有的人进行欺骗性的贷款,就用神经网络可以很快的把他发现出来。还有检测病人也可以用到神经网络。
支持向量回归其本质是跟SVM是一样,即寻找能使回归局域更大的margin,其适用于小数据集和高维数据集。
到目前为止,已经简单介绍了六种常用于销售预测的机器学习方法,这些算法也就很好地回答了前面“双十一”销售额例子的第一个问题,即如何进行销售预测?
销售预测效果评估
第四步是评价指标,即预测效果好与坏的问题。对此问题,我想从两个方面跟大家进行分享,即评估方法论和评估的定量指标。第一方面,方法论K折交叉验证。其基本思想为:将总数据集均匀划分为k等份(假设取k=10),第一次对数据集进行划分过程为:第一份作为测试值,验证这个模型,剩下第2到第10个做训练集。第二次划分过程为:把第2个作为测试值,剩下9个作为训练集,然后依次进行训练集和数据集划分,一共会,得到10个模型,选择最小的作为我们最终的模型。
第二方面是评估指标RMSE,值越小,说明预测值与真实值之间的差异就越小,模型效果就越好。
至此,已经把销售预测的四大步骤均已经介绍完毕了,下面就以某电商网站的销售预测案例作为理论实战分享。
项目案例
下面我们进入机器学习的实战部分。我会大家看一下案例在上述理论框架的效果怎么样。
第一步,确定预测目标是为某类商品历史销量排行前20的单个商品进行未来7天的预测。
第二步,收集和理解数据,本案例一种为六大维度72个指标。其实,影响销量变化的因素错中复杂,除了本身历史销量外,还有一些:比如说竞争对手的因素、促销因素、新闻热点因素、口碑因素、随机事件因素、非技术因素等等,但是,对于算法建模而言,我们需要把有数据支持的、并且能够可控的影响销量的相关因素考虑进去,因此,才得出了六大维度72个指标(特征变量)体系。
我们对72个指标(特征变量)进行了数据探索,这里以节假日等级与销量的关系为例,通过对数据探索发现了一条规律,即:节假日等级越高,销量会越好。
第三步为应用建模,我们使用了6个机器学习模型和1个ARIMA模型对该案例进行了预测建模,其结果如上图所示,该结果对比图横坐标是真实销量值,纵坐标为算法模型预测值。不同颜色的线对应不同的算法预测结果拟合线,中间45°虚线为参考线,与参考线越近的算法,其效果越好。从图可以看出xgboost和随机森林两个算法的效果是比较好的。
第四步为评价指标,这里不仅输出RMSE值,而且还将历史销量与未来预测销量进行可视化展示,即如上图所示。
我们对所有的预测算法进行了总结,包括预处理、变量筛选方法、可解释性和精确性等内容。
同时,我们也对基于机器学习对销售预测的研究进行了总结,主要分机器学习、数据、效果和业务四个方面。
第一方面是机器学习层面,即机器学习可能更多的是关注相关关系。做销售预测,我们只用到了跟销量变化有关的因素变量,而不是因果变量。有些客户会问我们:现在我要提高商品销量,请你们算法人员告诉我调哪些参数能够让销量增加?其实这就是一个不合理的需求,因为我是做预测的时候我们用到机器学习的模型,我只是用到像库存、价格、节假日,是跟销量无关系的,但是并不是默认认为库存高就一定会影响销量的增加,库存低就一定影响销量减小。因为后者它是一个因果关系,而我们做机器学习用的是一个相关性的关系。
第二方面是数据的层面,没有数据或数据质量差,效果就会较差,业界流行一句话“垃圾进垃圾出”就是指数据。
第三方面是效果层面。其实,效果是评估一个模型对于好与坏。对于销售预测而言,其效果可能主要体现在是否增加企业的利润。但是这样的效果不太好评论,因为这不仅仅要考虑预测的精度、模型的可解释性等算法效果,还要考虑企业的供应链、整体能力等。不能将机器学习的预测效果作为衡量企业是否增加利润的惟一标准。
第四方面是业务层面,即在机器学习训练之前的数据预处理、训练之中以及训练之后的模型评估都需要一定的业务理论作为指导。尝若业务理论偏弱,则可能会影响整个建模过程,其效果也会受到影响。而且我们是从算法的角度,解决的是算法的问题,但是算法的问题,最终还是要回到我们业务问题,在销售预测上我们要回到怎么样提高业绩。
销售预测终究还是一个商业问题,我们只是从数据层面,从算法层面很难能够很好的把这个商业问题解决掉。我们认为这个效果已经比较好了,其实是比那种大数据的精准营销、精准预测还是有一段的距离要走。这是我们对于用机器学习来做产业落地的一个展望和规划。
我的分享就到这儿。谢谢大家!
答疑环节
提问1:销售预测的销售指标如何定?通过哪些维度预测?预测周期大概多长?
答:销量预测的指标体系的整理主要是通过业务逻辑和待预测商品本身的数据情况而确定的。比如电商类某商品的销量预测,从业务上进行商业分析可以得出,库存因素、价格因素、口碑因素、节假日因素、促销广告因素、新闻热点因素(比如三鹿奶粉被新闻曝光,导致国产奶粉在线上销售受阻)、国家政策因素(主要是指跨境电商,国家税率的高低)等等因素,同时,也需要结合待预测商品本身的数据情况,如果以上的几个业务上分析的因素,只有库存因素和节假日因素,那就只能用这两个因素进行预测了,后期等获取到其他因素的数据再进行补充。
而预测周期的确定需要业务部门结合企业的整体供应链能力以及盘点本身历史数据情况而定,如果企业的数据质量较好,历史数据量又较多(比如超过2年以上的数据),那么预测周期可以设置长一点。但是对于销量预测而言,有一个特点,即短期预测的精度要远高于长期预测的精度,也就是说预测未来一周的精确率要比预测未来三个月要高得多。
提问2:电商类销量预测,有什么特殊的要求和使用的场景?比如样本量,准确性?
答:电商类的销量预测与实体的销量预测的主要区别在于用户体验上,我们称电商销售预测为线上预测,而实体的销量预测,比如衣服的销量预测、药店的销量预测和文具的销量预测等都属于线下预测;而对于线上预测,除了本身的商业环境影响(价格、库存、质量、评价等等)外,还有一部分影响销量的因素是互联网上的用户行为数据,主要包括浏览、点击和收藏等数据,这些用户行为数据主要是通过布码技术活动的(通过将抓取的代码部署在web端或PC端),同时,还需要考虑用户行为数据的滞后性,即某用户收藏了该商品,但是需要经过一定时间才能下单购买,这个时候需要把具有滞后性的变量进行拆分,再加入到机器学习模型中去。
对于样本量的多少,需要以预测的目标而定,预测目标较短,则所需要的训练集就少一些,如果预测目标较长(超过5天),一般则需要1年以上的历史数据。至于准确性,需要结合数据情况而定,准确性的指标通常用RMSE,RMSE越小则准确性越好。