Etapas de um sistema de aprendizagem de máquina

O desenvolvimento de sistemas, que usam algoritmos de aprendizagem de máquina, segue um fluxo diferente das abordagens tradicionais. A fonte dessa diferença reside na premissa básica de qualquer algoritmo de aprendizagem: extração de conhecimento a partir de dados históricos.  Assim, são descritas a seguir, cinco etapas para a construção de soluções que baseiam-se em aprendizagem de máquina.

etapa-1

Dado que os algoritmos de aprendizagem de máquina “aprendem” a partir de dados, a primeira etapa é a aquisição dos dados. O conjunto de informações coletadas pode ser armazenado de várias maneiras: sistema gerenciador de banco de dados, planilhas, ou mesmo em arquivo texto. Importante ressaltar que esses dados serão usados para treinar/calibrar o modelo (a máquina de aprendizagem), logo, devem representar toda a diversidade da tarefa sob investigação. Em outras palavras, não conjecture que o sistema irá classificar um pássaro como sendo beija-flor-tesoura, nome científico eupetomena macroura, se nenhum beija-flor dessa espécie está presente nos dados.

etapa-2

Os dados coletados na etapa anterior devem ser tratados com o intuito de prepará-los para o processo de treinamento do algoritmo de aprendizagem. Alguns procedimentos comuns são: seleção de variáveis, redução de instâncias, extração de características, imputação de dados faltantes e análise de outliers. Vale salientar que esse processamento, muitas vezes, está atrelado ao algoritmo de aprendizagem que será usado na etapa seguinte. Isso se dá, pois, algoritmos diferentes, possuem requisitos diferentes. Por exemplo: alguns algoritmos lidam apenas com dados que estejam representados com valores numéricos, outros apenas com valores categóricos. Logo, é necessário converter variáveis categóricas em numéricas, ou vice-versa, dependendo do algoritmo.

etapa-3

Nessa etapa, o algoritmo de aprendizagem de máquina, que melhor adere aos dados, é escolhido para treinar o modelo. Essa escolha deve levar em consideração vários pontos, entre eles: quantidade de instâncias e de variáveis no banco de dados e existência de desbalanceamento entre as classes. Além disso, deve-se atentar ao tipo de aprendizagem: supervisionado, não-supervisionada, semi-supervisionada ou por reforço. E, no caso de ser supervisionado, se o problema é de classificação ou de regressão. Dentre os modelos mais comumente usados, é possível citar: árvore de decisão, redes neurais multi-layer perceptronrandom forest, support vector machines, k-nearest neighbours, XGBoost, logistic regression, k-means, naive bayes, apriori e expectation-maximization. Por fim, vale destacar os sistemas de múltiplos classificadores (ensemble learning) que, ao invés de usar apenas uma máquina, combinam várias máquina de aprendizagem, a fim de melhorar a precisão final do sistema. 

etapa-4

O modelo treinado deve ser avaliado para que seja possível predizer sua precisão em uso. Várias medidas podem ser usadas para aferir a performance do modelo e, a escolha da medida depende da tarefa que se deseja resolver. Exemplos de medidas: acurácia, f-score e curva ROC. Vale ainda frisar que o modelo deve ser avaliado com dados diferentes dos que foram usados para treiná-lo. Assim, os dados devem ser divididos em dois conjuntos disjuntos: treinamento (usada para treinar o modelo) e teste (usado para avaliar o modelo). Quando a estimative de desempenho de um modelo, em dados nunca vistos (dados de teste), é otimista, diz-se que ocorreu overfitting. Esse é, provavelmente, o maior problema de aprendizagem de máquina.

etapa-5

Após a avaliação do modelo, caso o desempenho esperado não tenha sido alcançado, faz-se necessário aperfeiçoar o modelo. As possíveis causas dessa inadequação devem ser investigadas e, caso necessário, retorna-se para a aquisição de novos dados (etapa 1), para o processamento dos dados de um forma diferente (etapa 2) e/ou para o treinamento de um novo modelo, possivelmente, usando um algoritmo de aprendizagem diferente (etapa 3).

