Modelos de Predição | Introdução à Predição

Primeiros passos para entender os modelos preditivos.

Letícia Mendonça Carraro
Turing Talks
14 min readJul 14, 2019

--

O quão bem você aprende com seus erros e experiências passadas? Mal? Não se preocupe, depois desse artigo você entenderá melhor sobre conceitos de predição e como eles podem impactar o seu projeto de machine learning. Dessa forma, pelo menos seu algoritmo vai tomar as decisões certas!

O conceito de Machine Learning é baseado na construção de algoritmos de maneira a possibilitar que o computador tome decisões de acordo com as situações e dados inseridos nele. Sendo assim, não se está implementando um algoritmo que segue instruções em uma rotina e sim treinando a máquina para aprender como executar a tarefa.

Mas como é possível a máquina aprender? Existem três tipos de aprendizagem de máquina, o supervisionado, o não supervisionado e o por reforço. Caso queira saber mais sobre o assunto e machine learning, existe uma explicação em detalhes neste post!

Bem, agora você já sabe sobre machine learning, e os tipos de aprendizagem de máquina e quer criar um modelo! Mas como fazer? Veremos diferentes tipos de modelo em posts futuros, contudo antes de avançarmos é preciso entender alguns conceitos ligados a aspectos básicos de predição.

Quando buscamos determinar um valor — por exemplo, determinar o preço de um automóvel baseado no ano em que foi fabricado, se é usado ou não, sua quilometragem, etc. — ou uma categoria, precisamos de um modelo de predição, ou seja, precisamos de uma função que se aproxime daquela descrita pelos dados que temos.

Modelos de predição

Existem diversos modelos de predição (regressão linear, SVM, Naive Bayes, …), que serão abordados em detalhes em posts futuros. É necessário escolher o que melhor se encaixa em sua necessidade. Tal escolha depende dos tipos de dados que se possui e do problema a ser resolvido. Conforme nos aprofundarmos nos diferentes modelos de predição e nos familiarizarmos com suas características a escolha se tornará mais fácil. Depois de escolhido um modelo, é preciso verificar se os resultados obtidos foram bons o suficiente. Para avaliar isso é necessário conhecer um pouco sobre erros comuns que acontecem ao desenvolver os algoritmos, como identificá-los e corrigi-los.

Overfitting e Underfitting

Ao construir uma função que se aproxima dos nossos dados, podemos proceder de forma muito complexa, tentando ajustá-la para cada ponto possível; afinal, queremos que ela seja extremamente precisa. Entretanto, isto gera um problema de overfitting: sua função é excelente na base de treino, contudo não tem um desempenho tão bom na base de testes. Isso acontece pois, de certa forma, a sua função “aprendeu o ruído”, ou seja, o modelo se ajusta a erros e fatores aleatórios (exceções ou outliers), que não necessariamente condizem com a realidade dos dados apresentados.

Para exemplificar esse problema, vamos analisar um dataset com duas classificações (azul e vermelho). Na imagem abaixo, o modelo ideal é representado pela linha preta, que separa os pontos vermelhos dos azuis. Observe que esse modelo erra algumas vezes. No entanto, esses erros ocorrem por causa de ruído. A linha verde, que não comete nenhum erro, é muito mais complexa: ela se ajustou ao ruído. Se obtivéssemos pontos novos (que não estavam no dataset), o modelo verde provavelmente cometeria erros nesses pontos.

A linha verde representa um modelo com overfitting.

Em contrapartida, se o seu modelo for muito simples, você pode acabar com um caso de underfitting, ou seja, sua função não captura corretamente a complexidade dos dados apresentados. Uma linha reta, por exemplo, nem sempre consegue separar um conjunto de pontos em duas categorias.

Nesse caso a linha verde representa um modelo com underfitting.

Bias-Variance Tradeoff

Para entender melhor os erros de predição é necessário entender que fatores influenciam tais erros, bem como a relação entre eles.

O primeiro fator, chamado de bias (viés), é a diferença entre a predição média do nosso modelo e o valor correto esperado. Sendo assim, um modelo com bias aprende relações erradas e gera previsões longe do esperado. O modelo não aprende corretamente com o dataset, assumindo muitas informações sobre os dados que não são necessariamente corretas. Dessa forma, modelos com alto bias possuem um problema de underfitting.

O segundo fator, variance, é a variabilidade do modelo para um determinado dado, ou seja, a capacidade do modelo de se adaptar à base de treino e ao ruído. Dessa forma, modelos com alta variance focam excessivamente se ajustar aos dados e, inclusive, ao ruído. Assim, esses modelos têm um problema de overfitting, ou seja, se adaptam tão bem ao dataset que não conseguem generalizar para além dele.

