卷 I · 立案CH 03工位 03/24

一个问题挖四遍:四条产线与三个一次性决策

工位 STEP 1.2 评估情境(工具、数据、约束) 10% 的一部分 评分员在找:你是不是清楚自己有什么资源、缺什么资源、数据能不能撑住四条产线;以及在 BDAS 那次,你有没有诚实说明「大」在哪。

这门课最特别的地方不是它教什么算法,而是它的作业结构:同一个 SDG 问题、同一份数据,要在四套完全不同的工具上各挖一遍。IBM SPSS Modeler 拖流程图,Python 生态写代码,AWS 上开 EC2 跑 PySpark,还有一条不计分的微软线。这个设计的真实教学目标是让你体会「方法论不依赖工具」——但对你来说,它首先意味着一件事:提案里的每个决定要付四次。

四条产线选题数据集大数据的诚实

四条产线各是什么

ISAS · 23%
IBM SPSS Modeler。拖节点连线的可视化流。第 5 周交。优点:Step 3–7 每一步都对应一个节点,报告截图天然就是证据。
OSAS · 23%
开源栈。Python/Jupyter、MySQL + Workbench、Kettle(Spoon)、Tableau、Weka。第 8 周交。优点:你写代码最快;缺点:工具多,容易散。
BDAS · 23%
大数据栈。GitHub、AWS EC2/AMI、Jupyter、SSH、PySpark/Spark。第 11 周交。这是四条线里唯一有环境风险的一条。
MSAS · 0%
微软线。SQL Server、Azure ML、Power BI。明确写着「for the student's own self learning, does not constitute any portion of the final grade」。

关于 MSAS 的建议很简单:不做,除非你想在简历上加 Power BI。它零分,而你在第 11 周会很缺时间。真想学,把它折进 DataCamp 那 25 小时里——Power BI 轨道同时能算 DataCamp 的时数,一份时间两处用。

⇄ 四条产线上,同一个 Step 长什么样

这是全书会反复出现的一个对照块。先看一眼全景,具体做法在第 22–23 章:

做同一件事ISASOSASBDAS
读数据Var. File 节点pd.read_csv / MySQLspark.read.csv(header=True, inferSchema=True)
缺失填补Data Audit → ImputeSimpleImputerImputer(strategy="median")
划分训练/测试Partition 节点train_test_split(stratify=y)df.randomSplit([0.7, 0.3], seed=42)
建分类模型C5.0 / CHAID / LogisticDecisionTreeClassifierDecisionTreeClassifier(MLlib)
评估Analysis / Evaluation 节点classification_reportBinaryClassificationEvaluator
出图Graphboard / PlotTableau、matplotlibtoPandas() 后再画

横着看这张表,你会发现三条线的差别只在语法。这正是课程想让你体会的那句话:流程是流程,工具是工具。

三个一次性决策

下面三样东西一旦写进提案,就会被复制到三份迭代报告和一篇论文里。它们不是「可以边做边调」的参数,是地基

决策一:SDG 主题 + 一个具体的决策场景

作业要求是「address one of the 17 Sustainable Development Goals」或者「a decision making situation facing an organization of your choice」。选 SDG 那条路更省事:目标是现成的、公开数据多、伦理讨论有话说,而且 SDG 直接对上商学院毕业生能力里的 Sustainability(kaitiakitanga)那一条。

但光有 SDG 编号不够。你必须往下再走一步,落到一个具体的决策上——谁、在什么时候、要做哪个选择。这件事第 5 章会用一整章展开,这里先给判据:如果你的目标句里没有一个人和一个动作,它就还不能用。

决策二:主数据集

这是四条产线共用的那一份数据。选它的时候要同时满足六个条件——把四个典型候选拖进自检台看看:

六条自检里最容易被忽略的是最后两条:「BDAS 那次能讲出大」「ISAS/单机跑得动」。它们方向相反,所以最佳区间是几万到几百万行、20 列上下:SPSS Modeler 和 pandas 都吃得下,而 PySpark 那次你可以老实说「我们把它复制放大了 N 倍来验证可扩展性」。

✎ 数据集去哪找(按省事程度排)
  • 世界银行开放数据 / WHO GHO / UN SDG Indicators:国家×年面板,直接对上 SDG,字段名清楚,公开可引用。缺点是缺失多——但这在这门课里是优点,Step 3 的 15% 需要你有东西可清。
  • Kaggle:找带 License: CC0 / Public Domain 的。注意 Kaggle 上很多「WHO Life Expectancy」之类的数据集是二手清洗过的,要在报告里写清出处和它的原始来源
  • UCI Machine Learning Repository:干净、有文档、每个数据集都有引用格式。适合当备用。
  • NZ 本地:Stats NZ、data.govt.nz。选本地数据在讨论 Action(Step 9)时特别有说服力,而且容易和 Te Tiriti/mātauranga Māori 的视角挂上——那是毕业生能力 1.2。

