2023年MathorCup高校数学建模挑战赛—大数据竞赛B题电商零售商家需求预测及库存优化问题求解全过程文档及程序
2023年MathorCup高校数学建模挑战赛—大数据竞赛
B题 电商零售商家需求预测及库存优化问题
原题再现:
电商平台存在着上千个商家,他们会将商品货物放在电商配套的仓库,电商平台会对这些货物进行统一管理。通过科学的管理手段和智能决策,大数据智能驱动的供应链可以显著降低库存成本,同时保证商品的按时履约。一般来说,以上供应链优化问题会包含以下方面:
需求预测
预测往往是智能供应链的决策基础,它可以让管理者提前预知各地的需求,从而将库存提前放在靠近需求的仓库中,此时的预测任务为:根据历史一段时间的需求量,预测各仓库中各商品未来需求,“预测维度”即为不同商家在各仓库中存放的各种商品每天的数量。一般来说,企业会首先根据数据的历史情况,分析出需求量序列的数理特征,对相似的需求量序列进行归类,并根据分类结果做到更加精准的预测。预测准确率有很多评价指标,较常用的指标为1-wmape,定义如下:
其中yi为第i个序列(商家在各仓库中存放的各种商品每天的数量)的
真实需求量,yi^为第i个序列的预测需求量。然而,在实际的电商供应链预测任务中,常常会出现多种不同的问题。例如,部分商品的销售时间过短、仓库存在新增或切换等情况,导致该预测维度下历史数据过少;另外,部分大型促销期间货量的陡增并由此带来的不规律性,也给需求量的精准预测带来了不小的难度。此时便需要通过算法得到历史一般规律,找出相似的历史情况(如相似的仓或商品),从而实现精准预测。库存优化
为了有效管理库存水平,企业通常会制定各种库存策略来控制商品的
补货频次和补货量。定期盘点库存策略(s,S)是一种常见的库存策略,其中s 表示该种策略下的库存下限,S为库存上限。在这种策略中,企业会每隔一段固定时间查看库存水平,盘点之间的间隔设为盘点周期(NRT)。如果在盘点时库存水平T低于最小库存水平s,则会将库存补充至S,此时的补货量Q=S−T,如果在盘点时库存水平高于s,则不进行补充,直到下一次库存盘点。同时需要考虑到,在每次发起补货后,补充的货物会经过一定时间后才能到达当前仓库,这个时间间隔为提前期(LT)。
使用以上的库存策略,管理者需要对两个方面进行权衡取舍。一方面,为了及时满足用户订单,公司需要保有大量库存以防止缺货;另一方面,库存水位升高带来了过高的库存成本。库存优化的目标主要为:
1)降低库存总持有成本,可由单位持有成本h得到(一件商品存储一
天产生的成本);
2)满足服务水平:确保有足够的产品可以及时满足客户需求,降低总缺货成本,可由缺货成本得到(每天每缺一件商品产生的成本);
3)降低库存周转天数:库存周转天数越小,表示库存的流动性越好,企业的库存管理效率越高。服务水平及库存周转天数计算公式为:
现有一张电商零售商家的历史出货量表(附件1),给出了历史6个月各商家存放在电商不同仓库的商品每天的出货量。假设该出货量即为历史各商品在各仓库的需求量。同时,还可以取到各商品、商家、仓库的信息(附件2-4),例如分类、品牌、生效日期等,这些信息的选择和引入会帮助更好的预测并管理供应链中的库存。
初赛问题:
问题一:使用附件1-4中的数据,预测出各商家在各仓库的商品2023-05-16 至 2023-05-30 的需求量,请将预测结果填写在结果表1并上传至竞赛平台,并对你们模型的预测性能进行评价。另外请讨论:根据数据分析及建模过程,这些由商家、仓库、商品形成的时间序列如何分类,使同一类别在需求上的特征最为相似?
问题二:现有一些新出现的商家+仓库+商品维度(附件5),导致这种情况出现的原因可能是新上市的商品,或是改变了某些商品所存放的仓库。请讨论这些新出现的预测维度如何通过历史附件1中的数据进行参考,找到相似序列并完成这些维度在2023-05-16至2023-05-30的预测值。请把预测结果填写在结果表2,并上传至竞赛平台。
问题三:每年6月会出现规律性的大型促销,为需求量的精准预测以及履约带来了很大的挑战。附件6给出了附件1对应的商家+仓库+商品维度在去年双十一期间的需求量数据,请参考这些数据,给出2023-06-01至2023-06-20 的预测值。请把预测结果填写在结果表3,并上传至竞赛平台。注:结果表1-3打包一个压缩包,“结果表.zip”,提交zip文件到竞赛系统中。
整体求解过程概述(摘要)
可靠的用户需求量预测,对电商平台各商家对仓库、商品的管理和决策非常重要。本文对于商家、仓库、产品在时间序列上的需求量进行分析及预测,针对不同情况得到不同情况下的需求量预测情况。
针对问题一,本文首先对于数据进行预处理,对于附件1中的商家、仓库、产品的编号进行组合合并成1996种,如29-1-915为一个组合并在后文统称组合,通过可视化图表发现“双12”购物节和春节时间段各商品的需求量出现明显与平时期间异常的波动,因此对于这部分时间进行剔除,预测所采用的需求量数据从2023年2月1日开始到2023年5月15日。针对预处理之后的数据,本文采用ARIMA时间序列和LSTM两种方法对组合2023年5月16日到5月30日的需求量进行预测,其中ARIMA时间序列本文通过python语言设置循环语句用AIC准则选取最小的AIC得到所需的p、d、q值进行预测,LSTM采用MATLAB编程实现LSTM时间序列预测,两个方法算出来的平均1-wmape分别为:0.7628、0.8344。通过1-wmape的值对两种方法进行赋权相加得到最终结果。对于聚类本文使用K–means聚类按照不同的聚类标准,将1996 个组合分别聚成4类和5类,并运用主成分分析法(PCA)降维实现可视化效果。
针对问题二,本文同样对于附件5中提供的新维度的数据进行组合,附件5中的新组合共有210个,再将附件5中的新组合按照出现的时间分为5类,其中4月1日到4月5日出现的组合为一类,以此类推,其中每组分别含有66、29、57、42、16个组合,再分别对每组的组合与附件1中的组合计算Spearman相关系数,找到相关性最高的组合且P值小于0.05,如附件5中的组合14-21-239对应附件1中的组合35-53-1423,其 Spearman 相关系数为 0.8685 且P 值为3.83E-13 远小于0.05,每个附件5中的组合都在附件1中找到与之对应的相关性最强的组合,再将附件5中每个组合的数据带入问题一中已经训练完的LSTM和ARIMA时间序列方程中得到附件5中新组合在2023年5月15日到2023年5月30的需求量预测值,预测结果详见附录。
针对问题三,本文对于附件6数据进行组合共有1957个组合,再通过对于数据的可视化处理发现用户在11月1日到11月11日的需求量出现先上升后下降在上升的整体趋势,结合各店商在“双11”的促销安排,可以大致将“双11”购物节分为三个阶段:开门红、品类日&主题日、高峰期&狂欢日。本文对于“618”期间的个组合预测分为两步,即正常预测与引入购物节因子(品类因子、地区因子),因此首先对于“618”期间各组合的需求量通过ARIMA时间序列与LSTM赋权相加进行如平时期间相同的预测,第二步再计算各一级分类商品在“双11”期间的品类因子,如宠物生活在“双11”中每天的品类因子即为1.0482,1.4386,1.8240,1.4737等等,再计算各地区在“双11”期间的地区因子,如东北地区在“双11”中每天的地区因子为2.3006,2.0367,1.6779,1.6252 等等,通过“双11”购物节的购物节因子按照分成的三个阶段进行线性插值得到“618”期间的品类因子和地区因子。通过ARIMA时间序列和LSTM赋权相加的预测结果结合两种因子的约束条件,得到“618”期间需求量预测值,预测结果详见附录。
模型假设:
1.假设一:不计附件以外其他因素对各类商品、商家、仓库的信息的影响。
2.假设二:附件所给数据真实有效且能够全面反映真实情况,不存在数据漏记重复记录等数据收集问题。
3.假设三:数据是有关联的,学习数据可反映预测数据的潜在规律,不存在不同时段之间出货量完全不相关的情况。
问题分析:
问题一的分析
针对问题一,需要首先对附件中数据进行预处理,本文选择将附件1中的商家、仓库、产品三个编码进行合并作为组合,并将需求量波动强烈的“双12”和春节期间的数据当做异常值去除,为保证需求量的精准预测并且将长期需求量为0的组合进行剔除。本文对剩下的组合采用ARIMA时间序列预测与LSTM时间序列预测相结合的方法进行预测,并通过1-wmape指标对其进行评价,通过该评价指标的值对两种预测方法进行赋权,将两种方法相结合得出预测结果。对于聚类问题,本文从两个方向选择聚类指标:第一方面是各组合的需求量序列的实力特征指标,第二方面是各组合本身的性质特征(附件2-4中商家、仓库、产品的信息)。运用主成分分析法对多维指标进行降维处理,再通过降维数据采用k-means聚类方法,进行聚类,得到聚类结果。
问题二的分析
针对问题二,本文首先对于附件5中的数据如问题一一样进行上、仓库、产品三个编码进行合并作为新组合,并将附件5中的组合按照出现时间分为5类,如4月1日-4 月5日出现的组合作为1类,通过分别对5类新组合和附件1中组合在共有的时间序列上的需求量进行Spearman相关系数的计算,对附件5中每一个新组合找到附件1中对应的组合使得这两个组合之间Spearman相关系数最大并且p值小于0.05.再利用附件1中的组合在问题一中已得到的ARIMA时间序列模型得到的方程和LSTM得到的训练结果带入附件5中给的数据,对附件5中新组合进行预测得到结果。
问题三的分析
针对问题三,首先对于双11期间的每天商品的需求量及进行可视化展示,根据各电商平台“双11”促销时间表和可视化结果,把“双11”期间分为三个阶段:开门红、品类日&主题日、狂欢日&高峰期;并针对不同一级分类的商品计算“双11期间”的品类因子,针对不同地区的商品计算“双11”期间的地区因子。本文对于“618”期间各组合的需求量预测分为两步:第一步是通过ARIMA时间序列和LSTM赋权方法(同问题一)进行6月1日至6月20日无购物节的需求情况预测,第二步则是将“双11”中的品类因子和地区因子引入到“618”期间的各组合预测中,通过这两步得到“618”期间各组合的需求量预测情况。
模型的建立与求解整体论文缩略图
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
部分程序如下:
import pandas as pd
importnumpyasnp
importmatplotlib.pyplotasplt
%matplotlibinline
importseabornassns
fromdatetimeimportdatetime
pd.options.display.float_format='{:.2f}'.format
fromitertoolsimportcombinations
fromsklearn.metricsimportmean_absolute_error
fromsklearn.metricsimportmean_squared_error
fromstatsmodels.tsa.stattoolsimportadfuller
fromstatsmodels.tsa.stattoolsimportacf,pacf
fromstatsmodels.tsa.arima_modelimportARIMAasARIMA
importstatsmodels.apiassm
importstatsmodels.tsa.apiassmt
df=pd.read_excel('E:/competition/附件1label.xlsx')
df=df.T
df=df.set_axis(df.iloc[0],axis=1,inplace=False)
df=df.drop(df.index[0])
df
deftest_stationarity(timeseries):
#Determingrollingstatistics
MA=timeseries.rolling(window=12).mean()
MSTD=timeseries.rolling(window=12).std()
#Plotrollingstatistics:
plt.figure(figsize=(15,5))
orig=plt.plot(timeseries,color='blue',label='Original')
mean=plt.plot(MA,color='red',label='RollingMean')
std=plt.plot(MSTD,color='black',label='RollingStd')
plt.legend(loc='best')
plt.title('RollingMean&StandardDeviation')
#plt.show(block=False)
#PerformDickey-Fullertest:
print('ResultsofDickey-FullerTest:')
dftest=adfuller(timeseries,autolag='AIC')
dfoutput = pd.Series(dftest[0:4], index=['Test Statistic','p-value','#Lags
Used','NumberofObservationsUsed'])
forkey,valueindftest[4].items():
dfoutput['CriticalValue(%s)'%key]=value
print(dfoutput)
deftsplot(y,lags=None,figsize=(12,7),style='bmh'):
ifnotisinstance(y,pd.Series):
y=pd.Series(y)
withplt.style.context(style):
fig=plt.figure(figsize=figsize)
layout=(2,2)
ts_ax=plt.subplot2grid(layout,(0,0),colspan=2)
acf_ax=plt.subplot2grid(layout,(1,0))
pacf_ax=plt.subplot2grid(layout,(1,1))
y.plot(ax=ts_ax)
p_value=sm.tsa.stattools.adfuller(y)[1]
ts_ax.set_title('Time Series Analysis Plots\n Dickey-Fuller:
p={0:.5f}'.format(p_value))
smt.graphics.plot_acf(y,lags=lags,ax=acf_ax)
smt.graphics.plot_pacf(y,lags=lags,ax=pacf_ax)
plt.tight_layout()
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
原文地址:https://blog.csdn.net/weixin_43292788/article/details/144128437
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!