Aprendizagem em conjuntos de dados com classes desbalanceadas

Um dos pontos que devemos atentar ao treinar uma máquina de aprendizagem é o desbalanceamento entre as classes. Podemos dizer que as classes estão desbalanceadas quando o número de padrões em uma classe é muito menor do que o número de padrões numa classe diferente.

Veja o exemplo na figura acima que mostra duas classes: azul e vermelha. Nesse conjunto, temos 100 padrões da classe azul e 10 da classe vermelha. Logo, a quantidade de padrões na classe azul é 10 vezes maior do que a quantidade de padrões na classe vermelha. O imbalance ratio (IR) é usado para medir esse desbalanceamento, e é calculado como sendo a razão entre o número de padrões na classe majoritária e o número de padrões na classe minoritária. Para esse exemplo, o IR é igual a 10, pois temos uma razão de um para dez (1:10).

Em muitos problemas do mundo real, esse desbalanceamento é bem mais acentuado. Vamos supor um cenário no qual a razão fosse de 1:1000, ou seja, para cada padrão da classe vermelha, temos mil padrões da classe azul. Nesse cenário, caso uma máquina de aprendizagem sempre respondesse “classe azul”, para qualquer padrão fornecido como entrada, essa máquina atingiria uma acurácia (número de acertos dividido pelo número total de padrões avaliados) próxima a cem porcento. Para ser mais preciso, supondo um conjunto com 3003 padrões, sendo 3 da classe vermelha e 3000 da classe azul (para manter a proporção de 1 para 1000), a acurácia seria de 3000/3003, ou seja, 99,9001% de acerto.

Embora essa taxa de acerto, superior a 99,9%, seja bastante promissora, vale salientar que essa máquina de aprendizagem, de fato, não “aprendeu” nada. Ela, de certa forma, foi guiada a minimizar o erro no conjunto de treinamento (com ampla maioria de padrões da classe azul) e, nesse caso, o treinamento pode tê-la levado a desprezar os padrões da classe vermelha.

No exemplo acima, uma máquina conseguiu quase cem porcento de acerto, mesmo sem aprender a tarefa de maneira relevante. Para esses casos, a acurácia não é uma medida interessante, pois é uma medida global, calculada sem fazer distinção entre as classes. Quando avaliamos conjuntos de dados desbalanceados, devemos utilizar medidas que avaliem as classes separadamente, por exemplo: f-score, g-mean e area under the ROC curve.

É fato que várias máquinas de aprendizado podem, de maneira enviesada, priorizar a classe majoritária durante o seu treinamento. Assim, as principais alternativas para lidar com conjuntos de dados, nos quais as classes estejam desbalanceadas são:

  • pré-processamento: o objetivo é deixar todas as classes com um número similar de padrões, ou seja, balancear as classes. Técnicas de undersampling (remover padrões da classe majoritária) e/ou de oversampling (adicionar padrões na classe minoritária) são empregadas;
  • algoritmo com penalização: os algoritmos de aprendizagem são modificados com o intuito de torná-los sensíveis à questão do desbalanceamento. Assim, durante o processo de treinamento da máquina, o custo ao errar um padrão da classe minoritária é bem maior do que o custo associado a um erro na classe majoritária;
  • ensemble: nessa abordagem, técnicas de pré-processamento são usadas em conjunto com sistemas de múltiplos classificadores. Desta forma, ao invés de centralizar o conhecimento em apenas uma máquina de aprendizagem, o conhecimento extraído dos dados de treinamento é dividido em várias máquinas.

Das três alternativas listadas acima, a mais comumente usada é a primeira: pré-processamento. Embora, seja importante destacar a última, ensemble, pois essa tem alcançado resultados superiores quando comparada às demais (artigo).

E para tarefas multi-classe?

A questão fica um pouco mais sutil, quando temos mais de duas classes. Veja o exemplo na figura a seguir.

