Text Mining

Extrair informações importantes de textos, em .csv, banco de dados e de informação de grandes volumes textuais, análise de sentimentos, classificação de texto, detecção de fraudes e spam..

A maior parte são dados não estruturados, muita informação, com o Text Mining consegue-se extrair informações relevantes sobre todo esse volume de dados.

Onde pode ser utilizado?

Saúde e pesquisa.

Atendimento ao cliente.

Gestão de Riscos.

Pesquisa acadêmica.

Análise de sentimento.

Filtragem de Spam.

Pré-processamento

Tokenização: Transforma cada palavra ou frase em token

Stopwords: Utiliza somente as palavras importantes. Ex: “e”,”de,”um,”as”, …(português)

Lemmatization: Palavras importantes, aposto do stemming, precisão semantica, deixa a palavra no formato correto: ctz –> para –> certeza

lowercasing – minusculas

remover pontuação – se acaso não tiver valor semantico, se tiver valor semantico não remover.

stemming – reduz a palavra a sua raiz. Ex. fez, fazem, fazer –> para –> fazer.

Dica: iastudio.google.com – mostra quantos token com a pergunta e com a resposta (deixa mais barato a quantidade de token em um modelo generativo):

Exemplo de Libs:

NLTK – toolkit de NLP (https://www.nltk.org/)

wordcloud – https://www.wordclouds.com/

spacy – o que é verbo, o que é artigo… https://spacy.io/

Analise de sentimento:

Separar aspectos positivos e aspectos negativos.

Aspectos positivos: Ex: bom, sabor

Aspectos negativos: Ex: demora, ruim

Aspectos Neutros.

Desafios em NLP

Ambiguidade

A ambiguidade pode ser um desafio em NLP, palavras com mais de 1 sentido. Exemplo: Sonha, sonho dormindo e sonho de doce.

Sarcasmo e Ironia

“Seria ótimo se não fosse tão ruim”

NLP – Análise de Sentimento

TextBlob()

Polaridade:

-1 negativo, 0 neutro, 1 positivo, ou seja, quanto mais perto o valor da polaridade for de -1 mais tende ao negativo, o inverso tambem.

Subjetividade:

0 indica uma informação mais objetiva, baseada em fato.

1 baseada em opinião, subjetividade, não baseada em fato.

Outras bibliotecas mais detalhadas:

VANDER SentmentIntensityAnalyser()

  • pos:o quão positiva é a frase ou documento;
  • neu:o quão neutra é a frase ou documento;
  • neg:o quão é negativa;
  • compound:pontuação geral.

TF-IDC (frequencia do texto):

Avaliar a importância de 1 palavara, combinando a frequencia do termo.

Exemplo: a palavra “xxx” aparece 3 vezes no documento de 100 palavras: TF(xxx) = 3/100 = 0,03

IDF ():

O Quão rara é a palavra

Bag of Words (bow)

Palavras em números, converte palavras em numeros, a unica maneira de utilizar estatisticas, probabilidade no qual os modelos vai compreender.

Vai transformar cada frase em uma linha:

NLP, Text Mining, Sentiment Analysis

Processamento da Linguagem Natural:

Área da linguistica e aprendizado de maquina (ML) relacionado ao entendido de linguagem humana.

Objetivo do NLP

Classificação de sentimento, identificar spam, se tem verbo, substativo, preencher lacunas de textos, extrair respostats baseadas em uma pergunta passada, traduzir o texto para outro idioma.

Tambem engloba outros desafios, como visão computacional, geração da transcrição de áudio e descrição de imagem.

Deep Learning

Deep Learning é bom para previsão, mas dificil explicar o impacto das variáveis, muito complexo, principalmente para muitas camadas.

Não recomendado para explicação de fenômenos, pelo motivo acima, muita complexidade.

Estudo das Redes Neurais Artificiais de multiplas camadas.

Site: https://sites.icmc.usp.br/andre/research/neural/ – acesso 12 de março de 2025.

Percusores foi o modelo Perceptron (criado por Frank Rosenblatt em 1958) com um simples neuronio.

Site: https://www.deeplearningbook.com.br/o-perceptron-parte-1/ – acesso 12 de março de 2025.

Rede Neural Artificial:

Site: https://www.youtube.com/watch?v=mWD8wWwZpi8 – acesso 12 de março de 2025.

Como funciona:

Multiplicação de matrizes, com os pesos corretos, ótimo predict.

Função de Ativação:

Mais utilizada é a ReLu (classificação 1 ou 0):

Outra função de ativação bem conhecida é a sigmoide.

Função Custo:

Mostra o quanto errou a sua rede, exemplo de função de custo é o erro quadrático médio, mas existem muitas outras funções de custo.

Descida do Gradiente:

Encontrar o menor valor da função custo com base nos seus pesos. Esse método se chama Backpropagation.

Por trás é baseado em calculo diferencial.

*Empiricamente as Redes Neurais Artificiais aprendem melhor com dados Normalizados, como o método min-max normalization (valor fica entre 0 e 1), aprendem melhor com numeros “menores”, provavel devido a backpropagation. Intuitivamente se eu tiver valores muito grandes terei erros muito grandes e vou propagar ele durante a rede, a ideia de normalizar é ter uma descida de gradiente mais suave, e buscar o melhor valor do vale com menor função custo.

Ensemble

Modelo supervisionado

Classificação ou Preditivos

Tipos de Ensemble: Bagging / Boosting / Stacking

Bagging: A ideia e ter varios modelos e escolher a media, aquela mais votada e escolhe ela.

Bosting: sempre tentando melhorar o erro do modelo anterior

Stacking: Com a saida coloca como entrada do modelo, bastante utilizado quando as empresas compram modelos de terceiros (ex. do Serasa)

Árvores de decisão

Principais caracteristicas:

  • Algoritmos suscetível a “overfitting”, por isso é recomendável realizar validação cruzada (“cross validation”).
  • Achar o tamanho “ideal” da árvore para assim diminuir sua complexidade e dimunuir também o overfitting, ao mesmo tempo maximizando a qualidade do modelo.
  • Variável resposta quantitativa e qualitativa

Visualmente parece uma árvore com uma cascata de perguntas e probabilidade, cada pergunta é uma quebra, a ultima pergunta é a folha, e a quantidade de perguntas é a profundidade da árvore.

Impurezas: o algoritmo busca minimizar o indicador de “impureza”, testa todas as possíveis quebras binárias com todas as variáveis disponíveis. Com menor impureza. Até um critério de parada, até impureza zero por exemplo, ou só faço mais quebra se tiver 30 sobreviventes no caso do titanic sobreviventes.

Exemplo de 2 tipos para definição de impureza: (como a árvore encontra a melhor quebra)

  • Gini
  • Entropia de Shannon

Hiperparâmetros: são parâmetros que controlam o algoritmo como:

  • Número mínimo de observações por folha
  • Profundidade máxima
  • CP – Custo de complexidade

CP – Custo da complexidade, deixar a arvore mais generica.

Em uma árvore para cada ponto de corte Curva-ROC tenho uma nova matrix confusão, consequentemente uma nova sensitividade e especificidade, Curva-ROC.

Avaliação do modelo

Ajuste do modelo:

Primeiro identificar se o modelo está subajustado ou superajustado conforme o erro na predição dos dados de validação e treinamento. Quanto maior o erro, maior a variância, a variância é o erro do modelo para os dados de teste; já o viés, é o quão bem um modelo se adequa aos dados de treino, o quanto ele é generalista.

O ideal é um modelo que tem baixo viés e baixa variância, ou seja, ele se adéqua a qualquer dados e erra pouco.

Sobreajustado (overfitting): quer dizer um modelo não generalista, ou seja, ele memorizou os dados, acertou os dados de treinamento, mas obteve uma alta taxa de erros nos dados de validação.

Sobajustado (underfitting): é um modelo que erra bastante na predição dos dados de treinamento, tem baixo desempenho, uma das causas é que o modelo escolhido seja muito simples para o descrever e obter a variável dependente.

Balanceado (balanced): é um modelo ideal, com pouco erro para os dados de teste e um modelo generalista.

Fonte: https://aprendeia.com/sobreajuste-y-subajuste-en-machine-learning/, acesso em 25 de novembro de 2024.

Fonte: https://towardsdatascience.com/techniques-for-handling-underfitting-and-overfitting-in-machine-learning-348daa2380b9

Cross Validation:

Objetivo é achar os melhores valores para os hiperparametros (tunning do modelo) e ter uma expectativa mais acurada da qualidade do nosso modelo (Exemploe melhor AUC)

Divide a amostra em Treino e teste, onde treino será onde o modelo será desenvolvido e o teste será onde o modelo será avaliado.

Ou

Divide a amostra em Treino , Validação e teste, onde treino será onde o modelo será desenvolvido e o validação será onde o modelo será avaliado e teste o “valendo” onde será a real performance do modelo.

Performance classificador binário – 0 não evento e 1 evento

Curva ROC: (performance classificador binário)

Site: https://pt.wikipedia.org/wiki/Caracter%C3%ADstica_de_Opera%C3%A7%C3%A3o_do_Receptor – acessado 29 janeiro 2025

O eixo “Taxa de verdadeiros positivos” é o acerto do evento e no eixo horizontal “Taxa de falsos positivos” é o erro do não-evento

GINI: (não é o mesmo gini de árvore)

Acurácia: medida mais intuitiva e mais simples

Matrix de confusão, vemos o total de positivos que foram classificados como positivos e total de negativos que foram classificados como negativos, soma ambos e divide pelo total da amostra, esse será o valor% da acurácia.

Porem, é apenas para 1 ponto de corte (50% – 50%).

Sensitividade: Acerto dos positivos

Especificidade: Acertos do não evento

Em uma árvore para cada ponto de corte Curva-ROC tenho uma nova matrix confusão, consequentemente uma nova sensitividade e especificidade, Curva-ROC.

K-fold:

Ele divide a base de treino em k grupos, separa um para validação, treina para os demais e avalia o modelo, e vai trocando os grupos , e depois calcula a media, acaba fazendo a validação com toda base de dados, e com a validação cruzada faz uma validação melhor.

Utilizado para comparar e validar os hiperparametros, o melhor é o que tem melhor acurácia.

K-fold com GridsearchCV:

Serie Temporal

Aqui terá um pouco sobre Time Series Forecasting , onde terá previsões do futuro em conjunto com aprendizado de maquina com series temporais, com objetivos de obter previsões mais precisas.

Series temporais são sequenciais e se correlacionam com os dados vizinhos, dias anteriores,

Objetivo series temporais:

  • podem ser para verificar padrões como sazonalidade, tendências, outliers (a principio não remover outliers em series temporais) (valores discrepantes).
  • prever o futuro (tentar prever o futuro) dos comportamentos das variáveis conforme os valores daquela serie.
  • Pode tambem com a previsão de uma serie, tentar entender em conjunto com outra serie temporal e verificar se uma tem influência sobre a outra. Variação multivariada.

Iniciando Series temporais com modelo de regressão linear.

Vou utilizar o dataset do Kaggle de vendas de café. (https://www.kaggle.com/datasets/ihelon/coffee-sales).

Detalhes dos modelos de regressão linear estão descritos em outro post, mas em resumo o modelo aprende como fazer a soma ponderada a partir das observações de entradas. Onde no treino o modelo de regressão aprende os valores para os pesos e tendencias (fit) que mais se ajusta ao alvo (o modelo de regressão linear costuma ser chamado de mínimos quadrados ordinários, pois escolhe valores que minimizam o erro quadrático entre o alvo e as previsões.).

Os pesos para cada entrada, tambem podem ser chamados de coeficiente de regressão (regression coefficients) e o viés (bias) tembém pode ser chamado de intercept (interceptação), pois mostra onde o gráfico desta função cruza o eixo y.

Exemplo do algoritmo de regressão linear, com 2 entradas (feature) e seus pesos (weight):

target = weight_1 * feature_1 + weight_2 * feature_2 + bias

Steps: existem dois tipos de Time Step, de tempo e de atraso, onde o de tempo derivam do time index, o mais básico time index é um indice do inicio da Serie até o Fim:

Regressão Linear com tempo:

target = weight * time + bias

A Regressão de tempo nos permite ajustar curvas a séries temporais em um gráfico temporal, onde o Tempo forma o eixo x.

Os time-steps feature permitem modelar a dependência do tempo. Uma série depende do tempo se seus valores puderem ser previstos a partir do momento em que ocorreram. Acima é uma serie de vendas, podemos verificar teve um aumento nas vendas durante o ano.

Lag features
Para criar uma característica de atraso, deslocamos as observações da série alvo para que pareçam ter ocorrido mais tarde no tempo. Aqui criamos um recurso de atraso de 1 etapa, embora também seja possível mudar em várias etapas.

Uma série temporal tem dependência serial quando uma observação pode ser prevista a partir de observações anteriores.

Regressão linear com feature de Lag:

target = weight * lag + bias

Abaixo o gráfico de Lag, onde cada observação da série é plotada em relação à observação anterior.

Vemos no gráfico de Lag, que as vendas de Coffee estão correlacionadas com as vendas do dia anterior, com isso vemos que o Lag será útil para nós. Tendência linear crescente: conforme o valor de Lag_1 aumenta, o valor de coffee_sales_count também tende a aumentar.

Com isso vemos que tem dependência serial na série, pois vimos acima que a observação pode ser prevista a partir de observações anteriores. No exemplo acima vemos que podemos prever que vendas altas em 1 dia, significam vendas altas no próximo dia.

Abaixo uma previsao baseado no Lag das vendas de coffee:

Os melhores modelos de séries temporais geralmente foram adicionados alguma combinação de recursos de tempo (step features) e recursos de atraso (Lag features).

Tendências:

Em uma serie temporal a tendência pode ser de crescimento ou decrescente, mostra alguma tendência no tempo.

Site: https://labdge.uff.br/analise-de-series-temporais/ – acesso 28 de março de 2025.

Residuos:

O que não consigo explicar com a tendência e a sazonalidade. Normalmente sempre aparecem resíduos e normalmente o plot espera-se a não demonstrar padrão.

Não excluir os resíduos, primeiro compreender, talvez teve falha na coleta, algo assim.

Tipo de modelo:

  • Multiplicativo: vai até o valor 1.

Sazonalidade:

Existem funções que automaticamente identificam o intervalo da sazonalidade, se é 1 semana, mês, ano. No índice, recomendado que o datatype do índice seja DatetimeIndex, há outras alternativas caso o índice não seja DatetimeIndex.

Normalmente verifica a média da sazonalidade para ter um modelo mais geral possível. Em caso de ter 1 mês atípico, então se pega 12 safras/referencias/cohort

Recursos para modelar Sazonalidade:

  1. Modela sazonalidade com poucas observações, como observações diárias com historico de 1 semana, como One-hot encoding por semana.
  2. Recurso de Fourier : para observações maiores, como historico de 1 ano com coleta a cada 1 hora.

Suavização:

Cada média movel será um “nova” serie, acaba descacterizando os dados, quando usar? exemplo juntar 2 series uma semanal e outra diária, transformar a diária com a média móvel para semanal.

Média Movel Simples:

A média móvel ajuda a entender o comportamento da serie, exemplo pega a soma das 7 ultimas observações e vai construindo uma nova série das médias móveis.

Média móvel nada mais é do que a média aritmética das r ultimas observações.

Fonte:https://edisciplinas.usp.br/pluginfile.php/5770544/mod_resource/content/1/PNV%203421_MediasSuavizamento.pdf

Janela deslizante “rolling().mean” vai calcular a media a cada 6 linhas (pode ser outra medida, como a mediana):

Tambem podemos verificar o tipo de tendência, no caso linear.

DeterministicProcess

Recursos derivados do índice de tempo geralmente serão determinísticos, não serão aleatórios.

O argumento de ordem se refere à ordem polinomial: 1 para linear, 2 para quadrático, 3 para cúbico e assim por diante.

Na figura acima vemos que a previsão com regressão ficou bem parecida com a média móvel, ou seja, sugere que uma tendência linear foi a decisão certa neste caso.

Forecasting de 3 Meses (datetimeindex esta com frequencia/periodo Mensal) – Vendas de café com Regressão Linear:

Média Móvel Exponencialmente ponderada (MMEP):

Pelo calculo, na MMEP acaba dando pesos diferentes para observação anterior, ela não suaviza tanto quanto a média móvel simples. Diferente da média móvel que é aritmética, a exponencial é ponderada.

passageiros['MMEP12'] = passageiros['Milhares de passageiros'].ewm(span=12,adjust=False).mean()

OBS: Média Móvel Simples e Média Móvel Exponencialmente Ponderada não são utilizadas para fazer predição.

Dados Multivariados:

# US Change 1970 a 2016
# Fontes:
# Hyndman, Rob J., and George Athanasopoulos. Forecasting: principles and practice. OTexts, 2018.
# Dados disponíveis em https://github.com/robjhyndman/fpp2-package e
# https://github.com/cibelerusso/Aprendizado-Dinamico/tree/main/Data
# Percentage changes in quarterly personal consumption expenditure, personal disposable income, production, savings and the unemployment rate for the US, 1960 to 2016.

uschange = pd.read_csv('https://raw.githubusercontent.com/cibelerusso/Aprendizado-Dinamico/main/Data/uschange.csv', index_col=0,
                       parse_dates=True)
uschange.index = uschange.index.to_period("Q")
uschange.plot(figsize=(12,6));

A principio o que observamos na serie acima, é que o Savings parece não ter uma tendência ao longo do tempo, porem a variância aumenta no Savings, a variância aumenta comparados a períodos anteriores, aplica-se o conceito da média e variância da Serie temporal ao longo do tempo, os Savings parece que a média não aumenta muito, pois não aumenta a linha vermelha, mas a variabilidade dos dados parece aumentar.

Outros exemplos de dados que não tem uma sazonalidade mais marcada , mas vemos um tendência de altos e depois baixos, no final, é do dataset das ações da Starbucks, como segue abaixo, tem modelos específicos para esse tipo de dados, normalmente dados de ações, financeiros, modelos GARCH, que são modeloas autoregressivos que modelam a Heterocedasticidade, a volatilidade, são modelos mais avançados:

Fonte: https://tradingcomdados.com/conteudo/artigos/8-blog/43-analise-de-serie-temporal-e-normalizacao-a-100-de-acoes-usando-python, acesso em 13 dezembro de 2024.

Métodos para fazer previsão:

(Abaixo Métodos Suavização de Holt e Holt-Winters)

Método de Holt: só faz previsão da tendência, não leva em conta a sazonalidade.

Parecido com MMEP, com uma nova constante para modelar a tendência.

Podemos estimar a tendência e a sazonalidade, assim já temos a previsão.

Onde Zt é a serie, ut é o nível (média), Tt é a tendencia e at o ruído.

Onde temos 2 constantes, segue abaixo, do Nível(média) e da Tendência. Onde A e C são constantes de suavização.

Método de Holt-Winters: Essa já vai faze a previsão/estimar, o Nível (média), a Tendência e a Sazonalidade.

Serão 3 algoritmos, Ft é o Sazonalidade, Zt vai estimar a Nível e Tt vai estimar a Tendência:

O Holt-Winters tem o método multiplicativo e o aditivo.

Resumo tipos de gráficos

Bibliotecas utilizadas:

BoxPlot: muito utilizado para identificar outliers univariados isso é feito no que chamamos de unidade inter quartil.

Mostra também as proporções de Quartis, a média, valor minimo.

No exemplo abaixo o Upper fence, é o valor da ultima observação da distribuição da variável que não é considerada outliers por esse critério boxplot.

Os pontos acima são considerados outliers conforme critério do boxplot.

AIQ (amplitude inter quartil) ou IQR = Q3 – Q1 (é a diferença entre o quartil 3 e o quartil 1, ou seja é o tamanho da caixa).

Limites dos valores considerados outliers:

  • A identificação dos outliers no boxplot na parte inferior da distribuição = Q1 – 1,5 * AIC, ou seja tudo que estiver abaixo desse valor é considerado outliers.
  • A identificação dos outliers no boxplot na parte superior da distribuição = Q3 + 1,5 * AIC, ou seja tudo que estiver acima desse valor é considerado outliers.

PairPlot: mostar o histograma e o scatterplot, a relação entre essas variáveis.

Abaixo a relação positiva, se traçar um reta ela tende a crescer positivamente, para cima.

Adicionando uma variável categorica, no grafacio abaixo PairPlot, agora ele adicionou um gráfico de densidade e não mais um de histograma.

Streamlit, Dashboard e virtualenv

O virtualenv seria uma VM na sua maquina, ou em um host, para centralizar o projeto de ML , ajudando na administração, gerenciamento e compartilhamento.

Para criar uma virtualenv é simples (utilizo nesse caso tambem o vscode/terminal):

--Criar ambiente virtual - virtualenv
mkdir venv_streamlit
cd venv_streamlit
$ sudo apt-get install -y python3-pip
$ sudo apt-get install build-essential libssl-dev libffi-dev python3-dev
$ sudo apt-get install -y python3-venv

--criar novo ambiente-virtual chamado ambiente-virtual
python3 -m venv ambiente-virtual

--abrir ambiente-virtual
cd ~/Área de Trabalho/venv_streamlit/ambiente-virtual/bin
source activate

--fechar
deactivate