数学建模.docx
《数学建模.docx》由会员分享,可在线阅读,更多相关《数学建模.docx(30页珍藏版)》请在冰点文库上搜索。
数学建模
ATM交易状态特征分析与异常检测
摘要
因为ATM机的自动化处理机制,基本无工作人员监管,商业银行需要通过对每家分行的汇总统计信息做数据分析,来捕捉整个前端和后端整体应用系统运行情况以及时发现异常或故障。
针对问题一,要对ATM机各种状态下的特征参数进行提取,对各个指标之
间的相关性进行分析,发现三个指标之间并不存在明显相关性,只有交易量与时
间、日期存在明显的相关性。
采用作图等手段,由观察分析这些数据呈现出正态
分布的趋势,然后在MATLAB软件下进行了数据拟合处理,计算出均值和方差,
并算出置信区间,因而决定将均值和方差作为特征参数;对其他指标采用方差分
析法,采取其标准差和平均值作为特征参数。
针对问题二,要对各种异常或故障进行检测并能够做到及时报警,是对问题一中各个特征参数的分析和与之相对应的ATM机问题的发现,通过对一中各个参数分析,采用相对应的模型进行检测并能正确报警。
对每一分钟根据其正态分布特性分别求出置信区间作为正常数据区间,由于这个模型在交易量极小时无法区分异常数据,因此我们使用编程建立了对交易量进行连续极小值进行检测的模型来处理。
经过模型比较,发现三个指标不存在明显相关性,且每个指标都至少对应一个故障源,因此可以对三个参数异常数据进行独立检测。
在建立异常和故障报警模型时,考虑到现实中故障有一定的持续时间,因此在模型中只有当一个指标出现异常持续一定时间,才会发出异常或故障报警。
针对问题三,我们需要采取更多的数据进行ATM机异常或故障的分析,ATM机的交易无非就是各个银行卡账户上的钱数目交易,因此通过对业务量、交易成功率、响应时间、交易数额和网络负载率五者的全面分析,建立模型来提升ATM机异常或故障的更精确报警。
为了能够帮助银行检测出系统运行时的异常或故障,本文将大量数据绘制成各指标的散点图来进行初步的统计分析,提取出指标的特征参数,通过阈值划分,方差分析法,数据的台阶检测等,设计出一套交易状态异常检测方案。
关键字:
方差分析法;散点图;正态分布;统计分析
一、问题重述
某商业银行的ATM应用系统包括前端和后端两个部分。
前端是部署在银行营业部和各自助服务点的ATM机(系统),后端是总行数据中心的处理系统。
前端的主要功能是和客户直接交互,采集客户请求信息,然后通过网络传输到后端,再进行数据和账务处理。
持卡人从前端设备提交查询或转账或取现等业务请求,到后台处理完毕,并将处理结果返回到前端,通知持卡人业务处理最终状态,我们称这样完整的一个流程为一笔交易。
商业银行总行数据中心监控系统为了实时掌握全行的业务状态,每分钟对各分行的交易信息进行汇总统计。
汇总信息包括业务量、交易成功率、交易响应时间三个指标,各指标解释如下:
1、业务量:
每分钟总共发生的交易总笔数;
2、交易成功率:
每分钟交易成功笔数和业务量的比率;
3、交易响应时间:
一分钟内每笔交易在后端处理的平均耗时(单位:
毫秒)。
交易数据分布存在以下特征:
工作日和非工作日的交易量存在差别;一天内,交易量也存在业务低谷时间段和正常业务时间段。
当无交易发生时,交易成功率和交易响应时间指标为空。
商业银行总行数据中心监控系统通过对每家分行的汇总统计信息做数据分析,来捕捉整个前端和后端整体应用系统运行情况以及时发现异常或故障。
常见的故障场景包括但不限于如下情形:
1、分行侧网络传输节点故障,前端交易无法上送请求,导致业务量陡降;
2、分行侧参数数据变更或者配置错误,数据中心后端处理失败率增加,影响交易成功率指标;
3、数据中心后端处理系统异常(如操作系统CPU负荷过大)引起交易处理缓慢,影响交易响应时间指标;
4、数据中心后端处理系统应用进程异常,导致交易失败或响应缓慢。
附件是某商业银行ATM应用系统某分行的交易统计数据。
假设附件的数据对应的交易状态无异常。
你的任务是:
(1)选择、提取和分析ATM交易状态的特征参数;
(2)设计一套交易状态异常检测方案,在对该交易系统的应用可用性异常情况下能做到及时报警,同时尽量减少虚警误报;
(3)设想可增加采集的数据。
基于扩展数据,你能如何提升任务
(1)
(2)中你达到的目标?
二、模型假设:
1.非正常因素不会对数据造成影响。
2.银行的经营状况不会对交易量产生影响
三、符号说明:
μ1:
交易量平均值
σ1:
交易量标准差
μ2:
成功率平均值
σ2:
成功率标准差
μ3:
响应时间平均值
σ3:
响应时间标准差
四、模型的建立与求解
(一)问题一的建立与求解
1.三个指标,日期时间之间相关性的分析
我们使用SPSS软件求出这几个参数的相关性矩阵
图4.1相关性矩阵
根据求出的相关性矩阵可以得出,交易量和时间存在相关性,成功率和响应时间存在负相关性。
图4.2成功率与响应时间散点图
因此我们对三个指标分别进行处理,主要通过散点图来观察大量数据的特征,进行初步分析。
通过对上图的分析,我们发现成功率与响应时间没有明显相关性。
2.对交易量进行处理
为了便于观察大量数据的特征,我们使用Excel分类汇总并绘制出了日总交易量与日期的折线图
图1
图4.3日总交易量与日期的折线图
对这幅图进行初步的分析我们得出以下几个结果
11月23日至2月1日的图像有非常明显的波动,而之后的日总交易量曲线波动较小且维持在一定的区间。
从实际因素考虑,我们推测是因为中国春节的这个因素造成的,因此决定分段处理日总交易量和时间的曲线。
2题目中提示:
工作日和非工作日的交易量存在差别,但是通过对图1的分析,我们没有发现工作日和非工作日的交易量以及与日期有关的明显周期性变化。
并且观察下图得出工作日和非工作日的单日交易量不存在明显区别
图4.4工作日(红)和非工作日(黑)交易量—时间散点图
图4.5交易量与时间的散点图
从上图我们可以的出以下结果
1交易量与时间的确存在明显的相关性,曲线呈M型,且从图中可以看出不同日期的曲线形状相似度很高,既排除春节期间,不同日期相同时间交易量十分接近。
2交易量在凌晨2-7点时极低,考虑晚上人流量少的实际因素,此为
正常情况
根据结果一我们进一步分析,猜想不同日期相同时间(分钟)的交易量符合正态分布,并通过作出的图像验证了我们的猜想。
(以下3张图即为我们作出的部分图像)
图4.6
根据该数据正态分布特征,我们提取不同日期相同时间(分钟)的交易量的平均值和方差作为交易量的特征参数。
我们使用Visualstudio2015编译器下编写的C++语言程序(下简称C++)来
计算平均值和方差。
3.成功率指标特征参数提取
图4.7成功率-时间散点图
根据上图我们可以得出以下结果:
1成功率-时间图散点的分布较为集中且不随时间变化,验证了之前相关性分析的结论
2在交易量低的2-7点,成功率散点的分布离散程度比交易量高的时间段大
根据以上得出的结果我们进行进一步的分析,交易量低正是造成成功率离散程度高的原因,与异常和故障并无直接关系,因此使用编程设计了一个模型,来消除这个无关因素的影响。
模型处理过程如下:
对交易量不足设定值K的时间进行连续累加——>当累加值超过K时计算一次成功率——>以这个成功率来代表这段时间的成功率
考虑到后续及时报警因素的考虑,经过多次尝试,K值定为50时效果明显,且最长累加时间为10分钟,符合及时报警的考虑因素。
图4.8处理后成功率-时间散点图
上述模型流程图如下:
图4.9模型流程图
从处理后的散点图可以看出该模型符合预期设定的目标。
根据处理后的图像,发现成功率值都集中在较高的区域,因此我们决定使用方差分析法来寻找其置信区间。
方差分析法作为一种数理统计方法广泛应用于气象、水文、地震等行业数据的科学统计与分析。
可应用方差分析法计算最新采集数据与其均值的离散程度。
成功率的数据分布集中在一定范围内,当数据变化的绝对值超过N倍标准均方差变化阀值的数据个数达到一定标准时通常说明数据存在异常。
利用方差分析数据异常,N的取值采用两种方法来实现:
①单次N值比较法,通常情况下N值默认为3,即数据变化超过3倍标准方差即认为该点数据不正常,当这种不正常的数据点个数超过用户设定的某个数值时即认为数据存在异常,N的取值和不正常数据点个数可由用户根据测项类型与长期统计结果具体设定,通过该方法可检测出数据超出3倍均方差的数据异常;②双次N值比较法,利用第1次N值比较去除干扰,即认为数据变化超过N次标准方差的数据点为干扰点,去掉干扰点后进行第2次N值比较,通常取N为2,即去掉干扰后,数据变化超过2倍方差的数据个数超过用户设定的某个数值时即认为数据存在异常。
[1]
分析成功率的数据,发现成功率存在极大偏离值,因此使用双次N值比较法更为合理。
根据双次N值比较法的需要,我们先进行第一次N值比较处理,去除极端异常值之后求出成功率的平均值和方差作为其特征参数。
4.响应时间指标特征参数提取
图4.10
根据上图我们可以得出以下结论:
1在交易量较大的时间段响应时间稍有下降,我们推测是由于白天交易量大,银行开设的服务器及处理器较多,因此降低了响应时间。
2响应时间数据集中在一个较窄的区间,数据点的离散程度较低。
同样的,分析响应时间的数据,由于响应时间存在极大偏离值,因此使用双次N值比较法更为合理。
根据方差分析法的需要,我们先进行第一次处理,去除极端异常值之后求出响应时间的平均值和方差作为其特征参数。
(二)问题二的建立与求解
由于故障判断需要通过三个指标数据的异常得出,因此我们先对三个指标的异常数据判断分别建立模型。
1.交易量的异常检测模型
一月末二月初的交易量异常情况在后面进行讨论,首先对这之外的正常情况进行处理。
(1)交易量异常检测模型1
①模型的建立
根据第一问求出的特征参数和不同日期相同时间(分钟)交易量的正态分布特性,对每一分钟分别求出置信区间。
根据其正态分布的特性,尝试选取μ±2σ或μ±3σ作为其置信区间,在其置信区间外即判定该交易量数据出现异常,通过对图像的观察分析得出因为μ±2σ未包含的正常点的数量过多,所以μ±3σ的区间选取更为合理。
图4.11
②模型合理性分析
通过对该模型的进一步分析可以得出在交易量低于一定值的一段时间区间内,置信区间下界小于0,因而该模型在这种情形下不能达到其预期效果,所以我们设计了另一模型来处理这种情况。
(2)交易量异常检测模型2
①模型的建立
该模型的流程图为:
我们使用C++编写程序来实现这一模型。
该模型检测连续K分钟内交易量低于A的个数超过一个阈值,就判定交易量数据出现异常。
(3)春节期间交易量数据异常检测模型
①模型的建立
之前已分析得出春节期间每日的交易量-时间(分钟)点图与正常期间每日的交易量-时间(每分钟)点图相似度较高。
因此尝试用春节期间单天的总交易量与单天基准总交易量的比值作为权值,与单日基准交易量-时间(分钟)点值相乘来近似估计春节期间的某日交易量-时间(每分钟)点值。
对正常期间日总交易量的方差和图像进行分析,发现其数据较为稳定。
因此可以将正常期间日总交易量的平均值作为基准A,单日基准交易量-时间(分钟)点值取模型1.1中求出的μ。
3模型合理性分析
通过matllab绘制出春节期间每一天该模型预测出的交易量-时间(分钟)点图与对应春节某日实际交易量-时间散点图,发现预测准确度较高,模型建立合理。
2.响应时间异常数据检测方法
使用方差分析法来进行响应时间异常数据检测
响应时间得出的特征参数为:
利用第1次N值比较去除干扰点后得到的方差及平均值。
根据方差和平均值进行第2次N值比较,一般取N为2,即去掉干扰后,数据变化超过2倍方差的数据即认为数据存在异常。
这里我们通过C++实现该模型。
第一次N值比较
第二次N值比较
μ
100.765
μ
92.5106
σ
601.405
σ
25.6154
3.成功率异常数据检测方法
成功率数据分布十分集中,与响应时间较为相似,因此使用相同的模型和方法,得出下表
第一次N值比较
第二次N值比较
μ
0.956799
0.956809
σ
0.0201516
0.0164322
异常点数量
1137
853
4.交易状态异常检测方案模型
通过三个重要指标的异常数据检测模型的建立,当任一指标出现异常数据即可及时发现。
根据题目中描述常见的故障场景包括但不限于如下情形:
①分行侧网络传输节点故障,前端交易无法上送请求,导致业务量陡降;
②分行侧参数数据变更或者配置错误,数据中心后端处理失败率增加,影响交易成功率指标;
③数据中心后端处理系统异常(如操作系统CPU负荷过大)引起交易处理缓慢,影响交易响应时间指标;
4数据中心后端处理系统应用进程异常,导致交易失败或响应缓慢。
故障场景1对应交易量出现异常降低的数据
故障场景2对应交易成功率出现异常降低的数据
故障场景3对应响应时间出现异常上升的数据
故障场景4对应响应时间出现异常上升的数据和交易成功率出现异常降低的数据
交易量状态
成功率状态
响应时间状态
故障场景1
1
0
0
故障场景2
0
1
0
故障场景3
0
0
1
故障场景4
0
1
1
正常情况
0
0
0
以上分析得出每一个指标数据出现异常至少对应一个故障场景(而且故障场景不限于以上4种)。
结合现实中故障有一定的持续时间,因此只有当一个指标出现异常一定时间,才应发出故障报警。
因为缺少每种故障场景所需的修复时间,我们将其暂定10分钟。
(1)模型的建立
我们通过计算机编程检测的方式来检测某一参数异常的持续时间。
当某一参数10分钟内异常数据超过一个阈值N时,我们就输出一个故障信号。
因为题目所给数据中没有故障标记,因此阈值N的值现在难以确定。
(三)问题三的分析
可获得数据有:
1.每分钟交易金额
若每分钟交易金额增大,每笔交易的平均时间会有一定的增加,间接的导致交易量的下降。
若发现交易量的突降,如果同时交易金额的突增,可以不进行故障场景1预警,降低故障场景1的误报率。
但是值得注意的是,交易金额在交易量绝对数量较大时对交易量影响较大,在ATM闲时影响会比较小。
2.网络负载率
若检测到网络负载率达到较大值或者满载值,响应时间较大,成功率较低或交易量骤减就很可能不是前端或后端的故障问题导致,而是数据传输过程出现阻塞导致,此数据的采集也能一定程度上减少误报率。
[2]
3.每种故障的修复时间:
对于问题一可增加一个特征参数,即为每种故障的平均修复时间
对于问题二这个因素直接影响到异常值持续多少时间判定为出现故障
该数据采集难度较低,只需每次修复各种故障时进行登记统计即可。
五、模型改进方向
5.1模型的优点
由于题目中所给数据没有给出异常或故障对应的标记,所以较难建立出模型划分出三个指标和提取出的特征参数的正常区间。
同时,题目所给数据也不包含每个故障原因对应的平均修复时间因此,一段时间内异常数据阈值N的值也难以确定.
5.2模型的缺点
1、可以根据给出的异常数据标记,使用有监督学习的神经网络或聚类分析法来划分出参数的正常区间。
2、每个故障对应的平均修复时间可以确定后,则可以确定出段时间内异常数据阈值N的值,提升故障异常发现的概率同时减少误报率。
六、参考文献
[1]龚纯王正林等,精通Matlab最优化计算[M],电子工业出版社,北京,2009
[2]曹忠虔.时间序列异常检测的研究[M].成都电子科技大学,2012.
[3]姜启源,谢金星,叶俊.数学建模[M].高等教育出版社,北京,2011;15-23;
[4]侯欣强,符意德,徐文波.银行自助设备管理系统的设计与实现.南京理工大学出版社,2007;
七、附件
MATLAB绘图代码
r=1440*rand([110]);
fori=1:
10
reg=[];
reg1=[];
max=0;
forn=1:
131013
iftime(n)>=(floor(r(i)/60)*100+mod(floor(r(i)),60))&&time(n)<=(floor(r(i)/60)*100+mod(floor(r(i)),60)+4)
ifdate(n)==126||floor(date(n)/100)~=1
ifmaxmax=J(n);
end
end
end
end
reg(floor(max/5)+1)=0;
reg1(floor(max/5)+1)=0;
forn=1:
131013
iftime(n)>=(floor(r(i)/60)*100+mod(floor(r(i)),60))&&time(n)<=(floor(r(i)/60)*100+mod(floor(r(i)),60))+4
ifdate(n)==126
reg1(floor(J(n)/5)+1)=reg(floor(J(n)/5)+1)+1;%
else
iffloor(date(n)/100)~=1
reg(floor(J(n)/5)+1)=reg(floor(J(n)/5)+1)+1;
end
end
end
end
figure;
bar(1:
floor(max/5)+1,reg);
holdon;
bar(1:
floor(max/5)+1,reg1,'r');
str=['time=',num2str(floor(r(i)/60)),':
',num2str(mod(floor(r(i)),60))];
str_=num2str(floor(r(i)));
%strcat(str,num2str(floor(r(i)/60)*100),':
',num2str(floor(r(i)),60));
title(str);
xlabel('交易量');
ylabel('频数');
%saveas(gcf,str_);
end
N=131013;
Time=1:
1440;
%forn=1:
N
%Time(n)=floor(time(n)/100)*60+mod(time(n),60);
%end
j=zeros(91,1440);
day=0;
dat=0;
forn=1:
N
ifdate(n)~=dat
dat=date(n);
day=day+1;
end
end
day=1;
dat=123;
forn=1:
91
form=1:
1440
ifm==1&&date(day)~=dat
dat=date(day);
elseifdate(day)~=dat
dat=date(day);
break;
end
end
j(n,m)=J(day);
day=day+1;
end
end
day=1:
91;
figure;
mesh(Time,day,j);
xlabel('时间');
ylabel('日期');
zlabel('交易量');
title('交易量与日期时间总图');
CGL=1:
14400;
XY=1:
14400;
forn=1:
14400
CGL(n)=C(n);
XY(n)=X(n);
end
Time=1:
131013;
forn=1:
131013
Time(n)=floor(time(n)/100)*60+mod(time(n),60);
end
scatter(Time,J);
xlabel('成功率');
ylabel('响应时间');
title('成功率与响应时间');
C++交易量累加达到阈值统计成功率函数
intmain()
{
fstreamin;
in.open("all.txt",ios:
:
in);
if(!
in.is_open())
{
cout<<"文件无法打开"<return-1;
}
intnum=0,max=0,maxi;
floata;
while(in>>a&&fabs(a+1)>1e-6)//0:
序号1:
日期2:
时间3:
交易量4:
成功率5:
响应时间
{
dat[num+1][0]=a;
in>>dat[num+1][1]>>dat[num+1][2]>>dat[num+1][3]>>dat[num+1][4];
in>>dat[num+1][5];
num++;
}
in.close();
fstreamout;
intdate;
out.open("all_r.txt",ios:
:
out);
if(!
out.is_open())
{
cout<<"文件无法创建"<return-1;
}
intii=0;
for(inti=1;i<=num;i++)
{
floatsum=dat[i][3],suc=dat[i][3]*dat[i][4];
for(intj=i+1;sumsum+=dat[j][3],suc+=dat[j][3]*dat[j][4];
if(dat[i][4]{
out<
ii++;
}
}
out<in.close();
out.close();
}
C++交易量连续极小处理函数
intmain()
{
fstreamin;
in.open("all.txt",ios:
:
in);
if(!
in.is_open())
{
cout<<"文件无法打开"<return-1;
}
intnum=0,max=0,maxi;
floata;
while(in>>a&&fabs(a+1)>1e-6)//0:
序号1:
日期2:
时间3:
交易量4:
成功率5:
响应时间
{
dat[num+1][0]=a;
in>>dat[num+1][1]>>dat[num+1][2]>>dat[num+1][3]>>dat[num+1][4];
in>>dat[num+1][5];
num++;
}
in.close();
fstreamout;
intdate;
out.open("all_r.txt",ios:
:
out);
if(!
out.is_open())
{
cout<<"文件无法创建"<return-1;
}
intk=0,j;
for(inti=1;i<=num;i++)
{
for(j=i;j<=i+length;j++)