4. 环境搭建与数据准备

在开始特征回放效果评估之前,需要搭建一个稳定、可复现的实验环境。本章将指导你完成 Python 环境配置、XGBoost 及相关库的安装,并生成模拟数据集,为后续的模型训练与评估奠定基础。

4.1 Python 环境要求

推荐使用 Python 3.8 至 3.11 版本,并基于虚拟环境进行开发,以避免依赖冲突。以下为经过验证的推荐环境配置:

组件 推荐版本 说明
Python 3.9 / 3.10 / 3.11 3.8 以下版本对部分新库支持不佳
操作系统 Linux / macOS / Windows Linux 下 XGBoost 多线程性能最优
包管理工具 pip 23+ / conda 23+ 推荐使用 conda 管理 GPU 版本
虚拟环境 venv / conda env 隔离项目依赖,避免版本冲突
💡 建议: 使用 conda create -n xgb_eval python=3.10 创建专用虚拟环境,后续所有安装操作均在该环境中执行。

4.2 XGBoost 与相关库安装

本教程的核心依赖包括 XGBoost、数据处理库(NumPy、Pandas)、可视化库(Matplotlib、Seaborn)以及模型评估工具(Scikit-learn)。安装命令如下:

# 基础安装(CPU 版本)
pip install xgboost==2.0.3 numpy==1.24.3 pandas==2.0.3 scikit-learn==1.3.0 matplotlib==3.7.2 seaborn==0.12.2

# 如需 GPU 加速(Linux + CUDA 11.x/12.x)
pip install xgboost==2.0.3 --index-url https://download.pytorch.org/whl/cu118
# 或使用 conda 安装 GPU 版本
conda install -c conda-forge xgboost=2.0.3
库名 版本 用途
xgboost 2.0.3 梯度提升树模型训练与特征重要性计算
numpy 1.24.3 数值计算与数组操作
pandas 2.0.3 数据框操作与特征工程
scikit-learn 1.3.0 数据划分、评估指标与交叉验证
matplotlib 3.7.2 基础图表绘制
seaborn 0.12.2 统计图形美化
⚠️ 版本兼容性: XGBoost 2.0+ 对 Python 3.11 支持良好,但若使用 Python 3.12,建议降级至 3.10 或 3.11,避免潜在的 ABI 不兼容问题。

4.3 模拟数据集生成

为了聚焦特征回放效果的评估逻辑,我们使用 make_classification 生成一个包含 20 个特征的二分类模拟数据集。其中部分特征被设计为“冗余特征”或“噪声特征”,用于模拟真实场景中特征质量参差不齐的情况。

from sklearn.datasets import make_classification
import pandas as pd
import numpy as np

# 生成 2000 个样本,20 个特征,其中 5 个为冗余特征
X, y = make_classification(
    n_samples=2000,
    n_features=20,
    n_informative=10,
    n_redundant=5,
    n_repeated=0,
    n_clusters_per_class=2,
    random_state=42
)

# 转换为 DataFrame,便于后续操作
feature_names = [f'feat_{i:02d}' for i in range(20)]
df = pd.DataFrame(X, columns=feature_names)
df['target'] = y

print(f"数据集形状: {df.shape}")
print(f"正样本比例: {y.mean():.2%}")

生成的数据集具有以下特点:

  • 样本量: 2000 条,适合快速迭代实验
  • 特征维度: 20 维,包含 10 个信息特征、5 个冗余特征、5 个噪声特征
  • 类别平衡: 正负样本比例约为 50:50,避免类别不平衡带来的评估偏差
模拟数据集结构 数据集 (2000 样本 × 20 特征) 信息特征 feat_00 ~ feat_09 10 个 与目标强相关 冗余特征 feat_10 ~ feat_14 5 个 信息特征的线性组合 噪声特征 feat_15 ~ feat_19 5 个 随机噪声,无预测能力 目标变量 (target) 冗余特征会干扰特征重要性排序

4.4 数据划分策略

为了准确评估特征回放效果,需要将数据集划分为训练集、验证集和测试集。本教程采用以下划分策略:

  1. 训练集 (60%): 用于模型训练与特征重要性计算
  2. 验证集 (20%): 用于超参数调优与早停(Early Stopping)
  3. 测试集 (20%): 用于最终模型评估与特征回放效果验证
from sklearn.model_selection import train_test_split

# 先划分出测试集
X_temp, X_test, y_temp, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)

# 再从剩余数据中划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(
    X_temp, y_temp, test_size=0.25, random_state=42, stratify=y_temp
)

print(f"训练集: {X_train.shape[0]} 样本")
print(f"验证集: {X_val.shape[0]} 样本")
print(f"测试集: {X_test.shape[0]} 样本")
数据划分流程 原始数据集 (2000) 临时集 (1600) — 80% 测试集 (400) — 20% 训练集 (1200) — 60% 验证集 (400) — 20% 验证集用于早停与调参 测试集仅用于最终评估
📌 关键点: 使用 stratify=y 参数确保划分后各数据集中正负样本比例与原始数据集一致,避免因随机划分导致的类别分布偏移。

4.5 环境验证

完成安装与数据准备后,运行以下代码验证环境是否配置正确:

import xgboost as xgb
import numpy as np
import pandas as pd
import sklearn

print(f"XGBoost 版本: {xgb.__version__}")
print(f"NumPy 版本: {np.__version__}")
print(f"Pandas 版本: {pd.__version__}")
print(f"Scikit-learn 版本: {sklearn.__version__}")

# 快速测试:训练一个简单模型
dtrain = xgb.DMatrix(X_train, label=y_train)
params = {'objective': 'binary:logistic', 'eval_metric': 'logloss', 'max_depth': 4}
model = xgb.train(params, dtrain, num_boost_round=10)
print("✅ 环境搭建成功,模型训练正常")