Система обнаружения сетевых вторжений

Комплексный проект

Я разделил этот блог на 3 части:

  • раздел 1: где мы поймем все основы тематического исследования, такие как реальная бизнес-задача, и как преобразовать ее в проблему машинного обучения.
  • раздел 2: этот раздел посвящен исследовательскому анализу данных.
  • раздел 3: здесь мы обсудим модели машинного обучения и некоторые методы разработки функций.

Секция 1

1. (От реальной проблемы к проблеме машинного обучения)

В этом разделе мы постараемся ответить на все эти вопросы

  1. Первое, что приходит нам в голову: что такое вторжение в сеть и почему нас это должно волновать?

2. Как мы собираемся решать эту проблему машинного обучения?

3. Источник данных для нашей задачи машинного обучения ?

4. Чего нам следует ожидать от наших моделей машинного обучения (цели и ограничения) и как мы их измеряем?

5. я. Как мы будем использовать машинное обучение?
ii. Каковы существующие подходы?
iii. Мой подход к этой проблеме

6. Как сформулировать эту проблему для задачи машинного обучения?

1.1: Что и почему (Реальный мир/проблема бизнеса)

  • Вторжение в сеть — это любое несанкционированное действие в компьютерной сети. Несанкционированные действия или ненормальные сетевые действия угрожают конфиденциальности пользователей и потенциально могут повредить функции и инфраструктуру всей сети.
  • Нам нужна NIDS, потому что она имеет решающее значение для сетевой безопасности, которая позволяет нам обнаруживать вредоносный трафик и реагировать на него. Основная цель NIDS — обеспечить уведомление ИТ-персонала о возможной атаке или вторжении в сеть.

1.2: Постановка задачи (проблема машинного обучения)

  • Задача обучения детектора вторжений состоит в построении прогностической модели (то есть классификатора), способной различать плохие соединения, называемые вторжениями или атаками, и хорошие нормальные соединения.

1.3: Источник данных:

  • Здесь используется набор данных NSL KDD (новая версия kdd-cup99).
  • мы можем легко загрузить набор данных по этой ссылке: https://www.unb.ca/cic/datasets/nsl.html

1.4: Цели и ограничения машинного обучения и как мы их измеряем

Цель: Учитывая классификацию точек данных, является ли это атакой или нет - › Двоичная классификация

Ограничения:

  1. разумная задержка
  2. интерпретируемость

KPI (ключевой показатель эффективности), который нам небезразличен

  • AUC
  • счет f1
  • Двоичная матрица путаницы
  • Скорость обнаружения — это не что иное, как отзыв

Увидев метрику, возникнет один из вопросов, почему эти метрики?

  • AUC : известно, что когда у нас есть проблема классификации 2 классов, AUC является хорошим выбором, потому что он сообщает нам вероятность (в процентах) классификационных баллов.
  • Оценка f1 и скорость обнаружения использовались почти в каждой статье, и люди также работают, есть причина, потому что мы хотим высокой точности и высокой полноты для этой задачи, что означает, что оценка f1 подходит. Скорость обнаружения — это не что иное, как значение отзыва.
  • Binary Confusion Matrix: для интерпретации нам поможет эта метрика.

1.5: (i) Использование машинного обучения:

  • В этом тематическом исследовании я использовал модели машинного обучения, чтобы классифицировать атаку или нет, для этого мы использовали модели машинного обучения, такие как наивный байесовский подход, логистическая регрессия, дерево решений и многие другие, которые мы рассмотрим в следующем разделе.

(ii) Существующие подходы:

  • После очистки, предварительной обработки и некоторых EDA люди удаляют некоторые бесполезные функции и пробовали разные модели, такие как svm, логистическая регрессия и т. Д., С точностью в качестве их метрики.

(iii) Мой подход:

  • Я также выполнил очистку, предварительную обработку и EDA, а для исключения функций я использовал то, что называется рекурсивным удалением функций, и пробовал различные базовые модели ML, а также некоторые настраиваемые модели. В качестве метрики взят auc, потому что, когда у нас несбалансированные данные, он не подходит для используемой точности.

1.6: Постановка задачи машинного обучения

1.6.1: Обзор данных

у нас есть 2 набора данных

  • Данные поезда: 125973 точки данных с 42 функциями.
  • Тестовые данные: 22544 точки данных с 42 функциями.

вот подробное описание набора данных http://kdd.ics.uci.edu/databases/kddcup99/task.html

пример точки данных

1.6.2 Сопоставление реальной проблемы с проблемой машинного обучения

