Big Data, Dispositivos Móveis, Redes Sociais e Cloud Computing – Ou a Mina de Ouro do Data Scientist

Tive uma conversa interessante com um colega de trabalho na semana passada. Falávamos sobre como era impressionante a relutância de alguns profisssionais de BI em se adaptar à realidade do Big Data. O alvo do nosso veneno era um cara do departamento de IT, um puta ninja de RDBMS em geral,  que não conseguia entender o porquê de alguém querer usar um cluster Hadoop ou bancos de dados NoSQL como plataforma padrão de armazenamento e análise de dados  – afinal existiam caras como ele que, com técnicas arcanas de indexação e a moderação de três fóruns de Oracle 11g no currículo, são capazes de otimizar qualquer query. Basta plugar o Microstrategy e voilà, você pode analisar tudo à vontade. Segundo ele, essas tecnologias de Big Data, deviam ser usadas pra tratar de quantidades massivas de dados, afinal o nome não é Big Data? Pra quê mexer em time que está ganhando?

Certo e errado. Um cluster Hadoop, por exemplo, serve sim para processar quantidades massivas de dados, mas essa passa longe de ser a única serventia dessa e de outras plataformas de Big Data. Além disso, Bancos Relacionais e ferramentas de BI convencionais estão LONGE de ser o time que está ganhando. E é esse o assunto do post de hoje.

Mas primeiro, antes de falar das ferramentas de Big Data em si, deixa eu falar sobre Redes Sociais, Mobile e Cloud e mostrar pro meu colega por quê a transição em direção a essas ferramentas de Big Data é não só uma boa idéia, mas importante pra sobrevivência de qualquer um que queira fazer negócios na Era da Informação.

A Terceira Plataforma e a Nova Revolução da Computação

No início eram os Mainframes.

Tipo um walk-in Closet, só que um Computador

Tipo um walk-in Closet, só que um Computador

Nos anos 70 e 80, gigantes como a IBM dominavam um mercado onde o principal propósito da computação comercial era fornecer, à quem pudesse pagar, poder analítico para realizar digitalmente e eficientemente atividades comuns no mundo empresarial, tais como organizar e classificar arquivos, manter e acessar históricos de transações, verificar contas e produzir relatórios contábeis complexos, realizar projeções financeiras… enfim. Coisas importantes para o bom funcionamento de qualquer empresa e que costumavam ser feitas por múltiplos times, muitas vezes enormes, de funcionários. Com a tecnologia dos Mainframes, era possível reduzir drásticamente esse número de recursos humanos, reduzindo também custos, chateação com sindicatos e ainda por cima realizar as tarefas destes funcionários em menos tempo! Quem não iria querer? E assim, os gigantes da chamada Primeira Plataforma ganharam rios de dinheiro e ditaram o ritmo da inovação tecnológica nas décadas à seguir… a redução exponencial do tamanho dos componentes, aliada ao aumento também exponencial do poder de processamento, logo despertou em mentes inovadoras a idéia do computador de mesa – o Desktop. 

E aí vieram os Profetas.

billandsteve

Todo mundo já está cansado de ouvir a história de como os ‘Steves’ Jobs e Wozniack criaram computadores na garagem da casa dos pais, fundaram a Apple e aí o Bill Gates e o Paul Allen vieram com a idéia do sistema operacional com interface gráfica amigável e todo o resto da lenda. O fato é que nasceu o PC e, muito a contra-gosto dos gigantes da época, como a IBM, o sonho de Bill Gates se tronou realidade e hoje podemos dizer que há um computador para cada mesa de escritório no mundo (Tá. Tô exagerando. Não venha me falar das criancinhas na África, você entendeu o ponto). O que talvez os pioneiros do Computador Pessoal não esperassem na época, é que esse novo conceito de computação descentralizada – o oposto do Mainframe – faria muito mais do que simplesmente jogar tarefas diárias do mundo corporativo de volta nas mãos de funcionários, com ferramentas como o Microsoft Office, a um custo e complexidade muito menor do que o de manter um Mainframe. Com o advento de tecnologias de vídeo, conectividade e de novas linguagens de programação cada vez mais simples de usar, surgiram aplicações da computação como os Jogos, a Internet, aplicações científicas utilizáveis por nós mortais fora da elite universitária, pessoas passaram a ter impressoras em casa… uma verdadeira revolução em vários níveis da sociedade, que agora passava a ter acesso à computação e à teconologia de ponta diretamente nas mesas de pessoas comuns. Mais ainda, o surgimento da arquitetura Cliente-Servidor, possibilitou o advento da Internet, mudando a forma como interagimos uns com os outros e com o mundo, além de mudar radicalmente a forma como as atividades do dia-a-dia corporativo eram feitas, através de, vejam só, Bancos de Dados Relacionais e Data Warehouses em servidores remotos, aliados à novas ferramentas de análise voltadas a este tipo de tecnologia, muito embora os Mainframes tenham utilidade até hoje e sejam muito usados principalmente no ramo bancário-financeiro. Em suma, a Segunda Plataforma, não matou o Mainframe. Mas mudou completamente a cara do Mercado, onde os gigantes eram aqueles que forneciam Hardware, Software e Inovação voltados ao Desktop ou a Servidores. Empresas como Microsoft, Oracle, Dell e HP foram os reis desta plataforma. Perceba que, embora as tecnologias da Segunda Plataforma ainda sejam muito relevantes, me refiro a este período do passado por causa da….

Terceira Plataforma – Facebook. Twitter. Smartphones. WhatsApp. Apps. Google Drive. Amazon. Yelp. Airbnb. Uber. Candy Crush. Youtube. World of Warcraft. Coursera. Pra citar alguns poucos exmplos de nomes de coisas que você com certeza usou ou já ouviu falar.

frabz-MARK-ZUCKERBERG-Stalking-You-Since-2004-1afe61

São nomes que provavelmente evocam idéias muito diferentes em nossas cabeças, mas qual é a coisa que todos estes nomes tem em comum?

Perceba que utilizei o verbo “usar” e não “acessar” ou “visualizar”. Todos eles são serviços.

Isso é a terceira plataforma. É a computação e a arquitetura digital orientada à Serviços. Com base na revolução em conectividade possibilitada pela arquitetura Cliente-Servidor da Segunda Plataforma, a nova revolução começou há apenas alguns anos atrás quando começamos a falar em Cloud Computing e Software as a Service. Paralelamente, fora do mundo corporativo, surgiam Redes Sociais cada vez mais bem-estruturadas e com um número cada vez maior de adeptos. Junte a isso o advento dos Smartphones e o conceito dos Apps, seguido pelos Tablets e dispositivos móveis em geral e o que temos é um paradigma onde o Usuário é o centro das atenções e não mais seu Desktop – queremos ter acesso à Serviços on-line não importa onde estivermos. Programas são cada vez menos desenvolvidos com uma plataforma específica em mente à qual o usuário deverá ter acesso se quiser utilizá-lo. Um exemplo é o próprio Microsoft Office, que se antes era vendido como um programa para ser instalado no seu computador e possibilitar que você execute tarefas de escritório em seu computador quando quisesse, desde que tenha acesso a seu PC, agora é vendido como a assinatura de um serviço – pouco importa onde – e por “onde” aqui quero dizer localização geográfica – o programa em si está rodando, tudo que o usuário precisa fazer é se logar ao serviço e ele poderá usar a suite Office de qualquer plataforma que quiser: seja ela um celular, um laptop ou um tablet.

Trazendo a discussão de volta para o mundo da análise de dados, o que importa para o Data Scientist nessa revolução são o volume e a variedade de dados que essa mudança de paradigma está gerando. Se antes entravamos em um portal de notícias onde a única interação entre usuário e página era a leitura do conteúdo por parte do usuário,  com no máximo este deixando um comentário, agora nós geramos volumes monstruosos de conteúdo a cada vez que utilizamos um serviço como o Facebook ou o Instagram – fazemos upload de inúmeras imagens, comentamos conteúdo, debatemos notícias, distribuimos likes e postamos artigos, as vezes várias vezes por dia. E queremos interagir com tudo isso em tempo-real… temos cada vez menos paciência com telas de “loading” e demora na resposta de um comando qualquer. Por trás de todas essas ações, além de existir uma infra-estrutura de armazenamento e recuperação de dados completamente nova, existe uma mina de ouro do ponto de vista comercial – pessoas estão dizendo aos provedores de serviço, como o Google e o Twitter, com uma riqueza enorme de detahes, quem elas são, de onde vêm, do que gostam e do que não gostam, quais são seus hábitos de consumo e seus desejos materiais. Pare pra pensar… quantas vezes o Google, o Facebook ou a Amazon não “adivinharam” algo sobre você? Seja o seu novo emprego, a mudança de curso na universidade que você está pensando em fazer ou mesmo a gravidez da sua esposa, quantas vezes estes serviços já não te recomendaram produtos  ou conteúdo relacionados a fatos sobre os quais você tem certeza que nunca postou na internet? Por trás dessa “mágica”, há um algoritmo estatístico e, por trás desse algoritmo, há um Data Scientist.

Mas antes de entrar de vez no papel do Data Scientist nesta revolução, é preciso falar da forma como os dados são armazenados e finalmente mostrar pro meu colega porque ele deveria estar aprendendo NoSQL e Hadoop pra ontem.

