写点什么

基于机器学习的流量波动趋势预测实践

2019 年 10 月 17 日

基于机器学习的流量波动趋势预测实践

1 概述

本实践基于电商网站“苏宁易购”的业务访问流量进行深入的数据挖掘。在此基础上,建立机器学习或统计算法模型,进行离线分析,选取最优模型,对流量波动趋势进行实时预测,实现智能化的异常流量预警。


1.1 流量预测的价值

流量预测是流控的重要环节,也是流控迈向智能化的关键一步。对苏宁易购而言,业务系统流量趋势的预测、异常流量的及时预警极为重要,它能够及时提醒用户验证是否有 CC 攻击、黄牛刷单、爬虫等危害企业网络正常经营活动的行为。


1.2 流量预测的几大难点

对于流量波动趋势预测、异常流量检测,存在以下难点:


  • 需要检测的流量系统种类繁多流量特征各不相同。苏宁易购业务系统众多,每一个系统每分钟产生的流量大小、流量趋势不同,每一分钟的访问业务系统个数不同。

  • 流量受业务系统经营活动影响较大。活动力度大、活动频繁,则流量大且稳定;活动力度大、活动稀疏,则流量波动大。面向易购的销售系统,则流量大且稳定;面向内部用户系统,则流量小且波动大。

  • 不同用户对流量异常的关注点不同,流量预测难以满足所有场景需求。促销、CC 攻击、黄牛刷单、爬虫等,都有可能带来流量的暴增异常。不同人员的关注点不同:运维人员关注流量的暴增是否带来了系统压力;用户则关注流量的异常是否存在某种刷单,是否会带来经济损失;安全人员则关心是否存在某种攻击及信息泄露。要做到一种检测,多方满足,实则难度很大。

  • 流量预测需要较高的实时性、有效性。及时感知异常流量,方能及时的进行有效的流控。易购业务总流量 TPS 大,大促期间流量暴增。需要一种实时高效的计算框架,进行流量的实时计算、在线训练,及时发出异常预警,流量的预测检测才有实际意义。


2 应用系统流量趋势特征分析

2.1 横向流量的按天规律性波动

流量受到不同时间段的用户行为影响较大。不同时间段的流量阈值、峰值不同。白天 08-18 点用户多、流量大,夜间 00-08 流量下降。



2.2 横向阶段性流量规律分析

  1. 夜间流量小,波动大,如下图所示夜间 00-06 点流量图(按分钟统计):



  1. 白天流量大,波动小。如下图所示白天 11-18 点流量图(按分钟统计):



2.3 纵向按分钟周特征分析

取某系统每天同时刻流量数据,取一周数据(按分钟统计):



由上图可知,同系统按天同时刻流量,一周时间内,波动很大,无明显时间规律,因此不利于进行未知流量预测。


2.4 纵向按分钟月特征分析

取某系统每天同时刻流量数据,取一个月数据(按分钟统计):



由上图可知,同系统按天同时刻流量,一个月时间内,波动很大,无明显时间规律,因此不利于进行未知流量预测。


3 异常流量预测算法

对于业务域名系统流量的研究,本质是基于时间序列的研究。我们分别使用 ARMA(自回归滑动平均模型)/LSTM(长短期记忆网络)/MAD(绝对中位差)+Mean(均值)进行了深入探索。


3.1 ARMA 模型

算法简介

自回归滑动平均模型(Autoregressive moving average model),是自回归模型(简称 AR 模型)与移动平均模型(简称 MA 模型)的组合模型。


将预测指标随时间排列而形成的数据序列看作是一个随机序列,这组随机变量所具有的依存关系体现着原始数据在时间上的延续性。一方面,影响因素的影响,另一方面,又有自身变动规律,假定影响因素为 x1,x2,…,xk,由回归分析



其中 Y 是预测对象的观测值,Z 为误差。作为预测对象受到自身变化的影响,其规律可由下式体现:



误差项在不同时期具有依存关系,由下式表示:



由此,获得 ARMA 模型表达式:



拟合误差方程


其中 t 时刻的准确率 ratio,真实值 Yt,预测值 Ypt。


特征工程

  1. 取某业务系统域名某一天 08-10 点的按分钟统计的流量总量时序数据进行训练,流量趋势如下:(时序数据的统计时间间隔可以为天/小时/分钟/秒等,按分钟统计及预测是最符合系统流量预测场景需求的,以下研究都是基于按分钟统计的时序数据)



  1. 平稳性判断及处理,对序列进行一阶差分处理,序列处于平稳状态,处理后的流量趋势图如下(判断/处理平稳性方法略):



效果查看

按分钟预测,不同时间长度后的预测拟合效果如下:



优缺点分析

优点:


  1. 存在成熟的预测接口,可直接预测多步时间间隔数据

  2. 距离当前时间越近,准确率越高


