Python + Scattergraphs + Прочая ерунда - PullRequest
1 голос
/ 20 февраля 2012

Я получаю несколько писем в неделю, в которых подробно рассказывается о злоупотреблениях, происходящих из сети, с которой я связан.Обычно они содержат:

a) URL, который считается скомпрометированным.

или

b) Копия электронного письма, которое считается спамом.

Большинство из них автоматизированы и, как правило, не очень хорошо следуют ARF.

Что мне нужно, так это автоматическое извлечение данных, но я ломаю голову, потому что я не уверен, как это сделать, когда структура письма меняется и непредсказуема.

Что яна данный момент мы хотим извлечь следующие данные:

a) Инициирующие почтовые серверы для спама (а также UID / имя пользователя, которое отображается в большинстве полученных заголовков exim / qmail)

b) Доменные имена

c) URL-адреса для взломанных сайтов

d) Адреса электронной почты

Я могу сделать это без всяких потов, используя некоторые регулярные выражения и немного другого мусора, но в основном это ненадежно,Анализируя тело письма, я могу получить 5 IP-адресов, 3 URL-адреса и 3 адреса электронной почты, и я не уверен, как автоматически выбрать наиболее подходящее.

Мне нужно какое-то направление относительно того, каким я должен бытьисследование / поиск для того, чтобы составить лучшее автоматическое суждение о том, какие данные являются правильными.У меня более 100 000 сообщений с отчетами за прошлые периоды, поэтому нет недостатка в тестовых данных, мне просто нужно знать, с чего начать и что мне следует искать для решения этой проблемы.

Спасибо, что нашли время дляПрочтите это, пожалуйста, дайте мне знать, если я что-то пропустил или есть другие вопросы:)

К вашему сведению, я рассмотрел следующее:

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

  • Построение всех моих предыдущих данных на различных формах ScatterPlot / Histogram.Затем я смогу проверить каждое новое письмо на соответствие существующим данным и выбрать детали, которые наименее преобладают на графике.Еще раз, я не уверен в том, какие библиотеки мне следует искать здесь.

  • Использование примеров данных для наложения веса на ранее увиденные элементы.Т.е., если я выложу страницу из 1000 предыдущих примеров и «уцену» IP-адреса, которые никогда не будут правильными, и размечу IP-адреса, которые могут быть правильными.

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

Ура!

1 Ответ

0 голосов
/ 11 декабря 2012

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

Сначала вам нужно будет создать примерный набор данных, который будет "правдивым" или уже классифицирован должным образом, и который перечисляетнарушающий IP-адрес, URL-адрес, адрес электронной почты и т. д. Поэтому определите некоторые категории и некоторые соответствующие данные и просмотрите их.Это не весело, но необходимо.

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

Байесовская классификация - это черный ящик, в который вы вводите кучу (скажем, 1/2 или 2/3) ваших тестовых данных, а затем пробуете их там, чтобы посмотреть, как работает обученный классификатор.Если вы получаете что-то в диапазоне 90% плюс, вы по существу готовы, при условии, что это достаточно быстро.Единственная функция, которую вы должны вывести - это каждый «токен» в письме.Разделить на пробелы.Вы можете начать здесь:

http://nltk.googlecode.com/svn/trunk/doc/api/nltk.classify-module.html

Если вы решили заняться проектированием объектов, теперь вы переходите в исследовательскую фазу.Когда бы вы ни занимались машинным обучением или классификацией паттернов, вам нужно определить «особенности», которые вы можете извлечь из исходных данных.Как вы сказали, вы можете использовать регулярные выражения для получения адресов электронной почты, IP-адресов и URL-адресов.Это все отличные возможности.Какие еще функции вы можете найти?Возможно, некоторые из отметок времени (существуют ли временные отношения? Кто знает?).Могут быть полезны некоторые заголовки писем, такие как версия MIME, SenderID, ContentType, X-Spam-Level, кодировка и т. Д.

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

Имея множество новых функций, вы можете провести обучение на 50%, а затем сравнить результаты сдругие 50%, чтобы увидеть, как это выполняется.Если вы получите высокий уровень точности, отлично!Вы сделалиЕсли он все еще низкий, вам нужно определить другие функции, чтобы помочь классификатору правильно распознавать.Только вы сможете решить, как высоко, а как низко.

...