Na segunda plataforma, os Bancos de Dados Relacionais revolucionaram a forma de armazenar dados, no ínicio facilitando a organização e o armazenamento de transações no mundo corporativo e, mais tarde, se tornando a forma padrão de disponibilzar conteúdo dinâmicamente em páginas da web. A idéia é simples – para cada transação, por exemplo, uma venda ou um pagamento realizados, adiciona-se uma linha à uma tabela bi-dimensional, onde as colunas são as propriedades de interesse da transação, por exemplo “Quem realizou a venda” e “Qual o valor” ou “Quem recebeu o pagamento” e “Quando o pagamento foi realizado”.  Tomando este conceito simples como base, durante os últimos 20 anos foram desenvolvidas várias técnicas e paradigmas para se armazenar e relacionar dados de maneira mais complexa. Por exemplo, porque manteríamos uma tabela de vendas e uma de pagamentos, sendo que os pagadores e vendedores estão necessariamente relacionados pois um vende e o outro compra? Não poderíamos de alguma forma juntar estas duas tabelas? Ou ainda, vendas e pagamentos ocorrem todos em endereços que já conhecemos bem, não poderíamos criar uma tabela só com dados geográficos e elminar essas colunas das tabelas de vendas e pagamentos? Enfim, técnicas como a separação em tabelas dimensionais e tabelas fato, OLAP, OLTP foram criadas para facilitar e otimizar o que realmente interessa em um banco de dados: a busca e a recuperação de dados. Com modelos complexos, onde várias tabelas estão interligadas entre si através de campos chamados “chaves”, é possível buscar e retornar quase qualquer conjunto de Colunas que desejarmos, desde que as relações entre tabelas sejam respeitadas. Estas buscas são feitas através da linguagem SQL e a complexidade de um comando nesta linguagem depende do conjunto de Colunas que desejamos retornar. De posse de um dado conjunto de Colunas, que formam efetivamente uma nova tabela, um analista pode então aplicar técnicas estatísticas, gerar relatórios, gráficos e tudo mais.

Mas e no caso de um Serviço como o Facebook, por exemplo?

O número de combinações possíveis de tipos de entradas que você pode causar num banco de dados com um simples update de status no Facebook é enorme! Por exemplo, você pode postar um texto, com uma foto, que pode ou não ser um gif animado, marcar ou não uma ou várias pessoas, pode postar um vídeo ao invés de uma foto, ou os dois, e seus amigos podem postar fotos ou vídeos nos comentários, marcando uma ou nenhuma ou várias pessoas no texto, as fotos e os vídeos podem ou não serem links externos, você pode postar no seu mural, no mural de um amigo, o post pode ser visto por todos, ou por amigos, ou por ninguém, o post pode ser em um grupo, que pode ser aberto ao público ou fechado para um certo número de usuários. Fora metadados, como localização geográfica, tempo, fuso-horário e sabe-se lá mais o quê o Facebook registra sobre seus posts… enfim. O fato é que um modelo relacional para abrigar o tipo dinâmico de interações a que estamos acostumados no Facebook seria Ultra-Complicado e, quanto mais complicado é o modelo, mais difícil fica de realizar uma pesquisa no banco de dados, ou seja, demora mais tempo para um conjunto de Colunas específico ser retornado. Em outras palavras, a deslizada na tela do iPhone com o App do Facebook aberto, ia demorar uma eternidade até que você pudesse ver algum conteúdo. Além disso, na direção oposta, esse tipo de post simples é realizado milhões de vezes por minuto ao redor do mundo, fora de questão tentar parsear e adequar estes dados a um modelo relacional antes de torná-los disponíveis de volta para o usuário – eles querem tudo em tempo-real! Como então lidar com esse volume massivo de dados desorganizados chegando a todo instante e sendo requisitado pelos usuários na mesma velocidade?

E é aí que entram o Hadoop e os Bancos NoSQL.

Ao invés de criar um modelo relacional ultra-complexo, abolimos o conceito de “esquema” (que são as colunas que uma linha numa certa tabela deve ter) e enfiamos uma nova entrada no banco de dados do jeito que ela vier. Se ela tem o mesmo número de propriedades que a entrada anterior, ou se são as mesmas propriedades, pouco importa – as buscas no banco de dados serão feitas apenas pela Chave de uma determinada entrada, que irá conter todas as propriedades relacionadas a ela em uma única entidade, sem a necessidade de escanear múltiplas tabelas para retornar o conjunto desejado de Colunas. Isto abre a possibilidade de armazenarmos dados não-estruturados, ou seja, com “esquemas” dinâmicos – algo complicadíssimo de se fazer com bancos relacionais – e abre as portas para Data Scientists buscarem valor nos dados de uma forma nunca antes vista. Ferramentas como o HBase (baseado no Hadoop), Cassandra, MongoDB, outros bancos NoSQL, bancos baseados em Grafos como o Neo4j e até mesmo o próprio HDFS do Hadoop são os carros-chefe dessa nova era do armazenamento e análise de dados.

Tá, mas e na hora de analisar estes dados? Aí precisa de um “esquema”, certo? Como eu vou ajustar um modelo de regressão sem saber quais são as variáveis?

Deixa eu começar a responder essa descendo a lenha nos Bancos Relacionais de novo.

Profissionais da área de estatística, e mais recentemente de Data Science, gostam de ter flexibilidade quando fazem seu trabalho, no sentido de poder manipular bases de dados com o mínimo possível de limitações. Profissionais assim querem testar diferentes transformações das variáveis de interesse, incluir e excluir colunas em uma tabela, cruzar dados de outras tantas tabelas, testar um modelo e tunar seus parâmetros, jogar tudo fora e recomeçar do início várias vezes… enfim – querem ter flexibilidade total para fazer o que quiserem com seus dados, desde a fase de análise exploratória, passando pelo ajuste de modelos estatísticos até a visualização dos resultados. E isso é complicado no modelo relacional.

Quem trabalha na área, sabe que tem toda uma arte, além da estatística que já é difícil, em pegar um banco relacional e criar as Queries em SQL certas pra retornar o conjunto de colunas que você quer para ajustar um modelo.

Seria uma maravilha se você, ao invés de ficar lutando uma tarde inteira com SQL, pudesse simplesmente arrancar do banco uma tabela só com as colunas que você precisa, tudo já filtrado pelos critérios que você quer, não é? E se você quiser testar outro modelo com uma variável a mais, seria legal poder simplesmente adicionar mais uma coluna na sua tabela, certo? Tipo no Excel… corta aqui e cola ali. Ah… seria bom mesmo.

E esse é o problema com os bancos de dados relacionais tradicionais. Eles não foram feitos para o Data Scientist ir lá e se divertir quando e como quiser. Foram feitos para armazenar dados transacionais. Ponto.

Com o Hadoop, o negócio é diferente. O Hadoop é um grande Lixão de dados. Ele é completamente agnóstico ao que você está colocando no HDFS – podem ser arquivos XML, arquivos texto, logs, aquivos CSV, arquivos binários… não importa. O analista pode escrever código, usando ferramentas como o Pig, o Hive ou mesmo linguagens como Java e Python, para extrair informação de qualquer tipo de arquivo e ainda com a vantagem de o fazer em sistema distribuído, capaz de processar quantidades massivas destes arquivos! Com esta informação extraída de todas estas diversas fontes ao mesmo tempo, podemos criar uma tabela no sentido tradicional – linhas e colunas e ajustar nossos modelos estatísticos. Quero mais variáveis? Retorne ao código que escreveu para extrair as informações das fontes e coloque mais colunas no output. Simples assim.

Não estou dizendo que bancos relacionais são inúteis ou que eles já eram agora que o Big Data chegou pra ficar. Bancos SQL tradicionais podem – e frequentemente são – fontes de dados que cruzaremos com fontes não-estruturadas para ajustar modelos estatísticos! Ninguém vai se livrar daquele banco Oracle que tá há mais de 10 anos armazenando dados preciosos sobre sua empresa. O que faremos é utilizar esses dados numa perspectiva mais ampla! Ao invés de tentar adequar tudo ao banco Oracle em questão.

 

Na verdade, estes bancos são muito úteis em data science – o grande poder deles está na agregação dos dados. Ou seja, usar o banco de dados como uma base para construir coisas como modelos dimensionais e os chamados cubos, que são representações dos dados com as quais é possível observá-los por diferentes perspectivas, realizar drill-donws em hierarquias de medidas e ter insights. Daí podemos utilizar estes resultados para enriquecer um modelo ajustado em outras fontes externas ao banco, ou podemos visualizar estes insights em gráficos e Dashboards dentro dos limites do BI tradicional – isto é, um cliente tem algum requisito sobre coisas que ele gostaria de ver em um Dashboard e o analista de BI agrega o conteúdo do banco de dados da melhor maneira possível para entregar o que foi pedido.

Não há nada de errado com isso. Existem inúmeros programas fantásticos para esse tipo de tarefa, como o Microstrategy, o SQL Server Analysis Services e o OBIEE; e o BI tradicional é uma ótima forma de controlar transações, identificar ralos financeiros e identificar possíveis oportunidades de negócios, entre outras inúmeras aplicações.

Mas tudo isso é olhar pelo retrovisor.

O Data Scientist não está interessado apenas no que os dados podem dizer sobre a situação hoje, ou melhor, como agir hoje dado o que observamos ontem. Ele está interessado em predições – o que a série de dados passada pode nos dizer sobre o que vai acontecer amanhã. Ele não está interessado apenas em encontrar oportunidades de negócios, indentificando potenciais clientes com um problema que sua empresa pode resolver – ele quer saber quais serão as condições do possível cliente amanhã, para oferecer hoje a solução do problema antes que ele aconteça. Data Science é proatividade. BI é reatividade.

Voltando à conversa que tive com meu colega – você pode até argumentar “Mas o cara do IT até que tem razão, se o banco de dados tiver as queries certas otimizadas e a quantidade de dados não for muito monstruosa, dá pra conectar com o SAS ou com o R e analisar os dados lá.”.

Sim, é verdade. Mas e se você pudesse controlar o fluxo de dados inteiro, sem depender de um DBA otimizando certas queries? E se você pudesse usar as tabelas que quiser sem ninguém te vetar pra não afetar a performance do banco? E se você pudesse inserir colunas na suas tabelas “on the fly” sem precisar desmontar o modelo inteiro pra inserir as colunas nas tabelas fato? Aliás, pra que esse negócio de modelo semântico, dimensões e tabelas fato? E se você pudesse fazer um ETL em algumas horas, puxando dados de fontes como arquivos texto, bancos relacionais e tabelas do excel, tudo ao mesmo tempo, criar quantas tabelas quiser, usar, mudar tudo ou jogar tudo fora quando quiser? Tudo isso independentemente de ter muitos ou poucos dados?