Na imagem, cada ponto azul representa um modelo e o centro vermelho representa o ponto ideal

Por último, temos o erro irredutível, que refere-se a pontos fora da curva, exceções. Não é possível observar cada pequeno fator que leva um evento a acontecer, possuímos limitações. Ao elaborar um modelo escolhemos os fatores que são mais relevantes ao nosso problema e deixamos de lado alguns outros. Em outros casos, podemos não ter acesso a todas as informações. Dessa forma, pode haver alguma feature faltando em nosso dataset que nos impede de gerar predições corretas. Um caso similiar ocorre em um ambiente estocástico, ou seja, um ambiente no qual há algum grau de aleatoriedade. Nesse caso, é realmente impossível prever com exatidão cada saída esperada. Chamamos esses tipos de erro de irredutíveis, uma vez que não podemos reduzi-los apenas mudando o modelo.

Para entender melhor a relação entre bias e variance é necessário notar que algoritmos com alta variance tendem a ser mais complexos visto que conseguem se adaptar muito bem a qualquer conjunto de dados. Em contrapartida, os algoritmos com alto bias são muito limitados por tudo aquilo que assumem sobre os dados, de forma que tem menor complexidade. Ou seja, ambos estão ligados ao nível de complexidade do modelo e são dependentes entre si. Em geral, modelo mais simples têm alto bias e baixa variance, enquanto modelos mais complexos têm baixo bias e alta variance.

Imagine que você tem um problema para resolver e não sabe muito bem como prosseguir. Como uma primeira tentativa, você decide utilizar um modelo de regressão linear. Ao observar os resultados obtidos, você percebe que estes estão consistentes, porém consistentemente errados. Ao se questionar o motivo do comportamento do seu modelo você nota que a regressão linear assume que os dados estão numa reta, e isto que não é verdadeiro no seu projeto. Nesse caso, o modelo que você escolheu possui alto bias: ele assumiu muito sobre os dados e acabou com um problema de underfitting ao tentar simplificar de mais. Dada a falha na sua tentativa anterior, você decidiu utilizar um polinômio de grau 10000 para construir seu modelo. Contudo você percebe que ainda assim seu modelo não está com um desempenho satisfatório: os resultados estão dispersos e, apesar de as vezes seu modelo acertar, ele não está servindo muito bem para o seu propósito. Isto aconteceu pois ao construir seu modelo extremamente complexo, você acabou com uma variance altíssima e de brinde ganhou um problema de overfitting.

Observe que para diminuir o bias, precisamos aumentar a variance, e vice-versa. É assim que funciona a ligação entre Bias e Variance, eles estão intimamente conectados, e o modelo ideal é aquele que melhor harmoniza essa relação e reduz o erro. Esse problema é denominado de bias-variance tradeoff.

Sendo assim, afim de se obter o melhor modelo é necessário que se encontre a melhor relação entre bias e variance de modo a minimizar o erro. Para tal, segue-se a seguinte relação matemática:

MSE = Bias² + Variance + Erro Irredutível,

onde MSE é o erro quadrático médio (veremos melhor o que isso é o MSE mais abaixo).

Holdout

Separar a sua base de dados em base de treino e base de teste é um ponto fundamental para validar seu modelo. A base de treino é aquela que, como o nome sugere, será utilizada para treinar seu modelo. Já a base de teste refere-se à amostra de dados que será utilizada para avaliar o desempenho do seu modelo no mundo real. Essa método de dividir o dataset é denominado holdout.

E por que não podemos treinar e testar na mesma base? Pense no que acontece em um modelo com overfitting. Esse modelo se ajustou ao ruído. Se ele for testado na mesma base em que foi treinado, ele vai funcionar corretamente, pois vai produzir o mesmo ruído que já existe na base. No entanto, se o testarmos em uma base diferente, vamos perceber que esse modelo se ajustou ao ruído e que ele não está performando bem. Assim, usamos holdout para medir a capacidade de generalização de um modelo (se ele funciona bem em dados que ainda não viu).

Validação

Também existe uma terceira base de dados. Para entender o seu propósito, vamos analisar um pouco melhor o que acontece durante o treinamento de um modelo. Suponha que o nosso objetivo seja prever a altura de uma pessoa com base em sua idade e que o modelo escolhido seja uma função polinomial de grau n. Esse modelo é parametrizado pelo grau n, assim como pelos coeficientes a₀, a₁, a₂, …, aₙ, com:

f(x) = a₀ + a₁⋅x + a₂⋅x² + ⋯ + aₙ⋅xⁿ.

Nesse caso, o grau do polinômio é decidido antes de treinarmos o modelo. Já os coeficientes são determinados pelo modelo durante o treinamento. Dizemos então que n é um hiperparâmetro, enquanto a₀, a₁, a₂, …, aₙ são parâmetros do modelo.

Surge então uma dúvida: como devemos escolher o valor de n? Será que podemos treinar o modelo para vários valores de n, testá-lo na base de teste e escolher o valor de n que resulta no menor erro? A resposta é não, porque isso seria uma forma de overfitting: poderíamos estar escolhendo o valor de n que melhor adapta o modelo ao ruído da base de teste.

A solução é criar uma terceira base: a base de validação. Essa amostra dos dados tem como objetivo avaliar o desempenho do modelo durante a fase de otimização dos hiperparâmetros. A base de teste fica então reservada para o teste final, quando o modelo já estiver otimizado.

Validação Cruzada

Uma outra maneira de verificar a performance e capacidade de generalização do seu modelo é o método de validação cruzada. A validação cruzada é semelhante ao holdout no sentido em que também treina e testa o modelo em partes diferentes do dataset. Porém, ao contrário do holdout, que utiliza apenas uma divisão entre base de teste e base de treino, a validação cruzada consiste na utilização de várias divisões do dataset.

A validação cruzada nos fornece uma indicação melhor do quão bem o modelo se sairá com novos dados, já que, por meio das várias divisões, esta acaba testando o modelo no dataset inteiro, em contraste com o holdout que, por possuir apenas uma divisão, acaba dependendo de como os dados foram divididos entre as bases de treino e teste.

Além disso, validação cruzada é o método mais indicado quando possuímos poucos dados, já que a divisão em apenas duas bases pode acabar não fornecendo bases de treino e de teste boas o suficiente.

K-fold

K-fold é provavelmente o mais conhecido e utilizado método de validação cruzada. Consiste em dividir o dataset em k grupos, selecionando um para ser o grupo de validação e os outros k-1 grupos para serem grupos de treino para o modelo. O modelo é treinado e avaliado. Depois dessa primeira iteração, um dos grupos que anteriormente era de treino torna-se o grupo de validação e o antigo grupo de validação passa a ser um grupo de teste. Esse processo se repete até que todos os k grupos tenham sido utilizados como grupo de validação. No final, a performance do modelo é calculada como a média de sua performance em cada iteração.

Por exemplo, em uma validação cruzada 5-fold, o dataset é dividido em 5 grupos e o modelo é treinado 5 vezes, para que cada grupo tenha a chance de ser um grupo de validação. Este processo pode ser observado na imagem abaixo.

Cada retângulo indica um grupo. O retângulo preenchido indica o grupo que está sendo utilizado como grupo de validação.

Avaliando seu modelo

Agora que temos os conceitos mais claros, é hora de avaliar seu modelo. Existem diversas métricas para determinar a qualidade de um modelo. Por exemplo, em um problema de classificação, um modelo bom é aquele que tem alta acurácia, ou seja, aquele que acerta mais:

Por outro lado, para avaliar um problema de regressão, uma métrica muito comum é a do erro quadrático médio. Sendo assim, um modelo bom é aquele que possui menor erro quadrático médio, calculado por:

em que n é o número de observações, yi é o valor real e ŷi é a predição do modelo. Algumas consequências da diferença (ŷ-y) ser elevada ao quadrado são:

  1. Se simplesmente somássemos as diferenças, elas poderiam se anular. Por exemplo, se um modelo desse algumas predições com diferença positiva (ŷ > y) e outras com diferença negativa (ŷ < y), essas diferenças poderiam se cancelar, dando um erro médio de 0. Com a diferença ao quadrado, isso não ocorre.
  2. Como a diferença é elevada ao quadrado, erros maiores impactam o erro quadrático médio desproporcionalmente mais do que erros pequenos.

Matriz de Confusão

É importante notar que dependendo da sua aplicação, nem todos os erros são iguais. Em modelos binários — em que só existe certo ou errado, 0 ou 1 — é preciso introduzir o conceito de falsos positivos e falsos negativos.

Imagine que devemos determinar se um paciente possui ou não determinada doença. Nesse caso, percebe-se que existem erros diferentes. É melhor falar a um paciente saudável que ele está doente ou falar a um paciente doente que ele está perfeitamente saudável?

