Leonardo Castro

Além do Credit Score: Gradient Boosting, Transformers e Modelos Sequenciais na Previsão de Risco de Crédito

Da engenharia de atributos temporais à modelagem de sobrevivência: como comparar arquiteturas, evitar leakage e construir probabilidades de default confiáveis.

Por Leonardo CastroPublicado em 20 min de leitura
  • Credit Scoring
  • Risco de Crédito
  • Gradient Boosting
  • Transformers
  • Survival Analysis

O credit scoring tradicional olha para um retrato: dados cadastrais, renda, endividamento, informações de bureau e um histórico consolidado em poucas variáveis. Esse retrato funciona e continua sendo a base de muitas decisões de crédito. Mas a digitalização dos meios de pagamento trouxe outra camada de informação: a trajetória do comportamento financeiro — como a utilização do limite evolui mês a mês, como os pagamentos se distribuem, como a renda entra e sai da conta.

A tentação é concluir que modelos mais sofisticados, capazes de “ler” essas trajetórias, vão automaticamente prever melhor. A pergunta certa é outra: qual abordagem entrega melhor discriminação, calibração, estabilidade temporal, explicabilidade e valor econômico para um problema e um conjunto de dados específicos? Este artigo percorre modelos tabulares, deep learning tabular, modelos sequenciais, arquiteturas híbridas e survival analysis, com foco em como compará-los de forma justa.

O problema: o que exatamente estamos prevendo

Antes de escolher algoritmo, é preciso definir o alvo com precisão. Em risco de crédito, o alvo mais comum é a PD (Probability of Default): a probabilidade de um cliente ou operação entrar em default dentro de um horizonte definido.

Quatro definições precisam estar escritas antes de qualquer modelagem:

  • Data de observação (ou de decisão): o instante em que o modelo é aplicado — a concessão do crédito ou a data de um ciclo de monitoramento.
  • Janela de observação: o período anterior à data de decisão de onde vêm os atributos.
  • Horizonte de previsão: o período posterior à data de decisão em que o evento é observado — por exemplo, 12 meses.
  • Evento de default: a regra objetiva que define o rótulo, como um atraso acima de um limiar de dias dentro do horizonte. A regra exata depende da política da instituição e deve ser documentada.
flowchart LR
A["Janela de observação<br/>histórico usado nos atributos"] --> B(("Data de<br/>decisão"))
B --> C["Janela de desempenho<br/>horizonte de 12 meses"]
C --> D{"Default no<br/>horizonte?"}
Linha do tempo de um problema de PD com horizonte de 12 meses.

Diagrama em linha do tempo: a janela de observação, com o histórico do cliente, termina na data de decisão. A partir dela começa a janela de desempenho de 12 meses, ao fim da qual se verifica se houve default. Atributos só podem vir da janela de observação.

Também é útil separar dois usos que costumam ser misturados:

Application scoringBehavioral scoring
MomentoConcessão do créditoMonitoramento da carteira
PúblicoProponentes, muitos sem histórico internoClientes ativos
Dados típicosCadastro, renda, bureauUso do produto, pagamentos, transações
DecisãoAprovar, recusar, definir limite e preçoAjustar limite, cobrança preventiva, provisão

Os dados transacionais e sequenciais costumam ser muito mais ricos no behavioral scoring, porque o cliente já tem histórico na instituição. No application scoring, a trajetória disponível pode ser curta ou inexistente.

Modelos tabulares

No formato tabular, cada linha representa um cliente ou uma operação em uma data de referência, e cada coluna é um atributo calculado até aquela data. Exemplos: renda, comprometimento de renda, utilização do limite, tempo de relacionamento, atrasos acumulados e médias móveis de transações.

ClienteRenda mensalUtilização do limite (90d)Atrasos (180d)Default em 12m
AR$ 8.00035%0Não
BR$ 3.20092%3Sim
CR$ 6.00048%1Não

Os algoritmos

  • Regressão logística: o baseline interpretável. Cada coeficiente tem leitura direta, e o modelo é bem compreendido por áreas de risco, auditoria e reguladores. Costuma exigir tratamento cuidadoso de não linearidades (por exemplo, com binning e WoE).
  • Random Forest: ensemble de árvores treinadas em amostras e subconjuntos de atributos. Robusto e pouco sensível a hiperparâmetros, mas tende a produzir probabilidades menos calibradas.
  • Gradient boosting (XGBoost, LightGBM, CatBoost): a escolha mais comum em dados tabulares de crédito. Constrói árvores sequencialmente, cada uma corrigindo os erros das anteriores.