Então, por hoje é isso aí.

 

 

 

Publicado em Uncategorized | Deixe um comentário

Problemas comuns em Big Data – Parte I: Muitas variáveis e poucas observações (ou P>>N)

Após quase exatamente um ano sem postar no blog, este que vos escreve decidiu que era hora de levantar do sofá, voltar aqui e passar pra frente os frutos desses 12 meses de estudos e trabalho em Data Science.

Deixa eu começar contando algumas mudanças que aconteceram em minha vida neste último ano. Troquei Brasília, Brasil por Montréal, Canadá; me tornei Gerente de Programas em uma grande empresa norte-americana e fui aceito no programa de pós-graduação em Data Mining da Stanford University (!). Deixando os detalhes de lado, o fato é que cada uma dessas mudanças me permitiu ter um contato ainda maior com as mais novas tecnologias e aplicações do Data Science – na verdade meu trabalho como Gerente de Programas na EMC Corporation consiste exatamente em coordenar a transição do paradigma de BI tradicional (Bancos de dados estruturados, ETLs de 3 dias, limitações pra todos os lados e ferramentas proprietárias caríssimas) ao paradigma do Big Data (Bancos de dados estruturados e não-estruturados ao mesmo tempo, ETLs de algumas horas, quase nenhum limte sobre o que se pode fazer e ferramentas 100% open source e gratuitas – Chupem fanboys da Oracle e da SAP!).

E agora venho aqui compartilhar um pouco do que aprendi com quem tiver paciência pra ler este blog.

Sem mais delongas, estou reinaugurando o blog com um mais post em duas partes (divide et impera amigos… aprendam isso!). Desta vez vou falar sobre dois problemas que encontrei trabalhando com Big Data, -que na verdade não são novidade nenhuma no mundo da Estatística – e algumas estratégias modernas para resolvê-los: Muitas variáveis para poucas observações e Muitas observações com potencialmente muitas variáveis também.

Vamos começar com o problema de Muitas variáveis (p) para poucas observações (N) (ou simplesmente P>>N). Imagine a seguinte situação: você é um pesquisador da área de oncologia e, após muitos estudos teóricos, decidiu que quer realizar um experimento onde ratos são expostos à uma certa substância e em seguida têm seu DNA analisado em busca de alterações no nível de expressão de vários genes. Após algum tempo, você irá verificar se houve ou não incidência de câncer em cada rodedor. Seu objetivo é verificar se a substância está ou não relacionada com a incidência de câncer. O problema é que essa substância é muito difícil de conseguir, então o seu laboratório só pode fornecer o bastante para testar em 250 roedores. Mas, para cada um, o experimento irá gerar cerca de 5000 variáveis de interesse com base na expressão genética e na análise de pares-base de nucleotídeos que você vai obter com o DNA. Você tem em mãos um problema onde a quantidade de variáveis é muito maior que o número de observações… e agora?

O PROBLEMA

Este tipo de situação, muito comum em aplicações da bioinformática como genômica e proteômica, é encontrado em qualquer tipo de aplicação da estatística onde é custoso – ou impossível – obter observações, mas é fácil realizar uma grande quantidade medições uma vez que se tem uma observação em mãos. Estudos demográficos amplos no campo de planejamento de políticas públicas e experimentos na indústria farmacêutica são outros exemplos de situações onde este problema aparece frequentemente.

O que torna este tipo de problema efetivamente um PROBLEMA é que a grande maioria dos métodos modernos de análise de dados, por diferentes razões, simplesmente falha na presença de muitas variáveis para poucas observações. Modelos Lineares Generalizados, por exemplo, falham pois a matriz do modelo não tem Posto completo nestas condições. Random Forests falha pois a probabilidade de selecionar variáveis importantes diminui drasticamente. Análise de Clusters e Métodos baseados em distânicias no plano cartesiano em geral falham devido à maldição da dimensionalidadeRedes Neurais falham pois a variância dispara na presença de variáveis pouco importantes. Enfim, se quase todos os métodos mais conhecidos falham, o que os analistas fazem então para realizar boas predições quando p>>N?

Uma suposição razoável quando temos um número muito grande de variáveis disponível para treinar um modelo é que nem todas serão bons preditores da uma dada variável resposta. Em outras palavras, existirão variáveis que são muito bons preditores da sua variável resposta, outras que são preditores medíocres, outras que são maus preditores e outras tantas variáveis que são objetivamente lixo – ou seja, não parecem estar correlacionadas com a variável resposta de nenhuma maneira. Mais ainda – mesmo dentro do grupo de bons preditores, podem ainda existir variáveis redundantes – como duas medidas diferentes da mesma coisa (peso em gramas e libras, por exemplo), ou variáveis que sejam correlacionadas com uma terceira variável que, essa sim, é a melhor preditora da variável resposta. Partindo desse pressuposto de que não precisamos de TODAS as variáveis disponíveis, poderíamos então realizar uma análise profunda e tentar, “na mão”, chegar a um conjunto de algumas poucas variáveis que devem ser usadas para treinar o modelo, resolvendo assim o problema de p ser maior que N. O problema com esse método é que ele geralmente é intratável. Digamos que queiramos apenas nos livrar de variáveis redundantes por exemplo. Neste caso, teríamos que começar por comparar todas os pares possíveis de variáveis. Mas se tivermos apenas 100 variáveis, faça as contas e veja a quantidade de pares que teríamos de analisar… O ideal seria então que o próprio algoritmo de treinamento do modelo pudesse realizar esta seleção de variáveis automaticamente, seja combinando variáveis de alguma forma para diminuir o número delas ou incluindo apenas “boas” variáveis no modelo e ignorando as “ruins”.

AS SOLUÇÕES

Neste post vou falar sobre uma das soluções para o problema p>>N que formam a base para a maioria dos algorítmos complexos usados na indústria: Regularização –  formas de realizar uma seleção de variáveis a partir de um conjunto inicial (ou ao menos de diminuir os efeitos da presença da maioria delas no modelo final). Uma outra solução é conhecida como Redução de dimensionalidade e são formas de criar novas variáveis a partir da combinação de várias outras, diminuindo assim o número delas e possibilitando o uso das técnicas tradicionais normalmente.

REGULARIZAÇÃO

Em Machine Learning e em análise preditiva em geral, o problema a ser resolvido é sempre o mesmo: ajustar uma função a uma massa de dados, de tal forma que a função ajustada represente os dados da melhor maneira possível, o que nos possibilita usar a função para predizer valores não-observados. Matematicamente, isso equivale a resolver o seguinte problema de otimização:

\min\limits_{\theta} E[L(f(X,\theta)-Y)]

Isto é, encontrar os parâmetros \theta de uma certa função f que minimizam o valor esperado da função custo L (loss na literatura em inglês) avaliada no ponto f(X)-Y, ou seja, a diferença entre sua predição e o valor real da variável resposta Y. Em outras palavras, queremos minimizar a média populacional de alguma medida do custo em errar na predição da variável resposta Y usando a função f(X).

Com isso em mente, podemos enxergar cada técnica individual como uma restrição à classe de funções que queremos usar para tentar prever a resposta Y. Procurar uma função qualquer no espaço de todas as funções que existem e otimizar seus parâmetros para ajustá-la aos dados é impraticável e, surpreendentemente, não resultaria em boas predições. Por isso nos limitamos, por exemplo, à classe das funções lineares (GLM’s), à classe das aproximações localmente constantes (Árvores de decisão e Nearest Neighbors), à classe das funções localmente lineares (Regressão Linear Local)… enfim, cada método restringe a otimização dos parâmtros theta a uma certa classe de funções.

O problema é que, simplesmente resolvendo este problema de otimização para uma dada classe de funções, estaremos tentando enfiar TODAS as variáveis X na construção da função-alvo. Como já disse ali em cima, se o número de variáveis for maior que o número de observações N, a grande maioria dos métodos conhecidos irá falhar.

Uma forma de restringir o número de variáveis que efetivamente entrarão no modelo é impor um custo, ou penalidade, ao algoritmo de treinamento, de forma que ele entenda que quanto mais variáveis ele tentar incluir no modelo, pior para nós. Ou seja, ele deve penalizar modelos com muitas variáveis e favorecer modelos esparsos. Matematicamente, podemos re-escrever o problema de otimização original ali de cima da seguinte forma:

\min\limits_{\theta} E[L(f(X,\theta)-Y)] s.a. P(\theta)<t

Onde t é um número real entre zero e infinito e é a função penalidade.

Em português, isto pode ser lido como “Ok algoritmo, você precisa de 1000 dólares pra resolver o problema de otimização original, certo? Eu te dou dólares (onde t<1000). Se vira.”. Na prática, se for igual à zero, só existirá a solução trivial onde todos os coeficientes são zero para o problema e você estará ignorando completamente os dados – má idéia. Se t for infinito, você estará dando recursos infinitos ao algoritmo e ele terminará tentando resolver o problema original irrestrito – não é o que queremos. A idéia é então variar para encontrar uma solução que seja um compromisso entre os dois extremos: algumas variáveis serão incluídas, mas não todas.

“Ok. Mas os meus professores na faculdade viviam dizendo que otimização restrita é ultra-difícil e que eu tenho que ser doutor em pesquisa operacional pra resolver”, você me diz. Basta aplicar a técnica dos multiplicadores de Lagrange e você poderá resolver o seguinte problema equivalente sem nem ter acabado sua graduação:

\min\limits_{\theta} E[L(f(X,\theta)-Y)] +\lambda P(\theta)

