Engenheiros não devem fazer ETL

Uma pedrada de artigo.

But the role sounds really nice, and it’s easy to recruit for. Thus was born the traditional, modern day data science department: data scientists (Report developers aka “thinkers”), data engineers (ETL engineers aka “doers”), and infrastructure engineers (DBAs aka “plumbers”).

Whoops. It would seem that the business intelligence department never really changed, we just added a Hadoop cluster and started calling it by a new name.

Engenheiros não devem fazer ETL

High Dimensional Data Clustering

Grande parte dos avanços em Machine Learning que ocorreram nos últimos 10 anos foram bastante relacionados com alguns aspectos que são:

  1. Algoritmos mais robustos em termos de acurácia (XGBoost);
  2. Métodos Ensemble para a combinação de algoritmos; e
  3. Incorporação de metaheurísticas para melhoria em termos de tempo processamento e otimização de parâmetros

Contudo, um dos aspectos em que ainda há um caminho longo para evolução é em relação ao tratamento de dados com alta dimensionalidade (e.g. com muitos atributos, ou colunas se estivéssemos falando de banco de dados) dado que dependendo desse volume o tempo de processamento torna-se proibitivo.

Isso de maneira geral é um problema essencialmente algorítmico do que computacional.

Muitas técnicas vem se destacando para tratar dessa limitação como Rough Sets, PCA, LDA entre outras, em que o produto final da aplicação de cada uma dessas técnicas é um conjunto de dados menor, o que consequentemente causa uma perda de informação.

Esse artigo abaixo trata de uma forma de lidar com esse problema, sem ter que limitar o conjunto de dados.

É de extrema importância para todos que tenham que lidar com esse tipo de problema em Machine Learning.

High Dimensional Data Clustering

Summary. Clustering in high-dimensional spaces is a recurrent problem in many domains, for example in object recognition. High-dimensional data usually live in different lowdimensional subspaces hidden in the original space. This paper presents a clustering approach which estimates the specific subspace and the intrinsic dimension of each class. Our approach adapts the Gaussian mixture model framework to high-dimensional data and estimates the parameters which best fit the data. We obtain a robust clustering method called HighDimensional Data Clustering (HDDC). We apply HDDC to locate objects in natural images in a probabilistic framework. Experiments on a recently proposed database demonstrate the effectiveness of our clustering method for category localization.

High Dimensional Data Clustering

High Dimensional Data Clustering

Redes Neurais de Profundidade Estocástica

Um ótimo artigo de como a prática continua sendo uma ótima professora em relação ao tratamento de métodos metaheurísticos.

Why is that a big deal? The biggest impediment in applying deep learning (or for that matter any S/E process) in product development is turnaround time. If I spend 1 week training my model and _then_ find it is a pile of shit, because I did not initialize something well or the architecture was missing something, that’s not good. For this reason, everyone I know wants to get the best GPUs or work on the biggest clusters — not just it lets them build more expressive networks but simply they’re super fast. So, any technique that improves experiment turnaround time is welcome!

The idea is ridiculously simple (perhaps why it is effective?): randomly skip layers while training. As a result you have a network that has expected depth really small, while the maximum depth can be in the order of 1000s. In effect, like dropout training, this creates an ensemble model from the 2^L2Lpossible networks for an LL-layer deep network.

Redes Neurais de Profundidade Estocástica

O ocaso das ferramentas proprietárias de Machine Learning e Data Mining

Vendo esse post do KDNuggets que pergunta “se as ferramentas proprietárias ainda são relevantes?” é resposta é um sim, porém com uma relevância menor e estado avançado de atrofia em comparação com as ferramentas open source.