1.6.2.1 Тип задачи машинного обучения

Есть 2 типа классов, которые нам нужны для классификации атак или нормальных действий -> Это задача бинарной классификации.

Раздел 2

2. Исследовательский анализ данных

я не разместил весь код из-за удобства, если вам нужен весь код, пожалуйста, не стесняйтесь перейти по моей ссылке на github.



Вещи, рассматриваемые в этом разделе

  • Чтение данных
  • Одномерный анализ
  • Двумерный анализ
  • многомерный анализ

2.1 Чтение данных

2.1.1 Чтение данных поезда

Вывод

В столбце 43 номеров есть дополнительная функция, которая бесполезна, поэтому давайте удалим ее.

Вывод:

Форма обучающих данных (125973, 42)
количество точек данных 125973
количество признаков 42

2.1.2 Чтение тестовых данных

Вывод:

Форма тестовых данных (22544, 42)
количество точек данных 22544
количество признаков 43

2.1.3: маркировка класса для атак

Нормальный : 0

все остальные атаки : 1

Распределение меток класса данных обучения

Распределение меток классов тестовых данных

Наблюдение:

  • Есть 42 функции как в обучающем, так и в тестовом наборе данных.
  • 15 значений с плавающей запятой, 23 целых значения и 4 значения объекта
  • похоже, что у нас нет нулевого значения, однако мы проверим еще раз.
  • На графиках распределения: набор данных поезда имеет больше точек данных класса 0, чем класса 1, а в наборе тестовых данных класс 1 имеет больше точек данных, чем класс 0.

2.2 Очистка данных

Проверка на дубликаты значений

Вывод: (125973, 43)

Проверка нулевых значений

null_rows = train_data[train_data.isnull().any(1)]

Наблюдение

  • нет повторяющихся значений
  • у нас нет нулевых значений

2.3 Распределение атак в наборе данных

2.3.1: Данные поезда

из приведенного выше графика мы не получаем слишком много информации, поэтому давайте распечатаем их, чтобы получить более четкое изображение.

точки данных, принадлежащие каждому классу

Вывод

Количество точек данных в классе 1: 67343 (53,458 %)
Количество точек данных в классе 2: 41214 (32,717 %)
Количество точек данных в классе 3: 3633 (2,884 %)
> Количество точек данных в классе 4: 3599 (2,857 %)
Количество точек данных в классе 5: 2931 (2,327 %)
Количество точек данных в классе 6: 2646 (2,1 %)
Количество точек данных в классе 7: 1493 (1,185 %)
Количество точек данных в классе 8: 956 (0,759 %)
Количество точек данных в классе 9: 892 (0,708 %)< br /> Количество точек данных в классе 10: 890 (0,707 %)
Количество точек данных в классе 11: 201 (0,16 %)
Количество точек данных в классе 12: 53 (0,042 %)
Количество точек данных в классе 13: 30 (0,024 %)
Количество точек данных в классе 14: 20 (0,016 %)
Количество точек данных в классе 15: 18 (0,014 % )
Количество точек данных в классе 16: 11 (0,009 %)
Количество точек данных в классе 17: 10 (0,008 %)
Количество точек данных в классе 18: 9 (0,007 %)
Количество точек данных в классе 19: 8 (0,006 %)
Количество точек данных в классе 20: 7 (0,006 %)
Количество точек данных в классе 21: 4 (0,003 %)
Количество точек данных в классе 22: 3 (0,002 %)
Количество точек данных в классе 23: 2 (0,002 %)

Наблюдение:

На приведенном выше графике у нас есть 23 различных типа атак и их распределения:

  • набор данных распределен неравномерно, как видно из приведенного выше
  • есть много атак, где точек данных очень мало, и некоторые из атак, такие как обычная и Neptune, обе имеют 85% точек данных из 100% точек данных.
  • Есть 16 атак из 23 атак, где точки данных меньше 1%.

Из приведенного выше наблюдения видно, что: Нормальный имеет 53,5% точек данных, а все остальные 22 класса имеют 46,5% точек данных

мы получили несбалансированный набор данных

2.3.2 Данные испытаний

точки данных, принадлежащие каждому классу

Вывод

