全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
1680 0
2020-12-01
销售预测分析的现代方法
销售预测是现代商业智能的重要组成部分。可以预测销售时间序列的第一种方法是ARIMA和Holt-Winters这样的常规预测方法。但是在使用这些方法时存在一些挑战。它们是:每天/每周/每月/每年的多层季节性,影响销售的许多外在因素,不同时期的复杂趋势。在这种情况下,应用常规方法并不容易。当然,对于具有季节性的时间序列有SARIMA的实现,对于具有季节性和外在因素的时间序列有SARIMAX的实现。但是在这些实现中,我们可以处理一个时间周期内的简单季节性和被视为残差协变量的外生因素。此外,在这些实现中,为了避免过度拟合或考虑要素交互,应用不同类型的正则化并不容易。另一个主要问题是,在某些真实的商店销售案例中,我们没有有效的历史时间序列值数量,例如,在商店最近开业或最近被连锁商店收购的情况下。如果最近推出了新产品,可能会缺乏历史销售价值。在这种情况下,我们如何预测销售额?因此,总的来说,销售预测可能是一个复杂的难题。为了获得见识并找到新的方法,一些公司在数据科学竞赛中提出了这类问题,例如在Kaggle。Grupo Bimbo公司组织了Kaggle竞赛Grupo Bimbo库存需求。在这场比赛中 Grupo Bimbo邀请Kagglers开发一个模型,以根据历史销售数据准确预测库存需求。我很高兴成为一支伟大的团队“ The Slippery Appraisals”的队友,赢得了近2000支队伍的比赛。我们为1000多种产品在800
我们在第一层建立了很多模型。大多数一级模型的训练方法是XGBoost。在第二层,当第一层分类器的结果被视为第二层分类器的特征时,我们使用了堆叠方法。对于第二级,我们使用ExtraTrees分类器,它是Python scikit-learn和Neural Networks的线性模型。在第三级,我们对第二级结果应用了加权平均值。最重要的特征是基于按因子及其组合分组的目标变量的滞后,按因子及其组合分组的目标变量的聚集特征(最小,最大,均值和总和),因子变量的频率特征。我们的优胜者解决方案似乎太复杂了,但是我们的目标是赢得竞争,因此即使在预测分数上稍有提高也需要最终集成中必不可少的机器学习模型。具有足够准确性的真实业务案例可以更简单。
我们将在销售时间序列预测中考虑几种简单的方法。为了进行分析,我们使用了Kaggle竞赛“ Rossmann Store Sales”的商店销售历史数据。这些数据代表Rossmann商店的销售时间序列。例如,商店链中的销售时间序列如下图所示:
在建立预测模型之前,我们可以探索数据并进行描述性分析。下图显示了销售数据功能的不同分布和依赖性:
这种描述性的分析图可以为我们提供一些见解,包括如何构建预测模型,选择哪些功能以及如何构建新功能以获得更准确的预测。下图显示了任意商店的典型销售时间序列:
为了比较不同的预测方法,我们使用了最后两个月的历史数据作为使用均方根误差(RMSE)进行准确性评分的验证数据。我们考虑自然对数规模的销售。下图显示了适用于所考虑的时间序列的不同方法的预测结果和RMSE得分:
让我们考虑一个线性回归模型。作为正则化,我们使用了Lasso。下图显示了具有预测结果和最高系数的时间序列:
下限和上限是根据验证集计算得出的。套索正则化允许我们避免过度拟合并选择最重要的功能。
具有具有不同功能集的不同预测模型,将所有这些结果组合为一个是有用的。为此目的,主要有两种方法:装袋和堆放。当我们对不同模型的预测进行加权混合时,装袋是一种简单的方法。这样的模型使用具有不同的特征和元参数集的不同类型的分类器,然后预测误差将具有弱的相关性,并且它们将在加权混合下相互补偿。模型结果的误差相关性越小,我们将收到的预测结果越精确。让我们考虑用于构建预测模型集合的堆叠技术。在这种方法中,将验证集上的预测结果视为下一级模型的输入回归变量。作为下一个模型,我们可以考虑线性模型或其他类型的分类器,例如随机森林分类器或神经网络。此级别上的验证集的目标值被视为分类器的目标变量。重要的是要提到,在时间序列预测的情况下,我们不能使用传统的交叉验证方法,我们必须使用时间分割在训练集和验证集上分割历史数据集,因此训练数据将位于第一个时间段和验证集–在下一个中。下图显示了使用不同模型获得的验证集上的时间序列预测:重要的是要提到,在时间序列预测的情况下,我们不能使用传统的交叉验证方法,我们必须使用时间分割在训练集和验证集上分割历史数据集,因此训练数据将位于第一个时间段和验证集–在下一个中。下图显示了使用不同模型获得的验证集上的时间序列预测:重要的是要提到,在时间序列预测的情况下,我们不能使用传统的交叉验证方法,我们必须使用时间分割在训练集和验证集上分割历史数据集,因此训练数据将位于第一个时间段和验证集–在下一个中。下图显示了使用不同模型获得的验证集上的时间序列预测:
验证集的预测被视为具有套索正则化的线性模型的回归变量。下图显示了在第二级线性正则化模型上获得的结果:
第一层中只有两个模型(gradientBoosting和ExtraTree)的结果系数为非零。对于销售数据集的其他情况,当其他模型可以在预测中发挥更重要的作用时,结果可能会有所不同。
让我们考虑以下情况:对于某些商店或某些产品我们没有足够的历史销售价值,例如,它应该是新商店或最近推出的产品。在这种情况下,该方法的主要思想是相似的商店或产品将具有相似的销售行为。为了获得良好的结果,构建适当的功能集很重要。因此,我们需要找到或构建可以从不同角度描述商店和产品特征的特征。结果,如果我们有新的商店或产品,但与历史数据中的某些项目相似,则分类器将能够预测该商店或产品的销售预测。
使用验证集,我们可以计算出销售的概率密度分布,以防万一,当我们需要汇总某个未来时间段的销售额以了解在此期间可以销售多少产品时。下图显示了总销售额的分布:
当我们需要考虑非高斯类型的销售分布时,我们可以使用随机抽样算法(例如MCMC)来利用贝叶斯推理方法。有了总销售额的分布,我们可以通过计算风险价值(可以视为5%的分位数)进行风险评估。销售分布和风险估计使我们能够对与产品销售,供应和物流相关的业务流程进行随机优化。为此,我们需要创建一个目标函数,其中包括销售预测和业务费用。对于这种类型的优化,可以使用混合整数数学编程算法。
如果我们期望某个产品应在一定时期内出售,然后将总的预测销售额和产品的边际价格进行分配,则可以找到该时间段内应提供的最佳产品数量。我们还需要组成一个损失函数,该函数将描述该时间段内产品尚未售出时的损失。在易腐产品的简单情况下,我们可以假设在此期间之后,产品的保质期到期,未售出的产品丢失。在此假设下,我们可以收到利润与所提供产品的数量的比较:
该曲线的最大值定义了应提供的最佳产品量。
业务流程在不断发展,这些流程的某些新模式可能不会在历史数据中显示。为了获得更准确的预测,可以根据专家的意见进行更正,例如,专家可以给出有关销售趋势的预测。它应该是具有适当概率的悲观,现实和乐观的修正。下图显示了专家预测的校正和利润对产品供应量的依赖性下的预测总销售额的概率分布函数:
让我们考虑在不同商店以不同价格销售产品的情况。我们也提供一些补充产品的价格以及竞争对手提供的类似产品的价格。该产品的销售是根据两种不同类型的广告进行的。下图显示了销售功能的配对图:
对于线性回归模型,我们收到以下销售特征系数:
可以看到,产品价格的上升使销售下降,而竞争对手产品的价格上升使销售上升。为了描述这些影响,我们可以根据竞争者的价格来考虑需求的价格弹性和需求的交叉弹性。下图显示了相对价格对相对产品销售的依赖性:
下图显示了相对竞争对手的产品价格对相对产品销售的依赖性:
让我们考虑价格优化。具有边际产品价格,我们可以计算产品的利润。下图显示了销售量和价格的联合分布:
下图显示了利润和价格的联合分布:
比较这两个数字,可以看到最大的产品销售可以带来最小的利润。为了找到最佳价格,我们需要研究利润对价格的依赖性。以最简单的方式,我们可以接收该数据集的利润与价格的关系,如图所示:
曲线的最大值对应于最佳价格。在更高级的分析下,产品的最佳价格可能因不同条件(例如,不同类型的商店)而有所不同。
让我们考虑橙汁销售的知名数据集的描述性分析和带有套索正则化的线性模型。下图显示了已售出商品数量和价格的分布和依存关系:
该热图显示了不同功能之间的相关程度:
为了研究外源特征影响,建立了具有Lasso正则化的线性模型。下图显示了来自Lasso正则化参数对验证集的依赖性RMSE:
下图显示了线性模型中特征的系数:
具有特征相互作用项的线性模型的系数如下图所示:
有时,我们不仅需要预测更可能的销售价值,还需要预测其分布。特别是在风险分析中,我们需要它来评估与销售动态相关的不同风险。为了找到模型参数的分布,可以使用贝叶斯推理方法。让我们考虑贝叶斯方法进行销售预测。当我们只有少量历史数据时,贝叶斯推断是一种合适的方法。它使我们能够结合历史数据和专家意见,这些意见可以通过事先分配参数来表达。对于贝叶斯推理案例研究,我们采用促销,季节性因素(周日,月日,一年中的月份)等功能。对于贝叶斯推理,可以使用JAGS STAN采样软件。
下图显示了所选任意存储的一些回归系数的分布密度:
销售时间序列可能有离群值,使用重尾分布而不是高斯分布考虑这一事实非常重要。为了定义一个月内应在商店中销售的最佳产品量,我们需要定义收入,损失和利润。在本案例研究中,我们认为利润如下:
利润=售出金额*(价格–边际价格)–未售出金额*边际价格
下图显示了计算给商店的不同数量产品的利润分配:
下图显示了利润对所供应产品数量的依赖性:
曲线的最大值对应于最佳供应量。如案例研究所示,贝叶斯方法的使用允许我们对销售时间序列的不同因素之间的随机依赖性进行建模,并获得模型参数的分布。有了这些分布,我们就可以计算在规定的时间段内应该出售的最佳产品数量。这种方法使我们避免了在额外费用少的情况下因未售出的易腐产品而造成的巨大损失。
在案例研究中,我们展示了用于销售预测分析的不同现代方法。我们方法的重点是历史数据结构。依靠它,我们可以选择和构建新功能,选择不同的技术和方法进行分析。与单个算法相比,创建不同模型的合奏可以使我们具有更高的准确性。时间序列建模的概率方法在风险评估问题中很重要。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群