如何从时间序列预测 CPU 需求?

机器算法验证 r 时间序列
2022-03-29 17:59:16

我有一些过去的真实数据。数据显示了某个时间段的应用需求(例如cpu需求)。例如,数据如下所示:

3,2,1,5,7,8,9,1,3,12,4,5

这 12 个值分别显示了一天前 12 个小时内 cpu 的应用需求:3 是 00:00 到 01:00m 之间的需求,2 是 01:00 - 02:00 之间的需求等...

所以我所拥有的是一堆值,我想做的是对未来应用程序需求的预测或估计。假设我有 120 个值,显示 10 天的需求,每天 12 小时。基于这些数据,我想估计需求值比以前的值多或少的概率。

我怎样才能用 R 实现这一点?我认为这个问题与 R 没有直接关系,但认为一般知识渊博的人可以给我一些具体的想法。

感谢您宝贵的时间!

4个回答

从 R 中的预测包开始。 auto.arima 和 ets 都有有用的预测和预测方法。

这是一个例子:

#Make a periodic dataset
set.seed(1)
data <- c(3,2,1,5,7,8,9,1,3,12,4,5)
data <- rep(data,5)
data <- data+seq(1,length(data)) #Add trend
data <- data+rnorm(length(data))*5 #Add noise
data <- ts(data,frequency=12)
plot(data)

#Build models
library(forecast)
model1 <- StructTS(data)
model2 <- ets(data)
model3 <- auto.arima(data)
model4 <- stl(data,s.window='periodic')

#Test accuracy (on training data)
round(accuracy(model1),4)
round(accuracy(model2),4)
round(accuracy(model3),4)
p4 <- model4$time.series
p4 <- p4[,'seasonal']+p4[,'trend']+p4[,'remainder']
round(accuracy(data,p4),4)  #This model needs to be tested OUT of sample

#Forecast 1 period
f1 <- forecast(model1,h=12) #this fails for some reason
f2 <- forecast(model2,h=12)
f3 <- forecast(model3,h=12)
f4 <- forecast(model4,h=12)

par(mfrow = c(2,2))
plot(f1)
plot(f2)
plot(f3)
plot(f4)

你正在做的是时间序列分析,并且有很多包。查看任务视图以帮助您入门。

可能要做的最简单的分析(并且您应该始终从简单开始)是将系列分解为每日效果、趋势和不规则成分。看一下stl功能。

如果你有可靠的历史数据,你可以使用 MCMC 方法

查看以下文章,

http://lpenz.github.com/articles/df0pred-2/index.html

http://lpenz.github.com/articles/df0pred-3/index.html

他使用 MCMC 预测硬盘空间需求。

“我有 120 个值显示 10 天的需求,每天 12 小时。” . 这是一个混合频率问题,您可能有一个集成模型,其中包含一个描述日内结构的 ARIMA 组件和一个传递函数组件(回归的泛化)来处理日常影响。这些“日常影响”可能会受到迄今为止未知的(但通过干预检测在统计上可识别)脉冲、电平转换和本地时间趋势的影响。此外,可能有星期几;一个月中的某一天;一年中的一周/一个月的影响。在已知事件之前、之后和之后也可能存在模式。此外,可能存在明显的非恒定误差方差,表明 GLS/GARCH 甚至参数随时间发生变化。

在形成这样一个具有已证明高斯误差的模型之后,在我看来,它似乎是一个简单的应用程序,使用预测相对于最后一个值的置信限来评估您正在寻找的概率。