Pular para o conteúdo principal

Regressão polinomial: de linhas retas a curvas

Explore como a regressão polinomial ajuda a modelar relações não lineares e a melhorar a precisão preditiva em dados do mundo real.
Atualizado 4 de mai. de 2026  · 12 min lido

Quando seus dados fazem curvas, não faz sentido usar uma linha reta para estimar novos pontos. Se você insistir nisso, vai acabar com um modelo que não capta o padrão, tem resíduos altos e faz previsões ruins. Dados do mundo real raramente se comportam de forma linear, seja ao modelar como a dosagem de um fármaco afeta a resposta, como a temperatura impacta a tensão de um material ou como os preços de ativos variam ao longo do tempo.

A regressão polinomial resolve isso ao estender a regressão linear para ajustar curvas em vez de linhas retas. Basta adicionar alguns termos de grau mais alto - , - e seu modelo consegue acompanhar o formato real dos seus dados.

Neste artigo, vou explicar o que é regressão polinomial, a matemática por trás dela, como implementar em Python e como evitar a armadilha em que muita gente cai: o overfitting.

Se você é novo no tema de machine learning, leia antes nosso tutorial Essentials of Linear Regression in Python primeiro.

O que é regressão polinomial?

A regressão polinomial é o algoritmo indicado quando uma linha reta não descreve seus dados.

A regressão linear modela a relação entre variáveis como uma linha reta. Funciona quando a relação é de fato linear — mas, na prática, a maioria dos dados não é. Pense em como a distância de frenagem de um carro muda com a velocidade, ou como a taxa de crescimento de uma planta responde ao fertilizante. Essas relações fazem curvas. Uma linha reta não vai se ajustar bem, por mais que você tente.

A regressão polinomial estende a regressão linear adicionando termos de grau mais alto à equação. Em vez de ajustar y = b0 + b1x, você ajusta algo como y = b0 + b1x + b2x² + b3x³. O grau do polinômio — esse n em "enésimo grau" — controla quantas curvas a linha pode fazer.

Resumindo, aqui vai a diferença essencial entre as duas:

  • Regressão linear: ajusta uma linha reta. Um coeficiente por variável e um único grau de liberdade na curva.

  • Regressão polinomial: ajusta uma curva. Cada termo adicional (, , ...) dá mais flexibilidade para o modelo seguir o formato dos dados.

Linear versus polynomial regression

Regressão linear versus polinomial

Nos bastidores, a regressão polinomial ainda é um modelo linear. "Linear" aqui se refere a como o modelo trata seus coeficientes, não ao formato da curva. Você adiciona novas features (, ) e ajusta uma equação linear sobre elas.

Então, quando usar de fato?

Opte por regressão polinomial quando o gráfico de resíduos de um modelo linear mostrar um padrão — sinal de que a relação não é linear. Ela também é uma ótima escolha quando seu conhecimento de domínio sugere uma relação curva, como em física, biologia ou economia.

A contrapartida é que polinômios de alto grau podem ficar instáveis. Um polinômio de grau 2 ou 3 resolve a maioria das curvas reais, mas graus mais altos tendem a ajustar o ruído em vez do sinal.

Por que usar regressão polinomial?

A maioria das relações no mundo real não é linear.

Uma linha reta até pode chegar perto, mas "quase" não basta quando você está prevendo algo sensível. Se a relação nos dados faz uma curva, um modelo linear vai errar sistematicamente essa curvatura.

A regressão polinomial faz melhor ao permitir que o modelo curve. Em vez de forçar uma linha reta nos seus dados, você ajusta uma curva que acompanha o formato da relação.

Veja algumas áreas de negócio em que isso faz diferença de verdade:

  • Biologia e medicina: relações dose–resposta raramente são lineares. Uma dose baixa pode ter pouco efeito, uma dose média funciona bem e uma dose alta causa efeitos colaterais. Essa curva em S pede um modelo polinomial para ser capturada
  • Engenharia: relações tensão–deformação em materiais, arrasto aerodinâmico e dilatação térmica seguem padrões não lineares que a regressão polinomial modela bem
  • Finanças: retornos de ativos, precificação de opções e curvas de demanda costumam mostrar efeitos crescentes ou decrescentes que uma linha reta não representa
  • Pipelines de machine learning: features polinomiais são um jeito rápido de adicionar não linearidade a um modelo linear sem migrar para um algoritmo mais complexo

