第十一章 应用系统负载分析与磁盘容量预测

11.1背景与挖掘目标

避免应用系统出现存储容量耗尽的情况,从而导致应用系统负债率过高,最终引发系统故障。
需要实现的目标是:
(1)针对历史磁盘数据,采用时间序列分析方法,预测应用系统服务器磁盘已使用空间大小。
(2)根据用户需求设置不同的预警等级,将预测值与容量值进行比较,对其结果进行预警判断,为系统管理员提供定制化的预警提示。

11.2 分析方法与过程

数据抽取,抽取46天的数据,画出时序图可以初步判断磁盘使用情况不具备周期性且为非平稳时间序列数据集。针对原始数据集的分类问题,将代表磁盘信息的三个属性值进行合并交叉,构建具有唯一标识的新属性。

setwd("F:/数据及程序/chapter11/示例程序")
Data <- read.csv("./data/discdata.csv", header = TRUE, encoding = 'utf-8')
# 删除重复项
index1 <- which(Data$VALUE == 52323324)
index2 <- which(Data$VALU == 157283328)
index <- sort(c(index1, index2))
Data <- Data[-index, ]
# 数据变换
x <- matrix(Data$VALUE, nrow = 47, ncol = 2, byrow = T)
index3 <- duplicated(Data$COLLECTTIME)
y <- Data[!index3, ]$COLLECTTIME
Data <- data.frame(Data[1:47, 1], x, y)
colnames(Data) <- c("SYS_NAME", "CWX-C", "CWX-D", "COLLECTTIME")
# 保存数据
write.csv(Data, "./tmp/chuliData.csv", row.names = T)

时间序列分析R语言adf检验 r语言进行adf检验_数据挖掘


平稳性检验用时序图观察法或者ADF单位根检验,防止出现“伪回归”现象。

setwd("F:/数据及程序/chapter11/示例程序")
# install.packages("fUnitRoots")
library(fUnitRoots)
Data <- read.csv("./data/discdata_processed.csv", header = TRUE)
colnames(Data) <- c("SYS_NAME", "COLLECTTIME", "CWC", "CWD")
attach(Data)
# 单位根检验
adfTest(CWD)
# 一阶差分单位根检验
adfTest(diff(CWD))

白噪声检验为了验证选取模型后序列中的信息是否提取完毕,剩下的信息是否为随机扰动项,无法进行预测和使用。使用的是LB统计量。

setwd("F:/数据及程序/chapter11/示例程序")
Data <- read.csv("./data/discdata_processed.csv", header = TRUE)
colnames(Data) <- c("SYS_NAME", "COLLECTTIME", "CWC", "CWD")
attach(Data)
# 白噪声检验
Box.test(CWD, type = "Ljung-Box")

模型识别,采用极大似然比方法进行模型的参数估计,估计各个参数值,采用BIC信息准则对模型进行定阶确定p、q。

setwd("F:/数据及程序/chapter11/示例程序")
library(TSA)
library(forecast)
Data <- read.csv("./data/discdata_processed.csv", header = TRUE)
colnames(Data) <- c("SYS_NAME", "COLLECTTIME", "CWC", "CWD")
attach(Data)
# BIC图
res <- armasubsets(y = CWD, nar = 5, nma = 5, y.name = 'test',
                   ar.method = 'ols')
plot(res)
# 选择拥有最小bic值得p、q值
auto.arima(CWD, ic = "bic")

模型检验,检验模型的残差序列是否为白噪声,如果不是,则还需要对模型进行修改提取模型信息。(不是有个自动定阶的arima模型吗?)

setwd("F:/数据及程序/chapter11/示例程序")
library(forecast)
Data <- read.csv("./data/discdata_processed.csv", header = TRUE)
colnames(Data) <- c("SYS_NAME", "COLLECTTIME", "CWC", "CWD")
attach(Data)
m1 <- arima(CWD, order = c(0, 1, 1))
r1 <- m1$residuals 
# 对残差进行平稳性检验
adfTest(r1)
# 对残差进行随机性检验
Box.test(r1, type = "Ljung-Box") 
m2 <- arima(CWD, order = c(0, 1, 2))
r2 <- m1$residuals
# 对残差进行平稳性检验
adfTest(r2)
# 对残差进行纯随机性检验
Box.test(r2, type = "Ljung-Box")

模型预测预测未来5天的预测值,与真实值比较。根据实际业务分析确定误差阈值为1.5,预测的误差均小于阈值,所以认为模型预测可行。