基于LightGBM的线下商品销量预测

一.实验目的:

  本实验的主要目标是使用机器学习方法预测线下商品的每周销量。通过对历史销售数据进行分析和建模,我们希望能够准确预测未来的销量,以帮助库存管理和销售策略优化。

二.数据说明:

实验数据由训练集和测试集组成,将每周日期进行脱敏,用0-33进行标识,即0为数据集第一周,33为数据集最后一周,其中33为测试集数据。数据集由字段shop_id(店铺id)、 item_id(商品id)、week(周标识)、item_price(商品价格)、item_category_id(商品品类id)、weekly_sales(周销量)组成。

三.实验步骤:

1.数据准备:

从 train.csv 和 test.csv 文件中读取训练和测试数据。Train文件中共有6个特征,552289条数据;test文件中共有五个特征,16737条数据

2.数据预处理:       

在数据预处理时,需要确保将 week 列的数据类型转换为整数,以保证数据的一致性。同时,使用 LabelEncoder 将 shop_id、item_id 和item_category_id 这三个分类变量转换为数值,以便模型能够处理这些数据。

1. 特征工程

在此过程中,需要创建滞后特征来捕捉时间序列数据中的时序依赖性。具体来说,是为 weekly_sales 创建1到4周的滞后值,这样可以帮助模型更好地理解销售数据的时间序列模式。

2.缺失值处理

在创建这些滞后特征的过程中,可能会引入一些缺失值(NaN)。这些缺失值通常出现在时间序列的开头部分,因为在这些位置无法获取足够的历史数据来计算滞后值。如果不处理这些缺失值,模型在训练过程中可能会遇到数据完整性问题,导致模型无法正常处理含有缺失值的数据,从而影响模型的训练效果和预测性能。因此,必须对这些因滞后特征而引入的缺失值进行处理,以确保数据集的完整性和模型训练的顺利进行。为了解决这个问题,我使用了中位数填充缺失值,保持数据的一致性和完整性。

为计算各特征和目标变量之间的相关性,并了解特征之间及特征与目标变量之间的关系,我还创建了热力图可视化相关性矩阵,如下图所示:

由热力图可知,shop_id与销售量的关系强度为1.0,表示这是一个非常强的正相关变量。item_id与销售量的关系强度为0.8,表示这是一个较强的正相关变量。item_category_id与销售量的关系强度为0.6,表示这是一个中等强度的正相关变量。item_price与销售量的关系强度为0.4,表示这是一个较弱的正相关变量。weekly_sales_lag_1和 weekly_sales_lag_2与销售量的关系强度相等,均为0.2,表示这是较弱的正相关变量。weekly_sales_lag_3和weekly_sales_lag_4与销售量的关系强度相等,均为0.0,表示没有相关性。weekly_sales是分析的因变量,具体关系强度未给出。

店铺ID和商品ID对销售量的影响最大,而商品类别ID和商品价格对销售量的影响较小。销售量与自身过去几周的表现有一定的相关性,但随着时间的延长,这种相关性逐渐减弱,直到第四周几乎没有相关性。这也与实验时滞后特征只取到第四周有关。

3.划分数据集

在预处理过程中,为了确保模型能够有效地训练和评估其性能,需要将数据集划分为训练集和验证集。首先,从 train_data 数据集中提取特征和目标变量。X 包含特征,y 包含目标变量 weekly_sales。接下来,使用 train_test_split 函数将数据集划分为训练集和验证集。同时,将 test_size 参数设为 0.1,表示使用 10% 的数据作为验证集,剩余 90% 的数据作为训练集。此外,还需确保每次划分的数据集保持一致,便于结果的重现。通过这种方式,可以确保模型在训练集上进行训练时,能够学习到数据的规律,并在验证集上进行测试时,评估其泛化能力。训练集用于模型训练和参数调优,而验证集用于模型性能评估,确保模型在实际应用中的稳定性和准确性。

3.模型选择:

在本次实验中,LightGBM 展现了多个显著优势。首先,它能够很好地处理包含滞后特征的时间序列数据,例如 `weekly_sales_lag_1` 到`weekly_sales_lag_4`,这些滞后特征捕捉到了销售数据的时间依赖性,有助于提高模型对未来销量变化的预测能力。其次,LightGBM 在处理大规模数据时非常高效,能够快速训练模型并进行预测,适合处理大量商品和多维度特征数据,支持实时或近实时的销售预测需求。此外,LightGBM 提供了内置的特征重要性评估功能,可以帮助分析哪些特征对销售预测最为重要,通过分析特征重要性,能够深入了解各个特征对销售量的贡献程度,从而优化特征选择和模型调优。