Количество точек данных в классе 1: 9711 (43,076 %)
Количество точек данных в классе 2: 4657 (20,657 %)
Количество точек данных в классе 3: 1231 (5,46 %)
> Количество точек данных в классе 4: 996 (4,418 %)
Количество точек данных в классе 5: 944 (4,187 %)
Количество точек данных в классе 6: 737 (3,269 %)
Количество точек данных в классе 7: 735 (3,26 %)
Количество точек данных в классе 8: 685 (3,039 %)
Количество точек данных в классе 9: 665 (2,95 %)< br /> Количество точек данных в классе 10: 359 (1,592 %)
Количество точек данных в классе 11: 331 (1,468 %)
Количество точек данных в классе 12: 319 (1,415 %)
Количество точек данных в классе 13: 293 (1,3 %)
Количество точек данных в классе 14: 178 (0,79 %)
Количество точек данных в классе 15: 157 (0,696 % )
Количество точек данных в классе 16: 141 (0,625 %)
Количество точек данных в классе 17: 133 (0,59 %)
Количество точек данных в классе 18: 73 (0 0,324 %)
Количество точек данных в классе 19: 41 (0,182 %)
Количество точек данных в классе 20: 20 (0,089 %)
Количество точек данных в классе 21: 18 (0,08 %)
Количество точек данных в классе 22: 17 (0,075 %)
Количество точек данных в классе 23: 15 (0,067 %)
Количество точек данных в классе 24 : 14 (0,062 %)
Количество точек данных в классе 25 : 13 (0,058 %)
Количество точек данных в классе 26 : 13 (0,058 %)
Количество точек данных в классе 27 : 12 (0,053 %)
Количество точек данных в классе 28 : 9 (0,04 %)
Количество точек данных в классе 29 : 7 (0,031 %)
Количество точек данных в класс 30: 4 (0,018 %)
Количество точек данных в классе 31: 3 (0,013 %)
Количество точек данных в классе 32: 2 (0,009 %)
Количество точек данных в классе 33: 2 (0,009 %)
Количество точек данных в классе 34: 2 (0,009 %)
Количество точек данных в классе 35: 2 (0,009 %)
Количество данных баллы в классе 36 : 2 ( 0,00 9 %)
Количество точек данных в классе 37: 2 (0,009 %)
Количество точек данных в классе 38: 1 (0,004 %)

Наблюдение

  • есть интересная вещь, что в тестовых данных у нас есть 38 классов. Чего раньше не замечал.
  • здесь также классы Normal и Neptune имеют большее количество точек данных
  • одни и те же данные истории неоднородны
  • набор данных несбалансирован

2.3.3 атаки, которых нет в данных поезда.

вывод: {'mailbomb', 'sqlattack', 'apache2', 'udpstorm', 'snmpgetattack', 'ps', 'xterm', 'snmpguess', 'червь', 'mscan', 'processtable', 'saint', 'named', 'xsnoop', 'httptunnel', 'sendmail', 'xlock'}
****************** ****************************************************< br /> количество дополнительных атак: 17

Вывод:

{'neptune', 'ftp_write', 'teardrop', 'imap', 'nmap', 'multihop', 'portsweep', 'land', 'perl', 'guess_passwd', 'pod', 'normal', ' back', 'smurf', 'buffer_overflow', 'satan', 'rootkit', 'ipsweep', 'loadmodule', 'phf', 'warezmaster'}
************* ******************************************************* ******
Атаки, присутствующие как в обучающих, так и в тестовых данных 21

Вывод: Атаки, которые присутствуют в поезде, а не в тестовых данных {‘spy’, ‘warezclient’}

Наблюдение

  • у нас есть 17 дополнительных классов в тестовых данных
  • 21 атака присутствует как в тестовом, так и в обучающем наборе данных
  • есть 2 класса, которые отсутствуют в тестовых данных, но присутствуют в данных поезда, а именно: «шпион», «варезклиент».

2.4 Одномерный анализ категориальных признаков

Для анализа этих категориальных признаков мы зададим несколько вопросов, например

  • Сколько категорий присутствует в данной функции?
  • Распространение данной функции?
  • Как выделить категориальный признак?
  • Насколько хорошо эта функция protocol_type предсказывает y_i ?

2.4.1 Одномерный анализ по типу_протокола

[i] Сколько категорий представлено в этой функции

Вывод:

Номер уникального прототипа: 3
tcp 102689
udp 14993
icmp 8291
Имя: protocol_type, dtype: int64

Наблюдение

  • у нас есть 3 разные категории прототипов в обучающих данных, а именно: TCP, UDP и ICMP.
  • много точек принадлежит tcp, тогда как udp и icmp имеют меньше точек

[ii] Распространение этой функции

