Giter Club home page Giter Club 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

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

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

data相关问题

大佬您好,想请问一下readme中说data文件夹中有5个文件夹,但是在项目中只看到了total这个文件夹,想请问下其他数据是需要自己找吗?

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.