A ideia do gradient boosting cabe em uma fórmula: o modelo é uma soma de árvores, e cada nova árvore é ajustada ao gradiente negativo da função de perda em relação à predição atual.

FM(x)=F0(x)+∑m=1Mν hm(x),p^(x)=σ(FM(x))F_M(x) = F_0(x) + \sum_{m=1}^{M} \nu\, h_m(x), \qquad \hat{p}(x) = \sigma\big(F_M(x)\big)
FM(x)F_M(x)
Score (log-odds) após M árvores
hmh_m
Árvore ajustada ao gradiente negativo da perda na iteração m
ν\nu
Taxa de aprendizado (shrinkage), que controla o passo de cada árvore
σ\sigma
Função sigmoide, que converte o score em probabilidade
Gradient boosting com perda logística.

Na prática, alguns detalhes pesam tanto quanto o algoritmo:

  • Variáveis categóricas: o CatBoost tem tratamento nativo baseado em estatísticas ordenadas do alvo; o LightGBM também aceita categóricas diretamente. Codificar categorias com o alvo manualmente exige cuidado para não vazar o rótulo.
  • Valores ausentes: as três bibliotecas aprendem uma direção padrão para missing em cada divisão. Ainda assim, vale entender por que o dado falta — em crédito, a ausência costuma ser informativa.
  • Regularização: profundidade máxima, número mínimo de amostras por folha, subamostragem de linhas e colunas e penalidades L1/L2 controlam o sobreajuste.
  • Restrições monotônicas: quando o negócio exige que o risco nunca diminua com o aumento de uma variável (como o número de atrasos), as bibliotecas permitem impor essa monotonicidade. Isso melhora a coerência e a explicabilidade do modelo.
  • Tuning: busca de hiperparâmetros com validação temporal, nunca com divisão aleatória quando o modelo será usado no futuro.

Feature engineering temporal

É aqui que o modelo tabular fica competitivo. Mesmo sem um modelo sequencial, dá para resumir a trajetória do cliente em atributos:

  • Agregações por janela: contagem, soma, média, desvio e máximo em 7, 30, 90 e 180 dias.
  • Recência: dias desde o último atraso, o último pagamento ou a última transação.
  • Frequência: número de eventos de cada tipo por janela.
  • Tendência: inclinação da utilização do limite ou do saldo nos últimos meses.
  • Volatilidade: variação da renda creditada ou dos gastos.
  • Razões e deltas: utilização de 30 dias dividida pela de 180 dias, variação do saldo médio entre janelas.

Um esboço de como calcular agregações respeitando a data de decisão:

features/point_in_time.py
import pandas as pd
def point_in_time_features(tx: pd.DataFrame, ref: pd.DataFrame, windows=(7, 30, 90, 180)) -> pd.DataFrame:
"""tx: transações (client_id, ts, amount); ref: (client_id, decision_date).
Usa apenas eventos estritamente anteriores à data de decisão."""
df = ref.merge(tx, on="client_id", how="left")
df = df[df["ts"] < df["decision_date"]]
age_days = (df["decision_date"] - df["ts"]).dt.days
keys = [df["client_id"], df["decision_date"]]
features = []
for w in windows:
in_window = df[age_days <= w]
agg = in_window.groupby(["client_id", "decision_date"])["amount"].agg(["count", "sum", "mean", "std"])
agg.columns = [f"tx_{stat}_{w}d" for stat in agg.columns]
features.append(agg)
recency = age_days.groupby(keys).min().rename("days_since_last_tx").to_frame()
out = ref.set_index(["client_id", "decision_date"]).join(features + [recency])
return out.reset_index()

Clientes sem eventos na janela ficam com valores ausentes; contagens podem ser preenchidas com zero, enquanto médias e desvios devem permanecer ausentes para o modelo tratar.

Deep learning tabular

Redes neurais para dados tabulares evoluíram bastante. As famílias mais citadas:

  • MLP e ResNet tabular: redes densas, com ou sem conexões residuais. Simples e frequentemente subestimadas como baseline.
  • FT-Transformer: transforma cada atributo em um token (numérico ou categórico, via embeddings) e aplica atenção entre atributos. Foi proposto por Gorishniy et al. (2021), junto com um baseline ResNet.
  • TabNet: usa atenção sequencial para selecionar atributos a cada passo de decisão.
  • TabPFN: um foundation model tabular pré-treinado em dados sintéticos, que faz predições em uma única passada, sem treino tradicional no dataset-alvo. O artigo da Nature descreve resultados para datasets de até 10.000 amostras (Hollmann et al., 2025), o que limita seu uso direto em carteiras grandes.