Наблюдение

  • В обучающих данных много моментов, принадлежащих tcp prtocol_type (102689) . Нормальный и атакующий классы одинаковы только с точки зрения tcp.
  • большая часть прототипа udp относится к нормальному классу, в то время как несколько точек также относятся к классу атаки.
  • В icmp protocol_type большинство точек относится к классу атаки.

[iii] Использование одной горячей кодировки

Вывод: train_protocol_type_encoding – преобразованная функция с использованием метода прямого кодирования. Форма признака гена: (125973, 3)

[iv] Насколько хорошо эта функция protocol_type предсказывает y_i ?

Чтобы ответить на этот вопрос, построим модель модели дерева решений, используя только функцию protocol_type (одна горячая кодировка) для прогнозирования y_i.

  • Построив дерево решений с настройкой гиперпараметров, используя только эту функцию, мы обнаружили, что лучшими гиперпараметрами являются max_depth = 10 , min_samples_split = 10.

вывод:

Наиболее важные функции:
udp 0.59247
tcp 0.40753
icmp 0.00000

Наблюдение

  • Используя только эту функцию, я получаю 58 баллов auc, и мы узнаем, что эта функция может помочь в прогнозировании yi, когда мы строим фактическую модель, используя все функции.
  • моделирование считает, что наиболее важной категорией является udp, тогда как icmp совсем не важен

2.4.2 Одномерный анализ обслуживания

[i] Сколько категорий представлено в этой функции

вывод:

Номер уникального сервиса: 70
http 40338
private 21853
domain_u 9043
smtp 7313
ftp_data 6860
Name: service, dtype: int64

Наблюдение

  • есть две службы http и private имеют гораздо больше точек данных, чем другие.

[ii] Распространение этой функции

Наблюдение

  • это кривое распределение
  • Есть несколько сервисов, которые происходят чаще, а основные сервисы происходят меньше времени.
  • В этом распределении слева направо сервисы в порядке убывания (частоты).
  • 0-й индекс содержит http, 1-й индекс содержит частный и т. д.

Наблюдение

  • От 20 до 25 лучших сервисов составляют 90 процентов данных. Это означает, что эти сервисы используются гораздо чаще, чем другие сервисы.

[iii] Использование одной горячей кодировки

вывод: train_service_encoding — это преобразованная функция с использованием метода горячего кодирования. Форма признака гена: (125973, 70)

[iv] Насколько хорошо эта функция protocol_type предсказывает y_i ?

Чтобы ответить на этот вопрос, построим модель модели дерева решений, используя только функцию protocol_type (одна горячая кодировка) для прогнозирования y_i.

  • Построив дерево решений с настройкой гиперпараметров, используя только эту функцию, мы обнаружили, что лучшими гиперпараметрами являются max_depth = 5, min_samples_split = 5.

вывод:

Наиболее важные функции:
http 0.463210
domain_u 0.203939
smtp 0.183398
ftp_data 0.102040
other 0.047413
nntp 0.000000
ntp_u 0.000000
pm_dump 0,000000
pop_2 0,000000
pop_3 0,000000

Наблюдение

  • используя только эту единственную функцию, моя модель дает 87 тестовых значений AUC, что довольно интересно.
  • Из 70 признаков только 5 из них являются важными.
  • Эта информация может быть полезна при разработке функций (мы можем удалить функцию со значениями 0,0).

2.4.3 Одномерный анализ на флаге

[i] Сколько категорий представлено в этой функции

Вывод: Номер уникального флага: 11
SF 74945
S0 34851
REJ 11233
RSTR 2421
RSTO 1562
Имя : флаг, dtype: int64

[ii] Распространение этой функции

наблюдение:

  • есть 3–4 флаг имеет большее количество вхождений
  • асимметричное распределение

Наблюдение:

из 10 флагов 4 флага внесли 98-99% данных, эти 4 флага встречаются чаще.

[iii] Использование одной горячей кодировки

вывод:train_flag_encoding — это преобразованная функция с использованием метода горячего кодирования. Форма признака гена: (125973, 11)

[iv] Насколько хорошо эта функция protocol_type предсказывает y_i ?

Чтобы ответить на этот вопрос, построим модель модели дерева решений, используя только функцию protocol_type (одна горячая кодировка) для прогнозирования y_i.

  • Построив дерево решений с настройкой гиперпараметров, используя только эту функцию, мы обнаружили, что лучшими гиперпараметрами являются max_depth = 5, min_samples_split = 10.

вывод:

Основные важные функции:
sf 0,954620
s0 0,026476
s1 0,011691
s2 0,003657
rej 0,003556
oth 0,000000
rsto 0,000000
rstos0 0,000000
rstr 0,000000
s3 0,000000
sh 0,000000

Наблюдение

  • Если посмотреть на поезд и тестовое значение auc, модель может оказаться завышенной, но у нас есть 78 тестовых значений auc, что показывает нам, что эта модель будет полезной.
  • Есть одна категория, которая является наиболее важной: «sf», сама эта категория имеет значение 95.

2.5 Одномерный анализ некоторых непрерывных признаков

2.5.1.Продолжительность

длина (количество секунд) соединения

сюжет для скрипки

Коробчатая диаграмма

Наблюдение

  • среднее, медиана, 25-й, 50-й, 75-й процентили настолько малы для анализа, потому что большая часть продолжительности равна 0
  • давайте посмотрим на значение процентиля от 0 до 100%

вывод:
0 значение процентиля 0
значение 10 процентиля 0
значение 20 процентиля 0
значение 30 процентиля 0
значение 40 процентиля 0< br /> 50 процентиль значение 0
60 процентиль значение 0
70 процентиль значение 0
80 процентиль значение 0
90 процентиль значение 0
100 процентиль значение 42908

Наблюдение

  • около 90 процентиля значение продолжительности равно 0
  • есть много значений, которые мы можем увидеть в 100 процентилях
  • Итак, давайте посмотрим на процентиль от 90 до 100.

вывод: значение 90-го процентиля равно 0
значение 91-го процентиля равно 0
значение 92-го процентиля равно 0
значение 93-го процентиля равно 1
значение 94-го процентиля равно 2
Значение 95 процентиля равно 4
Значение 96 процентиля равно 15
Значение 97 процентиля равно 31
Значение 98 процентиля равно 2052
Значение 99 процентиля равно 9592
100 значение процентиля 42908

вывод:значение процентиля 99,0 равно 9592
значение процентиля 99,1 равно 10910
значение процентиля 99,2 равно 12666
значение процентиля 99,3 равно 13858
значение процентиля 99,4 равно 16693
Значение 99,5 процентиля равно 19981
Значение 99,6 процентиля равно 25761
Значение 99,7 процентиля равно 30679
Значение 99,8 процентиля равно 37141
Значение 99,9 процентиля равно 39984
100 значение процентиля 42908

Наблюдение

  • значение продолжительности увеличилось с 90 процентиля и далее.
  • если мы посмотрим на график скрипки с меткой класса 1, там будет некоторое значение, которое может быть от 2k до 3k
  • от 99,0 до 100 процентиля значение резко увеличивается ... эти значения могут быть выбросами.

2.5.2. src_bytes

количество байтов данных от источника до места назначения

сюжет для скрипки

Наблюдение

  • как для метки 0, так и для 1 трудно анализировать. Но следует отметить одну вещь: класс 1, атака которого имеет гораздо большее значение, чем класс 0, что является нормальным.

Блочная диаграмма:

Наблюдение

  • из этой диаграммы мы видим, что все значения от 25-го до 75-го процентиля равны нулю. это трудно интерпретировать.
  • давайте снова увеличим значение процентиля src_bytes.

Вывод: значение 0 процентиля равно 0
значение 10 процентиля равно 0
значение 20 процентиля равно 0
значение 30 процентиля равно 0
значение 40 процентиля равно 1
Значение 50-го процентиля равно 44
Значение 60-го процентиля равно 192
Значение 70-го процентиля равно 235
Значение 80-го процентиля равно 307
Значение 90-го процентиля равно 848
100 процентиль 1379963888

Наблюдение:

Как мы видим, есть большой скачок от 90% до 100%.

Вывод: значение 90-го процентиля – 848
Значение 91-го процентиля – 1006
Значение 92-го процентиля – 1032
Значение 93-го процентиля – 1087
Значение 94-го процентиля – 1264
Значение 95 процентиля равно 1480
Значение 96 процентиля равно 1830
Значение 97 процентиля равно 2974
Значение 98 процентиля равно 8737
Значение 99 процентиля равно 54540
100 процентиль 1379963888

вывод: значение процентиля 99,0 равно 54540
значение процентиля 99,1 равно 54540
значение процентиля 99,2 равно 54540
значение процентиля 99,3 равно 54540
значение процентиля 99,4 равно 54540
Значение процентиля 99,5 равно 54540
Значение процентиля 99,6 равно 175337
Значение процентиля 99,7 равно 501760
Значение процентиля 99,8 равно 2194619
Значение процентиля 99,9 равно 2194619
100 значение процентиля 1379963888

