Цель работы:  «Обнаружение Аномалий в 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