I ran one feature-and-model recipe twice on the same fraud dataset: once on pandas with XGBoost on CPU, once on RAPIDS cuDF with XGBoost on CUDA. Model training was 4.6-9x faster on the GPU. Data preparation took about the same time on both. The numbers, and the limits of this measurement, are below.

Setup

  • Data: the IEEE-CIS Fraud Detection training set, all 590,540 transactions and 434 features.
  • Recipe: CSV read, identity join, a 0.95 missingness filter on the V columns, categorical encoding, group-by aggregates, then XGBoost (200 trees) on a time-ordered 80/20 split.
  • Same code on both engines, because cuDF follows the pandas API.
  • Hardware: one laptop with an Intel i7-11800H (16 logical cores) and an NVIDIA RTX 3060 Laptop GPU (6 GB).
  • Software: the GPU run used WSL2, Python 3.12, cuDF 26.10 and XGBoost 3.4.1. The CPU run used native Windows, Python 3.11, pandas 3.1.1 and XGBoost 3.2.0, because XGBoost 3.4.1 needs Python 3.12.

Results

Each cell is the range over a cold and a warm run in the same process. The first GPU run includes one-time kernel compilation.

Step (seconds) GPU: cuDF + XGBoost CUDA CPU: pandas + XGBoost, 16 threads
CSV read 4.72 - 10.64 16.677 - 30.27
Rest of the data preparation 13.483 - 23.056 4.584 - 5.661
XGBoost fit 26.143 - 28.602 131.522 - 235.392
Total 45.357 - 64.222 168.874 - 258.751

Validation ROC-AUC / average precision: 0.9158 / 0.5581 on GPU, 0.9147 / 0.5553 on CPU.

What the numbers say

  • Training is where the GPU pays off: 4.6-9x faster here.
  • CSV parsing was about 3.5x faster on the GPU when warm.
  • The smaller steps (filters, join, encoding, group-bys) were faster on the CPU at this size. Each GPU operation has a fixed cost, so at 590k rows the GPU did not win on data preparation overall.
  • Model quality is the same. ROC-AUC differs by about 0.001.

Limits

  • One laptop, one dataset, one recipe. I would not extrapolate to other hardware or to much larger tables.
  • The CPU fit time moves with laptop thermals (132-235 s), which is why I report ranges instead of one number.
  • A CPU run inside WSL2 was discarded: that WSL instance is capped at 4 GB RAM and 4 cores, and it started swapping.
  • The two environments differ in Python and library versions, so this is a practical comparison of two setups, not a controlled test of one variable.
  • This XGBoost recipe is a speed benchmark. It is not the LightGBM model published in the same repository, and its AUC is not that model's AUC.

Reproduce

# Linux or WSL2 with an NVIDIA GPU; data: train_transaction.csv and train_identity.csv from Kaggle pip install --extra-index-url=https://pypi.nvidia.com "cudf-cu13" pandas pyarrow xgboost scikit-learn python scripts/benchmark_rapids_gpu.py --data <dir> --engine cudf --n-estimators 200 --out results/gpu.json python scripts/benchmark_rapids_gpu.py --data <dir> --engine pandas --n-estimators 200 --out results/cpu.json 

The script, raw GPU and CPU results, and the full fraud analytics pipeline are in the repository: https://github.com/senanurcetin/ieee-fraud-detection-analytics

The raw IEEE-CIS files are not included. Get them from Kaggle under the competition's terms.