Lidando com datasets minúsculos

9:53 am Biotecnologia, Data Mining

Há um tempo atrás, escrevi aqui no Tecnologia Inteligente um artigo onde eu criticava algumas esperanças meio irreais sobre o que se pode fazer com bases de dados (ou datasets, o anglicismo que efetivamente usamos o tempo todo no nosso trabalho :) imensamente grandes. Já neste artigo, pretendo analisar um problema que de certa forma é oposto – o das bases de dados pequenas demais.

Sim! Por incrível que pareça, em uma era onde se fala em “dilúvio de dados” em quase todos os campos da Ciência e terabytes rapidamente caminham para a trivialidade, ainda assim às vezes, em certos casos específicos, a quantidade de dados disponível é muito menor do que poderia ser considerado satisfatório. 

De fato, tive inspiração para escrever este artigo porque nas últimas semanas estava lidando com um dataset biológico muito pequeno, com dados caracterizando apenas seis amostras. Ah, sim, aqui é importante frisar que era um dataset pequeno em número de amostras, mas cada amostra era caracterizada pelos valores de expressão de dezenas de milhares de genes, totalizando um tamanho de uns dois megas.

O que, a propósito, há muito parece um tamanho ridículo em nossa era onde facilmente temos arquivos de vários gigas, mas de qualquer modo já é um tamanho humanamente intratável e que exige análises computadorizadas.

Outro comentário pertinente é relacionado com o fato de que muitos podem achar estranho um dataset biológico ser pequeno, já que a fama é de serem enormes. Bom, o caso é que muitas vezes, para certos problemas, coletar dados de um grande número de amostras pode ser difícil, ou caro, ou ambos. Pense em indivíduos com condições médicas raras, ou então em exames médicos que são caríssimos, e vai ser fácil juntar os pontos para ver como aparecem com razoável freqüencia datasets biológicos minúsculos.

Bom, qualquer que seja o motivo da escassez de amostras, como lidar com esses números reduzidos em um estudo de aprendizagem supervisionada? Eu tenho a seguinte receita de bolo de três passos:

Validação leave-one-out

Depois que são treinados com (duh! :) dados de treino, classificadores são validados com dados de teste que eles nunca “viram”, os famosos out-of-sample.  Dado um conjunto inicial de amostras, existem diversas formas de “produzir” conjuntos de teste e treinamento.

A mais simples delas é simplesmente escolher aleatoriamente uma fração (digamos, 2/3) das amostras para treinamento, e usar o restante para teste.

Uma segunda forma mais sofisticada e confiável, que torna mais improvável a seleção de conjuntos de treino e teste irrealmente favoráveis, é a chamada cross-validation.

Nesta política de validação, o dataset inicial é dividido em n subconjuntos com mais ou menos o mesmo número de amostras, e correspondentemente são feitos n pares de treino e teste: no primeiro par o subconjunto 1 é usado para teste e o restante para treinamento; no segundo par o subconjunto 2 é usado para teste e o restante para treinamento; e assim por diante.

Pois bem, no caso de datasets com pouquíssimas amostras, o ideal é usar o leave-one-out (“deixe um de fora“, numa tradução literal que funciona), que é o caso especial de cross-validation onde n é igual ao número de amostras da base – isto é, a cada par só uma amostra é usada como teste e todas as outras para treinamento.

Esse tipo de validação minimiza ao extremo a probabilidade de formação de pares “privilegiados” de treino e teste, a qual já não é tão pequena assim em datasets minúsculos.

Análise de Permutação:

Vamos supor que você foi cuidadoso na fase anterior de validação, usando leave-one-out, e descobriu que seus classificadores têm um desempenho maravilhoso nos dados, com altas acurácias tanto nos conjuntos de treino quanto de teste.

Mas, se você for realmente rigoroso (alguns diriam paranóico, mas a paranóia quase chega a ser uma virtude na Ciência :), deverá considerar a possibilidade de que talvez seus resultados sejam tão bons porque o número de amostras é pequeno e é fácil para o seu algoritmo decorar algumas propriedades numéricas dos dados que *por coincidência* podem ser usadas para distinguir corretamente as categorias (digamos que casos de controles), mas não necessariamente são relacionados com o problema real que está sendo estudado.

A solução para verificar essa terrível possibilidade é fazer a assim-chamada análise de permutação. Esta é um “embaralhamento”: consiste em trocar aleatoriamente os rótulos de categoria entre as amostras. Gerando muitas permutações diferentes e vendo que as acurácias dos testes feitos com dados “embaralhados” são menores que o resultado obtido com os dados reais, pode-se inferir que as acurácias excelentes devem ser também “reais”, correspondendo a padrões relevantes para o problema investigado.

Nota: aqui estou falando em acurácia – que talvez seja a métrica de qualidade de classificação mais comum, óbvia e intuitiva – mas existem outras métricas, e o que estou dizendo aqui usando acurácia também vale para elas.

Comportamento com métodos não-determinísticos:

Às vezes, nem a análise de permutação pode ser suficiente. Se o dataset for muito pequeno mesmo, o número total de permutações pode ser tão modesto que não permite calcular um alto valor de significância estatística.

No dataset de apenas seis amostras que mencionei, o número de embaralhamentos utilizáveis era de apenas 18. Quando se nota que tradicionalmente o limiar de significância interessantemente para os biólogos é de 0.05, ou uma chance em 20 dos seus resultados serem “falsos”, 18 permutações parecem problemáticas para decidir se seus resultados passam nesse limiar. :) Como então contornar essa forma extrema do problema dos datasets pequenos?

Uma opção interessante pode ser usar um método de classificação não-determinístico (por exemplo GA, GP, vários modelos de redes neuronais, etc) e realizar vários testes de classificação sobre os seus dados reais e sobre os dados permutados.

Um método não-determinístico não necessariamente produz o mesmo classificador com os mesmos dados de entrada, e assim no final essa etapa de validação terá gerado um monte de classificadores diferentes – uns melhores, uns piores que os outros. Interessantemente, agora é possível se falar em comparação de distribuições de acurácias, e não de um dado pontual de acurácia nos dados reais versus um pequeno conjunto de acurácias “embaralhadas”.

Essas distribuições podem ser tão grandes quanto se queira – basta gerar mais classificadores de forma não-determinística – e quanto maior o número de pontos amostrais envolvidos, mais estatisticamente significativa será qualquer discrepância entre as distribuições com e sem embaralhamento.

Moral da história

Enfim, o ideal mesmo em vários processos científicos é trabalhar com números grandes de amostras, mas se as vicissitudes da vida um dia obrigarem você a lidar com datasets minúsculos, não se desespere! Com os macetes descritos há uma boa chance de você espremer (admitidamente de forma um tanto lenta e dolorosa)  alguns padrões confiáveis apesar de tudo; ou na pior das hipóteses demonstrar confiavelmente que seu dataset não presta mesmo. :)