Usando Multi Player Perceptron e Regressão Logistica para classificação de SPAM

Overview

Relatório dos procedimentos executados e resultados obtidos.

Objetivos

  • Treinar um modelo para classificação de SPAM usando o dataset train_data.
  • Classificar a coluna SMS do dataset validation_data como “ok” ou “blocked” a partir do modelo treinado.

Explorando o dataset

A partir das amostras de texto presentes na colula “SMS” do dataset train_data, foram extraidas métricas que auxiliaram a entender os dados, como prepara-los e na difinição de critérios para a escolha do modelo adequado:

  • Número de amostras: total de amostras do datset.
  • Número de classes: total de classes no dataset na coluna “LABEL”.
  • Número de amostras por classe: número de exemplos por classe.
  • Mediana de palavras por amostra: mediana do número de palavras em uma unica amostra em todo dataset.
  • Distribuição de frequência: gráfico com a distribuição do número de ocorrências das 15 palavras mais frequêntes no dataset.
Métrica Valor
Número de amostras 6000
Número de classes 2
Número de amostras classe “ok” 4500
Número de amostras classe “blocked” 1500
Mediana de palavras por amostra 10

Tabela 1: train_data métricas.

distribuicao-orig.jpg

**Figura 1: Distribuição de frequência.** 
Exemplos de SMS não bloqueadas:

recuperamos seu usuario e senha de acesso no infojobs! usuario: [email protected]. senha: miguel28. obrigado! 

MARSH CORRETORA: Anna, boleto parc. 01 do Seg Auto com venc.: 28/12/2018 enviado para:[email protected] com esclarecimentos e instrucoes 

Host : RB_Bicanga Ip: 170.244.231.14 nao esta respondendo ao ping - 2019-04-19 22:30:23

----------------------------------------------------------------------------------------

Exemplos de SMS bloqueadas:

BOLETO REFERENTE AS PARCELAS EM ATRASO DO CONSÓRCIO PELO BB.COM VENCIMENTO PARA HOJE Ñ PODE HAVER QUEBRA NO ACORDO. BONATTO ADV 0800 606 3301.

050003DA0202|lcloud-apple-lnc.com/?iphone=VtBqROY .

BB INFORMA:VALIDE SUA SENHA E EVITE TRANSTORNO. ACESSE: www.Bbrasildesbloqueio.com/?7R8BQ8CI

Figura 2: Amostras de texto

Com base na Tabela 1, observa-se que existem 2 classes e que elas estão desbalanceadas, além disso, a distribuição no Gráfico 1 e a Figura 2 mostram que o texto contém letras maiúsculas, minúsculas, números, pontuação, links, stopwords e caracteres especiais.

Escolha do modelo

Os modelos podem ser amplamente classificados em duas categorias: os que usam informações de ordenação de palavras (modelos de sequência) e aqueles que apenas veem o texto como “sacos” (conjuntos) de palavras (modelos n-gram).

Os modelos de sequência incluem redes neurais convolucionais (CNNs), redes neurais recorrentes (RNNs) e suas variações. Os tipos de modelos n-gram incluem regressão logística, multi layer perceptrons simples MLPs ou redes neurais totalmente conectadas, gradient boosted trees e support vector machines.

Com base nas informações acima e nas métricas extraídas das amostras do dataset, levou-se em consideração a razão entre o número de amostras (S) e a mediana de palavras por amostra (W) como principal critério para a escolha do modelo. Quando o valor dessa razão é pequeno (<1500), MLPs alimentandas por n-grams possuem um bom desempenho.

Nesta análise, o valor S/W obtido no dataset train_data foi de 600 ( 6000 / 10) , por isso foi escolhido o modelo MPLs.

Preparando os dados

Os dados passaram pelas seguintes etapas:

  1. Pré-processamento: apesar de não ter influenciado significativamente no desempenho geral do modelo, foi incluida uma etpa de pré-processamento para remoção de acentuação, stopwords e o texto foi colocado em lowercase.
  2. Downsampling da maioria: as classes com a maioria de amostras foram balanceadas de acordo com as classes com o menor número de amostras. Testes executados, demostraram uma melhora nos resultados.
  3. Holdout: os dados foram divididos em subconjuntos mutuamente exclusivos, de treinamento e teste na proporção 70/30 respectivamente.
  4. Tokenizção e Vetorização: divisão do texto em tokens e conversão em vetores numéricos com TfidfVectorizer.
  5. Feature Selection: selcionado as top 20.000 features mais importantes para determinado rótulo com SelectKbest e f-classif.

