| 导语 通过历史数据, 基于时间序列来预测未来.
我们生活中很多数据是有时间维度的. 比如说天气或者股票价格. 对于这种带有时序的数据, 有一种基于时间序列的预测模型 ---Prophet.
https://github.com/facebook/prophet
上面是项目的地址, 需要的小伙伴可以去上面一看究竟. 而我主要做的是通过该模型来预测腾讯云数据库存储量变化的未来趋势. 下来就来看看 Prophet 的强大之处吧.
前面说到 Prophet 是基于时间序列的模型, 所以说时间是里面最重要的一个维度(如果您需要预测自己的数据, 那么必须是 pandas 固定的时间格式). 现在就开始直接看下结果吧.
纵轴是腾讯云某类型数据库的购买总量, 可以看到随着时间的增长, 数据库的购买总量还是在不断增长的. 而 Prophet 所要做的就是根据数据的历史表现来估计数据未来的走势. 实验中我选取了 2018 年 1 月到 6 月的数据作为测试集. 黑点为真实值, 蓝色区域为模型预测的估计值, 可以看到随着时间的推移, 总体估计容量的趋势是增长的, 但是随着时间的推移, 不确定性区域越来越大(图中蓝色区域), 也可以认为是随着时间的推移, 不确定性越来越大. 下面来看看真实值与模型预测值是否准确:
图中 6 月份以后的数值是对模型的测试集, 红色区域就是模型未见过的数值与估计值的相对情况. 可以明显的看到, 该模型估计还是相当准确的呀. 可能有很多小伙伴要问了, 为啥 4 月末会出现一个阶段式的跳跃呢? 就是我们腾讯云的一个大客户最近有比较大的手笔.
当然该模型不仅仅可以估计进几个月, 也可以估计更长的时间, 但是随着时间的推移, 可能就更不准确了.
重点就是来了!!!
这东西就是预测一个容量那么简单么?
当然不是了.. 主要分两大方面:
1. 可以为我们自己提供服务:
(1). 可以为我们提供潜在客户的估计.(比如明显可以看到某个公司近几个月飞速购买数据库服务, 但是该公司不是我们的大客户. 所以很难通过简单的容量排行榜找到他. 但是 Prophet 可以估计出谁可能在后面变成大客户, 这样就可以告诉架构师谁是我们的潜在客户.)
(2). 还可以通过对我们数据库的总量或者单个客户的数据库总量进行估计, 告诉大概什么时候客户需要扩容了, 让我们对自己的服务有更好的准备.
2. 我们也可以为我们的客户服务:
(1). 客户可以通过对自习所选的维度进行分析, 相当于一个 saas 服务.
(2). 客户还可以对自己所买的 CVM 相关的用量进行分析, 以便选择最合理的配置.
最后简单说下模型内部结构.
Prophet 是一个累加回归模型 (additiveregressionmodel) 模型的整体构建如下:
y(t) = g(t)+s(t)+h(t)+et
主要有三部分组成: growth(增长趋势),seasonality(季节趋势)以及 holidays(节假日对预测值的影响). 其中 g(t)表示增长函数, 用来拟合时间序列中预测值的非周期变化. 用分段线性或逻辑增长曲线拟合的趋势成分. Prophet 会从数据中找出转折点, 自动检测趋势变化 s(t)用来表示周期性变化, 比如每周, 每年中的季节等. 用傅里叶级数建模的季节成分, 以年为单位. 用虚拟变量表示的季节成分, 以周为单位 h(t)表示时间序列中那些潜在的具有非固定周期的节假日对预测值造成的影响. et 为噪声项.
来源: https://www.qcloud.com/developer/article/1158229