天池新人实战赛o2o优惠券学习记录(特征工程&GBDT调参)

博主分享了在天池新人实战赛中进行o2o优惠券分析的经验,包括特征工程构造的40个特征,以及使用GBDT进行模型训练的过程。通过调整数据集、特征归一化、特征选择和GBDT参数优化,最终在验证集和测试集上取得较好的AUC表现。
摘要由CSDN通过智能技术生成

  1. 首先按照天池官方给出的教程,进行特征处理,构造用户、 商家、用户商家交互的共 40个特征,使用GBDT梯度提升树算法,GradientBoostingClassifier(n_estimators=100, learning_rate=1.0, max_depth=1, random_state=0)验证集上的平均AUC0.6317261536586201,提交官网后结果score:0.5848,验证集和测试集结果差距有点大,(过拟合了?)。
    (一个记录:定参数为n_estimators=100, learning_rate=0.1, max_depth=8, random_state=00.6567724359859186,提交score:0.5922

  2. 在前面基础上,对train数据集去重,验证集上的平均AUC0.6399454348933765,提交官网后结果score:0.5856,验证集上有提高。

  3. 因为特征之间相差的数量集很大,比如下面的部分特征,用户使用优惠券的购买率u_buy_with_coupon_rate和商家优惠券领取数量m_coupon_count等在这里插入图片描述
    尝试对40个特征进行归一化处理,发现归一化后的结果和未归一化前结果一模一样。查资料明白,GBDT梯度提升树是CART树,所以归一化无作用。

    1.机器学习中需要归一化的算法有SVM,逻辑回归,神经网络,KNN,线性回归,而树形结构的不需要归一化,因为它们不关心变量的值,而是关心变量分布和变量之间的条件概率,如决策树,随机森林,对于树形结构,它的数值缩放不影响分裂点的位置,对树模型的结构不造成影响。树模型的构造是通过寻找最优分裂点构成的,而且树模型不能进行梯度下降,因为树模型是阶跃的,阶跃是不可导的,并且求导没意义,也不需要归一化。
    2、对于那些需要归一化的模型,主要是因为特征值相差很大时,运用梯度下降,损失等高线是椭圆形,需要进行多次迭代才能达到最优点,如果进行归一化了,那么等高线就是圆形的,促使SGD往原点迭代,从而导致需要迭代次数较少。
    作者:yue—fighting
    原文:https://blog.csdn.net/u014535528/article/details/82977653

    本来想尝试pca降维,感觉40个特征没必要,而且降维可能提高不了auc,先放着。

  4. 随便尝试一下特征选择

    from sklearn.feature_selection import SelectFromModel
    from sklearn.linear_model import LinearRegression
    IrModel = LinearRegression()
    features_all_df = df_train2[features_all]
    selectFromModel = SelectFromModel(IrModel)
    selectFromModel.fit_transform(features_all_df, 	 df_train2[['label']])
    features_all_df.columns[selectFromModel.get_support()]
    

    output:

    Index(['discount_rate', 'u_mean_distance', 'u_use_coupon_rate',
           'm_coupon_use_rate', 'm_sale_with_coupon_rate', 'um_buy_rate',
           'um_coupon_use_rate'],
          dtype='object')
    

    用选择出的特征训练,特征选择后验证集AUC0.5443929295914943又下降了,感觉原始40个特征不算多,可能构造更多特征会更好。

  5. 跳过3的坑,接2,训练时改为使用所有train数据得到模型,提交结果到官网,分数score:0.5850,反而下降了一点,不知道为什么。

  6. GBDT调参

    调节的参数有两种:树参数和boosting参数。learning rate没有什么特别的调节方法,因为只要我们训练的树足够多learning rate总是小值来得好。
    虽然随着决定树的增多GBM并不会明显得过度拟合,高learing rate还是会导致这个问题,但如果我们一味地减小learning rate、增多树,计算就会非常昂贵而且需要运行很长时间。了解了这些问题,我们决定采取以下方法调参:
    1.选择一个相对来说稍微高一点的learning rate。一般默认的值是0.1,不过针对不同的问题,0.05到0.2之间都可以
    2.决定当前learning rate下最优的决定树数量。它的值应该在40-70之间。记得选择一个你的电脑还能快速运行的值,因为之后这些树会用来做很多测试和调参。
    3.接着调节树参数来调整learning rate和树的数量。我们可以选择不同的参数来定义一个决定树,后面会有这方面的例子
    4.降低learning rate,同时会增加相应的决定树数量使得模型更加稳健
    原文:https://blog.csdn.net/han_xiaoyang/article/details/52663170

    1.固定 learning rate和需要估测的决定树数量

    为了决定boosting参数,我们得先设定一些参数的初始值,可以像下面这样:
    min_ samples_ split=500: 这个值应该在总样本数的0.5-1%之间,由于我们研究的是不均等分类问题,我们可以取这个区间里一个比较小的数,500。
    min_ samples_ leaf=50: 可以凭感觉选一个合适的数,只要不会造成过度拟合。同样因为不均等分类的原因,这里我们选择一个比较小的值。
    max_ depth=8: 根据观察数和自变量数,这个值应该在5-8之间。这里我们的数据有87000行,49列,所以我们先选深度为8。
    max_ features=’sqrt’: 经验上一般都

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值