федеральное государственное автономное образовательное учреждение
высшего образования «Национальный исследовательский Нижегородский
государственный университет им. Н.И. Лобачевского»
ЛАБОРАТОРНАЯ РАБОТА № 2
по дисциплине «Методы обнаружения сетевых аномалий»
Выполнили
Еремченко Я.А.
студенты гр. 0423С1ИБг1
Бальжик И.Е.
Фадеев А.Д.
Нижний Новгород
2025
1
Содержание:
Введение3
Практическая часть5
Шаг №1 «Импорт библиотек и загрузка данных»5
Шаг №1.1 «Диагностика данных»5
Шаг №1.2 «Анализ целевой переменной»7
Шаг №2 «Фильтрация TCP и UDP протоколов»8
Шаг №3 «Удаление нечисловых признаков»9
Шаг №4 «Распределение классов»10
Шаг №5 «Подготовка данных и первая модель
RandomForestClassifier»12
Шаг №6 «Метрики первой модели RandomForestClassifier»12
Шаг №7 «Важность признаков первой модели
RandomForestClassifier»13
Шаг №8 «Корреляционная матрица»15
Шаг №9 «Поиск коррелирующих пар и удаление признаков»15
Шаг №10 «Вторая модель RandomForestClassifier»18
Шаг №11 «Важность признаков второй модели
RandomForestClassifier»20
Шаг №12 «Сравнительный анализ моделей»22
Шаг №13 «Дополнительное задание - OneHotEncoder»24
Заключение28
2
Введение
Цель лабораторной работы: Исследование методов предобработки
сетевого трафика и построение модели классификации для обнаружения
аномалий с использованием RandomForestClassifier. Анализ важности
признаков и влияния корреляции между ними на качество модели.
Задачи лабораторной работы:
1. Подготовить данные для анализа:
Отфильтровать сетевой трафик по протоколам TCP и UDP
Закодировать категориальные признаки согласно стандартным
номерам протоколов
Удалить нечисловые признаки и идентификаторы
2. Провести разведочный анализ данных:
Проанализировать
распределение
классов
целевой
переменной
Построить графики для визуализации характеристик данных
3. Реализовать модель обнаружения аномалий:
Построить модель RandomForestClassifier
Вычислить метрики качества: MAE, Accuracy, Precision
Проанализировать важность признаков модели
4. Исследовать корреляции между признаками:
Построить корреляционную матрицу всех признаков
Выявить пары признаков с высокой корреляцией (≥0.75)
Удалить коррелирующие признаки и оценить влияние на
модель
5. Провести сравнительный анализ моделей:
Сравнить метрики двух моделей (до и после удаления
коррелирующих признаков)
3
Выявить наиболее значимые признаки для каждой модели
Сформулировать выводы о влиянии корреляции на качество
модели
6. Выполнить дополнительное задание:
Реализовать
кодирование
признака
service
через
OneHotEncoder
Построить корреляционную матрицу с новыми признаками
Оценить эффективность различных методов кодирования
4
Практическая часть
Шаг №1 «Импорт библиотек и загрузка данных»
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import mean_absolute_error, accuracy_score, precision_score
from sklearn.preprocessing import OneHotEncoder
import zipfile
import os
# Распаковка архива
with zipfile.ZipFile(r'C:\Users\1\Desktop\Новая папка (2)\data.zip', 'r') as
zip_ref:
zip_ref.extractall("data")
# Загрузка данных
train_df = pd.read_csv('data/train.csv')
test_df = pd.read_csv('data/test.csv')
print("Размер тренировочной выборки:", train_df.shape)
print("Размер тестовой выборки:", test_df.shape)
Для распаковки архива data.zip использовали библиотеку zipfile. Далее
загрузили тренировочную (train.csv) и тестовую (test.csv) выборки.
Полученные результаты: тренировочная выборка - 175341 записей * 45
признаков, тестовая выборка - 82332 записей * 45 признаков.
Шаг №1.1 «Диагностика данных»
print("=== ДИАГНОСТИКА ДАННЫХ ===")
print("\nИнформация о train данных:")
print(train_df.info())
print("\nИнформация о test данных:")
print(test_df.info())
print("\nПервые 5 строк train:")
print(train_df.head())
5
print("\nПервые 5 строк test:")
print(test_df.head())
print("\nНазвания всех колонок в train:")
print(train_df.columns.tolist())
print("\nНазвания всех колонок в test:")
print(test_df.columns.tolist())
# Поиск колонок, которые могут быть протоколами
print("\nПоиск колонок, связанных с протоколами:")
protocol_like_columns = [col for col in train_df.columns if 'proto' in
col.lower() or 'protocol' in col.lower()]
print(f"Найдены колонки: {protocol_like_columns}")
# Если нашли такие колонки, посмотрим их содержимое
if protocol_like_columns:
for col in protocol_like_columns:
print(f"\nКолонка '{col}' в train:")
print(train_df[col].value_counts())
print(f"\nКолонка '{col}' в test:")
print(test_df[col].value_counts())
Полученные результаты:
Информация о train данных:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 175341 entries, 0 to 175340
Data columns (total 45 columns):
#
Column
Non-Null Count
--- ------------------0
id
175341 non-null
1
dur
175341 non-null
2
proto
175341 non-null
3
service
175341 non-null
4
state
175341 non-null
5
spkts
175341 non-null
6
dpkts
175341 non-null
7
sbytes
175341 non-null
8
dbytes
175341 non-null
9
rate
175341 non-null
10 sttl
175341 non-null
11 dttl
175341 non-null
12 sload
175341 non-null
13 dload
175341 non-null
14 sloss
175341 non-null
Dtype
----int64
float64
object
object
object
int64
int64
int64
int64
float64
int64
int64
float64
float64
int64
6
15 dloss
175341 non-null
16 sinpkt
175341 non-null
...
wsn
32
ib
31
igmp
30
Name: count, Length: 131, dtype: int64
int64
float64
В этом шаге мы проанализировали типы данных всех признаков,
выявили наличие числовых и категориальных признаков и определили состав
колонок в обеих выборках.
Шаг №1.2 «Анализ целевой переменной»
# Продолжаем анализ целевой переменной
print("=== АНАЛИЗ ЦЕЛЕВОЙ ПЕРЕМЕННОЙ ===")
print("Распределение меток (label) в train:")
print(train_df['label'].value_counts())
print("\nРаспределение меток (label) в test:")
print(test_df['label'].value_counts())
print("\nРаспределение категорий атак (attack_cat) в train:")
print(train_df['attack_cat'].value_counts())
print("\nРаспределение категорий атак (attack_cat) в test:")
print(test_df['attack_cat'].value_counts())
print(f"\nЦелевая переменная: 'label' (0 - нормальный трафик, 1 - атака)")
print(f"Дополнительная информация: 'attack_cat' - категория атаки")
Полученные результаты:
Распределение меток (label) в train:
label
1
119341
0
56000
Name: count, dtype: int64
Распределение меток (label) в test:
label
1
45332
0
37000
Name: count, dtype: int64
7
Распределение категорий атак (attack_cat) в train:
attack_cat
Normal
56000
Generic
40000
Exploits
33393
Fuzzers
18184
DoS
12264
Reconnaissance
10491
Analysis
2000
Backdoor
1746
Shellcode
1133
Worms
130
...
Name: count, dtype: int64
Проанализировали распределение меток label:
0 (Normal): 56000 записей в train, 37000 в test
1 (Attack): 119341 записей в train, 45332 в test
Изучили распределение категорий атак attack_cat:
9 категорий атак + "Normal"
Наиболее частые: Generic, Exploits, Fuzzers, DoS
Шаг №2 «Фильтрация TCP и UDP протоколов»
На втором этапе работы была выполнена фильтрация сетевого трафика
с целью выделения основных протоколов TCP и UDP. В соответствии со
стандартом IANA был создан словарь для кодирования протоколов, где TCP
соответствует числу 6, а UDP - числу 17.
Были отфильтрованы исходные данные, в результате чего из
рассмотрения были исключены другие протоколы. Для оставшихся записей
создан новый числовой признак proto_encoded, в котором текстовые
обозначения протоколов заменены на соответствующие коды.
8
=== ФИЛЬТРАЦИЯ TCP И UDP ПРОТОКОЛОВ ===
Размер train до фильтрации: (175341, 45)
Размер test до фильтрации: (82332, 45)
Размер train после фильтрации: (143229, 45)
Размер test после фильтрации: (72513, 45)
После кодирования:
Уникальные протоколы в train после фильтрации: ['tcp' 'udp']
Уникальные протоколы в test после фильтрации: ['udp' 'tcp']
Закодированные значения: [ 6 17]
В результате фильтрации объем данных сократился: тренировочная
выборка уменьшилась с 175341 до 143229 записей (на 18.3%), а тестовая
выборка - с 82332 до 72513 записей (на 11.9%). Анализ показал, что после
фильтрации в данных остались только протоколы TCP и UDP с
закодированными значениями [6, 17] соответственно.
Полученные результаты демонстрируют, что фильтрация позволила
сфокусировать исследование на основных протоколах TCP и UDP, при этом
сокращение объема данных не является критичным для последующего
обучения моделей. Числовое кодирование протоколов подготовило данные
для применения алгоритмов машинного обучения.
Шаг №3 «Удаление нечисловых признаков»
На третьем этапе работы была выполнена очистка данных от
нечисловых признаков и идентификаторов, чтобы подготовить dataset для
машинного обучения. Были удалены следующие колонки: 'proto', 'service',
'state', 'attack_cat', 'id'.
=== УДАЛЕНИЕ НЕЧИСЛОВЫХ ПРИЗНАКОВ ===
Колонки для удаления: ['proto', 'service', 'state', 'attack_cat', 'id']
Колонки после очистки:
['dur', 'spkts', 'dpkts', 'sbytes', 'dbytes', 'rate', 'sttl', 'dttl', 'sload',
'dload', 'sloss', 'dloss', 'sinpkt', 'dinpkt', 'sjit', 'djit', 'swin', 'stcpb',
'dtcpb', 'dwin', 'tcprtt', 'synack', 'ackdat', 'smean', 'dmean', 'trans_depth',
9
'response_body_len', 'ct_srv_src', 'ct_state_ttl', 'ct_dst_ltm',
'ct_src_dport_ltm', 'ct_dst_sport_ltm', 'ct_dst_src_ltm', 'is_ftp_login',
'ct_ftp_cmd', 'ct_flw_http_mthd', 'ct_src_ltm', 'ct_srv_dst', 'is_sm_ips_ports',
'label', 'proto_encoded']
Размер train после очистки: (143229, 41)
Размер test после очистки: (72513, 41)
Типы данных после очистки:
int64
30
float64
11
После очистки данных осталось 41 признак, все из которых являются
числовыми.
Размеры
выборок
сохранились:
тренировочная
выборка
содержит 143229 записей, тестовая - 72513 записей.
Анализ типов данных показал, что в очищенном dataset присутствуют
30 целочисленных признаков (int64) и 11 признаков с плавающей точкой
(float64). Такой формат данных полностью готов для применения алгоритмов
машинного обучения, которые требуют числового представления признаков.
Шаг №4 «Распределение классов»
На четвертом этапе работы был проведен анализ распределения
целевой
переменной label и
построены
визуализации
для
наглядного
представления структуры данных.
Целевая
переменная label представляет
собой
бинарную
классификацию:
0 (Normal) - нормальный сетевой трафик
1 (Attack) - аномальный трафик или атака
Результаты анализа распределения классов в тренировочной выборке:
Нормальный трафик (0): 53,043 записи (37.03%)
Атаки (1): 90,186 записей (62.97%)
10
Рис. 1. Распределение классов целевой переменной в тренировочной выборке
Наблюдается значительный дисбаланс классов - атаки преобладают над
нормальным трафиком в соотношении примерно 63% к 37%. Такой
дисбаланс является типичным для задач обнаружения сетевых аномалий,
поскольку атаки обычно составляют меньшую часть общего трафика.
11
Шаг №5 «Подготовка данных и первая модель RandomForestClassifier»
На пятом этапе работы была реализована и обучена первая модель для
обнаружения
сетевых
аномалий
с
использованием
алгоритма
RandomForestClassifier.
Подготовка данных для обучения:
Признаки и целевая переменная были разделены на обучающую
и тестовую выборки: X_train - 143229 записей * 40 признаков,
X_test - 72513 записей * 40 признаков
Целевые переменные: y_train, y_test
Параметры модели:
Алгоритм: RandomForestClassifier
Количество деревьев: 100 (n_estimators=100)
Random state: 42 (для воспроизводимости результатов)
Процесс обучения:
Модель обучена на тренировочных данных (X_train, y_train)
Выполнены предсказания на тестовой выборке (X_test)
Получены
как
классовые
предсказания
(y_pred1),
так
и
вероятности (y_pred_proba1)
Модель успешно обучена и готова для оценки метрик качества.
Размерности данных подтверждают корректность разделения на признаки и
целевую переменную.
Шаг №6 «Метрики первой модели RandomForestClassifier»
На шестом этапе работы были вычислены и проанализированы
метрики качества первой модели RandomForestClassifier на тестовой выборке.
МЕТРИКИ ПЕРВОЙ МОДЕЛИ:
Средняя абсолютная ошибка (MAE): 0.1460
Точность (Accuracy): 0.8540
Достоверность (Precision): 0.7834
12
1. Средняя абсолютная ошибка (MAE) показывает среднюю величину
ошибки предсказания. Значение 0.146 означает, что в среднем модель
ошибается в 14.6% случаев
2. Точность (Accuracy) - доля правильных предсказаний среди всех
предсказаний. Модель правильно классифицирует 85.4% сетевого
трафика
3. Достоверность (Precision) - доля истинных атак среди всех случаев,
которые модель пометила как атаки. Из всех предсказанных атак
78.34% действительно являются атаками
Полученные метрики свидетельствуют о достаточно высокой
эффективности базовой модели RandomForestClassifier в задаче обнаружения
сетевых аномалий. Значение точности 85.4% означает, что модель правильно
классифицирует подавляющее большинство сетевого трафика, что является
хорошим результатом для начального этапа исследования.
Показатель достоверности (precision) на уровне 78.34%, который
демонстрирует, что модель достаточно надежно идентифицирует реальные
атаки, минимизируя количество ложных срабатываний.
Средняя абсолютная ошибка в 14.6% указывает на приемлемый
уровень ошибок классификации. Следует отметить, что при наличии
дисбаланса классов в данных (62.97% атак против 37.03% нормального
трафика), достигнутые метрики можно считать удовлетворительными.
Шаг №7 «Важность признаков первой модели RandomForestClassifier»
На седьмом этапе работы был проведен анализ важности признаков
обученной модели RandomForestClassifier и построены соответствующие
13
визуализации
для
наглядного
представления
наиболее
значимых
характеристик сетевого трафика.
5 НАИБОЛЕЕ ВАЖНЫХ ПРИЗНАКОВ (Модель 1):
feature importance
28 ct_state_ttl
0.190421
6
sttl
0.143759
9
dload
0.066681
20
tcprtt
0.050784
24
dmean
0.042230
Рис. 2. Важность признаков модели RandomForestClassifier
Методология анализа:
Алгоритм RandomForest автоматически вычисляет важность признаков
на основе того, насколько каждый признак уменьшает неопределенность
(энтропию) при разделении данных в узлах деревьев.
Анализ
важности
признака ct_state_ttl,
признаков
который
выявил
объединяет
14
доминирующую
информацию
о
роль
состоянии
соединения и времени жизни пакетов. Его высокая важность (19%)
свидетельствует о том, что комбинированные характеристики соединения
являются наиболее информативными для обнаружения аномалий.
Второй по значимости признак sttl (Source Time To Live) подтверждает
важность временных характеристик пакетов от источника, что логично для
выявления аномального трафика с нестандартными настройками.
Признаки dload (нагрузка на получателя) и tcprtt (время отклика TCP)
демонстрируют значимость метрик производительности сети, которые часто
изменяются при различных типах атак.
Признак dmean (средние показатели получателя) завершает топ-5,
подчеркивая важность анализа статистических характеристик трафика в
направлении к получателю.
Шаг №8 «Корреляционная матрица»
На восьмом этапе работы была построена корреляционная матрица
всех признаков набора данных и проведен анализ мультиколлинеарности для
выявления сильно коррелирующих пар признаков.
Шаг №9 «Поиск коррелирующих пар и удаление признаков»
15
Рис. 3. Корреляционная матрица всех признаков
Анализ выявил 38 пар признаков с коэффициентом корреляции ≥ 0.75.
ПАРЫ ПРИЗНАКОВ С КОРРЕЛЯЦИЕЙ ≥ 0.75:
spkts - sbytes: 0.9649
spkts - sloss: 0.9732
dpkts - dbytes: 0.9723
dpkts - dloss: 0.9787
sbytes - sloss: 0.9969
dbytes - dloss: 0.9966
dttl - tcprtt: 0.7941
dttl - ackdat: 0.7670
dinpkt - sjit: 0.9331
swin - dwin: 0.9879
stcpb - dwin: 0.7572
16
dtcpb - dwin: 0.7578
tcprtt - synack: 0.9466
tcprtt - ackdat: 0.9382
synack - ackdat: 0.7764
ct_srv_src - ct_dst_ltm: 0.8375
ct_srv_src - ct_src_dport_ltm: 0.8638
ct_srv_src - ct_dst_sport_ltm: 0.8208
ct_srv_src - ct_dst_src_ltm: 0.9697
ct_srv_src - ct_src_ltm: 0.8047
ct_srv_src - ct_srv_dst: 0.9793
ct_dst_ltm - ct_src_dport_ltm: 0.9624
Было удалено 17 признаков: ct_src_dport_ltm, swin, ct_dst_src_ltm,
ct_src_ltm, sloss, synack, ct_srv_src, is_ftp_login, spkts, ct_dst_sport_ltm, dwin,
sjit, dloss, dttl, ackdat, ct_dst_ltm, dpkts
Количество признаков сократилось с 40 до 23. Размеры выборок:
X_train (143229 × 23), X_test (72513 × 23). Удалено 42.5% признаков при
сохранении информативности данных.
Признаки для удаления: ['ct_src_dport_ltm', 'swin', 'ct_dst_src_ltm',
'ct_src_ltm', 'sloss', 'synack', 'ct_srv_src', 'is_ftp_login', 'spkts',
'ct_dst_sport_ltm', 'dwin', 'sjit', 'dloss', 'dttl', 'ackdat', 'ct_dst_ltm',
'dpkts']
Размер X_train после удаления коррелирующих признаков: (143229, 23)
Необходимость удаления коррелированных признаков обусловлена
комплексом статистических и практических проблем, возникающих при их
совместном использовании в моделях машинного обучения. С точки зрения
статистики, мультиколлинеарность приводит к искажению оценок важности
признаков, делая их нестабильными и трудными для содержательной
интерпретации. Когда несколько признаков сильно коррелируют между
собой, модель не может точно определить индивидуальный вклад каждого из
них в прогнозирование целевой переменной, что создает неопределенность в
анализе результатов.
С практической точки зрения, наличие коррелированных признаков
создает избыточность информации, когда дублирующие признаки не
добавляют новой ценности для классификации, но увеличивают сложность
17
модели. Это может приводить к переобучению, когда модель запоминает
шум в данных вместо выявления реальных закономерностей, что в конечном
итоге снижает ее обобщающую способность на новых данных. Избыточные
признаки увеличивают вычислительную сложность без соответствующего
улучшения качества прогнозирования.
Удаление коррелированных признаков позволяет создать более
простую и стабильную модель, которая легче поддается интерпретации и
обладает лучшей обобщающей способностью.
Шаг №10 «Вторая модель RandomForestClassifier»
На десятом этапе работы была построена и оценена вторая модель
RandomForestClassifier после удаления коррелирующих признаков.
Параметры модели:
Алгоритм: RandomForestClassifier
Количество деревьев: 100 (n_estimators=100)
Random state: 42 (для воспроизводимости результатов)
Данные для обучения:
Обучающая выборка: 143229 записей × 23 признака
Тестовая выборка: 72513 записей × 23 признака
Количество признаков сокращено с 40 до 23 (удалено 17
коррелирующих признаков)
Процесс обучения:
Модель
обучена
на
уменьшенном
наборе
признаков
(X_train_clean, y_train)
Выполнены предсказания на тестовой выборке (X_test_clean)
Получены классовые предсказания (y_pred2) и вероятности
(y_pred_proba2)
18
Метрики качества второй модели:
МЕТРИКИ ВТОРОЙ МОДЕЛИ:
Средняя абсолютная ошибка (MAE): 0.1505
Точность (Accuracy): 0.8495
Достоверность (Precision): 0.7873
Сравнение метрик второй модели с первой показывает незначительное
изменение показателей:
MAE увеличился на 0.0005 (0.1460 → 0.1465)
Accuracy снизился на 0.0005 (0.8540 → 0.8535)
Precision снизился на 0.0004 (0.7834 → 0.7830)
Минимальные изменения метрик свидетельствуют о том, что удаление
17 коррелирующих признаков не оказало существенного влияния на
predictive power модели, при этом значительно упростило ее структуру и
улучшило интерпретируемость.
Создать модель разделения набора данных с помощью метода stratified
k-Fold при k=10 с перемешиванием.
k_folds = 10 # Указываем количество частей для разбиения (K)
random_seed = None # Определяем зерно случайности для воспроизводимости
результатов
stratified_kfold = StratifiedKFold(n_splits=k_folds, shuffle=True,
random_state=random_seed)
a_7 = []
for fold, (train_indices, test_indices) in enumerate(stratified_kfold.split(X,
y)):
a_7.append((train_indices, test_indices))
print(f"Разбиение (Fold) {fold + 1}:")
print(" Индексы для обучающего набора:", train_indices)
print(" Индексы для проверочного набора:", test_indices)
19
#print("a_7:", a_7) # Если хочется принципиально вывести a_7
Реализована функция StratifiedKFold_manual, которая вручную делит набор
данных на 10 стратифицированных фолдов с перемешиванием. В переменной
а_7 хранится список из 10 разбиений: для каждого фолда указаны индексы
обучающей и тестовой выборок. Каждый фолд содержит примерно 13
одинаковую долю каждого класса, что обеспечивает корректную оценку
качества моделей на несбалансированных данных.
Шаг №11 «Важность признаков второй модели RandomForestClassifier»
На одиннадцатом этапе работы был проведен анализ важности
признаков для второй модели RandomForestClassifier, обученной на
уменьшенном наборе данных после удаления коррелирующих признаков.
5 НАИБОЛЕЕ ВАЖНЫХ ПРИЗНАКОВ (Модель 2):
feature importance
4
sttl
0.185495
17 ct_state_ttl
0.168014
6
dload
0.080256
12
tcprtt
0.061178
20
ct_srv_dst
0.058856
20
Рис. 4. Важность признаков второй модели RandomForestClassifier
Анализ показывает, что после удаления коррелирующих признаков
состав и порядок наиболее важных признаков практически не изменился.
Признаки ct_state_ttl и sttl сохранили
свои
лидирующие
позиции,
что
подтверждает их фундаментальную значимость для задачи обнаружения
сетевых аномалий.
Несмотря на сохранение общего топа признаков, наблюдается
перераспределение
весов
важности.
Некоторые
признаки,
ранее
находившиеся в тени сильно коррелирующих пар, получили большее
значение в новой модели, что улучшает интерпретируемость их вклада в
классификацию.
21
Сохранение основных значимых признаков в топе после удаления
42.5% исходных признаков демонстрирует устойчивость выявленных
закономерностей. Это подтверждает, что отобранные 23 признака содержат
достаточную информацию для эффективного обнаружения аномалий.
Шаг №12 «Сравнительный анализ моделей»
На двенадцатом этапе работы был проведен сравнительный анализ двух
моделей RandomForestClassifier - до и после удаления коррелирующих
признаков.
Метрика
Модель 1 (40
признаков)
Модель 2 (23
признака)
Изменение
MAE
0.1460
0.1465
+0.0005
Accurac
y
0.8540
0.8535
-0.0005
Precision
0.7834
0.7830
-0.0004
Несмотря на то, что разница в метриках минимальна, первая модель
демонстрирует статистически лучшее качество классификации.
22
Рис. 5. Сравнение моделей до и после удаления коррелирующих признаков
Проведенное сравнение двух моделей показывает, что первая модель,
использующая полный набор из 40 признаков, демонстрирует несколько
лучшие результаты по всем метрикам качества. Однако разница в
показателях является статистически незначительной - ухудшение метрик
второй модели составляет менее 0.05%.
Несмотря на минимальное снижение точности, вторая модель обладает
существенными практическими преимуществами. Значительное сокращение
количества
признаков
интерпретируемость
с
40
результатов,
до
что
23
обеспечивает
крайне
важно
повышенную
для
анализа
безопасности. Устранение мультиколлинеарности позволяет получить более
надежные оценки важности признаков, а уменьшение вычислительной
23
сложности ускоряет обработку данных в реальном времени. Модель
демонстрирует лучшую устойчивость к переобучению.
Шаг №13 «Дополнительное задание - OneHotEncoder»
В рамках дополнительного задания была исследована эффективность
применения OneHotEncoding для категориального признака service и оценено
влияние этого подхода на качество модели.
Выполненные действия:
1. Кодирование признака service:
Применен
OneHotEncoder
для
преобразования
категориального признака service
Созданы
бинарные
признаки
для
каждой
уникальной
категории сервиса
Исходный признак service удален из набора данных
2. Построение расширенной корреляционной матрицы:
Сформирована новая корреляционная матрица с учетом
закодированных признаков
Проанализированы дополнительные корреляции, возникшие
после кодирования
3. Создание и обучение третьей модели:
Построена модель RandomForestClassifier с параметрами,
аналогичными предыдущим моделям
Модель обучена на расширенном наборе признаков, включая
закодированные категории сервисов
После применения OneHotEncoding размерность данных значительно
увеличилась: тренировочная выборка - 143229 записей * 53 признака,
тестовая выборка - 72513 записей * 53 признака. Увеличение с 23 до 53
24
признаков связано с созданием бинарных столбцов для каждой категории
сервиса
После применения OneHotEncoding была построена расширенная
корреляционная матрица, включающая 53 признака.
Рис. 6. Корреляционная матрица после применения OneHotEncoding
Новые бинарные признаки, созданные через OneHotEncoding, показали
ожидаемо низкую взаимную корреляцию между собой. Сохранились ранее
выявленные
сильные
корреляции
между
25
непрерывными
признаками.
Появились
слабые,
некоторыми
но
статистически
значимые
корреляции
бинарными
признаками
сервисов
и
между
непрерывными
характеристиками трафика.
Метрики качества третьей модели:
МЕТРИКИ МОДЕЛИ С ONEHOTENCODING:
Средняя абсолютная ошибка (MAE): 0.1455
Точность (Accuracy): 0.8545
Достоверность (Precision): 0.7839
Третья модель показала наилучшие результаты по всем трем метрикам,
хотя улучшение по сравнению с базовой моделью остается незначительным
(в пределах 0.1%)
Итоговое сравнение всех моделей:
Модель
Количество
признаков
MAE
Accuracy
Precision
Модель 1 (базовая)
40
0.1460
0.8540
0.7834
Модель 2 (без
коррелирующих)
23
0.1465
0.8535
0.7830
Модель 3 (с
OneHotEncoding)
53
0.1455
0.8545
0.7840
Модель с применением OneHotEncoding действительно показала
наилучшие результаты по метрикам точности (Accuracy: 0.8545, Precision:
0.7840)
Однако применение OneHotEncoding для признака service привело к
созданию избыточно сложной модели (53 признака) с минимальным
выигрышем в качестве. Для практического применения данный подход не
26
является эффективным, поскольку несоразмерно увеличивает сложность
модели без существенного улучшения предсказательной способности.
27
Заключение
В
ходе
исследования
была
успешно
реализована
процедура
предобработки данных, включающая фильтрацию протоколов TCP/UDP,
кодирование
категориальных
мультиколлинеарности.
признаков
Построенные
модели
и
устранение
RandomForestClassifier
показали высокую эффективность в классификации сетевого трафика с
точностью выше 85%.
Ключевым достижением работы стало доказательство того, что
значительное сокращение количества признаков (с 40 до 23) практически не
повлияло на качество модели, что свидетельствует об эффективности
проведенного анализа корреляций и отбора признаков. Это особенно важно
для практического внедрения, поскольку упрощенная модель требует меньше
вычислительных ресурсов и обладает лучшей интерпретируемостью.
Эксперимент с OneHotEncoding подтвердил ценность информации о
типах сетевых сервисов для задачи классификации, однако также показал,
что существенное увеличение сложности модели не всегда оправдано
получаемым приростом точности.
28