Onde lambda é um número real entre zero e infinito.

Existe uma relação entre o ali em cima e o lambda da formulação Lagrangiana do problema: eles são inversamente proporcionais. Ou seja, se antes quando era zero, a solução era a trivial e quando ele era infinito a solução era irrestrita, agora vale o contrário: quando lambda é zero, estamos cortando a penalidade fora do problema e a solução é a do problema irrestrito. Já quando lambda tende ao infinito, a solução tende à trivial.

“Ok. Bacana. Mas quem diabos são as funções L e P? E como eu calculo o valor esperado populacional?”. Você vai escolher uma função L e uma função P adequadas ao seu problema e você não calcula o valor esperado populacional – isso aqui é estatística e portanto você não conhece a população, somente uma amostra dela. Logo, iremos estimar o valor esperado ao invés de calcular exatamente, basta substituir o valor esperado pelo seu estimador não-viesado – a média amostral. O problema de otimização então fica assim:

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda P(\theta)

Se a função perda L for a função quadrática, uma escolha comum na prática, o primeiro termo do problema vira o SSE, ou a soma de quadrados do erro como vimos no post sobre regressão linear. Mas esta não é a única função perda usada na prática – cada tipo de problema e cada método para resolvê-lo funciona melhor com um tipo de função. Já no caso da função penalidade P, a escolha depende somente do que é que estamos tentando fazer. Existem funções penalidade usadas para manter os coeficientes theta dentro de algum certo intervalo, outras os transformam em uma quantidade cíclica, como o seno ou o cosseno. Estas são, no entanto, aplicações muito incomuns da regularização – a mais comum é de longe a seleção de variáveis. Ou seja, queremos manter a maioria dos coeficientes perto de ou exatamente iguais à zero. E aqui vão algumas opções para fazer isso.

A FAMÍLIA DAS POTÊNCIAS

Com a idéia de penalizar coeficientes pelo tamanho, ou seja, de forçar o algoritmo de trienamento a manter coeficientes de theta proximos ou iguais a zero, foi criada a família de funções penalidade baseadas em potências. O mecanismo é simples: quanto maior for o valor absoluto de um coeficiente, maior é a penalidade atribuída e menor a chance daquela estimativa entrar no modelo final. Com esta família, é fácil ver o conceito de um “orçamento” limitado para estimar os coeficientes theta – estimativas muito grandes em valor absoluto são penalizadas para não estourar o limite. Em geral, o problema de otimização com uma penalidade da família das potências pode ser escrito como:

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda \sum_{j=1}^{K}|\theta_j|^q

Onde q é um número real maior que zero.

Essa família também é conhecida como Norma L-q, pois na literatura de Álgera Linear o valor absoluto do produto interno de um vetor por si próprio elevado à q-ésima potência é um operador conhecido como Norma. Em teoria, você poderia usar q igual a qualquer número real que quiser, mas para q’s racionais, a resposta é geralmente muito próxima do q inteiro mais próximo, ou então muito difícil de se obter. Por isso os valores de q mais usados são os seguintes:

q=2 – REGRESSÃO RIDGE

Quando q é igual a 2, a função penalidade é a soma dos quadrados dos coeficientes theta. Esse problema de otimização é conhecido na literatura estatística como “Regressão Ridge” e foi a motivação original para a regularização. Lá nos idos de 1970, Tukey e companhia resolveram testar um “truque sujo” para poder usar a regressão linear múltipla em condições sub-determinadas, ou seja, quando o número de variáveis p é maior que o número de observações N. Eles perceberam que o problema vinha da equação matricial que representa a estimativa dos coeficientes beta da reta de regressão – quando p>N, haveria sempre uma matriz singular (com determinante igual a zero) na equação. Para de-singularizar essa matriz, bastava somar uma constante lambda muuuuito pequena à sua diagonal e estaria garantido que o determinante nunca seria zero. Como essa constante era pequena (idealmente da ordem de 0.001 por exemplo), o resultado obtido poderia ser considerado uma boa aproximação da verdadeira matriz de coeficientes beta. Mais tarde, foi demonstrado que esse truque equivale a resolver o problema de regressão Ridge acima para um determinado valor de lambda.

Histórico à parte, o que você deve saber ao utilizar a penalidade Ridge é que ela não é capaz de produzir coeficientes exatamente iguais a zero – isto é, ela não realiza seleção alguma de variáveis no sentido estrito da expressão. Esta penalidade apenas reduz a maioria dos coeficientes à valores muito pequenos, próximos de zero, efetivamente reduzindo os efeitos da presença dessas variáveis no modelo. Uma outra coisa importante de se observar é que todos os coeficientes reduzidos terão mais ou menos valores da mesma orderm, ou seja, não dá pra saber quais variáveis poderíam ser completamente limadas do modelo sem afetar muito sua capacidade preditiva.

O problema de otimização então fica sendo:

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda \sum_{j=1}^{K}\theta_j ^2

Este problema tem solução analítica para a maioria das classes de funções mais usadas. No caso da regressão linear, por exemplo, a solução é similar à do post anterior, com a presença da constante lambda conforme a historinha sobre a origem desta penalidade. Além disso, as propriedades estatísticas da regressão Ridge também são muito similares às da regressão comum, o que faz dessa penalidade uma escolha muito popular.

q=1 – LASSO

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda \sum_{j=1}^{K}|\theta_j|

Esse é o queridinho de gigantes como o Google e a Amazon e outras empresas que usam constantemente bancos de dados com MUITO mais variáveis do que observações. Por sua capacidade de produzir coeficientes exatamente iguais a zero, essa penalidade é muito utilizada para realizar seleção de variáveis. Além disso, no caso da regressão linear, o LASSO é robusto à não-normalidade dos erros – na verdade, do ponto de vista Byesiano, esta penalidade equivale a assumir uma distribuição de Laplace à priori. O que dificultou o uso dessa penalidade, para nós meros mortais, por muitos anos, é o fato de que não existe solução analítica para o problema de otimização. Somente em 1996 foi desenvolvido um algoritmo eficiente para aproximar a solução do LASSO, chamado Least Angle Regression (LAR). Mas foi só mesmo em 2006 que se conseguiu um algoritmo capaz de encontrar a solução exata – o algoritmo LARS (uma extensão do LAR). De lá pra cá, toda a indústria da tecnologia entrou com tudo em P&D para chegar à algoritmos monstruosamente rápidos para resolver o LASSO. Um deles, o Generalized Path Seeker (GPS) está disponível gratuitamente no CRAN para usar com o R, nos pacotes GLMnet e gbm.

Tendo dito tudo isso, o LASSO não é a penalidade que produz as soluções mais esparsas, isto é, com menos variáveis entrando no modelo dentre todas as possibilidades disponíveis. Esse título vai para:

q=0 – MELHOR SUBCONJUNTO

Este seria o mundo ideal: qual é o melhor modelo possível com 10 variáveis? E com 1000? e com 10000? Bastaria resolver o seguinte problema de otimização para todas os números K de variáveis que quisermos:

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda \sum_{j=1}^{K}\theta_j ^0

Onde define-se 0^0 =0 . Neste caso, a penalidade simplesmente deixa passar um certo número de variáveis setando a penalidade para zero ou um. O negócio é que resolver esse problema é equivalente a resolver o problema irrestrito para todas as combinações de K variáveis possíveis dentre todas as variáveis disponíveis – mesmo com um número pequeno de variáveis, é um problema de otimização combinatória que é NP-difícil. Por isso o LASSO é a alternativa mais popular.

Ok, nem tudo está perdido. Existem algoritmos eficientes para obter a solução do problema acima até cerca de 10 variáveis. Além disso, você já deve ter ouvido falar dos algoritmos Stagewise como a seleção Forward Stepwise, Backwards etc. Estes algoritmos geralmente são boas aproximações da solução para o problema com penalidade L-0, mas de novo, apenas até cerca de 50 ou 60 variáveis.

A PENALIDADE “ELASTIC-NET”

Nem tanto ao céu, nem tanto ao inferno. Quando não temos certeza de poder limar variáveis do modelo, mas mesmo assim não queremos que todas sejam incluídas mesmo que coeficientes próximos de zero, a penalidade Elastic-Net aparece como a candidata ideal. Esta penalidade é literalmente um compromisso entre Ridge e LASSO. Ela possui um parâmetro extra que, quando alterado, pode fazer o algoritmo se comportar como o Ridge ou como o LASSO – o quanto de cada você quer ver no modelo é refletido por este parâmetro extra, chamado de parâmetro alpha de mistura. O problema de otimização com penalidade Elastic-Net fica assim:

\min\limits_{\theta}\frac{1}{N} \sum_{i=1}^{N}(L(f(x_i,\theta)-y_i)) +\lambda \sum_{j=1}^{K}(|\alpha|\theta_j + (1-\alpha)\theta_j ^2)

OK, E COMO EU ESCOLHO LAMBDA?

Você pode estar se perguntando agora: “Qual é o melhor valor para lambda? O algoritmo vai otimizar esse parâmetro também?”. Não. Você escolhe lambda arbitrariamente e ajusta o modelo. Se quiser descobrir qual valor de lambda produz as melhores predições, ajuste o modelo repetidas vezes para vários valores diferentes de lambda e escolha aquele que produz as melhores predições em uma massa dados que você não usou para treinar o modelo. Essa massa de dados pode ser um conjunto de observações que você separou para testar seus modelos, pode ser uma única observação em todo seu banco de dados… enfim, existem vários sabores desta técnica conhecida como Cross-Validation. Essa técnica é muito útil para selecionar parâmetros e “tunar” seu modelo, mas os detalhes por trás disso valem um post inteiro, grande como esse aqui, portanto, vamos deixar a discussão por aqui.

