一、前置知识
GBDT:GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。
LightGBM:LightGBM(Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点。LightGBM 框架中还包括随机森林和逻辑回归等模型。通常应用于二分类、多分类和排序等场景。
二、操作流程
1.导入模块
2.探索性数据分析
其中里面有不同的type类型对应的柱状图和id为00037f9cf的按dt为序列的折线图,其结果如下
3.特征工程
主要构建历史平移特征和窗口统计特征如下
合并训练数据和测试数据,并进行排序
-
合并:使用
pd.concat()
函数将测试集(test
)和训练集(train
)沿着行方向(axis=0
)合并成一个新的DataFrame(data
),同时忽略原有的索引(ignore_index=True
)以生成一个新的连续索引。 -
排序:对合并后的数据(
data
)按照id
和dt
两列进行降序排序(ascending=False
)。这里假设id
是唯一的标识符,而dt
可能是时间戳或某种可以表示顺序的列。排序后,使用reset_index(drop=True)
重置索引,使索引再次成为连续的整数。历史平移
- 接下来,通过一个循环,对每个
id
组内的target
列进行历史平移操作。具体来说,对于每个id
,创建一个新的列last{i}_target
(其中{i}
是循环变量,从10到29),该列的值是原target
列值向前移动i
个单位的结果。这是通过groupby(['id'])['target'].shift(i)
实现的,其中shift(i)
函数将值向前移动i
个位置。窗口统计
- 然后,计算最近三个历史
target
值的平均值,并将这个平均值存储在新的列win3_mean_target
中。这是通过将last10_target
、last11_target
和last12_target
列的值相加后除以3来实现的。 -
进行数据切分
- 将合并并处理过的数据(
data
)根据target
列的值是否非空切分为训练集(train
)和测试集(test
)。train
包含所有target
列非空(即已知目标值)的行,而test
包含所有target
列为空(即未知目标值,需要预测)的行。切分后,使用reset_index(drop=True)
重置索引。 -
确定输入特征
- 最后,通过列表推导式确定训练集(
train
)的输入特征列名。这些列名是所有不在['id', 'target']
列表中的列名,因为id
通常用作标识符而不是输入特征,而target
是我们要预测的目标值。这些列名将用于后续的模型训练过程中,作为模型的输入特征。
4.模型训练和测试集预测
本次是采用Lightgbm的模型
-
这里选择原始给出训练数据集中dt为30之后的数据作为训练数据,之前的数据作为验证数据,
-
这样保证了数据不存在穿越问题
- 数据切分:
- 函数首先根据
dt
列的值将训练集train_df
切分为训练集 (trn_x
,trn_y
) 和验证集 (val_x
,val_y
)。这里假设dt
列的值可以表示时间顺序,并且使用dt>=31
的数据作为训练集,dt<=30
的数据作为验证集。
- 函数首先根据
- 构建模型输入数据:
- 使用 LightGBM 的
Dataset
方法将训练集和验证集转换为 LightGBM 可以接受的格式。
- 使用 LightGBM 的
- 设置 LightGBM 参数:
- 定义了一组 LightGBM 的训练参数,包括
boosting_type
、objective
、metric
等,用于控制模型的行为和性能。 - 训练模型:
- 使用
lgb.train
方法训练模型,其中train_matrix
和valid_matrix
作为训练集和验证集,50000
是训练轮次(可能需要根据实际情况调整以避免过拟合),valid_sets
用于在训练过程中监控验证集的性能,early_stopping_rounds
设置了早停轮次以避免过拟合。
- 使用
- 预测和评估:
- 在验证集和测试集上进行预测,并计算验证集的均方误差(MSE)作为离线分数评估。
- 返回预测结果:
-
返回验证集和测试集的预测结果。 个人感悟:1.LightGBM 的参数需要根据具体任务和数据进行调整以达到最佳性能 2.通过设置
early_stopping_rounds
和调整其他参数来防止过拟合
-
- 定义了一组 LightGBM 的训练参数,包括