当前位置:   article > 正文

2020年MathorCup数学建模挑战赛D题新零售目标产品的精准需求预测解题思路与示例代码_新产品的开发问题数学建模

新产品的开发问题数学建模

一 题目

随着我国消费市场的不断发展,市场上的消费模式已经逐步由“以物为主”转变为“以客为主”。在新零售行业,性价比不再是顾客衡量是否购买物品的唯一标准,人们的需求也不仅仅是单一的追求实用性,而是更多的考虑时尚性,把注意力放在“个性化、时尚、美观”等方面。在这类特殊需求的推动下,新零售企业的生产模式逐步向多品种、小批量迈进,这让商场内零售店铺里的饰品和玩具等种类变得更加琳琅满目,同时也给零售行业的库存管理增加了很大的难度。如何根据层级复杂,品类繁多的历史销售数据,以区域层级,小类层级乃至门店 skc(单款单色)层级给出精准的需求预测,是当前大多数新零售企业需要重点关注并思考的问题。你们的团队将从 3 个方向为新零售企业解决“精准需求预测”问题贡献一份力量。请基于附件的数据,思考并解决以下 4 个问题:
  问题 1:试分析 2018 年国庆节,双十一,双十二和元旦这四个节假日内各种相关因素对目标 skc 的销售量的影响,可考虑产品销售特征,库存信息,节假日折扣等因素。其中,目标 skc 为销售时间处于 2018 年 7 月 1日至 2018 年 10 月 1 日内且累计销售额排名前 50 的 skc。
  问题 2:试结合上述分析结果,预测给定区域内目标小类在 2019 年 10月 1 日后 3 个月中每个月的销售量,给出每个月预测值的 MAPE。其中,目标小类为历史销售时间处于 2019 年 6 月 1 日至 2019 年 10 月 1 日内且累计销售额排名前 10 的小类。
  问题 3:为了满足企业更加精准的营销需求,试着建立相关数学模型,在考虑小类预测结果的同时,预测目标小类内所有 skc 在 2019 年 10 月 1日后 12 周内每周的周销量,并给出每周预测值的 MAPE(可以考虑 skc 销售曲线与小类销售曲线之间的差异)。
  问题 4:请给企业写一份推荐信,向企业推荐你的预测结果和方法,并说明你们的方案的合理性以及后续的优化方向。
 

二 解题思路与示例代码

问题一

  1. 数据准备

    • 导入并整理销售流水数据 (sale_info.csv)、产品信息表 (prod_info.csv)、库存数据 (inv_info.csv) 和节假日信息表 (holidays_info.csv)。
  2. 筛选目标 skc

    • 从销售流水数据中选择销售时间在2018年7月1日至2018年10月1日内,且累计销售额排名前50的 skc。确保清理和筛选数据以去除异常值和确保数据质量。
  3. 特征工程

    • 从产品信息表、库存信息表中提取与目标 skc 相关的特征,如产品属性、库存情况等。
    • 根据节假日信息表,标识出国庆节、双十一、双十二、元旦等日期,以便后续分析。
  4. 多元回归分析

    • 构建多元线性回归模型,以目标 skc 的销售量作为因变量,各种因素(产品属性、库存情况、折扣等)作为自变量。
    • 使用统计软件(如SPSS或R)进行多元回归分析,得出各因素对销售量的影响程度,同时检验模型的显著性和拟合度。
    • 检查自变量之间的多重共线性,如果存在共线性问题,需要处理或选择适当的自变量。
  5. 层次分析法

    • 使用层次分析法来评估各个因素的相对重要性。这需要将因素分级,然后为每个因素分配权重。
    • 制定判断矩阵,根据专业知识和数据,对不同因素之间的相对权重进行比较和评估。
    • 运用层次分析法的计算步骤,得出不同因素对销售量的相对影响程度。
  6. 结果分析和解释

    • 将多元回归分析和层次分析的结果结合,以解释不同因素对目标 skc 销售量的影响。可能需要绘制图表或表格来可视化结果。
    • 根据分析结果,总结不同因素的重要性顺序,例如,节假日折扣、标签价格、库存信息、小类编号等的影响程度。