Наблюдение

  • есть огромное значение в 100%, которые 1379963888 байт, эквивалентные 1,28 ГБ, проходят от источника к месту назначения.

Аналогичный анализ был сделан для dst байтов и неправильного фрагмента.

2.6 Двумерный анализ (парные графики)

Наблюдение

  • если мы посмотрим на функцию dst_host_count и dst_host_same_srv_rate, то увидим некоторые точки (не полностью), но частично отдельные, но также есть некоторые точки пересечения.
  • dst_hst_srv_count и dst_host_count здесь также посередине есть некоторое перекрытие, и некоторые точки данных частично разделены
  • Если мы посмотрим на PDF этих 4 функций
  • srv_diff_host_rate: класс 0 имеет большее значение, чем класс 1
  • dst_host_count : размещается по всему классу 1 и имеет гораздо большее значение, чем класс 0
  • dst_host_srv_count : между классами 1 и 0 есть область перекрытия, класс 1 имеет более высокое значение, чем класс 0.
  • dst_host_same_srv_rate : кажется, что класс 1 и класс 0 разделены, но точки данных довольно сильно перекрываются. давайте попробуем проанализировать dst_host_srv_count и dst_host_same_srv_rate.

«dst_host_srv_count»

Наблюдение

  • Эти 2 скрипки не полностью перекрываются, эта функция «dst_host_srv_count» может быть полезна для классификации.

dst_host_same_srv_rate

Наблюдение

  • здесь также оба класса не перекрываются полностью (с точки зрения 25-го, 50-го и 75-го процентилей), поэтому в этом dst_host_same_srv_rate есть некоторая разделимость.

2.7 Многомерный анализ с использованием TSNE

здесь мы пытаемся визуализировать данные от 32dim (непрерывная переменная) до 2 dim.

Наблюдение

  • Здесь берется 32dim непрерывная переменная и уменьшается их до 2 dim
  • из графика 3 мы можем видеть, что эти 32 непрерывные переменные будут полезны при определении метки класса.
  • на первом графике, где недоумение равно 30: класс 1 и класс 0 разделены, да, есть некоторые области перекрытия, но большинство из них разделены. Такую же историю мы видим на сюжете №2 и на сюжете №3.

Раздел 3

3. Модели машинного обучения

Модель машинного обучения выглядит следующим образом:

  • у нас меньше функций, поэтому давайте построим модель, которая, как правило, хорошо работает с меньшим количеством функций.

1. Наивный байесовский анализ (базовая модель)

  • Базовая модель должна быть простой, чтобы мы могли сравнить ее с другими моделями.

2. КНН

3. Логистическая регрессия

  • Логистическая регрессия, потому что это эксперимент, может быть линия, хорошо разделяющая оба класса, давайте посмотрим.

4. Дерево решений

5. Случайный лес

6. Xgboost

7. Нормальный классификатор стека

8 . Пользовательский классификатор стека

9. Разработка функций

3.1 Базовая модель (Наивный Байес)

Настройка гиперпараметров

  • лучший гиперпараметр, который мы нашли, это альфа = 0,01

Оценка обучения f1 0,9258446608869385
Оценка проверки f1 0,7687546886721681

показатель отзыва поезда/частота обнаружения 0,8852294047415998
показатель отзыва теста/частота обнаружения 0,6388217875788982

Матрица путаницы:

Прежде чем перейти к наблюдению, давайте узнаем, как читать эти показатели

что означает тестовый балл 64: вероятность правильной классификации баллов составляет 64 %.

Оценка F1 – это обратная величина среднего значения точности и полноты. это даст высокую ценность, когда и точность, и отзыв высоки

Точность чтения и матрица отзыва :-

точность (сумма столбцов равна 1): из всех точек, которые, по прогнозам, принадлежат классу 0, 67% на самом деле принадлежат классу 0, а 33% принадлежат классу 1.

отзыв (суммы строк равны 1): из всех точек, которые на самом деле принадлежат классу 1, 63% прогнозируются для класса 1 и 36% класса 0.

Наблюдение:

  • есть разрыв в значении AUC поезда и теста, что означает, что модель переоснащается
  • давайте сделаем некоторый выбор функций, чтобы уменьшить переоснащение
  • мы будем выбирать функции путем исключения рекурсивных функций

3.2 Выбор признаков путем рекурсивного исключения признаков

