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
Manually Install Python 2.7 pip without any problem !

Python2.7_install_pip Manually Install Python 2.7 pip without any problem ! Download installPip.py to your system and Run the code using this Command

Ali Jafari 1 Dec 09, 2021
tetrados is a tool to generate a density of states using the linear tetrahedron method from a band structure.

tetrados tetrados is a tool to generate a density of states using the linear tetrahedron method from a band structure. Currently, only VASP calculatio

Alex Ganose 1 Dec 21, 2021
Simply create JIRA releases based on your github releases

Simply create JIRA releases based on your github releases

8 Jun 17, 2022
A collection of resources on neural rendering.

awesome neural rendering A collection of resources on neural rendering. Contributing If you think I have missed out on something (or) have any suggest

1.8k Dec 30, 2022
JLC2KICAD_lib is a python script that generate a component library for KiCad from the JLCPCB/easyEDA library.

JLC2KiCad_lib is a python script that generate a component library (schematic, footprint and 3D model) for KiCad from the JLCPCB/easyEDA library. This script requires Python 3.6 or higher.

Nicolas Toussaint 73 Dec 26, 2022
A OBS service to package a published repository into a tar.gz file

OBS Source Service obs-service-publish_tar obs-service-publish_tar will create a archive.tar[.tar compression] archive containing the published repo

Erico Mendonca 1 Feb 16, 2022
Functions to analyze Cell-ID single-cell cytometry data using python language.

PyCellID (building...) Functions to analyze Cell-ID single-cell cytometry data using python language. Dependecies for this project. attrs(=21.1.0) fo

0 Dec 22, 2021
The fastest way to copy to (not from) high speed flash storage.

FastestCopy The fastest way to copy to (not from) high speed flash storage. This is about 3-6x faster than file copy on explorer.exe to usb flash driv

Derek Frombach 0 Nov 03, 2021
Ramadhan countdown - Simple daily reminder about upcoming Ramadhan

Ramadhan Countdown Bot Simple bot for displaying daily reminder about Islamic pr

Abdurrahman Shofy Adianto 1 Feb 06, 2022
System Information Utility With Python

System-Information-Utility This is a simple utility, for the terminal, which allows you to find out information about your PC. It's very easy to run t

2 Apr 15, 2022
Abilian Core: an enterprise application development platform based on the Flask micro-framework, the SQLAlchemy ORM

About Abilian Core is an enterprise application development platform based on the Flask micro-framework, the SQLAlchemy ORM, good intentions and best

Abilian open source projects 47 Apr 14, 2022
Trusted sessions for falcon using itsdangerous.

Falcon signed sessions This project allows you to easily add trusted cookies to falcon, it works by storing a signed cookie in the client's browser us

Ward 1 Feb 08, 2022
Islam - This is a simple python script.In this script I have written all the suras of Al Quran. As a result, by using this script, you can know the number of any sura at the moment.

Introduction: If you want to know sura number of al quran by just typing the name of sura than you can use this script. Usage in termux: $ pkg install

Fazle Rabbi 1 Jan 02, 2022
An app that mirrors your phone to your compute and maps controller input to the screen

What is 'Dragalia Control'? An app that mirrors your phone to your compute and maps controller input to the screen. Inputs are mapped specifically for

1 May 03, 2022
PORTSCANNING-IN-PYTHON - A python threaded portscanner to scan websites and ipaddresses

PORTSCANNING-IN-PYTHON This is a python threaded portscanner to scan websites an

1 Feb 16, 2022
OCR-ID-Card VietNamese (new id-card)

OCR-ID-Card VietNamese (new id-card) run project: download 2 file weights and pu

12 Jun 15, 2022
Repo contains Python Code Reference to learn Python in a week, It also contains Machine Learning Algorithms and some examples for Practice, Also contains MySql, Tableau etc

DataScience_ML_and_Python Repo contains Python Code Reference to learn Python in a week, It also contains Machine Learning Algorithms and some example

Meerabo D Shah 1 Jan 17, 2022
Functional interface for concurrent futures, including asynchronous I/O.

Futured provides a consistent interface for concurrent functional programming in Python. It wraps any callable to return a concurrent.futures.Future,

A. Coady 11 Nov 27, 2022
Minterpy - Multidimensional interpolation in Python.

minterpy is an open-source Python package for a multivariate generalization of the classical Newton and Lagrange interpolation schemes as well as related tasks.

Center for Advanced Systems Understanding 18 Jan 06, 2023
A simple streamlit webapp with multiple functionality

A simple streamlit webapp with multiple functionality

Omkar Pramod Hankare 2 Nov 24, 2021