3. 环境搭建:Python环境、Jupyter Notebook与核心库安装
在开始特征漂移监控实战之前,需要搭建一个完整且可复现的实验环境。本节将指导你完成从Python环境配置到专用监控库安装的全流程,确保后续所有代码示例和实验都能顺利运行。
3.1 环境概览与技术选型
特征漂移监控涉及数据加载、模型训练、漂移检测、可视化报告等多个环节,因此需要组合使用多类工具库。下表列出了本次课程的核心依赖及其在监控流程中的角色:
| 库名称 | 版本建议 | 核心用途 | 在监控流程中的角色 |
|---|---|---|---|
| Python | ≥ 3.9 | 基础运行环境 | 所有库的运行时基础 |
| Jupyter Notebook | ≥ 6.5 | 交互式开发与实验 | 分步执行监控代码、可视化漂移结果 |
| pandas | ≥ 1.5 | 数据处理与特征工程 | 加载生产数据、构建参考集与测试集 |
| numpy | ≥ 1.24 | 数值计算 | 统计指标计算、数组操作 |
| scikit-learn | ≥ 1.2 | 模型训练与预处理 | 训练基线模型、生成预测用于漂移分析 |
| alibi-detect | ≥ 0.11 | 漂移检测算法 | 执行KS检验、MMD、分类器漂移检测 |
| evidently | ≥ 0.4 | 监控报告与仪表盘 | 生成特征漂移报告、数据质量仪表盘 |
| whylogs | ≥ 1.2 | 数据日志与统计概要 | 实时记录数据分布、合并统计概要 |
版本兼容性提示: 建议使用Python 3.10,该版本对上述所有库均有良好的兼容性。避免使用Python 3.12+,部分漂移检测库的底层依赖可能尚未完全适配。
3.2 环境搭建步骤
推荐使用 conda 或 venv 创建独立的虚拟环境,避免与系统Python或其他项目产生依赖冲突。以下是完整的搭建流程:
- 创建虚拟环境(以conda为例)
conda create -n drift_monitor python=3.10 -y
conda activate drift_monitor
- 安装Jupyter Notebook
conda install jupyter notebook -y
# 或使用pip
pip install notebook
- 安装核心数据处理库
pip install pandas numpy scikit-learn
- 安装漂移监控专用库
pip install alibi-detect evidently whylogs
- 验证安装
python -c "import pandas, numpy, sklearn, alibi_detect, evidently, whylogs; print('All libraries imported successfully')"
常见安装问题: 如果在安装
alibi-detect 时遇到 tensorflow 依赖冲突,可以尝试 pip install alibi-detect[tensorflow] 或使用 pip install alibi-detect[torch] 切换到PyTorch后端。本课程默认使用PyTorch后端,更轻量且易于调试。
3.3 库功能对比与选择依据
三个漂移监控库各有侧重,理解它们的差异有助于在实际项目中做出合理选择。下表从多个维度进行了对比:
| 对比维度 | alibi-detect | evidently | whylogs |
|---|---|---|---|
| 核心定位 | 漂移检测算法库 | 监控报告与可视化 | 数据日志与概要统计 |
| 支持的漂移类型 | 特征漂移、标签漂移、概念漂移 | 特征漂移、数据质量、模型性能 | 特征漂移(基于统计概要) |
| 检测算法 | KS检验、MMD、CVM、分类器漂移、LSDD | PSI、JS散度、Wasserstein距离、TVD | 分布距离度量(基于合并概要) |
| 输出形式 | Python对象(检测结果字典) | HTML报告、JSON、Python对象 | 日志文件、合并概要、DataFrame |
| 实时性 | 批量检测 | 批量检测 | 支持流式写入与实时概要 |
| 适用场景 | 需要精细控制检测算法参数 | 快速生成可视化监控报告 | 大规模数据流、低成本存储 |
课程选型策略: 本课程将综合使用三个库——alibi-detect 负责核心漂移检测计算,evidently 负责生成可交互的监控报告,whylogs 负责生产环境下的数据日志记录。三者互补,覆盖从实验到生产的完整链路。
3.4 环境架构与数据流
下图展示了搭建完成后的环境架构以及数据在监控流程中的流转路径:
3.5 快速验证脚本
安装完成后,建议运行以下完整验证脚本,确认所有组件可以协同工作:
# 验证脚本:environment_check.py
import pandas as pd
import numpy as np
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from alibi_detect.cd import KSDrift
from evidently.report import Report
from evidently.metric_preset import DataDriftPreset
import whylogs as why
print("=" * 50)
print("特征漂移监控环境验证")
print("=" * 50)
# 1. 生成模拟数据
X_ref, y_ref = make_classification(n_samples=1000, n_features=5, random_state=42)
X_test, y_test = make_classification(n_samples=500, n_features=5, random_state=99)
print(f"[OK] 模拟数据生成完成: 参考集 {X_ref.shape}, 测试集 {X_test.shape}")
# 2. 训练基线模型
model = RandomForestClassifier()
model.fit(X_ref, y_ref)
print(f"[OK] 基线模型训练完成: {model.__class__.__name__}")
# 3. alibi-detect 漂移检测
cd = KSDrift(p_val=0.05, x_ref=X_ref)
preds = cd.predict(X_test)
print(f"[OK] alibi-detect 漂移检测完成: p-value={preds['data']['p_val'][0]:.4f}")
# 4. evidently 报告生成
ref_df = pd.DataFrame(X_ref, columns=[f'feat_{i}' for i in range(5)])
test_df = pd.DataFrame(X_test, columns=[f'feat_{i}' for i in range(5)])
report = Report(metrics=[DataDriftPreset()])
report.run(reference_data=ref_df, current_data=test_df)
print(f"[OK] evidently 报告生成完成: {len(report.metrics)} 个指标")
# 5. whylogs 日志记录
results = why.log(pandas=ref_df)
profile = results.profile()
print(f"[OK] whylogs 日志记录完成: {len(profile.columns())} 个特征概要")
print("=" * 50)
print("环境验证全部通过!")
print("=" * 50)
生产环境建议: 在实际项目中,建议将上述验证脚本作为CI/CD流水线的一部分,每次部署新环境时自动执行,确保监控基础设施的可用性。
3.6 环境配置清单
为了方便快速复现,以下汇总了完整的依赖清单,可直接用于 requirements.txt:
# requirements.txt
pandas>=1.5.0
numpy>=1.24.0
scikit-learn>=1.2.0
alibi-detect>=0.11.0
evidently>=0.4.0
whylogs>=1.2.0
jupyter>=1.0.0
notebook>=6.5.0
使用以下命令一键安装:
pip install -r requirements.txt