Цель работы: «Обнаружение Аномалий в IP Сетях Методами Анализа Временных Рядов. Техника статистической обработки сигналов, основанная на обнаружении резких изменений
Задание лабораторной работы
1) Следуя варианту, загрузить 1-й файл данных, разбить его на смежные участки (колонки) по 21 отсчету и провести вычисления ООП. Считая, что любые два смежных участка содержат резкое изменение модели, определить пороговые значения критерия, которые выявляют 50%, 75%, 90% и 95% аномалий.
2) Загрузить 2-й файл данных, разбить его на смежные участки (колонки) по 21 отсчету и провести вычисления ООП. Считая, что никакие два смежных участка не содержат резкого изменения модели, определить для найденных в предыдущем пункте пороговых значений доли ложных тревог.
Пример решения задания лабораторной работы
clear all
load var126 % Загрузка данных смешанного
% трафика
load var226 % Загрузка данных нормалного
% трафика
figure(1),
subplot(2,1,1), plot(datac(:)),…
title('Normal traffic') % График «объединенных»
subplot(2,1,2), plot(datav(:)),… % отрезков рядов
title('Mixed traffic')
Графическое предсьавление наблюденных данных
• helthfunk1=[];helthfunk2=[];
•
• % Вычислим значения функции здоровья для смежных пар в
• % нормальном и аномальном трафике,helthfunk2 и helthfunk1
• % соответственно
•
• [rv,cv]=size(datav);
• K=cv;
•
• for i=1:2:(cv-1)
• helthfunk1=[helthfunk1,cotest01(datav(:,i),datav(:,i+1))];
• helthfunk2=[helthfunk2,cotest01(datac(:,i),datac(:,i+1))];
• end
• % На следующем слайде приведен текст функции cotest01
Функция cotest01
• function alert=cotest01(ld,sd)
• % Вычисляет функцию здоровья на стыке
• % отрезков рядов 'ld'(Learning data) длины NL+1
• % и 'sd' (Sequential data) длины NS+1 по критерию
• % alert=sl^(-NL)*ss^(-NS)/(sl^(-NL)*ss^(-NS)+sp^(-NL-NS)
• % =1/(1+(sl/sp)^NL*(ss/sp)^NS)
• % где sl,sd - остаточные вариации, полученные в
• % предположении, что каждый из
• % отрезков попрожден авторегрессионной моделью первого
• % порядка, оцененной по каждому отрезку
• % sp - вариация объединенных отрезков.
• % Среднее из рядов удаляется при начале вычислений
• ld=ld(:);sd=sd(:);
• NL=length(ld)-1;NS=length(sd)-1;
• ld=ld-ones(size(ld))*mean(ld); % Удалим среднее
• sd=sd-ones(size(sd))*mean(sd); % Удалим среднее
• ldrest=farrest(ld); % Ряд из остатков от ld
• varldrest=std(ldrest); % Вариация ряда из остатков ld
• sdrest=farrest(sd); % Ряд из остатков от sd
• varsdrest=std(sdrest); % Вариация ряд из остатков sd
• sp=[ldrest;sdrest]; % Объединенный ряд из остатков
• varsp=std(sp); % Вариация этого ряда
• ret1=varldrest/varsp; % Отношение вариации ldrest к вариации sp
• ret2=varsdrest/varsp;
• alert=1/(1+ret1^NL*ret2^NS);
Функция farrest
• В работе функции cotest01 использована функция farrest. Вот ее текст:
• function rest=farrest(tb)
• % Функция возвращает ряд из остатков автрегрессионной модели,
• % оцененной по отрезку ряд tb на основе предположения о том,
• % что данные порождены авторегрессионным процессом
• % tb(n)=r*tb(n-1)+e(n),n=2:tr,
• % где e(n) независимые одинаково распределенные случайные
• % величины
• % с нулевым средним. Из tb должно быть удалено среднее.
• tb=tb(:); % Теперь это точно колонка
• [rt,ct]=size(tb); % Запишем размеры tb
• tb1=tb(2:rt); % Усекаем tb от начала на один элемент - будущее
• tb2=tb(1:(rt-1)); % Усекаем tb от конца на один элемент –
• % запаздывающее
• r=tb2\tb1; % МНК-оценки
• rest=tb1-tb2*r; % Вектор ошибок предсказания
[helthfunk1,hlt12]=sort(helthfunk1);
[helthfunk2,hlt122]=sort(helthfunk2);
% Отсортировали по возрастанию
% значения функций здоровья
• figure(2), % Посмотрим графики
• subplot(2,1,1),plot(healthfunk1),…
title('Health function for MIX'),
• subplot(2,1,2),plot(helthfunk2),…
title('Health function for correct data'),
Графики функций здоровья
• x=0:0.05:1;ST=length(x);
• % Значения возможного порога,
• % отделяющего примеры разных классов
• TP=[];FP=[];
• % Протабулируем функцию TP=TP(x) - количество значений
• % функции здоровья нормального трафика меньших x, столько
• % правильно распознанных положительных примеров
• % Протабулируем функцию FP=FP(x) - количество значений
• % функции здоровья аномального трафика меньших x,
• % столько неправильно распознанных отрицательных
• % примеров
• % Далее – три графика.
• for i=1:ST
• TP=[TP,sum(helthfunk2<x(i))]; %Число "нормальных”
• % пар блоков удаленных от нуля менее x(i)
• FP=[FP,sum(helthfunk1<x(i))]; %Число "аномальных"
• % пар блоков удаленных от нуля менее x(i)
• end
• figure(3),
• subplot(3,1,1), plot(x(1:ST),FP(1:ST)), …
title('Distances vs FP for normal traffic')
• subplot(3,1,2),plot(x(1:ST),TP(1:ST)),….
title('Distances vs TP for abnormal traffic')
• subplot(3,1,3), plot(FP/(K/2),TP/(K/2),'*'), title('ROC curve')
% Для оформления отчета применим
% отображение данных в командном
% окне MATLAB и экспорт в формат
% электронной таблицы Lotus.
disp(' levels FP TP ')
[x' FP' TP' ]
wk1write('var26.wk1',[x',FP',TP'])
• Последний вывод в командном окне MATLAB
• levels FP TP
•
• ans =
•
• 0 0 0
• 0.0500 0 0
• 0.1000 0 0
• 0.1500 0 0
• 0.2000 0 0
• 0.2500 0 0
• 0.3000 0 0
• 0.3500 0 0
• 0.4000 0 1.0000
• 0.4500 0 6.0000
• 0.5000 1.0000 8.0000
• 0.5500 2.0000 11.0000
• 0.6000 3.0000 13.0000
• 0.6500 3.0000 14.0000
• 0.7000 3.0000 15.0000
• 0.7500 3.0000 16.0000
• 0.8000 3.0000 16.0000
• 0.8500 4.0000 17.0000
• 0.9000 5.0000 17.0000
• 0.9500 7.0000 18.0000
• 1.0000 20.0000 20.0000