O ponto em comum em todos esses casos é o mesmo: a relação entre entrada e saída muda conforme o valor de x. A regressão linear assume que essa mudança é constante. A polinomial não.

Dito isso, regressão polinomial não é bala de prata.

Ela funciona melhor quando seu conhecimento de domínio sugere uma relação curva, ou quando o gráfico de resíduos claramente mostra um padrão que uma linha reta não resolve. Use com um problema específico em mente — não apenas porque o do seu modelo linear não está alto o suficiente.

Entendendo a matemática por trás da regressão polinomial

Conhecer o básico da matemática por trás da regressão polinomial ajuda a entender melhor a técnica.

Termos polinomiais

Na regressão linear, seu modelo é assim:

Linear regression formula

Fórmula da regressão linear

É uma variável de entrada, um coeficiente, uma linha reta. A regressão polinomial estende isso adicionando termos de grau mais alto:

Polynomial regression formula

Fórmula da regressão polinomial

Cada novo termo — , e assim por diante — dá ao modelo mais uma "curva" para trabalhar. Um polinômio de grau 2 consegue ajustar uma única curvatura. Um de grau 3 pode ajustar uma curva que muda de direção uma vez. O grau n controla quão flexível é o modelo.

O algoritmo subjacente continua o mesmo. Você só está adicionando novas features. é tratada como uma nova variável de entrada, assim como x. O modelo ainda ajusta uma equação linear — só que sobre features transformadas.

Estimativa por mínimos quadrados

Ajustar um modelo de regressão polinomial funciona como na regressão linear — usando estimativa por mínimos quadrados.

A ideia é encontrar os coeficientes que minimizam a soma dos quadrados dos resíduos:

SSR formula

Fórmula da SSR

Cada diferença ao quadrado é um resíduo — o gap entre o que o modelo prevê e o que foi observado. Elevar ao quadrado impede que erros negativos e positivos se anulem, além de punir mais os erros grandes do que os pequenos.

Na prática, sua biblioteca cuida disso para você. Mas saber que mínimos quadrados é o objetivo ajuda a entender por que outliers prejudicam tanto modelos polinomiais — um único resíduo grande é elevado ao quadrado e puxa os coeficientes na sua direção.

Interpretando coeficientes

Na regressão linear, b1 tem uma interpretação simples: a cada aumento de uma unidade em x, y muda em b1.

Na regressão polinomial, é um pouco mais complexo. Quando o modelo inclui b_1x + b_2x^2, o efeito de x sobre y depende do valor atual de x — não dá para ler b2 isoladamente e tirar conclusões. A inclinação da curva muda o tempo todo, o que você vê ao derivar em relação a x:

Derivative wrt x

Derivada em relação a x

A própria inclinação é uma função de x. Isso significa que o impacto de uma variação de uma unidade em x é diferente em cada ponto da curva.

Por isso você não deve tentar interpretar coeficientes individuais em um modelo polinomial. Em vez disso, olhe para a curva como um todo. Plote suas previsões contra seus dados.

Aplicações da regressão polinomial em data science

A regressão polinomial aparece em várias áreas porque relações curvas estão por toda parte em dados reais.

Finanças

Dados financeiros raramente andam em linha reta.

Preços de ativos, crescimento de receita e curvas de demanda tendem a acelerar, desacelerar ou inverter direção conforme as condições do mercado. Um modelo linear assume taxa de mudança constante, o que quase nunca é verdade. A regressão polinomial permite modelar essas mudanças — por exemplo, como a demanda do consumidor cai devagar no começo e depois mais rápido quando o preço passa de certo ponto.

Ela também é útil para analisar tendências no tempo. Ao ajustar uma curva a preços históricos ou modelar como uma métrica cresce em diferentes fases do ciclo de negócios, um polinômio de grau 2 ou 3 costuma estimar muito melhor o formato do que uma linha reta.

Engenharia

Processos físicos são ótimos exemplos de relações não lineares.

Tensão e deformação em materiais, dinâmica de fluidos, dilatação térmica e arrasto aerodinâmico seguem curvas, não linhas. Muitas das equações da física são naturalmente polinomiais. A regressão polinomial dá um jeito orientado por dados de ajustar essas curvas quando você tem medições, mas não uma equação fechada limpa.