Os pontos fortes dessas redes são embeddings ricos para categorias de alta cardinalidade, atenção entre atributos e a possibilidade de integrar a parte tabular a encoders sequenciais em um único modelo treinado ponta a ponta. Os custos aparecem em tempo de treino, sensibilidade a hiperparâmetros, necessidade de normalização e, sobretudo, em datasets pequenos ou médios.

A literatura não sustenta a ideia de que Transformers sempre vencem árvores. Grinsztajn, Oyallon & Varoquaux (2022) mostram que modelos baseados em árvores continuam sendo o estado da arte em datasets tabulares de tamanho médio e atribuem isso a vieses indutivos: redes neurais lidam mal com atributos não informativos e têm dificuldade em aprender funções irregulares. O próprio trabalho de Gorishniy et al. conclui que não há uma abordagem universalmente superior. Em crédito especificamente, Schmitt (2022) encontra o gradient boosting em geral à frente do deep learning nos datasets avaliados, com treino mais rápido, ressaltando que o melhor modelo depende dos dados.

Árvores (gradient boosting)

  • Fortes em dados heterogêneos e de tamanho médio
  • Lidam bem com missing, escalas diferentes e atributos irrelevantes
  • Treino rápido e tuning relativamente estável
  • Restrições monotônicas e explicações por SHAP maduras

Redes tabulares

  • Mais sensíveis a hiperparâmetros e à normalização
  • Custo maior de treino e inferência
  • Ganho incerto em datasets pequenos e médios
  • Vantagem real quando há embeddings, multimodalidade ou treino conjunto com sequências

Modelos sequenciais

No formato sequencial, cada cliente tem uma sequência ordenada de eventos ou snapshots: pagamentos, atrasos, transações, utilização do limite, saldos e entradas de renda. Em vez de resumir essa sequência em agregados escolhidos à mão, o modelo aprende a representação diretamente.

As arquiteturas mais usadas:

  • LSTM e GRU: redes recorrentes com mecanismos de portas, que mantêm um estado ao longo da sequência. A GRU é mais simples e costuma treinar mais rápido.
  • TCN (Temporal Convolutional Networks): convoluções causais e dilatadas, que capturam padrões locais e de longo alcance com paralelismo no treino.
  • Transformers temporais: atenção entre os eventos da sequência, com codificação de posição ou de tempo. Trabalhos recentes também combinam LSTM com mecanismos de atenção adaptados ao risco de crédito (Wang & Bellotti, 2026).

Dados financeiros reais trazem dificuldades que não aparecem em tutoriais:

  • Sequências irregulares: eventos não chegam em intervalos fixos. Incluir o intervalo entre eventos (Δt) como atributo ou usar codificação temporal contínua ajuda o modelo a distinguir “três pagamentos em uma semana” de “três pagamentos em três meses”.
  • Comprimentos diferentes: padding e máscaras garantem que posições vazias não influenciem o resultado.
  • Truncamento: clientes antigos têm históricos longos; é preciso decidir quantos eventos ou meses manter.
  • Missingness: a ausência de eventos em um período também é informação e pode ser codificada explicitamente.
  • Janela de observação: a sequência termina na data de decisão, pelas mesmas regras point-in-time dos atributos tabulares.

Um exemplo simples de trajetória: a utilização do limite de um cliente ao longo de seis meses.

xychart-beta
x-axis [jan, fev, mar, abr, mai, jun]
y-axis "Utilização do limite (%)" 0 --> 100
line [25, 35, 48, 67, 84, 96]
Utilização do limite de um cliente hipotético (dados sintéticos).

Gráfico de linha com dados sintéticos: a utilização do limite de um cliente sobe de 25% em janeiro para 35% em fevereiro, 48% em março, 67% em abril, 84% em maio e 96% em junho.

Formalmente, a diferença entre as duas abordagens está no que a função recebe. No modelo tabular, a PD estimada para o cliente ii depende de um vetor de atributos; no sequencial, depende também da sequência de eventos si1,…,siTs_{i1}, \dots, s_{iT}:

p^i=fθ(xi)vs.p^i=gθ(xi, si1,…,siT)\hat{p}_i = f_\theta(x_i) \qquad\text{vs.}\qquad \hat{p}_i = g_\theta(x_i,\, s_{i1}, \dots, s_{iT})