Observando essa imagem, podemos dizer que a classe verde é minoritária em relação à classe azul e majoritária em relação à classe vermelha. Assim, a relação entre as classes já não é tão óbvia quanto em problemas com duas classes. Além disso, o cálculo do IR, conforme descrito anteriormente, não representa uma medida tão confiável. Isso acontece porque diferentes conjuntos de dados podem ter o mesmo IR, desde que, a proporção, entre a quantidade de padrões na classe com mais exemplos e a quantidade de padrões na classe com menos exemplos, seja mantida. Note que, o IR do exemplo com três classes, é o mesmo do exemplo com duas classes: 10; pois, no cálculo do IR, o número de exemplos nas demais classes (que não seja a classe majoritária e a classe minoritária) não é levado em consideração. Mas, existem outras formas de calcular o IR, por exemplo: dividindo o número de exemplos na classe majoritária pela soma das quantidades de padrões de todas as outras classes. Assim, o IR para o problema para três classes ficaria igual a 3,33, ou seja, cem padrões da classe azul dividido por trinta (20 padrões da classe verde mais 10 da classe vermelha).

É relevante destacar, que essa questão do desbalanceamento entre classes, é mais grave quando lidamos com tarefas que dispõem de poucos padrões. Para tarefas, nas quais o número de padrões é extremamente alto para todas as classes, essa questão é minimizada. Ao acessar muitos padrões, podemos construir um conjunto de treinamento balanceado, basta realizar undersampling na classe majoritária.

Além disso, o desbalanceamento, por si só, não representa um problema! Basta que as classes (mesmo que desbalanceadas) estejam bem separadas no espaço de características, consequentemente, a tarefa da máquina de aprendizagem será bem simples. Veja, que no exemplo acima, as classes vermelha e verde, embora desbalanceadas, são linearmente separáveis. Logo, um Perceptron (uma reta) seria suficiente para realizar uma classificação perfeita dos exemplos dessas classes. A dificuldade emerge quando, além de desbalanceadas, as classes se sobrepõem. Observe que as bordas, entre as classes vermelha e azul e entre as classes azul e verde, são mais complexas de serem definidas.

Como representar uma tarefa de aprendizagem de máquina: handcrafted features vs feature learning

Quando tomamos uma decisão, usamos uma grande quantidade de variáveis e de hierarquias de variáveis. Muitas vezes, nem nos apercebermos da importância dessas variáveis, pois, a complexidade de algumas decisões está além do nosso entendimento. Para ilustrar: você poderia me explicar, em detalhes, como reconhece seu amigo? Quais características, seus sistemas (visual, auditivo, …) analisam, a fim de identificá-lo com precisão?

Ok, vamos para um exemplo mais palpável. Suponha que desejamos comprar um carro. De pronto, nos vem a mente, uma série de variáveis que devemos avaliar: preço, cor, consumo de combustível, procedência, entre outras. Essas características nos ajudam a decidir, se iremos ou não comprar o carro.

De maneira similar, o conjunto de características, que apresentamos à máquina de aprendizagem, é de imperativa importância para que ela consiga tomar a melhor decisão. A escolha dessas características é uma tarefa não trivial, principalmente, quando não temos um especialista para nos ajudar no problema que desejamos resolver (e.g., comprar um carro usado sem a ajuda de um mecânico).

Em aprendizagem de máquina, essas características (features, em inglês), também chamadas de variáveis ou atributos, são fundamentais para o sucesso do processo de aprendizagem. Mas, geralmente, não sabemos quais são as características mais relevantes, consequentemente, decidimos por usar um grande número de características.  Assim, corre-se o risco de que algumas delas sejam irrelevantes ou mesmo prejudiciais para o treinamento da máquina de aprendizagem. Com o objetivo de reduzir essa quantidade de características e por conseguinte, aliviar a maldição da dimensionalidade, a alternativa mais comum é usar algoritmos de seleção de características. Esses algoritmos têm o papel de buscar o melhor subconjunto de características, a fim de realizar com sucesso, a tarefa que temos em mãos.

