Compreendendo o desequilíbrio de classe e a modelagem de conjunto no Two-Sigma Connect: consultas sobre listagem de aluguel
O desafio da conexão Two-Sigma era prever o nível de interesse – alto, médio ou baixo – das listagens de apartamentos da RentHop na área da cidade de Nova York. Este é um problema de classificação que idealmente poderia ser resolvido usando aprendizagem supervisionada. Para entender os dados, traçamos os níveis de interesse para entender o número relativo de cada nível de interesse. Como pode ser visto no gráfico abaixo, os dados apresentam um desequilíbrio de classes com um número significativamente maior de listagens com juros baixos do que listagens com juros médios e altos combinadas.
Um exemplo adequado desse desequilíbrio é a relação entre a altura da montanha mais alta do mundo (o Monte Everest) e a altura do edifício mais alto do mundo (o Burj Khalifa). O Burj Khalifa, embora extraordinariamente alto, é pequeno em comparação com o Monte. Everest, como pode ser visto na imagem abaixo (o Burj Khalifa está na caixa laranja!). Assim, o ponto crucial do projeto é como classificar as propriedades de alto e médio interesse e, ao mesmo tempo, capturar a montanha de propriedades de baixo interesse.
Análise exploratória de dados
Uma das facetas mais interessantes dos dados foi o efeito do preço no nível de juros. Como pode ser visto no gráfico abaixo, os imóveis com preços mais elevados tiveram juros muito mais baixos e tiveram uma variação significativamente maior do que aqueles de outras categorias. Esta diferença indica que o preço provavelmente será uma variável significativa nos dados.
Juntamente com o preço, outras características “simples”, como um determinado número de quartos ou banheiros, poderiam ser examinadas imediatamente. Estes provaram não ter tanto impacto nos juros como no preço.
Havia também factores que, embora ricos em dados, não eram muito simples e, por isso, não podiam ser examinados imediatamente. Precisávamos conduzir a engenharia de recursos antes de extrair valor de fatores como fotos, recursos, descrições e ID do gerente. Embora o número de fotos, o número de recursos e a contagem de palavras da descrição pudessem ser calculados imediatamente, a interpretação humana do conteúdo da foto, da importância do recurso e do conteúdo da descrição exigia a aplicação de técnicas avançadas em processamento de imagem e processamento de linguagem natural.
Para transformar as fotos em dados, primeiro classificamos as imagens usando o Modelo Inception encontrado na Rede Neural Tensorflow. Embora tenhamos conseguido classificar os itens nas imagens, o processo foi lento. Classificar todas as cerca de 300.000 imagens exigiria mais tempo do que foi possível para concluir o projeto. Em uma segunda tentativa, utilizamos luminância, mas não conseguimos diferenciar as fotos. Por fim, utilizamos a média e o desvio padrão das cores vermelho, verde e azul nas fotos.
O primeiro passo para extrair a importância do recurso foi padronizar os nomes, por exemplo, “hi rise” e “highrise” precisavam ser agrupados como um único termo. Essa lista padronizada foi então transformada em uma contagem usando frequência de documento inversa de frequência de termo (tf-idf). O resultado disso foram 400 colunas (para 400 termos) de valores tf-idf. Porém, tivemos que reduzir essas 400 colunas porque, com nossos recursos limitados, nossos modelos não funcionariam com tantos preditores. Para reduzir essas 400 colunas no modelo final, utilizamos a regressão logística com as 400 colunas como preditores de nível de interesse para formar três colunas que eram probabilidades previstas de alto, médio e baixo interesse. Essas 400 colunas foram então combinadas com os preditores restantes para ajustar os modelos.
A coluna de descrição foi transformada usando dois métodos. O primeiro foi separar os termos padrão na descrição por n-grama (uma sequência de “n” palavras contíguas). A biblioteca NRC usada para determinar os n-gramas. Os recursos mais populares incluíam aparelhos de aço inoxidável. Os valores foram transformados usando tf-idf e categorizados usando um SVM. Este modelo não conseguiu diferenciar os níveis de juros e não foi utilizado em outros cálculos. O segundo método utilizado para transformar a coluna de descrição foi a análise de sentimento, também baseada na Biblioteca NRC e no pacote tidytext R. Os sentimentos utilizados foram positivo, negativo, antecipação, medo, raiva, confiança, surpresa, tristeza, nojo, alegria e raiva. Para cada descrição, foi contado o número de palavras correspondentes a cada sentimento e adicionado a cada coluna de sentimento. Essas colunas foram então usadas em modelos futuros.
Outra coluna que poderia ter um valor significativo era a coluna ID do gerente. Para utilizar esta coluna, seguimos um Kaggle Kernel que classificou os gestores com base no nível de interesse. Esses valores melhoraram significativamente nossas previsões na parte de validação do conjunto de treinamento, mas aumentaram significativamente a perda de log (precisão reduzida) do conjunto de teste. Acreditamos que a inclusão do nível de saída e interesse na determinação dos valores do preditor resultou em vazamento. Os modelos resultantes foram superajustados aos dados. Esses recursos foram removidos nos modelos subsequentes.
Utilizando um modelo de floresta aleatória, calculamos a importância relativa de cada variável (contribuição para a diminuição do Índice de Gini). A variável preço, como esperado da EDA, foi a variável mais importante, seguida pela localização (latitude e longitude). O número de caracteres na descrição também foi importante e a hora e o dia em que a listagem foi criada também foram críticos. As características de sentimento tendem a ser as menos importantes.
Para verificar a correlação entre as variáveis, foi realizado um gráfico de correlação de Pearson para as variáveis ​​numéricas. Como pode ser visto no gráfico abaixo (azul forte é uma correlação positiva mais alta, e vermelho mais forte é uma correlação mais negativa), as variáveis ​​da foto têm uma correlação significativa.
Os modelos escolhidos para análise incluíram regressão logística, floresta aleatória, reforço de gradiente e reforço de gradiente extremo. O uso de complexidade crescente foi utilizado para determinar se modelos simples poderiam prever os resultados e se modelos cada vez mais complexos capturariam diferentes aspectos dos dados que poderiam ser combinados. O modelo de regressão logística utilizou regularização incluindo crista e rede elástica. Como pode ser visto no gráfico de barras da matriz de confusão abaixo, a regressão logística com rede elástica não conseguiu capturar nenhum dos valores de juros altos, mas teve um bom desempenho para as propriedades de juros baixos.
Usamos a implementação Ranger do algoritmo de floresta aleatória devido à sua velocidade aprimorada. Este modelo, que utiliza até sete preditores para cada árvore de decisão, também não teve um bom desempenho.
O método de aumento de gradiente implementado no pacote H2O R também foi usado. Este modelo exigiu algum ajuste de parâmetros, mas alterações nesses valores não resultaram em um aumento significativo na precisão. Os valores são mostrados abaixo. Embora mais valores altos e médios sejam previstos corretamente, um número significativo de valores baixos foi previsto incorretamente.
O XGBoost foi implementado devido à sua popularidade e histórico de sucesso em competições Kaggle anteriores. Embora o modelo tenha feito previsões decentes com suas configurações padrão. Ajustar o modelo mostrou-se difícil, devido ao seu grande número. Para economizar tempo, experimentamos ajustar manualmente a taxa de aprendizado e a profundidade das árvores até minimizar o erro entre o conjunto de treinamento e validação. Como os outros modelos, o XGBoost provou ser muito preciso na previsão de listagens com níveis de juros baixos, mas não teve um desempenho tão bom na previsão de listagens com juros altos.
Para melhorar esses modelos, abordando diretamente o desequilíbrio de classes, usamos up-sampling e down-sampling. Esses métodos aumentam respectivamente o número de observações para as classes minoritárias e diminuem o número de classes majoritárias por amostragem aleatória. O número de observações é equalizado nos conjuntos de dados resultantes antes do treinamento do modelo e pode resultar em melhores previsões. As previsões de dados com amostragem superior e inferior não melhoraram significativamente a maioria dos modelos. Para a regressão logística, muito mais propriedades com juros altos foram previstas corretamente, mas um número maior de propriedades com juros baixos foi previsto incorretamente. Os modelos finais utilizaram apenas o método XGBoost.
A previsão final foi criada a partir de um conjunto de modelos XGBoost ponderados. Um modelo básico, um modelo com amostragem aumentada e um modelo com amostragem reduzida. O modelo básico categorizou corretamente a maioria dos modelos de juros baixos, mas previu corretamente alguns dos modelos de juros altos. A amostragem aumentada foi o inverso e a amostragem reduzida foi intermediária. Uma média ponderada melhorou um pouco a precisão geral, mas foi comparável em termos de perda logarítmica ao modelo base.
A lição aprendida é que o desequilíbrio de classes e a falta de características diferenciadoras resultaram em dificuldades de categorização. O uso de up-sampling tendeu a melhorar a previsão correta de propriedades de alto interesse, mas tendeu a ser deficiente na previsão de propriedades de baixo e médio interesse. Embora uma quantidade significativa de tempo tenha sido gasta na engenharia de recursos, mais tempo para encontrar recursos que diferenciassem claramente entre propriedades de interesse baixo, médio e alto foi fundamental para fazer previsões mais precisas. O ajuste, o empilhamento e a montagem do modelo pouco fizeram para aumentar a precisão das previsões. Para esta competição, teria sido sensato gastar significativamente mais tempo na engenharia de recursos e menos tempo ajustando modelos.