《数据驱动的网络分析》——6.6 分析:统计假设检验

6.6 分析:统计假设检验

R设计用于为统计分析人员提供各种数据检查工具。本章迄今为止所讨论的编程功能都是达到该目的的手段。我们希望使用的R主要功能是通过识别统计显著特征,支持警报的构建(更多关于警报构建的讨论参见第7章)。

识别对警报有用的属性,需要识别“重要”的行为,对“重要”有各种不同的定义。R提供了许多用于研究数据并对数据进行统计检验的工具套件。学习这些工具的使用,需要理解R工具提供的常见测试统计数字。本章余下的部分重点关注这些任务。

6.6.1 假设检验
统计假设检验是根据特定数据集中的证据,评估有关外界行为的某个断言的过程。断言可能是数据呈正态分布,或者早晨网络上发生了攻击。假设检验从可与某个模型相比较的一个假设开始,假设可能无效。假设检验的语言常常不直观,因为它依赖于科学的一个关键属性——科学无法证明某个断言,但是可以证明断言错误,或者无法证明断言正确。所以,假设检验专注于“拒绝零假设”。

统计假设从所谓的“零假设”(null hypothesis,H0)开始。最基本的零假设是数据集中的变量之间没有关系。备择假设(H1)是零假设的反面——有证据说明某种关系。零假设的检验是这样进行的:用一个过程建立零假设模型,然后比较该过程生成的数据符合零假设推断的可能性。

例如,考虑确定硬币重量均匀还是一面比另一面重的测试过程。我们通过重复抛硬币来进行测试。零假设声明正面和反面的概率相等:P=0.5。备择假设声明重量偏向某一面。

为了确定硬币的重量是否均匀,我们必须多次抛掷它。构造检验的问题是,我们必须抛掷硬币多少次,才能做出决定。图6-3显示了1~4次抛掷中,结果组合的概率分解1。

https://yqfile.alicdn.com/948fb2012019811c57c11445fb738641b70fe506.png" >

结果遵循二项分布,我们可以用R的dbinom函数计算。2

> # 使用dbinom求得4次抛掷硬币且单次抛掷正面向上概率为0.5时,
> # 出现0-4次正面朝上的概率
> dbinom((0:4),4,p=0.5)
[1] 0.0625 0.2500 0.3750 0.2500 0.0625
> #结果按照顺序显示——0次、1次、2次、3次、4次正面朝上

为了确定结果是否显著,我们必须确定偶然发生结果的概率。在统计检验中,这通过使用P值来实现。P值是“零假设为真”的概率,你所得到的结果至少和观测结果一样极端。P值越低,观测结果在零假设下发生的概率就越低。按照惯例,在P值小于0.05时拒绝零假设。

为了理解“极端性”的概念,考虑4次抛掷硬币无一成功的二项检验。R中的命令如下:

> binom.test(0,4,p=0.5)

    Exact binomial test
data: 0 and 4
number of successes = 0, number of trials = 4, p-value = 0.125
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.0000000 0.6023646
sample estimates:
probability of success
           0

P值为0.125,是4次都掷出正面(0.0625)和4次都掷出反面(0.0625)的概率之和。在“2次反面”的语境下,这个P值考虑的是两个极端状况。类似的,如果我们考虑1次正面的情况:

> binom.test(1,4,p=0.5)

    Exact binomial test

data: 1 and 4
number of successes = 1, number of trials = 4, p-value = 0.625
alternative hypothesis: true probability of success is not equal to 0.5
95 percent confidence interval:
 0.006309463 0.805879550
sample estimates:
probability of success
         0.25

得出的P值为0.625,即0.0625+0.25+0.25+0.0625(除了2次正面和2次反面的情况之外,其他各种组合的概率)。

6.6.2 检验数据
用R进行的最常见检验是检验特定的数据集是否符合某种分布。对于信息安全和异常检测,数据符合某种分布使我们可以估计警报阈值。话虽如此,我们很少真正碰到数据符合某种分布模型的情况(正如第10章中所讨论的)。确定一种现象符合某种分布模型,你就可以使用该分布的特征函数预测数值。

这种估算过程的经典例子,是使用均值和标准差预测正态分布值。正态分布有如下形式的概率密度函数:

\frac{1}{{\sigma \sqrt {2\pi } }}{\text{e}} - \frac{{(x - \mu )^2 }}{{2\sigma ^2 }}$

其中,μ是均值,σ是模型的标准差。

如果流量符合分布模型,就为我们提供了一个估计某种现象发生概率的数学工具。正如第10章中所述,真正遇到满意模型的机会很少——当你遇到这些模型时,通常已经进行了繁重的数据过滤工作,并进行多次探索,提取出合适的信息。

这一点很重要,因为如果你在不知道模型是否有效的情况下就采用相应的数学方法,就可能有建立错误传感器的危险。R提供许多现存的不同统计检验,以确定你是否可以使用某种模型。为了简洁起见,本文主要关注两种提供基本工具的测试。

Shapiro-Wilk (shapiro.test)