问题一示例代码
 

  1. import pandas as pd
  2. import numpy as np
  3. import statsmodels.api as sm
  4. from pyanp import AHP
  5. # 加载销售数据
  6. sale_data = pd.read_csv('sale_info.csv')
  7. # 筛选目标 skc(根据销售时间和累计销售额排名)
  8. target_skc = sale_data[(sale_data['销售时间'] >= '2018-07-01') & (sale_data['销售时间'] <= '2018-10-01')]
  9. target_skc = target_skc.sort_values(by='累计销售额', ascending=False).head(50)
  10. # 加载产品信息数据和库存信息数据
  11. prod_info = pd.read_csv('prod_info.csv')
  12. inv_info = pd.read_csv('inv_info.csv')
  13. # 合并数据集
  14. merged_data = target_skc.merge(prod_info, on='产品编号').merge(inv_info, on='产品编号')
  15. # 构建多元回归模型
  16. X = merged_data[['产品属性1', '产品属性2', '库存信息', '折扣信息']]
  17. X = sm.add_constant(X) # 添加常数项
  18. y = merged_data['销售量']
  19. model = sm.OLS(y, X).fit()
  20. # 打印回归结果
  21. print(model.summary())
  22. # 层次分析法(AHP)来评估不同因素的相对重要性
  23. ahp = AHP()
  24. ahp.set_matrix([
  25. [1, 2, 3, 4], # 产品属性1对其他因素的相对重要性
  26. [0.5, 1, 2, 3], # 产品属性2对其他因素的相对重要性
  27. [0.33, 0.5, 1, 2], # 库存信息对其他因素的相对重要性
  28. [0.25, 0.33, 0.5, 1] # 折扣信息对其他因素的相对重要性
  29. ])
  30. # 计算权重
  31. weights = ahp.get_eigen()
  32. # 打印权重
  33. print("各因素的相对重要性权重:", weights)

问题二

  1. 数据准备

    • 导入并整理历史销售数据,以及可能的特征数据,如节假日信息和促销活动信息。
    • 从销售数据中选择目标小类,其历史销售时间在2019年6月1日至2019年10月1日内,且累计销售额排名前10的小类。
  2. GM(1,1)灰色预测模型

    • 使用GM(1,1)模型进行销售量的预测。这是一个常用的灰色预测模型,适用于小样本数据。
    • 在建模时,根据历史销售数据,计算累计量,并将其作为模型的输入。
    • 使用Python或其他适当的工具实施GM(1,1)模型。
  3. 预测

    • 利用已建立的GM(1,1)模型,预测目标小类在2019年10月1日后的3个月中每个月的销售量。这将生成一个时间序列的预测结果。
  4. MAPE计算

    • 计算每个月的MAPE,以评估模型的准确性。MAPE可以通过以下公式计算:

      MAPE = (Σ(|实际销售量 - 预测销售量|) / Σ(实际销售量)) * 100%

    • 对于每个月,使用实际销售数据和预测销售数据进行计算。

  5. 结果分析和报告

    • 分析每月的MAPE值,评估模型的性能。
    • 在报告中,详细解释模型的预测结果,包括每个月的销售量和对应的MAPE值。
  6. 敏感性分析

    • 考虑进行敏感性分析,以了解模型的稳健性。可以尝试不同的参数设置或引入随机性,以评估预测结果的不确定性。

问题二示例代码

  1. import numpy as np
  2. # 历史销售数据
  3. sales_data = [10, 12, 15, 20, 22]
  4. # 累积量计算
  5. cumulative_sales = np.cumsum(sales_data)
  6. # 灰色预测模型 GM(1,1)
  7. def gray_forecast(data):
  8. n = len(data)
  9. # 构建累积生成序列
  10. cumulative_sequence = np.zeros(n)
  11. for i in range(1, n):
  12. cumulative_sequence[i] = 0.5 * (cumulative_sales[i] + cumulative_sales[i - 1])
  13. # 构建累积生成数据
  14. data_predict = np.zeros(n)
  15. for i in range(1, n):
  16. data_predict[i] = cumulative_sequence[i] - cumulative_sequence[i - 1]
  17. # 计算模型参数
  18. X = -cumulative_sequence[:-1].reshape(-1, 1)
  19. Y = data_predict[1:]
  20. B = np.dot(np.linalg.inv(np.dot(X.T, X)), np.dot(X.T, Y))
  21. a, b = B[0], B[1]
  22. # 预测未来销售量
  23. predicted_sales = [(data[0] - b/a) * (1 - np.exp(a)) * np.exp(-a*(n+i)) for i in range(3)]
  24. return predicted_sales
  25. # 预测未来3个月的销售量
  26. forecasted_sales = gray_forecast(sales_data)
  27. # 打印预测结果
  28. for i, sales in enumerate(forecasted_sales):
  29. print(f"预测第 {i+1} 个月销售量: {sales}")