缺点:


  1. 距离当前时间越久,准确性越差

  2. 波动较大的序列经过二阶差分后仍然不平稳,序列平稳性处理有误差,导致模型预测出现误差

  3. 模型训练耗时长,不适合大规模批量实时预测

  4. 不同系统的流量趋势不同,存在众多域名系统,难以训练某一个模型可以全部满足所有的流量系统


3.2 LSTM 模型

算法简介

长短期记忆网络(LSTM,Long Short-Term Memory)是一种时间循环神经网络。它是 RNN 的优化模型,可以解决 RNN 模型的梯度消失与不可记忆长时间依赖问题,是目前解决序列问题最常用的方式。



拟合误差方程


其中 t 时刻的准确率 ratio,真实值 Yt,预测值 Ypt。


特征工程

同 ARMA 模型一致,选取某业务域名系统某一天 08-10 点的按分钟统计的流量总量时序数据进行训练,并切割训练集、测试集,流量序列趋势不再赘述,特征工程处理步骤如下:



  1. 差分处理:基于平稳性的考虑,进行一阶差分处理

  2. 监督式转换:使用 pandas shift 操作,进行 1 位位移,X 为序列的一阶差分结果(a 中的结果),Y 为一阶差分后的 shift(1),如下所示



  1. 数据集切割:略

  2. 标准化转换:MinMaxScaler 将数据处理至[-1,1 区间]


效果查看

  1. 将数据集转换成有监督学习后,测试集数据的预测结果表现如下:



  1. 一次训练,多步叠加预测结果:(注:LSTM 无多步预测接口,可讲新预测数据添加到原始数据序列最后,又作为原始数据进行预测,如此反复循环,得到多步预测结果)



优缺点分析

优点:


  1. 距离当前时间越近,准确率越高


缺点:


  1. 距离当前时间越久,准确性越差

  2. 无多步预测接口。需以新预测数据为新的时序数据,不断叠代方可预测完成

  3. 模型训练耗时长,不适合大规模批量实时预测

  4. 不同系统的流量趋势不同,存在众多域名系统,难以训练某一个模型可以全部满足所有的流量系统


MAD 估计值模型

算法简介

采用统计学习方法对流量进行预测,计算 MAD(绝对中位差)估计值,算法原理如下:



k 为比例因子常量(可视为流量预测的波动系数),值取决于分布类型,流量预测具体值为离散型随机变量。流量序列繁多,统一按正态分布数据计算,对于正态分布,k 值为:



也就是标准正态分布 Z=X/σ的分位函数的倒数(也称为逆累积分布函数)。数值 3/4 是为了包含标准正态累积分布函数的 50%(从 1/4 到 3/4 的范围值)。


预测值 = 历史七天预测时间点数值集合σ + 当前时刻流量值


误差方程


其中 t 时刻的准确率 ratio,真实值 Yt,预测值 Ypt。


特征工程


效果查看

  1. 预测 2min 的数据拟合情况:



  1. 预测 4min 的数据拟合情况:



  1. 预测 8min 的数据拟合情:



以上三幅图分别为预测 2min/4min/8min 以后的拟合曲线,通过开始时间、峰值等时间点可以看出,时间步长越长,拟合效果越差。


优缺点分析

优点:


  1. 特征工程简单

  2. 支持实时快速计算,可进行所有流量序列的实时预测


缺点:


预测步长距离当前时间越久,准确性越差。因为后 2min 的预测强依赖当前总量,步长越长,当前总量的关联性越弱


4 分析总结

本篇主要介绍了流量预测的横向分析,因为横向数据与当前时间点的流量关联最为密切。纵向数据时间跨度大,具有一定的规律性,但是实时关联性不高。比如大促期间流量较平时会成倍增长。因此纵向数据波动性大,不确定因素众多,不利于进行流量预测。


易购的众多业务系统流量存在两大普遍特征:1.白天流量趋势稳定,数据量大;夜间流量趋势波动大,数量量小;2.以天为单位,业务系统呈现规律性波动。


算法最终选择了统计模型,原因为特征工程简单、时效性强、拟合准确率高。ARMA、LSTM 均不能满足时效性要求。不论是选择机器学习算法、深度学习神经网络,或者统计模型,在多步长预测问题上,预测效果均会变差。


本例中未使用 RMSE、MAE、MSE 等方差类统计指标进行模型评估,原因为不同的业务系统,流量趋势、总量不一致,计算出的均方误差等结果差别大,难以确定统一的阈值评判预测结果的好坏。本篇采用了自定义的误差结果计算方法:



对单用户的预测结果进行误差判别,实践中可以取得良好效果。


5 展望