Construção, treino e avaliação dos resultados do Modelo

Para construção do modelo MLPs, foram usados os frameworks TensorFlow e Keras. O modelo possui duas camadas Dense, adicionando algumas camadas Dropout para regularização (para evitar overfitting). Foi utilizado o callback EarlyStop para interromper o treinamento quando os validadion loss não diminuirem em dois passos consecutivos.

Os paramêtros para treinar o modelo foram:

learning_rate=1e-3,
epochs=1000,
batch_size=128,
layers=2,
units=64,
dropout_rate=0.2

Após executar a função de treinamento, o modelo convergiu em 29 épocas com uma perda média de 0.0079 e acurácia de ~99.5 % conforme a linha abaixo.

29/29 - 0s - loss: 0.0080 - acc: 0.9956 - 24ms/epoch - 844us/step
[0.00799043569713831, 0.995555579662323]

Na Figura 3a, observamos a relação entre a acurácia nas amostras de treino e teste e a evolução das épocas. Os resultados mostram que o modelo generaliza adequadamente. A Figura 3b, no mesmo sentido, mostra a diminuição dos erros à medida que a acurácia aumenta no decorrer das épocas.

mlp_training_and_validation.jpg

                **Figura 3a: Treino e Validação acurácia.                Figura 3b  Treino e Validação perda.**

Através da matriz de confusão e das métrica na Figura 4, podemos ter mais informações sobre o desempenho do modelo de classificação em questão. O modelo classificou corretamente 461 das 465 amostras não spam , obtendo Precision = 0,993, porém classficou erroneamente como não spam uma amostra que é spam, alcançando um Recall = 0,998.

cf_matrix.jpg

                                   **Figura 4: Matriz de confusão e métricas de classificação.**

Para entender os erros de classificação, foi usado o LIME. Através dele, é possível inspecionar as amostras classificadas incorretamente e entender quais termos foram mais determinantes para os erros. Na Figura 5, a amostra analisada é um falso negativo, algo indesejado quando se trata de segurança.

explicabilidade.jpg

**Figura 5:  Explicação do Lime para um falso negativo** 

Os termos 15, you, to, code, sent e with estão contribuindo para o modelo classificar como não spam e os termos http, itunes, com e link para classificar como spam. A partir de insights fornecidos pelo LIME, é possivel alterar algumas abodagens como pré-processamento, tokenização dentre outras coisas e com isso melhorar a qualidade do modelo.

Conclusão

Foi criado um modelo ****Multi Layer Perceptron (MLPs) usando frameworks como Keras e TensorFlow para classificar dados de SMS do dataset train_data. Após varios testes o modelo atingiu um bom resultado mostrando ser aplicável em dados reais.

O dataset validation_data foi rotulado e exportado. Os dataset rotulado, este relatório, bem como todo o código utilizado na análise estão disponíveis na pasta indicada no Google Drive.

Owner
André Mediote
André Mediote
Low-level Python CFFI Bindings for Argon2

Low-level Python CFFI Bindings for Argon2 argon2-cffi-bindings provides low-level CFFI bindings to the Argon2 password hashing algorithm including a v

Hynek Schlawack 4 Dec 15, 2022
A set of simple functions to upload and fetch pastes on paste.uploadgram.me