Desses quase 8 anos de Data Mining e Machine Learning é bem fácil identificar as causas desse declínio, e o porque isso foi ótimo para toda a indústria de machine learning como um todo:

  1. Ênfase nas grandes corporações em que as grandes soluções de analytics vieram chegar nas médias empresas somente quando as gigantes começaram a apertar o seu budget enquanto as opções open source já haviam dominado esse mercado;
  2. Ciclos de desenvolvimento lentos em que para se colocar um algoritmo K-Means levava quase 6 meses, enquanto no Scikit-Learn tem sprint que não dura nem 3 meses;
  3. Não incorporar os algoritmos modernos nas suas respectivas plataformas como Redes Neurais, LDA, SVM, entre outros;
  4. Falta de integração com outras plataformas open como Linux ou Debian, ou linguagens como Java, Python, etc;
  5. Tentativa de vendor lock-in em um cenário que a competitividade está aumentando muito e todos estão com orçamentos restritos;
  6. Preço: Eles REALMENTE acham que vão vender suites desktop por R$ 5.000.
  7. Mais investimentos em Marketing do que em pesquisa: O quadrante da Gartner agradece (Veja essa pedrada antológica para entender como esse business funciona).
  8. Perda da guerra das universidades: Todos sabem que a próxima geração de profissionais de Analytics, Machine Learning estão nesse momento nas universidades aprendendo R, usando Weka e demais ferramentas open, mesmo com grandes ferramentas point-and-click. Enquanto isso a Matlab está tentando usar uma tática de desconstrução desnecessária.
  9. E o mais importante: O que eles vendem, empresas muito maiores estão dando ou patrocinando de graça.

Com todo esse cenário ótimo para os entusiastas e profissionais de Machine Learning, as empresas de software proprietário vão ter que se reinventar caso queiram sobreviver em um futuro a médio prazo.

 

O ocaso das ferramentas proprietárias de Machine Learning e Data Mining

Um guia de convolução aritmética para Deep Learning

A guide to convolution arithmetic for deep learning

Vincent Dumoulin, Francesco Visin

We introduce a guide to help deep learning practitioners understand and manipulate convolutional neural network architectures. The guide clarifies the relationship between various properties (input shape, kernel shape, zero padding, strides and output shape) of convolutional, pooling and transposed convolutional layers, as well as the relationship between convolutional and transposed convolutional layers. Relationships are derived for various cases, and are illustrated in order to make them intuitive.

Um guia de convolução aritmética para Deep Learning

Mecanismos de Ataque em Deep Learning via Manipulação de Inputs

Vamos imaginar duas situações que não estão longe da nossa realidade prática:

Situação 1 – Você tem um carro auto-dirigível que faz todo o mapeamento do itinerário verificando condições da estrada, coletando dados sobre o tráfego, e ao longo a viagem o seu carro através de câmeras vai realizando todo o mapeamento dos sinais de trânsito.

Até nesse ponto, você assiste tudo passivamente no banco do motorista e continua fazendo outras milhares de que você deixaria de fazer se estivesse perdendo tempo.

No entanto surge um problema: No momento em que a câmera do carro grava uma placa de “pare” ele entende que aquela placa de regulamentação é na verdade somente um inocente “dê a preferencia”. Se for a via que você estiver atravessando for de mão dupla, ele vai esperar somente uma faixa estar aparentemente vazia e vai continuar andando mesmo se tiver alguém vindo na outra faixa da mesma pista.

Situação 2 – Você está voando na última referência de aviação em que o fabricante da aeronave tem o prazer de falar que este modelo é o único que usa Deep Learning para realizar todo o percurso tornando o piloto um expectador passivo ao vôo.

Um dos trunfos dessa empresa é conseguir realizar vôos intercontinentais com uma máxima eficiência em termos de combustível, este que é um dos maiores custos das companhias aéreas.

Em vôos longos os pilotos ficam em grandes altitudes e deixam os motores em idle (i.e. quase em ponto morto). Isso se faz necessário para economizar combustível. Em grande parte das vezes as aeronaves chegam quase sem combustível (isso explica os mergulhos na hora do pouco em muitos trechos intercontinentais).

Até que surge um problema: Os pilotos não perceberam que não estavam em idle e acabaram com 25% do combustível sem perceber e o pior: estão ficando sem combustível sendo que estão no meio do oceano sem combustível para chegar em terra firme. Dessa forma os pilotos tem algumas opções (a) pouso forçado no mar, o que pode significar alguns dias para chegar um resgate, (b) tentar ir até o limite e correr um risco de uma pane e o avião cair em seguida.