Mas, para selecionar características, precisamos, em primeiro lugar, ter as características. Essas características podem ser obtidas de duas formas: manual (handcrafted features) ou podem ser aprendidas (feature learning).

hand-crafted-vs-feature-learningNa primeira forma, handcrafted features, um conjunto de características é recomendado por um especialista, com a ajuda de um cientista de dados, e esse processo é chamado de feature engineering. Tal processo é mostrado no caminho superior da figura acima, no qual, o trabalho do especialista é definir as características (e/ou algoritmos extratores de características), que serão usadas para representar uma árvore. Após essa definição, um modelo é treinado, com o intuito de rotular como “árvore”, toda imagem de árvore que for dada como entrada ao sistema. Vale salientar, que se poucos especialistas estiverem disponíveis no mercado, o custo de seus serviços será alto. Todavia, mesmo se os especialistas estiverem disponíveis, a tarefa é inerentemente difícil. Não é incomum que especialistas discordem (links: 1, 2, 3, 4).

Dado que <manual> feature engineering é uma tarefa cara e difícil, como evitá-la? Uma alternativa é construir máquinas capazes de realizar essa tarefa automaticamente. Ou seja, ao invés da busca ser feita por humanos, podemos delegar a tarefa de encontrar as melhores características para um algoritmo. Esse procedimento é chamado de feature learning (mostrado como sendo o caminho inferior da imagem acima). A boa notícia é que algumas máquinas já fazem esse trabalho. Arquiteturas de aprendizado profundo (deep learning – DL) estão sendo usadas para esse fim, especialmente, para tarefas que envolvam imagens, voz e texto.

Não é à toa, que DL tem se destacado nas manchetes dos noticiários ultimamente. Ela tem obtido resultados bem superiores às handcrafted features em várias aplicações, e esse sucesso deve-se ao fato de que as características são aprendidas a partir dos dados do problema. Em outras palavras, essas características são automaticamente extraídas dos dados originais, por algoritmos que buscam minimizar o erro global do sistema. Logo, o conjunto de características gerado é dependente do problema, ou seja, são personalizadas para cada conjunto de dados de treinamento.

Ganha-se em precisão, perde-se em interpretabilidade. Essa é uma desvantagem de DL. As características aprendidas não possuem explicação conhecida no mundo real. Nesse sentido, o processo realizado pela DL, ao aprender as características, é, de certa forma, semelhante ao processo que trilhamos, por exemplo, ao reconhecer uma pessoa. Sabemos que funciona… mas não conseguimos explicar em detalhes como realizamos essa tarefa.

Outro fator limitante está relacionado à abrangência. Sabemos como aprender automaticamente características interessantes, quando os dados de entrada são imagens, voz e texto. O desafio agora é expandir esse aprendizado automático para outras aplicações, que ainda requerem a manufatura de características.

Quando usar aprendizagem de máquina?

Você já deve ter ouvido a frase: “a inteligência artificial está em todo lugar”. É verdade que usamos no nosso cotidiano vários dispositivos e aplicações que se valem de algoritmos inteligentes e nem percebemos. Algoritmos que filtram imagem impróprias, que recomendam possíveis amigos e que escolhem suas melhores fotos estão embutidos nas redes sociais.  Quando um email é colocado na caixa de Spam, uma máquina de aprendizagem (ramo de destaque da inteligência artificial) fez essa classificação. Os resultados das suas buscas na Internet são filtradas e selecionadas usando, adivinha o quê, algoritmos de aprendizagem de máquina. Recomendação de produtos, detecção de fraudes em compras, carros autônomos; a lista é vasta!

am

O sucesso da aprendizagem de máquina nas mais diversas áreas desperta nosso interesse em imaginar quais serão as próximas aplicações que permearão nossas vidas. Um exercício interessante é entender o que essas aplicações de sucesso têm em comum. Mas, talvez esse seja um exercício mais mercadológico do que propriamente um exercício técnico. Por outro lado, do ponto de vista técnico, vale a pena investigar a essência por trás do uso de aprendizagem de máquina. Para abordar esse assunto, devemos analisar três fatores:

