system: [SYSTEM]

user: 2. 基于ARIMA的拟合模型 2.1. 数据预处理 本文研究简要流程图，如图1所示。 首先对4个附件进行分析，得到各个表的具体含义分别为：sale_info产品流水数据、prod_info产品具体信息、inv_info库存信息、holiday_info节假日具体日期。 通过研究分析，确定目标skc为销售时间处于2018年7月1日至 2018年10月1日内且累计销售额排名前50的skc，以下称为“目标skc”。 本文研究国庆、双十一、双十二和元旦四个节假日的各因素对目标skc的影响。下面利用Excel对附件进行升序、筛选、分类汇总和Vlookup函数计算。通过对sale_info表筛选(使用Excel筛选与升序)得到2018年7月1日至10月1日的流水数据，可以得到该时间段的skc、销售量和real_cost (实际出费)。利用Excel计算real_cost，得到real_cost数值排名为前五十的skc，即为目标skc。 图1. 研究简要流程图 目标skc累积销售额如图2所示。 图2. 目标skc累积销售额 接下来，对节假日的目标skc销售量的影响因素进行研究。根据对表格数据进行分析，选择产品销售量、产品总销售额、产品销售单价、最后一天库存数量、折扣、标签价格六个相关因素作为研究指标，在定性与定量的角度进行数学建模，研究这六个因素对目标skc的影响程度。 通过数据处理发现部分节假日时间靠后或是在年末时间的库存是搜索不到的，抽取2018年某一个skc的库存变化率，利用Excel可视化，得到图3。可以发现库存量是总体递减的，而四个节假日的产品优惠导致库存量快速下降或是断货，所以把节假日库存数量的缺失值定为0。 图3. 某一个skc一年的库存变化图 通过数据预处理后，得到了国庆、双十一、双十二和元旦的在目标skc时期的销售量、销售单价、总的销售额、折扣、库存和标价数据，同时也有目标skc的销售量数据，下面分别使用四个节假日的相关因素对目标skc的销售量进行Python相关性分析。 利用Python进行Pearson相关性分析，其含义如下：如果想要验证两个变量或是多个变量之间的相关程度，通过计算相关性可以得到各个变量之间相关系数和相关系数矩阵，相关系数处于[0， 1]，当变量之间的相关系数越接近1，变量间的相关程度就越大，当相关系数为0，称两者不存在线性相关关系。 为了评价并且量化四个节日的六个要素对问题中的目标skc的销售量的关联程度，所以建立Pearson相关系数模型。 若 X i 与 X j 的协方差 C o v ( X i ， X j ) 存在(且 i ， j = 1 ， 2 ， ⋯ ， p )，称 R = ( r i j ) p × p 为X的相关矩阵，其计算公式如下 [ 3 ]： r i j = C o v ( X i ， X j ) V a r ( X i ) V a r ( X j ) = σ i j σ i i σ j j (1) 其中 V a r ( X i ) = C o v ( X i ， X i ) ↔ d e f σ i i (2) V a r ( X i ) 是随机变量 X i 的方差，而 σ i i 为 X i 的标准差。 利用Python进行相关系数模型的求解 [ 4 ] 并对六个相关矩阵进行可视化，得到热力图 如图4所示。从而得到销售量、销售单价、总的销售额、折扣、库存和标价数据与目标skc销售量的相关程度。 对Pearson相关系数矩阵中的各个因素进行相关分析的显著性检验 (significance test)。 1. 显著性检验就是事先对总体(随机变量)的参数或总体分布形式做出一个假设，然后利用样本信息来判断这个假设(备择假设)是否合理，即判断总体的真实情况与原假设是否有显著性差异； 2. 显著性检验是针对总体所做的假设做检验，原理是“小概率事件实际不可能性原理”来接受或否定假设； 3. 显著性检验用于实验处理组与对照组或两种不同处理的效应之间是否有差异，以及这种差异是否显著的方法。 使用SPSS软件进行对相关性的显著性分析(显著性水平 α 为0.05)，得到显著性检验表，见表1： 图4. 相关矩阵热力图 Table 1 Significance test tabl 关于销量s的 相关性 关于总销售额real_cost的相关性 关于标签价 tag_price的相关性 关于折扣的 相关性 关于单价的 相关性 关于库存的 相关性 销量与国庆指标 0.000 0.000 0.000 0.008 0.000 0.000 销量与双十一指标 0.000 0.004 0.000 0.163 0.005 0.000 销量与双十二指标 0.000 0.004 0.000 0.969 0.001 0.000 销量与元旦指标 0.007 0.007 0.000 0.007 0.000 0.009 国庆指标与双十一指标 0.000 0.000 0.000 0.127 0.000 0.000 国庆指标与双十二指标 0.000 0.000 0.000 0.684 0.000 0.000 国庆指标与元旦指标 0.000 0.016 0.000 0.072 0.000 0.010 双十一指标与双十二指标 0.000 0.000 0.000 0.764 0.000 0.000 双十一指标与元旦指标 0.021 0.519 0.000 0.068 0.000 0.012 双十二指标与元旦指标 0.000 0.041 0.000 0.410 0.000 0.007 表1. 显著性检验表 大部分相关因素的显著性 Sig < α = 0.05 ，可以得到Pearson相关系数模型的效果较好。 根据热力图与显著性检验，可以看到与目标skc销售量相关系数较大的是节假日销售量、库存和标签价，说明这三个因素影响较大并且显著相关；而总销售额、销售单价和折扣的影响较小，相关系数较低。对于节假日销售量来说，相关性最高的是目标skc销售量与国庆的销售量，而其余三个节假日随着时间间隔越大，相关性越小，所以可以判断距离时间越远，相关程度越小。可视化图像反映出目标skc与销售量的相关程度较高，节假日销售量对目标skc的影响程度大，初步判断销售量之间有一定程度的自相关性和预测性，所以将销售量作为本文研究的主要决策变量，建立时间序列模型。 2.2. ARIMA模型的建立 本文需要对新零售目标产品的需求进行预测，通过2019年6月1日~10月1日的目标小类销售量预测2019年10月、11月和12月的目标小类销售量。 小类即多种skc聚合在一起为一个类别。通过数据预处理，得到2019年6月1日~10月1日小类累计销售量排名前10的小类编号，称为目标小类编号(tiny_class_code)，如图5所示。 图5. 前十名目标小类累计销售额 统计分析得到每一天的小类销售量，保证销售量数据充足，并得到该时间段的目标小类每一天的销售量。接下来，使用目标小类的销售量的时间序列，建立目标小类的时间序列模型 [ 5 ]，称为销量时间序列模型(Time series model of sales volume，记为SV-ARIMA模型)。 时间序列模型(ARIMA模型)的建模步骤 是： 1. 首先对观察值序列进行平稳性检验； 2. 如果通过进行平稳性检验，如果没有通过，对序列进行差分运算，直到平稳性检验通过； 3. 如果平稳性检验通过，那么分析结束，进行白噪声检验； 4. 如果白噪声检验没有通过进行拟合ARMA模型，直到白噪声检验通过，通过后分析结束。 总体过程如图6所示。 使用目标小类(10个小类)编号的日期为2019年6月1日至10月1日的销售量进行时间序列模型分析 [ 6 ]。 Step1：首先使用Python对目标小类中的10个小类进行绘制在2019年6月1日至10月1日的销售量时序图，如图7所示。可以看出，目标小类销售量的时间序列不完全平稳，因此需要进行差分平稳化。 Step2：建立自相关函数ACF (autocorrelation function)计算公式 。 自相关函数ACF描述的是时间序列观测值与其过去的观测值之间的线性相关性。计算公式如下： ACF ( k ) = ρ k = C o v ( y t ， y t − k ) V a r ( y t ) (3) 其中k表示滞后期数， y t 表示序列值。使用Python得到10个小类的自相关图 [ 6 ]，如图8所示。 Step3：根据自相关图可见，为了对通过平稳性检验，需要对序列进行差分运算，那么可以得到时间序列的d阶差分为： Δ d x t = ( 1 − B ) d x t = ∑ i = 0 d ( − 1 ) i C d i x t − i (4) 图6. ARIMA建模流程图 图7. 目标小类的销售量时序图 图8. 目标小类的自相关图 可改写成： x t = ∑ i = 0 d ( − 1 ) i + 1 C d i x t − i + Δ d x t (5) 其中， x t 为目标小类中一个小类的销售量时间序列。此式子为 x t 关于 x t − i ( i = 1 ， 2 ， ⋯ ， d )的一个d阶自回归过程，其中 Δ d x t 度量了自回归过程中产生的随机误差的大小是多少。差分运算通过自回归的方式提取了序列的确定性的信息。在本文需通过一阶差分和二阶差分运算的平稳性检验和后面一阶差分进行预测： Δ x t = ( 1 − B ) x t (6) Δ 2 x t = ( 1 − B ) 2 x t (7) 使用一阶差分对序列进行运算，并绘制出差分后序列之间的自相关图 [ 7 ]，得到如图9所示的图像。 图9. 差分运算后的自相关图 同时引入偏自相关函数概念：偏自相关函数PACF描述的是在给定中间观测值的条件下，时间序列观测值预期过去的观测值之间的线性相关性。使用Python绘制偏相关图 [ 7 ]，得到图10。 图10. 差分运算后的偏相关图 Step4：接下来建立、拟合销量时间序列模型(SV-ARIMA模型)，引入ARIMA模型的概念并建立模型 [ 6 ]。 若序列 { x t } 可以通过d阶差分转化为平稳的时间序列后，即 { y t } = { Δ d x t } 是一个平稳时间序列，并且序列可以拟合成一个平稳可逆的 ARMA ( p ， q ) 模型，则意味着序列 { x t } 可以拟合成如下形式的数学模型： Φ ( B ) Δ d x t = Θ ( B ) ε t (8) 其中，序列 { ε t } 为一个白噪声序列， 为延迟算子。并且有： { Φ ( B ) = 1 − φ 1 B − ⋯ − φ p B p Θ ( B ) = 1 − θ 1 B − ⋯ − θ q B q (9) Step4的模型称为求和自回归移动平均模型。记作 ARIMA ( p ， d ， q ) 。自回归移动平均模型(ARIMA)的目标是描述数据中彼此之间的关系。 其中，d为差分的阶数，p为差分序列拟合的ARMA模型的自回归阶数，q指的是差分序列拟合的ARMA模型d的移动平均的阶数，在本问取 d = 2 ， p = 1 ， q = 4 ，得到： ( 1 − φ 1 B − φ 2 B 2 ) Δ 2 x t = ε t (10) 使用Python的ARIMA库进行对目标小类中的10个小类进行拟合和自回归移动平均模型，得到效果如图11 所示： 图11. 目标小类销售量ARIMA拟合曲线 其中，蓝色曲线为差分后的销售量时间序列，时间为2019年6月1日至10月1日，红色曲线为 ARIMA ( p ， d ， q ) 拟合曲线(SV-ARIMA模型)，可见拟合效果较优。接下来对2019年10月、11月和12月的目标小类销售量进行预测 [ 8 ]。