Você pode pensar: “Mas Flavio isso são exemplos extremos, certo?!

Não tão extremos considerando esse evento com o carro da Google, e essa quasi-tragédia.

Mas qual é o ponto?

Muito do hype das redes Deep Learning dias de hoje é devido a sua ótima qualidade de realizar tarefas de classificação, reconhecimento de som e imagem, aproximação de funções, entre outros aspectos.

Contudo, pouco se fala de dois aspectos fundamentais de que sendo as redes do tipo Deep Learning um modelo tipicamente black -box, é virtualmente impossível decodificar o seu processamento, e caso não haja um bom trabalho de definição de arquitetura a tarefa simples de saber se o modelo está com overfitting torna-se algo hercúleo.

Esse paper de Papernot et. al. que tem como título “Practical Black-Box attacks against Deep Learning Systems using Adversarial Examples” expõe esses problemas e faz uma implementação de como uma rede Deep Learning adversária ofensora poderia alterar os resultados de rede Deep Learning tendo informações somente das entradas (input layer) e das saídas (output layer).

Veja esse exemplo de como eles conseguiram fazer isso com alguns sinais:

Fooled by sensros

Usando a base de dados de imagens de placas de trânsito, fica claro que as diferenças são gritantes e o risco de acidentes é alto, quando por exemplo troca-se uma placa de “obras na via” por um simples “dê a preferência“. No primeiro os erros são mais gritantes, em que um 0 vira um 5 ou um 3 vira um 8.

O ponto do artigo é que as redes Deep Learning são ótimas para as tarefas que elas são feitas para fazer, mas se tiver algum elemento no qual uma rede tenha (i) as suas informações de inputs públicas (e.g. dados da bolsa de valores, dados governamentais, sensores diversos, etc) e (ii) o resultado do seu output público (e.g. ordens de compra e venda, informações náuticas em tempo real, etc.) podem ser criadas redes Deep Learning ofensoras para manipulação dos resultados (outputs)  dessas redes.

Esse mecanismo funciona da seguinte forma: Através de pequenas e imperceptíveis manipulações dos sensores que alimentam a camada de entrada (input layer) a Deep Learning ofensora vai monitorando os resultados da Deep Learning atacada (output layer).

A rede ofensora vai colocando mais e mais elementos de manipulação nos sensores e a rede atacada vai perdendo o seu poder de generalização (aprendizado e ação) de forma imperceptível e modifica todo o seu output. O mecanismo responsável por isso é o que os autores chamam de Argumentação Jacobeana que vai de forma auto-recursiva refinando o modelo de ataque.

Ou seja: Esse artigo coloca que não basta somente saber se a rede Deep Learning está de fato aprendendo e generalizando a taxas altíssimas de acurácia, mas sim de saber se os inputs são genuínos e também se os resultados são de fato aquilo o que está sendo determinado.

É uma discussão excelente, e mesmo sabendo que a manipulação de inputs é algo velho nas dinâmicas de sistemas complexos, é interessante ver o mesmo pensamento a sistemas de aprendizado e decisão aplicados.

Practical Black-Box Attacks against Deep Learning Systems using Adversarial Examples

Mecanismos de Ataque em Deep Learning via Manipulação de Inputs

Os números de 2015

Os duendes de estatísticas do WordPress.com prepararam um relatório para o ano de 2015 deste blog.

Aqui está um resumo:

A sala de concertos em Sydney, Opera House tem lugar para 2.700 pessoas. Este blog foi visto por cerca de 59.000 vezes em 2015. Se fosse um show na Opera House, levaria cerca de 22 shows lotados para que muitas pessoas pudessem vê-lo.

Clique aqui para ver o relatório completo

Os números de 2015

Utilização de Random Forests para o problema de compartilhamento de bicicletas em Seattle

