数据项目分析标准化流程

文章目录

  • 数据项目分析标准化流程
    • 目录结构
    • 核心结论
    • [1. 数据加载](#1. 数据加载)
    • [2. 数据预处理(Data Preprocessing)](#2. 数据预处理(Data Preprocessing))
      • [2.1 数据清洗(Data Cleaning)](#2.1 数据清洗(Data Cleaning))
        • [2.1.1 重复值处理](#2.1.1 重复值处理)
        • [2.1.2 缺失值探索与处理](#2.1.2 缺失值探索与处理)
        • [2.1.3 异常值探索与处理](#2.1.3 异常值探索与处理)
      • [2.2 数据格式标准化(可选,补充项)](#2.2 数据格式标准化(可选,补充项))
    • [3. 探索性数据分析(EDA)](#3. 探索性数据分析(EDA))
      • [3.1 描述性统计分析](#3.1 描述性统计分析)
      • [3.2 单变量分布可视化](#3.2 单变量分布可视化)
      • [3.3 双变量关系分析](#3.3 双变量关系分析)
        • [3.3.1 统计检验方法汇总表(有监督特征筛选专用)](#3.3.1 统计检验方法汇总表(有监督特征筛选专用))
        • [3.3.2 检验代码实现与结果](#3.3.2 检验代码实现与结果)
      • [3.4 多变量关系分析(可选)](#3.4 多变量关系分析(可选))
    • [4. 特征工程(Feature Engineering)](#4. 特征工程(Feature Engineering))
      • [4.1 特征筛选](#4.1 特征筛选)
        • [4.1.1 有监督特征筛选](#4.1.1 有监督特征筛选)
        • [4.1.2 无监督特征筛选](#4.1.2 无监督特征筛选)
        • [4.1.3 组合使用策略](#4.1.3 组合使用策略)
      • [4.2 类别型特征和数值型特征区分](#4.2 类别型特征和数值型特征区分)
      • [4.3 缺失值处理(进阶)](#4.3 缺失值处理(进阶))
      • [4.4 异常值处理(进阶)](#4.4 异常值处理(进阶))
      • [4.5 数据分桶](#4.5 数据分桶)
      • [4.6 特征构造(可选)](#4.6 特征构造(可选))
      • [4.7 特征转换](#4.7 特征转换)
      • [4.8 特征交互和特征编码](#4.8 特征交互和特征编码)
      • [4.9 特征降维(可选)](#4.9 特征降维(可选))
    • [5. 模型构建与评估](#5. 模型构建与评估)
      • [5.1 数据集划分](#5.1 数据集划分)
      • [5.2 模型选择与训练](#5.2 模型选择与训练)
      • [5.3 模型评估指标计算](#5.3 模型评估指标计算)
        • [5.3.1 分类任务评估指标](#5.3.1 分类任务评估指标)
        • [5.3.2 回归任务评估指标](#5.3.2 回归任务评估指标)
        • [5.3.3 无监督任务评估指标(补充)](#5.3.3 无监督任务评估指标(补充))
      • [5.4 模型调优](#5.4 模型调优)
      • [5.5 模型解释与落地(可选)](#5.5 模型解释与落地(可选))
    • 补充:常见的命名误区

数据项目分析标准化流程

目录结构

bash 复制代码
项目分析流程
├─ 数据加载
├─ 数据预处理(Data Preprocessing)
│  └─ 数据清洗(重复值、缺失值、异常值处理)、数据格式标准化
├─ 探索性数据分析(EDA)
│  ├─ 描述性统计分析
│  ├─ 单变量分布可视化
│  ├─ 双变量关系分析(统计检验为主)
│  │  └─ 统计检验方法汇总表、检验代码实现与结果输出
│  └─ 多变量关系分析(可选)
├─ 特征工程(Feature Engineering)
│  ├─ 特征筛选
│  │  ├─ 有监督特征筛选(基于EDA统计检验结果)
│  │  └─ 无监督特征筛选(无目标变量/前置降噪)
│  ├─ 特征类型区分(类别型/数值型)
│  ├─ 缺失值/异常值处理(进阶)
│  ├─ 数据分桶
│  ├─ 特征构造(可选)
│  ├─ 特征转换/编码
│  └─ 特征降维(可选)
└─ 模型构建与评估
    ├─ 数据集划分
    ├─ 模型选择与训练
    ├─ 模型评估指标计算
    ├─ 模型调优
    └─ 模型解释与落地(可选)

核心结论

  1. 从技术本质来看,统计检验 优先归属到 探索性数据分析(EDA) 阶段;从业务目的(特征筛选)来看,它是特征工程的前置依赖步骤。
  2. 规范划分方式:统计检验的代码和结果放在EDA部分,有监督特征筛选的操作放在特征工程部分。
  3. 特征筛选分为有监督无监督两类:有监督适用于有明确目标变量的场景,无监督适用于无目标变量的场景,或作为有监督筛选的前置降噪步骤。
  4. 数据预处理和特征工程阶段均涉及缺失值/异常值处理,但目标、粒度、方法完全不同:预处理是"基础清洗",特征工程是"业务/模型导向的进阶优化";进阶优化的深度需根据"效率-效果"目标、数据特性、模型类型灵活调整。

补充:常见误区

  • 很多人将"特征筛选"直接等同于"统计检验":统计检验是有监督特征筛选的一种基础方法,特征筛选还包含无监督方法和其他有监督方法(如基于模型的特征重要性、RFE)。
  • 无监督特征筛选≠特征降维:筛选是直接删除无效特征 ,降维是将多个特征映射为少数新特征,二者是互补关系。
  • 认为"预处理做了缺失值/异常值处理,特征工程就无需再做":二者目标不同,预处理是"通用清洗",特征工程是"定制化优化",缺一不可;仅数据质量极高+树模型+快速验证场景可简化进阶处理。

1. 数据加载

python 复制代码
# 大文件分块加载示例
chunks = []
for chunk in pd.read_csv(path, chunksize=xxx):
    chunks.append(chunk)
chunks_df = pd.concat(chunks)

2. 数据预处理(Data Preprocessing)

数据预处理为独立大模块,核心目标是解决数据"可用性"问题,对全量数据做通用、基础的清洗,让数据满足后续分析的基本要求。

2.1 数据清洗(Data Cleaning)

2.1.1 重复值处理
  • 代码:data_train.duplicated().sum()
  • 操作:删除完全重复的行 / 保留第一条
  • 核心目标:消除数据冗余,避免重复计算对后续统计分析的干扰。
2.1.2 缺失值探索与处理
  • 代码:data_train.isnull().sum() / 缺失率计算
  • 可视化:缺失率柱状图 / 热力图
  • 处理方案:
    • 数值型特征:均值/中位数/插值填充(通用策略,不区分特征重要性
    • 分类型特征:众数/缺失值单独编码(通用策略,不结合业务场景
  • 核心目标:填补"空值",保证数据结构完整,避免后续EDA/建模时因空值报错。
  • 局限性:仅解决"有没有值"的问题,不考虑"值是否合理""是否适配业务/模型"。
2.1.3 异常值探索与处理
  • 检测方法:箱线图(IQR法)、3σ法则、Z-score(通用统计方法,全量特征统一检测
  • 处理方案:删除极端异常值 / 盖帽法(替换为上下限) / 保留(根据业务逻辑判断是合理值)
  • 核心目标:识别并处理明显违背统计规律的"极端值",避免其对EDA阶段描述性统计的干扰。
  • 局限性:仅从统计角度处理,不结合特征的业务含义、不考虑模型对异常值的敏感度。

2.2 数据格式标准化(可选,补充项)

  • 数据类型转换:如将字符串格式的日期转为datetime类型、将数字编码的分类特征转为category类型
  • 列名标准化:如统一小写、替换空格为下划线、删除特殊字符
  • 核心目标:统一数据格式,提升后续操作的便捷性。

3. 探索性数据分析(EDA)

EDA为独立大模块,核心目标是理解数据特征,挖掘变量分布、变量间关系,为后续特征工程和建模提供依据。

3.1 描述性统计分析

  • 代码:data_train.describe()(连续变量:均值、中位数、标准差、分位数)
  • 代码:data_train.describe(include='object')(分类变量:频数、唯一值数量)

3.2 单变量分布可视化

  • 连续变量:直方图 + 核密度图(看分布是否正态)、箱线图
  • 分类变量:条形图、饼图(看类别分布是否均衡)

3.3 双变量关系分析

3.3.1 统计检验方法汇总表(有监督特征筛选专用)
分类序号 分析场景(变量类型) 常用检验方法 适用条件 原假设(H₀) 核心用途
1 两个分类变量的关系(如:性别 vs 是否违约) 卡方检验 列联表中大部分单元格频数 ≥ 5 两个分类变量相互独立,无关联 筛选与目标分类变量相关的分类特征
1 两个分类变量的关系 Fisher精确检验 列联表中存在单元格频数 < 5(小样本) 两个分类变量相互独立,无关联 卡方检验的补充,小样本场景下的分类特征筛选
2 单分类变量(两组) vs 连续变量(如:是否违约 vs 收入) 独立样本t检验 连续变量正态分布方差齐、样本独立 两组连续变量的均值无差异 筛选与目标二分类变量相关的连续特征
2 单分类变量(两组) vs 连续变量 Welch's t检验 连续变量正态分布、方差不齐、样本独立 两组连续变量的均值无差异 t检验的修正版,方差不齐时的替代方案
2 单分类变量(两组) vs 连续变量 Mann-Whitney U检验 连续变量非正态分布、样本独立(非参数检验) 两组连续变量的分布无差异 不满足正态分布时,替代t检验的特征筛选
3 单分类变量(多组) vs 连续变量(如:学历等级 vs 收入) 单因素方差分析(ANOVA) 连续变量正态分布、方差齐、样本独立 多组连续变量的均值全部相等 筛选与目标多分类变量相关的连续特征
3 单分类变量(多组) vs 连续变量 Kruskal-Wallis H检验 连续变量非正态分布、样本独立(非参数检验) 多组连续变量的分布无差异 不满足正态分布时,替代ANOVA的特征筛选
4 两个连续变量的关系(如:年龄 vs 贷款金额) Pearson相关分析 两个连续变量均服从正态分布 两个连续变量无线性相关 筛选与目标连续变量线性相关的连续特征
4 两个连续变量的关系 Spearman秩相关分析 两个连续变量非正态分布(非参数检验) 两个连续变量无秩相关 不满足正态分布时,替代Pearson的特征筛选
3.3.2 检验代码实现与结果
  • 分类变量 vs 目标变量:卡方检验 / Fisher精确检验
  • 连续变量 vs 目标变量:t检验 / Mann-Whitney U检验
  • 输出:各变量的显著性检验结果表(p值、是否显著)

3.4 多变量关系分析(可选)

  • 相关性热力图:连续变量之间的相关系数矩阵
  • 分组箱线图:不同分类下连续变量的分布对比

4. 特征工程(Feature Engineering)

特征工程的核心目标是提升数据"有效性",针对筛选后的特征,结合业务逻辑和模型特性做定制化优化,让数据更适配建模需求。

4.1 特征筛选

4.1.1 有监督特征筛选
  • 适用场景:有明确目标变量的分类/回归任务(如预测是否违约、预测销售额)。
  • 核心依据:
    1. EDA阶段的统计检验结果(基础方法);
    2. 基于模型的特征重要性 (进阶方法,如树模型feature_importances_、线性模型系数);
    3. 递归特征消除(RFE)、递归特征消除交叉验证(RFECV)。
  • 操作规则(统计检验法):
    • 保留:p < 0.05 的显著相关特征;
    • 删除:p ≥ 0.05 的无关特征。
  • 代码示例(基于模型的特征重要性):
python 复制代码
from sklearn.ensemble import RandomForestClassifier

# 训练随机森林模型,获取特征重要性
rf = RandomForestClassifier(n_estimators=100, random_state=42)
rf.fit(X_train, y_train)

# 特征重要性排序
feature_importance = pd.DataFrame({
    'feature': X_train.columns,
    'importance': rf.feature_importances_
}).sort_values(by='importance', ascending=False)

# 筛选前N个重要特征(或按阈值筛选)
top_features = feature_importance[feature_importance['importance'] > 0.01]['feature'].tolist()
X_train_selected = X_train[top_features]
X_test_selected = X_test[top_features]
4.1.2 无监督特征筛选
  • 适用场景:
    1. 无目标变量的任务(如聚类、异常检测);
    2. 有监督任务中前置降噪(在有监督筛选前,先删除无效特征,提升后续步骤效率)。
  • 核心方法:
    1. 方差阈值法:删除方差小于阈值的特征(无区分度,如全为0的特征);
    2. 高相关性筛选:删除特征之间相关系数过高的冗余特征(如相关系数>0.9的两个特征,保留其中一个);
    3. 缺失率阈值法:删除缺失率过高的特征(如缺失率>80%的特征,无有效信息)。
  • 操作规则:
    • 方差阈值:通常设置为0(删除常量特征),或根据业务调整;
    • 相关系数阈值:通常设置为0.8~0.9(删除高度冗余特征);
    • 缺失率阈值:通常设置为0.7~0.8(删除无有效信息的特征)。
  • 代码示例(组合方法):
python 复制代码
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
import numpy as np

# 1. 缺失率筛选:删除缺失率>80%的特征
missing_rate = X.isnull().sum() / len(X)
X_filtered = X.loc[:, missing_rate <= 0.8]

# 2. 方差阈值筛选:删除常量/低方差特征
vt = VarianceThreshold(threshold=0)  # threshold=0 表示删除方差为0的特征
X_filtered = vt.fit_transform(X_filtered)
# 恢复列名(VarianceThreshold返回的是numpy数组)
X_filtered = pd.DataFrame(X_filtered, columns=X.columns[vt.get_support()])

# 3. 高相关性筛选:删除相关系数>0.9的冗余特征
corr_matrix = X_filtered.corr().abs()
# 构建上三角矩阵,避免重复计算
upper_triangle = corr_matrix.where(np.triu(np.ones(corr_matrix.shape), k=1).astype(bool))
# 找到相关系数>0.9的特征列
to_drop = [column for column in upper_triangle.columns if any(upper_triangle[column] > 0.9)]
X_filtered = X_filtered.drop(columns=to_drop)
4.1.3 组合使用策略
  • 无监督任务:仅使用无监督特征筛选
  • 有监督任务:先无监督筛选(降噪),后有监督筛选(精准筛选),既提升效率,又保证筛选的精准性。

4.2 类别型特征和数值型特征区分

  • 类别型特征:需结合业务判断是否具有数值关系,是否是单纯的分类
  • 数值型特征:
    • 包含连续型和离散型,针对连续型数据需查看每一列是否符合正态分布
    • 查看某一个数值型变量的分布,若不符合正态分布可log化后再次验证
    • 若需统一标准化一批数据,需剔除已正态化的数据
    • 正态化原因:部分场景下可加快模型收敛,部分模型(如GMM、KNN)要求数据正态;无需严格正态,保证数据不过度偏态即可,过度偏态可能影响模型预测结果

4.3 缺失值处理(进阶)

核心差异:与预处理阶段的对比
维度 预处理阶段(基础清洗) 特征工程阶段(进阶优化)
处理目标 保证数据"可用",填补空值即可 保证特征"有效",填补值需适配业务/模型
处理粒度 全量特征统一策略(如所有数值特征用中位数填充) 按特征重要性/业务含义定制策略
处理方法 通用统计方法(均值、中位数、众数) 业务导向/模型导向方法
进阶处理深度选择(效率 vs 效果)
目标优先级 适用场景 处理程度 具体操作 耗时
效率优先 快速原型验证(POC)、1天内出demo、初步验证数据建模价值 极简处理(仅修正核心特征明显问题) 1. 核心特征(Top3):按业务分组填充(如按职业填收入中位数); 2. 非核心特征:沿用预处理策略 10-20分钟
平衡效率与效果 企业常规业务建模(用户流失预测、销量预测等)、需保证模型可用且有一定精度 中等深度(聚焦核心特征优化) 1. 核心特征(Top5):分箱填充/简单模型填充(随机森林单特征预测); 2. 非核心特征:分组填充/沿用预处理 1-2小时
效果优先 数据竞赛冲榜、高精度业务建模(风控、医疗、金融定价)、需极致模型精度 深度处理(全维度最小化信息损失) 1. 核心特征:多模型融合填充+缺失标记(新增"是否缺失"特征); 2. 非核心特征:模型填充/分组填充 3-6小时
进阶处理方法示例
  • 高重要性数值特征:分箱填充 (如按年龄分组,用每组的中位数填充)、模型预测填充(用其他特征训练模型预测缺失值);
  • 高重要性分类特征:业务规则填充(如"婚姻状态"缺失,结合"是否有配偶贷款"字段填充);
  • 模型适配优化:树模型对缺失值不敏感,可保留缺失值编码;线性模型需精准填充,避免引入偏差。
代码示例(模型预测填充)
python 复制代码
from sklearn.ensemble import RandomForestRegressor

# 选择高重要性特征(如income)作为待填充特征
# 分离有值和无值的样本
train_income = X_filtered[X_filtered['income'].notnull()]
test_income = X_filtered[X_filtered['income'].isnull()]

# 用其他特征预测income的缺失值
X_train = train_income.drop('income', axis=1)
y_train = train_income['income']
X_test = test_income.drop('income', axis=1)

# 训练填充模型
fill_model = RandomForestRegressor(n_estimators=100, random_state=42)
fill_model.fit(X_train, y_train)

# 预测并填充
pred_income = fill_model.predict(X_test)
X_filtered.loc[X_filtered['income'].isnull(), 'income'] = pred_income

4.4 异常值处理(进阶)

核心差异:与预处理阶段的对比
维度 预处理阶段(基础清洗) 特征工程阶段(进阶优化)
处理目标 消除统计极端值对EDA的干扰 消除异常值对模型拟合的负面影响
处理粒度 全量特征统一检测(如3σ法则) 按特征业务含义/模型敏感度定制策略
处理方法 通用方法(删除、盖帽法) 业务适配/模型适配方法
进阶处理深度选择(效率 vs 效果)
目标优先级 适用场景 处理程度 具体操作 耗时
效率优先 快速原型验证(POC)、1天内出demo、初步验证数据建模价值 极简处理(仅修正核心特征明显错误) 1. 核心特征:简单业务规则修正(如年龄限0-100); 2. 非核心特征:轻度盖帽(99分位数) 10-20分钟
平衡效率与效果 企业常规业务建模(用户流失预测、销量预测等)、需保证模型可用且有一定精度 中等深度(聚焦核心特征优化) 1. 核心特征:业务适配处理(收入对数变换、金额缩尾); 2. 非核心特征:盖帽法(95/99分位数) 1-2小时
效果优先 数据竞赛冲榜、高精度业务建模(风控、医疗、金融定价)、需极致模型精度 深度处理(精准识别+业务适配) 1. 核心特征:异常检测(IQR+孤立森林)+ 业务适配处理; 2. 非核心特征:模型适配处理(线性缩尾、树模型保留) 3-6小时
进阶处理方法示例
  • 业务适配:"收入"字段的极端值可能是高净值用户,不删除,而是对数变换降低偏态;"年龄"字段的150岁值是错误值,需替换为合理上限(如100岁);
  • 模型适配:线性模型对异常值敏感,需严格盖帽;树模型对异常值不敏感,可保留或轻度处理。
代码示例(业务导向的异常值处理)
python 复制代码
# 收入字段:对数变换降低极端值影响(保留高收入用户信息)
X_filtered['income_log'] = np.log1p(X_filtered['income'])

# 年龄字段:错误值替换(150岁以上替换为100岁)
X_filtered['age'] = X_filtered['age'].apply(lambda x: 100 if x > 100 else x)

4.5 数据分桶

  • 固定宽度分箱
  • 分位数分箱

4.6 特征构造(可选)

  • 示例:收入/负债比、逾期次数汇总、年龄分组、消费频率

4.7 特征转换

  • 数值型特征:标准化(StandardScaler)、归一化(MinMaxScaler)
  • 分类型特征:独热编码(One-Hot Encoding)、标签编码(Label Encoding)

4.8 特征交互和特征编码

  • 编码方式:labelencode
  • 数值转换:归一化

4.9 特征降维(可选)

  • 主成分分析(PCA)、线性判别分析(LDA)
  • 注意:降维是无监督特征筛选的补充,而非替代。降维后生成的新特征失去了原有的业务解释性,适用于对解释性要求不高的场景。

5. 模型构建与评估

5.1 数据集划分

  • 核心逻辑:将处理后的特征数据划分为训练集、验证集(可选)、测试集,避免数据泄露
  • 常用比例:训练集70%-80%,测试集20%-30%;若需验证集,可从训练集中再拆分10%-20%
  • 代码示例:
python 复制代码
from sklearn.model_selection import train_test_split

# 特征与目标变量分离
X = data_train_filtered.drop('target', axis=1)
y = data_train_filtered['target']

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y  # stratify保证目标变量分布一致
)

# 可选:划分验证集
X_train, X_val, y_train, y_val = train_test_split(
    X_train, y_train, test_size=0.1, random_state=42, stratify=y_train
)

5.2 模型选择与训练

  • 分类任务常用模型:逻辑回归、决策树、随机森林、XGBoost、LightGBM、神经网络等
  • 回归任务常用模型:线性回归、岭回归、Lasso回归、随机森林回归、XGBoost回归等
  • 无监督任务常用模型:K-Means、DBSCAN、层次聚类、孤立森林(异常检测)等
  • 代码示例(以分类任务为例):
python 复制代码
from sklearn.ensemble import RandomForestClassifier
from xgboost import XGBClassifier

# 基础模型训练(随机森林)
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 进阶模型训练(XGBoost)
xgb_model = XGBClassifier(learning_rate=0.1, n_estimators=100, random_state=42)
xgb_model.fit(X_train, y_train, eval_set=[(X_val, y_val)], early_stopping_rounds=10)

5.3 模型评估指标计算

5.3.1 分类任务评估指标
  • 基础指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1值、AUC-ROC、混淆矩阵
  • 代码示例:
python 复制代码
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score, confusion_matrix

# 模型预测
y_pred = xgb_model.predict(X_test)
y_pred_proba = xgb_model.predict_proba(X_test)[:, 1]

# 计算指标
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
auc = roc_auc_score(y_test, y_pred_proba)
conf_matrix = confusion_matrix(y_test, y_pred)

print(f"准确率:{accuracy:.4f}")
print(f"精确率:{precision:.4f}")
print(f"召回率:{recall:.4f}")
print(f"F1值:{f1:.4f}")
print(f"AUC值:{auc:.4f}")
print("混淆矩阵:\n", conf_matrix)
5.3.2 回归任务评估指标
  • 基础指标:均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)、决定系数(R²)
  • 代码示例:
python 复制代码
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

# 模型预测(回归)
y_pred_reg = xgb_reg_model.predict(X_test)

# 计算指标
mse = mean_squared_error(y_test, y_pred_reg)
rmse = mean_squared_error(y_test, y_pred_reg, squared=False)
mae = mean_absolute_error(y_test, y_pred_reg)
r2 = r2_score(y_test, y_pred_reg)

print(f"MSE:{mse:.4f}")
print(f"RMSE:{rmse:.4f}")
print(f"MAE:{mae:.4f}")
print(f"R²:{r2:.4f}")
5.3.3 无监督任务评估指标(补充)
  • 聚类任务:轮廓系数(Silhouette Score)、Calinski-Harabasz指数、Davies-Bouldin指数
  • 异常检测任务:精确率、召回率、F1值、AUC-ROC(若有标注数据)

5.4 模型调优

  • 常用方法:网格搜索(GridSearchCV)、随机搜索(RandomizedSearchCV)、贝叶斯优化
  • 代码示例(网格搜索):
python 复制代码
from sklearn.model_selection import GridSearchCV

# 定义参数网格
param_grid = {
    'n_estimators': [50, 100, 200],
    'max_depth': [3, 5, 7],
    'learning_rate': [0.01, 0.1, 0.2]
}

# 网格搜索
grid_search = GridSearchCV(
    estimator=XGBClassifier(random_state=42),
    param_grid=param_grid,
    cv=5,  # 5折交叉验证
    scoring='roc_auc',  # 分类任务以AUC为评分标准
    n_jobs=-1
)

grid_search.fit(X_train, y_train)
print("最优参数:", grid_search.best_params_)
print("最优交叉验证得分:", grid_search.best_score_)

# 最优模型
best_model = grid_search.best_estimator_

5.5 模型解释与落地(可选)

  • 模型解释:SHAP值、特征重要性、部分依赖图(PDP)等,解释模型决策逻辑
  • 模型落地:模型保存(pickle/joblib)、部署为API、离线批量预测等
  • 代码示例(模型保存与加载):
python 复制代码
import joblib

# 保存模型
joblib.dump(best_model, 'best_xgb_model.pkl')

# 加载模型
loaded_model = joblib.load('best_xgb_model.pkl')

# 离线预测
new_data_pred = loaded_model.predict(new_data)

补充:常见的命名误区

不规范的命名 规范的命名 归属层级
数据处理 数据预处理 独立大模块
缺失值处理 数据清洗 数据预处理的子模块
统计检验 探索性数据分析(EDA) 独立大模块
特征筛选 特征工程 独立大模块
模型调参 模型调优 模型构建与评估的子模块
无监督降维 无监督特征筛选/特征降维 特征工程的子模块

总结

  1. 核心流程划分:数据加载→数据预处理→EDA→特征工程→模型构建与评估,各模块边界清晰,前序模块为后序模块提供数据/结果支撑;
  2. 特征筛选是特征工程的核心步骤,分为有监督无监督两类,需根据任务类型选择合适的方法,有监督任务建议组合使用(先无监督降噪,后有监督精准筛选);
  3. 统计检验归属EDA,是有监督特征筛选的基础方法;无监督特征筛选适用于无目标变量的场景,或作为有监督筛选的前置步骤;
  4. 缺失值/异常值处理在预处理和特征工程阶段的核心差异:预处理解决"可用性"(通用清洗),特征工程解决"有效性"(定制化优化);进阶优化深度需按"效率优先/平衡/效果优先"选择,仅数据质量极高+树模型+快速验证场景可简化;
  5. 模型构建与评估需注重数据集划分的合理性,选择适配任务类型的评估指标,通过调优提升模型性能,可选做模型解释与落地。
相关推荐
乾元4 小时前
如何把 CCIE / HCIE 的实验案例改造成 AI 驱动的工程项目——从“实验室能力”到“可交付系统”的完整迁移路径
大数据·运维·网络·人工智能·深度学习·安全·机器学习
GZKPeng4 小时前
pytorch +cuda成功安装后, torch.cuda.is_available 是False
人工智能·pytorch·python
你怎么知道我是队长4 小时前
C语言---printf函数使用详细说明
c语言·开发语言
我的xiaodoujiao4 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 39--生成 Allure测试报告
python·学习·测试工具·pytest
liulilittle4 小时前
俄罗斯访问欧洲国际线路优化
开发语言·网络·信息与通信·ip·通信·俄罗斯·莫斯科
QBoson4 小时前
量子机器学习用于药物发现:系统综述
人工智能·机器学习·量子计算
陈小桔4 小时前
logging模块-python
开发语言·python
消失的旧时光-19434 小时前
函数指针 + 结构体 = C 语言的“对象模型”?——从 C 到 C++ / Java 的本质统一
linux·c语言·开发语言·c++·c
!停4 小时前
C语言栈和队列的实现
开发语言·数据结构