CatBoost
CatBoost é uma biblioteca de boosting de gradiente de código aberto da Yandex que codifica recursos categóricos com estatísticas ordenadas do alvo e cria árvores simétricas.
CatBoost é uma biblioteca de código aberto de gradient boosting para árvores de decisão, desenvolvida pela Yandex e lançada em 2017. Seu nome vem de "boosting categórico": ela aceita colunas categóricas, como cidade, ID do produto ou tipo de dispositivo, como strings brutas e as converte internamente em números; assim, os dados tabulares não precisam de codificação one-hot ou por alvo manual antes do treinamento. Duas ideias do artigo apresentado na NeurIPS 2018, estatísticas de alvo ordenadas e boosting ordenado, impedem que o rótulo de cada linha de treinamento seja usado nos números empregados para ajustá-la, um vazamento que distorce tanto a codificação por alvo simples quanto o boosting padrão. O CatBoost treina em CPUs e GPUs, oferece interfaces para Python, R e linha de comando, e lida com classificação, regressão e ranqueamento.
Como o CatBoost codifica recursos categóricos#
A codificação one-hot cria uma coluna por categoria, o que se torna impraticável para um recurso com milhares de valores, como o ID de um comerciante ou usuário. A codificação por alvo substitui cada categoria pela média dos rótulos de suas linhas. Ela é compacta, mas vaza a resposta: o próprio rótulo de uma linha faz parte do número que a descreve, então o modelo aprende um atalho que falha com dados novos. Isso é uma forma de vazamento de dados que aparece como sobreajuste e é mais grave para categorias raras.
As estatísticas de alvo ordenadas do CatBoost resolvem esse problema com uma permutação aleatória das linhas de treinamento. A categoria de cada linha é codificada apenas com os rótulos das linhas que a precedem na permutação, com suavização em direção a um valor prévio, de modo que nenhuma linha veja seu próprio rótulo. O CatBoost repete o processo em várias permutações, aplica codificação one-hot a recursos com pouquíssimos valores distintos e cria combinações de recursos categóricos, como cidade combinada com tipo de dispositivo, de forma gulosa durante o treinamento.
No pacote CatBoost para Python, as colunas categóricas são passadas pelo nome por meio de cat_features. Este exemplo atribui a cada um dos 50 planos de assinatura uma taxa de cancelamento oculta e verifica se o modelo consegue recuperar as taxas a partir dos nomes brutos dos planos:
import numpy as np
import pandas as pd
from catboost import CatBoostClassifier
# Synthetic churn data: each of 50 plans has its own hidden churn rate
rng = np.random.default_rng(0)
rates = rng.uniform(0.05, 0.6, size=50)
plan_ids = rng.integers(0, 50, size=5000)
X = pd.DataFrame({"plan": [f"plan_{i}" for i in plan_ids], "tenure_months": rng.integers(1, 60, size=5000)})
y = rng.random(5000) < rates[plan_ids]
# Raw strings go in directly; CatBoost encodes them with ordered target statistics
model = CatBoostClassifier(iterations=200, depth=4, verbose=0, random_seed=0)
model.fit(X, y, cat_features=["plan"])
# Compare true and predicted churn for the safest and riskiest plans
lo, hi = rates.argmin(), rates.argmax()
probe = pd.DataFrame({"plan": [f"plan_{lo}", f"plan_{hi}"], "tenure_months": [30, 30]})
print("True churn rates: ", rates[[lo, hi]].round(2))
print("Predicted churn rates:", model.predict_proba(probe)[:, 1].round(2))O script exibe taxas reais de 0,05 e 0,60 e taxas previstas de 0,06 e 0,59. O modelo recuperou a taxa de cancelamento de cada plano a partir da coluna de strings original, com apenas cerca de 100 linhas de treinamento por plano.
Boosting ordenado e árvores simétricas#
O gradient boosting padrão calcula os alvos de cada nova árvore — os gradientes da perda — nas mesmas linhas usadas para ajustar as árvores anteriores, o que distorce esses gradientes. Os autores do CatBoost chamam esse efeito de deslocamento da previsão. O boosting ordenado aplica novamente o truque da permutação: o gradiente de cada linha vem de um modelo treinado apenas com linhas anteriores na permutação. É uma opção de treinamento, boosting_type="Ordered", que costuma melhorar a qualidade em conjuntos de dados pequenos, à custa da velocidade. O padrão na CPU é o esquema clássico "Plain", e o treinamento na GPU usa por padrão "Ordered" para conjuntos de dados com até 50.000 linhas, exceto no modo multiclasse.
Por padrão, o CatBoost cria árvores simétricas, ou oblivious, nas quais cada nó na mesma profundidade usa a mesma condição de divisão. Portanto, uma árvore de profundidade 6 — o padrão — consiste apenas em seis testes de sim ou não, cujas respostas formam um índice de 6 bits para acessar uma entre 64 folhas. Isso acelera a previsão e limita a complexidade de cada árvore, uma forma de regularização. O parâmetro grow_policy alterna para o crescimento por profundidade ou por folhas quando um conjunto de dados exige árvores menos restritas.
Aplicações no mundo real#
- Risco de crédito: instituições de crédito combinam dados categóricos de candidatos, como ocupação, região e finalidade do empréstimo, com valores numéricos de renda e dívidas para prever inadimplência, sem aplicar codificação one-hot a centenas de códigos de ocupação.
- Ranqueamento e recomendações: o CatBoost oferece funções de perda para ranqueamento, como YetiRank, usadas para ordenar resultados de busca ou produtos pela relevância prevista, com base em recursos de usuário, item e contexto em um sistema de recomendação.
- Avaliação de imóveis: um detector YOLO26 treinado sob medida pode contar comodidades, como piscinas ou painéis solares, em fotos de anúncios; essas contagens entram em um modelo de preços do CatBoost como colunas numéricas, junto com colunas categóricas, como bairro e tipo de imóvel.
CatBoost vs. XGBoost e LightGBM#
As três bibliotecas criam um ensemble de árvores sequencialmente, cada uma corrigindo os erros das árvores anteriores, o que as diferencia de uma floresta aleatória e de suas árvores treinadas de forma independente.
- XGBoost: por padrão, cria árvores nível por nível e adiciona regularização L1 e L2 ao objetivo. O suporte nativo a categorias chegou em versões posteriores, e muitos pipelines ainda codificam as categorias antes do treinamento.
- LightGBM: cria árvores folha por folha, dividindo a folha que mais reduz a perda, e agrupa os recursos em histogramas, o que proporciona velocidade em grandes conjuntos de dados. Também aceita nativamente colunas categóricas codificadas por inteiros.
- CatBoost: cria árvores simétricas, codifica categorias com estatísticas de alvo ordenadas e oferece bons resultados sem ajuste de hiperparâmetros. Suas configurações padrão são 1.000 árvores de profundidade 6, com a taxa de aprendizado escolhida automaticamente com base no número de iterações para os objetivos de perda logarítmica, multiclasse e RMSE.










