Skip to content

数据科学

数据科学是一门通过统计学、计算机科学和领域知识从数据中提取知识和洞察的交叉学科。在AI/ML领域,数据科学是构建高质量模型的基石——数据的质量和处理方式往往比模型本身更能决定最终效果。

数据科学与AI的关系

数据是AI的燃料

现代AI的成功在很大程度上依赖于数据。无论是传统机器学习还是深度学习,模型的性能上限由数据质量决定。业界有一句经典的说法:"Garbage in, garbage out"——如果输入的数据是垃圾,那么模型的输出也将毫无价值。

数据科学在AI/ML Pipeline中的定位如下:

Raw Data → 数据采集 → 数据清洗 → EDA → 特征工程 → 模型训练 → 模型评估 → 部署上线
           \_________________________数据科学________________________/

从原始数据到模型:Data Science Workflow

一个完整的数据科学工作流通常包括以下步骤:

阶段 核心任务 常用工具
问题定义 明确业务目标,转化为ML问题
数据采集 爬虫、API、数据库查询、传感器 Scrapy, SQL, Spark
数据清洗 缺失值、重复值、异常值处理 Pandas, NumPy
探索性数据分析 统计描述、可视化、假设检验 Matplotlib, Seaborn
特征工程 特征选择、提取、变换 Scikit-learn, Featuretools
模型构建 选择算法、训练模型 Scikit-learn, XGBoost, PyTorch
模型评估 交叉验证、指标分析 Scikit-learn
部署与监控 模型服务化、数据漂移监控 MLflow, Docker, Kubernetes

在实际工业场景中,数据准备阶段(采集、清洗、EDA、特征工程)通常占据整个项目 60%-80% 的时间。这充分说明了数据科学能力对AI项目成功的重要性。


数据类型与结构

理解数据类型是一切数据工作的前提。不同类型的数据需要不同的处理策略和模型架构。

按结构化程度分类

类型 定义 示例 常用存储
Structured Data 有固定Schema的表格型数据 用户表、交易记录、传感器读数 SQL数据库、CSV
Semi-structured Data 有层次结构但不是严格表格 JSON、XML、日志文件 NoSQL (MongoDB)、Elasticsearch
Unstructured Data 无预定义结构 文本、图像、音频、视频 对象存储 (S3)、文件系统

在AI领域中,结构化数据通常使用传统ML模型(如XGBoost、Random Forest)处理;非结构化数据则更多依赖深度学习模型(如CNN处理图像、Transformer处理文本)。

特征类型

在机器学习中,每一列数据被称为一个特征(Feature)。特征可按其数学性质分为:

特征类型 说明 示例 常见处理方法
Numerical(数值型) 连续或离散的数值 年龄、收入、温度 标准化、归一化
Categorical(类别型) 无序的类别标签 性别、城市、颜色 One-hot Encoding、Label Encoding
Ordinal(有序型) 有自然顺序的类别 学历(高中<本科<硕士)、评分(1-5星) Ordinal Encoding
Temporal(时间型) 时间戳或时间序列 订单日期、心跳信号 提取年/月/周/小时、滑动窗口
Text(文本型) 自然语言文本 评论、新闻标题 TF-IDF、Word2Vec、BERT Embedding

数值标准化是最常见的预处理操作之一。常见方法包括:

  • Min-Max Normalization:将数据缩放到 \([0, 1]\) 区间:
\[ x' = \frac{x - x_{\min}}{x_{\max} - x_{\min}} \]
  • Z-score Standardization:将数据转化为均值为0、标准差为1的分布:
\[ x' = \frac{x - \mu}{\sigma} \]

标准化对于基于距离的算法(如KNN、SVM)和梯度下降优化的模型(如神经网络)尤为重要,因为特征尺度不一致会导致某些特征主导模型学习。


探索性数据分析 (EDA)

探索性数据分析(Exploratory Data Analysis, EDA) 是在建模之前对数据进行系统性探索的过程。其目的是理解数据分布、发现模式、检测异常、验证假设,从而为后续的特征工程和模型选择提供依据。

统计描述与分布

首先需要了解每个特征的基本统计量:

统计量 公式 作用
均值 (Mean) \(\bar{x} = \frac{1}{N}\sum_{i=1}^{N} x_i\) 衡量数据的中心位置
中位数 (Median) 排序后第 \(\frac{N+1}{2}\) 个值 对异常值鲁棒的中心度量
标准差 (Std) \(\sigma = \sqrt{\frac{1}{N}\sum_{i=1}^{N}(x_i - \bar{x})^2}\) 衡量数据的离散程度
偏度 (Skewness) \(\frac{1}{N}\sum\left(\frac{x_i - \bar{x}}{\sigma}\right)^3\) 衡量分布的对称性
峰度 (Kurtosis) \(\frac{1}{N}\sum\left(\frac{x_i - \bar{x}}{\sigma}\right)^4 - 3\) 衡量分布尾部的厚度

如果偏度绝对值大于1,说明分布严重偏斜,可能需要进行对数变换或Box-Cox变换来纠正。

相关性分析

Pearson相关系数衡量两个变量之间的线性相关性:

\[ r_{xy} = \frac{\sum_{i=1}^{N}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{N}(x_i - \bar{x})^2 \cdot \sum_{i=1}^{N}(y_i - \bar{y})^2}} \]

其中 \(r \in [-1, 1]\)\(|r|\) 越接近1表示线性相关性越强。需要注意的是,Pearson相关系数只能捕捉线性关系。对于非线性关系,可以使用 Spearman秩相关互信息(Mutual Information)

在特征选择中,高相关特征(如 \(|r| > 0.9\))意味着信息冗余,通常需要去除其中一个以避免多重共线性问题。

可视化方法

图表类型 适用场景 能揭示的信息
Histogram(直方图) 单变量分布 数据的分布形态、偏斜程度
Box Plot(箱线图) 单变量分布 + 异常值 四分位数、异常值(超出1.5倍IQR的点)
Scatter Plot(散点图) 双变量关系 变量间的相关性、聚类趋势
Heatmap(热力图) 多变量相关性 特征间的相关矩阵
Pair Plot(配对图) 多变量关系 所有特征两两之间的关系
Violin Plot(小提琴图) 分组分布对比 不同类别下特征分布的差异

缺失值分析

缺失值的处理策略取决于缺失机制:

  • MCAR (Missing Completely At Random):缺失与其他任何变量无关。可以直接删除或填充。
  • MAR (Missing At Random):缺失与其他观测变量有关。需要根据相关变量进行条件填充。
  • MNAR (Missing Not At Random):缺失与缺失值本身有关。最难处理,需要领域知识。

常见的处理方法包括:删除含缺失值的行/列、均值/中位数/众数填充、基于模型的填充(如KNN Imputation)、以及将缺失作为一个独立的特征(Missing Indicator)。

异常值检测

常用的异常值检测方法:

  • IQR方法:若 \(x < Q_1 - 1.5 \times \text{IQR}\)\(x > Q_3 + 1.5 \times \text{IQR}\),则视为异常值。其中 \(\text{IQR} = Q_3 - Q_1\)
  • Z-score方法:若 \(|z| > 3\)(即偏离均值超过3个标准差),则视为异常值。
  • Isolation Forest:基于随机森林的思想,异常点更容易被"隔离"(需要更少的分割次数)。

异常值不一定需要删除——在欺诈检测等场景中,异常值恰恰是我们需要识别的目标。


特征工程 (Feature Engineering)

特征工程(Feature Engineering) 是将原始数据转化为模型可以高效学习的特征的过程。好的特征工程能够显著提升模型性能,有时甚至比更换更复杂的模型架构更有效。Andrew Ng曾说过:"Applied machine learning is basically feature engineering."

特征选择 (Feature Selection)

特征选择的目标是从所有可用特征中选出最有价值的子集,去除无关和冗余特征。

方法类别 原理 代表方法 优缺点
Filter(过滤法) 独立于模型,基于统计指标排序 方差阈值、互信息、卡方检验、Pearson相关 速度快,但忽略特征间交互
Wrapper(包裹法) 以模型性能为评价标准 前向选择、后向消除、递归特征消除(RFE) 性能好,但计算开销大
Embedded(嵌入法) 模型训练过程中自动选择 L1正则化(Lasso)、树模型特征重要性 兼顾效率和性能

L1正则化(Lasso) 能产生稀疏权重,自动将不重要特征的系数压缩为0:

\[ J(\theta) = \text{Loss}(\theta) + \lambda \sum_{j=1}^{d} |\theta_j| \]

特征提取 (Feature Extraction)

特征提取通过数学变换将原始高维特征映射到低维空间,同时尽可能保留重要信息。

PCA(主成分分析) 是最经典的线性降维方法。其核心思想是找到数据方差最大的方向(即主成分),将数据投影到这些方向上:

  1. 对数据矩阵进行中心化:\(X' = X - \bar{X}\)
  2. 计算协方差矩阵:\(C = \frac{1}{N} X'^T X'\)
  3. 对协方差矩阵做特征值分解,取最大的 \(k\) 个特征值对应的特征向量
  4. 将数据投影到这 \(k\) 个特征向量构成的子空间中

t-SNE(t-Distributed Stochastic Neighbor Embedding) 是一种非线性降维方法,特别擅长在二维或三维空间中可视化高维数据。它通过在高维和低维空间中分别构建概率分布,然后最小化两个分布之间的KL散度来实现降维。t-SNE常用于可视化Word Embedding、图像特征空间、聚类结果等。

UMAP(Uniform Manifold Approximation and Projection) 是t-SNE的改进版本,在保持局部结构的同时更好地保留全局结构,且计算速度更快。在大规模数据集上,UMAP通常是比t-SNE更好的选择。

Autoencoder(自编码器) 是一种基于神经网络的非线性降维方法。通过训练一个编码器-解码器结构,编码器将输入压缩为低维表示(Bottleneck),解码器再从低维表示重建输入。Bottleneck层的输出即为提取的特征。

特征变换 (Feature Transformation)

变换方法 适用场景 公式/说明
Log变换 右偏分布 \(x' = \log(x + 1)\)
Polynomial变换 捕捉非线性关系 \((x_1, x_2) \to (x_1, x_2, x_1^2, x_1 x_2, x_2^2)\)
Binning(分箱) 将连续变量离散化 将年龄分为:青年/中年/老年
Box-Cox变换 使数据更接近正态分布 \(x' = \frac{x^\lambda - 1}{\lambda}, \lambda \neq 0\)
Target Encoding 将类别特征编码为目标变量的统计量 将城市编码为该城市的平均房价

特征重要性与可解释性

模型训练完成后,理解哪些特征对预测贡献最大至关重要:

  • 树模型特征重要性:基于特征在所有树中的分裂增益之和
  • Permutation Importance:随机打乱某个特征的值,观察模型性能的下降幅度
  • SHAP(SHapley Additive exPlanations):基于博弈论的Shapley值,为每个样本的每个特征分配一个贡献值。SHAP是目前最流行的模型可解释性工具

数据不平衡问题

在实际场景中(如欺诈检测、疾病诊断、异常检测),正负样本的比例往往严重失衡(例如欺诈交易仅占0.1%)。此时,模型倾向于将所有样本预测为多数类,导致少数类的识别能力极差。

处理方法

(1)数据层面

方法 原理 优缺点
Random Oversampling 随机复制少数类样本 简单,但容易过拟合
SMOTE 在少数类样本之间插值生成新样本 缓解过拟合,但可能引入噪声
Random Undersampling 随机删除多数类样本 简单,但丢失信息
Tomek Links 删除边界上的多数类样本 清理决策边界,常与其他方法配合

SMOTE(Synthetic Minority Over-sampling Technique) 的具体步骤:

  1. 对每个少数类样本 \(x_i\),找到其 \(k\) 个最近邻(同类)
  2. 随机选择一个邻居 \(x_{nn}\)
  3. \(x_i\)\(x_{nn}\) 之间随机插值生成新样本:\(x_{new} = x_i + \lambda \cdot (x_{nn} - x_i)\),其中 \(\lambda \in [0, 1]\)

(2)算法层面

  • Cost-sensitive Learning(代价敏感学习):为不同类别赋予不同的误分类代价。在损失函数中,少数类的权重更高:
\[ L = -\sum_{i=1}^{N} w_{y_i} \cdot [y_i \log(\hat{y}_i) + (1 - y_i)\log(1 - \hat{y}_i)] \]

其中少数类的 \(w\) 远大于多数类。大多数框架(如Scikit-learn的 class_weight='balanced')都支持自动计算权重。

  • Focal Loss:由Facebook在RetinaNet中提出,通过降低易分类样本的损失权重,让模型聚焦于难分类样本:
\[ FL(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t) \]

不平衡数据的评估指标

在不平衡场景下,准确率(Accuracy)是一个极具误导性的指标。例如,在1000个样本中只有10个正样本的情况下,一个将所有样本预测为负类的模型也能获得99%的准确率。

应使用的指标包括:

指标 适用场景 说明
Precision 关注误报成本 在预测为正的样本中,真正为正的比例
Recall 关注漏报成本 在所有正样本中,被正确识别的比例
F1-Score 综合权衡 Precision和Recall的调和平均
AUC-ROC 阈值无关评估 不同阈值下TPR vs FPR的面积
AUC-PR (PR Curve) 严重不平衡场景 Precision vs Recall的面积,比AUC-ROC更敏感
MCC (Matthews Correlation Coefficient) 整体质量评估 考虑所有四种混淆矩阵情况的相关系数

数据管道 (Data Pipeline)

在生产环境中,数据需要经历一系列自动化的处理流程,从原始数据源流向最终的模型或分析系统。这个自动化流程被称为数据管道(Data Pipeline)

ETL vs ELT

特性 ETL ELT
全称 Extract-Transform-Load Extract-Load-Transform
变换时机 加载前在中间层变换 加载后在目标系统中变换
适用场景 传统数据仓库 云数据湖、大数据平台
计算资源 依赖ETL服务器 利用目标系统的计算能力
代表工具 Informatica, Talend dbt, Snowflake, BigQuery

Batch vs Streaming

特性 Batch Processing Stream Processing
数据处理方式 定时批量处理 实时逐条/微批处理
延迟 分钟到小时级 毫秒到秒级
适用场景 报表生成、模型训练 实时推荐、欺诈检测
代表工具 Spark Batch, Hadoop MapReduce Kafka Streams, Flink, Spark Streaming

在AI/ML场景中,模型训练通常使用Batch Processing(需要处理大量历史数据),而模型推理(Inference)可能需要Stream Processing(如实时推荐系统需要在用户点击时毫秒级返回推荐结果)。

数据质量监控

数据质量是ML系统中最容易被忽视却影响最大的环节。常见的数据质量问题包括:

  • Data Drift(数据漂移):输入数据的分布随时间发生变化。例如,用户行为在疫情期间剧变,导致推荐模型失效。
  • Concept Drift(概念漂移):输入与输出之间的关系发生变化。例如,某个关键词从正面含义变为负面含义。
  • Schema变更:上游系统修改了数据格式或字段含义。
  • 数据延迟/缺失:某个数据源在特定时间段内没有产生数据。

监控手段包括:统计量对比(均值、方差的变化率)、分布检验(KS检验、PSI)、以及数据质量规则引擎(Great Expectations、Deequ)。

一个健壮的ML系统需要同时监控模型性能指标输入数据质量指标,并在检测到显著漂移时触发模型重训练。


评论 #