O ponto é que ajustar um modelo N vezes com infinitos lambdas diferentes para achar o melhor não parece muito razoável. E não é. Por isso algoritmos como o LARS e o GPS mencionados acima, usam um truque sensacional chamado “path seeking”. Basicamente, eles produzem uma aproximação (ou mesmo exatamente dependendo das condições), das estimativas does coeficientes theta para TODOS os valores de lambda, de zero até infinito. Vale a pena ler sobre o assunto. Dê uma olhada nas refrências ao final do post.

QUANDO DÁ E QUANDO NÃO DÁ PRA USAR REGULARIZAÇÃO?

Como vimos acima, regularização nada mais é do que impor uma restrição ao problema de otimização geral que conhecemos em Machine Learning. No entanto, ainda ficamos livres para escolher a função perda L e a a função de penalidade P. Naturalmente surge a pergunta: para quais L’s e P’s existe solução para o problema de otimização regularizado? A resposta é: não sei. O que sei é que algoritmos como o GPS mencionado acima são capazes de aproximar os coeficientes para TODOS os valores de lambda quando L e P obedecem as seguintes condições:

  • L é uma função convexa (funciona para algumas não-convexas em certas condições… isso fica pra outro post)
  • P é diferenciável para todo theta.

Só isso. Escolhendo L’s e P’s dentro dessas duas condições, dá pra regularizar métodos com qualquer classe de função razoavelmente otimizável f(X) desde modelos lineares até modelos altamente não-lineares como GAM’s e redes neurais (essa tem L não-convexa, mas dá!).

Só pra finalizar, essa é a base de um algoritmo poderosíssimo que vem sendo muito usado na indústria – os chamados Gradient Boosting Machines, que vão ser assunto de outro post também 🙂

Para saber mais – Elements of Statistical Learning. Hastie, Tibshirani & Friedman, Springer 2008; Machine Learning. Murphy, The MIT Press, 2012; Foundations of Machine Learning. Mohri et al, The MIT Press, 2012.

 

Publicado em Uncategorized | Deixe um comentário

Forecasting. Ou como usar seus dados para tentar prever o futuro (Parte II – Inferência em Modelos de Regressão Linear).

No último post fiz uma espécie de introdução rápida ao modelo de regressão linear simples. Falei um pouco sobre a intuição por trás da idéia de ajustar uma reta a um conjunto de dados, dei um exemplo simples de uma possível aplicação e falei rapidamente do método prático utilizado pra estimar os coeficientes da reta no caso onde temos uma variável dependente (Y) e uma variável independente (X).

No entanto, vocês devem lembrar que fiz várias ressalvas quanto à interpretação dos resultados. Disse algumas vezes que, para generalizar conclusões do tipo “pessoas com um peso X, terão em geral uma altura Y” da amostra para a população, é preciso tomar alguns cuidados. Pois então, como o interesse aqui é falar de predição, vou falar um pouco neste post sobre estes tais cuidados e entrarei de leve em alguns conceitos de inferência estatística: um campo de estudos cheio de teoremas enjoados de provar e com uma carga cabeluda de conceitos da teoria da probabilidade. Divertido hein?! Não muito… inclusive larguei o curso de estatística na universidade graças, em parte, a isso. Mas não vamos desanimar agora, certo?

alturaxpesolm

Já que a conversa começou com “conceitos da teoria da probabilidade” mo meio, vamos partir daí. Lembram da equação da reta do último post? Estimamos os coeficientes dela com base nos dados e plotamos o resultado por cima do scatterplot, certo? Mas, olhando o gráfico, percebemos que estes dados estão distribuídos meio sem padrão em torno da reta… olha o seu colega vara-pau lá em cima no gráfico, bem longe da reta! Se eu estou dizendo que a relação entre as duas variáveis é descrita pela reta, então o fato que meus dados não estejam exatamente em cima da reta quer dizer que ela é uma aproximação meio zoada da verdadeira relação, não é? Mais ou menos. E é aí que nossa amiga probabilidade faz a sua primeira aparição.

Vamos supor que a reta representa nada mais do que a média das alturas dos caboclos que têm um certo peso X. Ora, se a reta representa a média, então não tem nada de errado com certas pessoas que tenham um peso X, serem mais altas ou mais baixas do que a média… as alturas estarão então distribuídas aleatoriamente em torno da média. E mais ainda, vamos supor que as alturas seguem uma distribuição normal  para cada peso no eixo X. Formalmente, estamos supondo o seguinte:

Y_i=\alpha + \beta*X_i + \epsilon_i

\epsilon_i \sim \mathcal{N}(0 , \sigma^2)

“Mas porque raios a distribuição normal?”, você me pergunta. Porque ela é legal. Mais pra frente você vai ver a razão dela ser legal e, depois mais pra frente ainda, vamos falar do que fazer se os dados não parecerem seguir uma distribuição normal.

Então, resumindo, com as suposições que fizemos até agora, o que estamos vendo é que as alturas Y seguem uma distriuição normal cuja média depende diretamente do peso X e que, estas médias aumentam de forma linear conforme aumenta o valor de X. Uma outra forma de dizer a mesma coisa é dizer que:

P(Y|X) = \mathcal{N}(\alpha + \beta*X , \sigma^2)

Isto é, quando ajustamos a reta de regressão linear, estamos na verdade tentando estimar a média e a variância da distribuição condicional de Y dado X. Estamos assumindo que a média depende linearmente de X e usando estas observações para estimar os coeficientes da reta, que será, por sua vez, uma estimativa da média da distribuição!

O teorema de Gauss-Markov

“Mas peraê! Quem me garante que as estimativas dos coeficientes da reta que você mostrou lá no outro post são boas estimativas para generalizar pra população?” Gauss garante. E Markov bota fé. No entanto, antes de apresentar o teorema de Gauss-Markov, que vai garantir que essas são sim boas estimativas, vamos precisar de mais alguns pressupostos:

  1. E[\epsilon_i] = 0
  2. V(\epsilon_i) = \sigma^2 < \infty
  3. cov(\epsilon_i , \epsilon_j) = 0, \forall i \neq j

Traduzindo:

  1. A média dos erros das alturas Y para cada peso X é sempre igual a zero. Isto é, a distribuição está centrada na reta ajustada.
  2. A variância é a mesma (constante) para todos os erros das alturas Y correspondentes a cada peso X. E essa variância deve ser finita!
  3. Os erros das alturas Y para cada peso X não são correlacionados.

Se os dados atenderem a esses pressupostos, o teorema de Gauss-Markov  garante que as estimativas dos coeficientes, conforme mostrei no outro post, conhecidas como Estimativas de Mínimos Quadrados Ordinários (OLS na literatura em inglês), são as Melhores Estimativas Lineares Não-Viesadas, ou BLUE (Best Linear Unbiased Estimates) na literatura em inglês. Em outras palavras, é uma boa estimativa! A melhor na classe de estimadores lineares! Mas infelizmente isso não basta para garantir que a nossa reta resulte na melhor estimativa possível da média da distribuição condicional… e essa é a primeira razão para termos escolhido a distribuição normal!

Porque a distribuição normal é tão legal?

Se você clicou no link para a wikipedia falando da distribuição normal que coloquei ali em cima, você deve ter visto que a função de densidade de probabilidade dessa distibuição tem essa forma aqui:

f(x) = \frac{1}{\sqrt{2\pi\sigma^2}}\ exp{-\frac{(x-\mu)^2}{2\sigma^2}}

Acontece que em estatística, uma forma popular de estimar os parâmetros de uma distribuição consiste em otimizar a função de densidade de probabilidade com relação ao parâmetro desejado. Esta ferramenta é conhecida como Estimador de Máxima Verossimilhança (MLE na literatura em inglês). O legal dos MLEs é que eles têm uma série de propriedades que fazem deles os melhores estimadores possíveis, tais como Consistência, são Assintoticamente Normais e Eficientes. Se você quiser saber exatamente o que signficam essas propriedades, dê uma olhada nas refrências no final desse post. Senão, acredite em mim, é muito bom quando sua estimativa tem essas propriedades!

O problema é que nem sempre é fácil otimizar os parâmetros de uma distribuição. Algumas delas tem formas tão complicadas que é um trabalho monstro achar o MLE de algum parâmetro de interesse! A boa notícia é que esse não é o caso da distribuição normal! Vejamos o que acontece quando colocamos em prática as nossas suposições e tentamos obter o MLE da média de Y dado X:

l(\theta) = \sum_{i=1}^{N}{log[ \frac{1}{\sqrt{2\pi\sigma^2}}\ exp{-\frac{(y_i-(\alpha +\beta x_i ))^2}{2\sigma^2}} }]

l(\theta) = -\frac{1}{2\sigma^2} \sum_{i=1}^ {N} (y_i - (\alpha + \beta x_i))^ 2 - \frac{N}{2} log(2 \pi \sigma^2)

Onde \theta = [\alpha ; \beta ; \sigma]

Derivando essa função com relação aos coeficientes alpha e beta, vemos que os valores destes coeficientes que otimizam a função de verossimilhança são exatamente os mesmos que mostrei no outro post, isto é, as estimativas OLS. Então aí está a primeira razão da distribuição normal ser legal: se os erros seguirem a distribuição normal, a reta de regressão é equivalente ao MLE da média da distribuição condicional de Y dado X. Derive com relação à sigma e verá que dá pra construir uma estimativa da variância com base nos dados também!

A outra razão para a distribuição normal ser tão legal é que, se os erros seguirem essa distribuição, fica fácil construir intervalos de confiança para os parâmetros da reta e, por extensão, para a própria média condicional. Pretendo fazer um post futuramente falando só sobre os intervalos estatísticos importantes como os intervalos de confiança, de tolerância e de predição, mas por enquanto, basta saber que um intervalo de confiança é uma região em torno da sua estimativa pontual onde teremos algum grau de “certeza” que se encontra o verdadeiro parâmetro populacional. No caso do exemplo Altura x Peso, a área sombreada no gráfico representa a faixa de confiança a 5% de significância para a média da distribuição condicional. Isto quer dizer que caso refizessemos 100 vezes o processo de selecionar 10 colegas de trabalho aleatoriamente e ajustar a reta de regressão, em 95 das vezes veríamos a reta passar em algum lugar dentro dessa faixa sombreada. Em outras palavras, temos 95% de confiança que o verdadeiro parâmetro está em algum lugar nessa faixa.

