Como montar sua própria base de dados (dataset) para um projeto de machine learning supervisionado

Gean Matos
Share! por Ateliê de Software
7 min readMar 24, 2023

--

A ideia de que a inteligência artificial é uma ferramenta quase que indispensável para a facilitação de processos de análise de dados já é abundante nos tempos atuais, assim como guias de como construir um modelo de IA, Machine learning ou Deep learning, mas não vemos muito a respeito de como montar uma base de dados para aplicar esse modelo.

Trabalhando em projetos comerciais ou acadêmicos, não temos mais uma base dados pronta para que algo relacionado seja desenvolvido ao seu redor, assim como encontramos em guias ou materiais de estudo, na realidade muitas vezes nos deparamos com dados não tratados e oriundos de múltiplas fontes, que deveriam compor um dataset em um único formato.

Organizá-los e tratá-los parece uma tarefa hercúlea, mas podemos resumir o processo em apenas três passos: formatação, limpeza de dados, e extração de qualidades. Porém antes de adentrarmos nesses tópicos, vamos analisar o que é um dataset e por que precisamos de um, para compreendermos melhor a função de cada um desses passos.

Projetos de IA são vitalmente ligados a algum tipo de dado, tendo em vista que é impossível para o mesmo aprender algo sem acesso a uma determinada quantidade de dados. Portanto, não importa o quão bom seja o modelo, se não houver uma base igualmente bem estruturada o produto final não atenderá as expectativas.

A estrutura de uma base de dados para um modelo supervisionado, é dividida em duas partes principais:

  1. Base de treinamento, composta geralmente por 60% ou mais do todo do dataset, ela é responsável por moldar a compreensão do escopo desejado pelo algoritmo de ML, e reproduzir respostas. A base de treinamento geralmente desprende uma pequena parcela do seu todo, para ser utilizada como base de validação, com a finalidade de adaptabilidade do modelo aos dados e moldá-lo a partir disso, modificando os Hyperparameters de tunning.
  2. Base de testes, o restante da base, é utilizada para avaliar a performance do modelo gerado e validar a sua qualidade. É muito importante que a base de testes não seja composta pela base de treinamento ou por parte dela, uma vez que este tipo de ação pode facilmente levar ao overfitting.

O overfitting é um problema comum, muito conhecido dentro do meio de desenvolvimento de machine learning, é um problema causado quando temos um modelo muito treinado de forma muito estrita dentro de uma base, ou seja o modelo é “viciado” nos dados utilizados para treinamento e teste, gerando valores de acurácia altos, porém com uma entrega irreal quando recebe dados externos.

Formatação

Agora que compreendemos qual a necessidade de uma base de dados e a sua funcionalidade, podemos começar a pensar em como moldar a nossa própria base, o primeiro passo é a formatação. Nesta etapa precisamos compreender onde estão os dados que precisamos, se esses dados estiverem em múltiplas bases, precisamos reuni-los e analisar o formato geral, e decidir qual o formato que será adotado. A forma mais comum e presente dentro de vários guias é o arquivo do tipo CSV, um arquivo de texto simples, que separa as informações utilizando vírgulas.

Limpeza

Uma vez com os dados reunidos e formatados, temos de prepará-los para que a IA os compreenda melhor, aplicando a limpeza de dados. Nesta etapa é necessário remover o máximo possível dos ruídos, dados sem valor, valores duplicados e incorretos da base, tornando-os o mais claros possível para o algoritmo. Para que seja possível aplicar a limpeza, é necessário uma compreensão ampla dos dados, já que esse processo pode mudar muito de acordo com a sua base.

Extração de Features

Deste ponto em diante, a base pode ser considerada pronta para uso, mas mesmo assim pode haver a existência de alguns features desnecessários para o aprendizado da máquina, por tanto é interessante que seja aplicada uma extração de features.

Um exemplo seria um cenário de um sistema escolar, onde desejamos aplicar um algoritmo que analisa as notas dos alunos e os classifica como aprovados e não-aprovados, os features importantes serão os que identificam um aluno e as suas notas, porém a base pode conter informações como a turma do aluno, a sala em que o mesmo assiste às aulas e o semestre em que ele se encontra. Essas informações podem ser úteis posteriormente, porém não para a tarefa de análise de aprovação, portanto, faz sentido retirá-las para tornar a base ainda mais direta e otimizada para o treinamento.

Assim como na tarefa anterior, essa extração depende de uma compreensão da sua base para a determinação de quais features são desnecessários e assim poderem ser removidos.