问题三

  1. 数据准备

    • 导入并整理历史销售数据,以及可能的特征数据,如节假日信息、促销活动信息等。
    • 选择目标小类,其历史销售时间在2019年10月1日后12周内。
  2. BP神经网络模型

    • 建立基于双隐含层的BP神经网络模型。
    • 定义神经网络的结构,包括输入层、两个隐含层和输出层的节点数,选择适当的激活函数和学习率。
    • 使用Python中的深度学习框架(如TensorFlow、Keras、PyTorch)来实施BP神经网络。
  3. 数据预处理

    • 对历史销售数据进行归一化,确保输入数据在相似的尺度上。
    • 将数据划分为训练集和测试集,通常使用交叉验证来评估模型性能。
  4. 模型训练

    • 使用训练集数据来训练BP神经网络模型。
    • 设置合适的训练轮次(epochs)和批次大小(batch size)。
    • 监控训练过程中的性能指标,如均方误差(MSE)。
  5. 模型预测

    • 使用已建立的BP神经网络模型,预测目标小类在2019年10月1日后的12周内每周的销售量。
  6. MAPE计算

    • 计算每周的MAPE,以评估模型的准确性。MAPE可以通过以下公式计算:

      MAPE = (Σ(|实际销售量 - 预测销售量|) / Σ(实际销售量)) * 100%

    • 对于每周,使用实际销售数据和模型预测数据进行计算。

  7. 结果分析和报告

    • 分析每周的MAPE值,评估模型的性能。
    • 在报告中,详细解释模型的预测结果,包括每周的销售量和对应的MAPE值。
  8. 不确定性分析

    • 考虑对预测结果的不确定性进行敏感性分析,以了解模型的稳健性。这可以通过在模型中引入随机性或调整参数来实现。

问题三示例代码

  1. import numpy as np
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.preprocessing import MinMaxScaler
  5. from tensorflow import keras
  6. from tensorflow.keras import layers
  7. # 加载历史销售数据
  8. sales_data = pd.read_csv('sales_data.csv')
  9. # 选择目标小类,其历史销售时间在2019年10月1日后12周内
  10. target_category = '目标小类名称'
  11. target_data = sales_data[sales_data['小类名称'] == target_category]
  12. # 提取特征和目标
  13. X = target_data[['特征1', '特征2', '特征3']]
  14. y = target_data['销售量']
  15. # 数据归一化
  16. scaler = MinMaxScaler()
  17. X = scaler.fit_transform(X)
  18. y = scaler.fit_transform(y.values.reshape(-1, 1))
  19. # 划分训练集和测试集
  20. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  21. # 构建BP神经网络模型
  22. model = keras.Sequential()
  23. model.add(layers.Input(shape=(X_train.shape[1],)))
  24. model.add(layers.Dense(64, activation='relu'))
  25. model.add(layers.Dense(32, activation='relu'))
  26. model.add(layers.Dense(1, activation='linear'))
  27. # 编译模型
  28. model.compile(optimizer='adam', loss='mean_squared_error')
  29. # 训练模型
  30. model.fit(X_train, y_train, epochs=100, batch_size=32, validation_data=(X_test, y_test))
  31. # 使用模型进行销售量预测
  32. predicted_sales = model.predict(X_test)
  33. # 计算每周的MAPE
  34. mape = np.mean(np.abs(y_test - predicted_sales) / y_test) * 100
  35. print(f"每周的MAPE: {mape:.2f}%")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/660741
推荐阅读
相关标签
  

闽ICP备14008679号