Atualmente, estou usando o XGBoost para previsão de riscos, parece estar fazendo um bom trabalho no departamento de classificação binária, mas as saídas de probabilidade estão muito longe, ou seja, alterar o valor de um recurso em uma observação em uma quantidade muito pequena pode aumentar a probabilidade salto de saída de 0,5 para 0,99.
Eu mal vejo saídas na faixa de 0,6-0,8. Em todos os casos, a probabilidade é menor que 0,99 ou 1.
Estou ciente dos métodos de calibração pós-treinamento, como Escalonamento de Platt e Correção Logística, mas estava pensando se há algo que eu possa ajustar no processo de treinamento do XGBoost.
Eu chamo o XGBoost de diferentes idiomas usando o FFI, por isso seria bom se eu pudesse resolver esse problema sem introduzir outras bibliotecas de calibração, por exemplo, alterando a métrica de avaliação da AUC para a perda de log.
fonte
XGBoost
é bastante robusto contra discrepantes, quando comparado a outros métodos de baunilha, comoSVM
.Respostas:
O XGBoost não é calibrado naturalmente em probabilidades. Você precisa usar algo como:
para garantir que a saída do modelo possa ser interpretada como uma probabilidade. Caso contrário, você poderá obter apenas pontuações, que só poderão ser usadas para classificar instâncias. Como a maioria das métricas de desempenho pode ser calculada com base nas pontuações, é um erro comum usar o que parecem probabilidades (associadas a boas métricas de desempenho) em vez de probabilidades 'reais'.
Quanto à instabilidade do modelo (aqui no sentido em que uma pequena alteração na variável explicativa altera muito a previsão), é necessário verificar novamente todo o processo de calibração: seleção de variáveis, particionamento de trem / teste, ajuste de hiper-parâmetro / validação cruzada, desempenho métricas usadas, para garantir que seu modelo não seja excessivo.
fonte
Sim, verifique a distribuição de perda de log à medida que o número de iterações aumenta. Se ele começar a disparar antes da sua iteração de reforço final, será um ajuste excessivo.
fonte
A primeira pergunta seria "O que é proporções positivas / negativas?". Só porque tive um problema semelhante várias vezes quando as aulas estavam muito desequilibradas. Se for o seu caso, você pode tentar equilibrar o conjunto de dados ou jogar com o
scale_pos_weight
parâmetro XGboost. No caso das relações de 50/50 classes, as probabilidades podem ser mais ou menos normalizadas.Além disso, é muito provável que você tenha sobreajuste ao mesmo tempo. Tente ajustar a taxa de aprendizado, os parâmetros de amostragem e os parâmetros de regularização (reg_alpha, reg_lambda).
fonte
Primeiro, você deve ter certeza de que seus dados são grandes o suficiente ao trabalhar com algoritmos baseados em árvore como XGBoost e LightGBM, tais mudanças repentinas podem indicar super ajuste. (10.000 amostras, pelo menos, regra geral)
Segundo, como está sua cardinalidade; se você tiver 3-4 recursos, seria de esperar que uma mudança de recurso causasse tal efeito.
Terceiro, qual é a sua seleção de hiperparâmetros? Os modelos baseados em árvore são muito sensíveis às alterações dos parâmetros. Certifique-se de implementar cuidadosamente o ajuste do hiperparâmetro.
Por fim, ao lidar com classificação binária; métricas de erro se tornam realmente importantes. Você pode fazer uma combinação de perda de log binário e erro binário (o XGBoost permite escolher vários); também certifique-se de implementar a parada antecipada escolhendo early_stopping_rounds = N no método train do XGBoost, onde N é a seleção de iterações. Com isso, seu algoritmo para mais cedo em um ponto razoável em que sua perda para para diminuir, evitando o ajuste excessivo.
fonte