alturaxpesolm

 

A idéia por trás do conceito de calcular intervalos de confiança é adicionar uma medida da incerteza que vem do fato que utilizamos uma amostra para estimar a relação entre as duas variáveis. Se de alguma forma você pudesse medir TODOS os seus colegas de trabalho, você poderia ter 100% de certeza de qual é a média de altura para cada grupo de peso, bastaria apenas calcular estas médias! Mas quando utilizamos amostras, ou seja, frações da população, devemos sempre considerar a incerteza quando generalizamos conclusões, como a relação entre Altura e Peso, da amostra para a população… É como dizer “Olha, não dá pra ter 100% certeza, já que não rolou de medir todo mundo, mas se essa galera que medimos for uma boa representação do que acontece em geral, tenho 95% de certeza que a relação entre Altura e Peso vai cair em algum lugar dessa faixa sombreada aqui.”. O que “uma boa representação do que acontece em geral” quer dizer é o campo de estudos da Amostragem, que é a disciplina mais xarope da estatística na minha opinião… No entanto, se pudermos fazer uma Amostra Aleatoria Simples, ou seja, juntar TODA a população e selecionar alguns gatos pingados aleatoriamente, em geral terás uma boa amostra que representa bem a população. Neste caso, conforme o número de pessoas na sua amostra aumenta, a faixa de confiança se tornará mais estreita, até o ponto em que ela desaparecerá se você medir todo mundo! Portanto, é preciso considerar o trade-off entre o custo de medir muita gente e o grau de incerteza do que você vai medir… não adianta muita coisa medir pouca gente e calcular uma faixa de confiança gigante! De novo, para saber mais sobre isso, dê uma olhada nas referências no final do post 🙂

Regressão Linear Múltipla (Ou a mesma coisa de antes só que com mais de uma variável X)

Pois então. Falei sobre como estimar os parâmetros da reta quando temos apenas uma variável Y e uma variável X. Mas e se eu tiver vários Y e vários X? Dá pra fazer algo tipo uma regressão que represente a relação entre todos Y e X ao mesmo tempo?

Dá sim. Mas quando temos vários Y’s a cara da coisa muda demais com relação ao que falei aqui até agora. Então vamos focar no caso onde temos apenas um Y e vários X, por exemplo, Peso x Altura e Idade numa pré-escola, ou seja, só com crianças pequenas onde é razoável supor que baixinhos obesos são raros e que os mais velhos são mais altos e mais pesados que os mais novos, ok? Repare que o Peso agora é a variável dependente (Y), que deve ser explicada pela Altura e a Idade das crianças.

3dscatter

A boa notícia é que a intuição é a mesma. Queremos pegar a massa de pontos gerada quando colocamos essas três variáveis num scatterplot e focar somente na relação entre elas. Estamos supondo novamente que a relação é linear. Uma outra boa notícia é que o processo para fazer isso é basicamente o mesmo que vimos até agora no caso univariado, mas – e essa notícia talvez não seja tão boa para algumas pessoas – utilizaremos vetores e matrizes ao invés de escalares como fizemos até agora. O modelo com várias variáveis independentes fica assim:

Y = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \ldots + \beta_n X_n + \epsilon

ou, na forma matricial:

Y = W^T X + \epsilon

onde W é uma matriz (n+1)x1 contendo os coeficientes beta para cada variável X mais o intercepto, Y é um vetor  kx1  X é uma matriz kx(n+1), onde k é o número de observações e n é o número de variáveis X do modelo. O (n+1) na matriz X é um truque usado para incluir o intercepto no modelo. Na prática, incluimos uma coluna inteira de 1’s nessa matriz para, quando fizermos o produto W^T X , o resultado seja igual à forma que escrevi ali em cima sem matrizes.

Para obter uma estimativa dos coeficientes da matriz W, basta fazer a mesma coisa que fizemos no caso univariado, trocando ” \alpha + \beta X +\epsilon ” por ” W^T X +\epsilon “. O teorema da Gauss-Markov ainda vale, desde que os mesmos pressupostos de antes sejam mantidos. Da mesma forma, caso os erros sejam normais, a equivalência entre o OLS e o MLE também vale! A pegadinha do Mallandro aqui é apenas calcular a derivada do SSE com relação à matriz W. É só fazer uma transformação que é facilmente encontrada em qualquer livro ou mesmo na internet 🙂 Se você fizer direitinho, o resultado é esse aqui:

\hat{W} = (X^T X)^{-1} X^T Y

Da mesma forma que antes, o fato de termos usado erros normais permite calcular facilmente intervalos de confiança para os parâmetros, mas falarei como fazer isso em um outro post.

E se os pressupostos furarem?

Na minha experiência como estudante destes métodos, sempre percebi que essa é uma dúvida que fica no espírito dos alunos e que a maioria dos professores não responde direito. Isto é, o que fazer se os pressupostos do teorema de Gauss-Markov não forem atendidos? E se meus erros não parecerem ter uma distribuição normal? A maioria dos livros e dos professores que tive focam em identificar estes problemas através de vários diagnósticos que podem ser feitos uma vez que você tenha ajustado o seu modelo de regressão aos dados, mas muito raramente vejo alguém responder na lata o que fazer caso estes diagnósticos mostrem que o modelo de regressão simples é inadequado.

A má notícia é que este post já tá ficando muito grande e eu também não vou dar uma resposta satisfatória agora. Só os diagnósticos para identificar problemas com os pressupostos já renderiam um post inteiro! As soluções para os problemas então… renderiam uma série toda de posts!

Mas, para não dar uma de professor troll, que não responde direito quando você pergunta e ainda mete dados cheio destes problemas na prova, vou dar pelo menos respostas gerais pra você saber o que procurar na literatura:

  • E se a variância não for igual (constante) para todos os erros?

Este problema tem o singelo nome de Heterocedastiscidade… Bom, existem testes de hipóteses que podem ser usados para identificar dados heteroscedasticos, mas uma boa idéia é ajustar o modelo de regressão e realizar alguns diagnósticos conhecidos como Análise de Resíduos. Se você identificar através da Análise de Resíduos que os seus dados são de fato heterocedásticos, procure identificar outliers. No caso no exemplo que usei aqui, o colega vara-pau era um belo candidato a outlier. Caso encontre outliers nos dados (existem diagnósticos para classificar uma observação como outlier, basta procurar!) uma possibilidade é simplesmente limá-lo e ajustar o modelo de regressão sem ele. Esta é uma boa saída se o tal do outlier não for muito influente no seu conjunto de dados (acertou quem pensou que existem diagnósticos para determinar o grau de influência de uma observação no modelo…). Caso o problema não seja com outliers, mas a variância continue sendo inscosntante, podemos pensar em aplicar algumas transformações nos dados que ajudem a estabilizar a variância. Exemplos comuns de transformações são o logarítimo, Box-Cox e a normalização. A desvantagem de usar essas transformações é que nem sempre o resultado é fácil de interpretar. (Imagine dizer pro seu chefe que você conseguiu modelar o log-preço versus o quadrado do retorno normalizado de uma ação… não é fácil explicar o que você quer dizer com isso!)

  • E se meus erros forem correlacionados?

Aí meu parceiro, você senta e chora…

Mentira, não precisa sentar e chorar não. Mas talvez sentar e estudar. Quando os dados são correlacionados em um modelo de regressão, é possível adicionar ao modelo coeficientes que levem em conta este fato. Na literatura estatística você pode encontrar várias técnicas para modelar as chamadas Estruturas de Correlação. No fundo, a idéia é estimar a matriz de covariância do modelo de regressão, que deveria ser toda igual a zero para podermos usar a técnica simples que apresentei aqui.

  • Como eu sei quantas variáveis usar no modelo de regressão múltipla?

Essa é uma beleza. Pô, se eu sair metendo um monte de variável independente no meu modelo, eu vou diminuir a incerteza na estimação da média condicional, certo? Afinal, se eu controlar um monte de condições, haverão menos variáveis influenciando a minha variável dependente né não? Talvez. Mas um monte delas pode acabar sendo só lixo. Variáveis que aumentam o poder de predição do seu modelo apenas marginalmente e que aumentam muito o custo computacional de ajustar a regressão e dificultam a sua análise dos resultados e a aplicação de diagnósticos… Foi pensando nisso que vários caras inteligentes inventaram as Técnicas de Seleção de Modelos. Dê uma olhada nas técnicas de inserção e retirada de variáveis como Stepwise, Forward e Backward, baseadas em critérios como o R² ou em critérios de informação como o AIC ou o BIC. Ou consulte um expert da área do problema que está tentando resolver com a regressão. Ele pode te dizer quais variáveis devem ajudar e quais são lixo…

  • E se minha variável Y (e, portanto, os erros) não seguir a distribuição normal?

Essa dúvida é motivo de briga entre teóricos e antes que algum estatístico leia minha resposta já vou tirar o meu da reta e falar de todos os lados da moeda!

Alguns profissionais vão te dizer que, se a tua amostra for grande o bastante, você pode mandar bala, jogar na mão do teorema central do limite e ser feliz. Até faz algum sentido, pois quando ajustamos o modelo de regressão, temos uma sequência de variáveis aleatorias, a qual somamos e dividimos pelo tamanho da amostra no meio do processo de estimar os coeficientes da reta. Essa conta deve convergir em distribuição para a Normal Padrão quando o tamanho da amostra cresce, se a variância for despezível comparativamente. Ficamos então com uma estimativa dos parâmetros da reta que é BLUE (Gauss-Markov não requer dados normais) e ainda é assintoticamente normal. Não é lá um MLE mas é bom o bastante e ainda rola de calcular os intervalos de confiança dessa garotada. Mas e se a variância for comparativamente grande? Digamos por exemplo que seus dados pareçam seguir alguma distribuição de cauda longa como a t de student com um valor próximo de 2 graus de liberdade ou uma distribuição de Laplace. Nesse caso os parâmetros não serão assintoticamente normais não importa o quanto você aumente a amostra…

