全国大学生数据建模比赛c题——基于蔬菜类商品的自动定价与补货决策的研究分析

  1. 基于蔬菜类商品的自动定价与补货决策的研究分析

    摘要

    商超蔬菜不易保存,其质量会随着销售时间的增加而变差,影响商超收益,因此,基于各蔬菜品类的历史销售数据,制定合理的销售策略和补货决策对商超的营收十分关键。本文基于线性回归模型对蔬菜类商品的自动定价与补货决策的研究分析如下:

    针对问题一, 首先对附件2中的数据进行预处理;其次基于处理的数据对蔬菜品类销售量及影响因素进行相关性分析;最后运用最小二乘法进行相关性求解,并生成热力图模型。相关性分析结果表明:花叶类蔬菜销售数量最好,茄类、水生根类和辣椒类受价格波动较小,食用菌类受销售价格影响较大,且这些蔬菜都与销售价格成正相关。

    针对问题二, 首先,基于附件2和附件3的各蔬菜单品销售数量及批发价格,统计计算各蔬菜品类的销售总量和总销售额,并进行数据可视化分析;其次,计算蔬菜的平均成本加成率,生成平均成本加成率和销售价格的折线图,构建多元线性回归预测模型,进一步计算出销售总量与成本加成定价的关系;最后,根据销售总量与成本加成定价的关系,制定未来一周的日补货总量和定价策略。结合成本加成定价和市场需求,商超可以调整补货总量和定价,以实现最大化的收益。

    针对问题三, 首先,根据附件4的损耗率数据进行分析,并结合补货和定价决策计算不同蔬菜品类或单品的损耗率,及销售量与损耗量之比;其次,基于商品的损耗率和菜品的单价和数量,构建商品收益最大化模型并使用线性规划进行模型求解,预测出7月1日各蔬菜单品的补货数量和定价策略的结果,并生成相应的表格和柱形图。

    针对问题四, 商超需要对每个蔬菜品类的品相进行评估,应进一步分析蔬菜销量与其产地的关联关系。因此,本文基于python爬虫技术,收集相关数据,基于相关系数验证蔬菜销量与产地之间的关系,结果表明蔬菜产地与蔬菜销量的相关系数为0.99,进一步验证了本文关于蔬菜销量受产地影响的猜想。

    关键字: 最小二乘法; 平均成本加成率 ; 相关系数; 商品收益最大 模型

    一、问题重述

    1.1 问题背景

    是关于一个生鲜商超的情境。商超销售的蔬菜类商品具有较短的保鲜期,而且品相随着销售时间的增加而变差。商超每天根据商品的历史销售和需求情况进行补货,并使用成本加成定价策略。商超希望在不确切知道具体单品和进货价格的情况下,通过市场需求分析来决策补货量和定价策略。附件中提供了蔬菜商品的销售流水明细、批发价格以及近期的损耗率数据。

    1.2 问题要求

    问题1要求分析蔬菜商品不同品类或不同单品之间的销售量分布规律及相互关系。

    问题2要求分析各蔬菜品类的销售总量与成本加成定价的关系,并给出未来一周的补货总量和定价策略,以最大化商超的收益。

    问题3要求制定单品的补货计划,使得可售单品总数控制在一定范围内并满足最小陈列量的要求,同时使得商超的收益最大化。

    问题4要求了解商超还需要采集哪些相关数据,以更好地制定蔬菜商品的补货和定价决策,并说明这些数据对问题的解决有何帮助。

    二、问题分析

    2.1问题一:

    图1 针对问题一解决流程图

    收集蔬菜各品类及单品的销售量数据,确保数据集包含足够数量的样本。对数据进行预处理,包括去除异常值、填补缺失值、进行归一化等操作。进行数据探索和可视化分析,了解蔬菜各品类及单品销售量的分布情况。计算不同蔬菜品类及单品之间的相关系数[5],了解它们之间的线性相关性。根据问题需求选择合适的模型进行建立,如回归模型、时间序列模型或聚类分析。使用所选模型对数据进行训练和求解,得到模型参数和预测结果。评估模型的拟合程度、显著性检验和误差分析等指标,确保模型的准确性和可靠性。分析模型结果,解释蔬菜品类及单品之间的关联关系,制定相应的市场策略和销售推广方案。

    2.2问题二:

    商超以品类为单位进行补货计划,我们需要分析各蔬菜品类的销售总量与成本加成定价的关系,并给出未来一周(2023年7月1-7日)的日补货总量和定价策略,以最大化商超的收益。首先,针对每个蔬菜品类,可以计算销售总量和成本加成定价之间的关系。销售总量可以从销售流水明细数据(附件2)中获得,成本加成定价可以从批发价格数据(附件3)中获得。通过观察销售总量与成本加成定价的变化趋势,我们可以了解它们之间的潜在关系,如是否存在正向或负向的相关关系。

    图2 数据关系及解决流程

    根据销售总量和成本加成定价之间的关系,我们可以建立一个数学模型,通过优化算法来确定每天的补货总量和定价,以最大化商超的收益。这个模型需要考虑到销售总量、成本加成定价、补货成本以及商品保鲜期的限制,以确保补货和定价决策的合理性和可行性。在求解模型时,我们需要考虑到供应品种的丰富程度和销售空间的限制。根据商超的需求情况和市场趋势,可以制定一周内每天的补货总量和定价策略

    2.3问题三

    商超希望制定单品的补货计划,确保可售单品总数控制在27-33个,且各单品的订购量满足最小陈列量2.5千克的要求。根据2023年6月24-30日的可售品种,需要给出7月1日的单品补货量和定价策略,以最大化商超的收益,并在满足市场对各品类蔬菜商品需求的前提下进行决策。根据附件2的销售流水明细数据,计算6月24-30日每个可售单品的销售量。然后,根据市场需求和陈列要求,计算每个单品的补货量,确保可售单品总数控制在27-33个,并且满足最小陈列量2.5千克的要求。

    2.4问题四

    商超需要收集各个蔬菜商品的历史销售数据,包括销售数量、销售额、销售时间等信息。这些数据可以帮助商超了解各个蔬菜商品的销售趋势和季节性变化为制定补货和定价决策提供依据。

    三、基本假设

    1. 假设题中所给数据准确无误。

    2. 假设未来 24 周内不出现意外情况,导致结果的意外误差。

    3. 假设只考虑产品的销量只与供求关系有关,其它因素我们不考虑。

    4. 假设销售的蔬菜都可以按时送到。

    四、符号说明

    |----|------------------|----|
    | 符号 | 定义 | 单位 |
    | | 线性相关程度的指标 | \ |
    | | 花叶类的销售量 | 千克 |
    | | 辣椒类的销售量 | 千克 |
    | | 蔬菜的销售价格与其成本之间的比率 | \ |
    | | 可售单品 | 个 |
    | | 每个单品的订购量 | 千克 |
    | | 每个单品的定价 | 元 |
    | | 每个单品的收益 | 元 |
    | | 总收益 | 元 |
    | | 蔬菜未来的销售量 | 千克 |

    五、问题一的模型建立与求解

    5.1 有关蔬菜品类、销售数量和销售价格的相关数据分析

    根据附件2、3中的数据先进行分析处理,生成图例如下所示:

  2. 图3 不同种类的菜品与销量之间的关系的折线图

  3. 图4 不同种类的菜品与销量之间的关系的柱状图

    根据图3、图4进行一个初步的判断,商场蔬菜销量的数量与商品的种类有关,不同种类蔬菜之间的数量有些成正向关、有些有依赖关系。

    5.2建立相关系数模型

    在判断商超不同种类蔬菜之间的关系的时候,引入了线性回归算法[1],来进行模型的建立和分析。目的是分析蔬菜类商品不同品类或不同单品的依赖关系和内在规律。

    首先,在进行内在规律的分析之前,要判断所求目标之间是否有相关性,所以在这里先引入了一个相关系数模型,来判断其中的属性是否有相关性建立模型,

    建立公式如下:

    (1)

    其中,

    表示随机变量

    的协方差,

    的方差,

    是反映随机变量

    在这里我们随机抽取两个属性作为示例:花叶类的销售数量,辣椒类的销售数量,将这两个不同的两个商品属性定义为

    ,

    ,并且在取花叶类销售数量的总数和花叶类销售数量的总数的适合要求数据数目一样,都为

    求取:

    花叶类的销售数量的平均数:

    辣椒类的销售数量的平均数:

    (3)

    求随机变量

    的协方差;

    ,

    的方差

    (5)

    (6)

    最后得到一个完整的判断花叶类的销售数量,辣椒类的销售数量之间相关性的公式:

    (7)

    最后求解出:

    其中

    的一个点估计值,取值范围是0≤

    ≤1,当

    接近于1时,变量

    呈密切线性相关;当

    接近于0时,变量

    1时,变量

    存在一定的线性关系。

    5.3 问题求解

    建立模型之后,从附件2中选取数据进行分析,绘制对应的相关性的热力图:

    图5 蔬菜品类和销售单价之间的关系热力图

    由于附件2中的目的商品使用的是商品编码的形式,所以还需要根据所生成不同种类的商品和销售关系热力图中的商品编码进行转化,转化成具体的蔬菜类型就可以得出:

    花叶类蔬菜销售数量最好,茄类、水生根类和辣椒类受价格波动较小,食用菌类受销售价格影响较大,且这些蔬菜都与销售价格成正相关。

    六、问题二的模型建立与求解

    6.1 蔬菜品类的销售总量与成本加成定价的关系的分析

    在生鲜商超中,由于蔬菜类商品的保鲜期短且品相随销售时间变差,商超通常每天根据历史销售和需求情况进行补货。补货决策和定价决策对商超来说至关重要,而可靠的市场需求分析对于这些决策尤为重要。

    根据附件2和附件3的销售流水明细数据,统计每个蔬菜品类的销售总量,根据附件3的数据,计算每个蔬菜品类的平均成本加成率。成本加成率可以通过计算销售收入与销售成本的差额与销售收入的比例来得到。根据销售总量和成本加成率的关系,分析不同销售总量水平下的成本加成率变化,以了解商超的定价策略。通过观察成本加成率的变化情况,可以判断商超在销售较多的蔬菜品类上是否采取更高的定价策略,或者在销售较少的蔬菜品类上是否采取更低的定价策略,以提供更好的销售组合。

    最后根据分析商超不同蔬菜品类的成本加成率,帮助商超了解市场需求,并制定合理的补货和定价策略,以最大程度地满足消费者需求、提高销售效益。

    Setp1:

    根据附件2和附件3的销售流水明细数据,统计每个蔬菜品类的销售总量,在使用Excel表格和python代码对数据进行分析生成可视化图表如下图:

    表1 蔬菜品类的销售总量

    |-------|------------|
    | 分类名称 | 销量(千克) |
    | 水生根茎类 | 40581.353 |
    | 花叶类 | 198520.978 |
    | 花菜类 | 41766.451 |
    | 茄类 | 22431.782 |
    | 辣椒类 | 91588.629 |
    | 食用菌 | 76086.725 |

    图6不同蔬菜品类的销量与售价

    图7 批发价格散点图

    Setp2:

    平均成本加成率

    在这里引入一个属性标签

    ,将每个蔬菜的平均成本加成率

    解释为:

    (8)

    其中

    就是蔬菜的销售价格与其成本之间的比率,来衡量企业在销售过程中将成本转化为利润的程度,反映企业的盈利能力和定价策略的合理性。

    示例:假如某种蔬菜的平均成本加成率为0.5,即50%。这意味着销售价格比成本高出50%。

    所以说,如果

    过高,可能会导致产品或服务过于昂贵,影响销售量和竞争力;如果

    过低,可能会导致企业无法覆盖成本和获得足够的利润。

    根据附件2、附件3数据代入公式计算,生成图表

    表2 每个单位编码蔬菜品类的平均加成率(部分)

    |-----------------|-------------|--------------|
    | 单品编码 | 销量(千克) | 成本加成率 |
    | 102900005115168 | 107980.44 | 4.314354327 |
    | 102900005115199 | 54981.795 | -0.488968434 |
    | 102900005115250 | 916293.416 | 0.443821729 |
    | 102900005115625 | 6172.02 | 2.048453592 |
    | 102900005115748 | 69711.572 | 3.448824281 |
    | 102900005115762 | 3325239.772 | 2.598980554 |
    | 102900005115779 | 13189772.17 | 3.020416371 |
    | 102900005115786 | 4916478.756 | 2.666546289 |
    | 102900005115793 | 880968.348 | 0.074074526 |
    | 102900005115816 | 73.712 | 0.183072833 |
    | 102900005115823 | 7066676.324 | 3.080905397 |
    | 102900005115854 | 71020.575 | 2.567229562 |
    | 102900005115861 | 1116440.706 | 3.969585021 |
    | 102900005115878 | 2157835.05 | 1.880231684 |
    | 102900005115885 | 301603.575 | 0.08774801 |
    | 102900005115908 | 3377034.467 | 2.478502699 |
    | 102900005115946 | 673655.2 | 1.95539246 |
    | 102900005115960 | 17594678.91 | 7.052425147 |
    | 102900005115977 | 3827.16 | 0.227773544 |
    | 102900005115984 | 8223680.472 | 2.495944657 |
    | 102900005116219 | 159209.259 | 2.674647551 |
    | 102900005116226 | 777177.805 | 0.967969069 |

    图8 每个蔬菜品类的平均加成率折线图(部分)

    6.2建立多元线性回归预测模型

    根据题意,建立一个回归预期模型,目的是根据已知的一些数据求未知的数据,列如:根据已知的某种蔬菜销售总量来预测该种类蔬菜未来的销售总量,从而求出成本加成率等数据,来帮助进行决策。

    利用多元线性回归函数建立回归预期模型,

    设预测值为:

    (9)

    其中,

    (i=0,1,2,3,

    ,n)和

    均未知,

    都是模型中的未知参数,称为回归系数,

    为随机误差

    假设以某一种蔬菜的数据为例,在这里先把这种蔬菜定义为:

    接下来需要进下参数的求解:

    在这里,采用的是最小二乘法[2]进行参数和误差的求解,采用最小二乘法,即在其数学模型所属的函数类中找一个近似的函数,使得这个近似函数在已知的对应数据上尽可能和真实函数接近。

    如下所示:

    ,分别是

    的最小二乘估计数,在已知

    的一些具体的数据的值(

    )的时候,

    则函数近似为:

    (9)

    采用最小二成法的估计参数蔬菜的数据模型参数

    ,根据相应的函数,建立对应的矩阵和项量

    ,

    则有:

    =

    =

    (10)

    可解:

    假设

    是满序,即存在

    故最小二乘的估计为:

    (11)

    (12)

    6.3模型求解

    将上列收集到的数据输入进模型当中,预测各蔬菜品类未来一周(2023 年 7 月 1-7 日)每天的需求数量,生成表格如下:

    表3 未来一周各蔬菜品类的需求预测(部分)

    |------------|-----------------|-------------|--------------|
    | 销售日期 | 单品编码 | 销量(千克)预测 | 销售单价(元/千克)预测 |
    | 2023-07-01 | 102900005115762 | 7.949130729 | 73.01843558 |
    | 2023-07-02 | 102900005115762 | 7.949127105 | 73.01802985 |
    | 2023-07-03 | 102900005115762 | 7.949123481 | 73.01762411 |
    | 2023-07-04 | 102900005115762 | 7.949119857 | 73.01721837 |
    | 2023-07-05 | 102900005115762 | 7.949116233 | 73.01681263 |
    | 2023-07-06 | 102900005115762 | 7.949112609 | 73.01640689 |
    | 2023-07-07 | 102900005115762 | 7.949108985 | 73.01600116 |
    | 2023-07-01 | 102900005115779 | 9.801111661 | 115.4610462 |
    | 2023-07-02 | 102900005115779 | 9.800766208 | 115.4509089 |
    | 2023-07-03 | 102900005115779 | 9.800420754 | 115.4407715 |
    | 2023-07-04 | 102900005115779 | 9.800075301 | 115.4306342 |
    | 2023-07-05 | 102900005115779 | 9.799729848 | 115.4204968 |
    | 2023-07-06 | 102900005115779 | 9.799384395 | 115.4103595 |
    | 2023-07-07 | 102900005115779 | 9.799038941 | 115.4002222 |
    | 2023-07-01 | 102900005115786 | 9.719765856 | 135.453358 |
    | 2023-07-02 | 102900005115786 | 9.719716161 | 135.453472 |
    | 2023-07-07 | 102900005115786 | 9.719467685 | 135.4540421 |
    | 2023-07-01 | 102900005115793 | 0.807841181 | 31.04862765 |
    | 2023-07-02 | 102900005115793 | 0.80774699 | 31.04521563 |

    在进一步处理数据可得

    表4 未来一周各蔬菜品类的进一步需求预测

    |------------|-------|-------------|-------------|
    | 日期 | 分类名称 | 销量(千克) | 售价(千克/元) |
    | 2023-07-01 | 水生根茎类 | 5264432.999 | 4.080019166 |
    | 2023-07-01 | 花叶类 | 5150360.943 | 3.75299479 |
    | 2023-07-01 | 花菜类 | 5140073.101 | 2.47391076 |
    | 2023-07-01 | 茄类 | 5139145.269 | 2.612418301 |
    | 2023-07-01 | 辣椒类 | 5139061.59 | 4.060229885 |
    | 2023-07-01 | 食用菌 | 5139054.043 | 5.071307894 |
    | 2023-07-02 | 水生根茎类 | 5264432.999 | 4.209421616 |
    | 2023-07-02 | 花叶类 | 5150360.943 | 3.474428518 |
    | 2023-07-02 | 花菜类 | 5140073.101 | 2.79322418 |
    | 2023-07-02 | 茄类 | 5139145.269 | 2.19047619 |
    | 2023-07-02 | 辣椒类 | 5139061.59 | 4.524657534 |
    | 2023-07-02 | 食用菌 | 5135654.043 | 5.125609756 |
    | 2023-07-03 | 水生根茎类 | 5255632.999 | 4.107791075 |
    | 2023-07-03 | 花叶类 | 5158960.943 | 3.63728278 |
    | 2023-07-03 | 花菜类 | 5105673.101 | 2.29479629 |
    | 2023-07-03 | 茄类 | 5156245.269 | 2.315399648 |
    | 2023-07-03 | 辣椒类 | 5139061.59 | 4.098733195 |
    | 2023-07-03 | 食用菌 | 5130554.043 | 5.145598893 |
    | 2023-07-04 | 水生根茎类 | 5261332.999 | 4.76726343 |
    | 2023-07-04 | 花叶类 | 5150360.943 | 3.892826134 |
    | 2023-07-04 | 花菜类 | 5140073.101 | 2.64674145 |
    | 2023-07-04 | 茄类 | 5139145.269 | 2.25595607 |
    | 2023-07-04 | 辣椒类 | 5156061.59 | 4.09131088 |
    | 2023-07-04 | 食用菌 | 5139054.043 | 5.678459297 |
    | 2023-07-05 | 水生根茎类 | 5264432.999 | 4.902015995 |
    | 2023-07-05 | 花叶类 | 5150360.943 | 3.98501547 |
    | 2023-07-05 | 花菜类 | 5140073.101 | 2.027740849 |
    | 2023-07-05 | 茄类 | 5139145.269 | 2.614057508 |
    | 2023-07-05 | 辣椒类 | 5139061.59 | 4.900918428 |
    | 2023-07-05 | 食用菌 | 5139054.043 | 5.077299209 |
    | 2023-07-06 | 水生根茎类 | 5264432.999 | 4.306666667 |
    | 2023-07-06 | 花叶类 | 5150360.943 | 3.831319001 |
    | 2023-07-06 | 花菜类 | 5140073.101 | 2.952709686 |
    | 2023-07-06 | 茄类 | 5139145.269 | 2.4878678 |
    | 2023-07-06 | 辣椒类 | 5139061.59 | 4.10131579 |
    | 2023-07-06 | 食用菌 | 5139054.043 | 5.88921114 |
    | 2023-07-07 | 水生根茎类 | 5264432.999 | 4.857506512 |
    | 2023-07-07 | 花叶类 | 5150360.943 | 3.25842044 |
    | 2023-07-07 | 花菜类 | 5140073.101 | 2.78678678 |
    | 2023-07-07 | 茄类 | 5139145.269 | 2.570127796 |
    | 2023-07-07 | 辣椒类 | 5139061.59 | 4.963779749 |
    | 2023-07-07 | 食用菌 | 5139054.043 | 5.73697668 |

    七、问题三的模型建立与求解

    7.1 决策方案的分析

    单品总数控制在27-33个范围内。根据可售品种进行筛选和评估,选择最受欢迎和畅销的蔬菜品种。据市场竞争情况和目标利润率,对每个单品进行定价。考虑市场需求、成本、竞争对手的定价等因素,制定合理的定价策略。据市场竞争情况和目标利润率,对每个单品进行定价。考虑市场需求、成本、竞争对手的定价等因素,制定合理的定价策略。

    7.2 数据处理

    根据题目要求对附件2、附件3进行筛选,筛选符合要求的数据

    表5 附件2筛选过后得到(部分)

    |------------|--------------|-----------------|--------|------------|------|--------|
    | 销售日期 | 扫码销售时间 | 单品编码 | 销量(千克) | 销售单价(元/千克) | 销售类型 | 是否打折销售 |
    | 2023-06-24 | 09:10:47.276 | 102900011032022 | 1.000 | 2.80 | 销售 | 否 |
    | 2023-06-24 | 09:10:47.531 | 102900005115786 | 0.379 | 4.00 | 销售 | 否 |
    | 2023-06-24 | 09:13:51.795 | 102900005115762 | 0.505 | 4.00 | 销售 | 否 |
    | 2023-06-24 | 09:14:43.77 | 102900005115762 | 0.505 | 4.00 | 销售 | 否 |
    | 2023-06-24 | 09:14:44.044 | 102900011030059 | 1.000 | 4.50 | 销售 | 否 |
    | 2023-06-24 | 09:14:44.443 | 102900011030059 | 1.000 | 4.50 | 销售 | 否 |
    | 2023-06-24 | 09:19:55.484 | 102900005115823 | 0.477 | 8.00 | 销售 | 否 |
    | 2023-06-24 | 09:19:55.705 | 102900011006948 | 0.485 | 12.00 | 销售 | 否 |
    | 2023-06-24 | 09:22:36.474 | 102900005115250 | 0.271 | 24.00 | 销售 | 否 |
    | 2023-06-24 | 09:25:27.795 | 102900051000463 | 0.415 | 8.00 | 销售 | 否 |
    | 2023-06-24 | 09:26:23.77 | 102900011016701 | 0.426 | 5.20 | 销售 | 否 |

    表6 附件3筛选过后得到(部分)

    |------------|-----------------|------------|
    | 日期 | 单品编码 | 批发价格(元/千克) |
    | 2023-06-24 | 102900005115250 | 15.60 |
    | 2023-06-24 | 102900005115762 | 2.31 |
    | 2023-06-24 | 102900005115779 | 5.75 |
    | 2023-06-24 | 102900005115786 | 2.41 |
    | 2023-06-24 | 102900005115823 | 4.32 |
    | 2023-06-24 | 102900005115908 | 4.60 |
    | 2023-06-24 | 102900005115946 | 3.25 |
    | 2023-06-24 | 102900005115960 | 2.93 |
    | 2023-06-24 | 102900005116219 | 12.26 |
    | 2023-06-24 | 102900005116233 | 10.79 |
    | 2023-06-24 | 102900005116257 | 3.80 |
    | 2023-06-24 | 102900005116509 | 4.12 |
    | 2023-06-24 | 102900005116547 | 4.06 |
    | 2023-06-24 | 102900005116714 | 8.42 |
    | 2023-06-24 | 102900005116837 | 3.64 |
    | 2023-06-24 | 102900005118817 | 9.63 |
    | 2023-06-24 | 102900011008522 | 4.98 |

    7.3 建立商品收益最大化模型

    假设共有

    个可售单品,每个单品的订购量为

    ,定价为

    ,收益为

    ,则商超的总收益

    为:

    (13)

    满足每个单品订购量的最小陈列量要求可表示为:

    2.5 (

    1, 2, ..., n)

    可售单品总数的限制可表示为:

    = n 且 27

    33

    通过优化算法(如线性规划、整数规划等)可以求解出

    的最优解,以使得商超的总收益最大化。

    补货量的计算:

    补货量 = 最小陈列量 - 销售量

    公式中的最小陈列量为2.5千克。

    7.4 问题求解

    根据指定的日期范围(2023年6月24日到6月30日),筛选出符合条件的销售数据。接下来,对每个单品进行销售量的统计,使用groupby函数按单品编码进行分组,并计算销售量的总和。计算可售单品总数,即统计有多少种不同的单品。根据可售单品总数的范围(27-33个),确定是否需要补货。如果可售单品总数小于27个,则需要补货,补货数量为27减去可售单品总数;如果可售单品总数大于33个,则需要整理库存,补货数量为33减去可售单品总数;否则,不需要补货。针对每个单品计算补货量和定价策略。补货量的计算是将最小陈列量(2.5千克)减去已销售的量,小于零时补货量为零。根据单品编码的范围(假设小于等于102900011000000的编码属于一类),确定补货策略。

    表7 补货策略(部分)

    |-----------------|-------------|--------------|
    | 单品编码 | 日补货总量 | 定价策略 |
    | 102900005115168 | 755863.08 | 4.314354327 |
    | 102900005115199 | 384872.565 | -0.488968434 |
    | 102900005115250 | 6414053.912 | 0.443821729 |
    | 102900005115625 | 43204.14 | 2.048453592 |
    | 102900005115748 | 487981.004 | 3.448824281 |
    | 102900005115762 | 23276678.4 | 2.598980554 |
    | 102900005115779 | 92328405.18 | 3.020416371 |
    | 102900005115786 | 34415351.29 | 2.666546289 |
    | 102900005115793 | 6166778.436 | 0.074074526 |
    | 102900005115816 | 515.984 | 0.183072833 |
    | 102900005115823 | 49466734.27 | 3.080905397 |
    | 102900005115854 | 497144.025 | 2.567229562 |
    | 102900005115861 | 7815084.942 | 3.969585021 |
    | 102900005115878 | 15104845.35 | 1.880231684 |
    | 102900005115885 | 2111225.025 | 0.08774801 |
    | 102900005115908 | 23639241.27 | 2.478502699 |
    | 102900005115946 | 4715586.4 | 1.95539246 |
    | 102900005115960 | 123162752.3 | 7.052425147 |
    | 102900005115977 | 26790.12 | 0.227773544 |
    | 102900005115984 | 57565763.3 | 2.495944657 |
    | 102900005116219 | 1114464.813 | 2.674647551 |

    图9 每日补货总量和定价策略

    定价策略:

    花叶类、花菜类和水生根茎类的价格可以增长;辣椒类、食用菌的价格可以下降;茄类保持不变。

    八、问题四的模型建立与求解

    8.1对潜在需要数据的分析和理由

    商超需要对每个蔬菜品类的品相进行评估,并记录品相与销售时间的关联性。这可以帮助商超预测蔬菜在不同销售时段的品相变化情况,及时进行降价打折或调整补货策略。商超需要了解与其合作的供应商信息,包括供应商的可靠性、供应能力和交货时间等。通过分析供应商的表现,商超可以选择合适的供应商以确保蔬菜的供应稳定性和品质可靠性。

    购买者数据:收集购买者的相关信息,如年龄、性别、购买频率、购买偏好等,有助于商超理解不同消费者群体对蔬菜商品的需求,从而调整补货和定价策略,提供更符合消费者需求的产品。

    产地数据:记录蔬菜商品的产地销售特点,例如不同产地哪些产品更受欢迎,哪些产品供应量受限等,有助于商超合理安排补货计划,调整定价策略,提供适应市场需求的蔬菜商品。

    价格数据:了解竞争对手的蔬菜商品定价情况,包括市场价格、促销活动等,可以帮助商超在制定定价策略时做出更具竞争力的决策,吸引消费者并增加销售额。

    这些数据可以提供商超更全面的了解和洞察蔬菜商品的市场需求和消费者行为,从而帮助商超做出更明智的补货和定价决策。

    除了上述提到的数据,商超还可以考虑采集以下相关数据,以进一步提高蔬菜商品的补货和定价决策的准确性和效果:供应链数据:了解整个供应链中的生产、运输和库存情况,包括蔬菜商品的产地、供应商信息、交货周期、库存周转率等。这些数据可以帮助商超优化补货计划,确保蔬菜商品的及时供应和库存管理,以减少库存积压或缺货情况。

    消费者反馈数据:通过顾客反馈、调查问卷等方式收集消费者对蔬菜商品的评价、意见和建议。这些数据可以帮助商超了解消费者对产品质量、口味、包装等方面的偏好,并根据反馈进行改进和调整,提升商品的竞争力和顾客满意度。 营销活动效果数据:监测和分析商超进行的促销活动、广告宣传等营销行动对蔬菜商品销售的影响。通过收集和分析相关数据,商超可以评估不同营销策略的效果,从而优化活动安排和资源分配,提高蔬菜商品的销售表现。

    |---|---|
    | |
    | | |

    8.2 通过爬虫爬取某网站并进行数据分析

    Step1:爬取数据

    通过编写爬虫对蔬菜数据进行爬取生成表格如下:

    表8 爬取的蔬菜数据(部分)

    |------|------|-----|------|---------|-----|----|---------------------|
    | 品名 | 最低价 | 最高价 | 平均价 | 规格 | 产地 | 单位 | 发布日期 |
    | 西芹 | 1.8 | 2.0 | 1.9 | | 鲁辽 | 斤 | 2023-05-24 00:00:00 |
    | 菠菜 | 1.5 | 2.0 | 1.75 | 长\短 | 冀鲁 | 斤 | 2023-05-24 00:00:00 |
    | 莴笋 | 1.5 | 2.0 | 1.75 | | 鲁津 | 斤 | 2023-05-24 00:00:00 |
    | 团生菜 | 1.0 | 1.5 | 1.25 | | 京津 | 斤 | 2023-05-24 00:00:00 |
    | 散叶生菜 | 1.2 | 2.3 | 1.75 | | 冀辽 | 斤 | 2023-05-24 00:00:00 |
    | 黄豆芽 | 0.85 | 0.9 | 0.88 | | | 斤 | 2023-05-26 00:00:00 |
    | 番茄 | 1.0 | 1.4 | 1.2 | 黑框 | 冀鲁 | 斤 | 2023-05-26 00:00:00 |
    | 番茄 | 1.5 | 2.0 | 1.75 | 纸箱\泡沫箱 | 冀 | 斤 | 2023-05-26 00:00:00 |
    | 番茄 | 1.9 | 2.4 | 2.15 | 白框 | 鲁 | 斤 | 2023-05-26 00:00:00 |
    | 黄瓜 | 0.8 | 1.4 | 1.1 | 袋\箱 | 鲁辽冀 | 斤 | 2023-05-26 00:00:00 |
    | 黄瓜 | 1.4 | 1.8 | 1.6 | 干花\鲜花 | 冀 | 斤 | 2023-05-26 00:00:00 |
    | 小黄瓜 | 2.0 | 3.0 | 2.5 | 旱 | 辽冀 | 斤 | 2023-05-26 00:00:00 |
    | 小黄瓜 | 3.0 | 3.5 | 3.25 | 荷兰 | 辽鲁 | 斤 | 2023-05-26 00:00:00 |
    | 茄子 | 1.3 | 1.6 | 1.45 | | 冀鲁 | 斤 | 2023-05-26 00:00:00 |

    Step2:数据可视化

    先利用Excel工具和python代码进行简单数据分析,并进行可视化

    图11 蔬菜价格和产地的3D柱形图

    通过一些简单的数据分析,初步判断蔬菜的价格与产地相关。

    Step3:引用问题一的模型

    利用问题一中的相关系数模型

    求出近似相关系数,判断其中产地和价格之间的相关性

    将数据代入公式

    求得:

    Step4:得出结论

    根据相关系数,可以认为蔬菜的产地和价格呈正相关。

    即蔬菜价格数据和产地数据的具有相关性,为了更好地制定蔬菜商品的补货和定价决策,商超还需要采集产地数据。

    九、结果分析与检验

    针对问题二的回归线性模型拟合度的检验:

    在问题二中,采用的是多元线性回归算法,进行商品的销量和利润的预测,并且根据预测值求出了分析结果。

    在这里采用的是利用平方和分解公式,即

    (14)

    公式说明:

    为总体平方和,反应的是某种蔬菜种类的销售预测值和总体偏移的大小;

    为回归平方和,反应的是模型中解释变量的那部分离差的代表大小;

    为残差平方和,是前两个的综合。

    定义系数

    (15)

    其中,

    的取值范围为[0,1],

    越接近0,表明预测模型回归拟合的效果越差。

    根据模型,取数据进行计算得到

    综上,可得问题二中的模型所得出结果的回归拟合效果会比较好。

    十、模型改进和推广

    10.1 模型优点

    1.对与第一问求出的相关系数模型[3],利用已知的大量数据进行分析,判断了个个属性之间的相关性,模型比较可信

    2.在第二问采用了线性模型,对一些数据的相关性进行计算,并且剔除了无关的数据和标签,从而大大增了模型的准确性。

    3.第三问中的根据限定的条件进行模型的构建,通过采用多元回归方程设定条件,在合理的前提条件下减少了工作量。

    10.2 模型缺点

    1.比较适合对线性关系进行处理,缺少了灵活性

    2.在预测各蔬菜品类未来的补货总量和定价策略时,未考虑供货关系、消费者习惯等等因素。

    10.3 模型改进

    1.对于建立相关性的模型可以采用基本模型,如,模糊综合评价\主成分析 等专用分析模型,对回归系数大小的值可以更好的反映属性的相关性,进而确定每个属性的相关性。

    2.在求解规划模型的时候,应进一步考虑商超的能力,运用计算机模拟或

    多目标求解等的算法突破上可以进行改进,在使用回归模型之前,应该用一些优化算法进行优化,列如:梯度下降、遗传算法,这样可以找到更合适的参数,给出的结果也更加准确,模型的拟合度业更加适中。

    10.4 模型推广

    本文针蔬菜类商品的自动定价与补货决策进行数据分析,给出了针对该商超的补货总量和定价策略,可以依据此方法,针对其他行业的企业给出合理的参考水平。

  4. 参考文献

