Вступление:

Одним холодным зимним днем ​​я запустил свой компьютер на работе, не зная, что впереди будет значительный снежный подъем. Я терпеливо и счастливо загрузил свой компьютер и начал читать свои электронные письма. Внезапно мой браузер открылся, и я был шокирован, увидев в моем браузере сообщение с просьбой перевести деньги в Налоговое управление. Видимо, в запале я попался в ловушку и нажал на вложение от отправителя, которое напоминало моего коллегу. Мне потребовалось почти полтора дня, чтобы найти способ устранить угрозу и убедиться, что я в безопасности. С того дня я тщательно проверял свою электронную почту и просматривал Интернет. Более того, я всегда думал о способах узнать, почему на кого-то нападают, и как можно узнать вероятность того, что его / ее компьютер является целью. Когда я узнал, что данные Microsoft Malware Prediction общедоступны, мне захотелось погрузиться в них и узнать больше о данных. Моей конечной целью было / состоит в том, чтобы создать приложение, которое собирает данные с компьютера и определяет, подвержен ли компьютер атаке. Во-первых, давайте взглянем на рынок компьютеров и антивирусов / вредоносных программ.

Рынок антивирусов / вредоносных программ:

В развитых странах (Северная Америка, Европа и Океания) доля использования настольных компьютеров по-прежнему с большим отрывом опережает мобильные устройства (сотовые телефоны и планшеты). [1] Среди всех операционных систем (ОС) Microsoft (MS) Windows занимает 77% мирового рынка, Mac OS отстает с 13%, Google Chrome - 6% (рынок США) и Linux - 2%. Поскольку MS Windows является основным игроком на рынке операционных систем, как персональные, так и корпоративные компьютеры подвержены атакам вирусов и вредоносных программ. Текущая доля рынка антивирусов оценивается примерно в 3,7 миллиарда долларов США [2] и, по прогнозам, составит около 3,5 миллиардов долларов в 2024 году. На рынке присутствует множество антивирусных игроков (McAfee, Symantec, Kaspersky, Bitdefender, ESET, Trend Micro, Avira, AVG,… и многие другие); тем не менее, Microsoft Windows Defender доминировал на 50% рынка как резидентное антивирусное программное обеспечение в Windows 10, защищающее почти 500 миллионов компьютеров. [3, 4] До Microsoft Windows Defender альтернатива Microsoft Security Essential была антивирусной альтернативой. Учитывая количество защищенных устройств во всем мире с помощью MS Windows Defender и MS Security Essential (MSE) с более чем 0,5 миллиарда устройств, становится ясно, что Microsoft собрала огромное количество данных об устройствах, статусе антивируса и угрозах. Microsoft или другим компаниям или пользователям было бы полезно знать, каков фактор или вероятность угрозы. Может ли пользователь оценить, подвержен ли его компьютер атакам, просто учитывая несколько факторов (форма устройства, версия Windows, антивирус и его версия, а также любые другие соответствующие переменные). В этом посте я собираюсь кратко оценить данные и использовать две модели для обучения и тестирования данных.

Данные:

Описания данных и столбцов (функций) для этого исследования общедоступны в рамках конкурса Kaggle Malware Prediction и могут быть найдены здесь. Я загрузил только тренировочные данные и попытался проанализировать и визуализировать данные на своем персональном компьютере. Тогда я воспользовался преимуществами Google Cloud Colab Platform из-за ее доступных ресурсов обработки. Распакованные данные обучения составляют 4 ГБ и занимают примерно 2 ГБ ОЗУ. Я использовал словарь определения типа функции, чтобы избежать чрезмерного использования памяти. Краткий анализ данных показывает, что набор данных содержит 8,92 миллиона записей с 83 столбцами / характеристиками.

Визуализация и анализ данных:

Я составил график распределения функции «HasDetections» (целевой столбец), чтобы увидеть, равномерно ли распределены данные между теми, в которых было обнаружено вредоносное ПО, или нет. Затем я попытался разделить двоичные столбцы (эти столбцы со значением ноль и один) и построил график их распределения (рисунок 1).

