数据科学
数据科学是一门通过统计学、计算机科学和领域知识从数据中提取知识和洞察的交叉学科。在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]\) 区间:
- Z-score Standardization:将数据转化为均值为0、标准差为1的分布:
标准化对于基于距离的算法(如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 \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:
特征提取 (Feature Extraction)
特征提取通过数学变换将原始高维特征映射到低维空间,同时尽可能保留重要信息。
PCA(主成分分析) 是最经典的线性降维方法。其核心思想是找到数据方差最大的方向(即主成分),将数据投影到这些方向上:
- 对数据矩阵进行中心化:\(X' = X - \bar{X}\)
- 计算协方差矩阵:\(C = \frac{1}{N} X'^T X'\)
- 对协方差矩阵做特征值分解,取最大的 \(k\) 个特征值对应的特征向量
- 将数据投影到这 \(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) 的具体步骤:
- 对每个少数类样本 \(x_i\),找到其 \(k\) 个最近邻(同类)
- 随机选择一个邻居 \(x_{nn}\)
- 在 \(x_i\) 和 \(x_{nn}\) 之间随机插值生成新样本:\(x_{new} = x_i + \lambda \cdot (x_{nn} - x_i)\),其中 \(\lambda \in [0, 1]\)
(2)算法层面
- Cost-sensitive Learning(代价敏感学习):为不同类别赋予不同的误分类代价。在损失函数中,少数类的权重更高:
其中少数类的 \(w\) 远大于多数类。大多数框架(如Scikit-learn的 class_weight='balanced')都支持自动计算权重。
- Focal Loss:由Facebook在RetinaNet中提出,通过降低易分类样本的损失权重,让模型聚焦于难分类样本:
不平衡数据的评估指标
在不平衡场景下,准确率(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系统需要同时监控模型性能指标和输入数据质量指标,并在检测到显著漂移时触发模型重训练。