To DN:
1.模型构建
1.1 算法选择
常用分类算法:逻辑回归、xgboost和lightgbm
1.2 损失函数选择
对于回归问题常选择MSE和MAE,本节重点讲解分类问题的损失函数 ● 二分类问题 log损失函数(log-loss)结果能非常好地表征概率分布。因此在很多场景,尤其是多分类场景下,如果我们需要知道结果属于每个类别的置信度,那这个损失函数很适合。缺点是它的健壮性没有那么强。在lightgbm中可以令objective=binary,调用二分类的log-loss ● 多分类问题 在lightgbm中可以令objective=softmax即可 ● 交叉墒 cross-entropy 二分类和多分类问题均可使用,在lightgbm中可以令objective=cross_entropy即可 注:对数损失函数和交叉熵损失函数应该是等价的,因此在实际项目中选其一即可,证明见:https://zhuanlan.zhihu.com/p/58883095
1.3 调参思路
调参可用随机网格搜索 ● xgboost调参: ○ 保持learning rate和其他booster相关的参数不变,调节和estimators的参数。learing_rate可设为0.1, max_depth设为4-6之间,min_child_weight设为1,subsample和colsample_bytree设为0.8 ,其他的参数都设为默认值即可。 ○ 调节max_depth 和 min_child_weight参数,首先,我们先大范围地粗调参数,然后再小范围地微调。 ○ gamma参数调优 ○ subsample和colsample_bytree 调优 ○ 正则化参数调优,选择L1正则化或者L2正则化 ● lightgbm调参: ○ 参考资料:https://blog.csdn.net/u012735708/article/details/83749703 ○ 具体代码见:https://creditx.yuque.com/it4hgz/bb8t41/grzacv的《机器学习》章节
2 模型评价
一般根据不同的业务场景,会选择不同的评价指标,常见的评价指标如下:
2.1 KS值
KS值越大,表示模型能够将正、负样本区分开的程度越大。通常来讲,KS>0.2即表示模型有较好的预测准确性。
2.2 ROC曲线和AUC
我们建立ROC曲线的根本目的是找寻Recall和FPR之间的平衡,让我们能够衡量模型在尽量捕捉少数类的时候,误伤多数类的情况会如何变化。曲线越靠近左上角越好,越往下越糟糕,曲线如果在虚线的下方,则证明模型完全没法使用。如果曲线越靠近右下角说明模型的预测结果与真实情况完全相反,此时只要手动将预测结果逆转即可,最糟糕的情况是,曲线位于图像中间,和虚线非常靠近,此时我们就拿它没啥办法。 AUC量化了ROC曲线下方的面积,这个面积越大,代表ROC曲线越靠近左上角,模型越好,即AUC越接近于1,模型效果越好。
2.3 F1-score
同时兼顾精确度和召回率,因此我们追求尽量高的 F1 measure,能够保证我们的精确度和召回率都比较高,即不在区分负样本的同时又不误伤正样本,F1-score越接近1,模型效果越好。
3 常见问题
3.1 标签泄漏
不要把标签当作特征输入模型,例如要预测用户最近三天内的消费额,不要把这三天的消费额放入x中。
3.2 模型训练效果很差
通常是模型特征没做好,没有挖掘出更有价值的特征,也不排除数据质量很差的可能性。所以这个时候应该从数据和特征两方面入手,首先重新做特征工程,然后尝试扩充数据集。
3.3 训练集效果好,跨时间测试效果不好
如果测试集和跨时间测试效果都不好,说明这是一个过拟合问题,可以尝试减少模型复杂度,如减少特征维度或者减少数模型的深度等
3.4 训练集和跨时间测试效果都很好,上线后效果不好
这种情况仍不排除过拟合的嫌疑,可以再取出一部分更‘新’的数据集来训练。还有一种可能是线上模型的特征做错了,和线下的特征逻辑不一致。
3.5 上线后效果好,几周之后模型效果逐渐降低
可以认定为特征稳定性问题,解决方案聚焦在特征的跨时间稳定性上。
3.6 没有明显问题,但模型效果逐月降低
目前比较常规的解决方法是通过频繁迭代来更新模型,只要一直使用比较新的样本,就可以保证在未来的几个月模型效果让人满意。
|