LightGBM:电商广告点击率预估利器 2024-06-29 作者 C3P00 引言 在电商平台中,广告点击率 (CTR) 预估对于广告投放效果至关重要。准确预测用户点击广告的概率,可以帮助广告主优化广告投放策略,提升广告收益。LightGBM 作为一种高效的梯度提升决策树算法,在 CTR 预估任务中表现出色。本篇文章将以 lightgbm_tinycriteo.ipynb 示例为例,介绍如何使用 LightGBM 训练 CTR 预估模型,并探讨模型优化策略。 LightGBM 简介 LightGBM 是微软开源的一种梯度提升框架,它使用基于树的学习算法,并针对分布式计算和高效率进行了优化。LightGBM 具有以下优势: 训练速度快,效率高。 内存占用低。 预测精度高。 支持并行计算和 GPU 加速。 能够处理大规模数据。 数据准备 本示例使用 Criteo 数据集,该数据集是 CTR 预估领域的经典基准数据集。原始数据集包含 39 个特征,其中 13 个为数值特征 (I1-I13),26 个为类别特征 (C1-C26)。由于原始数据集规模较大,本示例使用了一个包含约 10 万个样本的子集。 # 定义特征列和标签列 nume_cols = ["I" + str(i) for i in range(1, 14)] cate_cols = ["C" + str(i) for i in range(1, 27)] label_col = "Label" # 加载数据集 header = [label_col] + nume_cols + cate_cols with TemporaryDirectory() as tmp: all_data = criteo.load_pandas_df(size=SIZE, local_cache_path=tmp, header=header) 将数据集按照时间顺序划分为训练集、验证集和测试集,划分比例为 8:1:1。 # 划分数据集 length = len(all_data) train_data = all_data.loc[:0.8*length-1] valid_data = all_data.loc[0.8*length:0.9*length-1] test_data = all_data.loc[0.9*length:] 模型训练与评估 基础用法 对于 LightGBM 的基础用法,只需对类别特征进行简单的顺序编码即可。 # 顺序编码 ord_encoder = ce.ordinal.OrdinalEncoder(cols=cate_cols) # 编码数据 train_x, train_y = encode_csv(train_data, ord_encoder, label_col) valid_x, valid_y = encode_csv(valid_data, ord_encoder, label_col, "transform") test_x, test_y = encode_csv(test_data, ord_encoder, label_col, "transform") 创建 LightGBM 数据集,并设置模型参数。 # 创建 LightGBM 数据集 lgb_train = lgb.Dataset(train_x, train_y.reshape(-1), params=params, categorical_feature=cate_cols) lgb_valid = lgb.Dataset(valid_x, valid_y.reshape(-1), reference=lgb_train, categorical_feature=cate_cols) lgb_test = lgb.Dataset(test_x, test_y.reshape(-1), reference=lgb_train, categorical_feature=cate_cols) # 训练模型 lgb_model = lgb.train(params, lgb_train, num_boost_round=NUM_OF_TREES, valid_sets=lgb_valid, categorical_feature=cate_cols, callbacks=[lgb.early_stopping(EARLY_STOPPING_ROUNDS)]) # 预测测试集结果 test_preds = lgb_model.predict(test_x) # 计算 AUC 和 Logloss auc = roc_auc_score(np.asarray(test_y.reshape(-1)), np.asarray(test_preds)) logloss = log_loss(np.asarray(test_y.reshape(-1)), np.asarray(test_preds)) print({"auc": auc, "logloss": logloss}) 优化用法 为了进一步提升模型性能,可以对类别特征进行标签编码和二进制编码,并将数值特征的缺失值填充为均值。 # 标签编码和二进制编码 num_encoder = lgb_utils.NumEncoder(cate_cols, nume_cols, label_col) train_x, train_y = num_encoder.fit_transform(train_data) valid_x, valid_y = num_encoder.transform(valid_data) test_x, test_y = num_encoder.transform(test_data) # 训练模型 # ... # 预测测试集结果 test_preds = lgb_model.predict(test_x) # 计算 AUC 和 Logloss auc = roc_auc_score(np.asarray(test_y.reshape(-1)), np.asarray(test_preds)) logloss = log_loss(np.asarray(test_y.reshape(-1)), np.asarray(test_preds)) print({"auc": auc, "logloss": logloss}) 模型保存与加载 训练完成后,可以使用 save_model 方法保存模型,并使用 Booster 类加载模型。 # 保存模型 with TemporaryDirectory() as tmp: save_file = os.path.join(tmp, "finished.model") lgb_model.save_model(save_file) loaded_model = lgb.Booster(model_file=save_file) # 使用加载的模型进行预测 test_preds = loaded_model.predict(test_x) 总结 LightGBM 是一种高效的梯度提升决策树算法,在 CTR 预估任务中表现出色。通过对类别特征进行编码和缺失值填充等优化策略,可以进一步提升模型性能。
引言
在电商平台中,广告点击率 (CTR) 预估对于广告投放效果至关重要。准确预测用户点击广告的概率,可以帮助广告主优化广告投放策略,提升广告收益。LightGBM 作为一种高效的梯度提升决策树算法,在 CTR 预估任务中表现出色。本篇文章将以
lightgbm_tinycriteo.ipynb
示例为例,介绍如何使用 LightGBM 训练 CTR 预估模型,并探讨模型优化策略。LightGBM 简介
LightGBM 是微软开源的一种梯度提升框架,它使用基于树的学习算法,并针对分布式计算和高效率进行了优化。LightGBM 具有以下优势:
数据准备
本示例使用 Criteo 数据集,该数据集是 CTR 预估领域的经典基准数据集。原始数据集包含 39 个特征,其中 13 个为数值特征 (I1-I13),26 个为类别特征 (C1-C26)。由于原始数据集规模较大,本示例使用了一个包含约 10 万个样本的子集。
将数据集按照时间顺序划分为训练集、验证集和测试集,划分比例为 8:1:1。
模型训练与评估
基础用法
对于 LightGBM 的基础用法,只需对类别特征进行简单的顺序编码即可。
创建 LightGBM 数据集,并设置模型参数。
优化用法
为了进一步提升模型性能,可以对类别特征进行标签编码和二进制编码,并将数值特征的缺失值填充为均值。
模型保存与加载
训练完成后,可以使用
save_model
方法保存模型,并使用Booster
类加载模型。总结
LightGBM 是一种高效的梯度提升决策树算法,在 CTR 预估任务中表现出色。通过对类别特征进行编码和缺失值填充等优化策略,可以进一步提升模型性能。