避免:需要伦理审批的真人健康记录、社交平台抓取(违反条款且需要标注)、超过 5 GB 的数据(ISAS 那次会卡死你)。

决策三:分析单元与目标列

「一行数据是什么」这句话必须能一句话说完:一个地区一年一所学校一学期一个供水站一个月。这决定了你能问什么问题,也决定了你的样本量。

目标列则决定了 Step 5 的整条链。三种情况:

  • 有现成的连续目标列(如死亡率、缺水天数):最舒服。你可以同时做回归(预测数值)和分类(是否达标),一份数据交两种任务,Step 5–7 内容自动翻倍。
  • 只有类别列:直接做分类。
  • 没有目标列:只能做分群或关联,Step 7 的「测试设计」会很难写(没有标签就没有测试集)。不建议——除非你能人工构造一个目标。

本书用的示例数据就是第一种:一个合成的 SDG 3 场景,一行 = 一个地区一年,连续目标是 5 岁以下儿童死亡率 u5mr(‰),二分目标是「是否达到 SDG 3.2 的每千活产 25 例」。这个 25 不是我编的,是 SDG 3.2 的真实指标值——这就是选 SDG 的好处:连阈值都不用自己找理由。

⚠ 关于「大数据」:诚实比吹牛得分

课程名字里有 Big Data,很多学生因此觉得必须搞一份「很大」的数据,结果第 11 周被一个 8 GB 的 CSV 拖死,或者更糟——在报告里假装自己处理了海量数据,而截图里的 Spark 作业只有 3 000 行输入。

正确的写法是把它变成 Step 1.2 的一段论证:

1.2 Assessment of the situation — 数据规模与工具选择
本项目数据集为 X 行 × Y 列(约 Z MB),单机 pandas 可在数秒内
完成全部处理。采用 PySpark 的目的不是当前规模所必需,而是验证
本方案在生产环境下的可扩展性:若将采集粒度从「地区-年」细化到
「设施-月」,规模将增长约 200 倍(估算见附录 C),届时单机内存
不再可行。因此本迭代在 AWS EC2 上以 Spark 实现同一流程,并记录
分区数、shuffle 量与执行时间,作为可扩展性证据。

这段话做了三件事:承认现在不大、给出未来会大的具体倍数、说明为什么现在就要验证。它比任何吹牛都更像一个真正的分析师写的。(第 23 章的 Spark demo 会给你「分区数、shuffle 量、执行时间」这些具体数字。)

四遍之间,什么能复用,什么必须重做

报告部分四遍之间说明
Step 1 全部几乎 100% 复用业务问题不因为换工具而改变。只需在 1.2 换掉工具与资源那一段。
Step 2.1 / 2.2复用同一份数据,来源与字段描述不变。
Step 2.3 / 2.4图要重出探索图必须用当次工具画(Tableau 一次、matplotlib 一次、SPSS Graphboard 一次)。数字应该一致——不一致就是有人算错了,那本身是个发现。
Step 3 / 4结论复用,实现重做「为什么用中位数填补」这段话不变;怎么填在三条线上是三种做法。
Step 5复用方法选择是业务问题决定的,与工具无关。
Step 6 / 7重做算法名字可能相同(决策树),但参数名、默认值、划分方式都不同,指标也会有差异。
Step 8重做,但可对比这是四遍结构的最大红利:到 BDAS 那次,你可以加一节「三条产线的结果对比」,讨论为什么同一个算法在三套实现上指标不同。这一节几乎必然拿高分。

粗算一下:第一次迭代(ISAS)之后,后两次的写作量大约只有 40%–50%。所以第一次要写得工整——它是后面两次的母版。反过来,如果第一次写得糊,你会把糊的部分抄两遍。

▣ 本章交付物 —— 报告里放什么

1. Step 1.2 里的资源与约束清单(表格,四行):可用工具(三条线各自的版本与访问方式)、数据来源与许可、时间约束(六个 deadline)、技能缺口(例如「PySpark 无经验,计划通过 DataCamp 补齐 X 小时」)。写出技能缺口不丢分,反而是 1.2 要的东西。

2. 数据集选择的论证段(约 120 字):为什么是这一份,其他候选为什么不行。把上面自检台的六条当框架,逐条给一句。

3. 一句「一行数据是什么」,以及目标列的定义(含阈值来源)。例如:「分析单元为地区-年;目标变量为 5 岁以下儿童死亡率(每千活产),并按 SDG 指标 3.2.1 的 25‰ 阈值二分为达标/未达标。」

4. 大数据可扩展性那一段(上面的模板),提案里就写好,BDAS 那次直接用。

这一章的一句话

四条产线跑的是同一个问题、同一份数据,所以选题、数据集、分析单元+目标列这三个决定是一次性的:第一次迭代写得工整,后两次只需 40% 的工作量;反之,糊的地方你要抄三遍。

下一章把这四遍摊到十三周的日历上,看清每个 deadline 之间到底有多少天,以及那 14 分的 DataCamp 该塞在哪。