Não é mais necessário dizer que o futuro das cidades vai passar pela a análise de dados e principalmente pela a aplicação da inteligência para resolução de problemas dos pagadores de impostos.

Nesse caso específico o problema era que o sistema de trens urbanos de Seattle disponibiliza 500 bicicletas em suas estações e que a oferta dessas bicicletas deve estar ajustada com a demanda de cada estação.

Aqui está o post original, e a abordagem utilizada:

“From clustering, I discovered two distinct ecosystems of bike stations—Seattle, and the University District—based on traffic flows from station to station,” Sadler said. “It turned out that having separate models for each lent itself to much better predictions.”

Sadler modeled hourly supply and hourly demand separately for each of the two ecosystems, summing the result to predict the change in current bike count, based on the current bike count data from the Pronto API. To do this, he used multiple random forest algorithms, each tuned for a specific task.

“Having groups of smaller random forests worked much better than having a single large random forest try to predict everything,” Sadler said. “This is probably due to the different ecosystems having vastly different signals and different types of noise.”

The model—which is actually two models (a random forest for each ecosystem), of which the branches of each are composed of additional random forests—draws from historical demand based on the current season, current hour, and current weekend. It also uses meta information about each station, such as elevation, size, and proximity to other stations. The model leverages this information to discover signals and patterns in ride usage, then predicts based on the signal it finds.

Utilização de Random Forests para o problema de compartilhamento de bicicletas em Seattle

Dismistificando Deep Reinforcement Learning

Um dos tópicos mais quentes em Data Science é a utilização de Deep Learning para problemas ligados à computação visual.

No entanto, nesse post do Nervana uma abordagem que mescla Deep Learning e Reinforcement Learning (Aprendizado por Reforço) é usada para jogar um determinado título no Atari.

Provavelmente esse é o melhor post sobre o assunto, tanto pela a abordagem, quanto pelo grau de profundidade pelo qual o autor trata o assunto.

A ideia geral é que não adianta colocar uma Deep Neural Network para o aprendizado, sendo que em termos combinatórios o espaço de busca é muito grande (1067970  estados pra ser mais preciso).

Dessa forma a abordagem consistiu em combinar Aprendizado por Reforço para formulação da estrutura de recompensa e punição (tanto no curto prazo quanto para ações no longo prazo), cadeia de Markov para modelagem do ambiente/sequências e repetições, e uma abordagem que os autores chamam de Q-Learning.

Q-Learning é explicado pelo autor como:

In Q-learning we define a function Q(s, a) representing the maximum discounted future reward when we perform action a in state s, and continue optimally from that point on.

Screen Shot 2015-12-21 at 11.09.47 AM

The way to think about Q(s, a) is that it is “the best possible score at the end of the game after performing action a in state s“. It is called Q-function, because it represents the “quality” of a certain action in a given state.

Enfim, esse artigo vale a pena para quem quem trabalha com modelagem de problemas não só da computação visual, como também quem trabalha com problemas estruturados.

Dismistificando Deep Reinforcement Learning

Lições em competições do Kaggle

Já é desnecessário dizer o quando o Kaggle vem contribuindo com a comunidade de Data Science, e essas lições do Harasymiv mostram que essas contribuições vão além do básico.

