写在前面
一直有一个想法,想把统计学的知识复习一下,边复习边尝试把统计学应用到安全对抗领域中。之前一直写的都是安全相关的内容,这次写的是统计学,看似跨度很大,其实一脉相承。我个人比较喜欢研究通用的底层逻辑,当时入坑安全也是因为上学时候想探究一下IT领域的底层逻辑。不过IT领域的逻辑的分化程度太高,缺少普适性。有没有一种更通用的研究各行各业底层运作规律的东西呢?有,那就是统计学。记得在统计学毕业时,我的导师在赠我的著作中写了让我至今仍然感触很深的一句话:明计数,识天下。当时没有完全理解,后面随着工作上遇到的事情越来越多,越觉得统计学重要,所以就有了这篇文章。统计学既有“识天下”的普适性,注定其是一门偏抽象的学科,就像编程语言里的抽象类,需要结合一个具体的行业领域才能发挥作用。为什么本文选择安全对抗作为具体的研究领域呢?没别的原因,就是因为我觉得如果直接以金融投资行业来讲有点太物质,而且我对安全对抗领域比较熟悉,深知在这个领域统计学有很多用武之地。
统计学是什么?教科书上是这样写的:统计学定义是,通过搜索、整理、分析、描述数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。
个人认为,统计学是人们认识和研究未知事物的一个工具,是可以改变思维方式的一门科学。利用统计学,可以弱化特例个体的干扰来掌握总体规律,是人类对上帝视角的一种窥探。
统计学的基本原理是依据概率论,用样本数据去推断总体特征。概率,代表着不确定性。就像提到编程就会提到hello world,提到概率,就要提到抛硬币。抛硬币其实就是一个未知的事物,因为硬币落下的结果受非常多因素的影响,如风力、重力、起抛角度、硬币材质、PM2.5等等。如果一个人可以精确计算所有影响硬币的因素,那他就可以绝对精确的预测某一次抛硬币的结果。但是这很难,因此我们只需要把这些因素看成一个未知的黑盒,通过不停的试抛,记录结果,获得样本数据,然后用样本数据来推断总体特征,再根据总体特征去预测其他样本数据。
比如一个劣质工艺的硬币,抛1000次,300次正面,700次反面,那可以根据这1000次推断:抛这枚硬币得到正面的概率是30%,得到反面的概率是70%。因此可以预测,下一次抛硬币有70%的可能性可以得到反面的结果。
下一次抛的硬币有70%的可能性是反面,下一次请求有xx%的概率是恶意请求,下一个磁盘新增的文件有xx%的概率是恶意文件,下一个获奖用户有xx%概率是羊毛党,下一个xxx有xx%的概率是xxx,下一个…… Are you getting it?:)
如果没有经过专业的统计学的学习,或者大学时期没有选修过概率论与数理统计,可能大多数人对统计学的认知还停留在高中时期所讲的平均数、方差这种基本的统计描述概念,这可能会让大家对统计学有所误解,认为统计学就只有对已有数据的简单描述。通过了解安全行业很多防御规则也可以看出来,大都是在统计次数、硬编码个阈值,再画一堆炫酷的JS Chart,投到大屏上,称作大数据智能态势感知系统,其实智能化程度并不够。
下面我们来看一个简单的利用样本来估计总体的例子。
一个学校有207名学生,我们从中随机抽取了15名同学的成绩:
[1] 96.4 93.2 89.3 89.8 99.9 91.8 90.5 87.8 92.9 97.7 84.3 81.9 85.9 93.9 94.1
能否根据这15个学生的成绩来推断207名学生的成绩情况?比如207个学生的平均分大约是多少?当然可能多数人会直接求这15个人的平均成绩,然后直接用这个平均成绩来估算全部学生的平均分值:(96.4+93.2+89.3+89.8+99.9+91.8+90.5+87.8+92.9+97.7+84.3+81.9+85.9+93.9+94.1)/15= 91.3 当然,这样也可以,这在统计学上叫做“点估计”,但是点估计没有将误差考虑进去,没有利用抽样分布特征,也不能给出概率的保证,每次从207人中抽出15人得到的结果可能都不一样。
有没有更准备的方法呢?有,区间估计:
经过统计学计算,207名学生的总平均分在83.84340 95.16993的区间内,可信度99%。
经过统计学计算,207名学生的总平均分在88.90982~92.99685的区间内,可信度95%。
经过统计学计算,207名学生的总平均分在87.37152 90.57515的区间内,可信度90%。
下面是一个学校207名学生的成绩:
[0]88.2 91.8 87.5 93.2 90.0 91.0 93.9 93.1 80.1 91.4 99.9 82.1 78.1 84.5 96.6 94.6
[17] 89.3 88.1 97.7 97.9 87.4 85.6 85.0 85.9 91.6 96.4 90.0 98.9 80.6 88.8 85.6 94.1
[33] 91.6 85.6 89.0 91.6 94.1 95.5 99.1 90.3 82.8 90.4 85.5 100.2 89.4 82.7 90.3 95.5
[49] 89.4 87.5 101.2 90.8 92.7 91.3 88.1 88.4 85.6 82.0 77.0 96.7 82.3 83.1 91.9 90.6
[65] 82.3 93.5 84.0 90.5 90.0 86.0 88.3 90.5 94.9 93.0 93.0 85.4 87.8 86.1 103.1 85.3
[81] 94.2 99.1 75.2 84.7 80.0 90.8 96.6 94.5 90.3 90.2 86.5 87.8 89.2 82.0 95.8 98.7
[97] 94.1 95.4 99.1 83.6 81.7 95.8 89.8 94.5 90.9 87.5 87.8 89.9 92.4 86.7 84.8 87.3
[113] 81.7 91.1 87.6 72.7 87.8 90.5 91.8 88.8 84.0 89.6 85.5 95.6 89.1 98.2 83.8 94.3
[129] 77.8 99.8 93.2 87.9 94.8 88.0 92.6 92.4 94.2 90.6 82.3 97.5 83.0 89.2 82.3 94.1
[145] 95.1 88.6 92.1 87.5 89.7 87.3 91.4 80.9 86.4 91.1 97.3 87.9 89.1 93.4 89.8 94.7
[161] 88.3 89.8 93.7 88.9 87.8 81.0 89.8 81.9 92.5 93.2 84.3 94.2 91.3 89.8 89.6 87.9
[177] 87.4 97.2 92.4 85.8 85.9 84.0 100.9 90.8 86.8 98.6 89.8 96.6 92.9 99.2 105.4 95.9
[193] 86.1 83.1 92.6 81.8 89.6 94.5 92.6 90.2 92.9 91.7 98.2 94.9 89.1 94.4 91.6
我们计算一下真实的平均成绩:90.0
可以看到我们通过15个样本数据,计算了3个不同可信度的区间,这三个区间都包含了真实的总体均数:90.0。
这就是统计学的魅力,它能从寥寥几个样本数据中,利用大自然的规律,去挖掘数据背后的信息。
从上面的那个例子中,我们可以抽取出来很多基本概念。
首先,我们看到这些都是同年级的学生,考的同一门科目。像这种影响被研究指标的主要因素是相同或基本相同的,就可以认为这些研究对象是同质的。
虽然年级相同、年龄相仿、科目一样,但是每个人的成绩又都是不同的。因为每个人的成绩可能的影响因素是极其复杂的,因此同质的个体间其指标是存在差异的,这种差异叫做变异。可以这么说,没有变异就没有统计学,统计学的任务就是在同质的基础上,对个体变异进行分析研究,揭示由变异所掩盖的同质事物内在的本质和规律[1]。
个体是统计分析所要研究的基本对象。上例中,每一个学生就是一个个体,这和数理统计中的概念稍有差别,数理统计中会将每个学生的成绩作为个体。因为数理统计更偏理论一些,而统计学更偏重于解决实际问题,往往在研究一个个体的时候可能不止一个观测指标,如研究某地儿童的发育情况,可能会取身高、体重两个指标,这时把儿童整体作为一个个体,会更便利。
总体(population)是包含所研究的全部个体的集合。比如说,要研究某公司安全从业人员的薪酬情况,这时候总体就是该公司所有安全从业人员;要研究全球所有安全从业人员的薪酬情况,这时候总体就是全球所有的安全从业人员。而上文的例子中,总体就是全校207名学生。
一般情况下,总体的数据是无法全部获取的,可能是由于成本,也可能是由于可行性,也可能是其他各种原因。
既然无法获取所要研究总体的全量数据,那就要从总体中抽一部分出来研究,这一部分是总体的一个子集,叫做样本(sample)。
样本容量(sample size) 也叫样本量,是单个样本内包含的个体数量,比如上例中,样本是15个学生的成绩,那么样本容量就是15。
样本数量 上例中,我们只有一组15个学生的成绩数据,那么样本数量就是1。
样本是怎么来的呢?是从总体里面抽出来的。从总体中选出部分个体的过程叫做抽样,其基本要求是抽样获取的样本对总体要有充分的代表性。抽样可分为:简单随机抽样、分层抽样、系统抽样、整群抽样。
又叫抽样统计量,是对样本的观测值进行某种计算而获取到的一个指标,如上例中15个学生的平均成绩即为一个统计量。注意统计量和总体参数的差别,由样本计算出来的是统计量,由总体计算出来的是总体参数。统计量可以用于对统计参数进行估计(点估计)。
描述总体某一属性的指标,如上例中全体学生的平均成绩(总体均数)即为总体参数,一般用希腊字母μ,σ,π表示。
误差(errors)是观察值与真实值之间的差异。根据误差的来源,可分为如下三类:
随机误差 由于多种随机因素导致的观察值与真实值之间的差异,随机误差的特点是差异是正反双向均衡的,可以通过多次重复测量来降低误差,比如取多次测量结果的平均值。抽样误差(sampling error)就是一种随机误差。样本统计量与总体参数之间的差异叫做抽样误差。抽样误差是可控制和计算的,可以通过增加样本容量来减少抽样误差。
系统误差 系统误差遵循一定的规律,误差值具有固定方向或者恒定不变,如天平未校准导致测量的结果偏高。系统误差是可以避免的,如对仪器进行校准、按照操作流程进行质量控制等。
非系统误差 又称过失误差,是指因操作失误导致的观察值与真实值之间的差异。如抄错数字、写错计量单位等。非系统误差可以通过仔细核对予以清除。[2]
在统计学研究中的研究指标叫做变量,如上例中学生的成绩。类似编程语言,统计学中的变量也分为不同的数据类型:
* 定量数据
`* 连续性数据`
`* 离散型数据`
* 分类数据
`* 两分类`
`* 多分类`
`* 顺序变量`
`* 名义变量`
* 生存时间数据
不同的数据类型,适用不同的统计学方法。
本文通过一个简单的例子来引入了统计学的一些基本概念,概念难免枯燥,但这是基石。后续我也会继续结合不同的实例来跟大家一起继续深入统计学的世界,探索统计的奥妙和神奇。到最后,你会发现,现在比较火的人工智能(AI),其理论基础其实就是统计学[3],不过AI在传统统计学的基础上还揉入了很多工程化的实现,比如引入分布式计算来做数据分析等,这可能是传统统计研究者所不擅长的,不过这不是个理论问题,这只是个技术问题。具体到网络安全领域,其实有很多的场景适合利用统计学加成来完成更智能的攻击或者防守,因此建议对传统安全技术已经审美疲劳的朋友,可以尝试一下安全和统计的嫁接。由于想写的内容比较多,本系列文章会以连载的形式发布。行文若有纰漏之处,欢迎批评指正。
1.http://www.tjxzj.net/789.html 2.https://mengte.online/archives/173 3.https://finance.qq.com/a/20180811/044291.htm