Git Product home page Git Product logo

2019-tencent-ad-competition-rank16-solution's Introduction

个人博客地址: https://www.cnblogs.com/xianbin7/p/11076009.html

知乎地址: https://zhuanlan.zhihu.com/p/71609590

这是复赛代码

文件目录结构: ./data下有五个目录: ./data/chusai_statstic_data ./data/total_data ./data/try_ad_id ./data/try_location_id ./data/whole_ad_data

原始数据放置位置:
  在./data/total_data目录下放置:
       1  atest_tracklog.zip
       2  track_log.zip
       3  user_data.zip
       4  final_map_bid_opt.out
       5  map_ad_static.out
最终文件目录如下:
   原始测试集的三部分文件: ./data/total_data/BTest下 (Btest_sample_bid.out,Btest_select_request_20190424.out,BTest_tracklog_20190424.txt)cd ..
   原始的分天历史日志数据文件: ./data/total_data/track_log
   原始广告静态数据:   ./data/total_data/map_ad_static.out
   原始广告操作数据: ./data/total_data/final_map_bid_opt.out 下放置


   分批处理的统计文件: ./data/chusai_statstic_data/group_data/ 下放置
   合并后的统计文件: ./data/chusai_statstic_data/group_data/exposure_group_all.csv
   训练集与测试集文件路径
      建模方式一 train  直接求广告id一天的曝光量
      './data/try_ad_id/group_train_data/'
      './data/try_ad_id/train_data.csv'
      './data/try_ad_id/simple_whole_test.txt'
      # 建模方式二 train  求广告id,一天内在各个广告位上的曝光量, 最后聚合得到广告id一天内的曝光量
      './data/try_location_id/group_train_data/'
      './data/try_location_id/train_data.csv'
      './data/try_location_id/simple_whole_test.txt'
   处理过后的广告数据文件:./whole_ad_data

   产生的xgb与lgb带有中间特征的训练集  ./saved_features_data
   中间结果文件 :  ./submission/目录
   最终结果文件:  ./submission.csv

由于数据量过大,我采样了历史日志文件作为原始输入,上传至github
目录结构如下:
data
├── chusai_statstic_data
│   └── group_data
├── total_data
│   ├── BTest
│   │   ├── Btest_sample_bid.out
│   │   ├── Btest_select_request_20190424.out
│   │   └── BTest_tracklog_20190424.txt
│   ├── final_map_bid_opt.out
│   ├── map_ad_static.out
│   └── track_log
│       ├── track_log_20190410.out
│       └── track_log_20190415.out
├── try_ad_id
│   └── group_train_data
├── try_location_id
│   └── group_train_data
└── whole_ad_data

环境配置: Anaconda 4.5.13, Python 3.6.2

主要依赖库: pandas 0.20.3, numpy 1.13.1, scikit-learn 0.19.0, lightgbm_version 2.2.2, xgboost_version 0.80

步骤说明:

按run.sh顺序运行代码,先后完成预处理、特征工程、模型训练、测试集预测与模型结果融合

预处理: 建模方式1: 分批处理每天的历史日志文件得到每天的广告id的曝光量,通过每行样本的历史竞价队列提取出曝光样本与 未曝光样本,统计广告id,在当前天对应的请求次数,竞争对手的个数,竞价均值,pctr均值,quality_ecpm 均值,total_ecpm均值,广告id在当前天的获胜概率(曝光次数除以请求次数),广告id在当前天每次的获胜概率 (曝光次数除以竞争对手的个数) 建模方式2: 与建模方式1类似,只不过每天广告id的曝光量替换成每天,广告id,在某个广告位的曝光量。

特征提取:

四大类特征,历史平移特征、五折统计特征、时间特征、预估曝光量(历史平移乘以广告id当天的请求次数或者广告id的竞争对手个数)
final_lgb.py使用特征:
1  get_recent_ecpm()/create_new_lagging产生广告历史平移曝光量
2  get_recent_ecpm()产生广告历史平移的pctr,quality_ecpm,toal_ecpm
3  get_recent_fail_num()产生广告的请求失败次数
4  generate_data_log_competitive_and_user_cover_feature()利用五折交叉统计产生广告素材下不同广告位的数目
5  get_kflod_statstic_data()利用五折交叉统计广告的请求失败次数,曝光量,以及获胜概率
6  get_rencent_winning_probability_exp_num()利用历史平移统计广告的曝光量以及获胜概率
7  get_excepted_exp_num_columns()利用广告的历史平移的获胜概率均值乘以当天的请求次数
8  get_delata()将请求时间,创建时间,请求时间减去创建时间作为特征
9  对类别型特征进行ont-hot

final_xgb.py使用特征:
1  get_recent_ecpm()/create_new_lagging产生广告历史平移曝光量
2  get_recent_ecpm()产生广告历史平移的pctr,quality_ecpm,toal_ecpm
3  generate_data_log_competitive_and_user_cover_feature()利用五折交叉统计产生广告素材下不同广告位的数目
4  get_rencent_per_times_winning_probability()利用历史平移得到广告当前天预估的单次获胜概率
5  get_per_times_winning_rate_estimated_exp_num_columns利用当前天预估的单次获胜概率乘以当天的竞争对手的个数
6  get_rencent_winning_probability_exp_num()利用历史平移统计广告的曝光量以及获胜概率
7  get_delata()将请求时间,创建时间,请求时间减去创建时间作为特征
8  对类别型特征进行ont-hot

模型融合: 新旧广告定义: 未在训练集中出现的广告id为历史旧广告,否则为新广告,历史旧广告采用规则,新广告采用模型 规则融合:规则一采用广告id在某个广告位的历史获胜概率乘以广告id当天在这个广告位的请求次数,规则二采用 广告id在某个广告位的单次历史获胜概率乘以广告id当天在这个广告位竞争对手的个数, 采用加权融合 模型融合:模型一使用lightgbm训练,模型二使用xgboost训练,特征方面的差异主要有lightgbm使用广告id在 某个广告位的历史获胜概率以及广告id当天在这个广告位的请求次数构造特征,模型二采用广告id在某个 广告位的单次历史获胜概率以及广告id当天在这个广告位竞争对手的个数构造特征, 最终采用加权融合

2019-tencent-ad-competition-rank16-solution's People

Contributors

xianbin7 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.