使用Gompertz模型预测非典的趋势

在预测软件的可靠性时,可以根据该软件多轮测试发现的缺陷个数来预测应该发现的总缺陷数。在软件测试过程中,最开始的时候,会呈现缺陷增长较快的趋势状态,随着测试的进行,测试难度加大,需要执行较多的测试用例才能发现一个缺陷,虽然继续投入测试,仍然会持续发现缺陷,但是明显缺陷的增长速度会减缓,同时软件中隐藏的缺陷是有限的,因而限制了发现缺陷数的无限增长。在实践中预测总缺陷数的常用方法是Gompertz模型,该模型预测的准确率很高,尤其是当测试轮次超过总轮次的1/3之后。

其实Gompertz模型最初并非是针对软件领域的,而是用来预测人类的死亡概率,所以人们也称之为:“Gompertz人类死亡定律”,它是由英国保险精算师Benjamin Gompertz在1825年首次发现:你认为你在明年死的概率是多少?试着用一个数字回答——百分之一?万分之一?不管是多少,这个数字将在8年后增长一倍!这意味着人们能活到某个特定年龄的概率是在不断加速下降的。 该模型可以用来刻画这样的现象:初期增长缓慢,以后逐渐加快,当达到一定程度后,增长率又逐渐下降,最后接近一条渐近线(K值)。现实中有许多现象符合Gompertz曲线,如软件缺陷的发现、一定时期的人口增长等,因而该曲线被广泛应用于现象的趋势变动研究。

            Gompertz模型是一个双指数公式:

 

            其中:

                        t是自变量,代表时间,如测试轮次等;

                        K代表Y的极限值,即当t趋向于无穷大时Y的取值,如软件中隐藏的缺陷总数;

                        a<1,Ka为t=0时Y的初始值;

                        0<b<1,b为形状参数,b越大,代表可靠性增长越慢,到达极限值的速度越慢,如软件测试的周期越长。

            当已知了历史数据之后,就可以根据历史数据采用三和法、三点法、高斯牛顿法等多种方法求出K,a,b值,从而拟合出该现象的发展趋势。尽管该方法理论上有一些前提条件,但是实践中我们忽略其前提条件,仍然有很高的准确度。

            我们以2003年4月20日到6月12日65天的北京市非典数据为例进行测算一下:

序号

 

日 期

已确诊病例累计

新增确诊

1

4月20日

339

339

2

4月21日

482

143

3

4月22日

588

106

4

4月23日

693

105

5

4月24日

774

81

6

4月25日

877

103

7

4月26日

988

111

8

4月27日

1114

126

9

4月28日

1199

85

10

4月29日

1347

148

11

4月30日

1440

93

12

5月1日

1553

113

13

5月2日

1636

83

14

5月3日

1741

105

15

5月4日

1803

62

16

5月5日

1897

94

17

5月6日

1960

63

18

5月7日

2049

89

19

5月8日

2136

87

20

5月9日

2177

41

21

5月10日

2227

50

22

5月11日

2265

38

23

5月12日

2304

39

24

5月13日

2347

43

25

5月14日

2370

23

26

5月15日

2388

18

27

5月16日

2405

17

28

5月17日

2420

15

29

5月18日

2434

14

30

5月19日

2437

3

31

5月20日

2444

7

32

5月21日

2444

0

33

5月22日

2456

12

34

5月23日

2465

9

35

5月24日

2490

25

36

5月25日

2499

9

37

5月26日

2504

5

38

5月27日

2512

8

39

5月28日

2514

2

40

5月29日

2517

3

41

5月30日

2520

3

42

5月31日

2521

1

43

6月16日

2521

0

44

6月17日

2521

0

45

6月18日

2521

0

46

6月19日

2521

0

47

6月20日

2521

0

48

6月21日

2521

0

49

6月22日

2521

0

50

6月23日

2521

0

51

6月1日

2522

1

52

6月2日

2522

0

53

6月3日

2522

0

54

6月4日

2522

0

55

6月5日

2522

0

56

6月6日

2522

0

57

6月8日

2522

0

58

6月9日

2522

0

59

6月10日

2522

0

60

6月13日

2522

0

61

6月14日

2522

0

62

6月15日

2522

0

63

6月7日

2523

1

64

6月11日

2523

0

65

6月12日

2523

0

 

            在1stopt软件中对上述65天的数据进行拟合得到如下的结果:

 

相关系数(R): 0.9993

相关系数之平方(R^2): 0.9987

 

参数     最佳估算

----------      -------------

K               2539.2751

a               0.0991

b              0.8769

 

即模型预测的最终确诊人数上限为2539,在疫情发展过程中,我们可以每天进行预测K值的变化,以下为基于上述2003年非典数据每5天一次的预测结果与实际值的对比:

第几天进行预测

K值(上限)

与实际值2523的偏差

与实际值的偏差率

5

982

-1541

-61.08%

10

2530

7

0.28%

15

2715

192

7.61%

20

2779

256

10.15%

25

2712

189

7.49%

30

2632

109

4.32%

35

2581

58

2.30%

40

2569

46

1.82%

45

2560

37

1.47%

50

2552

29

1.15%

55

2546

23

0.91%

60

2542

19

0.75%

65

2539

16

0.63%

综合上表我们可以发现该模型在初期,即疫情发展的前5天,趋势不明显时,预测结果偏差较大,但是中后期拟合的效果还是很好的!

 

            如果采用该方法预测一下当下的新型冠状病毒肺炎的趋势会是怎么样的呢?敬请关注后续文章!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章