什么是数据科学?
数据科学不只是机器学习,不只是统计学,也不只是编程。
数据科学是从数据中提取有用知识的学科。这项工作大多并不光鲜:清洗杂乱的电子表格,提出正确的问题,并向不关心你代码的人传达结果。
典型的数据科学流程如下:
1. 收集:从数据库、API、CSV 文件或网页抓取中获取原始数据
2. 清洗:处理缺失值、修正数据类型、删除重复项
3. 探索:可视化数据分布、发现规律、提出问题
4. 特征工程:创建有助于模型学习的新特征
5. 建模:训练算法、评估性能、反复迭代
6. 沟通:向做决策的利益相关者展示发现
如果你用过 Excel 的数据透视表、条件格式或 VLOOKUP,就已经完成了第 1 到 3 步。本课将这段经验与业界使用的基于 Python 的工作流程衔接起来。
热身
你的数据经验
每个人都用过某种形式的数据:预算电子表格、成绩记录表、健身应用,甚至是带播放次数的歌单。
垃圾进,垃圾出
为什么数据清洗很重要
数据科学家把 60% 到 80% 的时间花在清洗数据上。这并非夸张:各行业的调查一致得出这个结果。
原因很简单:垃圾进,垃圾出。如果数据含有错误、缺失值或格式不一致的内容,建立其上的每一项分析都会出错。用脏数据训练的完美模型,只会给出信心十足的错误答案。
常见的数据问题
- 缺失值:单元格为空白。这些数据没有被收集,还是该值其实为零?两种情况不同,需要不同的处理方式。
- 数据类型错误:一列数字被存成文本,日期格式不一致(01/02/2024:这是 1 月 2 日,还是 2 月 1 日?)
- 离群值:薪资列中有一条记录为 $1,000,000,000。这是真实数据,还是笔误?无论哪种,它都会拉偏你的平均值。
- 重复记录:两个系统合并得不完美,同一条记录出现了两次
- 分类编码:某一列里有 'Yes'、'yes'、'Y'、'TRUE' 和 '1'。它们都表示同一个意思,但计算机并不知道。
在 pandas(标准的 Python 数据库)中,你可以用 dropna()、fillna()、astype() 和 drop_duplicates() 等方法处理这些问题。但难点不在代码,而在于决定对每个问题该怎么做。
清洗决策
决定怎么做
来看一个真实场景。你有一个包含 10,000 条客户记录的数据集,其中 'age'(年龄)列有 500 个缺失值。
你的选择:
- 删除这些行:移除全部 500 条记录。做法简单,但会损失 5% 的数据。如果这 500 位客户有共同特征(比如出于隐私顾虑而跳过了年龄字段),删除他们就会引入偏差。
- 用均值填充:用平均年龄替换空白。快捷,但会人为降低年龄列的方差。
- 用中位数填充:如果年龄分布有偏(少数极年长或极年幼的客户拉动了平均值),中位数比均值更合适。
- 使用标记:新建一列 'age_missing'(1 或 0),并用中位数填充原列。这样模型就能学习缺失本身是否带有信息。
没有放之四海而皆准的正确答案。选择取决于数据为何缺失 & 你打算如何使用这些数据。
提出正确的问题
探索性数据分析(EDA)
在构建任何模型之前,你需要先了解自己的数据。EDA 是对数据集进行汇总、可视化与质疑的过程,目的是发现其中的模式、异常与关系。
关键工具
- 直方图:展示单个变量的分布。它是钟形的吗?偏斜的吗?双峰的吗(有两个峰值)?收入的直方图总是右偏的,因为少数人的收入远高于大多数人。
- 散点图:展示两个变量之间的关系。个子高的人体重更重吗?学习时间越长,成绩越高吗?图中呈现的规律(或没有规律)会告诉你两者之间是否存在关系。
- 相关性:一个介于 -1 和 +1 之间的数,用来衡量线性关联。+1 表示完全正相关,-1 表示完全负相关,0 表示没有线性关系。但相关不等于因果:冰淇淋销量和溺水死亡人数相关,是因为两者在夏季都会增加。
- 汇总统计量:均值、中位数、标准差、最小值、最大值。在 pandas 中,df.describe() 一行代码就能给出所有这些数值。
真正的技能
工具很容易学会,难的是提出正确的问题。糟糕的问题:"数据说明了什么?"好的问题:"在第一周内联系客服的客户,留存率是否更高?"
相关性陷阱
相关性与因果关系
这是数据素养中最重要的一个概念。两个变量可以高度相关,却并非一方导致另一方。
经典例子:
- 消防员越多的城市,火灾也越多。(大城市两者都多。)
- 吃早餐的学生成绩更好。(也许富裕家庭更有可能既提供早餐,也提供学业支持。)
- 巧克力消费量越高的国家,获得诺贝尔奖越多。(两者都与国家财富相关。)
这个隐藏因素称为混杂变量:它是第三个变量,同时驱动你正在观察的那两个变量。
创建有用的变量
什么是特征工程?
特征是模型用来做出预测的输入变量。特征工程是一门艺术:从原始数据中创建新特征,帮助模型学习它们原本看不到的模式。
原始数据很少直接符合模型的需要。以一个包含“出生日期”列的数据集为例。模型很难利用原始日期做什么。但如果你从中创建一个“年龄”特征,模型就能学习基于年龄的模式。
常用技巧
- 归一化:把数值缩放到统一范围(0 到 1,或均值为 0 & 标准差为 1)。缺少这一步,以千计的特征(薪资)会压过以个位数计的特征(工作年限)。
- 独热编码:把类别变量转换成二值列。一个 'color' 列含有 [red, blue, green] 三个取值,会变成三列:'color_red'、'color_blue'、'color_green',每列取值为 0 或 1。
- 分箱:把连续变量变成类别。年龄 0-17 归为 'minor',18-64 归为 'adult',65 岁以上归为 'senior'。当变量之间的关系不呈线性时,分箱有帮助。
- 交互特征:把两个特征相乘。"面积乘以浴室数量"预测房价的效果,可能胜过单独使用任何一个特征。
- 领域知识:最强大的技术。为医学模型构建特征的医生,知道哪些化验指标重要。营销人员知道"距上次购买的天数"比"购买日期"更有用。没有任何算法能取代这种知识。
特征练习
应用特征工程
假设你正在构建一个模型,预测哪些客户下个月会取消流媒体订阅。你的原始数据包括:
- 账户创建日期
- 最近一次登录日期
- 上个月观看的节目数量
- 每月付款金额
- 提交的客户支持工单数量
- 国家/地区
训练集/测试集划分
为什么要划分数据
建模中最重要的规则:绝不用训练过的同一批数据来评估模型。
否则,模型只需死记答案。它在训练数据上会得满分,却在全新的、没见过的数据上表现糟糕。这叫过拟合:模型学到的是你这份数据集中的噪声,而不是真正的规律。
标准做法是拆分数据:
- 训练集(通常占 70-80%):模型从中学习
- 测试集(通常占 20-30%):预先留出,只用于评估最终模型
在 scikit-learn 中:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
常见算法
- 线性回归:在数据中画出拟合效果最好的直线。简单,易于解释,适用于关系大致呈线性的情况。预测一个数值(价格、温度、分数)。
- 决策树:由一连串是/否问题组成的流程图。易于理解和解释。除非经过剪枝或限制深度,否则容易过拟合。
- 随机森林:许多决策树共同投票。比单棵决策树更准确,更不容易过拟合,但更难解释。
过拟合与欠拟合
- 过拟合:模型过于复杂。它死记硬背训练数据,连噪声也一并记住。训练数据上的准确率高,测试数据上的准确率低。
- 欠拟合:模型过于简单。它无法捕捉真实的规律。训练数据和测试数据上的准确率都低。
目标是找到两者之间的最佳平衡点。
评估指标
如何判断模型好不好?
仅看准确率可能会产生误导。如果 95% 的邮件都不是垃圾邮件,那么一个永远回答"不是垃圾邮件"的模型准确率高达 95%,却完全没用。
关键指标:
- 准确率(Accuracy):预测正确的百分比。在各类别数量均衡时很有用。
- 精确率(Precision):在模型标记为正类的所有样本中,实际为正类的占多少?精确率高意味着误报少。
- 召回率(Recall):在所有实际为正类的样本中,模型找出了多少?召回率高意味着漏报少。
- F1 分数:精确率与召回率的调和平均数。需要兼顾两者时很有用。
- RMSE(均方根误差):用于回归(预测数值)。预测值平均偏离真实值多远?
哪个指标最重要,取决于具体问题。检测癌症时,召回率更重要:你不想漏掉任何一个病例。过滤垃圾邮件时,精确率更重要:你不想删掉一封真正的邮件。
数据分析师、数据科学家与机器学习工程师的区别
三种不同的角色
数据领域有三条主要的职业路径,& 它们所需的技能各不相同。
数据分析师
- 重点:用现有数据回答商业问题
- 工具:SQL、Excel、Tableau、基础 Python 或 R
- 日常工作:仪表盘、报告、A/B 测试分析、向利益相关者做演示
- 入门路径:通常最容易进入。许多分析师没有计算机科学学位也能起步。
数据科学家
- 重点:构建预测模型 & 在复杂数据中发现规律
- 工具:Python(pandas、scikit-learn、matplotlib)、统计学、SQL、Jupyter notebooks
- 日常工作:探索性数据分析、特征工程、模型构建、实验
- 入行路径:通常需要统计学或定量背景。训练营 & 自学同样可行。
机器学习工程师
- 重点:在生产系统中部署 & 扩展模型
- 工具:Python、TensorFlow/PyTorch、Docker、云平台(AWS/GCP)、API
- 日常工作:模型优化、流水线基础设施、监控生产环境中的模型
- 入行路径:通常需要扎实的软件工程技能,外加机器学习知识。
打造作品集
招聘经理看重的是你能做什么,而不只是你学了什么。GitHub 上有 3 到 5 个扎实的项目,比各类证书更有分量。好的项目使用真实(而非玩具)数据集,附带清晰的文档,并展示完整的流程:从杂乱的数据到可执行的洞察。
你的下一步
接下来去哪里
这些行业工具都免费且容易获取:
- pandas:用于数据处理的标准 Python 库
- matplotlib / seaborn:可视化库
- scikit-learn:经典机器学习的主力工具
- Jupyter notebooks:交互式编程环境,可以在其中混合代码、输出和笔记
- Kaggle:提供免费数据集、竞赛,以及一个实践者社区
从一个你感兴趣的真实数据集开始。下载它,清洗它,探索它,并尝试回答一个问题。这一个项目教给你的,会比任何课程都多。