Não entendeu nada? Segue o jogo e manda bala numa regressão robusta.

A chamada regressão robusta é na verdade uma coleção de métodos que permitem passar por cima do pressuposto de normalidade dos erros. Um método popular é conhecido como Estimador-M de Huber. Na prática, ele corresponde a supor uma distribuição de Laplace para os erros no lugar da normal. Você pode testar outros métodos robustos como LASSO ou uma aproximação não-paramétrica por splines. Ou você pode normalizar os dados caso isso não afete a interpretabilidade do modelo (nunca consegui isso, pessoalmente).

Enfim, post longo. Espero que ajude alguém que esteja apanhando da regressão linear por aí.

Nas próximas semanas vou falar de modelos auto-regressivos e de séries temporais. Fico devendo o intervalo de predição, que é um ponto-chave na profissão de Data Scientist, pois quero falar dele separado, sem atrelar com nenhum método, tipo a regressão linear.

Para saber mais: Linear Models in Statistics by Alvin C. Rencher and G. Bruce Schaalje; Applied Linear Statistical Models by John Neter, Michael Kutner, William Wasserman, Christopher Nachtsheim; Survey Sampling (Wiley Classics Library)  byLeslie Kish.

Publicado em Uncategorized | Deixe um comentário

Forecasting. Ou como usar seus dados para tentar prever o futuro (Parte I – Regressão Linear).

Que o futuro sempre foi objeto de fascinação do ser humano não deve ser novidade para ninguém. É claro, o que quer que seja que a vida nos reserve, teremos que enfrentar uma hora ou outra! Talvez você puxe papo amanhã com aquele seu vizinho com quem nunca falou antes e descubra que o cara é um mega-investidor atrás de negócios na sua área de expertise! Ou tavez você ache um celular perdido no metrô e, quando for atrás do dono, encontre o amor da sua vida! Ou, quem sabe, talvez você escorregue no banheiro, bata a cabeça na pia e fique tetraplégico para sempre.

Escolhi estes exemplos extremos para ilustrar o quanto o acaso pode mudar nossas vidas de maneira absurda em um piscar de olhos. E, estando o acaso embutido nessa coisa envolta em mistério chamada Futuro, não podemos reagir de outra forma senão com fascínio e até mesmo um certo frio na barriga quando paramos pra pensar nisso.

Como este é um blog sobre Data Science, ou CIÊNCIA de dados, em bom português, não vou nem começar a discutir Determinismo X Possibilismo, ou se você acredita em destino ou não. Vamos tomar a via probabilística aqui e assumir que o mundo é um lugar mega-complexo, onde oráculos e videntes são charlatães que soltam predições de duplo (ou triplo) sentido, pouco precisas, exatamente para tirar o deles da reta quando a aleatoriedade vem cobrar o seu quinhão.

O fato é que já há algum tempo que as civilizações não podem se dar ao luxo de fechar os olhos e simplesmente dizer “Seja o que Deus quiser. O futuro a Ele pertence.” em alguns campos práticos da atividade humana. Pense bem: era uma questão crucial (e ainda é) para a sobrevivência de civilizações cujo sustento vinha da agricultura, saber reconhecer os padrões climáticos que hoje chamamos de “As Quatro Estações”, ou os períodos de seca e cheia do rio Nilo, por exemplo. Desta forma, nossos antepassados poderiam ter uma idéia do que deveria acontecer em uma determinada época do ano e se preparar de acordo. É óbvio que nem sempre era possível se precaver o bastante e desastres certamente acontecíam com frequencia, mas a idéia de minimizar os efeitos negativos do puro acaso através da observação de padrões parece funcionar bem e, não surpreendentemente, esteve presente durante toda a história humana no comportamento de grande parte das civilizações conhecidas.

E é aqui que realmente começa o assunto do post de hoje: Forecasting. Do inglês arcáico, Fore – before (antes, com antecedência) Casten – contrive, scheme (planejar, armar). “To forecast” significaria então em português algo como “planejar o futuro com antecedência”. A idéia é utilizar conjuntos de dados coletados através do tempo para tentar buscar informações sobre o que devemos esperar para o futuro. Um exemplo clássico é a previsão do tempo: metereologistas utilizam informação disponível no presente para tentar, através de complicados modelos matemáticos, prever as condições climáticas de uma região. Um outro exemplo menos óbvio é o de uma empresa aérea, que pode querer saber em que época os consumidores viajam menos para criar promoções com antecedência e não perder dinheiro nessa época prevista de baixo movimento. Ou um investidor na bolsa de valores pode tentar prever qual será o preço de abertura de uma determinada ação no mercado do dia seguinte.