O ganho da sequência precisa ser medido contra um baseline tabular que já tenha boas features temporais. Comparar um modelo sequencial com um tabular sem agregações temporais mede a falta de feature engineering, não o valor da arquitetura.

Arquiteturas híbridas

Na prática, a pergunta raramente é “tabular ou sequencial”. Uma arquitetura híbrida combina as duas vias:

  1. Encoder tabular: LightGBM/CatBoost ou uma rede tabular sobre atributos estáticos e agregados.
  2. Encoder temporal: GRU ou Transformer sobre a sequência ordenada de eventos.
  3. Fusão: concatenação de embeddings em uma rede única ou stacking dos scores de cada via.
  4. Calibração e decisão: calibração da PD final e motor de decisão com as políticas de crédito.
flowchart TD
A[Fontes: cadastro, bureau, transações e pagamentos] --> B[Dataset point-in-time]
B --> C[Features tabulares e agregações]
B --> D[Sequências temporais]
C --> E[LightGBM / CatBoost]
D --> F[GRU / Transformer]
E --> G[Fusão / Stacking sem leakage]
F --> G
G --> H[Calibração da PD]
H --> I[Política de crédito e monitoramento]
Arquitetura híbrida para estimar a PD.

Fluxograma: fontes de dados (cadastro, bureau, transações e pagamentos) alimentam um dataset point-in-time. Dele saem duas vias: features tabulares e agregações, processadas por LightGBM ou CatBoost, e sequências temporais, processadas por GRU ou Transformer. As duas vias se juntam em uma etapa de fusão ou stacking sem leakage, seguida da calibração da PD e da política de crédito com monitoramento.

Um esboço de stacking com predições out-of-fold respeitando a ordem temporal:

models/stacking.py
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import TimeSeriesSplit
def oof_predictions(model, X, y, n_splits=5):
"""Predições out-of-fold; X e y ordenados pela data de decisão."""
oof = np.full(len(X), np.nan)
for train_idx, valid_idx in TimeSeriesSplit(n_splits=n_splits).split(X):
model.fit(X.iloc[train_idx], y.iloc[train_idx])
oof[valid_idx] = model.predict_proba(X.iloc[valid_idx])[:, 1]
return oof
oof_tab = oof_predictions(tabular_model, X_tab, y)
oof_seq = oof_predictions(sequence_model, X_seq, y) # wrapper com API do scikit-learn
# A primeira dobra temporal não recebe predição: fica fora do meta-modelo.
mask = ~np.isnan(oof_tab) & ~np.isnan(oof_seq)
meta = LogisticRegression()
meta.fit(np.column_stack([oof_tab, oof_seq])[mask], y.to_numpy()[mask])

O TimeSeriesSplit divide pela ordem das linhas; se o mesmo cliente aparece em várias datas, também é preciso garantir que registros dele não fiquem dos dois lados de uma divisão de forma que vaze informação futura.

Por fim, a arquitetura híbrida tem custo: dois pipelines de dados, dois modelos para monitorar e mais latência. A avaliação deve comparar o ganho incremental com esse custo — e, se o ganho for pequeno ou instável entre safras, o modelo mais simples vence.

Survival analysis e múltiplos horizontes

A classificação binária “default em 12 meses” responde a uma pergunta só e descarta informação: um cliente que entra em default no segundo mês recebe o mesmo rótulo de outro que entra no décimo primeiro. E operações com menos de 12 meses de observação ficam sem rótulo confiável.

A survival analysis modela o tempo até o evento. Na versão em tempo discreto, estima-se o hazard: a probabilidade de default no período tt, dado que o cliente chegou até ali sem default. A PD acumulada até o horizonte tt sai do produto das probabilidades de “sobreviver” a cada período:

ht(x)=P(T=t∣T≥t, x),PD(t∣x)=1−∏k=1t(1−hk(x))h_t(x) = P(T = t \mid T \geq t,\, x), \qquad PD(t \mid x) = 1 - \prod_{k=1}^{t} \big(1 - h_k(x)\big)
TT
Período em que ocorre o default
ht(x)h_t(x)
Hazard: probabilidade de default em t, dado que não houve default antes
PD(t∣x)PD(t \mid x)
Probabilidade acumulada de default até o período t
Hazard em tempo discreto e PD acumulada.

