Agregação de Decisões Baseadas em Pluralidade em Sistemas de IA
A pluralidade, no contexto de sistemas de recomendação e classificação automática, é basicamente o método de somar votos de múltiplos classificadores e escolher a classe majoritária. Parece simples porque é simples. O problema é que quase ninguém faz isso direito na primeira tentativa.
O que e pluralidade
Você provavelmente já encontrou isso sem saber. Quando um sistema de filtro de spam consulta vários modelos e decide pela classe mais votada, isso é pluralidade. Quando um sistema de detecção de anomalias pede a opinião de três redes neurais diferentes e segue a maioria, é pluralidade. Quando você tem um ensemble de KNN com K=7 e escolhe o rótulo com mais votos, é pluralidade pura. O conceito formal é direto. Você tem um conjunto de classificadores C = {c1, c2, ..., cn} e uma instância x a ser classificada. Cada ci produz um voto vi. A decisão final é argmax_soma(votos para cada classe). É isso. Nada místico.
Como implementar um sistema de pluralidade funcional
Vou mostrar na prática porque a teoria não prepara ninguém para os problemas que aparecem quando você roda isso no mundo real. Passo 1: Escolha seus classificadores de forma estratégica.
Errado: colocar cinco Random Forests com hiperparâmetros ligeiramente diferentes e chamar de ensemble. Certo: combinar classificadores que cometem erros diferentes. Um SVM linear, um XGBoost, uma rede neural rasa, e um KNN. A diversidade importa mais do que a qualidade individual de cada um. Dois classifficadores excelentes que erram as mesmas coisas valem menos do que dois bons que erram coisas diferentes. Passo 2: Normalização de scores.
Aqui é onde a maioria quebra. Se o classificador A usa probabilidade e o B usa score bruto de 0 a 1000, sua soma vai dar errado. Sempre normalize os outputs para uma escala comum antes de votar. MinMax ou z-score funcionam. Eu uso MinMax por padrão porque é mais intuitivo de depurar. Passo 3: Pesos ou voto igual?
Voto igual é o padrão e funciona na maioria dos casos. Mas se você conhece o performance relativo de cada classificador, pode atribuir pesos proporcionais ao F1-score ou acurácia de validação cruzada. Um modelo com F1 0.92 recebe mais peso que um com F1 0.74. Cuidado com overfitting nos pesos — use validação cruzada para calibrar, não o dataset de treino principal. Passo 4: Tratamento de empates.
Empates acontecem. Frequentemente. Com dois classificadores, 50-50 é inevitável. Com quatro, também. Defina uma regra de desempate antes. Opções comuns: preferir a classe com maior soma de probabilidades, usar um quinto classificador como desempilhador, ou simplesmente escolher aleatoriamente com ponderação pelo confidence médio. Eu prefiro a opção de probabilidade agregada porque preserva informação.
👉 Clique no botão abaixo para saber mais sobre o assunto!
O problema que ninguém conta nos tutoriais
Em 2023, implementei um sistema de pluralidade para classificação de risgo de crédito com 8 modelos. A acurácia média individual era 89%. A acurácia do ensemble com pluralidade simples deveria superar isso. Teoricamente sim. Na prática, caiu para 87% nos primeiros testes. O motivo: corrélação entre os erros. Os modelos eram treinados no mesmo dataset desbalanceado e todos erravam nas mesmas 3% das amostras — os casos limítrofes. Pluralidade não ajuda quando todos votam errado juntos. A correção foi aplicar weighting baseado em matriz de confusão cruzada, reduzindo o peso dos modelos que mais se correlacionavam, e oversampling dos casos borderline no treino.
Depois disso, o ensemble subiu para 91.3%. A lição: pluralidade não é mágica. Ela compensa variance, não bias. Se todos os seus classificadores têm o mesmo viés, pluralidade só formaliza o erro coletivo.
Quando pluralidade é a escolha errada
Primeiro: com poucos classifficadores (2 ou 3). Empates frequentes tornam o sistema instável. Segundo: quando os classifficadores são altamente correlacionados — o caso acima. Terceiro: quando custo computacional importa. Cada classifficador extra adiciona latência linear. Se você precisa de resposta em tempo real com constraints apertados, ensemble com 10 modelos pode ser impraticável. Quarto: problemas com classes extremamente desbalanceadas e poucos exemplos da classe minoritária. Pluralidade tende a favorecer a classe majoritária porque é estatisticamente mais provável que a maioria dos classifficadores acerte o rótulo frequente. Alternativa nesses casos: weighted voting com thresholds adaptativos por classe, ou simplesmente abandonar ensemble e melhorar um único modelo bem calibrado com técnicas de rebalanceamento como SMOTE ou focal loss.
Código prático
Aqui está uma implementação limpa em Python que você pode adaptar:
from sklearn.ensemble import VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
import numpy as np
Classificadores diversificados
pipe1 = Pipeline([('scaler', StandardScaler()),
('clf', LogisticRegression(max_iter=1000))])
pipe2 = Pipeline([('scaler', StandardScaler()),
('clf', SVC(probability=True))])
pipe3 = Pipeline([('clf', DecisionTreeClassifier(max_depth=5))])
Votação por pluralidade (majority vote)
ensemble = VotingClassifier(
estimators=[('lr', pipe1), ('svm', pipe2), ('dt', pipe3)],
voting='hard' 'hard' = pluralidade, 'soft' = média de probabilidades
)
ensemble.fit(X_train, y_train)
predictions = ensemble.predict(X_test)
A diferença entre voting='hard' e voting='soft' é importante. Hard usa pluralidade pura — cada classificador vota numa classe, majoritária vence. Soft calcula a média das probabilidades e escolhe a classe com maior soma. Soft tende a ser mais robusto porque usa informação de confiança, não apenas o rótulo mais provável. Teste ambos e compare.
Métricas para validar seu ensemble
Não olhe só acurácia. Com classes desbalanceadas, 95% de acurácia pode significar que seu ensemble simplesmente votou "classe majoritária" o tempo todo. Use F1-score macro, AUC-ROC, e surtout, análise da matriz de confusão separadamente para cada fold de validação cruzada. Se o ensemble melhora a acurácia mas piora o recall de uma classe importante, você tem um problema de viés que a pluralidade está amplificando, não corrigindo. Também vale medir a diversidade do ensemble. Uma métrica útil é o coeficiente de discordância entre pares de classifficadores. Se a média for menor que 0.1, seus modelos estão praticamente dizendo a mesma coisa e o ensemble não agrega valor. Na prática, busque diversidade com coeficiente entre 0.2 e 0.4. Acima disso, risco de overfitting por ruído.
Resumo honesto
Pluralidade funciona quando você tem classifficadores verdadeiramente diversos, bem calibrados, e suficientes para que erros individuais se cancelem. Funciona mal quando os modelos são correlacionados, quando há poucos deles, ou quando o dataset tem problemas estruturais que afetam todos igualmente. Comece com três classificadores diversificados, valide com cross-validation, e só adicione mais se a análise de diversidade justificar. Mais não é sempre melhor.