terça-feira, 25 de novembro de 2008

There is truth in data!

Eu tenho ficado cada vez mais viciado em dados. Não, por enquanto eu ainda não fui a Las Vegas ou Atlantic City. Quando eu digo dados, eu quero dizer informação ou números em uma planilha, se você preferir dito dessa forma. Antigamente os estatisticos tinham um grande trabalho compilando varios livros, indo de casa em casa fazer entrevistas, contando coisas, ... e, se voce queria saber algo sobre você mesmo (em termos numéricos), a única saida era ser uma pessoa meticulosa e ficar anotando coisas como: quantas vezes tomei Coca Cola essa semana ou, quanto tempo eu demorei lendo o jornal hoje. Com a Web tudo isso mudou. Medir comportamentos é muito facil. Um anunciante na Web sabe exatamente quantas pessoas viram o seu anuncio, quantas dessas pessoas que viram, clicaram e quantas das que clicaram no anuncio de fato compraram o produto. Além do fato de o anunciante conseguir exibir anuncios só pras pessoas que interessam a ele. Ok, eles sempre conseguiram fazer isso de certa forma. Se eles queriam exibir anuncios para donas de casa, a novela das 6 era a mais indicada. Para pessoas que chegam do trabalho, talvez a novela das 8, pra crianças, no comercial de desenho animado, homens de 20 ou 30 anos no intervalo de jogos de futebol, e por aí vai. Mas nunca foi tão facil fazer isso como na internet. Os mecanismos de busca sabem o que o usuario esta buscando e podem exibir anuncios relacionados a isso. Embora Sponsored Search Auctions seja um assunto interessante, não é sobre isso que eu queria escrever.

Recentemente, percebi que o Google Reader tem uma opção trends onde dá pra ver o perfil de utilização do usuário. Normalmente eu olhos os feeds (news, blogs, comics,...) que eu assino quando estou meio cansado do trabalho. E em geral fico trabalhando no computador durante a tarde. Esse é meu perfil de utiizacao do Reader ao longo de um dia, ou seja, quantos posts eu leio a cada hora:


Impressionantemente tem um horario que eu perco bem mais tempo no Reader - que eh quando eu começo a ficar mais cansado de ficar programando, estudando ou seja lá o que eu estiver fazendo. Ainda, olhando meus posts de acordo com o dia da semana, dá pra ver que:


segunda feira eh o dia que fico mais tempo no Reader. Gosto muito dessa minha medida de ficar perdendo tempo quando eu deveria estar estudando.

(Uma nota: um aluno de primeiro ano de estatística seria tentado a logo imaginar que esses dados seriam uma gaussiana. Eu também pensava assim. Embora gaussianas sejam ubiquas por causa do Teorema Central do Limite, nesse caso não temos uma exatamente, mesmo tendo um volume grande de dados. Isso acontece porque vários fenômenos sociais interferem no horário que as pessoas mandam ou lêem posts)

Outro dado interessante eh a estatistica de acesso do meu site. Tenho um site com alguns cadernos que tinha na epoca do IME escaneados e o Google Analytics mantém estatísticas de acesso dele. Abaixo o grafico de acessos vindos do Rio de Janeiro:


Eu consigo predizer quando sao as provas no IME só olhando pro perfil de acesso do meu site. Achei essa estatistica bem interessante.

domingo, 16 de novembro de 2008

Meu dentista, a Wikipedia, o numero pi e a fé em probabilidades

Eu sempre tive um pé atras com probabilidade - sempre pensei se era realmente um bom modelo para se tomar decisoes. As vezes nos guiamos por ela e acabamos nos dando mal. O tempo de espera na sala do meu dentista nunca foi uma distribuição exponencial. Nunca acreditei também naqueles fittings que a gente fazia de dados no Laboratório de Fisica ou dos nossos experimentos com paquimetro na escola e nos primeiros anos de faculdade. Eram cheios de erros grosseiros e no fim, sempre tínhamso que ajustar um pouco os dados pra obter algum resultado interessante. A culpa não era nossa, era do Teorema Central do Limite. Em termos bem básicos, se você tem um processo complicado mas cuja soma são vários processoszinhos simples você obtém no final, uma distribuição gaussiana. O problema é que nós em geral esperamos que vamos jogar 20 moedas para cima e, puf! uma gaussiana. Não é bem assim que funciona, o que leva a gente a se desencantar com probabilidade e estatística. Esse artigo é para que você não fique ranzinza e descrente.