Um bom exemplo é a força de arrasto, que aumenta com o quadrado da velocidade. Um modelo linear subestimará o arrasto em altas velocidades, enquanto um polinômio de grau 2 ajustará corretamente a relação.

Machine learning

Em machine learning, a regressão polinomial é usada com frequência como técnica de engenharia de features, não como modelo isolado.

Ao adicionar termos polinomiais — , , termos de interação — ao seu conjunto de features, você dá a um modelo linear a capacidade de ajustar padrões não lineares sem trocar para um algoritmo mais complexo. Esse é um primeiro passo comum quando seu modelo linear está subajustando e você quer ganhar flexibilidade antes de partir para algo como árvore de decisão ou rede neural.

Também é útil como modelo de baseline.

Antes de treinar algo mais complexo, ajustar uma regressão polinomial mostra quanto da variância uma curva simples já explica. Se um polinômio de grau 3 já leva você longe, talvez não precise de nada mais sofisticado.

Como escolher o grau certo para a regressão polinomial

Escolher o grau do polinômio é uma das decisões mais importantes. Se errar para qualquer lado, você acaba com um modelo menos preciso.

Felizmente, poucas linhas de código em Python dão conta do recado.

Overfitting vs. underfitting

Underfitting acontece quando o grau é baixo demais. Um polinômio de grau 1 em dados curvos não capta o padrão — viés alto, previsões ruins e desempenho fraco tanto no treino quanto em novos dados.

Overfitting é o problema oposto — e mais traiçoeiro porque parece bom no começo. Um polinômio de alto grau consegue praticamente passar por todos os pontos do conjunto de treino com erro quase zero. Mas o modelo está só memorizando o ruído. Em novos dados, ele desmorona.

Você vê isso comparando o erro de treino e de teste para diferentes graus:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

np.random.seed(42)

# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)

for deg in [1, 2, 12]:
    poly = PolynomialFeatures(deg)
    model = LinearRegression()
    model.fit(poly.fit_transform(x_train), y_train)

    train_err = mean_squared_error(y_train, model.predict(poly.transform(x_train)))
    test_err  = mean_squared_error(y_test,  model.predict(poly.transform(x_test)))

    print(f"Degree {deg:>2} | Train MSE: {train_err:.4f} | Test MSE: {test_err:.4f}")

MSE on different degrees

MSE em diferentes graus

Ou, visualmente:

Data fit with different polynomial degrees

Ajuste dos dados com diferentes graus polinomiais

Grau 1 mostra erro alto nos dois conjuntos — é underfitting. Grau 2 está equilibrado. Grau 12 tem erro de treino menor, mas erro de teste bem maior — é overfitting.

Validação cruzada

O jeito certo de encontrar o melhor grau é a validação cruzada — especificamente, k-fold cross-validation.

A ideia é dividir os dados em k subconjuntos, treinar em k-1 e testar no que ficou de fora, repetindo até que cada parte tenha sido o conjunto de teste uma vez. Por fim, você faz a média do erro em todas as dobras, repete para cada grau candidato e escolhe aquele com o menor erro médio de teste.

Implementar é mais simples do que explicar:

import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt

np.random.seed(42)

# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)

# Test degrees 1 through 10
degrees = range(1, 11)
mean_errors = []

for deg in degrees:
    model = make_pipeline(PolynomialFeatures(deg), LinearRegression())
    scores = cross_val_score(model, x, y, cv=5, scoring="neg_mean_squared_error")
    mean_errors.append(-scores.mean())
    print(f"Degree {deg:>2} | Mean error: {-scores.mean():.4f}")

best_degree = np.argmin(mean_errors) + 1

Degree error comparison

Comparação de erro por grau

Ou, em gráfico:

Cross-validation error comparison

Comparação de erro na validação cruzada

O erro de CV cai conforme você adiciona termos polinomiais úteis e depois volta a subir quando o modelo começa a fazer overfitting.

Quando dois graus tiverem erro de CV parecido, escolha o menor. Um modelo mais simples que performa igual é sempre a melhor opção.

Pontos de atenção e limitações

Há algumas formas de a regressão polinomial levar você a conclusões erradas. Vamos a elas.

Sensibilidade a outliers

Outliers afetam mais a regressão polinomial do que a linear.

