1. 引言
在全球供应链不确定性加剧和数字化转型[1]的背景下,企业需求预测面临多源数据整合、非线性波动特征和跨层级决策协同三大挑战。复杂的外部环境让企业供应链面对诸多难题,传统统计模型已经不能满足需求,企业需要采用更先进的技术,用机器学习和深度学习来提高预测的准确性和效率。
现在的研究多集中于单一时间尺度的预测,比如只关注周预测或月预测。但实际企业运营中,不同决策层级,像战略、战术和运营层面,各自都需要不同时间尺度的预测来支持决策。
本文基于国内某大型制造企业2015至2018年的经销商出货数据,分析企业需求预测面临的三大难题:多源异构数据整合、需求波动的非线性(如疫情导致的“牛鞭效应[2]”)以及跨时间粒度的决策协同。研究选择了XGBoost、LightGBM和随机森林三种常用的机器学习模型,在月粒度、周粒度和日粒度三个时间维度上进行预测任务。通过对比分析,结果清楚地显示了单一时间粒度模型在实际应用中的局限性。接着,本文构建一个多粒度联合优化框架,目的是整合不同时间尺度预测模型的优势,平衡预测精度,从而提高企业需求预测的整体效果。
2. 数据预处理
2.1. 缺失值处理
本文数据来源于国内某大型制造企业在2015年9月1日至2018年12月20日面向经销商的出货数据。数据集在各字段层面不存在显性缺失值,表明数据采集与存储过程未发生技术性异常。然而,通过时间序列的连续性检验,发现全品类销售记录在特定日期呈现系统性空白,具体缺失时段包括:
此现象表明,数据缺失并非由随机因素(如数据录入错误)导致,而是与企业生产周期、经销商运营中断存在强因果关系,属于典型的非随机缺失(MNAR)。
2.2. 重复值处理
使用Python中pandas库下Dataframe类的duplicated().sum()方法,对出货数据进行重复值分析,发现在597694条原始数据中存在重复数据312条,用Dataframe类的drop_duplicates()方法,将重复值删除,剩余数据为597,382条。
2.3. 异常值处理
本研究采用分层循环处理异常值,图1以商品唯一标识符(item_code)为分组依据,对原始数据集进行多级处理。每个商品实体独立进入处理流程,确保组内数据同质性与组间异质性分离,消除跨商品混杂效应。流程核心步骤如下:
Figure 1. Outlier handling flowchart
图1. 异常值处理流程图
(1) 初始化参数:设定显著性水平(
)、样本容量阈值(
)及异常值处理策略(删除/填补)。
(2) 外层循环迭代:遍历所有item_code,依次提取子数据集
。
对于每个子集
,动态评估其样本容量
,并根据统计功效理论选择检验方法:
极小样本(
):跳过检验,保留原始数据。
有效样本(
):
对于有效样本,进行正态性检验[3]并根据p值与显著性水平α的关系,采用以下规则确定异常值边界:
对子数据集
中的异常值执行删除操作。具体而言,直接移除超出设定边界的数据点,以确保数据集的纯净性。这一处理方式旨在避免异常值对后续分析结果产生偏差或误导,从而提升数据质量,为后续建模和分析提供可靠的数据基础。
3. 数据分析
3.1. 需求弹性对需求量的影响
需求弹性是经济学中的核心概念之一,用于衡量需求量对价格变动的敏感程度[4]。根据弹性的大小,可以将需求分为完全无弹性、无弹性、单位弹性、弹性、完全弹性五类。需求弹性的计算公式为:
其中,
表示需求量的百分比变化,
表示价格的百分比变化。
基于上述模型,我们对符合帕累托法则(80%)的商品进行了需求弹性分析[5],结果如图2所示:
Figure 2. Analysis of price and demand elasticity
图2. 价格与需求弹性分析
3.1.1. 弹性接近1或−1的商品
大部分商品的需求弹性接近1或−1,表明这些商品的需求量对价格变化较为敏感。价格的小幅变动可能导致需求量的相应变动。对于这些商品,企业在制定价格策略时需要谨慎,因为价格的调整可能会直接影响销量。
3.1.2. 弹性远大于1或远小于−1的商品
图中部分点远离y = 1和y = −1线,表明这些商品需求弹性高(绝对值大于1)或低(绝对值小于−1)。高弹性商品需求量对价格变化敏感,适合促销策略[6],价格小降可显著提升销量;低弹性商品需求量对价格变化不敏感,促销效果不佳,企业需考虑其他营销策略。
3.2. 产品类别对需求量的影响
帕累托图的分析方法基于“二八法则”,即少数关键因素(约20%)对结果的贡献占绝大部分(约80%) [7]。通过识别这些关键因素,企业可以更有效地分配资源,优化管理策略。在供应链管理中,这种方法有助于识别核心产品类别,确保其供应链的稳定性和高效性[8],同时对长尾产品进行合理管理,避免资源浪费。
3.2.1. 核心产品与长尾产品的分布特征
图3显示,首类产品(大类306)需求量达30.6 × 10⁷,占总需求的40%,凸显其市场价值。前5类产品累计占比达89%,表明企业高度依赖少数核心产品。长尾产品(大类301、303、304)需求量逐级递减,末位产品仅占0.2 × 10⁷,累计占比不足12%,对整体需求贡献小,可能存在库存积压或低效资源占用问题。
Figure 3. Product category Pareto chart
图3. 产品大类帕累托图
3.2.2. 细分类别的分布特征
图4首类细类(细类407)需求量达14 × 10⁷,占总需求的40%,是核心产品的主要贡献者。前5类细类累计占比达85.12%,存在明显的“二八效应”。长尾细类需求量低,累计占比增长缓慢,对整体需求贡献有限。
Figure 4. Product subcategory Pareto chart
图4. 产品细类帕累托图
3.2.3. 产品大类与细类的对应关系
表1产品大类与细类的对应关系表明,核心大类主要由少数高需求细类驱动。大类306由细类407和402组成,需求量最高;而大类303虽包含多个细类(410、401、406、411),但整体需求量较低,显示细类间需求分布不均。
Table 1. The correspondence between major and minor product categories
表1. 产品大类与细类对应关系
大类编号 |
对应细类编号 |
301 |
405 |
302 |
408 |
303 |
410, 401, 406, 411 |
304 |
409 |
305 |
412 |
306 |
407, 402 |
307 |
403 |
308 |
404 |
3.3. 节假日及周末对需求量的影响
本文基于中国法定节假日及周末的销售数据,分析促销活动对商品需求量的影响。通过对比不同日期类型(普通日、周末、节假日)的日均销量,据图5探究促销策略在特定时间段的实施效果。
Figure 5. Graph of demand changes during holidays and weekends
图5. 节假日及周末需求量变化图
3.3.1. 节假日需求量的特点
节假日需求量波动大,部分显著高于平均值,部分低于平均值。消费高峰或活动增加的节假日需求量极高,可达全年峰值;而人们减少外出或消费意愿低的节假日需求量则低,与节假日性质相关。
3.3.2. 周末需求量特点
周末需求量波动大,可能接近最高值或低于平均水平。通常高于工作日,但受天气等因素影响,部分周末可能低于平均水平。
4. 产品需求量预测
4.1. 集成学习方法
集成学习通过整合多个基学习器提升模型精度和泛化能力[9],主要分为Bagging和Boosting两种范式。基学习器可以是异构或同构模型。
Bagging:采用Bootstrap重采样生成多个训练子集(约63.2%的样本有放回抽样),并行训练多个基模型(如决策树)。分类任务采用多数表决,回归任务采用算术平均。Bagging降低模型方差,优化高方差基模型,增强抗干扰能力和预测稳定性,抑制过拟合,优化决策边界。
Boosting:模型训练采取序列化方式,每次训练后调整样本权重,误分类样本权重提升,聚焦难以处理的样本。通过加权求和整合基模型预测结果。从初始权重开始,逐步调整权重训练新的弱学习器,直至达到预定数量,最终形成强学习器。Boosting通过迭代调整权重,逐步提升模型性能。
4.2. 模型评估指标
本研究采用平均绝对误差(MAE)、均方根误差(RMSE)和决定系数(R²)三类指标,综合评估模型的预测精度与拟合能力。
4.2.1. 平均绝对误差(Mean Absolute Error, MAE)
MAE 反映预测值与真实值的平均绝对偏差,计算公式为:
其中,
为真实值,
为预测值,n为样本量。MAE量纲与因变量一致,对异常值不敏感,适用于需均衡评估整体偏差的场景。
4.2.2. 均方根误差(Root Mean Square Error, RMSE)
RMSE通过平方运算放大较大误差的影响,计算公式为:
RMSE与MAE量纲相同,但对异常值敏感,更适用于需严控极端误差的工程场景。
4.2.3. 决定系数(Coefficient of Determination, R2)
R2衡量模型对因变量变异的解释能力,计算公式为:
其中,
为真实值均值。R2取值范围为[0, 1],值越接近1表示模型拟合效果越优,但需结合 RMSE/MAE避免过拟合误判。
4.3. 特征工程体系
4.3.1. 滞后窗口特征
基于时间序列的惯性效应,引入历史观测值的滞后项作为特征[10]。设时间序列为
,滞后窗口特征定义为:
其中,滞后窗口长度w的选取与业务周期严格对齐,特征构造仅依赖历史观测值,具体策略如下表2所示:
Table 2. Lagging window feature application strategy table
表2. 滞后窗口特征应用策略表
时间粒度 |
窗口集合 |
业务意义 |
月粒度 |
|
月度需求惯性修正、季度业务对齐、半年度计划回溯、年度周期性复盘 |
周粒度 |
|
周内运营惯性、月度趋势映射、季度传导效应、半年度规律捕捉 |
日粒度 |
|
周内行为模式、双周活动关联、月内策略对齐 |
4.3.2. 滑动窗口特征
滑动窗口特征通过聚合历史窗口内的统计量,提取时间序列的局部趋势与波动规律[10]。设时间序列为
,窗口宽度为
,核心特征定义如下:
窗口宽度的选择需与业务复盘周期对齐,具体策略如下表3所示:
Table 3. Sliding window feature application strategy table
表3. 滑动窗口特征应用策略表
时间粒度 |
窗口集合 |
业务意义 |
月粒度 |
|
季度需求平滑、半年度波动抑制、年度基线生成 |
周粒度 |
|
月度趋势提取、季度噪声过滤、半年度异常检测 |
日粒度 |
|
周内均衡分析、双周弹性规划、月内风险预警 |
4.3.3. 节假日与周末特征
在时间序列预测中,捕捉关键日期效应是提升模型精度的重要手段。 通过统计当前月、周、日的节假日天数和周末天数。
4.4. 参数优化
(1) 优化方法
RandomizedSearchCV是scikit-learn库中用于超参数优化的一种方法,通过随机采样的方式在超参数空间中寻找最优的超参数组合。与GridSearchCV不同,RandomizedSearchCV不会穷举所有可能的超参数组合,而是通过随机采样来减少计算量,同时仍然能够找到接近最优的超参数组合。
RandomizedSearchCV的核心思想是:
1) 在超参数空间中随机采样一定数量的超参数组合。
2) 对每个采样的组合进行交叉验证,评估模型性能。
3) 选择性能最好的超参数组合作为最终结果。
这种方法特别适合于超参数空间较大或计算资源有限的情况,因为它可以显著减少计算时间。下表4,是RandomizedSearchCV的主要参数及其作用:
Table 4. The main parameters of RandomizedSearchCV
表4. RandomizedSearchCV的主要参数
参数名 |
作用 |
estimator |
用于训练的模型 |
param_distributions |
超参数的分布或取值范围。可以是字典,其中键是超参数名称,值是可能的取值列表或分布。 |
n_iter |
随机采样的次数 |
cv |
交叉验证的折叠数 |
random_state |
随机种子,用于保证结果的可复现性。 |
scoring |
评估指标 |
n_jobs |
并行计算的 CPU 核心数 |
verbose |
控制输出的详细程度 |
4.5. 各时间粒度预测分析
表5展示了XGBoost [11]、LightGBM [12]和随机森林(RF) [13]模型在月、周、日三种时间粒度下的预测性能,评估指标包括决定系数(R2)、平均绝对误差(MAE)和均方根误差(RMSE)。
Table 5. Model evaluation under different time granularities
表5. 不同时间粒度下的模型评估
模型 |
评估模型 |
月 |
周 |
日 |
R2 |
MAE |
RMSE |
R2 |
MAE |
RMSE |
R2 |
MAE |
RMSE |
XGBoost |
0.69 |
115.02 |
451.67 |
0.58 |
33.50 |
146.05 |
0.32 |
8.38 |
40.71 |
LightGBM |
0.69 |
113.27 |
451.64 |
0.58 |
32.99 |
145.91 |
0.32 |
8.16 |
40.80 |
RF |
0.68 |
117.97 |
456.48 |
0.57 |
34.55 |
146.41 |
0.32 |
8.52 |
40.81 |
4.5.1. 模型性能表现
在月粒度预测中,XGBoost和LightGBM的R2均为0.69,拟合程度相当,LightGBM的MAE和RMSE最低(MAE = 113.27, RMSE = 451.64),表现最优;XGBoost稍逊(MAE = 115.02, RMSE = 451.67);RF的R2为0.68,精度最低(MAE = 117.97, RMSE = 456.48)。
在周粒度预测方面,三种模型拟合程度和精度接近,XGBoost的R2最高(R2 = 0.58, MAE = 33.50,RMSE = 146.05),表现稍好;LightGBM (MAE = 32.99, RMSE = 145.91)和RF (MAE = 34.55, RMSE = 146.41)表现相当。
对于日粒度预测,三种模型R2均为0.32,拟合有限。RF的MAE最低(MAE = 8.16),表现稍优;XGBoost (MAE = 8.38, RMSE = 40.71)和LightGBM (MAE = 8.52, RMSE = 40.81)精度相近,XGBoost的RMSE略低。
4.5.2. 时间粒度对模型性能的影响
从时间粒度的角度来看,从月到周再到日,模型的R2值普遍下降,数据复杂性和波动性增加,拟合难度加大。月粒度数据波动小,易捕捉趋势,拟合程度高;日粒度波动强,拟合难度大,R2值低。
在预测精度方面,月粒度预测的MAE和RMSE值较大,因时间跨度长,累积误差大;周粒度和日粒度误差值较小,因短期波动性强,模型能更精确反映实际波动。
4.5.3. 未来研究方向
本次研究指出单一粒度模型的局限性,为未来研究提供启示。未来应构建多粒度联合优化框架,综合考虑各时间粒度的数据特征和预测需求,平衡预测精度与资源分配。
4.6. 多粒度联合优化
在单一时间粒度下,模型预测受限。日粒度预测受高频噪声干扰,传统时序特征对瞬时需求激增解释力不足,导致难以捕捉短期快速变化,影响精度。为此,本研究引入周粒度和月粒度的滞后窗口、滑动窗口及周期性特征,构建多粒度联合优化框架,增强模型鲁棒性和精度。
4.6.1. 多粒度特征构建
在日粒度时间序列中,除了传统的滞后窗口特征和滑动窗口特征,我们引入以下特征:
(1) 滞后窗口特征
周粒度引入过去1、4、12周的值,捕捉短期运营惯性与趋势,弥补日粒度特征的不足。
月粒度计算过去1个月、3个月、6个月的数据均值、方差、最大值、最小值,精准提取局部趋势和波动规律,为高频波动提供长期趋势参考。
(2) 滑动窗口特征
周粒度计算过去4周和12周的均值、方差、最大值、最小值,找出局部趋势和波动规律,帮助模型应对高频噪声,更准确预测未来需求。
月粒度计算过去3个月、6个月的均值、方差、最大值、最小值,平滑长期数据波动,为模型提供稳定的参考基准,增强对长期趋势的捕捉能力。
(3) 周期性特征
周粒度引入周粒度周期性编码,动态调整周编号,量化促销活动需求衰减效应及周内运营规律,增强对瞬时需求激增的预测能力。
月粒度引入月度周期性编码,动态相位偏移 = 8,将月份编码与自然年份1月对齐,精准捕捉季节性规律,为日度数据的瞬时需求激增提供周期性背景信息。
4.6.2. 多粒度联合优化框架
通过整合上述多粒度特征,构建多粒度联合优化框架[14]。该框架的核心在于:
1) 特征融合:融合日、周、月粒度特征,形成综合特征集,使模型同时捕捉短期波动和长期趋势,增强对高频噪声的适应能力。
2) 模型优化:基于多粒度特征优化XGBoost、LightGBM和随机森林等模型,提升其在高频噪声和复杂周期性变化下的鲁棒性和预测性能。
4.6.3. 多粒度协同预测
从表6中可以看出,多粒度联合优化框架显著提升了模型的预测性能。具体而言:
XGBoost:R2 = 0.56,MAE = 5.93,RMSE = 32.57,多粒度特征支持下显著降低误差,对日粒度高频噪声鲁棒性强。
LightGBM:R2 = 0.57,MAE = 6.06,RMSE = 32.49,表现最佳,R2最高且RMSE最低,对日粒度瞬时需求激增预测精准。
RF:R2 = 0.55,MAE = 6.51,RMSE = 32.15,R2略低但RMSE最低,对日粒度高频波动稳定性好。
Table 6. Multi-granularity model evaluation
表6. 多粒度的模型评估
模型 |
评估模型 |
多粒度协同 |
R2 |
MAE |
RMSE |
XGBoost |
0.56 |
5.93 |
32.57 |
LightGBM |
0.57 |
6.06 |
32.49 |
RF |
0.55 |
6.51 |
32.15 |
5. 总结
5.1. 研究主要发现
5.1.1. 需求价格弹性
弹性接近1或−1:大多数商品对价格变化敏感,需在定价时谨慎。
弹性极端值:高弹性商品适合促销,低弹性商品需其他营销策略。
异常值:需求弹性异常的商品需进一步分析,以理解其背后原因。
5.1.2. 产品类别
企业应优先保障核心产品的供应链稳定性,确保库存充足和供应链畅通。对长尾产品进行需求评估,精简库存,避免积压。对高需求细类实施精细化管理,对低需求细类考虑合并或淘汰,以优化产品线。
5.1.3. 节假日效应
节假日需求波动大,部分节假日因消费高峰或活动增加,需求量显著高于平均值,甚至达全年峰值;而部分节假日因人们减少外出或消费意愿低,需求量低于平均值,与节假日性质有关。
周末需求波动较大,通常高于工作日,因购物、餐饮和娱乐活动增加。但受天气、活动安排等外部因素影响,部分周末需求量可能低于平均值。
5.2. 预测建模对比
5.2.1. 单一预测
月粒度:XGBoost和LightGBM的R2值均为0.69,对长期趋势敏感但忽视突发波动;RF的R2为0.68,精度最低。
周粒度:XGBoost (R2 = 0.58, MAE = 33.50)和LightGBM (R2 = 0.57, MAE = 33.27)接近,对节假日响应滞后;RF (R2 = 0.57, MAE = 34.55)稍逊。
日粒度:三种模型R2值均为0.32,拟合有限。RF (MAE = 8.16)最佳,但仍难捕捉瞬时需求激增,需融合实时数据提升性能。
5.2.2. 多粒度协同
本文提出多粒度协同预测框架,整合不同时间尺度信息,减少高频噪声影响,关注长期趋势和周期性规律,提升模型稳定性。引入滞后窗口和滑动窗口特征后,XGBoost的R2提升至0.56,MAE为5.93,RMSE为32.57;LightGBM的R2提升至0.57,MAE为6.06,RMSE为32.49;RF的R2为0.55,MAE为6.51,RMSE为32.15。动态相位偏移和周期性编码助力精准捕捉季节性和短期运营规律,提升预测性能。该框架显著提升制造业需求预测的准确性和鲁棒性,为供应链优化和动态决策提供支持。未来可探索多粒度特征与深度学习模型结合,应对复杂业务场景和数据挑战。
基金项目
韩山师范学院博士启动项目(编号:XJ2022001502)。
NOTES
*通讯作者。