[1]庄孝准.核心素养之数学建模能力的培养------以线性回归模型为例[J].学周刊,2023(25):45-47.DOI:10.16657

[2]李俊岳,胡典顺.概率与统计的知识理解之最小二乘法[J].数学通讯,2023(02):12-15+37.

[3]司守奎,孙玺菁,数学建模算法与应用[M].北京:国防工业出版社,2016-2.

[4]叶剑峰. 基于时间序列的分体空调销售量预测研究[D].厦门大学,2020.

[5]李泊明.相关系数[J].新世纪智能,2023(33):46.

附录

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录1 |
| 支撑材料清单 |
| 1. 问题一_不同种类的菜品与销量之间的关系.py 2. 问题一_销售编码和销售单价之间的关系热力图.py 3. 问题二_每个蔬菜品类的平均加成率折线图.py 4. 问题二_每个单位编码蔬菜品类的平均加成率.py 5. 问题二_批发价格的散点图.py 6. 问题二_蔬菜品类的销售总量.py 7. 问题二_未来一周各蔬菜品类的需求预测.py 8. 问题二_不同蔬菜品类的销量与售价柱状折线图.py 9. 问题三_补货策略.py 10. 问题三_每日补货总量和定价策略图.py 11. 问题四_爬取的蔬菜数据.py 12. 问题四_蔬菜价格和产地的3D柱形图.py 13. 筛选过的附件2.xlsx 14. 筛选过的附件3.xlsx 15. 问题二_蔬菜各种类销售总量.csv 16. 问题二_每个单位编码蔬菜品类的平均加成率.xlsx 17. 问题二_未来一周各蔬菜品类的需求预测.xlsx 18. 问题二_整理后的未来一周各蔬菜品类的需求预测.xlsx 19. 问题三_补货策略.xlsx 20. 问题四_爬取的蔬菜数据.xlsx |

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录2 |
| 问题一_不同种类的菜品与销量之间的关系.py |
| import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = 'simsun' # 将字体更换为宋体 # 单品编码、销量和销售单价的数据 codes = [ 102900005115168, 102900005115199, 102900005115250, 102900005115625, 102900005115748, 102900005115762, 102900005115779, 102900005115786, 102900005115793, 102900005115816, 102900005115823, 102900005115854, 102900005115861, 102900005115878, 102900005115885, 102900005115908, 102900005115946 ] sales = [ 899.837, 333.223, 2810.716, 121.02, 718.676, 5100.061, 15910.461, 7240.764, 1707.303, 18.428, 7606.756, 415.325, 3836.566, 4110.162, 939.575, 4496.717, 1566.64 ] prices = [ 4.080019166, 32.75299479, 21.47391076, 4.612418301, 4.060229885, 5.071307894, 8.209421616, 5.474428518, 15.79322418, 8.19047619, 7.524657534, 5.125609756, 4.107791075, 6.63728278, 14.29479629, 7.315399648, 7.098733195 ] # 设置图表大小 plt.figure(figsize=(10, 6)) # 绘制销量折线图 plt.plot(codes, sales, marker='o', label='销量(千克)') # 绘制销售单价折线图 plt.plot(codes, prices, marker='o', label='销售单价(元/千克)') # 设置图表标题和坐标轴标签 plt.title('单品销量和销售单价') plt.xlabel('单品编码') plt.ylabel('数量') # 添加数据标签 for i in range(len(codes)): plt.text(codes[i], sales[i], str(sales[i]), ha='center', va='bottom') plt.text(codes[i], prices[i], str(prices[i]), ha='center', va='top') # 添加图例 plt.legend() # 显示图表 plt.show() |

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录3 |
| 问题一_销售编码和销售单价之间的关系热力图.py |
| import matplotlib.pyplot as plt import numpy as np # 输入数据 categories = ['水生根茎类', '花叶类', '花菜类', '茄类', '辣椒类', '食用菌'] sales = [40581.353, 198520.978, 41766.451, 22431.782, 91588.629, 76086.725] # 创建热力图 fig, ax = plt.subplots() heatmap = ax.imshow([sales], cmap='hot') # 设置刻度标签 ax.set_xticks(np.arange(len(categories))) ax.set_yticks(np.arange(len(sales))) ax.set_xticklabels(categories) ax.set_yticklabels(['销量(千克)']) # 在每个单元格上显示数值 for i in range(len(sales)): for j in range(len(categories)): text = ax.text(j, i, sales[i], ha='center', va='center', color='black') # 添加颜色条 plt.colorbar(heatmap) # 设置图表标题 plt.title('销量热力图') |

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录4 |
| 问题二_每个蔬菜品类的平均加成率折线图.py |
| import pandas as pd # 读取附件2数据 df_sales = pd.read_excel(r'附件2.xlsx') # 读取附件1数据 df_vegetables = pd.read_excel(r'附件1.xlsx') # 将附件1中的数据与附件2进行合并 df_merged = pd.merge(df_sales, df_vegetables, on='单品编码', how='left') # 按品类进行分组并计算销售总量 sales_by_category = df_merged.groupby('分类名称')['销量(千克)'].sum().reset_index() # 打印销售总量 for index, row in sales_by_category.iterrows(): category = row['分类名称'] sales_total = row['销量(千克)3'] print("品类:{category},销售总量:{sales_total}") # 将结果转换为 DataFrame # 保存为csv文件 sales_by_category.to_csv('蔬菜各种类销售总量.csv', index=False) |

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录5 |
| 问题二_不同蔬菜品类的销量与售价柱状折线图 |
| import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font.family'] = 'SimHei' # 输入销量和售价数据 categories = ["水生根茎类", "花叶类", "花菜类", "茄类", "辣椒类", "食用菌"] sales = [5264432.999, 5150360.943, 5140073.101, 5139145.269, 5139061.59, 5139054.043] prices = [4.241353002, 4.149449495, 4.141160972, 4.140413454, 4.140346037, 4.140339957] # 绘制折线图和柱形图 fig, ax1 = plt.subplots(figsize=(10, 6)) # 绘制折线图 ax1.plot(categories, sales, marker='o', label='销量') for i, sale in enumerate(sales): ax1.annotate(f"{sale/1000:.2f}千吨", (categories[i], sale), xytext=(10,10), textcoords='offset points', ha='center', va='bottom') ax1.set_xlabel('分类名称') ax1.set_ylabel('销量(千吨)') ax1.set_title('不同分类的销量与售价') ax1.grid(True, linestyle='--', alpha=0.5) ax1.legend(loc='upper left') # 创建柱形图 ax2 = ax1.twinx() ax2.bar(categories, prices, alpha=0.5, label='售价') for i, price in enumerate(prices): ax2.annotate(f"{price:.2f}元/千克", (categories[i], price), xytext=(10,-10), textcoords='offset points', ha='center', va='top') ax2.set_ylabel('售价(元/千克)') ax2.grid(False) ax2.legend(loc='upper right') plt.subplots_adjust(bottom=0.2) plt.show() |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录6 |
| 问题三_补货策略.py |
| import pandas as pd import statsmodels.api as sm from statsmodels.tsa.arima.model import ARIMA # 读取数据 item_data = pd.read_excel("成本加成率.xlsx") # 按品类进行分组 grouped_data = item_data.groupby('单品编码') # 创建空的结果DataFrame results_df = pd.DataFrame(columns=['单品编码', '日补货总量', '定价策略']) # 遍历每个品类 for group, data in grouped_data: # 创建ARIMA模型 model = ARIMA(data['销量(千克)'], order=(1, 1, 1)) # 拟合模型 model_fit = model.fit() # 预测未来一周的销售数量 forecast = model_fit.forecast(steps=7) # 计算日补货总量 daily_replenishment = forecast.sum() # 计算定价策略 pricing_strategy = data['成本加成率'].mean() # 这里可以根据需要进行定价策略的计算 # 添加结果到DataFrame results_df = pd.concat([results_df, pd.DataFrame({'单品编码': [group], '日补货总量': [daily_replenishment], '定价策略': [pricing_strategy]})], ignore_index=True) # 转换"单品编码"列为字符串格式 results_df['单品编码'] = results_df['单品编码'].astype(str) # 打印结果 print(results_df) # 导出结果到Excel results_df.to_excel("补货计划.xlsx", index=False, engine="openpyxl") |

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 附录7 |
| 爬取蔬菜.py |
| import json import requests import threading import pandas as pd # 页数 page = 1 # 商品总列表 count = list() # json列表 jsons = list() # 解析网页函数 def url_parse(page): # 请求地址 url = 'http://www.xinfadi.com.cn/getPriceData.html' headers = { "Accept": "*/*", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Cache-Control": "no-cache", "Connection": "keep-alive", "Content-Length": "89", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Host": "www.xinfadi.com.cn", "Origin": "http://www.xinfadi.com.cn", "Pragma": "no-cache", "Referer": "http://www.xinfadi.com.cn/priceDetail.html", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36", "X-Requested-With": "XMLHttpRequest", } data = { "limit": "20", "current": page, "pubDateStartTime": "", "pubDateEndTime": "", "prodPcatid": "1186", # 商品类id "prodCatid": "", "prodName": "", } response = requests.post(url=url, headers=headers, data=data).text # 获取商品信息 response = json.loads(response)['list'] # 生成线程锁对象 lock = threading.RLock() # 上锁 lock.acquire() # 添加到json列表中 jsons.append(response) # 解锁 lock.release() # 解析json函数 def json_parse(product): lock = threading.RLock() lock.acquire() dic = {'品名': product['prodName'], "最低价": product['lowPrice'], '最高价': product['highPrice'], '平均价': product['avgPrice'], '规格': product['specInfo'], '产地': product['place'], '单位': product['unitInfo'], '发布日期': product['pubDate']} print(dic) # 将商品信息添加到商品总列表中 count.append(dic) lock.release() def run(): # 多进程解析网页 for i in range(1, 50): x = threading.Thread(target=url_parse, args=(i,)) x.start() x.join() # 多进程解析json for i in jsons: for product in i: y = threading.Thread(target=json_parse, args=(product,)) y.start() y.join() # 生成excel data = pd.DataFrame(count) data.to_excel('蔬菜.xlsx', index=None) if name == 'main': run() |

相关推荐
好兄弟给我起把狙4 分钟前
[Golang] Select
开发语言·后端·golang
Echo_Lee06 分钟前
C#与Python脚本使用共享内存通信
开发语言·python·c#
python之行16 分钟前
python 环境问题
开发语言·python
小林熬夜学编程17 分钟前
C++第五十一弹---IO流实战:高效文件读写与格式化输出
c语言·开发语言·c++·算法
不是编程家30 分钟前
C++ 第三讲:内存管理
java·开发语言·c++
hakesashou32 分钟前
python怎么写csv文件
开发语言·python
欧阳枫落36 分钟前
pip 换源
开发语言·python·pip
xuehaisj1 小时前
论文内容分类与检测系统源码分享
人工智能·分类·数据挖掘
学步_技术1 小时前
Python编码系列—Python组合模式:构建灵活的对象组合
开发语言·python·组合模式
diaobusi-882 小时前
Python数据分析 Pandas库-初步认识
信息可视化