进行大规模统计分析需要哪些技能?


107

许多统计工作要求获得有关大规模数据的经验。处理大型数据集需要什么样的统计和计算技能。例如,在给定具有1000万样本的数据集的情况下,如何构建回归模型?


1
这里有一些很好的指示。
radek 2011年

如果您总结自己认为最好的方法,将会很有帮助。
rolando2 2011年

同样有趣的是有关使用大量数据进行假设检验的相关讨论:stats.stackexchange.com/q/2516/919
whuber

Answers:


115

好的答案已经出现。因此,我将基于个人经验分享一些想法:根据需要使相关想法适应您的情况。

对于背景和上下文-这样一来,您就可以解决可能会引起此信息偏见的任何个人偏见-我的大部分工作是帮助人们根据相对较小的数据集做出重要决策。它们之所以很小,是因为收集数据的成本可能很高(例如,地下水监测井的第一个样本需要1万美元,而分析异常化学物质则需要数千美元)。我习惯于从可用数据中尽可能多地获取数据,探索它们直至死亡,并在必要时发明新的方法来对其进行分析。但是,在过去的几年中,我一直致力于处理一些相当大的数据库,例如在人口普查区一级覆盖整个美国的社会经济和工程数据之一(850万条记录,

在拥有非常庞大的数据集的情况下,人们的整个方法和思维定式都会发生变化。现在有太多数据需要分析。一些直接(以及回顾)的明显影响(着重于回归建模)包括

  • 您考虑进行的任何分析都可能需要大量时间和计算量。您将需要开发二次采样和处理部分数据集的方法,以便在使用整个数据集进行计算时可以规划工作流程。(子采样可能会很复杂,因为您需要一个与整个数据集一样丰富的代表性数据子集。并且不要忘记使用保留的数据对模型进行交叉验证。)

    • 因此,您将花费更多时间记录所做的工作并编写所有脚本(以便可以重复执行)。

    • 正如@dsimcha刚刚指出的那样,良好的编程技巧很有用。实际上,您不需要太多的编程环境经验,但是您需要编程的意愿,能够识别编程时间的能力(实际上几乎在每个步骤中都将有所帮助)以及对以下方面的基本要素的充分理解计算机科学,例如设计适当的数据结构以及如何分析算法的计算复杂性。这对于提前知道您计划编写的代码是否可以扩展到整个数据集很有用。

    • 一些数据集之所以庞大,是因为它们具有许多变量(成千上万个变量,每个变量都不相同)。 期望仅花费大量时间来汇总和理解数据。甲码本数据字典,和其它形式的元数据,成为必不可少的。

  • 您的大部分时间都花在只是移动数据并重新格式化它们上。您需要处理大型数据库的技能,以及对大量数据进行汇总和绘制图形的技能。(Tufte的Small Multiple在这里脱颖而出。)

  • 您最喜欢的某些软件工具将失败。例如,忘记电子表格。许多开放源代码和学术软件都无法处理大型数据集:处理将永远花费,否则软件将崩溃。期望这一点,并确保您有多种方式来完成关键任务。

  • 您运行的几乎所有统计测试都将如此强大,以至于几乎可以确定“显着”效果。 您必须更多地关注统计重要性,例如效果大小,而不是重要性。

  • 同样,模型选择也很麻烦,因为几乎所有变量和您可能考虑的任何交互都会显得很重要。 您必须更多地关注选择分析的变量意义

  • 将有足够多的信息来识别变量的适当非线性变换。知道如何做。

  • 您将有足够的数据来检测非线性关系,趋势变化,非平稳性,异方差等。

  • 您将永远无法完成。有太多数据,您可以永远研究它们。因此,一开始就建立分析目标并始终牢记这些目标非常重要。

我将以一小段轶事结尾,这说明了大型数据集与较小数据集之间的回归建模之间的意外差异。在具有人口普查数据的项目结束时,我开发的回归模型需要在客户端的计算系统中实现,这意味着在关系数据库中编写SQL代码。这是一个常规步骤,但是数据库程序员生成的代码涉及数千行SQL。这几乎不可能保证它没有错误-尽管我们可以检测到错误(它在测试数据上给出了不同的结果),但是找到它们是另一回事。(您所需要的只是一个系数中的印刷错误...)解决方案的一部分是编写一个程序,该程序直接从模型估算值生成SQL命令。这确保了从统计信息包中出来的正是RDBMS中输入的东西。另外,编写此脚本花费了几个小时,从而取代了可能需要数周的SQL编码和测试。这只是统计学家能够传达其结果的意义的一小部分。


3
+1,我将分享这个精彩的回复(并将其打印在附近的^ _ ^)
Dmitrij Celov 2011年

1
+1,这是我肯定会在未来很多年告诉学生的内容。
mpiktas 2011年

2
轶事让我想起了我必须将模型从Eviews转移到R的时候。原始模型是在Eviews中完成的,结果大约有20个方程。我必须在具有交互界面的网页上显示结果。由于该模型尚在开发中,因此我编写了一个将Eviews输出转换为R代码的代码,其目的与在Eviews和R中都使用确切的模型相同。R工作得非常好,我什至最终使用了差异化的翻译后代码用于计算分析梯度。
mpiktas 2011年

2
如果在评论中证明不赞成投票,通常将其视为更具建设性的(如果不是简单的礼貌),除非有明显的理由不这样做(例如,单行含糊的答复,对更新错误答案的请求没有答复,攻击行为)。当提出有效的论据时,这有助于提高响应的质量。在这种情况下,我认为没有理由投票!
chl

2
自动化+1可减少错误:“ 编写一个直接从模型估算值生成SQL命令的程序 ”。
Orion

18

您的问题应该给出一些好的答案。这里是一些起点。

  1. 能够在精度和对计算能力的需求之间进行权衡的能力。

  2. 具有数据挖掘技术的设施,可用作进行回归之前的初步筛选工具。例如,chaid,cart或神经网络。

  3. 对统计意义和实践意义之间关系的深刻理解。大量的变量选择方法。

  4. 交叉验证的本能。


我还将结合#4和#1:了解如何交叉验证而不浪费您的计算资源很重要。
Zach

1
您能解释一下第二点吗?您将如何使用CHAID / CART /神经网络作为回归的筛选工具?
raegtin 2011年

2
@raegtin-我对CHAID最为熟悉,它带有所谓的“交互”,通常是伪装成交互的主要效果,因为这是该过程“将它们放入”的唯一方法。(在CHAID中,只能这样识别出一种主要效果,因此所有其他主要效果都被压缩到“交互”单元中。)但是CHAID的优点是能够检查许多种交互。因此,一旦确定了一些有前途的组件,就可以将它们的所有低阶成分合并到回归或方差分析中,并可以测试哪些组件真正有用。
rolando2 2011年

1
+1我对使用数据挖掘(尤其是CHAID)来探索潜在影响的可能性深感兴趣。有趣的是看到一个应用程序,例如stats.stackexchange.com/q/10363/919
whuber

12

必须具备良好的编程技巧。您需要能够编写高效的代码来处理大量数据而不会造成阻塞,并且可能能够并行处理所述代码以使其在合理的时间内运行。


4
编码是必须的,但也要知道如何在不违背操作系统的情况下工作,这一点很重要。您必须了解,有时拆分工作会带来额外的费用,因为访问磁盘和网络会带来额外的费用。您将了解阻止和等待以及进行进程间通信的不同方式。我已经看到了很棒的科学代码,这些代码大部分时间都在等待某些系统调用完成。与您的系统的sysadmin成为朋友,通过为他们提供咖啡,可以在优化系统方面获得很多帮助;)
Marcin