Ok, queremos achar coisas bonitas, como aquelas distribuição dos livros. Com poucas moedas, a nossa experiencia diz que isso não é possível - mas e com muitas moedas? Eu sempre tive vontade de analisar quantidades imensas de dados - como o banco de dados de compra da Amazon, a rede de relacionamento do MSN ou faturas de cartão de crédito. Infelizmente essas são todas informações proprietárias. Existem informações livres - como o grafo da web, que são muito interessantes, mas grandes demais para se analisar (pelo menos no meu computador). Há, no entanto, um grafo muito interessate e aberto: o da Wikipedia:http://download.wikimedia.org/

E você nem precisa fazer um crawler, já tem tudo bonitinho, em xml. E vc pode processar ele durante a noite no seu computador. Ele tem aproximadamente 2*10^6 nos. Os datasets tem todos os dados historicos - o que é muito interessante, porquê você pode ver como grafos evoluem no tempo. Abaixo tem um log-log plot do histograma de frequencia dos graus dos vertices da wikipedia (in-degree de um artigo é quantas páginas linkam ele, e e out-degree é o número de links ele tem pra outras páginas):

Achei impressionante como de cara você obtém (sem truques, modificações, filtros, ... ou seja, sem roubar) uma curva de uma distribuição bonitinha. A linha reta nos graficos log-log (também chamados logscale) é característica de distribuições como power-laws e log-normals. Essas distribuições aparecem de forma bastante ubiqua em fenomenos socias, como tamanho de cidades, frequencias de palavras em textos, distribuição de grau pelos vértices de um grafo do mundo real (Web, redes sociais, paginas da Wikipedia, ...). Aqui tem um ótimo survey sobre isso.

Mas voltando a falar do dataset - eu fiquei emolgado de processar dados desse tamanho (o arquivo descomprimido tem 300GB e não, eu não tenho HD pra isso - tem que processar comprimido - quer dizer, ir processando a medida que você vai descomprimindo). Isso claro, ocupou meu computador por uma noite inteira - mas ok, ele não tinha nada mais interessante pra fazer. Todo esse processamento me deixou preocupado em estourar a memória RAM, então eu fiquei olhando o que acontecia no System Monitor. Eu aviso logo: abrir o SystemMonitor é que nem colocar um aquário ou uma lava lamp no seu escritório - você vai perder um certo tempo de trabalho babando na frente daquelas curvas coloridas e tentando colocar alguam ordem naquele caos.

A primeira coisa que me deixou feliz foi descobrir pelo System Monitor que meu computador tinha 2 processadores. O mais interessante foi ver o uso dos processadores: eu tinha esse grande processo de analise da Wikipedia que era muito pesado e vários processos mais leves abertos - Firefox, editor de texto, ... Pelo screenshot da direita do meu System Monitor, parece que esse processo grande ficava toda hora trocando de processador. Achei isso interessante. Eu nunca parei pra olhar como o escalonador do Linux funcionava, mas fiquei curioso depois dessa.


Para fechar: se você ainda não recuperou sua fé na probabilidade, tente calcular o número pi jogando agulhas no chão de ladrilhos (siga o link pra ver do que eu estou falando). Isso foi outra coisa que me ajudou a crer. Ainda estou procurando algo que vá me fazer crer na regra de Bayes.

domingo, 9 de novembro de 2008

Ariane e os perigos do overflow



É sempre bom ver esse video antes de começar qualquer projeto grande de software. Meu pai tinha um livro interessante sobre os grandes desastres da História da Medicina - era um livro bem interessante que contava, dentre outros, um caso de uma cirurgia onde morreram o paciente, o médico e um espectador (a muito tempo atrás, no século XIX eu acho, cirugia tinha platéia). Outro bom livro sobre desastres é o ótimo Caixa Preta de Ivan Sant'Anna. Eu li a muito tempo, mas ainda lembro da descrição daqueles três famosos acidentes da aviação brasileira. Eu tenho quase certeza que deve haver um livro semelhante sobre os grandes desastre da Engenharia de Software, mas eu não conheço. De qualquer forma, o Ariane V certamente deve figurar como um dos bugs mais caros da história.