При наличии внешнего оценщика, который присваивает веса признакам (например, коэффициентам линейной модели), цель рекурсивного исключения признаков (RFE) состоит в том, чтобы выбрать признаки путем рекурсивного рассмотрения все меньших и меньших наборов признаков. Во-первых, оценщик обучается на начальном наборе признаков, и важность каждого признака определяется либо с помощью атрибута coef_, либо с помощью атрибута feature_importances_. Затем наименее важные функции удаляются из текущего набора функций. Эта процедура рекурсивно повторяется на сокращенном наборе до тех пор, пока в конечном итоге не будет достигнуто желаемое количество функций для выбора. html»

процедура получения оптимальной или полезной функции

  • взять признак типа объекта (означает категориальный) закодировать с помощью кодировщика меток
  • объединить как категориальные функции кодировщика, так и числовые функции
  • вычислить матрицу корреляции с помощью метода фрейма данных corr(), который по умолчанию использует коэффициент корреляции Пирсона
  • перебрать два цикла for и удалить те функции, значение которых больше 0,8 в матрице корреляции
  • теперь, используя рекурсивное исключение признаков (используя модель случайного леса, мы можем использовать любую модель по нашему выбору, но RF придает большое значение признакам), мы получили 29 признаков, которые полезны для прогнозирования модели (называемых оптимальными признаками)
  • Затем нарисуйте наиболее важные функции, посмотрев, как мы можем снова удалить некоторые функции, которые имеют очень маленькое значение
print('Optimal number of features: {}'.format(rfecv.n_features_))

Вывод: Оптимальное количество функций: 29

Моделирование с выбранными функциями

3.3 Наивный байесовский алгоритм с настройкой гиперпараметров

  • здесь лучший гиперпараметр: альфа = 10

Оценка обучения f1 0,9607209835382371
Оценка проверки f1 0,773419258429065

показатель отзыва поезда/частота обнаружения 0,9436465973051339
показатель отзыва теста/частота обнаружения 0,6452894880386504'

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • есть небольшое улучшение оценки f1, а также отзыва после удаления некоторых ненужных функций.
  • кажется, есть некоторая путаница при воспоминании: из всех фактических точек 64% прогнозируются как класс 2 и около 36% прогнозируются как класс 0.

3.4 Настройка гиперпараметров KNN

Для значений best alpha = 99 показатель обучения auc составляет: 0,9997159094312437
Для значений best alpha = 99 Тест >показатель AUC: 0,8918894763568558

Оценка обучения f1 0,9902896052698944
Оценка проверки f10,7806070670726082

показатель отзыва поезда/частота обнаружения 0,9897322190005117
показатель отзыва теста/частота обнаружения 0,6593158263851009

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • Простая модель knn дает нам больше auc, а также f1 и значение отзыва, что является хорошим знаком.
  • но все же есть некоторая путаница в тестовых данных между классом 2 и классом 1 в отзыве
  • Это может быть из-за дисбаланса классов

3.5 Логистическая регрессия Настройка гиперпараметров

Оценка обучения f1 0,9671355060034306
Оценка проверки f1 0,7264708642207001

показатель отзыва поезда/коэффициент обнаружения 0,9616919665700153
показатель отзыва теста/коэффициент обнаружения0,6032883971012234

тренировать матрицу путаницы

Проверить матрицу путаницы

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • Модель имеет высокое значение AUC, но f1 и отзыв ниже, чем у базовой модели.
  • здесь также при отзыве модели есть некоторая путаница

3.6 Дерево решений с настройкой гиперпараметров

Оценка обучения f1 0,9694895073671678
Оценка проверки f1 0,8820999316637859

Показатель отзыва поезда или коэффициент обнаружения 0,9999317755415317
Показатель отзыва поезда или коэффициент обнаружения 0,8549832463180862

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • Пока это лучшая модель, которая у нас есть
  • после некоторого баланса классов мы получили довольно хорошие оценки auc, f1 и отзыв
  • теперь модель не путается как предыдущая в классе 1 и классе 0

3.7 Настройка гиперпараметров случайного леса

Оценка обучения f1 0,9812059973378651
Оценка проверки f1 0,8754566307025742

показатель отзыва поезда/частота обнаружения 0,9995565410199556
показатель отзыва теста/частота обнаружения 0,8030078703342944

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • эта модель лучше другой модели с точки зрения AUC, у нее также хорошие f1 и значение отзыва, но меньше, чем у дерева решений.

3.8 Настройка гиперпараметров XGBOOST