Shapiro-Wilk检验很适合于正态分布的检验,使用它可以检验样本集是否符合正态分布。

Kolmogorov-Smirnov (ks.test)

适合于检验连续分布(如正态或者均匀分布)。

这些检验的操作方式类似:对一个样本集和另一个样本集(明确提供或者通过函数调用)运行检验函数。检验的统计数字描述了符合程度,并生成一个p值。

Shapiro-Wilk检验(shapiro.test)是正态性检验,零假设是提供的数据是正态分布的。例6-4是运行这种检验的一个例子。

例6-4 运行Shapiro-Wilk检验

># 检验随机正态分布函数是否通过shapiro检验
> shapiro.test(rnorm(100,100,120))

    > Shapiro-Wilk normality test

data: rnorm(100, 100, 120)
W = 0.9863, p-value = 0.3892
> #我们很快将解释这些数字
> #检验均匀分布函数是否通过shapiro检验
> shapiro.test(runif(100,100,120))

    Shapiro-Wilk normality test

data: runif(100, 100, 120)
W = 0.9682, p-value = 0.01605

所有统计检验都会生成一个检验统计数字(在Shapiro-Wilk检验中是W),这是与零假设下分布的比较。统计数字的准确取值和解读是特定于检验的,应该使用p值作为该值的规范化解读。

Kolmogorov-Smirnov检验(ks.test)是一种简单的适合度检验,用于确定某个数据集是否符合特定的连续分布(例如正态或者均匀分布)。它可以与一个函数(在这种情况下,它将提供的数据集与函数进行比较)或者两个数据集(在这种情况下,对照这两个数据集)一起使用。实际的检验参见例6-5。

例6-5 使用ks检验

> # KS检验实例;我们创建两个随机的均匀分布
> a.set <- runif(n=100, min=10, max=20)
> b.set <- runif(n=100, min=10, max=20)
> ks.test(a.set, b.set)

    Two-sample Kolmogorov-Smirnov test

data: a.set and b.set
D = 0.07, p-value = 0.9671
alternative hypothesis: two-sided

> #现在,我们使用函数比较一个数据集和分布模型
> #注意,我使用punif来得到分布,传递的参数和单独调用punif时一样
> ks.test(a.set, punif, min=10, max=20)

    One-sample Kolmogorov-Smirnov test

data: a.set
D = 0.0862, p-value = 0.447
alternative hypothesis: two-sided
> #在使用该检验之前,我需要一次估算。
> #对于均匀分布,可以使用最小和最大值,就像在正态分布中使用均值和标准差一样
> ks.test(a.set,punif,min=min(a.set),max=max(a.set))

    One-sample Kolmogorov-Smirnov test

data: a.set
D = 0.0829, p-value = 0.4984
alternative hypothesis: two-sided
> #现在,我拒绝这个零假设;我将把这些数据当成正态分布,再次估算
> ks.test(a.set,pnorm,mean=mean(a.set),sd=sd(a.set))

    One-sample Kolmogorov-Smirnov test

data: a.set
D = 0.0909, p-value = 0.3806
alternative hypothesis: two-sided
> #嗯,p值也不高啊…因为我没有使用足够的样本,我们用400个样本再次检验
> a.set<-runif(400,min=10,max=20)
> b.set<-runif(400,min=10,max=20)
> #相互比较
> ks.test(a.set,b.set)$p.value
[1] 0.6993742
> #比较均匀分布
> ks.test(a.set,punif,min=min(a.set),max=max(a.set))$p.value
[1] 0.5499412
> #比较不同的分布
> ks.test(a.set,pnorm, mean = mean(a.set),sd=sd(a.set))$p.value
[1] 0.001640407

KS的统计效能(Power)较弱。试验的效能指的是正确拒绝零假设的能力。效能较弱的检验需要比效能较强的检验更大的样本数量。样本大小是复杂的问题,特别是在处理安全数据的时候。大部分统计检验来自于“海底实验室”,在实验室中获得60个样本就已经是很了不起的成就了。但是对于网络流量分析,可以采集海量的样本,检验可能因为太多数据而变得不可靠,和常态的小偏差可能造成某些检验拒绝数据,你总是可以投入更多数据,有效地制作出符合目标的检验。

在我的经验中,对于好的可视化工作,分布检验通常是糟糕的第二选择。第10章将更深入地讨论这一点。

时间: 2024-11-09 02:03:46

《数据驱动的网络分析》——6.6 分析:统计假设检验的相关文章

《数据驱动的网络分析》——第6章 R安全分析简介

第6章 R安全分析简介 R是一个开源统计分析软件包,最初由奥克兰大学的Ross Ihaka和Robert Gentleman开发.R的设计者主要是统计学家和数据分析人员,与商业统计软件包(如S和SPSS)关联.R是用于探索性数据分析的工具包,它提供了统计建模和数据操纵能力.可视化和一个全功能的编程语言. R可以满足多种分析需求.分析工作需要某些工具来创建和操纵汇总原始数据的小型临时数据库.例如,从特定主机采集.按照服务分解的每小时流量汇总.这些数据表比原始数据更复杂,但是其目的不是为了最后发布-

