gbdt+lr广告点击率ctr
时间: 2025-01-07 16:55:21 浏览: 5
### 使用GBDT与LR组合模型进行广告点击率CTR预估
#### GBDT+LR模型概述
GBDT(Gradient Boosting Decision Tree)和逻辑回归(Logistic Regression, LR)的组合是一种广泛应用于在线广告领域中的方法,尤其适合处理大规模稀疏数据。该模型通过先利用GBDT提取非线性特征并将其转换成低维稠密向量表示,再送入LR做最终分类决策。
#### 数据准备阶段
对于原始输入样本`data`及其标签`target`,首先按照一定比例划分训练集与验证集:
```python
from sklearn.model_selection import train_test_split
train = data[:train_len]
test = data[train_len:]
# 划分 LR 训练集、验证集
x_train, x_val, y_train, y_val = train_test_split(
train,
target,
test_size=0.3,
random_state=2018
)
```
此部分操作确保了后续建模过程中有足够的独立样本来评估模型泛化能力[^3]。
#### 特征工程——基于GBDT构建新特征空间
GBDT能够自动发现复杂模式下的交互作用,并将这些关系编码到叶结点索引中形成新的特征表达形式。具体来说,在完成一轮完整的梯度提升过程之后,每棵树上的路径选择实际上反映了不同变量之间的关联程度以及它们共同影响目标的概率分布规律。因此,可以收集所有实例落在各个子树末端的位置作为额外属性加入原表结构里去增强原有信息含量。
```python
import lightgbm as lgb
lgb_params = {
'objective': 'binary',
'boosting_type': 'gbdt',
}
dtrain = lgb.Dataset(x_train, label=y_train)
model_gbdt = lgb.train(lgb_params, dtrain)
def gbdt_transform(model, X):
"""Transform dataset using trained LightGBM model."""
leaves = model.predict(X, pred_leaf=True).astype(int)
return pd.DataFrame(leaves)
X_train_leaves = gbdt_transform(model_gbdt, x_train)
X_val_leaves = gbdt_transform(model_gbdt, x_val)
```
上述代码片段展示了如何使用LightGBM库实现GBDT算法,并定义了一个辅助函数用于获取各条记录对应的叶子编号集合。这一步骤有效地降低了原始特征空间维度的同时保留甚至增强了区分度较高的局部区域特性[^4]。
#### 构建广义线性模型——LR层面上的学习
有了经过初步加工后的高质量中间产物后,下一步便是引入简单的线性判别器来进行二元响应概率估计任务。由于此时已经获得了较为理想的数值型描述符序列,所以可以直接调用标准API接口快速搭建起相应的统计学习框架而无需担心过多超参数调整带来的困扰。
```python
from sklearn.linear_model import LogisticRegressionCV
lr_clf = LogisticRegressionCV(cv=5, solver='liblinear')
lr_clf.fit(pd.concat([pd.get_dummies(X_train_leaves), x_train], axis=1), y_train)
y_pred_proba = lr_clf.predict_proba(pd.concat([pd.get_dummies(X_val_leaves), x_val], axis=1))[:, 1]
print(f'Validation AUC score: {roc_auc_score(y_val, y_pred_proba):.4f}')
```
这里采用了交叉验证策略寻找最优正则项系数λ值以防止过拟合现象发生;同时借助哑编码技术把离散类别映射至实数域内便于参与运算。最后输出验证集中预测得分情况供进一步分析参考[^1]。
阅读全文