Então, com este primeiro post, estou começando uma série (ainda não sei de quantos posts no total) sobre técnicas e métodos de previsão. Nesta série pretendo apresentar, em detalhe, várias técnicas matemáticas utilizadas no mundo dos negócios, desde as mais simples como os Modelos Auto-Regressivos e o Método de Holt-Winters, até modelos mais sofisticados como as Redes Neurais Artificiais e Redes Bayesianas. Todos eles têm em comum o fato de utilizarem dados históricos como base de treinamento para prever observações futuras, seja esse futuro definido diretamente como o próprio tempo, ou com base em alguma outra variável de interesse. (Não entendeu? Imagine que você queira saber qual vai ser o peso do seu filho quando ele atingir uma certa altura. É isso que quero dizer com futuro baseado em outra variável que não o seja explicitamente o tempo.

Sem mais delongas, para “começar do começo” no mundo dos forecasts, neste primeiro post vamos falar de Regressão Linear. Esta técnica, relativamente simples, é uma velha conhecida dos estudantes de graduação das mais variadas áreas. Conheço muita gente, principalmente da área de saúde, que apanhou durante um bom tempo para entender o que raios é uma Regressão Linear e como raios se aplica isso no mundo real. Bom, imagine que temos duas variáveis contínuas quaisquer, digamos altura (medida em metros) e peso (medido em kilogramas). Estas duas variáveis estão relacionadas de alguma forma? Quero dizer, faz algum sentido perguntarmos se, dado um grupo de pessoas qualquer, devemos observar altura e peso seguindo algum padrão específico? Mais precisamente, em um grupo de pessoas, é razoável supor que os mais altos serão em geral mais pesados? Ou mais leves? Uma boa idéia para começar a repsonder estas perguntas é tentar visualizar a relação entre estas duas variáveis em um gráfico de dispersão (ou scatterplot em inglês), como o da figura abaixo:

alturaxpeso

Para entender o que representa este scatterplot, imagine que você mediu a altura e o peso de 10 de seus colegas de trabalho, escolhidos aleatoriamente (vamos fingir que ninguém achou que você é louco e todos participaram do seu experimento numa boa). Eles foram a sua amostra. Após tomar as medidas, você plotou, em um sistema de coordenadas cartesiano, as medidas de seus colegas com o peso no eixo X e a altura no eixo Y, resultando na figura ali em cima. Observe com atenção o padrão formado pelos pontos no gráfico. Com a exceção daquele seu colega vara-pau, altão (1,90m) e magrelo (70kg), parece haver uma relação bem direta entre peso e altura, onde quanto mais altos, mais pesados são seus colegas. Mais especificamente, os pontos parecem estar distribuídos em torno de uma reta, certo? Poderíamos pensar em utilizar esta reta para representar a informação contida no gráfico de forma mais concisa, falando assim diretamente da relação entre as duas variáveis, ao invés de pontos individuais em um gráfico. De fato, quando observamos scatterplots assim, onde os pontos parecem ter uma relação linear, podemos começar a pensar em usar a Regressão Linear, que nada mais é do que encontrar a equação da reta mais próxima a todos os pontos do gráfico. Uma vez que tenhamos encontrado esta equação, podemos responder a perguntas como “Qual será o peso em geral de meus colegas de trabalho cuja altura é 1,75m? “. Na verdade, para responder este tipo de pergunta de forma rigorosamente correta, é preciso tomar alguns cuidados. Este rigor é objeto de estudo da inferência estatística e vamos falar no próximo post de como aplicar a Regressão Linear para generalizar da amostra (10 de seus colegas de trabalho) para a população (todos os seus colegas de trabalho). Mas por ora, vamos focar apenas em como encontrar a tal equação da reta que passa mais próximo de todos os pontos do scatterplot.

Para começar, vamos relembrar a forma da equação de uma reta:

Y=\alpha + \beta*X

Onde, \alpha é o intercepto (ou onde a reta corta o eixo Y) e \beta é o coeficiente de inclinação da reta. Então, o que se procura são os valores destes dois parâmetros , \alpha e \beta da reta mais próxima, simultaneamente, a todas as coordenadas (x,y) do gráfico.  A pergunta que devemos nos fazer em seguida é: O que exatamente queremos dizer com “proximidade” da reta com relação aos pontos?

alturaxpeso2

Tomemos como exemplo o segmento de reta azul acima, desenhado arbitrariamente por cima do scatterplot. Quando falarmos da distância entre a reta e um ponto qualquer no gráfico, estaremos falando da distância vertical entre eles (ou seja, a diferença entre as coordenadas Y do ponto e da reta), representada no exemplo acima pelo segmento de reta vermelho. Então, estamos buscando a reta que minimize TODAS as distâncias verticais entre os pontos e ela ao mesmo tempo. Assim, para obter a equação desta reta, precisamos otimizar os parâmetros \alpha e \beta com relação a alguma medida de distância que leve em conta TODOS os pontos que observamos ao mesmo tempo. Uma idéia de medida que carregue em si todas as distâncias ao mesmo tempo é a média simples das distâncias individuais. O problema com esse approach é que, como podemos observar no gráfico, existem pontos que estão acima da reta e pontos que estão abaixo dela. Sendo assim, teremos distâncias positivas e negativas, que, quando somarmos para calcular a média, poderão resultar em uma medida geral da distância próxima a zero, mesmo quando a reta em questão passa longe de ser a melhor escolha. Para contornar este problema, poderíamos usar o módulo das distâncias, mas- quem tem experiência com Cálculo sabe disso- o módulo é uma função bem chata de tratar em problemas de otimização… A medida escolhida para representar todas as distâncias (ou os erros) será então baseada na soma dos quadrados das distâncias individuais ao invés do módulo. Isto resolve o problema já que um número negativo elevado ao quadrado é um número positivo e potências são bem mais fáceis de lidar do que o temido módulo.

Definiremos então a tal medida de distância (vamos passar a chamar de erro a partir daqui) como:

SSE = \frac{\sum\limits_{i=1}^n (y_i - \hat{y}_i)^2}{2}

Onde \hat{y}_i são as coordenadas Y da reta.

Esta medida é chamada de Soma dos Quadrados do Erro (SQE, ou SSE em inglês) e nada mais é do que a soma das distâncias verticais entre ponto e reta ao quadrado. O número 2 no denomidador é incluido para facilitar a próxima etapa: a otimização dos parâmetros com relação à nossa medida de erro.

Quem lembra das aulas de cálculo, deve lembrar que quando queremos encontrar pontos extremos (máximos e mínimos) de de alguma função contínua não muito complicada, bastava derivar esta função com relação ao parâmetro que queremos otimizar, igualar o resultado a zero e resolver a equação para encontrá-los. Isto é exatamente o faremos agora, embora não seja exatamente isso que o computador faz quando passamos um comando no R, por exemplo, para efetuar uma regressão linear. Falaremos dos métodos de otimização usados pelos computadores em posts futuros. Por enquanto vamos com a boa e velha derivada analítica.

Substituindo \hat{y_i} na definição do SSE acima, pel &s=4$a equação da reta ficamos com:

SSE = \frac{\sum\limits_{i=1}^n [y_i - (\alpha + \beta*x_i)]^2}{2}

Em seguida, derivamos esta função com relação a \alpha e \beta , igualamos os resultados a zero e resolvemos o sistema de equações resultante (chamado de sistema de equações normais) para obter:

\bar{\beta} =\frac{\sum (x_i - \bar{x}) (y_i - \bar{y})}{\sum (x_i - \bar{x})^2}

\bar{\alpha} = \frac{\sum y_i - \beta \sum x_i}{n}

E assim, a partir dos dados que você coletou medindo 10 de seus colegas de trabalho, foi possível encontrar a equação da reta que se ajusta melhor a esta massa de dados. Esta equação poderá ser usada, se tomarmos alguns cuidados que discutiremos no próximo post, para encontrar qual deverá ser a altura, em geral, de alguém cujo peso nós conhecemos. Em outras palavras, poderemos modelar a relação entre as duas variáveis. A figura abaixo mostra a reta, que acabamos de aprender a calcular, sobreposta ao scatterplot:

alturaxpesolm

A área sombreada em volta da reta representa o chamado Intervalo de Confiança. Vamos deixar ele de lado por hoje e volto a falar disso no próximo post.

Este exemplo pode parecer simples e meio distante do mundo real. Mas a verdade é que essa classe de modelos, mesmo que relativamente simples, é largamente utilizada em aplicações práticas. Por exemplo, companhias imobiliárias utilizam a Regressão Linear para identificar o preço médio de uma propriedade dado uma série de fatores como a localização, o valor da terra e o perfil da vizinhança; companhias de seguros (e bancos) avaliam o seu perfil de risco utilizando idéias similares às da regressão linear que acabamos de ver; nas ciências agronômicas este tipo de modelo tem várias aplicações como o cálculo da quantidade de fertilizante que deve ser aplicado em uma região plantada. Além disso, a técnica é muito utilizada na indústria no gerenciamento de estoques, na definição do tempo de vida útil de um produto (embora com algumas diferenças) e até no controle de máquinas de produção e robôs!

Aliás, como este é um blog de data science, vale a pena ressaltar que esta técnica pode ser facilmente aplicada a conjuntos massivos de dados, através do uso de implementações paralelizadas de algoritmos de otimização. (falarei sobre eles mais tarde!)

Por hoje é só. Nas próximas semanas continuo com essa série sobre Forecasting, falando sobre regressão linear múltipla, inferência estatística em modelos de regressão e como fazer esse tipo de análise com o R.

Valeu!

Publicado em Uncategorized | Deixe um comentário

Data Science: Transmutando dados desorganizados em ouro digital

Feche os olhos por um instante e pense no mundo ao seu redor. Pense na forma como você interage com ele. Pense no seu perfil do Facebook e em tudo que você vê através daquela página todos os dias. Fotos, piadas, as citações da Clarice Lispector no status daquela garota hipster-emo-chata ou a declaração de amor daquele amigo distante pelo seu time de futebol, toda vez que ele perde.  Pense naquela discussão que teve com seu colega de trabalho. Aquela sobre quais são as ex-repúblicas soviéticas que mais ganharam medalhas nos jogos olímpicos, cujo fim vocês só decretaram depois de buscar no google e achar um artigo na wikipedia. Pense nas transações financeiras que você fez pela internet nos últimos tempos: compras, pagamentos, transferências, aplicações na bolsa de valores.

Se você não esteve numa comunidade Hippie no interior de Goiás pelos últimos 15 anos, você deve ter sido capaz de visualizar algumas dessas situações, ou outras semelhantes pelas quais passou ou já viu alguém passar. O fato é que estamos cada vez mais dependentes da internet e de seu vasto conteúdo, ao ponto em que já se ouve falar de pessoas morrendo em frente à tela de um computador, distraídos demais vivendo suas vidas virtuais para se lembrarem de suas necessidades reais (não acredita? http://tecnoblog.net/90842/homem-morre-lan-house/).

É neste contexto que começa a discussão que será o tema deste espaço: Data Science. Mas primeiro, antes de falar de Data Science precisamos falar do seu objeto de estudo, isto é, dados. Mas não qualquer tipo – ou tamanho- de dados. Enter the Big Data.

Em um mundo onde bilhões estão cada vez mais conectados e mais sedentos por informação em tempo real, começamos a enfrentar problemas relacionados à maneira de lidar com essa quantidade massiva de dados que são transferidos e armazenados todos os dias: a chamada problemática do “Big Data”. O Gartner define Big Data como “high-volume, high-velocity, and/or high-variety information assets that require new forms of processing to enable enhanced decision making, insight discovery and process optimization”. É possível, porém, encontrar definições diferentes, todas incluindo ou excluindo alguma característica de nome “High-qualquer-coisa”. Sendo assim, definiremos Big Data aqui de forma semelhante ao gartner, porém mais enxuta; são conjuntos de dados que apresentam os 3Vs (simultaneamente):

  • Volume – O facebook armazena cerca de 100 PETA BYTES em vídeos e fotos… fora as besteiras que escrevem todos os dias e os logs do chat.
  • Variedade – Já parou pra pensar em quantos temas são buscados por dia no google? E no tipo de conteúdo das páginas que aparecem nos resultados?
  • Velocidade – Pegue os exemplos dos 2 V’s acima e lembre-se do tempo que isso tudo leva pra aparecer na sua tela.

Dados dessa natureza requerem atenção especial. Volte ao exemplo do seu perfil no Facebook e das suas buscas no google, o que essas situações têm em comum? Para alguém atento à oportunidades, em ambos os casos, temos um volume massivo de conteúdo potencialmente desestruturado, sobre você consumidor, dado de bandeja ao público por você consumidor, de graça. A partir destes dados e outros, como suas transações financeiras, empresas podem extrair informações preciosas sobre padrões de consumo e comportamento para traçar suas estratégias. Infelizmente, por serem massivos e desestruturados, fica difícil armazenar e analisar estes dados nas plataformas comuns de Business Intelligence que existem no mercado. É preciso mais. É preciso unificar estas fontes e explorá-las com eficiência para tranformar tudo isso em informação de valor. Dados desta natureza são gerados o tempo todo e por toda parte, nos mais variados lugares, ramos de atuação de empresas e aplicações com as quais pessoas interagem. Pense na quantidade de informação gerada por astrofísicos estudando padrões de ondas vindas de todos os cantos do universo, ou por biólogos mapeando sequências genéticas, ou por economistas tentando modelar o comportamento do mercado financeiro, ou simplesmente por você quando assiste a todas as suas séries preferidas no Netflix. Como encontrar informação útil, com eficiência, nesse oceano revolto de dados?

Data Science (finalmente!) é o (novo) ramo da ciência que pretende responder a esta pergunta; é um conjunto de técnicas para abordar a problemática do Big Data. Podemos dizer que é um casamento entre estatística, ciência e engenharia da computação; onde design, negócios e ciências sociais foram os padrinhos. É para os seres que pretendem ser, ou já são, profissionais que reúnem este improvável conjunto de habilidades que este espaço se destina. Aqui, apresentarei e discutirei, sempre em português, dicas e idéias sobre os mais variados elementos da caixa de ferramentas necessária ao Data Scientist, como a linguagem R; algoritmos de Machine Learning; modelos estatísticos; Hadoop e derivados; SQL/bancos de dados e técnicas de visualização de dados. Enfim, espero criar aqui uma fonte rica em informações sobre Data Science, em português, para, quem sabe, ajudar a fomentar essa profissão no Brasil.

Publicado em Them Data Scientists... | Marcado com , , , , | Deixe um comentário