Novo pacote do R – forecastHybrid

Direto do Peter Stats Blog

The new forecastHybrid package for R by David Shaub and myself provides convenient access to ensemble time series forecasting methods, in any combination of up to five of the modelling approaches from Hyndman’s forecast package. These are auto-selected autoregressive integrated moving average; exponential smoothing state space (both ets and tbats); feed forward neural network with a single hidden layer and lagged inputs; and forecasts of loess-based seasonal decomposition.

Background and motivation
In an earlier post I explored ways that might improve on standard methods for prediction intervals from univariate time series forecasting. One of the tools I used was a convenience function to combine forecasts from Rob Hyndman’s ets and auto.arima functions. David Shaub (with a small contribution from myself) has now built and published an R package forecastHybrid that expands on this idea to create ensembles from other forecasting methods from Hyndman’s forecast package.

The motivation is to make it easy to improve forecasts, both their point estimates and their prediction intervals. It has been well known for many years that taking the average of rival forecast methods improves the performance of forecasts. This new R package aims to make it as easy for people to do this as to fit the individual models in the first place.

Novo pacote do R – forecastHybrid

Gradient Boosted Trees Model no Microsoft R Server

Direto do Revolutions Blog

R is an open source, statistical programming language with millions of users in its community. However, a well-known weakness of R is that it is both single threaded and memory bound, which limits its ability to process big data. With Microsoft R Server (MRS), the enterprise grade distribution of R for advanced analytics, users can continue to work in their preferred R environment with following benefits: the ability to scale to data of any size, potential speed increases of up to one hundred times faster than open source R.

In this article, we give a walk-through on how to build a gradient boosted tree using MRS. We use a simple fraud data data set having approximately 1 million records and 9 columns. The last column “fraudRisk” is the tag: 0 stands for non-fraud and 1 stands for fraud. The following is a snapshot of the data.

Gradient Boosted Trees Model no Microsoft R Server

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