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
A turtlebot auto controller allows robot to autonomously explore environment.

A turtlebot auto controller allows robot to autonomously explore environment.

Yuliang Zhong 1 Nov 10, 2021
Convex Optimisation MVA course - Assignment

Convex Optimisation MVA course - Assignment This repository contains the coding files of the third assignment in the MVA Convex Optimisation course. U

1 Nov 27, 2021
1cak - An Indonesian web that provide lot of fun.

An unofficial API of 1cak.com 1cak - An Indonesian web that provide lot of fun. Endpoint Lol - 10 Recent stored posts on database Example: https://on

Dicky Mulia Fiqri 5 Sep 27, 2022
Discovering local read-level DNA methylation patterns and DNA methylation heterogeneity in intermediately methylated regions

Discovering local read-level DNA methylation patterns and DNA methylation heterogeneity in intermediately methylated regions

1 Jan 11, 2022
Tomador de ramos UC automatico para Windows, Linux y macOS

auto-ramos v2.0 Tomador de ramos UC automatico para Windows, Linux y macOS Funcion Este script de Python tiene como principal objetivo hacer que la to

Open Source eUC 13 Jun 29, 2022
This is where I learn machine learning

This is where I learn machine learning🤷‍ This means that this repo covers no specific topic of machine learning or a project - I work in here when I want to learn/try something

Wilhelm Berghammer 47 Nov 16, 2022
Data-driven Computer Science UoB

COMS20011_2021 Data-driven Computer Science UoB Staff Laurence Aitchison [ 6 May 16, 2022

Grammar of Scalable Linked Interactive Nucleotide Graphics

Gosling.js Gosling.js is a declarative grammar for interactive (epi)genomics visualization on the Web. ⚠️ Please be aware that the grammar of Gosling.

Gosling 126 Nov 29, 2022
Social reading and reviewing, decentralized with ActivityPub

BookWyrm Social reading and reviewing, decentralized with ActivityPub Contents Joining BookWyrm Contributing About BookWyrm What it is and isn't The r

BookWyrm 1.4k Jan 08, 2023
Synchrosqueezing, wavelet transforms, and time-frequency analysis in Python

Synchrosqueezing is a powerful reassignment method that focuses time-frequency representations, and allows extraction of instantaneous amplitudes and frequencies

John Muradeli 382 Jan 06, 2023
Simple programming language built on Python.

Serial Another programming language. Built on Python. Building and running program In order to run the program on serial, unfortunately you still need

Aleksey Demchenkov 1 Dec 09, 2021
python3 scrip for case conversion of source code files writen in fixed form fortran

convert_FORTRAN_case python3 scrip for case conversion of source code files writen in fixed form fortran python3 scrip for case conversion of source c

7 Sep 20, 2022
An alternative app for core Armoury Crate functions.

NoROG DISCLAIMER: Use at your own risk. This is alpha-quality software. It has not been extensively tested, though I personally run it daily on my lap

12 Nov 29, 2022
Flight Reservation App With Python

Flight Reservation App With Python

victor-h. 1 Nov 21, 2021
Built with Python programming language and QT library and Guess the number in three easy, medium and hard rolls

guess-the-numbers Built with Python programming language and QT library and Guess the number in three easy, medium and hard rolls Number guessing game

Amir Hussein Sharifnezhad 5 Oct 09, 2021
My collection of mini-projects in various languages

Mini-Projects My collection of mini-projects in various languages About: This repository consists of a number of small projects. Most of these "mini-p

Siddhant Attavar 1 Jul 11, 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
Automatically find solutions when your Python code encounters an issue.

What The Python?! Helping you find answers to the errors Python spits out. Installation You can find the source code on GitHub at: https://github.com/

What The Python?! 139 Dec 14, 2022
Configure request params such as text, color, size etc. And then download the image

Configure request params such as text, color, size etc. And then download the image

6 Aug 18, 2022
Simple control of Thorlabs Elliptec devices from Python.

Elliptec Simple control of Thorlabs Elliptec devices. No docs yet » Get started · Report a bug · Request a feature About The Project ThorLabs Elliptec

David Roesel 8 Sep 22, 2022