Bom, já sabemos quais são as técnicas e as suas finalidades, mas como aplicá-las? Como mencionado anteriormente, cada etapa depende da sua base e de qual seu objetivo, então, agora tentaremos aplicar um exemplo genérico que demonstra dentro de um escopo mínimo como podemos aplicá-las.

Exemplo

Pensando em um modelo de classificação, onde queremos saber qual o assunto abordado em uma publicação do Ateliê a partir do título, devemos começar pela extração dos dados.

Como cada um dos posts está disponível em um link próprio, temos de extrair de alguma forma as informações desejadas. Isso pode ser feito manualmente, porém essa tarefa demandaria uma grande quantidade de tempo e seria extremamente trabalhosa e entediante. Então, como alternativa à extração manual, um bot simples, de extração de texto foi construído em Python, trazendo todas as informações do cabeçalho da publicação.

Após a extração temos um arquivo CSV contendo o nome do autor, título, assunto e a data de publicação.

import pandas as pd

dataset = pd.read_csv("dataset.csv")
dataset.head()

Com os dados brutos em mãos, vamos aplicar as três etapas discutidas:

Formatação:

Neste caso o único passo necessário para a conclusão da formatação dos dados será a inserção de um cabeçalho, que possibilite uma melhor análise dos dados, uma vez que já temos um arquivo no formato desejado (CSV) e unificado, é necessário apenas identificar as informações incluindo o cabeçalho do arquivo.

dataset.to_csv("dataset2.csv", 
header=['autor', 'titulo', 'assunto', 'data'], index=False)

dataset2 = pd.read_csv("dataset2.csv")
dataset2.head()

Limpeza:

Nesta etapa iremos remover duplicatas, dados incompletos e elementos dos dados que não são interessantes para o nosso modelo de aprendizado.

Como estamos trabalhando com uma base de texto, iremos utilizar ferramentas de regex, para remover caracteres especiais e trechos de texto sem valor para o modelo.

O primeiro passo, e comumente o mais simples é a remoção de nulos e duplicatas, no caso do nosso exemplo o Pandas oferece funções específicas para este tipo de ação.

dataset2 = dataset2.drop_duplicates().dropna()
dataset2.head()

Agora podemos seguir com o tratamento direto nos dados. Um ponto importante quando tratamos de texto são as stop words, palavras que não tem relevância para máquina e devem ser removidas.

Algumas bibliotecas de machine learning oferecem arrays de stop words prontos, geralmente em inglês, o mesmo não é tão simples para a língua portuguesa o mais comum é a construção de um array customizado e direcionado para a aplicação, ou a utilização de bibliotecas disponibilizadas pela comunidade.

Aqui estaremos usando uma versão simples e pequena, apenas para exemplificar. Após a definição das stopwords, utilizaremos uma função de regex para remover números, acentos e pontuação do texto, juntamente com a uniformização das letras em lowercase.

import re
import string
from unidecode import unidecode

stopWords = ["a", "o", "e", "na", "no", "em",
"da", "de", "para", "com", "sao", "um", "uma"]

dataset2['titulo'] = dataset2['titulo'].apply(lambda x: " "
.join(re.sub(r'[0-9'+string.punctuation+'ˆº]', '', unidecode(x))
.lower().split()))

dataset2['titulo'] = dataset2['titulo'].apply(lambda x: " "
.join(x for x in x.split() if x not in stopWords))

dataset2.head()

Extração de Features:

Por fim, vamos para a extração de features. Neste caso, como queremos classificar a nossa base a partir do tema, não há necessidade dos campos de autor e data, portanto a presença de ambos teria um impacto negativo no modelo de ML, tornando interessante a remoção dessas colunas.

dataset2 = dataset2.drop(columns=(['data', 'autor']))
dataset2.head()

Tendo então como resultado uma base moldada e pronta para o treinamento de um novo modelo.

Este foi um exemplo simples de como podemos moldar uma base de dados para uma aplicação de machine learning supervisionada, espero que tenha sido útil para te ajudar a moldar a sua própria base.

Caso tenha alguma dúvida, fique a vontade para perguntar nos comentários, estamos sempre dispostos a ajudar.

→ Siga o nosso blog pelo Medium e fique por dentro de tudo o que acontece no Ateliê de Software.

Dê um alô pra gente! E nos acompanhe nas redes sociais:

E-mail: contato@atelie.software
Site
Facebook
Instagram
LinkedIn

--

--