Seguindo o link da Wikipedia para o "Ariane V" acabei lendo duas coisas sobre as quais me deu vontade de falar: HAL 9000 e a Princesa Margriet da Holanda. Primeiro sobre o HAL:

In the 1968 novel 2001: A Space Odyssey (and the corresponding 1968 film), a spaceship's onboard computer, HAL 9000, attempts to kill all its crew members. In the followup 1982 novel, 2010: Odyssey Two, and the accompanying 1984 film, 2010, it is revealed that this action was caused by the computer having been programmed with two conflicting objectives: to fully disclose all its information, and to keep the true purpose of the flight secret from the crew; this conflict caused HAL to become paranoid and eventually homicidal.
Ok, o HAL é um bug bem pop da história da computação. Ele foi programado com objetivos conflitantes que o levaram a ficar paranóico - ok, isso é interessante. Mas o que é ainda mais interessante é que objetivos que nem parecem tão conflitantes, podem levar a resultados inesperadamente desagradáveis. Essa semana vi um ótimo exemplo disso - o Teorema de Arrow. Pode ficar tranquilo que eu não vou entrar em detalhes muito matemáticos (mas se você quiser, sempre posso indicar um livro). Vamos ao resultado:

Temos n pessoas e m candidatos. Cada pessoa rankeia (ordena) os candidatos segundo suas preferencias. Um esquema de votação é um método que toma todas essas preferencias individuais e produz um unico ranking. Duas coisas aparentemente bem razoáveis de se pedir de um esquema de votação são: (i) Unanimidade: se todos escolhem o mesmo ranking, esse será o ranking final escolhido e (ii) Independencia das alternativas irrelevantes: a posição relativa dos candidatos x e y no ranking final só deve depender das posições relativas de x e y em cada uma das preferencias individuais (em outras palavras, não deve depender de um outro candidato z. Isso parece bem natural, no entanto, o Teorema de Arrow diz que o único esquema de votação que satisfaz esse critério é a ditadura, ou seja, escolher um individuo i no grupo e tomar o ranking final como a preferência individual de i. Acho sempre bonitos esses teoremas que violam a intuição (como o Paradoxo de Tarski-Banach). Eu vou me furtar de comentar de possíveis implicações sociais e filosóficas do Teorema de Arrow, até porque sou um grande fã da democracia, mas é sempre bom prestar atenção a condições aparentemente inócuas que levam a coisas possivelmente bastante indesejadas.

Ah, sim, eu falei que ia falar também da Princesa da Holanda. Eu procurei Ariane na Wikipedia e um dos links no Disambiguation era a Princess Ariane of Netherlands. Mas não é dela que eu quero falar. Me lembrei da história de outra princesa - a Princesa Margriet. No começo do ano eu estive no Canadá e fiquei impressionado com a quantidade de tulipas na primavera em Vancouvert. E lembrei da Holanda (não que eu tenha visto muitas tulipas na Holanda, porque só fui lá no inverno). De toda forma, o Canadá está ligado à Holanda de uma forma bem interessante que não tem a ver com Vancouvert (e eu só estou escrevendo essas coisas para dar uma falsa impressão de continuidade no meu texto).

Um pequeno pedaço do Canadá já se tornou território holandês de uma forma bem inusitada. A família real holandesa morou em Ottawa no Canadá durante a ocupação nazista da holanda. Nessa época a rainha Juliana estava grávida e, naturalmente, uma princesa holandesa não pode nascer fora de terrirório holandês. A solução encontrada foi declarar a maternidade território holandês, para que a princesa não nascesse fora de seu país.

Gosto muito dessas histórias pequenas e interessantes. De toda forma, ando meio preocupado de uma parte considerável da minha expansão cultural se dar via a Wikipedia. Não sei até que ponto estou ficando dependente: de toda forma, não é muito saudável interromper horas produtivas de trabalho para ficar lendo sobre leis inglesas de naturalização ou sobre o pescoço das mulheres em Burma.