Оценка обучения f1 0,999880615342634
Оценка проверки f1 0,7592960544990066

Коэффициент обнаружения поезда/отзыв0,9999488316561488
Коэффициент обнаружения теста/отзыв 0,6253409179459207

Наблюдение:

1 –› класс 0 и 2 –› класс 1

  • модель xgboost не работает должным образом
  • Он не может хорошо вспомнить тестовые данные

3.9 Базовый стековый классификатор

объединение всех моделей

Оценка обучения f1 0,9994799259960271
Оценка проверки f1 0,7843464552325313

показатель отзыва поезда/частота обнаружения 0,9997441582807437
показатель отзыва теста/частота обнаружения 0,6590820540793267

Наблюдение:

  • приведенная выше модель является обычной моделью ставок, где я взял всю модель и сложил их.
  • передать вывод всей модели в метаклассификатор
  • здесь также мы получили хорошую оценку auc, но оценка f1 и отзыв не очень хорошие

3.10 Индивидуальный классификатор стекирования

Метод:

взять весь набор данных

определить обучающие и тестовые данные

разделить данные поезда на две части: данные 1 и данные 2 (здесь мы берем 50–50 %)

создать выборку m из данных поезда и установить базовый обучаемый модуль (xgboost)

теперь предскажите, передав data2 каждому образцу, который мы подгоняем

теперь обучите метаклассификатор с заданным прогнозируемым значением и целевым значением данных 2 (мета clf: логистическая регрессия)

теперь используйте подходящий метаклассификатор и предскажите тестовые данные

с 1000 образцами

Оценка теста f1 0,7845882789317508
Оценка отзыва теста/коэффициент обнаружения 0,6593158263851009

с образцом 1500

Показатель теста f10,7895077122009792
показатель отзыва теста/коэффициент обнаружения0,666095223252552

с образцом 2000 г.

Оценка теста f1 0,7801108059034406
оценка отзыва теста / частота обнаружения 0,6528481259253487

10000 точек данных и 100 выборок

Оценка теста f1 0,7667231957791597
оценка отзыва теста / частота обнаружения 0,6341463414634146

4.11 Разработка функций

давайте добавим две новые функции

  • добавить 2 наиболее важные функции в соответствии с выбором функции
  • использовать квадрат важного признака

давайте использовать случайный лес

Показатель обучения f1 0,9871886660545977
Показатель теста f1e 0,8739645724480694

показатель отзыва поезда/частота обнаружения 0,9995053726761044
показатель отзыва теста/частота обнаружения 0,8016052364996493

Наблюдение:

this model is giving highest auc value better than our previous random forest model

Понимание всего раздела построения модели вкратце

  • Объединить все закодированные категориальные и числовые признаки
  • построить базовую модель, в этом случае мы взяли наивную байесовскую модель (мы также можем взять knn)
  • Глядя на наивную байесовскую модель после настройки гиперпараметров, кажется, что модель переобучается (разрыв в поезде и результатах теста)
  • чтобы решить эту проблему, мы выбираем функции путем рекурсивного исключения функций (пожалуйста, прочитайте «понимание выбора функций» после раздела 3.2)
  • после этого вручную удалите все функции из данных поезда и те функции, которые не добавляют ценности, просмотрев график важных функций
  • Снова постройте модель, начиная с наивной байесовской модели
  • после выбора функции мы получили хорошую AUC, но были некоторые проблемы, такие как низкая оценка f1 и путаница при отзыве теста, это было из-за того, что набор данных несбалансирован, поэтому придайте некоторый вес классу, чтобы решить эту проблему, и после этого мы получили довольно хороший результат.
  • На данный момент есть две хорошие модели: дерево решений и случайный лес
  • Я думал, что Xgboost даст лучший результат, но это нормально.
  • испытывал два вида стеков, но результат был совсем не хорош с точки зрения оценки f1 и оценки отзыва.
  • В разделе разработки функций я попробовал 2 новые функции, которые берут те функции, которые важны с помощью нашего метода выбора функций, затем добавляют эти функции, а другие функции являются прямыми
  • Результат модели, построенной с помощью функций (попробованного случайного леса), отличный, это самое высокое значение AUC, которое я получил, но оценка f1 и отзыв ниже, чем у дерева решений и случайного леса

Сравнение моделей

Будущая работа

В этом примере я пробовал только модель ML, в будущей работе мы можем попробовать какую-то модель глубокого обучения и некоторые методы проектирования функций.

Мой github и ссылка Linkedin





Ссылка

Спасибо за уделенное время