5 conhecimentos essenciais para um engenheiro de machine learning

Arpan Chakraborty
19 de mar de 2018

É difícil encontrar outro segmento que gere tanto burburinho quanto machine learning: há avanços impressionantes como as vitórias do AlphaGO contra o melhor jogador do mundo e algoritmos tão bem calibrados que conseguem identificar tweets postados por alguém sob efeito de bebida alcoólica.

São inúmeros campos já impactados, como educação, saúde, finanças e ciência da computação. Na prática, não existe nenhum segmento no qual ele não possa exercer algum tipo de influência – e essa aplicabilidade ilimitada talvez seja seu principal atrativo.

Para quem tem interesse na área, no entanto, é importante diferenciar mitos de realidades e entender o contexto e os conhecimentos técnicos envolvidos nessa carreira.

Leia: Machine Learning: entenda as oportunidades profissionais dessa área

O que faz um engenheiro de machine learning

O trabalho do engenheiro de machine learning tem como resultado final um software. Seu público-alvo é outro software e todo o mecanismo funciona sob mínima supervisão humana e se aprimora constantemente.

A primeira coisa necessária é entender que este não é um trabalho meramente acadêmico e não exige uma formação clássica.

O outro lado dessa moeda é que os conhecimentos exigidos são variados e aprofundados: ter experiência em engenharia de software ou ciência de dados não é suficiente, mesmo que você precise delas no dia a dia.

O conhecimento aprofundado do problema em questão se estende ao seu ecossistema geral, o que significa que este profissional precisa entender o negócio em questão também.

Leia: AI, ML, DL... Entenda as siglas por trás da revolução tecnológica

A importância de uma visão holística

Imagine que você trabalhe com machine learning em uma rede de supermercados e a empresa queira desenvolver cupons personalizados, usando como base o histórico de compra de seus clientes. A ideia é criar cupons que sejam efetivamente utilizados pelos consumidores.

Dentro da análise de dados, você coletaria os dados de compra, avaliaria os resultados, identificaria tendências e proporia uma estratégia. No universo do machine learning, o trabalho consistiria em desenvolver um sistema que gerasse os cupons automaticamente.

Mas o que é necessário para desenvolver esse sistema e fazê-lo funcionar? É preciso ter uma compreensão geral que envolva gestão de estoque, precificação, processo de compras, faturamento, software de gerenciamento de ponto de venda, CRM, etc.

O processo é mais pautado na compreensão das correlações sistêmicas – e no consequente desenvolvimento de um software que efetivamente integre tudo isso – do que no entendimento e aplicação de algoritmos de machine learning.

Lembre-se disso: o propósito do machine learning é a criação e desenvolvimento de um software.

Leia: Aluno da Udacity cria robô para escrever novo livro da série de George R. R. Martin

Engenheiro de machine learning: 5 habilidades técnicas essenciais

1. Fundamentos da ciência da computação e programação

Os mais importantes conceitos de ciência da computação para um engenheiro de machine learning incluem:

  • Estrutura de dados (pilhas, filas, matrizes multidimensionais, árvores, gráficos, etc.)
  • Algoritmos (busca, classificação, otimização, programação dinâmica, etc.)
  • Computabilidade e complexidade (P vs. NP, NP-problemas completos, notação big-O, algoritmos de aproximação, etc.)
  • Arquitetura de computadores (memória, cache, largura de banda, impasses, processamento distribuído, etc.)

Você precisa estar apto a aplicá-los, implementá-los e adaptá-los à programação. Resolver problemas práticos e participar de competições de codificação e hackathons são uma ótima maneira de aprimorar suas habilidades.

Leia: 4 motivos para começar a aprender machine learning hoje

2. Probabilidade e estatística

Uma caracterização formal de probabilidade (condicional, teorema de Bayes, independência, etc.) e as técnicas desses conceitos (rede bayesiana, processo markoviano de decisão, modelo oculto de markov, etc.) compõem a essência de muitos dos algoritmos de machine learning e são maneiras de lidar com as incertezas do mundo real.

Intimamente ligado a tudo isso está o campo da estatística, proporcionando mensuração (média, mediana, variância), distribuições (uniforme, normal, binomial, Poisson) e métodos de análises (ANOVA, testes hipotéticos) que são necessários para a construção e validação de modelos a partir de dados observados.

Muitos algoritmos de machine learning são extensões de procedimentos de modelagem estatística.

3. Modelagem e avaliação de dados

A modelagem de dados é o processo de estimar a estrutura oculta de um determinado conjunto de dados, com o objetivo de encontrar padrões úteis (correlações, agrupamentos, autovetores), bem como previsão de circunstâncias anteriormente não vistas (classificação, regressão, detecção de anomalia).

Parte fundamental desse processo é avaliar continuamente o quão bom é um determinado modelo. A depender do projeto, você terá que lançar mão de uma apurada medida de erro e acerto (perda de dados, soma de quadrados do erro, etc.) e uma estratégia de avaliação (como treino e teste e validação cruzada).

Algoritmos de aprendizagem iterativa geralmente utilizam erros resultantes para ajustar o modelo – backpropagation para redes neurais, por exemplo –, o que torna a compreensão dessas medidas primordial, mesmo que seja apenas para a aplicação padrão de algoritmos.

Leia: Como veículos autônomos e cidades inteligentes se conectam

4. Utilização de algoritmos e bibliotecas de machine learning

As implementações dos algoritmos de machine learning estão fartamente disponíveis nas bibliotecas, pacotes e APIs. Nscikit-learn, Theano, Spark MLlib, H2O e TensorFlow são alguns exemplos.

Aplicá-los efetivamente depende da escolha do modelo apropriado, de um procedimento de aprendizagem que integre esses dados (regressão linear, descida do gradiente, algoritmos genéticos, ensacamento e outros métodos específicos), além da compreensão dos hiperparâmetros afetam essa aprendizagem.

É preciso estar atento às vantagens, desvantagens e armadilhas relativas a essas diferentes abordagens: pode haver bias e variância, overfitting e underfitting, dados faltantes e vazamento de dados, entre outras.

Os desafios da ciência de dados e do machine learning como os apresentados no Kaggle são ótimas oportunidades de estar em contato com os diferentes tipos de problemas e seus respectivos desdobramentos.

Leia: Como mudar de carreira em 10 passos

5. Engenharia de software e design de sistemas

No fim das contas, o resultado do trabalho de um engenheiro de machine learning é o desenvolvimento de um software. E, geralmente, este software é apenas um componente dentro de um complexo ecossistema de produtos e serviços.

É preciso entender as nuances de integração e comunicação desses elementos (por meio de bibliotecas, REST APIs, consulta aos bancos de dados) e criar interfaces que deem suporte a outros componentes desse ecossistema.

O design do sistema precisa ser cuidadoso para que, conforme o volume de dados aumenta, os gargalos não sejam um entrave à escalada dos algoritmos.

As melhores práticas voltadas à engenharia de software, incluindo análise de requisitos, design de sistema, modularidade, controle de versão, testes e documentação, são imprescindíveis ​​para a produtividade, colaboração, qualidade e manutenção do produto final.

Artigo originalmente publicado no blog americano da Udacity