Coder Social home page Coder Social logo

ctr_keras's Introduction

ctr_Keras

很简单的ctr模型实现,欢迎指出bug&提出宝贵意见!

模型

LR

FNN:http://www0.cs.ucl.ac.uk/staff/w.zhang/rtb-papers/deep-ctr.pdf

Wide&Deep:https://arxiv.org/abs/1606.07792

IPNN:https://arxiv.org/abs/1611.00144

DCN:https://arxiv.org/abs/1708.05123

NFM:https://www.comp.nus.edu.sg/~xiangnan/papers/sigir17-nfm.pdf

DeepFM:https://arxiv.org/abs/1703.04247

NFFM:腾讯赛冠军模型

数据集

kaggle-criteo-2014 dataset

http://labs.criteo.com/2014/02/kaggle-display-advertising-challenge-dataset/

数据集按9:1划分,请自行划分

train test
41256556 4584063

预处理

连续型特征(13):缺失值补0,离散分桶

离散型特征(26):过滤频率低于10的特征值

执行步骤

运行preprocess.py生成train.csv和test.csv文件

python preprocess.py

运行相应的ctr模型代码文件,如

python lr.py

结果

一般ctr模型都是一轮收敛,这里训练轮数统一只取一轮,优化器使用Adam(0.001)

由于预处理、参数,实验结果跟论文会有出入

注:实验发现对连续型特征使用int((log(x))^2)预处理相对于离散分桶效果更好,可以大幅降低logloss,后续会更新实验结果

Model 测试集Logloss
LR 0.48736
FNN 0.45586
W&D 0.47389
DCN 0.45565
DeepFM(weight) 0.45592
DeepFM(weight+first_order) 0.45544
DeepFM(add+first) 0.49038
NFM(concat(dot,embedding)) 0.45394
NFM(sum(multiply)) 0.45952
NFM(concat(multiply)) 0.45332
NFM(conat(multiply)+first_order) 0.4713
NFFM(concat(multiply)) 0.45085
NFM(conat(multiply)+first_order) 0.45419

分析:

这里W&D线性部分使用了全部的feature,可能是这个原因效果比FNN差

DeepFM原始的结构(add)效果很差,做了点改变,从直接加和变成加权加和(weight),用一个Dense layer实现

NFM做了很多变种尝试,发现concat二阶交互向量效果最好

从结果上来看一阶线性连接没有带来明显提升(W&D相对于FNN,DeepFM(weight)相对于DeepFM(weight+first_order),NFM(concat(multiply))相对于NFM(conat(multiply)+first_order))

DCN的cross部分的线性连接没有带来明显提升(相对于FNN)

把二阶交互加入到dnn里效果表现比较好(NFM(concat(multiply))、NFM(concat(dot,embedding))相对于deepFM,FNN)

关于NFFM:

NFFM参数量是NFM的field_size(39)倍,训练速度慢而且容易OOM,做以下两种优化,4千万样本约3个半小时跑完

参数量减少:连续型特征和离散型特征不交叉

速度加快:减少embedding lookup次数(这部分还可以进一步优化),减少multiply次数,增大batch size

待补充

  • PNN、AFM、xDeepFM

  • 数据过大需要用tfrecord和多线程队列减少io时间

  • 二阶交互部分依然比较耗时,这部分需要重写优化下

  • 精度缩小到float16或者int16,进一步节省空间

ctr_keras's People

Contributors

siqi13579 avatar

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  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  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  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  avatar

ctr_keras's Issues

有没有数据样例?

for cat in cols:
input = Input(shape=(1,))
cat_field_input.append(input)
nums = pd.concat((train[cat], test[cat])).max() + 1
embed = Embedding(nums, 1, input_length=1, trainable=True)(input)
reshape = Reshape((1,))(embed)
lr_embedding.append(reshape)
# ffm embeddings
x_embed = Embedding(nums, 10, input_length=1, trainable=True)(input)
x_reshape = Reshape((10,))(x_embed)
field_embedding.append(x_reshape)

这部分是处理目的是什么?

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.