Mínimos quadrados eleva cada resíduo ao quadrado antes de somar. Um único ponto distante da tendência contribui com um erro desproporcionalmente grande, e o modelo vai entortar a curva para reduzi-lo — mesmo que distorça o ajuste no resto.

Esse efeito piora conforme o grau aumenta. Um polinômio de alto grau tem flexibilidade suficiente para "perseguir" um outlier, puxando a curva para longe do grosso dos seus dados para ajustar um ponto ruim.

Uma forma de contornar é limpar os dados antes de ajustar. Plote os dados, identifique outliers e decida se representam sinal real ou ruído. Se forem ruído — erros de medição, digitação, registros corrompidos —, remova-os. Se forem reais, considere um método mais robusto a outliers, como RANSAC ou regressão de Huber.

Overfitting

Cada termo polinomial extra dá mais flexibilidade ao modelo. Em algum ponto, isso deixa de ajudar e o modelo passa a ajustar o ruído aleatório do treino em vez do padrão verdadeiro. O resultado é uma curva que vai bem no treino e falha em dados novos.

O complicado é que o overfitting é invisível se você olha só para o erro de treino. Um polinômio de grau 10 quase sempre terá MSE de treino menor que um de grau 2. Isso não significa que é um modelo melhor.

Aqui vai como abordar o problema:

  • Comece baixo: teste grau 2 ou 3 antes de subir. A maioria das curvas reais não precisa de mais do que isso
  • Sempre avalie em dados separados: erro de treino sozinho não diz nada sobre generalização.
  • Validação cruzada: use para encontrar o grau a partir do qual o erro de teste para de melhorar.
  • Observe a curva: se seu polinômio faz "loucuras" fora do intervalo dos dados de treino, é sinal de overfitting.

A regressão polinomial funciona melhor quando há um bom motivo para esperar uma relação curva — e quando você consegue manter o grau baixo.

Alternativas à regressão polinomial

Regressão polinomial nem sempre é a melhor ferramenta — algumas alternativas abaixo podem se encaixar melhor, sem trocadilhos.

Splines

Splines resolvem o problema da instabilidade global.

Ao ajustar um polinômio de grau 10, cada coeficiente é influenciado por todos os pontos. Uma mudança em uma região afeta a curva inteira. Splines evitam isso dividindo os dados em segmentos e ajustando um polinômio de baixo grau em cada um. Os segmentos se unem em pontos chamados nós (knots), com restrições que mantêm a curva suave nas junções.

O resultado é uma curva flexível onde precisa e estável no restante.

Em Python, scipy e scikit-learn têm implementações sólidas de splines:

from scipy.interpolate import UnivariateSpline

spline = UnivariateSpline(x, y, k=3)
y_pred = spline(x_new)

Spline versus a high-degree polynomial

Spline versus polinômio de alto grau

Reforçando: use splines quando seus dados se comportam de forma diferente em regiões distintas, ou quando um único polinômio não consegue capturar o formato sem exigir grau muito alto.

Support Vector Regression

Support Vector Regression (SVR) segue outro caminho.

Em vez de ajustar uma curva que minimiza o erro quadrático em todos os pontos, ele busca uma função que fique dentro de uma margem de erro definida para o máximo de pontos possível, ignorando os que caem dentro dessa margem. Isso o torna menos sensível a outliers do que a regressão polinomial.

A conexão com a regressão polinomial vem pelo kernel trick. SVR com kernel polinomial consegue ajustar relações não lineares semelhantes às da regressão polinomial — mas com melhor generalização e mais controle sobre o ajuste via parâmetros de regularização.

from sklearn.svm import SVR

model = SVR(kernel="poly", degree=3, C=1.0, epsilon=0.1)
model.fit(x_train, y_train)

SVR versus a high-degree polynomial

SVR versus polinômio de alto grau

SVR é uma boa opção quando há outliers que você não pode remover, quando precisa de mais controle sobre o trade-off viés–variância ou quando a regressão polinomial continua fazendo overfitting mesmo com validação cruzada.

Conclusão

Neste artigo, você viu como a técnica estende a regressão linear para ajustar curvas, como a estimativa por mínimos quadrados encontra os melhores coeficientes e por que interpretar coeficientes individualmente não diz muita coisa.

O grau escolhido importa mais do que qualquer outra coisa. Muito baixo leva a underfitting, muito alto a overfitting. A validação cruzada dá um jeito objetivo de achar o ponto ideal. E, se a regressão polinomial não for a melhor escolha, splines e SVR são alternativas sólidas que valem a pena conhecer.