《数据驱动的网络分析》——导读

内容提要传统的入侵检测和日志文件分析已经不再足以保护当今的复杂网络,本书讲解了多种网络流量数据集的采集和分析技术及工具,借助这些工具,可以迅速定位网络中的问题,并采取相应的行动,保障网络的运行安全. 本书分为3部分,共15章,内容包括数据采集的常规过程,用于采集网络流量的传感器,基于特定系统的传感器,数据存储和分析,使用互联网层次知识系统(SiLK)分析NetFlow数据,用于安全分析的R语言简介.入侵检测系统的工作机制以及实施,确定实施攻击的幕后真凶,探索性数据分析以及数据可视化,检查通信流量

云杉网络发布数据驱动的云网可视化与分析产品

网络与业务正在脱节 通常来说,企业业务的经营与管理离不开"业务架构"."应用系统"和"IT基础设施"三个有机部分.其中,应用系统是业务的直观体现,而业务架构彰显的是运营模式,IT基础设施则作为前两者的载体存在. 在云计算时代,企业本身朝着数字化转型,业务架构朝着服务化转型,应用系统则迈入了DevOps时代,随之,IT基础设施迎来云时代.在IT基础设施中,和计算.存储一样,网络(网络架构.网络服务.网络运维管理)如果不变革,网络将无法适应业务发展的

Excel应对特殊学生成绩分析统计

1.考试混合编,成绩统一理--老方法遇到新问题 关于使用Excel进行学生成绩处理,已经是老话题了.但在实际工作中还是会有很多新问题,例如,现在很多学校都是全年级各班混在一起考试,以防考试改卷中的不正当竞争.而统计成绩时,则是将已判分但未拆封的考卷统一交到教务处,先按座位号顺序(每本考卷的自然顺序)录入各科分数,再分析统计出全年级各科成绩.举例说明,如图1(记录11至830隐藏了),要统计二(1)班优秀人数,传统做法就是先按考试号排序,再通过公式"=COUNTIF(分数!D2:D69,"

10分钟精通Nginx访问日志分析统计

简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求. 利用流计算.或离线统计分析nginx的access log,从日志中挖掘有用信息. 两种方式各有优缺点: CNZZ使用起来比较简单,各种指标定义清楚.但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录. 利用流计算.离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时

PostgreSQL · 特性分析 · 统计信息计算方法

一条SQL在PG中的执行过程是: ----> SQL输入 ----> 解析SQL,获取解析后的语法树 ----> 分析.重写语法树,获取查询树 ----> 根据重写.分析后的查询树计算各路径代价,从而选择一条成本最优的执行树 ----> 根据执行树进行执行 ----> 获取结果并返回 PostgreSQL的SQL优化.执行方式为代价模型.而这里的各路径的代价计算,则是依赖于系统表中的统计信息.那么这些统计信息如何得来的?就是这里要讨论的问题. PostgreSQL是ca

《数据驱动的网络分析》——2.3 NetFlow

2.3 NetFlow NetFlow是Cisco开发的流量汇总标准,最初用于网络服务记账.虽然本意不是为了安全性,但是人们臆测NetFlow对此有益,因为它提供了紧凑的网络通信会话摘要,可以快速访问,并且包含了以相对紧凑的格式保存的最高价值信息.从1999年flow-tools软件包发布以来,NetFlow越来越多地用于安全分析,已经开发出了各种工具,这些工具为NetFlow提供了更多的字段,例如可选择的载荷片段. NetFlow的核心是流(Flow)的概念,它与TCP会话近似.回忆前面介绍的

《数据驱动的网络分析》——6.2 R语言基础知识

6.2 R语言基础知识 本节是R语言的速成教程.R是一种特性丰富的语言,我也只是略懂一二.但是,在本节结束时,你就能够编写简单的R程序,在命令行上运行,并将其保存为一个库. 6.2.1 R提示符 启动R,将会显示一个窗口和命令提示符.图6-1展示了一个R控制台的例子.如图所示,控制台主要是一个大的文本窗口,顶部的一系列按钮提供了辅助功能.注意按钮栏下的两个文本框,第一个显示当前工作目录,第二个是帮助功能.R有很好的文档,所以一定要习惯使用帮助框. 在图6-1中,我输入了几条简单的命令: > s<

《数据驱动的网络分析》——第2章 网络传感器2.1 网络分层及其对测量的影响

第2章 网络传感器 网络传感器直接从网络通信中采集数据,不需要中介应用程序作为代理,这使其不同于第3章中讨论的基于主机传感器.这方面的例子包括路由器上的NetFlow传感器,以及使用tcpdump等嗅探工具采集流量的传感器. 网络流量所面临的挑战是你在所有日志数据中都会遇到的:真正的安全事件很少,而数据在时间和存储空间上都有代价.只要可能,首选日志数据,因为它清晰(日志数据记录了高级事件)而紧凑.网络流量中的相同事件必需从几百万个数据包中提取,这些数据包往往是冗余.加密或者难以理解的.与此同时,