Eu espero que o título seja auto-explicativo. No Kaggle, a maioria dos vencedores usa o empilhamento com algumas vezes centenas de modelos de base, para extrair alguns% extra de MSE, precisão ... Em geral, na sua experiência, o quão importante é a modelagem sofisticada, como empilhar versus simplesmente coletar mais dados e mais recursos para os dados?
56
Respostas:
Como pano de fundo, venho fazendo previsões de séries temporais de SKU de loja para vendas no varejo há 12 anos. Dezenas de milhares de séries temporais em centenas ou milhares de lojas. Eu gosto de dizer que estamos fazendo Big Data desde antes do termo se tornar popular.×
Eu sempre achei que a coisa mais importante é entender seus dados . Se você não entende os principais motivadores, como a Páscoa ou as promoções, está condenado. Frequentemente, isso se resume a entender o negócio específico bem o suficiente para fazer as perguntas corretas e contar incógnitas conhecidas de incógnitas desconhecidas .
Depois de entender seus dados, você precisará trabalhar para obter dados limpos . Supervisionei vários juniores e estagiários, e a única coisa que eles nunca haviam experimentado em todas as suas aulas de estatística e ciência de dados era a quantidade de merda que pode haver nos dados que você possui. Então você precisa voltar à fonte e tentar obtê-la para gerar bons dados, ou tentar limpá-la, ou até mesmo jogar algumas coisas fora. Alterar um sistema em execução para gerar melhores dados pode ser surpreendentemente difícil.
Depois de entender seus dados e realmente ter dados um tanto limpos, você pode começar a mexer com eles. Infelizmente, a essa altura, muitas vezes me encontrava sem tempo e recursos.
Pessoalmente, sou um grande fã da combinação de modelos ("empilhamento"), pelo menos em um sentido abstrato , menos da engenharia de recursos sofisticada, que muitas vezes cruza a linha para um território de sobreajuste - e mesmo que seu modelo mais sofisticado tenha um desempenho um pouco melhor em média, freqüentemente se descobre que as previsões realmente ruins pioram com um modelo mais complexo. Este é um desastre na minha linha de negócios. Uma única previsão realmente ruim pode destruir completamente a confiança em todo o sistema; portanto, a robustez é extremamente alta na minha lista de prioridades. Sua milhagem pode variar.
Na minha experiência, sim, a combinação de modelos pode melhorar a precisão. No entanto, os ganhos realmente grandes são obtidos com as duas primeiras etapas: entendendo seus dados e limpando-os (ou obtendo dados limpos em primeiro lugar).
fonte
Obviamente, não posso falar por toda a indústria, mas trabalho na indústria e competi no Kaggle para compartilhar meu ponto de vista.
Primeiro, você tem razão em suspeitar que o Kaggle não corresponde exatamente ao que as pessoas estão fazendo na indústria. É um jogo, e sujeito a habilidade de jogo, com muitas restrições malucas. Por exemplo, na competição Santander atualmente em execução :
Se alguém me desse um conjunto de dados como este no trabalho, eu imediatamente me ofereceria para trabalhar com eles na engenharia de recursos, para que pudéssemos obter recursos mais úteis. Eu sugeriria que usássemos o conhecimento do domínio para decidir sobre prováveis termos de interação, limites, estratégias de codificação de variáveis categóricas, etc. Abordar o problema dessa maneira seria claramente mais produtivo do que tentar extrair significado de um arquivo de exaustão produzido por um engenheiro de banco de dados sem treinamento em ML.
Além disso, se você aprender, digamos, que uma determinada coluna numérica não é numérica, mas sim um código postal, pode obter dados de fontes de dados de terceiros, como o Censo dos EUA, para aumentar seus dados. Ou, se você tiver uma data, talvez inclua o preço de fechamento do S&P 500 para esse dia. Tais estratégias de aumento externo exigem conhecimento detalhado do conjunto de dados específico e conhecimento significativo do domínio, mas geralmente têm recompensas muito maiores do que melhorias puramente algorítmicas.
Portanto, a primeira grande diferença entre a indústria e o Kaggle é que, na indústria, os recursos (no sentido de dados de entrada) são negociáveis.
Uma segunda classe de diferenças é o desempenho. Geralmente, os modelos são implantados na produção de duas maneiras: 1) as previsões do modelo são pré-calculadas para cada linha em uma tabela de banco de dados muito grande; ou 2) um aplicativo ou site passa o modelo por uma única linha de dados e precisa de uma previsão retornada em tempo real. Ambos os casos de uso requerem um bom desempenho. Por esses motivos, muitas vezes você não vê modelos que demoram a prever ou usar uma quantidade enorme de memória, como os vizinhos mais próximos K ou florestas aleatórias extra. Uma regressão logística ou rede neural, por outro lado, pode pontuar um lote de registros com algumas multiplicações de matrizes, e a multiplicação de matrizes pode ser altamente otimizada com as bibliotecas corretas.Mesmo que eu pudesse obter talvez +0,001 AUC se empilhasse em outro modelo não paramétrico, não o faria porque a taxa de transferência e a latência da previsão cairiam demais.
Há uma dimensão de confiabilidade nisso também - empilhar quatro bibliotecas de terceiros diferentes e avançadas , como LightGBM , xgboost , catboost e Tensorflow (em GPUs , é claro) pode obter a redução de 0,01 no MSE que vence as competições do Kaggle, mas são quatro bibliotecas diferentes para instalar, implantar e depurar se algo der errado. É ótimo se você conseguir fazer tudo isso funcionar em seu laptop, mas fazê-lo funcionar em um contêiner do Docker em execução na AWS é uma história completamente diferente. A maioria das empresas não deseja liderar uma pequena equipe de devops apenas para lidar com esses tipos de problemas de implantação.
Dito isto, empilhar em si não é necessariamente um grande negócio. De fato, empilhar alguns modelos diferentes com desempenho igualmente bom, mas com limites de decisão muito diferentes, é uma ótima maneira de obter um pequeno aumento na AUC e um grande aumento na robustez. Apenas não jogue tantas pias de cozinha em seu conjunto heterogêneo que você começa a ter problemas de implantação.
fonte
De acordo com minha experiência, mais dados e mais recursos são mais importantes do que o modelo mais extravagante, mais empilhado e mais ajustado.
Veja as competições de publicidade online que ocorreram. Os modelos vencedores eram tão complexos que acabaram demorando uma semana inteira para treinar (em um conjunto de dados muito pequeno, comparado ao padrão da indústria). Além disso, a previsão em um modelo empilhado é maior que em um modelo linear simples. Sobre o mesmo tópico, lembre-se de que a Netflix nunca usou seu algoritmo de 1 milhão de dólares por causa dos custos de engenharia .
Eu diria que as competições on-line de ciência de dados são uma boa maneira de uma empresa saber "qual é a maior precisão (ou qualquer métrica de desempenho) que possa ser alcançada" usando os dados coletados (em algum momento). Observe que esse é realmente um problema difícil que está sendo resolvido! Porém, no setor, o conhecimento de campo, as restrições de hardware e de negócios geralmente desencorajam o uso de "modelagem sofisticada".
fonte
Empilhar aumenta significativamente a complexidade e reduz a interpretabilidade. Os ganhos são geralmente relativamente pequenos para justificá-lo. Portanto, embora o conjunto seja provavelmente amplamente usado (por exemplo, XGBoost), acho que o empilhamento é relativamente raro na indústria.
fonte
Na minha experiência, coletar bons dados e recursos é muito mais importante.
Os clientes com quem trabalhamos geralmente têm muitos dados, e nem todos em formato que pode ser facilmente exportado ou fácil de trabalhar. O primeiro lote de dados geralmente não é muito útil; é nossa tarefa trabalhar com o cliente para descobrir quais dados precisaríamos para tornar o modelo mais útil. Este é um processo muito iterativo.
Há muita experimentação em andamento, e precisamos de modelos que sejam:
O ponto 3) é especialmente importante, porque os modelos que são fáceis de interpretar são mais fáceis de se comunicar com o cliente e mais fácil de detectar se fizemos algo errado.
fonte
Aqui está algo que não aparece muito no Kaggle: o
o maior risco que você irá enfrentar durante a vida útil desse modelo. O tempo normalmente é congelado nas competições do Kaggle ou há uma breve janela de tempo futuro em que os valores do conjunto de testes entram. Na indústria, esse modelo pode durar anos. E tudo o que é necessário é que uma variável fique confusa para que todo o seu modelo vá para o inferno, mesmo que tenha sido construído na perfeição. Entendo, ninguém quer assistir a um concurso em que os concorrentes equilibram cuidadosamente a complexidade do modelo e o risco, mas, em um trabalho, seus negócios e qualidade de vida sofrerão se algo der errado com um modelo do qual você é responsável. Mesmo pessoas extremamente inteligentes não são imunes. Veja, por exemplo, a falha de previsão do Google Tendências da Gripe . O mundo mudou, e eles não viram isso acontecer.
Para a pergunta do OP: " Em geral, na sua experiência, qual a importância da modelagem sofisticada, como empilhar x simplesmente coletar mais dados e mais recursos para os dados? " Bem, eu sou oficialmente velha, mas minha resposta é que, a menos que você tenha uma Para uma infraestrutura de modelagem realmente robusta, é melhor ter modelos diretos, com um conjunto mínimo de variáveis, em que o relacionamento de entrada para saída seja relativamente direto. Se uma variável mal melhorar sua métrica de perda, deixe de fora. Lembre-se que é um trabalho. Dê um pontapé fora do trabalho em concursos do Kaggle, onde há o incentivo "vá grande ou vá para casa".
Uma exceção seria se a situação comercial exigisse um certo nível de desempenho do modelo, por exemplo, se sua empresa precisasse igualar ou superar o desempenho de um concorrente para obter alguma vantagem (provavelmente em marketing). Mas quando há uma relação linear entre o desempenho do modelo e o ganho nos negócios, os aumentos na complexidade normalmente não justificam o ganho financeiro (consulte "A Netflix nunca usou seu algoritmo de US $ 1 milhão devido a custos de engenharia " - desculpas a @ RUser4512 por citar o mesmo artigo). Porém, em uma competição do Kaggle, esse ganho adicional pode levar a centenas de classificações à medida que você passa nas soluções próximas.
fonte
Uma resposta curta, que é uma citação que eu gosto do livro de Gary Kasparov, Deep Thinking
Trabalho principalmente com dados financeiros de séries temporais e com o processo de coleta de dados, limpeza, processamento e, em seguida, trabalho com os proprietários do problema para descobrir o que eles realmente querem fazer, para então criar recursos e modelos para tentar resolver o problema e, finalmente, examinar retrospectivamente o processo para melhorar na próxima vez.
Todo esse processo é maior que a soma de suas partes. Costumo obter desempenho de generalização 'aceitável' com uma regressão logística / linear e conversando com especialistas em domínio para gerar recursos, muito mais tempo gasto do que gastando tempo ajustando meu modelo aos dados que tenho.
fonte