Curso
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 - x², x³ - 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 (
x²,x³, ...) dá mais flexibilidade para o modelo seguir o formato dos dados.

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 (x², x³) 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 R² 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:

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:

Fórmula da regressão polinomial
Cada novo termo — x², x³ 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. x² é 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:

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:

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 — x², x³, 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 em diferentes graus
Ou, visualmente:

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

Comparação de erro por grau
Ou, em gráfico:

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 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 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.
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 x² e x³, 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.