pastegram-py A set of simple functions to upload and fetch pastes on paste.uploadgram.me. API Documentation Methods upload_paste(contents: bytes, file

Uploadgram 3 Sep 13, 2022
Use Ghidra Structs in Python

Strudra Welcome to Strudra, a way to craft Ghidra structs in python, using ghidra_bridge. Example First, init Strudra - you can pass in a custom Ghidr

Dominik Maier 27 Nov 24, 2022
NASH 2021 project... this may or may not end up working 🤷‍♂️

wavespace synthesiser this is my NASH 2021 project, which may or may not end up working 🤷‍♂️ what is going on? imagine you have a big folder of audio

Ben Hayes 12 May 17, 2022
This is a simple bank management system based on Python.

Python Bank Management This is a simple bank management system based on Python. It's able to do basic operations of simple bank management. Outcome: W

Md. Rakibul Islam 3 Jan 06, 2022
Modify version of impacket wmiexec.py, get output(data,response) from registry, don't need SMB connection, also bypassing antivirus-software in lateral movement like WMIHACKER.

wmiexec-RegOut Modify version of impacket wmiexec.py,wmipersist.py. Got output(data,response) from registry, don't need SMB connection, but I'm in the

小离 228 Jan 04, 2023
Test pour savoir si je suis capable de paratger une lib avec le monde entier !!

Data analysis Document here the project: MLproject Description: Project Description Data Source: Type of analysis: Please document the project the bet

Lucas_Penarrubia 0 Jan 18, 2022
An extensive password manager built using Python, multiple implementations. Something to meet everyone's taste.

An awesome open-sourced password manager! Explore the docs » View Demo · Report Bug · Request Feature 🐍 Python Password Manager 🔐 An extensive passw

Sam R 7 Sep 28, 2021
This is a modified variation of abhiTronix's vidgear. In this variation, it is possible to write the output file anywhere regardless the permissions.

Info In order to download this package: Windows 10: Press Windows+S, Type PowerShell (cmd in older versions) and hit enter, Type pip install vidgear_n

Ege Akman 3 Jan 30, 2022
This is the improvised version of Dobot Magician which can be implemented for Dobot M1

pydobotM1 This is the edited driver for Dobot M1 version of the original pydobot library intended for use with the Dobot Magician. Here's what you nee

Shaik Abdullah 2 Jul 11, 2022
Allow you to create you own custom decentralize job management system.

ants Allow you to create you own custom decentralize job management system. Install $ git clone https://github.com/hvuhsg/ants.git Run monitor exampl

1 Feb 15, 2022
A web project to control the daily life budget planing

Budget Planning - API In this repo there's only the API and Back-End of the this project. Install and run the project # install virtualenv --python=py

Leonardo Da Vinci 1 Oct 24, 2021
Spinning waffle from waffle shaped python code

waffle Spinning waffle from waffle shaped python code Based on a parametric curve: r(t) = 2 - 2*sin(t) + (sin(t)*abs(cos(t)))/(sin(t) + 1.4) projected

Viljar Femoen 5 Feb 14, 2022
Blender addon that enables exporting of xmodels from blender. Great for custom asset creation for cod games

Birdman's XModel Tools For Blender Greetings everyone in the custom cod community. This blender addon should finally enable exporting of custom assets

wast 2 Jul 02, 2022
With Christmas and New Year ahead, it is time for some festive coding. Here is a Christmas Card for you all!

Christmas Card With Christmas and New Year ahead, it is time for some festive coding! Here is a Christmas Card for you all! NOTE: I have not made this

CodeMaster7000 1 Dec 25, 2021
Commodore 64 OS running on Atari 8-bit hardware

This is the Commodre 64 KERNAL, modified to run on the Atari 8-bit line of computers. They're practically the same machine; why didn't someone try this 30 years ago?

Nick Bensema 133 Nov 12, 2022
Vaksina - Vaksina COVID QR Validation Checker With Python

Vaksina COVID QR Validation Checker Vaksina is a general purpose library intende

Michael Casadevall 33 Aug 20, 2022
The Google Assistant on a rotary phone

Google Assistant Rotary Phone Shoutout to my dad who had this idea a year ago and I'm only now getting around to doing it. Notes This is the code used

rydercalmdown 10 Nov 04, 2022
[draft] tools for schnetpack

schnetkit some tooling for schnetpack EXPERIMENTAL/IN DEVELOPMENT DO NOT USE This is an early draft of some infrastructure built around schnetpack. In

Marcel 1 Nov 08, 2021
An a simple sistem code in python

AMS OS An a simple code in python ⁕¿What is AMS OS? AMS OS is an a simple sistem code writed in python. This code helps you with the cotidian task, yo

1 Nov 10, 2021