Dados — a aprendizagem de máquina é essencialmente um processo de aprendizado a partir de dados. Logo, sem dados, outras alternativas, diferentes da aprendizagem de máquina, devem ser buscadas. Para um processo de aprendizado supervisionado, os dados devem ser rotulados. Exemplificando: num sistema de detecção de spam, os dados devem ser formados por emails e cada email deve ter um rótulo indicando se ele é spam ou não. Assim, de posse dos emails e de seus rótulos, uma máquina de aprendizagem pode encontrar uma função que ao receber um email como entrada, consegue inferir se é spam ou não.

Função — o processo de treinamento de uma máquina de aprendizagem tem o objetivo de encontrar uma função que faz um mapeamento de um conjunto de variáveis de entrada em uma das possíveis saídas. No caso de um sistema de detecção de spam, se a função que faz esse mapeamento já for conhecida, é desnecessário gastar tempo obtendo os dados e treinando uma máquina para se obter o que já se tem. Mas, se essa função for desconhecida e você não conseguir criar um modelo do problema — como é o caso de verificar se um email é spam —, métodos de aprendizagem de máquina podem te ajudar.

Padrão — os dados que serão usados para o treinamento de uma máquina de aprendizagem devem apresentar um comportamento coerente em relação aos objetos do mundo real que eles representam. Imagine um email que hoje é rotulado como spam e amanhã, esse mesmo email, é rotulado como não-spam. Essa inconsistência impossibilita que uma máquina de aprendizagem construa uma representação plausível do que é um spam, pois não é possível encontrar um comportamento padrão que possa ser usado para fins de aprendizagem.

Avaliando esses três fatores, podemos verificar que mesmo se os dados não tiverem um comportamento coerente (padrão) e se a função de mapeamento for conhecida, podemos usar técnicas de aprendizagem de máquina. Nada nos impede. Mas, não conseguiremos usar aprendizagem de máquina se não tivermos dados. Esse é um pré-requisito essencial.

Para os que pretendem construir soluções baseadas em aprendizagem de máquina para a indústria, sugiro atentar para outros fatores, tais como:

  • Os responsáveis devem ter um bom entendimento do que aprendizagem de máquina significa e o que pode ser alcançado com seu uso. Por mais que iniciativas de automação end-to-end do processo de aprendizagem, e.g. Auto-ML, tenham crescido bastante nos últimos anos, o emprego acurado de técnicas de aprendizagem requer a intervenção de especialistas;
  • Dados de qualidade devem estar disponíveis.  Para tanto, devem ser observados o tamanho e a diversidade da amostra, bem como sua aderência ao problema real. A máquina será tão boa quanto os dados usados para treiná-la. Caso a máquina seja treinada com uma amostra que não reflete o mundo real, a aplicação provavelmente não funcionará a contento. Digamos que um sistema tenha sido treinado apenas com imagens coletadas durante o verão e com forte luz solar. Esse sistema, muito provavelmente, terá o seu funcionamento comprometido para imagens adquiridas à noite, durante um inverso chuvoso;
  • Existência de um processo claro de avaliação do diferencial ao empregar aprendizagem. Essa avaliação possui várias camadas que pode ter início no módulo mais interno do sistema — métrica usada para avaliar a máquina de aprendizagem —, a uma apreciação global que quantificará uma possível redução de custos ou de riscos do negócio.

Por fim, gostaria de destacar que a falta de entendimento do que pode ser alcançado usando aprendizagem de máquina dá origem ao mito de que basta termos uma grande massa de dados e, milagrosamente, técnicas de aprendizagem serão capazes de resolver qualquer problema apenas “olhando” esses dados. Essa massa de dados, muitas vezes, precisa ser trabalhada a várias mãos por diferente especialistas (bancos de dados, ciência dos dados, estatísticos, experts no problema em questão, entre outros) para que tenhamos sucesso no uso de métodos que aprendem.