This project implements serval models of the papers on CTR prediction with easy-to-use call interfaces.
The goal is to make it possible for everyone to use complex models with model.fit()andmodel.predict().
Most of the models have been finished in keras. The tensorflow version will be added soon~ Please feel free to contact me if you have any questions!!
| Model | Paper | Available Framework |
|---|---|---|
| AFM | [IJCAI 2017]Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks | keras |
| DCN | [ADKDD 2017]Deep & Cross Network for Ad Click Predictions | keras,tensorflow |
| DeepFM | [IJCAI 2017]DeepFM: A Factorization-Machine based Neural Network for CTR Prediction | keras,tensorflow |
| MLR | [arxiv 2017]Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction | keras, |
| NFM | [SIGIR 2017]Neural Factorization Machines for Sparse Predictive Analytics | keras |
- python3
- tensorflow==1.4.0
- keras==2.1.2
Source code keras_demo.py
data = pd.read_pickle("./demo/small_data.pkl")
sparse_features = [ "movie_id","user_id","gender","age","occupation","zip"]
target = ['rating']
#1.Label Encoding for sparse features,and Normalization for dense fetures
for feat in sparse_features:
lbe = LabelEncoder()
data[feat] = lbe.fit_transform(data[feat])
#2.count #unique features for each sparse field
sparse_feature_dim = {feat:data[feat].nunique() for feat in sparse_features}
#3.generate input data for model
model_input = [data[feat].values for feat in sparse_feature_dim]
#4.Define Model,compile and train
model = NFM({"sparse":sparse_feature_dim,"dense":[]},final_activation='linear').model
model.compile("adam","mse",metrics=['mse'],)
history = model.fit(model_input,data[target],
batch_size=256,epochs=5,verbose=2,validation_split=0.2,)- python3
- tensorflow==1.4.0
- numpy==1.13.3
- scikit-learn==0.19.1
The base base class mimics the keras model to implement the following public methods, including:
- compile
- save_model
- load_mdel
- train_on_batch
- fit
- test_on_batch
- evaluate
- predict_on_batch
- predict
private methods:
- _create_optimizer
- _create_metrics
- _compute_sample_weight
At the same time, several abstract methods are designed:
- _get_input_data
- _get_input_target
- _get_output_target
- _get_optimizer_loss
- _build_graph
The subclass is required to call self._build_graph() at the end of the __init__ method to build the calculation graph.
- Add
tf.summary.FileWriter - Add custom metric function
- Add weighted loss function
- Encapsulate models with
tf.estimator
Source code tf_demo.py
see docs/README.md