Essa formulação traz três vantagens:

  • Censura: operações observadas por menos tempo do que o horizonte ainda contribuem com os períodos em que foram observadas.
  • Múltiplos horizontes coerentes: como cada termo (1−hk)(1 - h_k) está entre 0 e 1, a PD acumulada nunca diminui com o horizonte. A consistência PD3m≤PD6m≤PD12mPD_{3m} \leq PD_{6m} \leq PD_{12m} é garantida pela construção, algo que três classificadores binários independentes não garantem.
  • Riscos competitivos: pré-pagamento ou liquidação antecipada encerram a operação sem default. Tratá-los como censura comum distorce as estimativas; modelos de riscos competitivos estimam um hazard específico para cada causa.

Na prática, o modelo em tempo discreto pode ser treinado com qualquer classificador binário — inclusive gradient boosting — sobre uma base expandida em formato pessoa-período:

survival/person_period.py
import pandas as pd
def to_person_period(loans: pd.DataFrame, horizon: int = 12) -> pd.DataFrame:
"""loans: uma linha por operação, com months_observed (até default ou censura) e defaulted (0/1).
Gera uma linha por operação e mês em risco; o alvo é 1 apenas no mês do default."""
rows = []
for loan in loans.itertuples():
last = min(loan.months_observed, horizon)
for t in range(1, last + 1):
event = int(loan.defaulted and t == loan.months_observed)
rows.append({"loan_id": loan.loan_id, "t": t, "event": event})
return pd.DataFrame(rows)

O classificador recebe os atributos da operação e o período tt e estima hth_t; a PD acumulada para 3, 6 e 12 meses sai da fórmula acima.

Validação e métricas

A forma de validar define se a comparação entre modelos é confiável. Em crédito, alguns cuidados são obrigatórios:

  • Divisão temporal: treino, validação e teste em períodos sucessivos, com um holdout out-of-time que simule o uso real.
  • Vazamento entre registros: o mesmo cliente pode aparecer em várias datas de referência; a divisão precisa evitar que informação futura dele contamine o treino.
  • Variáveis pós-decisão: qualquer atributo calculado depois da data de decisão deve ser removido.

Métricas de discriminação e calibração

MétricaO que medeObservação
ROC-AUCCapacidade de ordenar bons e maus pagadoresInsensível à calibração
PR-AUCPrecisão × recall na classe de defaultMais informativa com classes muito desbalanceadas
KSDistância máxima entre as distribuições de score de bons e mausMuito usada em crédito
GiniDiscriminação em escala de −1 a 1Aqui, Gini = 2·AUC − 1; explicite a convenção adotada
Log lossQualidade probabilística das prediçõesPenaliza fortemente erros confiantes
Brier scoreErro quadrático médio da probabilidadeCombina calibração e discriminação
ECEDistância média entre PD prevista e taxa observadaComplementar à curva de calibração

Duas fórmulas ajudam a separar ordenação de calibração. O Brier score mede o erro quadrático das probabilidades; o ECE agrupa as predições em faixas e compara a PD média prevista com a taxa de default observada em cada faixa:

Brier=1N∑i=1N(p^i−yi)2,ECE=∑b=1BnbN ∣ yˉb−pˉb ∣\text{Brier} = \frac{1}{N}\sum_{i=1}^{N} (\hat{p}_i - y_i)^2, \qquad \text{ECE} = \sum_{b=1}^{B} \frac{n_b}{N}\,\big|\,\bar{y}_b - \bar{p}_b\,\big|
p^i, yi\hat{p}_i,\ y_i
PD prevista e rótulo observado (0 ou 1)
nbn_b
Número de observações na faixa b
yˉb, pˉb\bar{y}_b,\ \bar{p}_b
Taxa de default observada e PD média prevista na faixa b

Um modelo pode ter ótimo AUC e PDs mal calibradas — e, em crédito, a PD alimenta preço, limite e provisão. Por isso, a calibração (por exemplo, com regressão isotônica ou Platt scaling, ajustados em dados fora do treino) é parte do modelo, não um detalhe.

Valor econômico, estabilidade e explicabilidade

  • Métricas econômicas: custo esperado, taxa de aprovação, perda esperada e o trade-off entre risco e retorno para cada ponto de corte. Toda métrica econômica depende de hipóteses (custo de um falso negativo, margem, LGD) que precisam ser explicitadas.
  • Estabilidade: drift da população (por exemplo, com PSI), desempenho por safra ou coorte e por segmento. Um modelo melhor na média e instável entre safras é um risco.
  • Explicabilidade: SHAP, quando adequado, para entender contribuições globais e individuais — e para checar se o modelo usa os sinais que o negócio espera.