2
有时最好编写“效率低下的代码”,如果这将有助于创建可预测可能会被问到的其他问题的数据结构。
拉尔夫·温特斯

1
@Ralph:+1,我绝对同意,并亲自学习了这一点。我并不是要申请,无论权衡如何,都应该始终编写高效的代码,而只是应该知道如何做。
dsimcha 2011年

5

我还要补充一点,大规模数据还引入了潜在的“不良数据”问题。不仅丢失数据,而且接触过数据的每个系统部件都会引入数据错误和不一致的定义。因此,除了统计技能外,您还需要成为专家级的数据清理人员,除非有人为您这样做。

-拉尔夫·温特斯


3
这些都是好点。异常值和其他数据问题困扰着任何数据集,无论大小。以我的经验,在大型数据集中,它们实际上更易于识别和处理,因为您有能力将它们与大量数据区分开,尤其是如果使用可靠的方法,则它们不太可能影响结果。顺便说一句,您始终在所有分析中进行“数据清理”。这不是一个孤立的问题,而是要交给专家一劳永逸地处理。离群值只是特定模型中的离群值。
ub

2
可以将Google Fine作为半自动数据清理器进行检查,以帮助避免手工编辑的陷阱。
mindless.panda

5
  1. Map-reduce框架中解决问题。
  2. 问题的工程学方面,例如,对参数使用较低的精度会造成多大的伤害,或者不仅基于泛化而且还会基于存储和计算成本来选择模型。

您能否为您提到的Map-reduce框架提供相关链接?
mindless.panda

@ sugar.panda,已添加Wiki链接!
highBandWidth 2011年

+1代表较低的精度,尽管它远不是令人着迷的特权。精度越低,我们做出错误决定的可能性就越大。这与I / II型错误密切相关,涉及多个学科,但主要与统计,决策科学和经济学有关。应当提前考虑效用功能,并在思考过程的一部分中加以考虑,以确定合适的方法。
Thomas Speidel 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.