正如开篇所讲流量预测的几大难点之一,不同用户对流量波动的关注点不同,流量预测难以满足所有场景需求。促销、CC 攻击、黄牛刷单、爬虫、用户轨迹异常等,都有可能带来流量的暴增异常。针对异常行为做机器学习分类判断、建立统计学模型等,借助与 flink、spark 等大数据分析框架,实现快速异常定位,是流量预测的下一阶段——异常检测的重要研究方向。


作者介绍:


脱利锋,苏宁科技集团云计算研发中心算法工程师,毕业于江西理工大学信息安全专业,目前致力于苏宁 AI 方向的 web 安全防护工作,主要研究方向为异常流量的预测、检测、识别。


2019 年 10 月 17 日 15:022998

评论 2 条评论

发布
用户头像
效果不是很好。建议把这个问题作为一个数据竞赛来公开征集好的算法。
2020 年 02 月 21 日 03:18
回复
没有更多了
发现更多内容

Spring的IOC常用注解(含源码)

Java王路飞

Java spring 源码 程序员 ioc

【点评必看】这道 Hard 到底难在哪里?大概是难在考察的是违反“人性直觉”的内容吧 ...

宫水三叶的刷题日记

LeetCode 数据结构与算法 面试数据结构与算法

金三银四跳槽必备:阿里新开源Java程序员面试指南(2021版)

Java王路飞

Java spring 程序员 面试 分布式

源码不止Spring!阿里Java程序员源码进修指南我粉了

程序员小毕

Java spring 源码 程序员 架构

淘宝推荐、视频搜索背后的检索技术:阿里达摩院向量检索Proxima核心能力揭秘

Proxima 技术社区

人工智能 大数据 阿里巴巴 搜索 非结构化数据

为什么我们开发 San 项目时要用 CLI?

百度Geek说

service SLI san command

三面美团上岸!分享各位面试感受以及刷题经验!

Java成神之路

Java 程序员 架构 面试 编程语言

Python3 * 和 ** 运算符

老王说编程

Python3

装在套子里的人

Dc

一场发生在“田间地头”的数字化变革

CECBC区块链专委会

三农

2021金三银四阿里+腾讯+字节+滴滴+美团java面试题全梳理(高清脑图+面试答案)!

程序员小毕

Java spring 程序员 面试 分布式

2021年3月国产数据库排行榜:雏凤声清阿里三连 绝代双骄华为合璧

墨天轮

数据库 腾讯云 阿里云 华为云 TiDB

微信小程序开发:腾讯地图集成步骤(旧题新说)

三掌柜

微信小程序 腾讯地图 3月日更

Kubectl Plugin 推荐(二)| 简化操作篇

郭旭东

Kubernetes kubectl kubectl plugin

面试看这个就够了!最新BAT大厂面试者整理的Android面试题目模板,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

这操作真香!一线互联网企业高级Android工程师面试题大全,面试真题解析

欢喜学安卓

android 程序员 面试 移动开发

2021最新发布拼多多/字节/360/网易/面经总结

比伯

Java 编程 程序员 架构 面试

我掏空了各大搜索引擎,给你整理了188道Java面试题,满满干货记得收藏

Java成神之路

Java 程序员 架构 面试 编程语言

LeetCode题解:125. 验证回文串,翻转数组,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

书单|互联网企业面试案头书之程序员技术篇

博文视点Broadview

选择IDaaS解决方案的6个技巧

龙归科技

Idaas

谷歌大佬回国发展,吊打各大厂面试官!吐血总结大厂面试高频点及笔记解析

Java架构之路

Java 程序员 架构 面试 编程语言

他喵的,Google大佬的这份LeetCode刷题笔记太强了,提升算法能力必备!

Java架构之路

Java 程序员 架构 面试 编程语言

数据库周刊60丨3月国产数据库排行榜出炉;日本银行数据迁移失败致使业务宕机;阿里云RDS PG13发布;亚健康Oracle数据库故障定位;Redis最佳实践;MySQL查询优化……

墨天轮

MySQL 数据库 oracle 运维 postgre

产品经路训练营 -- 第四章作业(一)

Lucas zhou

产品经理训练

如何凝聚党员力量?智慧组工系统构架组织部管理平台解决方案

源中瑞-龙先生

解决方案 党员 智慧组工

腾讯五面、快手三面已拿offer(Java岗位),分享个人面经

Java架构之路

Java 程序员 架构 面试 编程语言

滚雪球学 Python 之 lambda 表达式

梦想橡皮擦

28天写作 3月日更

速来围观!阿里P8大牛写出的JDK源码剖析及大型网站技术架构与业务架构融合之道

Java成神之路

Java 程序员 架构 面试 编程语言

场景demo落地 - 视频通话 2.0 ARCall

anyRTC开发者

flutter uni-app android WebRTC RTC

SpringBoot自动装配加载过程全梳理!你能get多少?

程序员小毕

Java 程序员 架构 面试 springboot

基于机器学习的流量波动趋势预测实践-InfoQ