4.交叉验证:

使用5折交叉验证评估模型性能,计算出了此模型的均方误差(MSE),均方根误差(RMSE)以及平均绝对误差(MAE)。

使用公式:

其中n是样品数量,yi是实际值,yi是预测值,最终得到的模型性能结果为:Validation MSE: 2.3623815881098698 RMSE: 1.5370040950205273 MAE: 0.6903595470937574从 RMSE 和 MAE 的角度来看,模型在验证集上的表现相对较好。RMSE 和 MAE 的值都较小,表明模型的预测误差相对较小,即模型在验证数据上的预测相对准确。

5.训练模型和模型评估

在训练集上训练LightGBM回归模型并在验证集上进行预测,计算验证集上的均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE),并绘制散点图比较实际值和预测值。

散点图如下:

这张实际销售量与预测销售量之间的对比视图,其中大部分数据点集中在对角线附近,显示出预测模型具有较高的准确性。然而,尽管多数预测接近实际值,仍有一些点偏离对角线,这表明在某些情况下模型存在偏差。这些偏差可能是由于模型未能完全捕捉到影响销售量的所有因素,或者是由于外部因素导致的不可预测的变化。整体而言,模型的预测能力是可靠的,但为了进一步提高预测精度,可能需要对模型进行进一步的优化和调整。

在本次实验中,我还绘制了一个预测误差的直方图,以评估预测模型的准确性。该直方图通过计算实际销售值与预测销售值之间的差异,展示了误差分布的情况

这张直方图展示了预测误差的分布情况,其中误差范围从-50到150,频率从0到50000。图中的峰值集中在0附近,表明大多数预测误差较小,模型的预测与实际值接近。频率随着误差的增大而减少,说明较大的误差较为罕见。整体上,该直方图显示了模型的预测准确性较高。

6预测测试集和提交结果

在这个过程中首先初始化了测试集的滞后特征,包括 weekly_sales_lag_1 到 weekly_sales_lag_4,将它们的值设置为0。接着,从训练集的最后四周数据中获取了特征和目标变量,用来初始化测试集的滞后特征。然后,通过循环遍历测试集的每一行数据,提取当前行的特征。使用训练好的模型进行预测,将预测结果存储在 predicted_weekly_sales 列中。接着更新滞后特征,将当前预测值更新为下一行的 weekly_sales_lag_1,同时将之前的滞后特征向后移动一位。最后,步骤10将预测结果以指定的格式存储到 'submission.csv' 文件中,并输出提示信息表示预测完成。

四.实验总结

本次实验使用 LightGBM 进行线下商品销售预测,展示了其高效处理大规模数据和捕捉时间序列数据依赖性的优势。通过特征工程和模型训练,达到了较好的预测效果,这体现在滞后特征的引入和验证集上的性能指标两个方面。引入 `weekly_sales_lag_1` 到 `weekly_sales_lag_4` 等滞后特征,成功捕捉到销售数据的时间依赖性,使得模型能够更好地预测未来的销售趋势,提升了对时间序列数据的拟合能力。验证集上的 MSE 为 2.362 和 RMSE 为 1.537,表明模型在验证集上的平均预测误差平方和预测误差的标准差都较低,显示出模型能够较好地拟合数据并提供较准确的预测。

尽管本次实验已经取得了较好的预测效果,但仍然存在一些不足之处。首先,参数调优方面可以更深入,通过使用 Grid Search 或 Random Search 进一步优化 LightGBM 模型的超参数配置,以提升模型性能。其次,特征工程方面可以引入更多的滞后特征和滚动统计特征,如更长时间跨度的滞后特征和移动平均值、移动标准差等,以捕捉更多的时间序列趋势和波动。此外,数据处理方面需要更仔细地处理异常值,减少其对模型训练的负面影响。最后,可以采用 K 折交叉验证代替简单的训练集和验证集划分,以获得更加稳健的性能评估,减少模型对数据分割的敏感性。通过这些改进措施,可以进一步提高模型的预测准确性和稳健性,使其在实际应用中表现得更加出色。Z zM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值