"Опыт участия в microsoft malware classification challenge" Михаил...
TRANSCRIPT
![Page 1: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/1.jpg)
Опыт участия вMicrosoft Malware Classification Challenge
Трофимов Михаил
Machine Learning Works
13 августа 2016 года
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 2: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/2.jpg)
Задача
Данные
≈ 200 GB вирусов (10k примеров в обучение, 10k в тест).Каждый сэмпл представлен в 2 видах: сырые байты и выводдизассемблера.
Задача
Классификация на 10 фиксированных семейств
Метрика
Логарифмические потери (LogLoss)
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 3: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/3.jpg)
Команда
Дмитрий Ульянов Станислав Семенов Михаил Трофимов
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 4: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/4.jpg)
Данные (1/2)
В виде сырых байт:
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 5: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/5.jpg)
Данные (2/2)
В виде вывода дизассемблера:
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 6: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/6.jpg)
Признаки
Размеры файлов
Байты и ассемблерные операторы
Распределение, биграммы...
Распределение энтропии в скользящем окне
Степень сжимаемости
Наличие ключевых слов
Системные вызовы (grep by "__stdcall")
Ключевые слова (loadlibrary, HKEY_LOCAL_MACHINE,...)
Строки бинарника
Распределение длин
Наличие характерных строк
... и другие
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 7: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/7.jpg)
Поверхностный анализ
Файлов много, хочется быстро в них заглянуть
Загружать в python – много кода
ls, cat/head/tail, grep
Просемплировать строчки
awk ’NR == 1 || NR % 3 == 0’ input.file > output.file
Найти строки в бинарнике
strings input.bin
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 8: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/8.jpg)
Обработка файлов
Задача
Нужно считывать и обработывать ≈ 104 × 106 строк. Многократно.
Проблема
CPython медленный для этого.
Варианты?
Cython
PyPy
Numba
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 9: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/9.jpg)
Сравнение
Таблица: Сравнение способов ускорения python
Либа Установка Использование КомментарийCython pip Переписать код Стандартное решениеPyPy pip pypy script.py Проблема с пакетамиNumba conda @jit Использует LLVM
Сравнение в цифрах: https://pybenchmarks.org
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 10: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/10.jpg)
PyPy vs CPython (http://speed.pypy.org/)
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 11: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/11.jpg)
Чтение с диска
Задача
Нужно считывать и обработывать ≈ 200 GB. Многократно.
Проблема
Диск медленный, фрагментированный, места не хватает
Возможное решение
Читать сразу из .gz файла
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 12: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/12.jpg)
Чтение с диска
Задача
Нужно считывать и обработывать ≈ 200 GB. Многократно.
Проблема
Диск медленный, фрагментированный, места не хватает
Возможное решение
Читать сразу из .gz файла
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 13: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/13.jpg)
Сохранение промежуточных результатов
Задача
Нужно многократно дампить и поднимать большие питоновскиеструктуры (словари, numpy-массивы)
Проблема
joblib / pickle∗ работают неприлично долго
Возможное решение
hickle
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 14: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/14.jpg)
https://github.com/telegraphic/hickle
Hickle быстрее pickle, использует HDF5, поддерживает компрессию
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 15: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/15.jpg)
Промежуточные результаты
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 16: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/16.jpg)
Байты как текст
2-grams: 2562 = 65536
4-grams: 2564 = 4.2× 109
10-grams: 25610 = 1.2× 1024
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 17: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/17.jpg)
2-grams
2-grams: 2562 = 65536 фичей
Собираем с каждого файла словарь вида 2-gram -> частота
Аггрегируем все файлы в разреженную матрицу
Требует O(nnz) памяти, где nnz – число ненулевыхэлементовРеализация в scipy.sparse
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 18: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/18.jpg)
4-grams
Аналогично:
4-grams: 2564 = 4.2× 109 фичей
Собираем с каждого файла словарь вида 4-gram -> частота
Аггрегируем все файлы в разреженную матрицу
В чем подвох?
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 19: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/19.jpg)
4-grams
10-grams: 2564 = 4.2× 109 фичей
Собираем с каждого файла словарь вида 4-gram -> частота
4-грамм (строк из 8 символов) много
Большой оверхед по памяти на создание и поддержаниесловаря
Замапим 4-граммы(строки) на id(числа) [обратимаяоперация]
Получим словарь вида id->частота
Аггрегируем все файлы в разреженную матрицу
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 20: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/20.jpg)
10-grams
4-grams: 25610 ≈ 1024 фичей
Собираем с каждого файла словарь вида id -> частота
Матрица получится чудовищной
Так ли нужна обратимость отображения 10-грамм(строк)на id(числа)?
Hash-trick!
id = hash(10-gram) % 2b, b = 28
В итоге 2× 108 фичей
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 21: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/21.jpg)
Отбор признаков: 4-грамы
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 22: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/22.jpg)
Отбор признаков: 10-грамы
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 23: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/23.jpg)
Снижение размерности
RF(NMF(X)) был лучше, чем RF(PCA(X))
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 24: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/24.jpg)
Итоговое решение
Усреднение множества xgboost’ов
Разные подмножества признаков
Semi-supervised trick
top14 на публичном лидерборде
top3 на приватном лидерборде
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 25: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/25.jpg)
Полезные штуки
PyPy / Numba / Cython
HDF5 / Hickle
"Fast Non-Standard Data Structures for Python"by Mike Korobov
Трюк с хэшированием
Разреженные матрицы
LinearSVC(L1) для обора признаков
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge
![Page 26: "Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов (Machine Learning Works)](https://reader037.vdocuments.net/reader037/viewer/2022103105/587cddbd1a28abff0b8b6179/html5/thumbnails/26.jpg)
Финальный слайд
Вопросы?Спасибо за внимание!
Трофимов Михаил Опыт участия в Microsoft Malware Classification Challenge