2020 腾讯广告算法大赛:突破高分瓶颈方案分享

写在前面

期待已久的2020腾讯广告算法大赛终于开始了,本届赛题“广告受众基础属性预估”。本文将给出解题思路,以及最完备的竞赛资料,助力各位取得优异成绩!!!

报名链接:https://algo.qq.com/signup.html?rfisource=DSFISH

豪不夸张的说,看完这篇文章你也可以突破1.4分,同时对于1.4之后的提升,比如1.41,或者1.42+,也会给出更多建议和思考方向。

每个分数阶段都有不同的知识点需要去学习,我将上分之路按《王者荣耀》段位进行排列,从1.30到1.40+,从倔强青铜到最强王者。

倔强青铜

分数达到1.30,kfold+lgb

这个阶段还是比较简单的,稍微做些合适的特征就能达到1.30左右。这里不妨使用最简单的目标编码和聚合统计特征,模型选择lgb就可以了。

首先是目标编码,我们使用kfold进行交叉统计,详细代码结构可以参考:

https://github.com/bettenW/Tencent2019_Finals_Rank1st/blob/master/wh/wh_LGB.py

for fold_,(trn_idx,val_idx) in enumerate(folds.split(data_df,data_df)):
   Log_trn     = data_df.iloc[trn_idx]
   # mean
   order_label = Log_trn.groupby([feat])[f].mean()
   tmp         = data_df.loc[data_df.fold==fold_,[feat]]
   data_df.loc[data_df.fold==fold_, colname1] = tmp[feat].map(order_label)
      
test_df[colname1] = None
order_label   = data_df.groupby([feat])[f].mean()
test_df[colname1] = test_df[feat].map(order_label)

‍接下来是用户序列信息进行聚合,具体操作参考代码:

def aggregate_features(df_, prefix):


    df = df_.copy()


    agg_func = {
        '特征1':  ['count','nunique'],
        '特征2':  ['nunique'],
        '特征3':  ['mean','max','min','std'],
        } 


    agg_df = df.groupby(['主键']).agg(agg_func)
    agg_df.columns = [prefix + '_'.join(col).strip() for col in agg_df.columns.values]
    agg_df.reset_index(drop=False, inplace=True)
    
    return agg_df

特征部分大功告成,下面就可以进行训练了。5折lgb即可。

秩序白银

分数达到1.35,kfold+countvec+lgb

相较1.30,本阶段考虑词频统计特征,保留用户历史序列中的所有点击ID信息,当然tfidf也可以一起使用,这样下来会有90多w维,可以考虑在参数上进行设置,如max_feature和min_df,减少维度。

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
cntv = CountVectorizer(min_df=30)
cntv_user = cntv.fit_transform(click_seq)

这样的结果就不要进行其它格式的转换了,直接当作稀疏矩阵训练即可。

from scipy import sparse
train_csr = sparse.csr_matrix(train_df[features])
test_csr = sparse.csr_matrix(test_df[features])
# CountVectorizer结果合并
train_csr = sparse.hstack((train_csr, cntv_user[:900000])).tocsr()
test_csr  = sparse.hstack((test_csr , cntv_user[900000:])).tocsr()

荣耀黄金

分数达到1.40,kfold+countvec+tfidf+stacking+lgb

下面来的1.40阶段,我们依然使用lgb模型。在前面的基础了,本阶段添加了tfidf的模型训练概率结果作为特征,也将其看作stacking,具体分为三步:

# 第一步:得到tfidf结果
tfidf = TfidfVectorizer(min_df=30)
tfidf_user = tfidf.fit_transform(click_seq)
# 第二步:进行多模型的训练
# 五折交叉训练
# 选择简单的子模型
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.linear_model import RidgeClassifier
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import MultinomialNB
# 第三步:保存训练集概率和测试集概率作为特征给lgb

尊贵白金

分数达到1.40+,lgb进行很难继续上分了,需要尝试nn方法

       本赛题与NLP关联还是非常大的,首先,我们来看下如何和NLP问题联系起来。用户在90天内点击了不同的广告,我们可以将每个广告看作一个单词word,然后把这些单词连接起来组成一句话[creative_id_1,creative_id_2,…,creative_id_n]。由于每个广告有不同属性,如广告主id,并且每个用户点击广告也有不同属性,如点击次数,这样对于每个用户我们就可以得到8种文本。那么剩下的问题就是根据这8种文本如何预测用户的年龄和性别。

       在NLP中,预测文本的类别有许多模型,比如lstm, gru, transformer等。对于8种文本,我们将他们看成正常的文本,然后输入到常见的NLP模型中,在输出端做多分类即可。

在之后的文章还将分享永恒钻石、至尊星耀和最强王者三个段位的上分之路,希望大家持续关注。Coogle也将带来更多干货分享!!!

零基础入门竞赛PDF合集下载!

数据挖掘/cv/nlp/金融风控/推荐系统)系列

 

扫描下方二维码,可进数据竞赛社群,下载零基础入门竞赛系列合集(旨在帮助大家系统学习实践,PDF将持续更新;进群需备注:姓名-学校/公司-方向。例如:鱼佬-武大-数据挖掘),结交优秀的同伴,一起组队学习,参赛实践。

长按扫码进群 ▲

若无法进群,可加负责人微信后,再回复关键词:竞赛  邀请进群

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值