Em produção, o modelo é só uma parte do sistema: versionamento de features e modelos, trilha de auditoria das decisões, monitoramento de drift e desempenho e retreinamento controlado, com aprovação e comparação contra o modelo vigente. Discussões recentes também apontam como leakage temporal, mudança de distribuição e instabilidade das explicações se combinam em aplicações tabulares de alto risco como crédito (Rahman & Tabassum, 2026, preprint).

Plano experimental reproduzível

Para responder se sequências e modelos híbridos valem a pena em um dataset específico, um plano em etapas isola a contribuição de cada componente:

ExperimentoFeaturesModelosPergunta
AEstáticasRegressão logística, LightGBM, XGBoost, CatBoostQual é o baseline?
BEstáticas + agregações temporaisOs mesmos de AQuanto a engenharia temporal adiciona?
CSequência de pagamentos/transaçõesGRU ou TransformerA sequência sozinha compete com B?
DAgregações + embeddings temporaisHíbrido (fusão ou stacking)Há ganho incremental sobre B?
EAs de B, por períodoSurvival em tempo discretoMelhora a calibração por horizonte?

O experimento C só faz sentido se o dataset tiver sequências com granularidade adequada. Para que a comparação seja justa:

  • mesmos rótulos, mesma população, mesmo horizonte e os mesmos splits temporais em todos os experimentos;
  • tabela de ablação mostrando o efeito de cada grupo de features e de cada via do híbrido;
  • custo de inferência, latência e memória ao lado das métricas de desempenho;
  • robustez temporal: desempenho por safra no período out-of-time;
  • intervalos de confiança (por exemplo, via bootstrap) sempre que viável, para não tratar diferenças dentro do ruído como ganhos.

Dataset de estudo

Um bom ponto de partida para reproduzir esse plano é a competição Home Credit — Credit Risk Model Stability, no Kaggle. Ela traz múltiplas tabelas relacionadas e histórico útil para engenharia de features, e o próprio nome aponta a ênfase em estabilidade do modelo ao longo do tempo.

Hipóteses de pesquisa

O plano experimental existe para testar hipóteses — não para confirmar conclusões escolhidas de antemão.

Conclusão

A recomendação prática é incremental. Comece com um baseline tabular robusto — regressão logística e gradient boosting — alimentado por boas features temporais e validado out-of-time. Só então adicione encoders sequenciais e fusão, e mantenha essas camadas apenas se o ganho for consistente entre safras e compensar o custo operacional. Para quem precisa de PDs em vários horizontes, a survival analysis em tempo discreto oferece coerência entre horizontes e tratamento correto da censura.

Acima de tudo, em crédito o desempenho real não se resume a um AUC. Calibração, governança, justiça, estabilidade e explicabilidade fazem parte do resultado — e são elas que determinam se um modelo pode, de fato, ir para produção. Para um panorama mais amplo da literatura, a revisão sistemática de Ayari, Guetari & Kraïem (2025) é um bom ponto de partida.

Referências

  1. Grinsztajn, L., Oyallon, E. & Varoquaux, G. (2022). Why do tree-based models still outperform deep learning on typical tabular data? NeurIPS 2022, Datasets and Benchmarks Track. Link
  2. Gorishniy, Y., Rubachev, I., Khrulkov, V. & Babenko, A. (2021). Revisiting Deep Learning Models for Tabular Data. NeurIPS 2021. Link
  3. Schmitt, M. (2022). Deep Learning vs. Gradient Boosting: Benchmarking state-of-the-art machine learning algorithms for credit scoring. arXiv:2205.10535. Link
  4. Wang, H. & Bellotti, A. (2026). Long short-term memory network with adapted attention mechanism for credit risk modeling. International Journal of Forecasting. DOI
  5. Ayari, H., Guetari, R. & Kraïem, N. (2025). Machine learning powered financial credit scoring: a systematic literature review. Artificial Intelligence Review, 59(1), 13. DOI
  6. Ehrhardt, A., Biernacki, C., Vandewalle, V., Heinrich, P. & Beben, S. (2021). Reject inference methods in credit scoring. Journal of Applied Statistics. Link
  7. Hollmann, N., Müller, S., Purucker, L. et al. (2025). Accurate predictions on small data with a tabular foundation model. Nature, 637, 319–326. DOI
  8. Home Credit — Credit Risk Model Stability. Competição no Kaggle. Link
  9. Rahman, N. & Tabassum, N. (2026). Temporal Leakage, Distribution Shift, and Explainability Instability in High-Stakes Tabular Machine Learning. Preprint, SSRN. DOI