Ensacamento com superamostragem para modelos preditivos de eventos raros

13

Alguém sabe se o seguinte foi descrito e (de qualquer maneira) se parece um método plausível para aprender um modelo preditivo com uma variável-alvo muito desequilibrada?

Freqüentemente, em aplicativos de CRM para mineração de dados, procuraremos um modelo em que o evento positivo (sucesso) seja muito raro em relação à maioria (classe negativa). Por exemplo, eu posso ter 500.000 instâncias em que apenas 0,1% são da classe de interesse positiva (por exemplo, o cliente comprou). Portanto, para criar um modelo preditivo, um método é amostrar os dados nos quais você mantém todas as instâncias de classe positiva e apenas uma amostra das instâncias de classe negativa, para que a proporção de classe positiva para negativa seja mais próxima de 1 (talvez 25% 75% positivo a negativo). Sobre amostragem, subamostragem, SMOTE etc são todos os métodos da literatura.

O que me interessa é combinar a estratégia básica de amostragem acima, mas com ensacamento da classe negativa.

  • Mantenha todas as instâncias de classe positivas (por exemplo, 1.000)
  • Faça uma amostra das instâncias de classe negativa para criar uma amostra equilibrada (por exemplo, 1.000).
  • Ajuste o modelo
  • Repetir

Alguém já ouviu falar disso antes? O problema que parece sem empacotar é que a amostragem de apenas 1.000 instâncias da classe negativa quando existem 500.000 é que o espaço do preditor será escasso e é possível que você não tenha uma representação dos possíveis valores / padrões do preditor. Ensacamento parece ajudar isso.

Eu olhei para o rpart e nada "quebra" quando uma das amostras não possui todos os valores de um preditor (não quebra ao prever as instâncias com esses valores do preditor:

library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))

Alguma ideia?

ATUALIZAÇÃO: Peguei um conjunto de dados do mundo real (dados de resposta de mala direta de marketing) e o particionei aleatoriamente em treinamento e validação. Existem 618 preditores e 1 alvo binário (muito raro).

Training:
Total Cases: 167,923
Cases with Y=1: 521

Validation:
Total Cases: 141,755
Cases with Y=1: 410

Tirei todos os exemplos positivos (521) do conjunto de treinamento e uma amostra aleatória de exemplos negativos do mesmo tamanho para uma amostra equilibrada. Eu encaixo uma árvore rpart:

models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")

Repeti esse processo 100 vezes. Em seguida, previu a probabilidade de Y = 1 nos casos da amostra de validação para cada um desses 100 modelos. Simplesmente calculei a média das 100 probabilidades para uma estimativa final. Decililei as probabilidades no conjunto de validação e, em cada decil, calculei a porcentagem de casos em que Y = 1 (o método tradicional para estimar a capacidade de classificação do modelo).

Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10)) 

Aqui está o desempenho: insira a descrição da imagem aqui

Para ver como isso se comparava a não ensacamento, previ a amostra de validação apenas com a primeira amostra (todos os casos positivos e uma amostra aleatória do mesmo tamanho). Claramente, os dados amostrados eram muito escassos ou superestimados para serem eficazes na amostra de validação de espera.

Sugerir a eficácia da rotina de ensacamento quando houver um evento raro e grandes n e p.

insira a descrição da imagem aqui

B_Miner
fonte

Respostas:

7

Exceto pela inclusão dos mesmos exemplos de classe positiva em cada saco, este é S ^ 3Bagging, conforme descrito em S ^ 3Bagging: Método de Indução de Classificador Rápido com Subamostragem e Ensacamento . (Eu não revi este artigo em profundidade, apenas o examinei.)

Teoricamente, não vejo nada errado com sua abordagem, embora tenha visto com muito mais frequência a subamostragem combinada com aumento do que ensacamento.

Isso pode não responder exatamente à sua pergunta, mas um excelente artigo sobre diferentes maneiras de lidar com dados desequilibrados é Aprendendo com dados desequilibrados . Parece que o aprendizado sensível aos custos pode ser mais apropriado no seu caso. Como você está usando Florestas de Decisão, a Seção 3.2.3 Árvores de Decisão Sensíveis a Custos provavelmente seria útil. Afirma,

Em relação às árvores de decisão, o ajuste sensível ao custo pode assumir três formas: primeiro, ajustes sensíveis ao custo podem ser aplicados ao limite de decisão; segundo, considerações sensíveis ao custo podem ser dadas aos critérios de divisão em cada nó; e, finalmente, esquemas de poda sensíveis ao custo podem ser aplicados à árvore

Ajustes sensíveis ao custo no limite de decisão significam basicamente escolher seu limite de decisão com base no desempenho do ROC ou da Precision-Recall Curve. O desempenho da RPC, em particular, é robusto para dados desequilibrados.

O critério de divisão sensível ao custo se resume a alterar sua função de impureza para lidar com dados desequilibrados. O documento acima mencionado declara,

Em [63], três funções específicas de impureza, Gini, Entropy e DKM, demonstraram ter insensibilidade de custo aprimorada em comparação com a linha de base da taxa de precisão / erro. Além disso, esses experimentos empíricos também mostraram que o uso da função DKM geralmente produzia árvores de decisão menores não podadas que, na pior das hipóteses, forneciam precisões comparáveis ​​a Gini e Entropy. Uma base teórica detalhada que explica as conclusões desses resultados empíricos foi posteriormente estabelecida em [49], que generaliza os efeitos do crescimento da árvore de decisão para qualquer escolha de critérios de cuspe.

Quanto à poda,

No entanto, na presença de dados desequilibrados, os procedimentos de poda tendem a remover as folhas que descrevem o conceito de minoria. Foi demonstrado que, embora as árvores de poda induzidas a partir de dados desequilibrados possam prejudicar o desempenho, o uso de árvores não podadas nesses casos não melhora o desempenho [23]. Como resultado, atenção foi dada à melhoria da estimativa de probabilidade de classe em cada nó para desenvolver estruturas de árvore de decisão mais representativas, de modo que a poda possa ser aplicada com efeitos positivos. Alguns trabalhos representativos incluem o método de suavização de Laplace da estimativa de probabilidade e a técnica de poda de Laplace [49].

[23] N. Japkowicz e S. Stephen, "O Problema do Desequilíbrio de Classe: Um Estudo Sistemático", Intelligent Data Analysis, vol. 6, n. 5, pp. 429- 449, 2002.

[49] C. Elkan, "Os Fundamentos da Aprendizagem Sensível aos Custos", Proc. Conf. Conjunta internacional Inteligência Artificial, pp. 973-978, 2001.

[63] C. Drummond e RC Holte, “Explorando a (in) sensibilidade de custo dos critérios de divisão da árvore de decisão”, Proc. Int'l Conf. Machine Learning, pp. 239-246, 2000.

oscully
fonte
0

Isto é muito interessante. Recentemente, tenho um projeto que tem uma situação semelhante em que a validação de eventos raros apresenta um bom desempenho, enquanto a validação de não-eventos no intervalo mais baixo previsto (como 0,0 - 0,1) é realizada de forma instável, mês a mês. As razões por trás, como você mencionou, devido à grande população de não-eventos, é melhor incluir mais amostras nos conjuntos de treinamento para que haja amostras suficientes para cobrir várias combinações de variáveis.

Pouco de sol
fonte