在应用机器学习中,你经常会在问题之间跳转,需要快速熟悉新的数据集。
一种你可以用来快速建立与新数据问题联系的经典且未被充分利用的方法是 **探索性数据分析 (EDA)**。
在这篇文章中,你将了解探索性数据分析 (EDA),你可以使用的技术和策略,以及为什么你应该在下一个项目中使用 EDA。

探索性数据分析
照片作者:Andy Lamb,部分权利保留
与数据建立联系
经典统计学的过程是检验已有的关于问题的假设。
这是通过拟合特定的模型并在数据中展示特定的关系来实现的。这是一种有效的方法,但它假设你已经有了关于问题的假设,已经理解了数据。这在应用机器学习中很少见。
在对数据进行建模和检验假设之前,你需要与数据建立联系。你可以通过花时间 **总结**、**绘图** 和 **审查** 来自该领域的实际数据来建立这种联系。
这种先分析后建模的方法被称为探索性数据分析。
通过前期花时间与数据打交道,你可以建立对数据格式、值和关系的直观理解,这有助于解释后续的观察和模型结果。
它被称为探索性数据分析,因为你正在 **探索你对数据的理解**,建立对生成它的底层过程如何工作的直观感受,并激发可以作为你建模基础的问题和想法。
该过程可用于检查数据的合理性,识别异常值并提出处理它们的具体策略。通过花时间与数据打交道,你可以发现值中的损坏,这可能预示着数据记录过程存在故障。
探索性数据分析的起源
探索性数据分析由贝尔实验室的约翰·图基 (John Tukey) 开发,作为在数据假设被开发之前系统地将统计学工具应用于问题的一种方法。它是“验证性数据分析”的一种替代或相反的方法。
该过程的开创性描述出现在图基 1977 年的书《探索性数据分析 (Exploratory Data Analysis)》中。
目标是理解问题,以便生成可检验的假设。因此,图表和摘要统计数据等结果仅供你改进你的理解,而不是向普通观众展示数据中的关系。这赋予了该过程敏捷的风格。
S 语言是在同一个实验室开发的,并被用作 EDA 的工具。使用脚本生成数据摘要和视图是该过程自然而然且有意的契合。
维基百科提供了一个很好的EDA 目标简表
- 提出对观测现象原因的假设
- 评估统计推断将基于的假设
- 支持选择合适的统计工具和技术
- 为通过调查或实验进一步收集数据提供基础
探索性数据分析的技术
探索性数据分析通常使用数据的代表性样本进行。你不需要使用所有可用数据或大数据基础设施。
花时间与原始数据打交道。
从浏览数字表格开始是明智的。快速浏览表格可以快速突出每个数据属性的格式、明显的偏差以及值中的大型异常值,并开始暗示要探索的属性之间的关系。做笔记。
可以使用简单的单变量和多变量方法来查看数据。
例如,我认为五个必备的方法是:
除了摘要之外,还要查看数据的转换和重新缩放。找出可以描述的有趣结构。
做笔记。做很多笔记。
向数据提问,例如:
- 你看到了什么值?
- 你看到了什么分布?
- 你看到了什么关系?
- 你认为哪些关系可能对预测问题有益?
- 数据激发了你对该领域的哪些想法?
- 等等……
专注于理解
你不是在创建报告,你是在试图理解问题。
最终的结果是可以丢弃的,你唯一应该留下的是对数据更深入的理解和直觉,以及一长串在建模时可以探索的假设。
代码不必是优美的(但必须是正确的)。使用可重现的脚本和标准包。
你不需要深入研究高级统计方法或图表。保持简单,多花时间与数据在一起。
像 SQL 这样的查询界面可以帮助你用数据样本快速进行大量“假设”场景的分析。
模型的优劣取决于你对数据和问题的提问和理解程度。
资源
《数据科学实战:一线经验直言 (Doing Data Science: Straight Talk from the Frontline)》一书中有关于 EDA 的简短章节,并提供了更多信息的优秀阅读列表。
- 探索性数据分析
- 可视化定量信息 (The Visual Display of Quantitative Information)(强烈推荐)
- 绘图数据要素 (The Elements of Graphing Data)
- 可视化多元数据的统计图形 (Statistical Graphics for Visualizing Multivariate Data)
在当前或下一个项目上尝试探索性数据分析。
如果你已经在使用它,可以尝试一些你以前没用过的方法,或者尽量系统化,甚至可以列出一个要查看的事项清单,以便在首次处理数据时涵盖所有方面。
和往常一样,我非常喜欢这篇文章。在我阅读时,我发现自己问道:“是否有任何解释的启发式方法?”例如,你提到 EDA 可以帮助提出假设或评估潜在推断方法的假设——能否给出一些非常清晰的例子?
我希望我知道所有优秀的 数据科学家 已经遵循的经验法则,尤其是关于 EDA 的。我可以很好地可视化数据并应用所有描述的技术,但我想知道如何处理或已经处理了探索性数据分析的一些输出。你能从你的经验中举例吗?
非常感谢!
很好的建议,谢谢。
EDA 对每个问题都非常具体,所以我无法给出通用的启发式方法。也许阅读一本关于该主题的好书会有所帮助?
https://amzn.to/2I1S4J2
在测试集或保留集上不执行 EDA 是否至关重要?也就是说,只在训练集上运行 EDA?我听说有些人说在测试集或保留集上使用 EDA 会导致数据泄露、误导性结果等……
是的,理想情况下,你应该关注训练数据集。
尊敬的Jason博士,
谨此告知,在 20 世纪 70 年代,有一位在普林斯顿大学与约翰·W·图基共事(关于交互式数据分析主题)的澳大利亚人,唐·麦克尼尔 (Don McNeil) 教授(文学学士(荣誉)(塔斯马尼亚),哲学博士(澳大利亚国立大学))。他出版了一本名为《交互式数据分析 (Interactive Data Analysis)》的书,1977 年出版,参考https://catalogue.nla.gov.au/Record/656675。
他是麦格理大学的荣休教授,https://researchers.mq.edu.au/en/persons/don-mcneil。
谢谢你,
悉尼的Anthony