A melhor forma de criar intuição é aplicar nos seus próprios dados. Escolha um dataset em que você suspeita de relação não linear, ajuste um modelo linear primeiro, plote os resíduos e veja o que a regressão polinomial faz diferente. Leia nosso guia Non-Linear Models and Insights Using R para ver esse pipeline na prática.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Cientista de dados sênior baseado na Croácia. Principal redator técnico com mais de 700 artigos publicados, gerando mais de 10 milhões de visualizações. Autor do livro Automação do aprendizado de máquina com TPOT.

Perguntas frequentes sobre regressão polinomial

O que é regressão polinomial e quando devo usá-la?

Regressão polinomial é uma extensão da regressão linear que ajusta uma linha curva aos seus dados em vez de uma reta. Você usa quando a relação entre variáveis de entrada e saída não é linear — por exemplo, quando o gráfico de resíduos de um modelo linear mostra um padrão. É um ótimo primeiro passo antes de partir para modelos mais complexos, como árvores de decisão ou redes neurais.

Qual a diferença entre regressão polinomial e regressão linear?

A regressão linear ajusta uma linha reta ao modelar a relação como y = b0 + b1x. A regressão polinomial adiciona termos de grau mais alto, como e , dando flexibilidade para seguir curvas nos dados. Ambas usam mínimos quadrados — a regressão polinomial só trata esses termos extras como features adicionais.

Quais são os maiores riscos ao usar regressão polinomial?

Os dois maiores riscos são overfitting e sensibilidade a outliers. Um polinômio de alto grau pode memorizar o ruído do treino e ir mal em novos dados. Outliers são perigosos porque mínimos quadrados eleva cada resíduo ao quadrado, então um ponto ruim pode puxar a curva para longe do restante dos seus dados.

Como escolher o grau certo para meu modelo de regressão polinomial?

Comece com grau 2 ou 3 — a maioria das relações curvas reais não precisa de mais do que isso. A partir daí, use k-fold cross-validation para comparar o erro médio de teste entre os graus candidatos e escolha aquele em que o erro para de melhorar. Se dois graus derem resultados parecidos, fique com o menor.

Quando devo usar splines ou SVR em vez de regressão polinomial?

Use splines quando seus dados se comportam de forma diferente em regiões distintas, ou quando um único polinômio gera curvas instáveis nas bordas do intervalo dos dados. E use SVR com kernel polinomial quando outliers são inevitáveis e você precisa de um modelo que não se "entorte" para acomodá-los. As duas alternativas dão mais controle sobre o ajuste, com alguma perda de interpretabilidade.

Tópicos

Aprenda com a DataCamp

Curso

Modelagem de Regressão Bayesiana com rstanarm

4 h
7K
Aprenda a usar métodos de estimativa bayesiana para fazer melhores inferências sobre modelos de regressão linear.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
multiple linear regression

Tutorial

Regressão linear múltipla no R: Tutorial com exemplos

Uma visão geral completa para entender as regressões lineares múltiplas no R por meio de exemplos.
Zoumana Keita 's photo

Zoumana Keita

Tutorial

Tutorial de regressão linear no R

Neste tutorial, você aprenderá os fundamentos de um modelo estatístico muito popular: a regressão linear.

Eladio Montero Porras

Tutorial

Introdução a modelos não lineares e percepções usando o R

Descubra as complexidades dos modelos não lineares em comparação com os modelos lineares. Saiba mais sobre suas aplicações, limitações e como ajustá-las usando conjuntos de dados do mundo real.

Somil Asthana

Tutorial

Tutorial de regressão logística no R

Descubra tudo sobre a regressão logística: como ela difere da regressão linear, como ajustar e avaliar esses modelos no R com a função glm() e muito mais!
Vidhi Chugh's photo

Vidhi Chugh

Tutorial

GLM em R: Modelo Linear Generalizado

Saiba mais sobre os modelos lineares generalizados (GLM) e como eles diferem dos modelos lineares.
DataCamp Team's photo

DataCamp Team

Tutorial

Tutorial de regressão Lasso e Ridge em Python

Saiba mais sobre as técnicas de regressão lasso e ridge. Compare e analise os métodos em detalhes.
DataCamp Team's photo

DataCamp Team

Ver maisVer mais