Mas afinal o que são falsos positivos e falsos negativos? Bem, como o nome sugere, falsos positivos são casos em que o resultado correto é negativo entretanto o resultado obtido é positivo. Analogamente, falsos negativos são aqueles casos em que o resultado correto é positivo, contudo o programa indica um resultado negativo. A tabela a seguir é chamada matriz de confusão; ela mostra os quatro tipos de classificação do modelo.

Matriz de confusão

Dependendo da sua aplicação, pode ser, por exemplo, mais vantajoso diminuir ao máximo o número de falsos negativos. Imagine o exemplo dado anteriormente de determinar se um paciente possui uma doença ou não (em que o resultado do exame é positivo se o paciente está doente). Neste caso é melhor dizer a um paciente saudável que ele tem a doença (falso positivo) do que informar a um paciente doente que ele está saudável (falso negativo).

Acurácia, precisão e recall

Com base na matriz de confusão, podemos definir várias outras métricas, algumas das quais já mencionamos em um de nossos posts.

Como já vimos, o conceito de acurácia está ligado com a frequência com a qual o seu modelo está certo. Em termos de falsos positivos (FP), falsos negativos (FN) e dos outros termos, podemos escrever:

Já a precisão diz respeito à taxa de acerto do modelo nas observações classificadas como positivas. Para facilitar a visualização, voltando ao exemplo do paciente, precisão seria a resposta da pergunta: “dos pacientes com exame positivo realmente têm a doença?”. Para calculá-la, usamos a fórmula:

Por fim, recall (ou true positive rate) tem a ver com a capacidade do modelo de identificar observações positivas. Ainda no exemplo do paciente, recall seria a resposta da pergunta: “dos pacientes que têm a doença, quantos foram diagnosticados?”. É calculado por:

F1

Uma outra métrica para avaliar seu modelo é a F1. Tal métrica leva em conta tanto o recall (r) quanto a precisão (p) do seu modelo, fazendo uma média harmônica entre os dois. O melhor desempenho é aquele em que a média é 1 e o pior, em que o resultado é 0. Uma propriedade da média harmônica é que se qualquer um dos dois valores (recall ou precisão) for baixo, a média será baixa. Dessa forma, um modelo bom precisa ter recall e precisão bons.

Curva ROC e AUC

Outras métricas importantes para checar a performance do modelo são a curva ROC (Receiver Operating Characteristic) e a AUC (Area Under the ROC Curve). ROC é uma curva de probabilidade que mostra a performance de classificação. Os fatores que influenciam a curva ROC são TPR (True Positive Rate ou recall) e FPR (False Positive Rate):

Vários modelos de classificação binária podem gerar um número como saída. Podemos então falar de um threshold, que indica até que ponto podemos considerar que a predição é negativa e a partir de que ponto ela passa a ser considerada positiva. A curva ROC é obtida ao plotar-se um gráfico TPR × FPR, variando-se o threshold.

Já AUC representa a área abaixo da curva ROC e serve como uma medida de separabilidade. Se tomarmos o exemplo do paciente, quanto maior AUC, mais o nosso modelo vai classificar pacientes doentes como doentes e pacientes saudáveis como saudáveis.

O modelo ideal possui AUC igual a 1, ou seja consegue identificar todos os resultados corretamente. Um modelo ruim possui AUC próxima de 0, isso na verdade significa que os resultados previstos são opostos, isto é, se um paciente está doente o modelo dirá que está saudável e se está saudável dirá que ele está doente. Quando AUC está em 0.5 o modelo não possui a capacidade de separar as classes. Para ajuadr no entendimento da AUC, vamos analisar alguns casos específicos graficamente.

No caso ideal, o modelo é capaz de separar as classes perfeitamente, em momento nenhum se sobrepondo.

No modelo real, é normal que exista alguma sobreposição entre as duas classes, indicando casos de FN e FP. O valor de AUC=0.7 indica que há uma chance de 70% do nosso modelo distinguir as classes corretamente.

Com o AUC=0.5 há total sobreposição das duas classes, ou seja o modelo não é capaz de diferenciar entre elas.

Conclusão

Esses foram alguns conceitos básicos de predição, necessários para elaborar modelos capazes resolver qualquer os tipos mais diversos de problema! Nos próximos posts falaremos mais sobre diferentes modelos de predição e como utilizá-los, fique atento! Para saber mais sobre IA, siga também nossa página no Facebook.

--

--