Vejam abaixo:

  • XG Boosting is the engine of choice for structured problems (where feature manufacturing is the key). Now available as python package. Behind XG are the typical suspects – Random Forest and Gradient Boosted Trees. However, hyper parameter tuning is only the few % accuracy points improvement on top, the major breakthroughs in predictive power come from feature manufacturing;
  • Feature manufacturing for structured problems is the key process (or otherwise random permutation of features to find most predictive/telling combination) either by iteratively trying various approaches (as do thousands of individual contributions to Kaggle.com competition) or in an automatic fashion (as done by DataRobot. BTW, DataRobot is based partially in Boston and partially in Ukraine). Some Amazon engineers who attended from Seattle commented they are building a platform which would iteratively try to permute features to randomly (aka “genetic algorithm” fashion) find best features for structured problems, too;
  • For unstructured problems (visuals, text, sound) – Neural Networks run the show (and their deep learning – auto feature extracting – and variants of those). Great example was application of NN to Diabetic Retinopathy problem at Kaggle.com which surpassed in accuracy commercially available products;
  • Kaggle.com is really suitable for two types of problems:
      A problem solved now for which a more accurate solution is highly desirable – any fraction % accuracy turns into millions of $ (e.g. loan default rate prediction) or

    • Problems which were never tackled by machine learning in order to see if ML can help solve them (e.g. EEG readings to predict epilepsy);
  • Don’t expect data scientists to perform best in the office! Anthony mentioned his first successful 24h data science hackathon when his senior was guiding him 5 min, coding himself for 15 min and then playing basketball for 40 min each hour. Personally, I find walking, gardening and running are great creativity boosters. How will you work tomorrow?:)

Lições em competições do Kaggle

O que é ideal no modelo: Acurácia ou Explicabilidade?

Esse post provocador do Inference vem em uma boa hora dado que está um hype bem alto a respeito de Deep Learning, e há muitas dúvidas a respeito do seu poder preditivo, este que muitas vezes flertam com o overfitting mas esse não é o motivo desse post.

O ponto principal que eu gostaria de ressaltar é que de acordo com o autor, em um dos workshops do NIPS sobre Aprendizado Black Box e Inferência, em que o principal ponto dos conferencistas foi que o trade-off entre acurácia e explicabilidade não somente é falso, como a explicabilidade não faz parte da propriedade do modelo.

Para quem não sabe o que é esse trade-off, os autores exemplificam no paper:

  • accurate but black-box: The best classification accuracy is typically achieved by black-box models such as Gaussian processes, neural networks or random forests, or complicated ensembles of all of these. Just look at the kaggle leaderboards. These are called black-box and are often criticised because their inner workings are really hard to understand. They don’t, in general, provide a clear explanation of the reasons they made a certain prediction, they just spit out a probability.
  • white-box but weak: On the other end of the spectrum, models whose predictions are easy to understand and communicate are usually very impoverished in their predictive capacity (linear regression, a single decision tree) or are inflexible and computationally cumbersome (explicit graphical models).

Em outras palavras, os autores argumentam que, o fator de explicabilidade de um modelo é muito mais uma confabulaçcão a posteriori do que funcionou ou não, do que algo que deveria ser uma propriedade do modelo.

Como diria Nassim Taleb em Fooled By Randomness, a mente humana é uma máquina de realizar previsões e contar histórias… A posteriori

Isso é, fazer divagações em relação ao funcionamento de um determinado modelo de acordo com propriedades do mesmo, não faz sentido, na ótica dos autores.

No entanto, o ponto que eu acho que não foi tocado é de que com o crescimento dos modelos cada vez mais black-box como o do Netflix e afins, o principal fator do aprendizado de máquina (Machine Learning) é que de uma maneira ou de outra não conseguimos colocar o aspecto de cognição para ajustar ou mesmo saber o que está dando certo ou errado com o modelo em termos paramétricos e principalmente estruturais.

Não é preciso ir muito longe para ver que esse é um ponto pertinente, basta ver a indústria financeira, em que centenas de bilhões de dólares residem em modelos que muitas vezes os operadores não sabem nem o que está acontecendo.

Os eventos como o Flash Crash de 2010, o fátidico episódio da Knight Capital que perdeu USD 440 milhões em 30 minutos, e do London Whale que custou mais de USD 2 bilhões devido a erros nas estratégias de alguns derivativos mostram que ainda o poder de discernimento e análise do agente humano ainda é necessário para o refinamento do modelo, este que vai muito além da combinação paramétrica; mas que chega a aspectos estruturais do modelo como o todo.

A discussão é boa e ainda não vai parar por aqui.

Link para artigo original: TURNER, Ryan. A Model Explanation System

Paper Turner NIPS 2015

O que é ideal no modelo: Acurácia ou Explicabilidade?