什么是数据科学? [BLOCK_TYPE SECTION/STEP]
数据科学不仅仅是机器学习。它不仅仅是统计学。它也不仅仅是编程。 [BLOCK_TYPE SECTION/STEP]
数据科学是从数据中提取有用知识的学科。其中大部分工作并不光鲜:它包括清洗混乱的电子表格、提出正确的问题,并将结果传达给对你的代码不感兴趣的人。 [BLOCK_TYPE SECTION/STEP]
[BLOCK_TYPE SECTION/STEP]
典型的数据科学流程如下:
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 美元的记录。这是真实的,还是打字错误?无论哪种情况,都会扭曲你的平均值。
- Duplicates: the same record appears twice because two systems merged imperfectly [BLOCK_TYPE cleaning/garbage_in]
- Categorical encoding: a column says 'Yes', 'yes', 'Y', 'TRUE', and '1'. These all mean the same thing, but your computer does not know that. [BLOCK_TYPE cleaning/garbage_in]
[BLOCK_TYPE cleaning/garbage_in]
在 pandas(标准的 Python 数据库)中,你可以使用 dropna()、fillna()、astype() 和 drop_duplicates() 等方法来处理这些问题。但困难之处不在于代码:而在于决定对每个问题该做什么。
[BLOCK_TYPE cleaning/garbage_in]
[BLOCK_TYPE cleaning/cleaning_decisions]
Cleaning Decisions [BLOCK_TYPE cleaning/cleaning_decisions]
Deciding What To Do
[BLOCK_TYPE cleaning/cleaning_decisions]这里有一个真实场景。你有一个包含 10,000 条客户记录的数据集。“age”列有 500 个缺失值。
您的选项:
- 删除行:删除全部500条记录。操作简单,但会损失5%的数据。如果这500名客户具有共同特征(例如他们因注重隐私而跳过了年龄字段),删除这些记录会引入偏差。
- 用均值填充:用平均年龄替换空白值。操作快速,但会人为降低年龄列的方差。
- 用中位数填充:如果年龄分布呈偏态(少数非常年老或非常年轻客户拉高了平均值),中位数填充比均值填充更好。
- 使用标记:创建一个新列名为'age_missing'(取值1或0),并用中位数填充原列。现在模型可以学习缺失本身是否具有信息价值。
没有放之四海而皆准的正确答案。选择取决于数据缺失的原因以及你计划如何使用这些数据。
提出正确的问题
探索性数据分析 (EDA)
在构建任何模型之前,你需要先了解你的数据。EDA 是对数据集进行总结、可视化并提出问题,以发现模式、异常和关系的过程。
关键工具
- 直方图:展示单个变量的分布。它是钟形分布吗?偏斜?双峰(两个峰值)?收入的直方图通常是右偏的,因为少数人收入远高于大多数人。
- 散点图:展示两个变量之间的关系。高个子的人体重更重吗?学习时间更长是否与更高成绩相关?模式(或无模式)可以告诉你是否存在关系。
- 相关性:介于 -1 和 +1 之间的数值,用于衡量线性关联。+1 表示完全正相关,-1 表示完全负相关,0 表示无线性关系。但相关性不等于因果关系:冰淇淋销量和溺水死亡人数相关,是因为两者在夏季都会增加。
- 汇总统计:均值、中位数、标准差、最小值、最大值。在 pandas 中:df.describe() 可以一行代码给出所有这些值。
真正的技能
工具很容易上手。难的是提出正确的问题。糟糕的问题:“数据说了什么?” 好的问题:“第一周内联系支持的客户是否具有更高的留存率?”
相关性陷阱
相关性 vs. 因果关系
这是数据素养中最重要的概念。两个变量可以高度相关,但并不意味着其中一个导致了另一个。
经典例子:
- 消防员更多的城市火灾也更多。(大城市两者都多。)
- 吃早餐的学生成绩更好。(也许更富裕的家庭更有可能提供早餐和学术支持。)
- 吃更多巧克力的国家获得更多诺贝尔奖。(两者都与国家财富相关。)
隐藏因素被称为混杂变量:一个同时驱动你正在观察的两个变量的第三方变量。
创建有用的变量
什么是特征工程?
特征 是模型用来做出预测的输入变量。特征工程是从原始数据中创建新特征的艺术,帮助模型发现原本无法识别的模式。
原始数据很少以模型所需的形式出现。考虑一个包含“出生日期”列的数据集。模型无法对原始日期做太多处理。但如果你从中创建“年龄”特征,模型就能突然学会基于年龄的模式。
常用技术
- 归一化:将数值缩放到一个共同的范围(0 到 1,或均值=0 且标准差=1)。如果不进行归一化,以千为单位测量的特征(如薪资)会主导以个位数测量的特征(如工作年限)。
- 独热编码:将分类变量转换为二进制列。例如,'color' 列包含 [red, blue, green],会变成三列:'color_red'、'color_blue'、'color_green',每列的值为 0 或 1。
- 分箱:将连续变量转换为类别。例如,年龄 0-17 变为 'minor',18-64 变为 'adult',65+ 变为 'senior'。当关系不是线性时,这种方法很有 nützlich。
- 交互特征:将两个特征相乘。例如,'建筑面积乘以卫生间数量' 可能比单独使用任一特征更好地预测房价。
- 领域知识:最强大的技术。一位医生为医疗模型创建特征时,知道哪些实验室值是重要的。一位营销人员知道 '距离上次购买的天数' 比 '购买日期' 更有用。任何算法都无法替代这种知识。
特征练习
应用特征工程
想象一下,你正在构建一个模型来预测哪些客户会在下个月取消他们的流媒体订阅。你的原始数据包括:
- 账户创建日期
- 上次登录日期
- 上个月观看的节目数量
- 每月支付金额
- 提交的客户支持工单
- 国家
训练/测试分割
为什么你要分割数据
建模最重要的规则:永远不要在训练模型时使用的数据上评估模型。
如果这样做,模型可能会直接记住答案。它在训练数据上会得到完美分数,但在新的、未见过的数据上会失败。这被称为过拟合:模型学习的是特定数据集中的噪声,而不是真正的模式。
标准做法是将数据拆分:
- 训练集(通常占 70-80%):模型从这里学习
- 测试集(通常占 20-30%):保留下来,仅用于评估最终模型
在 scikit-learn 中:X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
常见算法
- 线性回归:通过数据绘制最佳拟合直线。简单、可解释,适用于关系大致线性的情况。可预测数值(价格、温度、分数)。
- 决策树:由是/否问题组成的流程图。易于理解和解释。除非进行剪枝或限制深度,否则容易过拟合。
- 随机森林:由多棵决策树投票决定的模型。比单棵决策树更准确,且更不容易过拟合,但更难解释。
过拟合 vs. 欠拟合
- 过拟合:模型过于复杂。它记住了训练数据,包括噪声。在训练数据上准确率高,在测试数据上准确率低。
- 欠拟合:模型过于简单。它无法捕捉真实模式。在训练数据和测试数据上准确率都低。
目标是找到两者之间的最佳平衡点。
评估指标
如何判断模型是否优秀?
仅靠准确率可能产生误导。如果95%的邮件都不是垃圾邮件,那么一个总是预测“非垃圾邮件”的模型准确率可达95%,但实际上毫无用处。
关键指标:
- 准确率:正确预测的百分比。当类别平衡时适用。
- 精确率:在模型标记为正例的所有样本中,真正为正例的比例。高精确率意味着假阳性少。
- 召回率:在所有实际正例中,模型成功捕获的比例。高召回率意味着漏检少。
- F1 分数:精确率和召回率的调和平均值。当你需要平衡两者时很有用。
- RMSE(均方根误差):用于回归(预测数值)。预测值平均偏离真实值多少?
哪种指标最重要取决于具体问题。对于癌症检测,召回率更重要:你不希望漏掉任何病例。对于垃圾邮件过滤,精确率更重要:你不希望误删真实邮件。
数据分析师 vs. 数据科学家 vs. 机器学习工程师
三个不同的角色
数据领域有三个主要的职业方向,它们需要不同的技能。
数据分析师
- Focus: 使用现有数据回答业务问题
- Tools: SQL, Excel, Tableau, 基础 Python 或 R
- Day-to-day: 仪表盘、报告、A/B 测试分析、向利益相关者做演示
- Entry path: 通常是最容易入门的。许多分析师在没有计算机科学学位的情况下开始职业生涯。
数据科学家
- Focus: 构建预测模型并在复杂数据中发现规律
- Tools: Python (pandas, scikit-learn, matplotlib), 统计学, SQL, Jupyter notebooks
- 日常工作:EDA、特征工程、模型构建、实验
- 入门路径:通常需要统计学或定量背景。训练营和自学均可行。
机器学习工程师
- 重点:将模型部署到生产系统并进行扩展
- 工具:Python、TensorFlow/PyTorch、Docker、云平台(AWS/GCP)、API
- 日常工作:模型优化、流水线基础设施、生产模型监控
- 入门路径:通常需要扎实的软件工程技能以及机器学习知识。
构建作品集
招聘经理更看重你能做什么,而不仅仅是你学了什么。在 GitHub 上展示 3-5 个扎实的项目比证书更重要。优质项目应使用真实(而非玩具)数据集,包含清晰的文档,并展示完整流程:从混乱数据到可操作洞察。
你的下一步
从这里出发
行业常用工具免费且易于获取:
- pandas:Python 中用于数据处理的标准库
- matplotlib / seaborn: 可视化库
- scikit-learn: 经典机器学习的得力工具
- Jupyter notebooks: 交互式编程环境,可混合代码、输出和笔记
- Kaggle: 免费数据集、竞赛和实践者社区
从一个你感兴趣的真实数据集开始。下载、清洗、探索它,并尝试回答一个问题。这个项目比任何课程都能让你学到更多。