Você deve ter ouvido o ditado “entra lixo, sai lixo”. Este ditado é realmente aplicável ao treinar modelos de aprendizado de máquina. Se treinarmos modelos de aprendizado de máquina usando dados irrelevantes, mesmo os melhores algoritmos de aprendizado de máquina não ajudarão muito. Por outro lado, o uso de recursos significativos e bem projetados pode alcançar um desempenho superior mesmo com um algoritmo simples de aprendizado de máquina. Então, como podemos criar esses recursos significativos que maximizarão o desempenho do nosso modelo? A resposta é engenharia de recursos. Trabalhar na engenharia de recursos é especialmente importante ao trabalhar com algoritmos tradicionais de aprendizado de máquina, como regressão, árvores de decisão, máquinas de vetores de suporte e outros que exigem entradas numéricas. No entanto, criar essas entradas numéricas não envolve apenas habilidades com dados. É um processo que exige criatividade e conhecimento de domínio e tem tanto arte quanto ciência.
Em termos gerais, podemos dividir a engenharia de recursos em dois componentes: 1) criação de novos recursos e 2) processamento desses recursos para fazê-los funcionar de maneira ideal com o algoritmo de máquina em consideração. Neste artigo, discutiremos esses dois componentes da engenharia de recursos para conjuntos de dados transversais, estruturados e não PNL.
A coleta de dados brutos pode ser exaustiva e, ao final desta tarefa, podemos estar cansados demais para investir mais tempo e energia na criação de recursos adicionais. Mas é aqui que devemos resistir à tentação de mergulhar directamente na formação de modelos. Te prometo que valerá muito a pena! Nessa junção, deveríamos fazer uma pausa e nos perguntar: "Se eu fizesse as previsões manualmente com base no conhecimento do meu domínio, quais recursos teriam me ajudado a fazer um bom trabalho?" Fazer esta pergunta pode abrir possibilidades para a criação de novos recursos significativos que, de outra forma, nosso modelo poderia ter perdido. Depois de considerarmos quais recursos adicionais poderíamos nos beneficiar, podemos aproveitar as técnicas abaixo para criar novos recursos a partir dos dados brutos.
Como o nome sugere, esta técnica nos ajuda a combinar vários pontos de dados para criar uma visão mais holística. Normalmente aplicamos agregações em dados numéricos contínuos usando funções padrão como contagem, soma, média, mínimo, máximo, percentil, desvio padrão e coeficiente de variação. Cada função pode capturar diferentes elementos de informação, e a melhor função a ser usada depende do caso de uso específico. Freqüentemente, podemos aplicar agregação em um determinado período de tempo ou evento que seja significativo no contexto desse problema.
Vejamos um exemplo em que queremos prever se uma determinada transação com cartão de crédito é fraudulenta. Para este caso de uso, podemos, sem dúvida, usar recursos específicos de transação, mas junto com esses recursos, também podemos nos beneficiar da criação de recursos agregados no nível do cliente, como:
Contagem de vezes que o cliente foi vítima de fraude nos últimos cinco anos: Um cliente que foi vítima de fraude várias vezes anteriormente pode ter maior probabilidade de ser vítima de fraude novamente. Conseqüentemente, o uso dessa visão agregada no nível do cliente pode fornecer sinais de previsão adequados.
Mediana dos últimos cinco valores de transação: Muitas vezes, quando um cartão de crédito é comprometido, os fraudadores podem tentar várias transações de baixo valor para testar o cartão. Agora, uma única transação de baixo valor é muito comum e pode não ser um sinal de fraude, mas se observarmos muitas dessas transações em uma curta sucessão, isso pode indicar um cartão de crédito comprometido.
Em muitos tipos de problemas, a mudança em um padrão definido é um sinal valioso para previsão ou detecção de anomalias. Diferenças e proporções são técnicas eficazes para representar mudanças em características numéricas. Assim como a agregação, também podemos aplicar essas técnicas durante uma janela de tempo significativa no contexto desse problema.
Exemplos:
Diferença entre a porcentagem de novas transações comerciais na última 1 hora e a porcentagem de novas transações comerciais nos últimos 30 dias: uma alta porcentagem de novas transações comerciais em rápida sucessão pode indicar risco de fraude por si só, mas quando vemos que esse comportamento mudou em relação ao comportamento histórico do cliente, torna-se um sinal ainda mais aparente.
Proporção entre a contagem de transações do dia atual e a contagem média de transações diárias dos últimos 30 dias: quando um cartão de crédito é comprometido, provavelmente haverá muitas transações em um curto espaço de tempo, o que pode não estar de acordo com o uso anterior do cartão de crédito. Uma proporção significativamente alta entre a contagem de transações do dia atual e a contagem média de transações diárias dos últimos 30 dias pode indicar padrões de uso fraudulentos.
Podemos usar a técnica de cálculo de idade para converter os recursos de data ou carimbo de data/hora em recursos numéricos, calculando a diferença entre dois carimbos de data/hora ou datas. Também podemos usar essa técnica para converter certos recursos não numéricos em recursos numéricos significativos se a posse associada aos valores dos recursos puder ser um sinal valioso para previsão.
Exemplos:
Os recursos indicadores ou booleanos têm valores binários {1, 0} ou {True, False}. Os recursos dos indicadores são muito comuns e são usados para representar vários tipos de informações binárias. Em alguns casos, já podemos ter tais recursos binários na forma numérica, enquanto em outros casos, eles podem ter valores não numéricos. Para usar os recursos binários não numéricos para treinamento de modelo, tudo o que precisamos fazer é mapeá-los para valores numéricos.
Olhando além dessas ocorrências comuns e usos de recursos de indicadores, podemos aproveitar a codificação de indicadores como uma ferramenta para representar uma comparação entre pontos de dados não numéricos. Este atributo o torna particularmente poderoso, pois cria uma maneira de medirmos as mudanças em recursos não numéricos.
Exemplos:
Falha na verificação durante evento de login recente: Um evento recente de falha no login pode estar associado a um risco maior de transações fraudulentas. Neste caso, os dados brutos podem ter valores Sim ou Não para este recurso; tudo o que precisamos fazer aqui é mapear esses valores para 1 ou 0.
Mudança na localização do país desde a última transação: Uma mudança na localização do país pode indicar um cartão de crédito comprometido. Aqui, a criação de um recurso de indicador que representa uma mudança no recurso não numérico 'localização do país' capturará essas informações de mudança de país.
Esta técnica pode ser aplicada se nossos dados de recursos estiverem em formato categórico, seja numérico ou não numérico. A forma numérica-categórica refere-se a dados numéricos contendo dados não contínuos ou não de medição, como códigos de região geográfica, IDs de lojas e outros tipos de dados. Uma técnica de codificação a quente pode converter esses recursos em um conjunto de recursos de indicadores que podemos usar no treinamento de modelos de aprendizado de máquina. Aplicar uma codificação dinâmica em um recurso categórico criará um novo recurso binário para cada categoria nessa variável categórica. Como o número de novos recursos aumenta à medida que o número de categorias aumenta, esta técnica é adequada para recursos com baixo número de categorias, especialmente se tivermos um conjunto de dados menor. Uma das regras práticas sugere a aplicação desta técnica se tivermos pelo menos dez registros por categoria.
Exemplos:
Essa técnica é aplicada ao mesmo tipo de recursos aos quais aplicaríamos a codificação one-hot, mas tem algumas vantagens e desvantagens em relação à codificação one-hot. Quando o número de categorias é alto (alta cardinalidade), o uso da codificação one-hot aumentará indesejavelmente o número de recursos, o que pode levar ao ajuste excessivo do modelo. A codificação alvo pode ser uma técnica eficaz nesses casos, desde que estejamos trabalhando em um problema de aprendizagem supervisionada. É uma técnica que mapeia o valor de cada categoria com o valor esperado do alvo para aquela categoria. Se estiver trabalhando com um problema de regressão com uma meta contínua, esse cálculo mapeia a categoria para o valor alvo médio dessa categoria. No caso de um problema de classificação com um alvo binário, a codificação do alvo mapeará a categoria para a probabilidade de evento positivo dessa categoria. Ao contrário da codificação one-hot, esta técnica tem a vantagem de não aumentar o número de recursos. Uma desvantagem desta técnica é que ela só pode ser aplicada a problemas de aprendizagem supervisionada. A aplicação desta técnica também pode tornar o modelo suscetível ao sobreajuste, principalmente se o número de observações em algumas categorias for baixo.
Exemplos:
Depois de criarmos os novos recursos a partir dos dados brutos, a próxima etapa é processá-los para obter o desempenho ideal do modelo. Conseguimos isso por meio do processamento de recursos, conforme discutido na próxima seção.
O processamento de recursos refere-se a uma série de etapas de processamento de dados que garantem que os modelos de aprendizado de máquina se ajustem aos dados conforme pretendido. Embora algumas dessas etapas de processamento sejam necessárias ao usar determinados algoritmos de aprendizado de máquina, outras garantem que encontremos uma boa química funcional entre os recursos e o algoritmo de aprendizado de máquina em consideração. Nesta seção, vamos discutir algumas etapas comuns de processamento de recursos e por que precisamos delas.
Vários algoritmos de aprendizado de máquina, especialmente os paramétricos, como modelos de regressão, são severamente afetados por valores discrepantes. Esses algoritmos de aprendizado de máquina tentam acomodar valores discrepantes, afetando gravemente os parâmetros do modelo e comprometendo o desempenho geral. Para tratar os outliers, devemos primeiro identificá-los. Podemos detectar valores discrepantes para um recurso específico aplicando certas regras práticas, como ter um valor absoluto maior que a média mais três desvios padrão ou um valor fora do valor do bigode mais próximo (valor do quartil mais próximo mais 1,5 vezes o valor do intervalo interquartil). Depois de identificarmos os valores discrepantes em um recurso específico, podemos usar algumas das técnicas abaixo para tratar valores discrepantes:
Observe que existem técnicas para detectar observações que são outliers multivariados (outliers em relação a múltiplos recursos), mas são mais complexas e geralmente não agregam muito valor em termos de treinamento de modelo de aprendizado de máquina. Observe também que os valores discrepantes não são uma preocupação ao trabalhar com a maioria dos modelos de aprendizado de máquina não paramétricos, como máquinas de vetores de suporte e algoritmos baseados em árvores, como árvores de decisão, florestas aleatórias e XGBoost.
Dados ausentes são muito comuns em conjuntos de dados do mundo real. A maioria dos algoritmos tradicionais de aprendizado de máquina, exceto alguns como o XGBoost, não permitem valores ausentes em conjuntos de dados de treinamento. Assim, corrigir valores ausentes é uma das tarefas rotineiras na modelagem de aprendizado de máquina. Existem diversas técnicas para tratar valores faltantes; entretanto, antes de implementar qualquer técnica, é importante entender a causa dos dados faltantes ou, pelo menos, saber se os dados faltam aleatoriamente. Se os dados não estiverem faltando aleatoriamente, o que significa que certos subgrupos têm maior probabilidade de ter dados faltantes, pode ser difícil imputar valores para eles, especialmente se houver poucos ou nenhum dado disponível. Se os dados estiverem faltando aleatoriamente, podemos usar algumas das técnicas comuns de tratamento descritas abaixo. Todos eles têm prós e contras, e cabe a nós decidir qual método melhor se adapta ao nosso caso de uso.
Freqüentemente, os recursos que usamos em modelos de aprendizado de máquina têm intervalos diferentes. Se os usarmos sem escala, os recursos com valores absolutos grandes dominarão o resultado da previsão. Em vez disso, para dar a cada característica uma oportunidade justa de contribuir para o resultado da previsão, devemos colocar todas as características na mesma escala. As duas técnicas de dimensionamento mais comuns são:
Observe que algoritmos baseados em árvore, como árvores de decisão, floresta aleatória, XGBoost e outros, podem funcionar com dados não escalonados e não precisam de escalonamento ao usar esses algoritmos.
Hoje, temos dados enormes e podemos construir uma vasta coleção de recursos para treinar nossos modelos. Para a maioria dos algoritmos, ter mais recursos é bom, pois oferece mais opções para melhorar o desempenho do modelo. No entanto, isso não é verdade para todos os algoritmos. Algoritmos baseados em métricas de distância sofrem com a maldição da dimensionalidade – à medida que o número de características aumenta substancialmente, o valor da distância entre as duas observações perde o sentido. Assim, para utilizar algoritmos que dependem de métricas de distância, devemos garantir que não estamos utilizando um grande número de recursos. Se nosso conjunto de dados tiver um grande número de recursos e não soubermos quais manter e quais descartar, podemos usar técnicas como análise de componentes principais (PCA). O PCA transforma o conjunto de recursos antigos em um conjunto de novos recursos. Ele cria novos recursos de forma que aquele com os valores próprios mais altos capture a maior parte das informações dos recursos antigos. Podemos então manter apenas os novos recursos principais e descartar os restantes.
Outras técnicas estatísticas, como análise de associação e algoritmos de seleção de recursos, podem ser usadas em problemas de aprendizagem supervisionada para reduzir o número de recursos. No entanto, eles geralmente não capturam o mesmo nível de informação que o PCA captura com o mesmo número de recursos.
Esta etapa é uma exceção porque se aplica apenas ao destino e não aos recursos. Além disso, a maioria dos algoritmos de aprendizado de máquina não tem nenhuma restrição na distribuição do alvo, mas alguns, como a regressão linear, exigem que o alvo seja distribuído normalmente. A regressão linear assume que os valores de erro são simétricos e concentrados em torno de zero para todos os pontos de dados (assim como a forma da distribuição normal), e uma variável alvo normalmente distribuída garante que esta suposição seja atendida. Podemos entender a distribuição do nosso alvo traçando um histograma. Testes estatísticos como o teste de Shapiro-Wilk nos falam sobre a normalidade ao testar esta hipótese. Caso nosso alvo não seja normalmente distribuído, podemos tentar várias transformações, como transformação logarítmica, transformação quadrada, transformação raiz quadrada e outras para verificar quais transformações tornam a distribuição alvo normal. Há também uma transformação Box-Cox que testa vários valores de parâmetros, e podemos escolher aquele que melhor transforma a distribuição do nosso alvo em normal.
Nota: Embora possamos implementar as etapas de processamento de recursos em qualquer ordem, devemos considerar cuidadosamente a sequência de sua aplicação. Por exemplo, o tratamento de valores ausentes usando substituição de média de valor pode ser implementado antes ou depois da detecção de valores discrepantes. No entanto, o valor médio usado para substituição pode diferir dependendo se tratamos os valores ausentes antes ou depois do tratamento de valores discrepantes. A sequência de processamento de recursos descrita neste artigo trata os problemas na ordem do impacto que eles podem ter nas etapas de processamento sucessivas. Assim, seguir esta sequência geralmente deve ser eficaz para resolver a maioria dos problemas.
Conforme mencionado na introdução, a engenharia de recursos é uma dimensão do aprendizado de máquina que nos permite controlar o desempenho do modelo em um grau excepcional. Para explorar todo o potencial da engenharia de recursos, aprendemos várias técnicas neste artigo para criar novos recursos e processá-los para funcionar de maneira ideal com modelos de aprendizado de máquina. Não importa quais princípios e técnicas de engenharia de recursos deste artigo você escolha usar, a mensagem importante aqui é entender que o aprendizado de máquina não consiste apenas em pedir ao algoritmo para descobrir os padrões. Trata-se de permitir que o algoritmo faça o seu trabalho de forma eficaz, fornecendo o tipo de dados de que necessita.