Como é o Machine Learning
no aprendizado supervisionado e não supervisionado
Para entender como funciona a aprendizagem de máquina, é importante saber que existem dois principais paradigmas: o aprendizado supervisionado e o aprendizado não supervisionado. Também existe um que está ganhando bastante força ultimamente que é o aprendizado por reforço, mas que não vou entrar em detalhes. Entendo que estes dois principais paradigmas ganharam mais destaques, porque no decorrer da história da Inteligência Artificial, suas características foram mais usadas do que as outras formas.
Em um sistema de Machine Learning, independente de ser aprendizado supervisionado ou não supervisionado, o que é fornecido para o algoritmo são as entradas que possuímos e as saídas esperadas. E então deixamos o algoritmo “aprender” os padrões e “desenvolver” a solução necessária para fazer aquelas entradas resultarem naquelas saídas.
Isso é bastante diferente do que é feito com o desenvolvimento de software tradicional, na qual informamos quais são as entradas e o como o programa deve se comportar. Com estas instruções, o software nos dá a saída esperada.
Pode parecer abstrato esse tipo de pensamento, mas Aurélien Géron em seu livro Mãos à Obra: Aprendizado de Máquina com Scikit-Learn & TensorFlow conseguiu deixar esta explicação muito simples. Arrisco dizer que foi a melhor explicação de como funciona a aprendizagem de máquina que eu já li.
Aprendizagem de Máquina
Diz-se que um programa de computador aprende pela experiência E, em relação à algum tipo de tarefa T e alguma medida de desempenho P se, o seu desempenho P na execução da tarefa T, melhora com a experiência E. Mitchell, Tom. 1997
Essa definição do Tom foi tirada do livro do Aurélien comentado mais acima. Ela explica bem a forma como podemos entender que o computador aprende. Tentando deixar essa citação do Tom mais palatável, fiz a minha interpretação: Podemos dizer que um sistema aprendeu algo quando, para realizar uma tarefa que pode ser medida, ele aprende com novas experiências e melhora o seu desempenho ao realizar aquela tarefa.
Isso nos leva ao ponto de que algo só pode ser melhorado se este algo puder ser medido. Ou seja, não dá para dizer se alguma coisa evoluiu ou aprendeu, se não estivermos medindo seu desempenho e compararmos os resultados quando apresentarmos novas experiências.
Este feedback para ajudar a máquina a aprender pode ser feita de forma explícita, com algum agente dizendo ao algoritmo se o resultado foi assertivo ou errado. Com isso, novas experiências são ensinadas ao sistema e é esperado que ele melhore o desempenho nas execuções seguintes. Ou de forma implícita, quando uma determinada ação é feita pelo sistema e é entendido que o resultado do algoritmo foi correto ou errado.
É muito comum sistemas de Machine Learning serem aplicados em problemas complexos quando não é tão simples criar as regras através de condições com desenvolvimento tradicional. Estes sistemas de Machine Learning podem ser classificados em famílias, de acordo com o tipo de supervisão que existe para construí-lo.
Aprendizado Supervisionado
Neste paradigma de aprendizado, é fornecido para o algoritmo a variável alvo, que é resultado desejado existente na base de treino. Ou seja, sabemos exatamente quais são as entradas e as saídas esperadas para aquele conjunto de dados.
Existem duas possíveis categorias no aprendizado supervisionado, contudo, cada uma delas resolve um tipo de problema diferente. Os algoritmos de classificação trabalham para responder dados categóricos. E os algoritmos de regressão, ou estimação dependendo da literatura, trabalham para responder dados numéricos. Mas mesmo com alvos completamente diferentes, eles fazem parte do mesmo paradigma de aprendizado supervisionado.
Imagine um cenário onde você possui algumas características de veículos como Cor, Quantidade de Rodas, Quantidade de Portas, Quilometragem, Potência do Motor, Litragem do porta-malas, Marca, Modelo, Tipo de Cambio, Tipo de Carroceria e Preço da tabela FIPE. Você pode trabalhar tanto para criar um Algoritmo de Classificação que lhe responderia qual é o tipo de carroceria daquele veículo, quanto pode criar um Algoritmo de Regressão que lhe responderia quanto aquele veículo custa.
Para criar qualquer um destes sistemas, você precisa apresentar muitos exemplos para o algoritmo. Estes exemplos são chamados de base de treino. É fundamental que todos os dados existam na sua base, mas principalmente não pode deixar de existir os dados da variável alvo. Que neste caso é o Tipo de Carroceria para o algoritmo de classificação, e o Preço da tabela FIPE para o algoritmo de regressão. Cada algoritmo também possui suas características e podem usar variáveis preditoras diferentes, que ajudam o algoritmo a responder à variável alvo. Imagine que a cor do veículo não influencie na hora de definir sua carroceria, mas ela influencia no Preço.
Aprendizado Não Supervisionado
Como você pode ter imaginado, o aprendizado não supervisionado não possui uma variável alvo definida. Ou seja, não temos clareza de qual será sua saída até começarmos a observar seus resultados. Neste paradigma também existem vários tipos de famílias de algoritmos, como os algoritmos de agrupamento (Clustering), Redução de Dimensionalidade e também Regras de Associação.
Imagine que eu queria melhorar a experiência de vocês, utilizando os dados que o Google Analytics fornece sobre quem lêem o blog. Com base em algumas características dos leitores, como País de origem, Quantidade de páginas lidas, Gênero, Horário de acesso ao blog, Quanto tempo lendo conteúdo e Quais posts foram lidos. É possível criar um algoritmo de agrupamento, que pode encontrar similaridade entre os valores existentes nas variáveis e com isso eu descubro quais são os comportamentos de pessoas mais engajadas e pessoas menos engajadas com as coisas que eu publico. Repare que não sei quem são os leitores, nem quais são as características que os fazem ter uma similaridade entre si. Mas o algoritmo consegue me apresentar os grupos possíveis e com isso eu trabalho para criar os rótulos para eles. Um dos algoritmos mais comuns para esta tarefa é o K-Means.
Outra atividade que posso fazer para melhorar a experiência dos leitores é recomendar conteúdo. Me apropriando dos dados que o Google Analytics forneceu, com a possibidade (opcional) de utilizar os grupos segmentados pelo algoritmo de agrupamento, é possível identificar quais matérias foram lidas em cada acesso ao blog. Com isso, quando alguém ler uma matéria, é possível fazer a recomendação de outro post que talvez seja de interesse do leitor, baseado nas leituras de outros visitantes. Um dos algoritmos mais comuns para esta tarefa é o Apriori, que utilizei para o meu modelo de predição na defesa do mestrado.
Métricas de avaliação do desempenho
No começo do texto comentei que é importante medir o desempenho do algoritmo para saber como está sua performance. Você utiliza algumas métrica para saber se o algoritmo está bem calibrado com os parâmetros que foi fornecido, ou se precisa de algum ajuste. Mas cuidado, muitas vezes ajustar demais o algoritmo ele fica viciado e “decora” as respostas acertando mais do que realmente deveria. Isso é chamado de Overfit.
No paradigma de aprendizado supervisionado, principalmente em algoritmos de classificação, é separado um percentual da base de treino. Com a técnica de Holdout geralmente são 20% ou 30% da base separada, mas com a técnica de Cross-Validation é possível usar a base inteira. Essa separação é para que não seja utilizada na criação do algoritmo. Depois do algoritmo treinado, esta parte que não foi utilizada para treinar o modelo é utilizada para “simular” o comportamento de um ambiente de produção onde novos dados são apresentados ao algoritmo. Então o algoritmo responde à estes dados, como se realmente fossem novas amostras. Contudo, estes dados possuem o valor da variável alvo respondida originalmente, possibilitando comparar o resultado do algoritmo com o valor original e então medir a qualidade das respostas.
No fim das contas, não importa se você vai desenvolver o seu sistema em Python ou R, afinal o que é importante mesmo é saber como funciona a aprendizagem de máquina e aplicar a técnica de forma correta. Para aprender mais sobre os algoritmos de Machine Learning e suas implementações, recomendo dois livros: Introdução à mineração de dados: Conceitos básicos, algoritmos e aplicações e também Introdução à mineração de dados: com Aplicações em R.