Графики корреляции помогают нам понять, коррелированы ли признаки положительно или отрицательно. Если функции сильно коррелированы, мы можем использовать одну из функций вместо использования нескольких функций, экономя вычислительные ресурсы. Как видно, за исключением нескольких столбцов (которые находятся рядом друг с другом и отрицательно коррелированы, например, RtpStateBitField - IsSXSPassiveMode), остальные данные не коррелированы или слабо коррелированы.

Я также составил график зависимости количества зараженных машин от «платформы», «форм-фактора» и того, является ли устройство «игровой машиной». Windows 10 - это платформа, которая больше всего подвергается атакам (или платформа, на которой записывается больше всего данных).

Следует отметить, что количество используемых ноутбуков в три раза больше, чем используемых настольных компьютеров. Устройства с другими форм-факторами уступают ноутбукам и настольным компьютерам.

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

Эти данные ясно показывают, что если у кого-то есть настольный компьютер, и он не является геймером, он не должен быть горячей целью атаки. Эти данные дали мне понять, что наличие рабочего стола с Windows 10 сделало меня более уязвимым кандидатом для атаки.

Функциональная инженерия:

Чтобы подготовить данные для обучения, мне нужно было оценить нулевые значения в данных. Я вычислил общее количество и процентное соотношение нулевых значений в любом столбце функций. Я решил отбросить / игнорировать функции с более чем 25% нулевых значений (которые были девятью столбцами) и вменял остальные функции. На следующем графике показаны проценты пропущенных значений для разных столбцов.

Если вам интересно узнать о различных методах вменения, вы можете проверить эту ссылку. Вменение - это процесс, требующий интенсивных вычислений (ЦП), и в интересах экономии времени и ресурсов обработки я сначала произвольно произвел выборку / выборку 20% всего набора данных; и заменил все NaN средним значением для нецифровых функций / столбцов. Для цифровых и текстовых / строковых функций я заменил NaN значениями режима. Замена значений NaN на среднее значение в цифровых столбцах сделает столбец нецифровым. Я проверил процесс, проверив, что количество NaN равно нулю. После горячего кодирования категориальных функций я отбросил исходные категориальные столбцы и объединил все функции вместе. На следующем этапе я сохранил следующие категориальные столбцы (ProductName, Platform, Processor, Census_OSArchitecture, Census_FlightRing, Census_GenuineStateName) и отбросил остальные. Я должен сказать, что версия антивируса - важная функция; однако на данном этапе я оставляю это в стороне.

Обучение, тестирование и настройка параметров:

Я буду использовать два разных алгоритма для обучения и тестирования данных. Поскольку значения прогнозов (метки) являются цифровыми (0 или 1), я буду использовать логистическую регрессию и модели XGBoost и буду использовать поиск по сетке для настройки параметров. Я использовал четыре различных уровня сложности (0,1, 1, 2, 10) для логистической регрессии и тройной поиск с пятью комбинациями параметров (15 подходов) для XGBoost.

Коэффициент ошибок в зависимости от сложности для обучения логистической регрессии

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

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

Точность = 0,6099

Напомним = 0.6064

Точность = 0,6061

Матрица путаницы - это:

[[13847 12978]

[ 8077 18549]]

Модель XGBoost:

Точность = 0,6089

Напомним = 0.6056

Точность = 0,6055

Матрица путаницы - это:

[[13899 12874]

[ 8210 18468]]

Выводы и дальнейшая работа.

Как можно заметить, обе модели, протестированные с лучшими параметрами, дают почти одинаковую точность, отзывчивость и точность в пределах двух значащих цифр. Подгонка логистической регрессии заняла почти 33 минуты, а XGBoost - 36 минут для обучения моделей на платформе Colab Python 3 без какого-либо аппаратного ускорения (без графического процессора).

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

  • Обучите модели со всем набором данных и протестируйте модель на тестовом наборе данных, который предоставляется отдельно.
  • Произведите вменение данных с использованием многомерного вменения с помощью связанных уравнений.
  • Используйте другие модели, которые могут использовать категориальные данные (без кодирования).
  • Используйте все категориальные функции, включая функцию версии антивируса.

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