Ranking Model Tutorial
This tutorial introduces how to use various ranking models in Torch-RecHub. We will use the Criteo dataset as an example.
Data Preparation
First, we need to prepare the data and perform feature processing:
python
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
from torch_rechub.basic.features import DenseFeature, SparseFeature
from torch_rechub.utils.data import DataGenerator
# Load data
df = pd.read_csv("criteo_sample.csv")
# Define feature columns
sparse_features = [f'C{i}' for i in range(1, 27)]
dense_features = [f'I{i}' for i in range(1, 14)]Wide & Deep Model
Wide & Deep model combines memorization and generalization capabilities:
python
from torch_rechub.models.ranking import WideDeep
from torch_rechub.trainers import CTRTrainer
# Define features
dense_feas = [DenseFeature(name) for name in dense_features]
sparse_feas = [SparseFeature(name, vocab_size=df[name].nunique(), embed_dim=16) for name in sparse_features]
# Model configuration
model = WideDeep(
wide_features=sparse_feas,
deep_features=sparse_feas + dense_feas,
mlp_params={"dims": [256, 128, 64], "dropout": 0.2, "activation": "relu"}
)
# Training configuration
trainer = CTRTrainer(
model=model,
optimizer_params={"lr": 0.001, "weight_decay": 1e-5},
n_epoch=10,
device="cuda:0"
)
# Train model
trainer.fit(train_dl, val_dl)DeepFM Model
DeepFM model uses factorization machines and deep networks to model feature interactions:
python
from torch_rechub.models.ranking import DeepFM
from torch_rechub.trainers import CTRTrainer
# Model configuration
model = DeepFM(
deep_features=sparse_feas + dense_feas,
fm_features=sparse_feas,
mlp_params={"dims": [256, 128, 64], "dropout": 0.2, "activation": "relu"}
)
# Training configuration
trainer = CTRTrainer(
model=model,
optimizer_params={"lr": 0.001, "weight_decay": 1e-5},
n_epoch=10,
device="cuda:0"
)DIN (Deep Interest Network)
DIN model uses attention mechanism to model user interests:
python
from torch_rechub.models.ranking import DIN
from torch_rechub.basic.features import SequenceFeature
# Define sequence features
history_feas = [SequenceFeature("hist_item_id", vocab_size=item_num, embed_dim=16, pooling=None)]
target_feas = [SparseFeature("item_id", vocab_size=item_num, embed_dim=16)]
# Model configuration
model = DIN(
features=sparse_feas + dense_feas,
history_features=history_feas,
target_features=target_feas,
mlp_params={"dims": [256, 128, 64], "dropout": 0.2, "activation": "dice"},
attention_mlp_params={"dims": [64, 32], "activation": "dice"}
)
# Training configuration
trainer = CTRTrainer(
model=model,
optimizer_params={"lr": 0.001},
n_epoch=10,
device="cuda:0"
)DCN-V2 Model
DCN-V2 explicitly models feature interactions through cross networks:
python
from torch_rechub.models.ranking import DCNv2
# Model configuration
model = DCNv2(
features=sparse_feas + dense_feas,
n_cross_layers=3,
mlp_params={"dims": [256, 128, 64], "dropout": 0.2, "activation": "relu"}
)
# Training configuration
trainer = CTRTrainer(
model=model,
optimizer_params={"lr": 0.001},
n_epoch=10,
device="cuda:0"
)Model Evaluation
Evaluate using common ranking metrics:
python
# Evaluate model
auc = trainer.evaluate(trainer.model, test_dl)
print(f"Test AUC: {auc:.4f}")Feature Engineering Tips
- Feature Preprocessing
python
# Categorical feature encoding
from sklearn.preprocessing import LabelEncoder
for feat in sparse_features:
lbe = LabelEncoder()
df[feat] = lbe.fit_transform(df[feat])
# Numerical feature normalization
from sklearn.preprocessing import MinMaxScaler
for feat in dense_features:
scaler = MinMaxScaler()
df[feat] = scaler.fit_transform(df[feat].values.reshape(-1, 1))- Feature Crossing
python
# Manual feature crossing
df['cross_feat'] = df['feat1'].astype(str) + '_' + df['feat2'].astype(str)Advanced Applications
- Custom Loss Function
python
import torch.nn as nn
class FocalLoss(nn.Module):
def __init__(self, alpha=0.25, gamma=2):
super().__init__()
self.alpha = alpha
self.gamma = gamma
def forward(self, pred, target):
# Implement Focal Loss
pass- Learning Rate Scheduling
python
from torch.optim.lr_scheduler import CosineAnnealingLR
trainer = CTRTrainer(
model=model,
scheduler_fn=CosineAnnealingLR,
scheduler_params={"T_max": 10}
)Notes
- Handle missing values and outliers properly
- Pay attention to the importance of feature engineering
- Choose appropriate evaluation metrics
- Focus on model interpretability
- Balance model complexity and efficiency
- Handle sample imbalance issues
