UNIVERSIDADE DO VALE DO ITAJAÍ CENTRO DE CIÊNCIAS TECNOLÓGICAS DA TERRA E DO MAR CURSO DE CIÊNCIA DA COMPUTAÇÃO APLICAÇÃO DE MAPAS DE KOHONEN PARA MINERAÇÃO DE DADOS NA REDE SOCIAL FACEBOOK Jorge Gustavo Sandoval Simão São José, novembro / 2014 Orientadora: Anita Maria da Rocha Fernandes, Doutora Área de Concentração: Inteligência Artificial Linha de Pesquisa: Redes Neurais Palavras-chave: Redes Neurais, Mineração de Dados, Redes Sociais. Número de páginas: 93 RESUMO Com o desenvolvimento da tecnologia e a sua aplicação em diversos setores, a geração de dados por parte dos sistemas de informação tornou-se maior. Um dos adventos do avanço tecnológico foi a virtualização do conceito de redes sociais através de sites, incentivando usuários a constantemente criarem novas informações dos mais diferentes tipos, tais como texto, imagens, vídeo e áudio. O volume de dados gerado por essas redes sociais resultou em uma quantidade massiva de informações, de onde a extração de dados úteis tornou-se mais complexa. Uma das aplicações possíveis com a mineração de informações é a descoberta de compatibilidade entre perfis das redes sociais associados ao usuário, para determinar as melhores localizações a serem visitadas pelo o usuário do aplicativo. Visando realizar essa descoberta utilizando uma combinação dos conceitos de redes neurais, mineração de dados, big data e Mapas de Kohonen foi desenvolvido um aplicativo para dispositivos móveis (mais especificamente, o iPhone) que permitiu que um usuário em viagem consiga, ao chegar em um determinado local, analisar quem são os contatos que ele possui naquela cidade e filtrar quais possuem gostos em comum (através dos dados fornecidos pelo Facebook Graph API, que permite que dados específicos sejam recuperados de usuários) podendo, assim, identificar os lugares que eles tem frequentado, criando um demonstrativo do padrão de onde encontrá-los e quais os lugares que poderiam ser mais compatíveis com os dados apresentados pelo usuário no seu perfil. Os testes do aplicativo indicaram que ele obteve sucesso em buscar as informações e mapear o padrão de dados que mais se assemelha aos parâmetros de entrada definidos pelo usuário, permitindo assim o descobrimento das localidades desejadas de acordo com o perfil de quem realiza a pesquisa. ABSTRACT With the development of technology and its application in various sectors, generation of data by the information systems become larger. One of the advent of technological advancement was the virtualization of the social networking concept through sites, encouraging users to constantly create new information from different types, such as text, images, video and audio. The volume of data generated by these social networks has resulted in a massive amount of information, where the extraction of useful data has become more complex. One possible application with data mining is the discovery of compatibility between profiles of the social networks associated with the user, to determine the best locations to be visited by the user application. Aiming to accomplish this discovery, using a combination of the concepts of neural networks, data mining, big data and Kohonen maps was developed an application for mobile devices (more specifically the iPhone) that allow an user to be able to travel, arrive at a given location, analyze who are the contacts he has in that city and filter which have tastes in common (using data provided by the Facebook Graph API, which allows data to be retrieved from specific users) can thus identify the places they have attended, creating a statement of the standard of where to find them and the places where they could be more compatible with the data presented in their user profile. The tests indicated that the application succeeded in seeking information and map the data pattern that more closely resembles the input parameters defined by the user, thereby allowing the discovery of desired locations according to the profile of who conducts the survey. LISTA DE TABELAS Tabela 1. Análise comparativa dos trabalhos acadêmicos ................................................................. 51 Tabela 2. Análise comparativa dos trabalhos comerciais .................................................................. 52 Tabela 3. Parâmetros de treinamento ................................................................................................. 63 Tabela 4. Parâmetros de entrada para o treinamento ......................................................................... 63 Tabela 5. Parâmetros da Recuperação de Informações ..................................................................... 66 Tabela 6. Variáveis de entrada ........................................................................................................... 78 Tabela 7. Retorno dos dez primeiros registros da rede treinada ........................................................ 79 LISTA DE FIGURAS Figura 1. Ilustração simbólica do modelo McCullock-Pitts .............................................................. 36 Figura 2. Função Linear de Threshold ............................................................................................... 37 Figura 3. Exemplo do funcionamento de uma Rede Neural Artificial .............................................. 38 Figura 4. Exemplo do funcionamento de uma Rede Neural Artificial feedfoward ........................... 39 Figura 5. Exemplo do funcionamento de uma Rede Neural Artificial feedback ............................... 39 Figura 6. Exemplo de funcionamento de um Mapa de Kohonen....................................................... 44 Figura 7. Vizinhança dos neurônios de um Mapa de Kohonen no padrão retangular ....................... 45 Figura 8. Vizinhança dos neurônios de um Mapa de Kohonen no padrão hexagonal ....................... 45 Figura 9. Visão Geral do Sistema ...................................................................................................... 53 Figura 10. Diagrama de Caso de Uso ................................................................................................ 58 Figura 11. Modelo Físico do Banco de Dados .................................................................................. 60 Figura 12. Modelo Lógico do Banco de Dados ................................................................................. 60 Figura 13. Neurônio Padrão do Sistema ............................................................................................ 63 Figura 14. Interface gráfica do sistema em funcionamento ............................................................... 77 LISTA DE QUADROS Quadro 1. Inicialização da geolocalização ........................................................................................ 64 Quadro 2. Geocoder e Geocoder reverso .......................................................................................... 65 Quadro 3. Correção da função loginViewFetchedUserInfo ............................................................... 65 Quadro 4. Código da fase de Recuperação de Informações .............................................................. 66 Quadro 5. Criação das tabelas "LUGARES" e "LUGARES_TREINADOS" ................................... 67 Quadro 6. Tratamento das informações retornadas ........................................................................... 68 Quadro 7. Inserção da linha processada na tabela LUGARES .......................................................... 68 Quadro 8. Transmissão de dados da tabela LUGARES para a matriz .............................................. 71 Quadro 9. Conversão implícita de tipos ............................................................................................ 71 Quadro 10. Criação de matrizes em Objective-C .............................................................................. 71 Quadro 11. Criação de matriz no Objective-C utilizando o formato da linguagem C ...................... 71 Quadro 12. Obtenção do primeiro parâmetro de entrada (e1_) ......................................................... 72 Quadro 13. Obtenção do segundo parâmetro de entrada (e2_) ......................................................... 73 Quadro 14. Cálculo da função euclidiana para a Entrada 1 ............................................................... 74 Quadro 15. Atualização dos pesos do neurônio vencedor ................................................................. 74 Quadro 16. Atualização da taxa de aprendizagem ............................................................................ 75 Quadro 17. Retorno dos dados e ordenação pela distância euclidiana .............................................. 75 LISTA DE ABREVIATURAS E SIGLAS ADVISE API BCM CAPPS CEO CMOS CRISP-DM DBCS DCEE DHS DNA DMG GIS GNU GPL HTTP IEEE IOS JDM KDD MIR MIT MGI MVC PDP PMML SOM TCC TIA UNIVALI WHO XML Analysis, Dissemination, Visualization, Insight, Semantic Enhancement Application Programming Interface Bienenstock Cooper Munro Computer Assisted Passenger Prescreening System Chief Executive Officer Complementary Metal-Oxide Semicondutor Cross Industry Standard Process for Data Mining Department of Brain and Cognitive Science Department of Civil and Environment Engineering Department of Homeland Security Desoxiribunucleic Acid Data Mining Group Geographic Information Systems GNU’s Not Unix General Public License Hyper Text Transfer Protocol Institute of Electrical and Electronics Engineers InterNetwork Operational System Java Data Mining Knowlege Database Discovery Music Information Retrieval Massachusetts Institute of Technology McKinsey Global Institute Modelo-Visão-Controlador Programmed Data Processor Predictive Model Markup Language Self-Organizing Maps Trabalho de Conclusão de Curso Total Information Awareness Universidade do Vale do Itajaí World Health Organization Extensible Markup Language SUMÁRIO 1 INTRODUÇÃO......................................................................................7 1.1 PROBLEMA DE PESQUISA ........................................................................... 9 1.1.1 Solução Proposta............................................................................................. 10 1.1.2 Delimitação de Escopo.................................................................................... 11 1.1.3 Justificativa ..................................................................................................... 11 1.2 OBJETIVOS ...................................................................................................... 12 1.2.1 Objetivo Geral................................................................................................. 12 1.2.2 Objetivos Específicos ...................................................................................... 12 1.3 METODOLOGIA ............................................................................................. 13 1.3.1 Metodologia da Pesquisa ................................................................................ 13 1.3.2 Procedimentos Metodológicos ....................................................................... 14 2 FUNDAMENTAÇÃO TEÓRICA .....................................................17 2.1 REDES SOCIAIS ............................................................................................. 17 2.1.1 História das Redes Sociais ............................................................................. 17 2.1.2 A Rede Social Móvel ....................................................................................... 19 2.2 MINERAÇÃO DE DADOS .............................................................................. 20 2.2.1 História da Mineração de Dados ................................................................... 21 2.2.2 Tarefas da Mineração de Dados .................................................................... 22 2.2.3 Aplicações da Mineração de Dados ............................................................... 23 2.3 BIG DATA ........................................................................................................ 28 2.3.1 Os 3V’s do Big Data........................................................................................ 29 2.3.2 Etapas do Big Data ......................................................................................... 31 2.3.3 Aplicações do Big Data ................................................................................... 31 2.4 REDES NEURAIS ARTIFICIAIS .................................................................. 33 2.4.1 História das Redes Neurais Artificiais .......................................................... 33 2.4.2 Evolução das Redes Neurais Artificiais ........................................................ 35 2.4.3 Características das Redes Neurais Artificiais .............................................. 36 2.4.4 Aplicações das Redes Neurais Artificiais...................................................... 40 2.5 MAPAS AUTO-ORGANIZÁVEIS ................................................................. 41 2.5.1 Estruturas Neurais ......................................................................................... 42 2.5.2 Arquitetura do Mapa de Kohonen ................................................................ 43 3 TRABALHOS RELACIONADOS.....................................................47 3.1 TRABALHOS ACADÊMICOS ....................................................................... 47 3.1.1 Análise de Desempenho de Aprendizagem Não-Supervisionada para Previsão de Velocidade de uma Rede Rodoviária.................................................. 47 3.1.2 Redes Neurais e sua Aplicação para o Auto-Diagnóstico Estrutural ........ 47 3.1.3 Entendendo os Padrões de Mobilidade Humana Através dos Registros Telefônicos ................................................................................................................. 48 8 3.2 TRABALHOS COMERCIAIS ........................................................................ 49 3.2.1 Advizor ............................................................................................................ 49 3.2.2 Augify ............................................................................................................... 49 3.2.3 Centrifuge Visual Network Analytics ........................................................... 49 3.2.4 Hawrkore ......................................................................................................... 50 3.2.5 Paper Boy Online ............................................................................................ 50 3.2.6 Plotly ................................................................................................................ 50 3.3 ANÁLISE COMPARATIVA ........................................................................... 51 3.3.1 Análise dos Trabalhos Acadêmicos ............................................................... 51 3.3.2 Análise dos Trabalhos Comerciais ................................................................ 51 4 DESENVOLVIMENTO .....................................................................53 4.1 VISÃO GERAL DO SISTEMA ....................................................................... 53 4.2 ANÁLISE DE REQUISITOS........................................................................... 54 4.2.1 Requisitos Funcionais ..................................................................................... 54 4.2.2 Requisitos Não Funcionais ............................................................................. 57 4.2.3 Regras de Negócio ........................................................................................... 57 4.3 MODELAGEM DO SISTEMA ....................................................................... 58 4.3.1 Diagramas de Casos de Uso ........................................................................... 58 4.3.2 Diagramas de Bancos de Dados..................................................................... 59 4.3.3 Pré-Processamento ......................................................................................... 62 4.3.4 Mapas de Kohonen ........................................................................................ 62 4.4 DETALHAMENTO DO DESENVOLVIMENTO ........................................ 64 4.4.1 Geolocalização ................................................................................................. 64 4.4.2 Recuperação de Informações ......................................................................... 66 4.4.3 Pré-Processamento ......................................................................................... 70 4.4.4 Treinamento .................................................................................................... 72 4.4.5 Interface Gráfica............................................................................................. 76 4.5 DESCRIÇÃO DOS EXPERIMENTOS .......................................................... 77 4.6 RESULTADOS .................................................................................................. 78 5 CONCLUSÕES ....................................................................................80 5.1 TRABALHOS FUTUROS................................................................................ 83 REFERÊNCIAS BIBLIOGRÁFICAS ...................................................85 7 1 INTRODUÇÃO Com o desenvolvimento da tecnologia e a sua aplicação em diversos setores, a geração de dados por parte dos sistemas de informação está se tornando cada vez maior. Um dos adventos do avanço tecnológico foi a virtualização do conceito de redes sociais através de sites (Facebook, Twitter, Orkut, MySpace, Cyworld, Bebo entre outros), incentivando usuários a constantemente criarem novas informações dos mais diferentes tipos, tais como texto, imagens, vídeo e áudio. Entretanto, essas redes sociais alcançaram grandes volumes de armazenamento de informação, o que levou à criação do conceito de “Big Data” para definir suas características (SATHI, 2013). O conceito “Big Data” acabou se tornando cada vez mais comum, conforme a interação entre usuários e tecnologia de informação (mais especificamente as redes sociais) ia se popularizando. Com isso, o volume de informação ampliou exponencialmente, principalmente com a expansão da computação móvel nos últimos anos. Para poder desfrutar das vantagens de possuir sistemas de bancos de dados com esse volume de informações em tempo hábil, foram aplicadas diversas técnicas de mineração de dados para os mais variados fins (RUSSEL, 2013). Agora a sociedade está entrando em uma nova era da computação, na qual a tecnologia móvel e as redes sociais tem se combinado nas redes sociais móveis – um meio das pessoas se socializarem e se encontrarem através de seus dispositivos móveis (CHIN; ZHANG, 2013). Através da análise dos sistemas de armazenamento das redes sociais é possível explorar os dados e responder às seguintes perguntas: • Quem são as pessoas mais influentes/populares em uma rede social ? • Sobre o que as pessoas estão conversando (e é valioso) ? • Quem está interessado em virtualizar sua vida social e porquê ? As respostas para essas perguntas trazem informações valiosas e oportunidades lucrativas para os empresários, cientistas e outros estudiosos que estão tentando compreender o comportamento social (RUSSEL, 2013). A inteligência artificial, dentro desse escopo, é utilizada justamente com esse fim: coletar as informações significativas para a utilização corporativa. Uma das técnicas empregadas para a análise de informação é a de redes neurais, cuja premissa básica é modelar o padrão de aprendizado não-linear do cérebro humano. Essa técnica provê um método de processamento de dados adaptativo, tolerante a falhas, e com soluções para processamento de dados distribuídos e paralelos. Uma rede neural é uma caixa 8 preta que diretamente aprende as relações internas de um sistema desconhecido, sem adivinhar funções para descrever as relações de causa e efeito. Esse modelo pode ser utilizado para aproximação de funções, classificação, mapeamento não-linear, memória associativa, quantificação de vetores, otimização, extração e recursos, processamento distribuído e inferência por aproximação. As redes neurais possuem aplicações em quase todas as áreas da ciência e engenharia (KOHONEN, 2001) Utilizando-se de uma combinação dos conceitos de redes neurais, mineração de dados, big data e Mapas de Kohonen foi desenvolvido um aplicativo para dispositivos móveis (mais especificamente, o iPhone) que permite que um usuário em viagem consiga, ao chegar em um determinado local, analisar quem são os contatos que ele possui naquela cidade e filtrar quais possuem gostos em comum (através dos dados fornecidos pelo Facebook Graph API, que permite que dados específicos sejam recuperados de usuários), podendo assim identificar os lugares que eles tem frequentado, criando assim um demonstrativo do padrão de onde encontrá-los e quais os lugares que poderiam ser mais compatíveis com os dados apresentados pelo usuário no seu perfil. Diferentemente de aplicativos específicos de redes sociais tais como o FourSquare, que apenas registra as informações da presença de pessoas em um determinado local (baseado no registro que o próprio usuário faz no sistema) e o do Facebook, que armazena informações do usuário, o aplicativo desenvolvido nesta pesquisa trabalha com reconhecimento de padrões entre os dados da rede social Facebook e da localização geográfica no momento da busca. Este aplicativo utiliza parte desses registros (que também são compartilhados nas redes sociais) para sugerir ao usuário lugares que ele gostaria ou poderia frequentar, baseado nas informações recuperadas pelo Facebook Graph API e analisadas através de mapas autoorganizáveis. Optou-se pelo desenvolvimento dessa pesquisa utilizando como base a computação móvel pois ela representa atualmente grande parte dos dispositivos pelos quais os usuários mantém-se conectados diariamente. Em 2014, 58% da população adulta (acima de vinte anos) possuía um smartphone e 34% do usuários acessavam a internet somente utilizando esses aparelhos (PEWRESEARCH INTERNET PROJECT, 2014). A rede social utilizada para análise foi o Facebook, sendo que a coleta dos dados é realizada através da API (Application Programming Interface - Interface de Programação de Aplicações) disponibilizada para Xcode. As informações foram analisadas através de mapas auto-organizáveis 9 (mapas de Kohonen), com o objetivo de distribuir dimensionalmente os dados complexos em grupos, de acordo com suas relações. Segundo Teuvo Kohonen (2001), os mapas auto-organizáveis de Kohonen (ou apenas mapas auto-organizáveis), são um tipo de rede neural assim denominado pois nenhuma supervisão é requerida. Eles aprendem à medida que mapeiam a informação inserida. Outra propriedade intrínseca dessa rede neural é a quantização vetorial. Os mapas auto-organizáveis de Kohonen provêm uma maneira de representar informação multi-dimensional em um espaço dimensional muito inferior (tipicamente uma ou duas dimensões). Isso ajuda no quesito visualização, pois humanos são mais proficientes em entender uma informação em poucas dimensões do que em muitas. Isso torna esses mapas ferramentas essenciais para lidar com uma vasta quantidade de informações e transformá-las para serem mais compreensíveis pelo cérebro humano. 1.1 PROBLEMA DE PESQUISA Com a popularização dos dispositivos móveis, a integração entre pessoas tornou-se uma das aplicações bastante comuns à esse gênero tecnológico. Milhares de pessoas ao redor do mundo estão eventualmente, ao longo do dia, utilizando-se de diversos aplicativos (Twitter, Facebook, Tinder, Skype, entre milhares de outros) para comunicar-se com as outras pelos mais variados motivos, desde lazer até trabalho. Com a popularização das redes sociais computacionais e da cada vez mais frequente adesão de usuários, o volume de informação expandiu-se de forma muito rápida, alcançando volumes muito grandes. Com isso, a manipulação desses volumes (que podem ir de texto até mídia) tornou-se uma tarefa para algoritmos específicos de manipulação de grandes quantidades de dados. O problema de pesquisa aqui apresentado é o reconhecimento de padrões entre usuários da rede social utilizando dispositivos móveis. No desenvolvimento da pesquisa devem ser respondidas as seguintes perguntas: • É possível reconhecer padrões entre os usuários das redes sociais utilizando o dispositivo móvel especificado na pesquisa? • As informações recuperadas da rede social proposta permitem essa análise sem a adição de outros dados? 10 • Os padrões reconhecidos possuem relacionamento com as especificações do usuário que solicitou a análise? • Há a necessidade de um agente externo para o pré-processamento dessa informação? Essas questões foram respondidas durante o desenvolvimento da pesquisa, conforme os objetivos alcançados. 1.1.1 Solução Proposta Como solução proposta ao problema apresentado, o objetivo da pesquisa é o desenvolvimento de uma aplicação para dispositivos móveis que permita ao usuário, ao chegar à uma localidade, mapear os dados dos seus contatos na rede social, encontrando assim as combinações em comum com os mesmos e os melhores lugares para frequentar, baseado na combinação de semelhanças entre o seu perfil e o perfil analisado. A hipótese é que através dos mapas auto-organizáveis de Kohonen consiga-se analisar as informações recuperadas pelo Facebook Graph API e combiná-las de maneira que sejam encontrados os padrões de comportamento entre os usuários relacionados. Essas informações são disponibilizadas para o uso em aplicativos através de APIs que essa rede social disponibiliza para diversas linguagens, permitindo assim a integração de diversos recursos e dispositivos ao Facebook. A Graph API é utilizada para inserir e recuperar informações dos relacionamentos do Facebook. Ela é uma biblioteca que torna essa operação transparente aos usuários (baseada em HTTP – Hyper Text Transfer Protocol), que o aplicativo pode utilizar para recuperar informações, criar novas postagens, enviar novas fotos e uma variedade de outras tarefas que um sistema precisa fazer (FACEBOOK DEVELOPERS, 2014). O desenvolvimento desse sistema criou uma maior possibilidade de facilitar aos usuários o acesso ao lazer em um ambiente que não lhes é conhecido (por exemplo, uma outra cidade), permitindo que o usuário consiga analisar as preferências de outro (o que pode trazer resultados positivos em uma relação de negócios ou interpessoal) e também que ele as combine com as suas próprias para, assim, analisar o nível de compatibilidade com o indivíduo-alvo, de acordo com as suas informações nas redes sociais. 11 1.1.2 Delimitação de Escopo O aplicativo desenvolvido no escopo desse trabalho é uma aplicação para dispositivos móveis e o equipamento utilizado para desenvolvimento foi um iPhone 4S. Enquanto a versão final pode dar suporte a outros modelos de smartphone da mesma linha, esse foi o escolhido para testes por uma questão de disponibilidade. A linguagem de implementação foi o Objective-C. A escolha foi feita baseada no fato de que essa linguagem é nativa para o sistema operacional Mac OS desde o princípio da implementação do mesmo, assim como para o seu antecessor, o NeXTSTEP da NeXT Computer. Essa herança estendeu-se para os dispositivos móveis da Apple, quando optaram por uma versão simplificada do Mac OS (também conhecida como iOS – Internetwork Operational System), e mantiveram a linguagem base de implementação. A opção de rede social para coleta de informações foi o Facebook, devido à amplitude de informações que ela apresenta sobre os seus usuários, e por manter uma integração eficiente com o XCode. Enquanto é tecnicamente possível ampliar o escopo e estender a coleta de dados à outras redes sociais, tais como Twitter e Foursquare (entre muitas outras), essa versão manterá seu escopo no Facebook, visando focar com eficiência nas estruturas de dados de Kohonen. Os mapas de Kohonen foram escolhidos como ferramenta de análise pois são um recurso de inteligência artificial que permite, com a entrada correta de dados, detectar e aprender padrões, permitindo assim a análise de uma quantidade considerável de informações em dimensões aonde o cérebro humano consegue acompanhar com clareza (unidimensional ou bidimensional). Apesar de outras técnicas poderem possivelmente analisar essas informações com níveis de desempenhos diferentes, os mapas auto-organizáveis foram escolhidos como uma ferramenta que permitirá, dentro da proposta de Inteligência Artificial, analisar os dados conforme o escopo desse trabalho. 1.1.3 Justificativa O estudo abordado por este TCC buscou a integração entre redes neurais (mais especificamente mapas de Kohonen) e dispositivos móveis com o intuito de minerar dados e padrões dentro de um escopo aonde essas tecnologias não são vistas comumente atuando em conjunto. 12 As redes sociais possuem um alto volume de dados, que são constantemente atualizados pelos seus usuários. Este TCC permitiu a exploração e o reconhecimento de padrões entre esses dados para fins comerciais ou de pesquisa. O resultado da mineração de dados e análise de padrões proposto por este TCC possibilita ao usuário do dispositivo móvel uma maior chance de encontrar lugares que tenham maior afinidade com seus gostos pessoais, permitindo assim uma maior economia de tempo ao escolher um lazer em uma área urbana que o mesmo desconhece. O tema proposto por este trabalho também cria a possibilidade de que essa integração de tecnologias possa ser utilizada por outras áreas de interesse que precisem identificar padrões em meio a Big Data tais como ciência, engenharia e saúde. 1.2 OBJETIVOS 1.2.1 Objetivo Geral Desenvolver um aplicativo para iOS que consiga pré-processar dados do Facebook e aplicar mapas de Kohonen para minerá-los, visando demonstrar ao usuário quais as melhores opções de lugares a frequentar quando ele chega a uma nova localidade. 1.2.2 Objetivos Específicos 1. Realizar a pesquisa bibliográfica; 2. Realizar modelagem do sistema; 3. Criar a interface do XCode; 4. Implementar sistema de geolocalização no iOS; 5. Implementar biblioteca do Facebook para XCode; 6. Analisar informações que serão recuperadas para os mapas de Kohonen; 7. Analisar comportamento dos mapas de Kohonen em diversos volumes de dados; 8. Implementar os mapas de Kohonen com a informação do Facebook API; 9. Especificar as informações de retorno para o usuário; e 10. Testar e validar o funcionamento do sistema. 13 1.3 METODOLOGIA 1.3.1 Metodologia da Pesquisa A realização das pesquisas aplicadas a esse trabalho segue o princípio metodológico dos trabalhos científicos. O conhecimento científico não é constituído de informações lapidadas (prontas e finalizadas), e isso permite que o mesmo seja analisado de diferentes formas por diferentes pessoas. Com vários questionamentos, é possível propor uma ou mais soluções para um referido problema. Métodos científicos são as formas mais seguras inventadas pelo homem para controlar o movimento das coisas que cerceiam um fato de montar formas de compreensão adequadas de fenômenos (BUNGE, 1974). Segundo Wazlawick (2008) a proposta do método de pesquisa destina-se a apresentar uma sequência de passos de tal forma que, obedecidos, resultem no objetivo proposto. Portanto, para atingir o objetivo geral e os objetivos especifícos desse projeto, inicialmente foi feito o levantamento bibliográfico, aonde foram estudados os conceitos de Big Data, Mineração de Dados, Redes Sociais e Redes Neurais. A elaboração de um modelo que utilize redes neurais e mineração de dados para promover a coleta e análise de informações através da aplicação de técnicas de Big Data e mapas de Kohonen no qual os resultados são obtidos por uma cadeia de raciocínio baseado nas informações recuperadas, leva esse trabalho a classificar-se como método dedutivo. Sob o ponto de vista de sua natureza, o trabalho proposto tem a intenção de gerar conhecimentos para uma aplicação prática com foco na solução de um problema específico, portanto, pode ser classificado como uma pesquisa aplicada. Do ponto de vista de seus objetivos a pesquisa é exploratória, sendo que envolveu um levantamento bibliográfico, análise de diferentes métodos e algoritmos e a manipulação de diferentes tipos de informação para a obtenção do resultado esperado. 14 1.3.2 Procedimentos Metodológicos A seguir tem-se a metodologia para o desenvolvimento deste Trabalho de Conclusão de Curso: 1. Pesquisa bibliográfica: esta etapa atendeu o Objetivo Específico 1 do TCC e compreende a execução das seguintes atividades: a. Definição de critérios: definição dos critérios a serem utilizados para seleção de trabalhos relacionados; b. Pesquisa bibliográfica: busca e seleção de artigos em bases de dados; c. Análise dos trabalhos: leitura e análise dos artigos selecionados; 2. Modelagem do sistema: esta etapa atendeu o Objetivo Específico 2 do TCC e compreende a execução das seguintes atividades: a. Criação dos casos de uso: criação dos casos de uso do sistema b. Modelagem de Banco de Dados: criação do modelo entidade-relacionamento para o sistema. c. Modelagem do Mapa de Kohonen: criação, treinamento e validação do Mapa de Kohonen. 3. Criação da interface no Xcode: esta etapa atendeu o Objetivo Específico 3 do TCC e compreende a execução das seguintes atividades: a. Modelagem da interface gráfica: modelagem da interface gráfica do sistema; b. Teste de interface gráfica: teste do modelo da interface gráfica do sistema; c. Implementação da interface gráfica: implementação da interface gráfica no Xcode; 4. Implementação do sistema de geolocalização no iOS: esta etapa atendeu o Objetivo Específico 4 do TCC e compreende a execução das seguintes atividades: a. Análise da documentação da API: análise da documentação do sistema de geolocalização do iOS, focando nos recursos principais a serem utilizados pela pesquisa; 15 b. Implementação do código teste: implementação do código para testar conceitos analisados no passo anterior; c. Implementação do sistema de geolocalização: implementação (no aplicativo da pesquisa) do sistema de geolocalização. 5. Implementação da biblioteca do Facebook para o Xcode: esta etapa atendeu o Objetivo Específico 5 do TCC e compreende a execução das seguintes atividades: a. Análise da documentação da API: análise da documentação do sistema de recuperação de informações do Facebook para iOS, focando nos recursos principais a serem utilizados pela pesquisa; b. Implementação do código teste: implementação do código para teste dos conceitos analisados no passo anterior; c. Implementação da Facebook Graph API: implementação (no aplicativo da pesquisa) do sistema de coleta de informações do Facebook. 6. Análise das informações que serão recuperadas para os mapas de Kohonen: esta etapa atendeu o Objetivo Específico 6 do TCC e compreende a execução das seguintes atividades: a. Implementação do algoritmo em sistema adjacente: implementação do algoritmo dos mapas de Kohonen em um sistema à parte para testes; b. Teste do algoritmo dos mapas auto-organizáveis: teste do algoritmo dos mapas auto-organizáveis com banco de dados de informações de testes; c. Implementação do algoritmo dos mapas auto-organizáveis: implementação do algoritmo dos mapas auto-organizáveis de Kohonen na aplicação da pesquisa. 7. Análise do comportamento dos mapas de Kohonen em diversos volumes de informação: esta etapa atendeu o Objetivo Específico 7 do TCC e compreende a execução das seguintes atividades: a. Criação do banco de dados para testes: criação do banco de dados com volume de informações grande para teste; b. Implementação do banco de dados em algoritmo de Kohonen: implementação do banco de dados de teste no algoritmo do passo 5c; 16 c. Análise do comportamento do algoritmo: análise do comportamento do algoritmo em grandes volumes de informação, com o objetivo de testar sua viabilidade. 8. Implementação dos mapas de Kohonen com a informação do Facebook API: esta etapa atendeu o Objetivo Específico 8 do TCC e compreende a execução das seguintes atividades: a. Coleta de informações com o Facebook Graph: coleta de informações válidas através do Facebook Graph; b. Processamento das informações em mapas auto-organizáveis: processamento das informações coletadas através dos mapas auto-organizáveis; 9. Especificação das informações de retorno para o usuário: esta etapa atendeu o Objetivo Específico 9 do TCC e compreende a execução das seguintes atividades: a. Análise da viabilidade das informações: anaálise das informações comparando-as com a solicitação do usuário; b. Retorno de informações: retorno das informações de maneira que o usuário as compreenda com facilidade, dentro do padrão de exibição determinado pela interface gráfica; 10. Teste e validação do funcionamento do sistema: esta etapa atendeu o Objetivo Específico 10 do TCC e compreende a execução das seguintes atividades: a. Validação do aplicativo: validação do funcionamento do aplicativo, se todas as informações integradas estão de acordo com as necessidades do usuário; b. Teste de desempenho: teste do retorno de dados para o usuário, e analisar se o mesmo está sendo realizado em um tempo de resposta válido; 17 2 FUNDAMENTAÇÃO TEÓRICA Este capítulo aborda os conceitos que envolvem o contexto dessa pesquisa (Redes Sociais, Big Data, Mineração de Dados e Redes Neurais), fazendo uma revisão bibliográfica sobre o tema para que após a aquisição do conhecimento, possa ser proposto um sistema aplicando tais fundamentos. 2.1 REDES SOCIAIS Segundo Wasserman e Faust (1999) é caracterizada como rede social uma estrutura formada de indivíduos (ou organizações), também chamadas de “nodos”, que estão conectados por um ou mais tipos de interdependências tais como amizade, coleguismo, interesse comum, relações financeiras, gostos, contatos sexuais, relacionamentos, credos, conhecimento ou prestígio. É um mapa de laços específico entre os nodos. Esses nodos são também chamados de “contatos sociais” desse indíviduo, e o seu relacionamento pode ser utilizado para medir o capital social de uma pessoa específica (o valor que aquele indivíduo possui na rede social). Existem conceitos que são essenciais quando trata-se de análises de redes sociais. Esses conceitos são: ator (ou nodo), relacionamento, grupo, subgrupo, laços relacionais e rede de contatos. Utilizando-se dos mesmos é possível discutir qualquer camada da mesma, ao se analisar uma rede social (WASSERMAN; FAUST, 1999). 2.1.1 História das Redes Sociais Nos meados de 1800, Émile Durkhein e Ferdinand Tönnies vislumbraram o conceito de redes sociais nas suas teorias e pesquisas por grupos sociais. Tönnies afirmava que grupos sociais podem existir a partir de conexões de indivíduos que compartilham os mesmos valores e crenças (TÖNNIES, 2001). Segundo Durkheim (1887, apud FUHRT, 2010), o fenômeno social surge quando a interação entre indivíduos constitui uma realidade que não pode mais ser contabilizada em termos de propriedades ou atores individuais. Os desenvolvimentos a respeito do conceito de redes sociais continuaram, principalmente a partir de 1930 por diversos grupos em psicologia, antropologia e matemática que trabalhavam independentemente (SCOTT, 2000). Na década de 70, um grupo crescente de estudiosos trabalhou 18 para combinar as diferentes linhas de pesquisa desenvolvidas. Um grupo constituído do sociologista Harrison White e os seus estudantes do Harvard Department of Social Relations, que dentre esses, agindo de forma independente estava Charles Tilly, que focou o conceito de redes em sociologia política e movimentos sociais e também Stanley Milgram, que desenvolveu a tese dos seis graus de separação. Mark Granovetter e Barry Wellman também estavam entre os alunos de White que elaboraram e constituíram o conceito de análise de redes sociais (WELLMAN, 1988). A evolução da rede social móvel iniciou-se em 1999 com serviços de conversas básicos e serviços de texto. Com o desenvolvimento da tecnologia de dispositivos móveis, as redes sociais têm alcançado um novo nível a cada quatro gerações (LUGANO, 2008). A primeira geração, entre 1999 e 2000, utilizava tecnologias baseadas em aplicações pré-instaladas nos equipamentos, (tais como aplicativos de comunicação via texto) no modelo de chat. Pessoas envolvidas nesse serviço eram anônimas, e a maioria dos serviços dessa geração era pago pelo uso ou através de mensalidades. A segunda geração deu-se entre 2004 e 2006, com a introdução da tecnologia 3G e telefones com câmeras. Essa nova tecnologia permitiu que recursos como armazenamento de fotos online, busca por pessoas através do perfil ou contato, flertes anônimos, entre outros. A distribuição regional desses recursos incluía Japão, Coréia, Autrália, Leste Europeu e Estados Unidos, com aplicações mais voltadas, na maioria das vezes, para relacionamentos ou encontros. Assim como na primeira geração, a maioria dos serviços era pago pelo uso ou mensalidade. Os experimentos para a terceira geração iniciaram-se em 2006, tendo extendido-se até 2008/2009. Essa geração trouxe modificações significativas e tornou as redes sociais como parte da vida cotidiana. Os recursos incluem uma experiência de usuário mais rica, publicações automáticas para perfis web e atualizações de status, busca por grupo ou interesses, alertas, serviços de localização e compartilhamento de conteúdo (especialmente música), suporte a WAP 2.0, Java no servidor, MMS (Multimedia Messaging Service), captura de voz, entre outros. Os aplicativos dessa geração eram focados em interesses gerais ou em um conteúdo de distribuição específico, e o suporte à propaganda começou a se tornar mais importante. Enquanto os serviços de pagamento por uso se mantiveram, a maioria dos serviços de mensalidade tornaram-se plataformas de distribuição de conteúdo. 19 A quarta geração iniciou-se em 2008 e seguiu até 2010, tendo como principal característica um avanço dos recursos da terceira geração, habilidade de mascarar a sua presença nos dispositivos móveis, jogos online de múltiplos jogadores, entre outros. O modelo de negócio da geração anterior se estendeu, juntamente com o conceito de propriedade virtual - a compra e venda de bens ou itens virtuais (POWERS, 2010). 2.1.2 A Rede Social Móvel Uma rede social móvel é uma rede social em que indivíduos com interesses similares comunicam-se e conectam-se mutuamente através de um dispositivo móvel (normalmente um smartphone ou tablet). Tais como as redes sociais baseadas em ambiente web, os usuários de redes sociais móveis organizam-se em comunidades virtuais. Sites de redes sociais tais como o Facebook criaram aplicativos que permitem ao seus usuários acessar o seu conteúdo em tempo real através de smartphones e tablets, porém, existem redes sociais nativas aos dispositivos móveis (tais como Foursquare, Instagram e Path) que são construídas visando essa estrutura (LAI, 2007). Inicialmente, haviam apenas dois tipos básicos de redes sociais móveis. O primeiro eram as companhias que realizavam parcerias com operadoras de telefone wireless ara distribuir suas comunidades através das páginas iniciais dos navegadores dos dispositivos móveis, como por exemplo, a JuiceCaster. O segundo tipo eram as companhias que não possuíam essas parcerias e utilizavam-se de outros métodos para atrair usuários (POWERS, 2010). Segundo Raento e Antti (2008) existem seis modelos mais comuns de redes sociais, pois a grande maioria deles oferece serviços que são muito semelhantes entre si. Muitos possuem recursos únicos, porém a função principal da rede social em si é exatamente como à de outros serviços da mesma categoria. São esses os modelos: • Group Texter: esse tipo de rede social foca na habilidade de enviar pequenas mensagens de texto para um número grande de pessoas de uma vez. O objetivo dessas redes sociais é entregar as mensagens às pessoas certas da maneira mais simples e rápida possível. Ex: GroupMe, Zemble. • Location Aware: essa categoria de rede social foca em saber a sua localização e a localização dos seus amigos. Elas tiram vantagem do interesse crescente em serviços 20 baseados em localização, traçando com frequência aonde os seus contatos estão. Muitos sistemas que se enquadram nessa classificação permitem saber se alguém está próximo à uma rua ou localização em particular, próximo ao usuário ou à uma geolocalização específica. Eles compartilham essa informação marcando as posições dos indivíduos em mapas acessíveis à todos os usuários. Ex: Foursquare, Whrll. • Social Gaming: essa categoria foca em conectar pessoas através de jogos multijogador, ou competições em jogos para um jogador. Os smartphones mais novos com processadores mais potentes se tornaram uma plataforma formidável para jogos, fazendo com que essa categoria crescesse exponencialmente. Ex: Playstation Network, Xbox Live. • Dating Services: esses serviços são muito semelhantes àqueles sites de encontro. Os usuários criam um perfil e combinam esse perfil com outros perfis cadastrados. Essa categoria usualmente também possui um nível de segurança alto, dada a quantidade de informações que ele possui sobre os indivíduos cadastrados, para que as mesmas não sejam disponibilizadas sem permissão dos mesmos. Ex: Parperfeito, Tinder. • Social Networker: esse padrão procura modelar o conceito de rede social da forma mais perfeita possível. Eles oferecem uma grande gama de funções, incluindo posts multimídia, salas de chat, compartilhamento de imagens, mensagens instantâneas e páginas customizáveis. Alguns sistemas adeptos à esse padrão oferem inclusive chamadas internacionais e SMS à um custo barato. Ex: Facebook, Orkut. • Media Sharer: essa categoria é a versão de áudio e vídeo do Group Texter. O objetivo é compartilhar arquivos de forma mais eficiente e simples possível com os contatos e grupos. Muitos deles armazenam o conteúdo dos dispositivos online, para evitar abarrotar os smartphones ou tablets dos usuários. Outra função inerente à categoria é a aceitação de conteúdo de streaming e a sua distribuição automática para a lista de contatos. Ex: Whatsapp, Viber. 2.2 MINERAÇÃO DE DADOS Mineração de dados é o nome dado ao processo computacional de descobrir padrões em quantidades grandes de informação envolvendo métodos de inteligência artificial, estatísticas e 21 bancos de dados (CLIFTON, 2010). O objetivo do processo de mineração de dados é extrair informações de uma estrutura de dados e transformá-la em uma estrutura compreensível para uso futuro (HASTIE; TIBSHIRANI; FRIEDMAN, 2009). A mineração de dados pode ser automática ou semi-automática e pode detectar padrões tais como grupos de registros específicos (análise de cluster), registros incomuns (detecção de anomalias) e dependências (mineração por regras e associação). Isso normalmente envolve utilizar técnicas tais como índices e bancos de dados espaciais. Esses padrões podem ser considerados como um sumário para o conjunto de dados, e pode ser utilizado em análises posteriores ou ainda para aprendizado de máquina ou análise preditiva. 2.2.1 História da Mineração de Dados A extração manual de padrões de informação ocorre há séculos. Métodos antigos de identificação de padrões de informação incluem o teorema de Bayes e análise de regressão, ambos datados do século XVI e XVII, respectivamente. O avanço tecnológico e de poder de processamento permitiu um aumento exponencial da habilidade de guardar, coletar e manipular informações. Os grupos de informações aumentaram em complexidade e tamanho e a manipulação dos dados foi aumentada com processamento de dados indireto e automatizado, tais auxiliado por outras descobertas em ciência da computação, tais como redes neurais, análise de clusters, algoritmos genéticos e árvores de decisão. A mineração de dados aplicou essas técnicas com a intenção de descobrir padrões escondidos em quantidades de dados massivas (KANTARDZIC, 2003). Nos meados dos anos 60, estatísticos utilizavam termos como “Data Fishing” ou “Data Dredging” para referir-se ao que eles consideravam uma prática pouco eficiente de analisar informação sem nenhum tipo de parâmetro. O termo “Mineração de Dados” surgiu perto dos anos 90 nas comunidades de bancos de dados. No início, o termo era “Mineração de Bancos de Dados”, porém havia uma marca semelhante registrada por uma companhia em San Diego, relativo à um sistema de mineração de informações (MENA, 2011). Pesquisadores, por consequência, mudaram o termo para “Mineração de Dados”. Outros termos tais como “Arqueologia de Dados”, “Colheita de Informações”, “Pesquisa de Informações” e “Extração de Conhecimento” também são utilizados. Gregory Piatetsky-Shapiro criou o termo “Descoberta de Conhecimento em Bancos de Dados” para o primeiro workshop no mesmo tópico (1989) e esse termo tornou-se mais popular na comunidade 22 de inteligência artificial (PIATETSKY-SHAPIRO; PARKER, 2011). Atualmente, “Mineração de Dados” e “Descoberta de Conhecimento” são os termos mais utilizados. 2.2.2 Tarefas da Mineração de Dados O processo de mineração de dados, para Groth (1998, apud FERNANDES, 2005), é aquele responsável pela descoberta automática de informações. Segundo Fayyad, Piatetsky-Shapiro e Smyth (1996) a mineração de dados possui seis tipos comuns de tarefas: • Detecção de Anomalias – A identificação de registros não-usuais, que podem ser interessantes ou erros de informação que requerem algum tipo de investigação. • Aprendizado por associação (Modelo de Dependência) – Procura por relacionamentos entre variáveis, como por exemplo um supermercado que pode coletar informações sobre os hábitos de compra de um cliente. Utilizando essa tarefa, o supermercado pode determinar quais produtos são frequentemente comprados juntos e usar essa informação para propósitos de propaganda. • Clusterização – A tarefa de descobrir os grupos e estruturas do grupo de informações alvo que são de uma forma ou outra similares, sem utilizar as estruturas conhecidas desse grupo de informações. • Classificação – A tarefa de catalogar a informação em categorias conhecidas, tal como um gerenciador de email que cataloga os novos e-mails como legítimos ou spams. • Regressão – Tenta encontrar uma função que modela a informação baseado no que se aprendeu com o último erro. • Sumarização – Provê uma representação mais compacta do grupo de informações, incluindo visualização e geração de relatórios. Houveram esforços para estabelecer um padrão para os processos de mineração de dados, como por exemplo o CRISP-DM 1.0 e o JDM 1.0. O desenvolvimento de sucessores desses processos (CRISP-DM 2.0 e JDM 2.0) foi iniciado em 2006, mas estancou desde então. O JDM 2.0 23 acabou sendo descartado sem ao menos chegar a um rascunho final (GÜNNERMAN; KREMER; SEIDL, 2011). Para trabalhar com a mineração de informações, em particular a análise preditiva, o padrão adotado acabou sendo o PMML (Predictive Model Markup Language), que é uma linguagem baseada em XML (Extensible Markup Language) desenvolvido pelo Data Mining Group (DMG) e suportado como formato de troca de dados entre diversas aplicações de mineração de dados. Como o nome sugere, ele cobre apenas modelos preditivos, uma tarefa de mineração de dados de grande importância para os modelos de negócios. Entretanto, extensões para cobrir outros processos (como a clusterização, por exemplo) foram propostos independentemente do DMG (GÜNNERMAN; KREMER; SEIDL, 2011). 2.2.3 Aplicações da Mineração de Dados A seguir apresenta-se algumas aplicações da mineração de dados na área de jogos, negócios, ciência e engenharia, direitos humanos, mineração de dados espacial, sensores, música, vigilância e mineração de padrões. 2.2.3.1 Jogos Desde os meados dos anos 60, com a disponibilidade de certos “oracles” (máquina abstrata utilizada para estudar problemas de decisão) para análise combinatória, principalmente em jogos de xadrez, uma nova área para aplicação de mineração de dados havia surgido. Visando extrair as estratégias utilizadas pelos humanos que jogavam contra as máquinas em jogos de xadrez, foram utilizados diversos experimentos com tablebase (sistema que possui uma análise pré-calculada da posição das peças em um tabuleiro de xadrez) que combinado com um estudo intensivo da informação adquirida, gerou uma sequência de padrões preditivos. Berlekamp e John Nunn são exemplos notáveis de pesquisadores nessa área (O’BRIEN; MARAKAS, 2011). 2.2.3.2 Negócios A mineração de dados é utilizada para analisar o histórico de transações comerciais, armazenadas como informações estáticas em data warehouses para revelar padrões e tendências escondidas. Programas de mineração de dados utilizam algoritmos de reconhecimento de padrões 24 em grandes quantidades de informação para auxiliar no descobrimento de informações de negócios estratégicas (O’BRIEN; MARAKAS, 2011). São alguns exemplos deste tipo de aplicação: • Com a tecnologia atual, a informação é coletada pelas companhias em uma proporção gigantesca. Por exemplo o Walmart processa 20 milhões de transações comerciais por dia. Essa informação é armazenada em um banco de dados centralizado, e seria inútil sem algum tipo de programa de mineração de dados para analisá-lo. Ao aplicar a técnica de mineração de dados sobre esse conjunto de informações, o Walmart consegue determinar tendências de vendas, desenvolver campanhas de marketing, e prever mais precisamente as ações a serem tomadas para conseguir a fidelidade do consumidor (ALEXANDER, 2014). • Toda vez que um cartão de crédito ou um cartão de fidelidade é utilizado, é coletada informação sobre o comportamento das transações do usuário. Apesar de muitas pessoas acreditarem que essas informações armazenadas por companhias tais como Google, Facebook e Amazon possam ser utilizadas de forma a quebrar a privacidade do usuário, empresas como a Ford e a Audi esperam um dia ter coletado informações suficientes sobre os hábitos de direção dos usuários a ponto de sugerir rotas mais seguras e alertar usuários sobre condições da estrada perigosas (GOSS, 2013). • Mineração de dados é útil em departamento de recursos humanos, identificando as características dos funcionários de maior sucesso. A informação obtida – tal como as universidades frequentadas por esses funcionários – auxilia o departamento a direcionar os esforços de recrutamento adequadamente (MONK; WAGNER, 2006). • Mineração de dados é uma ferramenta muito efetiva para catalogar informações na indústria da propaganda. Essa indústria possui um rico banco de dados de históricos transacionais de milhões de consumidores em períodos de anos. Ferramentas de mineração de dados podem identificar padrões entre consumidores e ajudar a identificar clientes mais aptos a responder propagandas por email (BATTITI; BRUNATO, 2011). 25 2.2.3.3 Ciência e Engenharia Nos últimos anos, a mineração de dados tem sido amplamente utilizada em áreas como ciência e engenharia, tal como bioinformática, genética, medicina, educação e engenharia elétrica. Seguem exemplos de aplicações: • No estudo da genética humana, a mineração das sequências ajuda a mapear a relação entre as variações individuais na sequência do DNA humano em caso de variações ou suscetabilidade à doenças. A mineração de dados demonstra como as modificações na sequência de DNA afetam os riscos de desenvolver doenças comuns como o câncer, o que é de grande importância para o melhoramento dos métodos de diagnóstico, prevenção e tratamento dessas doenças. Um dos métodos utilizados para realizar essa tarefa é conhecido como Redutor de Dimensionalidade Multifator (ZHU; DAVIDSON, 2007). • Na área da engenharia elétrica, as técnicas de mineração de dados têm sido amplamente utilizadas para monitoração de condições de equipamentos elétricos de alta voltagem. O propósito do monitoramento de condições é obter informações valiosas sobre, por exemplo, a situação do sistema de isolamento elétrico (ou outros parâmetros de segurança relacionados). Técnicas de clusterização de dados (assim como os mapas auto-organizáveis) são aplicadas para detectar condições anormais e gerar hipóteses sobre a natureza das anomalias (MCGRAIL et al, 2011). • Na pesquisa educacional, aonde a mineração de dados é utilizada para estudar os fatores que levam os estudantes a comportamentos que estão reduzindo sua taxa de aprendizado e para estudar fatores que influenciam a retenção de estudantes na universidade (AGUIRRE; VANDAMME; MESKENS, 2006). • Na vigilância de reações adversas à medicamentos, o Uppsala Monitoring Center tem, desde 1988, usado métodos de mineração de dados para detectar padrões indicativos de problemas de segurança com medicamentos emergentes no banco de dados global da WHO (que possui 4.6 milhões de acidentes suspeitos de reação adversa) (BATE et al, 1998). Uma metodologia semelhante foi desenvolvida para minerar grandes coleções de registros de saúde associando a prescrição de medicamentos com diagnósticos médicos (NORÉN et al, 2008). 26 2.2.3.4 Direitos Humanos Mineração de dados em registros governamentais – particularmente registros do departamento de justiça – permite o descobrimento de um padrão de violação de direitos humanos, em conexão com a geração e publicação de registros inválidos ou fraudulentos por várias agências governamentais (ZERNIK, 2010). 2.2.3.5 Mineração de Dados Espacial Esse método consiste na aplicação de mineração de dados em dados espaciais. O objetivo final da mineração de dados espaciais é encontrar padrões na informação a respeito da geografia. Há algum tempo, a mineração de dados e o GIS (Geographic Information Systems) existiam como duas tecnologias separadas, cada uma com os seus métodos, tradições e maneira próprias de lidar com a visualização e análise de informação. O aumento nas informações sobre referências geográficas ocasionadas pelo desenvolvimento em tecnologia da informação, mapeamento digital, sensoriamento remoto e a difusão global do GIS enfatizaram a importância do desenvolvimento de sistemas de informação indutivos para análise e modelagem geográficos (MAGUIRE; GOODCHILD; RHIND, 1991). A mineração de dados oferece grandes benefícios potenciais para uma aplicação de tomada de decisões baseada em GIS. A tarefa de integrar essas duas tecnologias tornou-se de importância crítica, especialmente com várias organizações de setores públicos e privados possuindo imensos bancos de dados com referências geográficas, tais como: • Escritórios que possuem análise ou referências à informações geoestatísticas; • Serviços de saúde públicos com informações sobre doenças em áreas geográficas; • Agência do meio-ambiente com análises do impacto na modificação do clima de acordo com o uso do terreno; • Companhias de geo-marketing fazendo segmentação dos clientes baseado na localização espacial (MAGUIRE; GOODCHILD; RHIND, 1991). 27 2.2.3.6 Sensores Sensores de redes wireless podem ser usados para facilitar a coleta de informações para mineração de dados espaciais em uma variedade de aplicações, como por exemplo monitoramento de poluição do ar (MA et al, 2008). Uma característica dessas redes é a proximidade desses sensores registram tipicamente os mesmos valores. Esse tipo de redundância de informação, mais a correlação espacial entre as observações dos sensores pede o uso de técnicas de agregação e mineração de dados. Medindo a correlação espacial entre diferentes sensores, uma classe especial de algoritmos podem ser desenvolvidas visando uma mineração de dados mais eficiente (MA et al, 2011). 2.2.3.7 Música Técnicas de mineração de dados, em particular análises de co-ocorrência são utilizadas para descobrir similaridades relevantes na indústria fonográfica com o propósito de classificar a música em gêneros de uma maneira mais objetiva (PACHET; WESTERMANN; LAIGRE, 2001). 2.2.3.8 Vigilância Mineração de dados foi utilizada pelo governo dos Estados Unidos em programas como TIA, CAPPS, ADVISE (GOVERNMENT ACCOUNTABILITY OFFICE, 2014), e o MATRIX (SECURITY ON NBCNEWS, 2014). Esses programas foram descontinuados devido à controvérsia sobre eles violarem a quarta emenda à constituição dos Estados Unidos, embora muitos programas que se formaram tendo os citados anteriormente como base continuam a ser financiados por diversas organizações ou sob nomes diferentes (ELETRONIC FRONTIER FOUNDATION, 2014). 2.2.3.9 Mineração de Padrões “Mineração de Padrões” é uma técnica de mineração de dados que envolve a descoberta de padrões em um determinado volume de dados. Nesse contexto, entende-se como padrões regras de associação entre os registros. Apesar do motivo original da pesquisa sobre a mineração de padrões ser o uso em transações comerciais, seu estudo tornou-se voltado à identificação de atividades terroristas. O National Research Council define a mineração de padrões como uma ferramenta para identificar padrões anômalos que possam ser associados à atividades terroristas. 28 Esses padrões podem ser identificados como pequenos sinais em um oceano de ruídos (NATIONAL RESEARCH COUNCIL, 2008). A mineração de padrões também inclui novas áreas tais como a MIR, em que os padrões temporais e atemporais são importados para serem utilizados com os métodos clássicos de descoberta de conhecimento. 2.3 BIG DATA O termo “Big Data” tornou-se um dos mais utilizados na tecnologia da informação em todo o mundo, porém as implicações e os principais benefícios para as empresas que investem nessa tecnologia ainda estão ainda a ser realizado nos próximos anos. De acordo com a IBM (2014) todos os dias são criados 2,5 quintilhões (1018) bytes de dados e quase noventa por cento dos dados atualmente foram criados nos últimos dois anos. A explosão de dados global é altamente impulsionada por tecnologias tais como vídeo digital, música, smartphones e a internet (ORACLE, 2014). Esses dados têm suas origens em uma variedade de fontes, incluindo pesquisas na web, sensores, transações comerciais, as interações de mídia social, uploads de áudio e vídeo, e os sinais de telefone celular GPS (IBM, 2014). Segundo o site DOMOSPHERE (2014) a cada minuto usuários de email enviem mais de 204 milhões de mensagens, o Google receba mais de 2.000.000 de consultas de pesquisa, os usuários do Facebook compartilhem mais de 684 mil dados de conteúdo, os consumidores gastem mais 270.000 dólares em compras na web, os usuários do Twitter enviem mais de 100.000 tweets, mais de 570 novos sites são criados, e os usuários do Instagram compartilham 3.600 novas fotos. Dessa forma, todas essas fontes de informação contribuirão para atingir 35 zettabytes de dados armazenados em 2020 (EATON et al, 2012). Estes conjuntos de dados cada vez mais diversos se complementam e permitem às empresas descobrir padrões escondidos e explorar novas idéias. Desvendar esses padrões melhora as operações, as tomadas de decisão e dá elementos para melhorar os processos de negócios (GARTNER RESEARCH, 2014). A quantidade e variedade de fontes de informação criaram desafios de armazenamento, processamento e análise significativo de organizações em todo o mundo. No entanto, a tremenda tamanho e da complexidade do "Big Data" são apenas um lado da questão. O outro aspecto da 29 grande questão dos dados é a demanda por custo formas eficazes de coleta, armazenamento, análise e visualização. Em seu ciclo de vida, a informação tem diferentes requisitos de qualidade, segurança e acesso, e essas diferenças formam a maior parte dos aspectos de grande complexidade (GARTNER RESEARCH, 2014). 2.3.1 Os 3V’s do Big Data O gerenciamento de dados evoluiu principalmente em torno de dois problemas fundamentais: volume e capacidade de processamento. No entanto, os desafios mudaram e não é mais uma questão de armazenamento ou mesmo capacidade de processamento, mas como os dados se tornaram mais complexos e com uma variedade de fontes novas, eles são recolhidos em velocidade recorde; isso cria uma árvore de dimensões que segundo a Gartner Research (2014), é descrita conforme segue: “Big Data é um conjunto de informações de alto volume, velocidade e variedade que demandam formas inovadoras de processamento de informações para aprimorar as idéias e tomadas de decisões econômicas”. 2.3.1.1 Volume dos Dados Segundo Steve Lohr (2014) do New York Times destacou em seu artigo "The Age of Big Data", tendências em tecnologia estão abrindo as portas trazendo uma nova abordagem para compreensão do mundo e modificando as maneiras de tomar decisões. Hoje há muito mais dados do que podemos processar, e esse volume continua crescendo a 50% ao ano, ou mais do que dobrando a cada dois anos. De acordo com a Gartner Research (2014), um volume de informações que caracterize Big Data pode ser definido conforme segue: “O volume de informações é considerado Big Data quando a capacidade de processamento das tecnologias de captura nativas e seus processos são insuficientes para entregar resultados para os casos de uso subsequentes. Ele também pode ocorrer quando a tecnologia existente foi especificamente desenhada para lidar com esses volumes – uma solução de sucesso para o Big Data”. 30 2.3.1.2 Velocidade dos Dados Os dados evoluíram para um fluxo contínuo. A velocidade com que as organizações estão coletando dados está em constante crescimento com a chegada de tecnologias de streaming e com o aumento constante das fontes de informação. O que no passado costumavam ser análises de informações negócios em um determinado período de tempo evoluíram para análises de informações em tempo real (GARTNER RESEARCH, 2014). No entanto, o problema não é apenas um fluxo maior de dados, e sim informações inteiramente novas. Por exemplo, já existem inúmeros sensores digitais em telefones, automóveis, utilitários e equipamentos industriais, para medir e comunicar localização, movimento, vibração, temperatura e umidade, entre muitas outras variáveis (GARTNER RESEARCH, 2014). De acordo com a Gartner Research (2014), a velocidade dos dados é definida da seguinte forma: “É considerada alta velocidade quando há uma alta taxa de chegada e/ou consumo de dados, mas com foco na velocidade variável de um grupo de dados ou nas taxas de troca entre dois ou mais grupos de dados”. 2.3.1.3 Variedade dos Dados O maior desafio no conceito de “Big Data” não é sobre o tamanho ou a velocidade dos dados coletados, mas como essa informação pode ser utilizada para tratar os objetivos de negócios específicos e como as organizações acabarão por adaptar os seus processos para obter vantagens dessa oportunidade concedidas pelos dados. O maior benefício da variedade de dados nesse conceito é a capacidade de responder questões de alta complexidade, coletar dados relevantes e usar as tecnologias certas para traduzir e processar essas informações em análise que levam às mais diferentes idéias, permitindo a tomada de decisões em tempo real. De acordo com a Gartner Research (2014), a variedade de dados é definida da seguinte forma: “Ativos de informação altamente variáveis que incluem uma mistura de formas, tipos e estruturas múltiplas e dados subutilizados habilitados para novas formas de processamento representam variabilidade.” 31 2.3.2 Etapas do Big Data Segundo a Microsoft Developer Network (2014), a mineração de dados usa análise matemática para derivar padrões e tendências que existem nos dados. Esses padrões não podem ser descobertos com a exploração de dados tradicional pelo fato de as relações serem muito complexas ou haverem muitos dados. Segundo Jiawei Han e Micheline Kamber (2001) processo de KDD (Knowledge Discovery in Database – Busca de Conhecimento em Banco de Dados) consiste de uma sequência iterativa dos seguintes passos: • Limpeza de dados: remove dados inconsistentes e fora do padrão (noise data); • Integração de dados: possibilita a integração de várias fontes de dados, mantendo a consistência e a coerência dos dados integrados; • Seleção dos dados: seleciona os dados relevantes para a aplicação das técnicas de mineração de dados; • Transformação de dados: possibilita a transformação ou consolidação dos dados no formato apropriado para o processo de mineração, através de operações do tipo sumarizaçãoo ou agregação, entre outras técnicas; • Mineração dos dados: processo essencial, onde técnicas são aplicadas para análise e extração dos padrões dos dados. • Avaliação dos padrões: identifica os padrões verdadeiramente interessantes entre os diversos apresentados pelo processo de mineração de dados, baseados em algumas medidas de interesse. 2.3.3 Aplicações do Big Data Segundo o McKinsey Global Institute (2014), há cinco maneiras aplicáveis de processar grandes quantidades de dados que ofereçam um potencial de transformação para criação de valores e têm implicações na forma como as organizações irão processá-los, organizá-los e gerenciá-los, a saber: 32 • Criando transparência: ao fazer o “Big Data” mais acessível às partes interessadas em tempo hábil. • Permitindo experimentos, expondo variabilidades e aumentando o desempenho: as organizações coletam mais informações detalhadas (em tempo real) em várias dimensões (inventários de produtos, lista de dados de funcionários, etc). Esse processo consiste em criar experimentos controlados com esses dados. Usar esse método também permite análises da variabilidade em desempenho e entender as suas causas, com o objetivo de permitir reajuste no desempenho para níveis mais elevados. • Segmentando populações para personalizar ações: Esse processo permite que mais organizações criem segmentos altamente específicos e adaptem produtos para atender à essa segmentação. Essa abordagem é altamente conhecida em propaganda e gerenciamento de riscos, e mesmo companhias que têm usado segmentação de clientes há anos começaram a aplicar técnicas de Big Data, tal como segmentação em tempo real de consumidores para direcionar promoções e anúncios. • Substituindo/ajudando tomadas de decisões humanas com algoritmos automáticos: Análises sofisticadas podem melhorar substancialmente tomadas de decisões, minimizar riscos e revelar informações valiosas. Tais análises têm aplicações para organizações de avaliação de risco de crédito em instituições financeiras com o preço de ajuste fino automático no varejo. Em alguns casos, as decisões não serão necessariamente automatizadas, mas aumentadas por meio da análise de enormes conjuntos de dados e tecnologias. Muitas organizações já estão fazendo as melhores decisões através da análise de conjuntos de dados inteiros de clientes, funcionários, ou até mesmo sensores incorporados nos produtos. • Inovando modelos de negócios, produtos e serviços: Grandes quantidades de dados podem permitir às empresas criar novos produtos e serviços para melhorar os já existentes ou mesmo inventar modelos de negócios inteiramente novos. Os fabricantes estão utilizando dados obtidos a partir da utilização de produtos reais para melhorar o desenvolvimento da próxima geração de produtos e criar ofertas de pós-vendas. O surgimento dessa análise de dados em tempo real criou todo um novo 33 grupo de serviços baseados em localização, que são considerados nos preços dos seguros contra acidentes com base em onde e como as pessoas dirigem seus carros, por exemplo. 2.4 REDES NEURAIS ARTIFICIAIS As Redes Neurais artificiais são definidas por Kohonen (1982 apud FERNANDES, 2005) como redes massivamente paralelas e interconectadas, de elementos simples, com organização hierárquica e que interagem com objetivos do mundo real da mesma maneira que o sistema nervoso biológico. Redes Neurais Artificiais (RNAs) são modelos computacionais inspirados no sistema nervoso central (especificamente o cérebro) que é capaz de realizar aprendizado e reconhecimento de padrões. Elas são normalmente apresentadas como “neurônios” interconectados que podem calcular os valores das entradas (HAYKIN, 1999). As redes neurais artificiais são capazes de aprender os relacionamentos entre um conjunto de entradas e uma saída específica quando sua dependência é desconhecida. Ela consiste de várias unidades computacionais (neurônios) que processam os dados de entrada de modo a produzir o resultado desejado. Os neurônios são dispostos em camadas, sendo as entradas de cada camada sendo definidas pelas saídas das camadas anteriores. Dessa maneira as entradas da primeira camada são as entradas da rede, e as saídas da última camada são as respostas para a rede (HAYKIN, 1999). Em um exemplo, uma rede neural para o reconhecimento da escrita manual é definida por um conjunto de neurônios que podem ser ativados pelos pixels de uma imagem de entrada. As ativações desses neurônios são então processadas, medidas e transformadas em uma função definida pelo engenheiro dessa rede, para outros neurônios. Esse processo é repetido até que finalmente o neurônio de saída é ativada. Isso determina que o caractere foi lido (HAYKIN, 1999). 2.4.1 História das Redes Neurais Artificiais Warren McCulloch e Walter Pitts, em 1943, criaram um modelo computacional para redes neurais baseado em matemática e algoritmos. Eles chamaram esse modelo de “Threshold Logic”. O modelo abriu caminho para a pesquisa de redes neurais dividirem-se em duas abordagens distintas: uma focada em processos biológicos do cérebro e a outra focada na aplicação das redes neurais para 34 inteligência artificial (MCCULLOC; PITTS, 1943 apud CONSORTIUM ON COGNITIVE SCIENCE INSTRUCTION, 2014). Nos meados dos anos 40 o psicólogo Donald Hebb criou uma hipótese de aprendizagem com base no mecanismo de plasticidade neural que agora é conhecido como aprendizagem Hebbiana. A aprendizagem Hebbiana é considerada uma regra de aprendizagem “típica” sem supervisão, e suas variantes posteriores foram os primeiros modelos de potenciação a longo prazo. Essas idéias começaram a ser aplicadas à modelos computacionais em 1948 com máquinas do tipo B de Turing (HEBB, 1949 apud HAYKIN, 1999). Segundo Farley e Clark (1954 apud SAFFELL; MOODY, 2001) inicialmente foram utilizadas máquinas computacionais (calculadoras) para simular uma rede Hebbiana no MIT. Outras máquinas foram simulando redes neurais foram criadas por Rochester, Holland, Haibt e Duda em 1956 (ROCHESTER et al,1956 apud JACOB et al, 2012). Segundo Rosenblatt (1958, apud JACKSON, 2014), sua pesquisa originou o Perceptron, um algoritmo para reconhecimento de padrões baseado em uma rede de computadores de aprendizagem de duas camadas usando simples adição e subtração. Com notação matemática, Rosenblatt também criou outro circuito mais avançado, cuja computação não pôde ser processada até a criação do algoritmo de retropropagação de Paul Werbos, em 1975 (WERBOS, 1975 apud XIAO, 2014). Segundo Minsky e Papert (1969, apud JACKSON, 2014) a pesquisa em redes neurais estagnou depois da sua publicação do estudo de aprendizado de máquina. Eles descobriram duas questões fundamentais com os sistemas computacionais que processavam redes neurais. A primeira questão foi que redes neurais de camada única eram incapazes de processar o circuito “ou” exclusivo. A segunda foi que os computadores não eram sofisticados o suficiente para gerir eficazmente o tempo de longo prazo de processamento exigido por grandes redes neurais e com isso, as pesquisas em redes neurais desaceleraram até haver poder de processamento suficiente. A criação do algoritmo de retropropagação também foi um salto para resolver o problema de “ou” exclusivo. (WERBOS, 1975 apud XIAO, 2014). O processamento distribuído paralelo, em meados dos anos 80, permitiram um maior processamento das redes que simulavam processos neurais (RUMELHART; MCCLELLAND, 1986 apud HSIEH, 2014). Na década de 90, as redes neurais foram ultrapassadas em popularidade pela 35 aprendizagem de máquina e outros métodos, muito mais simples, classificados como “lineares”. O interesse renovado em redes neurais foi desencadeado no ano 2000, com o advento do conceito de aprendizagem profunda (RUSSEL, 2014). 2.4.2 Evolução das Redes Neurais Artificiais Modelos biofísicos, como a teoria BCM (Bienenstock Cooper Munro), têm sido importantes para a compreensão dos mecanismos de plasticidade sináptica, e tiveram aplicações tanto em ciência da computação como em neurociência. A pesquisa focou na compreensão dos algoritmos computacionais utilizados no cérebro, com alguma evidência biológica recente para redes de base radial e retropropagação neural, assim como mecanismos de processamento de dados. Dispositivos computacionais foram criados em CMOS (Complementary Metal-Oxide Semicondutor), tanto para simulação biofísica quanto para a computação neuromórfica. Esforços mais recentes mostram a possibilidade de criação de nanodispositivos. Se bem sucedidos, esses esforços poderiam inaugurar uma nova era de computação neural que é um passo além da computação digital, por depender de aprendizagem ao invés da programação e porque é fundamentalmente analógico ao invés de digital, mesmo que as primeiras instâncias possam, de fato, estar com dispositivos digitais CMOS (YANG et al, 2008). Entre 2009 e 2012, as redes neurais recorrentes e de busca profunda desenvolvidas pelo grupo de pesquisa Jürgen Schmidhuber no Swiss AI Lab IDSIA ganharam oito competições internacionais de reconhecimento de padrões e aprendizagem de máquina (KURZWEIL, 2012). A rede neural LSTM ganhou três competições em reconhecimento de escrita à mão na ICDAR sem qualquer conhecimento prévio das três diferentes linguagens a serem aprendidas (GRAVES; SCHMIDHUBER, 2012). Variantes do algoritmo de retropropagação assim como métodos de Geoff Hinton e seus colegas na Universidade de Toronto (HINTON; OSINDERO; TEH, 2006) podem ser utilizados para treinar arquiteturas profundas e altamente não-lineares similares ao Neocognitron de Kunihiko Fukushima (FUKUSHIMA, 1980) e a “Arquitetura Padrão de Visão” inspirado pelas pesquisas nas células simples e complexas identificadas por David H. Hubel e Torsten Wiesel no córtex visual primário (RISENHUBER; POGGIO, 1999). 36 2.4.3 Características das Redes Neurais Artificiais Uma rede neural artificial é composta por várias unidades de processamento, cujo funcionamento é bastante simples. Essas unidades, geralmente são conectadas por canais de comunicação que estão associados a determinado peso. As unidades fazer operações apenas sobre os seus dados locais, que são entradas recebidas pelas suas conexões (FERNANDES, 2005). Segundo Filho (1996, apud FERNANDES, 2005), a operação de uma unidade de processamento pode ser resumida da seguinte maneira: • Sinais são apresentados à entrada; • Cada sinal é multiplicado por um número, ou peso, que indica sua influência na saída da unidade; • É feita a soma ponderada dos sinais que produz um nível de atividade; • Se este nível de atividade exceder um certo limite (threshold) a unidade produz uma determinada resposta de saída. Figura 1. Ilustração simbólica do modelo McCullock-Pitts. Fonte: Kawagushi (2014). 37 Figura 2. Função Linear de Threshold Fonte: Kawagushi (2014). Segundo Fernandes (2005) considerando os sinais de entrada I1, I2,..., IN, os pesos W1, W2,..., WN, a função f representada na Figura 2 e o limitador T; com sinais assumindo valores booleanos (0 ou 1) e pesos e valores reais, o nível de atividade é dado por: f = W1I1 + W2I2 +... + WnXn A saída y é dada por: Y = 1, se f >= t ou y = 0, se f < t A maioria dos modelos de redes neurais possui alguma regra de treinamento, onde os pesos de suas conexões são ajustados de acordo com os padrões apresentados. Segundo Kawagushi (2014) as arquiteturas de redes neurais artificiais são compostas por camadas interconectadas que podem ser classificadas em três grupos: • Camada de Entrada: Nessa camada os valores iniciais são apresentados à rede • Camadas Intermediárias: aonde o processamento dos dados é realizado, visando definir as características • Camada de Saída: Aonde o resultado final é concluído e apresentado. 38 Figura 3. Exemplo do funcionamento de uma Rede Neural Artificial. Fonte: Oliveira (2014). Os sinais de propagação em uma Rede Neural Artificial podem ser divididos em duas categorias: feedfoward e feedback. Segundo Balabin e Lomakina (2009) uma Rede Neural Artificial feedfoward foi o primeiro e mais simples tipo de rede desenvolvida. Nessa rede, a informação move-se em apenas uma direção a partir dos neurônios de entrada até os neurônios de saída através dos nodos escondidos (se houver algum). Não há ciclos ou loops nesse tipo de rede. 39 Figura 4. Exemplo do funcionamento de uma Rede Neural Artificial feedfoward. Fonte: Dawson et al (2014). Diferentemente das redes feedfoward, nas Redes Artificiais Neurais feedback os sinais de entrada podem propagar da saída de qualquer neurônio para a entrada em qualquer outro neurônio (FERNANDES, 2005). Figura 5. Exemplo do funcionamento de uma Rede Neural Artificial feedback. Fonte: Department of Psychology from University of Toronto (2014). 40 Segundo Fernandes (2005), outro fator importante é a maneira pela qual uma rede neural se relaciona com o ambiente. Nesse contexto, existem os seguintes paradigmas de aprendizado: • Aprendizado Supervisionado: quando é utilizado um agente externo que indica à rede a resposta desejada para o padrão de entrada; • Aprendizado Não-Supervisionado: quando não existe um agente externo indicando a resposta desejada para os padrões de entrada; • Reforço: quando um crítico externo avalia a resposta fornecida pela rede. O tipo de rede neural utilizada pelo aplicativo deste TCC é a dos Mapas de AutoOrganização de Kohonen, classificada como uma rede feedfoward de treinamento nãosupervisionado. 2.4.4 Aplicações das Redes Neurais Artificiais Segundo Balabin e Lomakina (2009) a utilidade dos modelos de redes neurais artificiais estão no fato de que eles podem ser utilizados para deduzir uma função a partir de observações. Isto é particularmente útil em aplicações em que a complexidade dos dados ou tarefa torna a criação de uma tal função à mão impraticável. As tarefas nas quais as redes neurais artificiais são aplicadas tendem a se encaixar nas seguintes categorias: • Função de aproximação, ou análise de regressão, incluindo predição de séries de tempo e modelagem. • Classificação, incluindo reconhecimento de padrões e sequências e tomada de decisões sequenciais. • Processamento de dados, incluindo clusterização, filtragem e compressão. • Robótica, incluindo manipuladores diretos, tais como próteses. • Controles. As áreas de aplicação incluem a identificação de sistemas e controle (controle de veículos, controle de processos, gestão de recursos naturais), química quântica, jogos e tomadas de decisões 41 (gamão, xadrez, pôquer), reconhecimento de padrões (sistemas de radar, reconhecimento facial e etc), o reconhecimento de seqüências (gestos, falas, reconhecimento de texto escrito à mão), diagnósticos médicos, aplicações financeiras (por exemplo, sistemas de negociação automatizados), mineração de dados (KDD) e filtragem de spams de email (BALABIN; LOMAKINA, 2009). Segundo Gurney (1997 apud FERNANDES, 2005), as etapas de desenvolvimento de aplicações de redes neurais são: 1. Coleta de Dados e Separação em Conjuntos; 2. Configuração da Rede; 3. Treinamento; 4. Teste; e 5. Integração. As redes neurais artificiais também têm sido utilizadas para diagnosticar diversos tipos de câncer. Um sistema híbrido de detecção de câncer de pulmão baseado em redes neurais chamado HLND melhora a precisão do diagnóstico e a velocidade da radiologia do câncer de pulmão (GANESAN, 2012). Essas redes também têm sido utilizadas para diagnosticar câncer de próstata. Os diagnósticos podem ser utilizados para fazer modelos específicos baseados em um grande grupo de pacientes. O câncer colorretal também pode ser previsto com a utilização de redes neurais com mais precisão que os métodos clínicos atuais (BOTTACI, 1997). 2.5 MAPAS AUTO-ORGANIZÁVEIS Os mapas auto-organizáveis (SOM – Self Organizing Maps) são uma estrutura de dados computacional originalmente proposto por Tuevo Kohonen em 1982. A estrutura de dados e os seus algoritmos associados procuram imitar, ao menos em comportamento, a natureza básica de organização dos neurônios, tal como descrito anteriormente. Os mapas auto-organizáveis procuram identificar padrões em informações inseridas, se reorganizando de acordo com o treinamento dado pelos ciclos de dados repetidos (KOHONEN, 2001). 42 Em sua forma mais básica, os mapas auto-organizáveis são um plano de células distribuído em uma topologia simples (muitas vezes apenas uma grade). Cada célula representa parte dos dados, geralmente um vetor de valores numéricos. Vetores de entrada do mesmo formulário são apresentados então aos mapas auto-organizáveis durante sua fase de treinamento. Cada entrada é usada para modificar ligeiramente o mapa de modo que uma parte do plano de células torne-se "mais como" o vetor de entrada. Após ciclos repetidos de inserções, os conjuntos desenvolvem uma similaridade e as formações tornam-se evidentes em um plano de duas dimensões, facilitando a visualização dos padrões (KOHONEN, 2001). Mapas auto-organizáveis são consideradas ferramentas poderosas de aprendizagem estatísticos pois funcionam sem supervisão permitem uma visualização simples, e podem ser usado como um algoritmo para o desenvolvimento do cluster. Por causa da flexibilidade do paradigma dos mapas auto-organizáveis, eles têm sido utilizados para uma variedade de aplicações, desde o processamento acústico até análise da bolsa (OJA, KASKI, 1999). 2.5.1 Estruturas Neurais Embora ainda existam controvérsias sobre como exatamente o cérebro processa e armazena informações, a idéia da estrutura auto-organizável dentro do panorama neural é aceita, apesar dos debates constantes sobre aprendizado, evolução e genética a respeito desse tópico. Muitos estudos têm demonstrado que as conexões neurais e mesmo arranjo espacial das funções neurais no cérebro se desenvolvem em resposta aos padrões do mundo em que o indivíduo está exposto. Por exemplo, demonstrou-se que, dentro do córtex auditivo do cérebro existe um mapa dos neurônios (conhecido como o mapa tonotópico). Os neurônios que compõem esse mapa são ordenados espacialmente de acordo com o tom e freqüência dos tons percebidos (KOHONEN, 2001). Esse fenômeno não é específico ao córtex, mas pode ser encontrada em outras áreas do cérebro. O estudo de estruturas neurais de ratos demonstraram que os mapas do seu ambiente geográfico desenvolvem-se dentro do hipocampo. Nesse caso, a posição de um rato em um quarto ou labirinto corresponde a uma seção específica do mapa hipocampal (KOHONEN, 2001). Embora a exata natureza do processamento cerebral não seja clara, há evidências biológicas que podem descrever a percepção neural da seguinte forma: quando os órgão sensoriais percebem as entradas, esses valores são passados para certas partes do cérebro e estimulam as células neurais. 43 As células estimuladas, por sua vez, passam a resposta ao longo dos seus vizinhos até que algum fator de decaimento interrompa a propagação dos sinais. Dependendo do valor de entrada, uma parte do cérebro é acionada. Uma vez expostos a vários estímulos semelhantes, podem-se desenvolver clusters de padrões. Um aspecto interessante desse processo é que ele pode ser executado em paralelo em muitas partes do cérebro. Por exemplo, a percepção de um carro vermelho dirigindo por uma rua pode ativar vários grupos de neurônios. Um cluster pode tornar-se animado por causa da cor do carro (um cluster correspondente a entrada visual vermelho, talvez), outro pode tornar-se animado devido ao ruído dissonante voz alta, e ainda um outro por causa de uma pessoa que andando ao mesmo tempo. A ativação dos vários grupos ao mesmo tempo faz com que os clusters criem associações entre si. Dentro desse contexto, se um determinado indivíduo é repetidamente exposto a esta cena, ele pode aprender (via associação) que um ruído dissonante alto é geralmente associado com a cor vermelha (SETH, 2014). A descrição acima é uma interpretação simplificada do processo de aprendizagem e processamento neural, porém é o suficiente para o desenvolvimento de modelos computacionais baseados no cérebro. O desenvolvimento de clusters dentro de mapas neurais com base nos padrões do espaço de entrada tem inspirado muitas das técnicas que se enquadram na categoria mais ampla de redes neurais. 2.5.2 Arquitetura do Mapa de Kohonen Segundo Fernandes(2005, apud LOESH, 1996) a rede de Kohonen é dividida em duas camadas: a camada de entrega (Xi) e a camada competitiva de neurônios (Yj). Cada neurônio da camada competitiva está conectado à camada de vetores por pesos sinápticos (Wij) que são ajustados por um processo de aprendizado não-supervisionado. Os pesos sinápticos são utilizados para associar um padrão de entrada à um neurônio da camada competitiva, e é selecionado como vencedor aquele que mais se assemelha ao vetor de entrada (menor distância euclidiana em relação à esse vetor). A distância euclidiana é calculada através da seguinte equação: dj = SS (Wij (t) – Xi (t)); 44 Figura 6. Exemplo de funcionamento de um Mapa de Kohonen. Fonte: Clark (2014). Aos valores iniciais são atribuídos números de pontos flutuantes que formam o padrão de entrada para a rede. Uma rede de Kohonen exige que essas entradas sejam normalizadas para o intervalo entre -1 e 1. Apresentando um padrão de entrada para a rede irá causar uma reação dos neurônios de saída (HEATON, 2013). Dentro da equação apresentada, Xi (t) é o elemento do vetor de entrada no instante t, e Wij (t) é o valor dos pesos no vetor de pesos no instante t. Quando o processo de seleção é finalizado, os pesos do neurônio vencedor e dos seus vizinhos são ajustados, o que provê a auto-organização da rede neural (FERNANDES, 2005). A camada competitiva de um Mapa de Kohonen é representada em uma matriz bidimensional onde a vizinhança de um neurônio pode estar representada de algumas formas (TAFNER 1995 apud FERNANDES, 2005). 45 Figura 7. Vizinhança dos neurônios de um Mapa de Kohonen no padrão retangular Fonte: Mnemosyne Studio (2014). A Figura 7 representa a vizinhança de um Mapa de Kohonen no padrão retangular, porém esse é apenas um dos padrões que pode ser assumido, como demonstra a Figura 8. Figura 8. Vizinhança dos neurônios de um Mapa de Kohonen no padrão hexagonal. Fonte: Mnemosyne Studio (2014). O neurônio vencedor e seus vizinhos são chamados de regiões, que fazem o reconhecimento dos padrões de entrada, tendo seu raio reduzido no decorrer do treinamento. Em um momento final, a vizinhança tende a resumir-se em um único neurônio vencedor, tendo somente seus pesos ajustados. Segundo Staker (1995 apud FERNANDES, 2005) o ajuste dos pesos dos neurônios da camada competitiva pode ser expressado pela seguinte equação: 46 Wij(t+1) = Wij(t) + aa(t)[Xi(t) – Wij(t)] Onde: Wij(t): valor dos pesos do vetor de pesos no instante t; aa(t): taxa de aprendizagem no instante t; e Xi(t): elemento do vetor de entrada no instante t. O decréscimo da taxa de aprendizagem pode ser expresso pela equação: aa (t) = aa (t) [1 – t / T] Onde: t: iteração atual; T: número total de iterações no processo de aprendizagem. A taxa de aprendizagem decresce a cada iteração, e o número total de iterações no processo de aprendizagem é um parâmetro que deve ser fixado antes do treinamento da rede. A medida adotada é de pelo menos 500 vezes o número de neurônios da camada de saída (FERNANDES, 2005). O processo de treinamento para os mapas de Kohonen é competitivo. Para cada treinamento um neurônio irá “vencer”. Esse neurônio vencedor tem os seus pesos ajustados, o que faz com que ele reaja ainda mais fortemente à entrada na próxima iteração. Como diferentes neurônios “vencem” para diferentes padrões, sua habilidade de reconhecer aquele padrão em particular será aumentada (HEATON, 2013). 47 3 TRABALHOS RELACIONADOS Existem diversos softwares que utilizam conceitos de redes neurais e Big Data. Porém, dentro do foco de dispositivos móveis, encontram-se apenas aplicativos que utilizam esses conceitos independentemente ou, no máximo, dois conceitos dentro de um mesmo trabalho. Sendo assim, existem determinados trabalhos que especificamente se assemelham à pesquisa proposta, conforme itens a seguir. 3.1 TRABALHOS ACADÊMICOS Nessa seção são apontados os trabalhos acadêmicos que utilizam conceitos similares ao da pesquisa. 3.1.1 Análise de Desempenho de Aprendizagem Não-Supervisionada para Previsão de Velocidade de uma Rede Rodoviária Muitas aplicações de sistemas de transporte inteligente requerem previsões específicas de parâmetros de tráfego. Métodos de aprendizado de máquina direcionados à dados, tal como regressão de suporte vetorial podem efetivamente efetuar essa tarefa com precisão. Entretanto, esses métodos sempre foram testados em pequenos segmentos de estrada. Essa pesquisa propôs um método escalável utizando regressão de suporte vetorial para lidar com o problema de previsão de velocidade em uma rede de estradas grande e heterogênea. Ela utilizou técnicas de aprendizagem sem supervisão, através de mapas auto-organizáveis e clusterização (IEEEXPLORE DIGITAL LIBRARY, 2014). Essa pesquisa realizou mineração de dados através de Mapas de Kohonen, que é o método escolhido para a mineração de informações neste TCC. 3.1.2 Redes Neurais e sua Aplicação para o Auto-Diagnóstico Estrutural Segundo Hsieh (2014), o objetivo desse estudo foi a concepção de uma rede neural em JAVA para estimar a localização e o tamanho de fissuras em uma viga. Esse estudo também explorou o potencial das redes neurais artificiais para o auto-diagnóstico estrutural. Foi formulada uma arquitetura de rede neural para auto-diagnóstico estrutural visando atingir esse objetivo. Existem três componentes dessa arquitetura: o modelo do sistema físico, as unidades de préprocessamento de dados e as redes neurais que são treinadas para prever a localização e a 48 magnitude do dano. Pontos importantes do projeto incluem as variáveis a serem observadas, a arquitetura das redes neurais, e o algoritmo de aprendizado. Inicialmente, um modelo de diagnóstico de dano estrutural é desenvolvido e testado. O mesmo então estende-se para lidar com dois pontos de danos, e assim sucessivamente. Os resultados deste trabalho podem ser usados para a inspeção de elementos estruturais, principalmente vigas. O método proposto resolve eficazmente o problema inverso de estimar o tamanho e localização de danos a partir da informação de deslocamento do feixe para este cenário restrito. A rede neural também possui um desempenho adequado para dados contaminados por erros de medição. Tal trabalho utilizou a mineração de dados via redes neurais sobre um mapa de dados, assim como este TCC, para identificar padrões diversos na estrutura dos dados analisados. 3.1.3 Entendendo os Padrões de Mobilidade Humana Através dos Registros Telefônicos Segundo Yan (2014) nesta tese é apresentado um estudo cultural sobre a distribuição humana e como ela pode ser influenciada por fatores sócio-econômicos regionais, como a densidade populacional, a renda e a taxa de desemprego. Registros de telefonia móvel contém informações de chamadas detalhadas da localização espaço-temporal de centenas de milhares de usuários, que podem ser utilizadas para representar o deslocamento humano. Os comportamentos de usuários de 24 regiões autônomas (5 em São Francisco, 3 na República Dominicana e 16 em um país europeu) são estudadas através dessa massa de dados de telefonia móvel. Nessa pesquisa é relatado que as pessoas em diferentes regiões tem padrões muito heterogêneos de deslocamento, que podem ser agrupados em quatro famílias distintas. Os dados obtidos como resultado demonstram que a distribuição dos deslocamentos em relação ao comprimento da viagem possuem um certo grau de correlação com a densidade populacional e sua renda. Esse trabalho se utiliza de Mapas de Kohonen, mineração de dados em Big Data com dispositivos móveis para reconhecimento de padrõs de comportamento humano, em uma proposta relacionada à pesquisa. 49 3.2 TRABALHOS COMERCIAIS Nessa seção são apontados os trabalhos comerciais que utilizam conceitos similares ao deste TCC, tais como: 3.2.1 Advizor Segundo a Advizor Solutions (2014), o Advisor é um sistema de Business Intelligence baseado em análise preditiva e gerenciamento de dados em memória, o que permite um retorno rápido dos dados analisados para o usuário. Ele é baseado em uma tecnologia de 15 anos dos laboratórios Bell, cuja pesquisa era focada em como os humanos percebem e reagem à informação recebida. Essa análise de padrões humanos é o que o relaciona com o trabalho de pesquisa, que também minera dados dos perfis utilizando redes neurais. 3.2.2 Augify O Augify é um sistema em nuvem que permite depurar aplicações de Big Data na nuvem. Segundo o Augify (2014) ele consegue coletar dados de diferentes fontes (tais como notícias, blogs, fórum e mídia social), prever comportamentos e eventos e utilizar a rede neural mais adequada para as suas necessidades. Assim como este TCC, ele se utiliza de fontes de informações de redes sociais (e afins, no caso do Augify) para minerar dados sobre os usuários das mesmas. 3.2.3 Centrifuge Visual Network Analytics O Centrifuge Visual Network Analytics é uma tecnologia de descoberta de conhecimento em Big Data que provê a capacidade de conectar-se, visualizar e analisar dados combinando análise de informações, visualizações interativas e recursos de colaboração para simplificar o reconhecimento de padrões e de conexões entre nodos. Segundo a Centrifuge Systems (2014), o sistema combina integração de dados com mapeamento de relacionamento dinâmico e análise visual para resolver fraudes e investimentos de risco em serviçoes financeiros, farmacêuticos e governamentais. Assim como este TCC, o Centrifuge faz mapeamento de dados em Big Data com Mapas de Kohonen, visando descobrir padrões implícitos. 50 3.2.4 Hawrkore Esse aplicativo permite o reconhecimento de escrita utilizando-se mapas de Kohonen. O usuário escreve na tela do dispositivo móvel com o toque e o algoritmo interpreta o caractere ou frase e faz o seu reconhecimento, permitindo assim copiá-lo para memória para ser colado em outros aplicativos de notas (ITUNES APP STORE, 2014). O Hawrkore é um aplicativo para dispositivos móveis em Objective-C, assim como a proposta da pesquisa, e utiliza também a mesma técnica de redes neurais para realizar a sua análise. 3.2.5 Paper Boy Online Segundo a iTunes App Store (2014) esse aplicativo refere-se a uma rede neural de notícias. Um bot lê feeds RSS e determina se os artigos possuem algo em comum. O Paper Boy classifica os artigos de três formas diferentes: eventos, eventos relacionados e palavras dos eventos. Se os artigos possuem características comuns, o algoritmo irá colocá-los no mesmo evento. Se os eventos parecem relacionados, então serão classificados em uma seção de “eventos relacionados”. Cada evento é derivado de palavras encontradas na descrição e título dos artigos. Essas palavras podem ser escolhidos para ver se outros artigos compartilham as mesmas palavras. O aplicativo faz uso de redes neurais para classificar e relacionar as informações de forma organizada para o usuário. Assim como na pesquisa, o aplicativo faz uso de redes neurais para a mineração de dados e o relacionamento de informações, visando buscar um padrão solicitado pelo usuário. Ele também utiliza a mesma tecnologia e linguagem de programação. 3.2.6 Plotly O Plotly é um sistema online de análise e visualização de dados. Ele permite a criação de gráficos online, análises, um terminal para utilização de Python bem como bibliotecas gráficas para Python, R, MATLAB, Perl, Julia, Arduino e REST. Segundo o Plotly (2014), ele permite a análise de informações no formato de planilhas de Excel, CSV, TSV, arquivos de MATLAB, Microsoft Access ou Texto. Assim como este TCC, o Plotly faz mineração de dados em Big Data. 51 3.3 ANÁLISE COMPARATIVA Após a pesquisa bibliográfica das tecnologias existentes, foi realizada uma análise comparativa dos aplicativos existentes que as usavam para determinar a relevância de cada um deles para o trabalho. Durante a análise foram verificados quais dos requisitos eram atendidos por eles e de que forma. Os trabalhos acadêmicos foram consultados na base de artigos do MIT (Massachusets Institute of Technology), mais especificamente do IEEE (Institute of Electrical and Electronics Engineers), DCEE (Department of Civil and Environmental Engineering) e DBCS (Department of Brain and Cognitive Sciences). Os trabalhos comerciais são ferramentas online ou aplicativos que possuem similaridades com o trabalho a ser desenvolvido pela pesquisa. 3.3.1 Análise dos Trabalhos Acadêmicos Nessa seção são apontadas as comparações entre os trabalhos acadêmicos e a proposta do TCC, conforme a Tabela 1. Tabela 1. Análise comparativa dos trabalhos acadêmicos Índice Rede Neural Big Data 3.1.1 Dispositivos Móveis Não Mapas de Kohonen 3.1.2 Não 3.1.3 Pesquisa 3.3.2 Linguagem Tecnologia Não Mineração de Dados Sim JAVA Perceptron Não Sim JAVA Sim Mapas de Kohonen Sim Sim JAVA Sim Mapas de Kohonen Sim Sim Objective-C ClienteServidor ClienteServidor ClienteServidor Aplicativo Mobile Análise dos Trabalhos Comerciais Nessa seção são apontadas as comparações entre os trabalhos comerciais e a proposta do TCC, conforme a Tabela 2. 52 Tabela 2. Análise comparativa dos trabalhos comerciais Índice 3.2.1 Dispositivos Móveis Não 3.2.2 Não 3.2.3 Não 3.2.4 Sim 3.2.5 Sim 3.2.6 Pesquisa Não Sim Rede Neural Mapas de Kohonen Mapas de Kohonen Mapas de Kohonen Mapas de Kohonen Mapas de Kohonen Perceptron Mapas de Kohonen Big Data Linguagem Tecnologia Sim Mineração de Dados Sim Apex Cliente-Servidor Sim Sim JAVA Sim Sim JAVA Armazenamento em Nuvem Cliente-Servidor Não Não Objective-C Aplicativo Mobile Não Não Objective-C Aplicativo Mobile Sim Sim Sim Sim Python Objective-C Cliente-Servidor Aplicativo Mobile Segundo a análise dos trabalhos relacionados (tanto comerciais quanto acadêmicos), é esclarecida a possibilidade da utilização das tecnologias de mineração de dados e redes neurais em dispositivos móveis, pois muitos deles as usam (mesmo que não todas simultaneamente) em seu funcionamento básico. 53 4 DESENVOLVIMENTO Este capítulo possui a descrição dos processos que culminaram na criação do aplicativo desta pesquisa. É descrita a visão geral do sistema, a análise de requisitos, a modelagem do sistema, o detalhamento do desenvolvimento, a descrição dos experimentos e os resultados obtidos. 4.1 VISÃO GERAL DO SISTEMA O aplicativo coleta informações do Facebook através do Facebook Graph API (uma biblioteca criada para tal fim). Uma vez que os dados tenham sido recuperados, eles são préprocessados e armazenados em um banco de dados local, conforme a Figura 9. O aplicativo desenvolvido foi escrito em Objective-C e C para iOS 7.0 utilizando XCode 6.0 com banco de dados SQLite. Figura 9. Visão Geral do Sistema Durante o pré-processamento, o módulo de geolocalização calcula a posição do usuário e a compara com os dados obtidos do sistema de mapas da Apple (o mesmo usado no Apple Maps), visando encontrar a cidade aonde o usuário se encontra. Após organizados os dados, os mapas de Kohonen analisam a informação do banco de dados local demonstrando assim os resultados ao usuário. Enquanto a visão geral do sistema parece simples, cada um dos processos envolve um grupo de passos específicos para alcançar os resultados esperados. 54 4.2 ANÁLISE DE REQUISITOS Para esclarecer o modo como o sistema funciona, os próximos tópicos demonstram os requisitos funcionais, não funcionais e as regras de negócios que o delimitam, de acordo com os conceitos de engenharia de software citados por Sommervile (2011). 4.2.1 Requisitos Funcionais No contexto do sistema desenvolvido, há quatro módulos categorizados dentro do conceito de Modelo-Visão-Controlador: • Geolocalização: Fase responsável pela descoberta da latitude e longitude do usuário no momento do carregamento do aplicativo, com uma precisão de seis dígitos. • Recuperação de Informações: Ainda durante o carregamento, logo após a descoberta da geolocalização, o aplicativo baixa do banco de dados do Facebook informações específicas das localidades em um raio de mil metros de acordo com a categoria estabelecida e as insere no banco de dados SQLite. Essas informações são as variáveis a serem tratadas no treinamento dos mapas, sendo elas: latitude, longitude, número de checkins, número de likes e o número de likes de perfis associados. • Pré-Processamento: Os dados baixados através da fase de Recuperação de Informações são convertidos em um formato passível de cálculo (double) e tem sua precisão ajustada, enquanto são inseridos em uma matriz de x por y, onde x é igual ao número de dendritos e y é igual ao número de localidades recuperadas pela fase anterior, representando os neurônios. • Treinamento: Durante essa fase (a única híbrida de C e Objective-C, visando aumentar a velocidade do processamento descartando a orientação a objetos e realizando conversões implícitas) são realizados os cálculos de distância euclidiana, ajustes de peso e ajuste de taxa de aprendizagem para todos os neurônios em um determinado número de variáveis, visando obter os resultados especificados na proposta do aplicativo. É treinada uma matriz bidimensional com neurônios de cinco dendritos, cada um contendo um aspecto relevante da pesquisa (latitude, longitude, 55 checkins, número de likes e número de likes de amigos). A escolha desse grupo de dados deu-se visando um maior nível de detalhamento no resultado final. Geolocalização RF01: O sistema deverá checar a conexão com a internet; RF02: O sistema deverá calcular a latitude e longitude do usuário (geocoder); RF03: O sistema deverá comparar as informações de posição com as APIs de mapas da Apple (geocoder reverso); RF04: O sistema deverá descobrir o nome da cidade baseada nos dados obtidos; e RF05: O sistema deverá armazenar o nome da cidade e os dados de latitude e longitude no banco de dados local. Recuperação de Informações RF01: O sistema faz a chamada à API; RF02: Utilizando a latitude e longitude do usuário na fase de pré-processamento, o sistema recupera os dados de longitude, latitude, número de checkins, número de likes, de todas as localidades no cadastradas como páginas públicas no Facebook dentro de um raio de mil metros e categorizadas como "Restaurant". Esta categoria, nesta versão do sistema desenvolvida para a pesquisa, é especificada no código e imutável. Ela foi escolhida pois é a que mais apresentou um retorno de dados adequado para testes; RF03: O sistema grava as informações na tabela LUGARES. Pré-Processamento RF01: O sistema recupera as informações do banco de dados; RF02: O sistema aplica uma conversão de tipos (double) sobre as informações numéricas a serem calculadas; 56 RF03: O sistema realiza um ajuste de precisão (de 2 a 6 casas), dependendo do dado processado; e RF04: O sistema insere os dados pré-processados em uma matriz de x por y, aonde x é o número de dendritos do neurônio (5 para esta pesquisa) e y é o número de localidades descobertas na fase de Recuperação de Informações. Treinamento RF01: O sistema deve selecionar os dados de entrada para treinamento, buscando os dados da linha do maior e do menor número de likes e armazenando-os em variáves; RF02: O sistema deve submeter todos os neurônios da matriz à função de distância euclidiana utilizando como parâmetro a primeira entrada; RF03: O sistema deve encontrar o neurônio vencedor do resultado da primeira entrada; RF04: O sistema deve ajustar os pesos do neurônio vencedor do resultado da primeira entrada; RF05: O sistema deve submeter todos os neurônios da matriz à função de distância euclidiana utilizando como parâmetro a segunda entrada; RF06: O sistema deve encontrar o neurônio vencedor do resultado da segunda entrada; RF07: O sistema deve ajustar os pesos do neurônio vencedor do resultado da segunda entrada; RF08: O sistema deve ajustar a taxa de aprendizagem RF09: O sistema deve submeter todos os neurônios da matriz à função de distância euclidiana utilizando como parâmetro a entrada de dados do usuário; RF10: O sistema deve armazenar todas os dados processados na tabela LUGARES_TREINADOS; e RF11: O sistema deve alimentar a tabela da interface gráfica, com os dados ordenados da menor para a maior distância euclidiana. 57 4.2.2 Requisitos Não Funcionais RNF01: O sistema deve ser desenvolvido na plataforma iOS 7.x; RNF02: O sistema deve ser desenvolvido nas linguagens Objective-C e C; RNF03: O sistema deve utilizar banco de dados SQLite; RNF05: O sistema deve possuir acesso à internet; RNF06: O sistema deve solicitar acesso do usuário ao Facebook; RNF07: O sistema deve mostrar uma foto do usuário quando a conexão com o Facebook for realizada com sucesso; RNF08: O sistema deve mostrar a cidade e estado aonde o usuário se encontra; RNF09: O sistema deve possuir dois botões (Logout e Pesquisar) para ativação das suas funcionalidades; e RN10: O sistema deve exibir os resultados em uma tabela, em ordem de prioridade do resultado mais adequado ao menos adequado à pesquisa. 4.2.3 Regras de Negócio RN01: O sistema selecionará os dados a serem analisados de acordo com os perfis associados ao usuário; RN02: O sistema deverá demonstrar aos usuários as localizações apropriadas para visitas; RN03: As análises deverão ser feitas através de um Mapa de Kohonen; RN04: O sistema deve armazenar os dados após processamento juntamente com sua distância euclidiana; RN05: O sistema deverá utilizar a Facebook API para realizar o seu login inicial; RN06: O sistema deverá avisar ao usuário enquanto estiver pré-processando dados; e 58 RN07: O sistema deverá avisar ao usuário enquanto estiver minerando dados com Mapas de Kohonen. 4.3 MODELAGEM DO SISTEMA Nesta seção é apresentada a modelagem do sistema subdividida em itens conforme segue. 4.3.1 Diagramas de Casos de Uso Os diagramas de caso de uso são os modelos para a representaçãoo das funcionalidades observáveis do sistema e dos elementos externos a ele. O diagrama de casos de uso mostra como a análise de requisitos molda o sistema (BEZERRA, 2002). O modelo de desenvolvimento para dispositivos móveis (dentro do escopo do iOS) segue o padrão Modelo-Visão-Controlador (MVC) (APPLE DEVELOPER, 2014), e os casos de uso são apresentados nesse padrão conforme mostra a Figura 10. Figura 10. Diagrama de Caso de Uso 59 • Login (API): Os dados para a comparação só podem ser retornados se o usuário efetuar login na rede social (no caso, no Facebook); • Solicitar Análise: O usuário solicita a análise dos perfis dos usuários associados ao dele; • Requisitar Localização: O sistema de geolocalização captura a localização atual do usuário; • Validar Usuário: Paralelamente aos casos “Solicitar Análise” e “Requisitar Localização”, a senha do usuário é validada; • Requisitar Dados: São requisitados os dados dos perfis associados ao usuário; • Comparar Resultados: O Mapa de Kohonen analisa os resultados e cria padrões; e • Mostrar Análise: A análise das melhores localizações a serem frequentadas são retornadas ao usuário. Com esses passos, será possível ao usuário recuperar as informações e efetuar a análise solicitada baseada nos perfils dos usuários associados. 4.3.2 Diagramas de Bancos de Dados O banco de dados do sistema desenvolvido nesta pesquisa é composto de duas tabelas (LUGARES e LUGARES_TREINADOS). A tabela LUGARES tem a função de armazenar os dados trazidos através da fase de Recuperação de Informações, enquanto a tabela LUGARES_TREINADOS armazena os dados já processados pela fase de Treinamento. Os modelos físico e lógico são demonstrados na Figuras 11 e Figura 12, respectivamente. 60 Figura 11. Modelo Físico do Banco de Dados Figura 12. Modelo Lógico do Banco de Dados Os campos das tabelas demonstradas na Figura 11 e na Figura 12 possuem as funcionalidades descritas conforme segue: • Código do Lugar (CD_LUGAR): Armazena o código único criado para gerar uma distinção entre os registros, e também é a chave primária, não permitindo a inserção de valores repetidos nesse campo; • Código do Facebook (CD_FACEBOOK): Armazena o código dos locais públicos no Facebook. Cada um dos lugares trazidos pela fase de Recuperação de Informações possui um identificador único atribuído a ele pelo sistema do Facebook. Essa é utilizada para buscar qualquer referência ao local dentro dos dados dessa rede social; 61 • Nome do Lugar (NM_LUGAR): Armazena o nome da localidade de acordo com o seu cadastro no Facebook; • Nome da Categoria (NM_CATEGORIA): Armazena a categoria do local de acordo com sua classificação no Facebook. O Facebook possui diversas categorias, escolhidas durante a criação da página pública. A definida para o escopo desta pesquisa é a categoria "Restaurant" (Restaurante), pois é a que mais apresentou um grupo de retornos adequados para testes; • Número de Checkins (NU_CHECKINS): Armazena o número total de checkins recebido por aquele local no Facebook. Esse campo armazena o número total de checkins recebidos por aquela página pública até o momento da pesquisa; • Número de Likes (NU_LIKES): Armazena o número total de likes recebidos por aquele local no Facebook. Esse campo armazena o número total de likes recebido por aquela página até o momento da pesquisa; • Número de Likes de Amigos (NU_LIKESFRIENDS): Armazena o número total de likes de perfis relacionados ao usuário que executou a pesquisa recebidos por aquele local no Facebook. Esse campo armazena o número total de likes de perfils relacionados recebido por aquela página até o momento da pesquisa; • Número da Latitude (NU_LATITUDE): Armazena o valor da latitude do local, segundo cadastro no Facebook; • Número da Longitude (NU_LONGITUDE): Armazena o valor da longitude do local, segundo cadastro no Facebook; • Valor da Distância Euclidiana (VL_DIST_EUCLI): Possuído apenas pela tabela "LUGARES_TREINADOS", esse campo armazena o valor da distância euclidiana após o processamento dos dados de entrada do usuário (após o treinamento da rede), para que a informação possa ser classificada de acordo com sua prioridade e mostrada ao usuário. 62 4.3.3 Pré-Processamento Segundo Fernandes (2005) antes da aplicação nas redes de Kohonen, os dados precisam ser pré-processados através de normalizações, escalonamentos e conversões de formato para torná-los mais apropriados a sua utilização na rede. O pré-processamento será dividido nas seguintes etapas, visando obter um conjunto de dados que garanta o funcionamento correto do Mapa de Kohonen: 1. Seleção de dados utilizáveis: Logo após a fase de Recuperação de Informações, apenas os dados especificados nos parâmetros da string de busca disponibilizada pelo Facebook Graph API são inseridos no banco de dados, para não haver o retorno de informações desnecessárias. 2. Conversão de tipos (double): Os dados provenientes do banco de dados são inseridos na matriz na forma de NSString, e precisam ser convertidos para poderem ser úteis para os cálculos. Os dados de latitude, longitude, número de checkins, número de likes e número de likes de perfis associados são convertidos para double através de uma conversão implícita. 3. Ajuste de precisão: Quando são convertidos para o padrão numérico, alguns dados (tais como latitude e longitude) são convertidos para seis casas de precisão, visando uma melhor especificação da localização do usuário. 4.3.4 Mapas de Kohonen De todos os dados armazenados durante a fase de Recuperação de Informações, o neurônio padrão do sistema desenvolvido nesta pesquisa usa cinco deles para realizar o treinamento do mapa. Conforme demonstrado na Figura 13, os cinco dendritos são compostos dos dados de Checkins, Latitude, Longitude, Likes e Likes de perfis associados. O número de neurônios é variável, dependendo da posição do usuário e do número de localidades à volta dele compatíveis com os dados de busca em um determinado raio. 63 Figura 13. Neurônio Padrão do Sistema Os neurônios (N={C, LA, LO, L, L(A)}) são armazenados em uma matriz x por y, aonde x é igual ao número de dendritos e y é igual ao número de localidades recuperadas. Segundo Fernandes (2005) o número de iterações necessárias utilizada como padrão é de 500 multiplicado pelo número de neurônios. Para esta pesquisa, utilizou-se inicialmente esta quantidade de iterações (o que proporcionou um tempo de treinamento de mais de sessenta segundos), então outros valores foram testados visando-se manter o resultado original, descobrindo-se finalmente o parâmetro registrado na Tabela 3 no item "Número de iterações" (número de neurônios multiplicado por 10). Tabela 3. Parâmetros de treinamento Parâmetros Número de dendritos (x) Número de neurônios (y) Taxa de Aprendizagem (aa) Número de iterações Valores 5 Variável de acordo com a localidade 0.9 y multiplicado por 10 Os parâmetros de entrada para o treinamento são extraídos do próprio volume retornado na fase de Recuperação de Informações. São utilizados como dados para fim as extremidades do parâmetro likes, ou seja, todos os dados do maior número de likes e todos os dados do menor número de likes, visando assim gerar uma granularização e uma maior amplitude do reconhecimento de padrões da rede neural artificial. Tabela 4. Parâmetros de entrada para o treinamento Parâmetros Latitude Longitude Número de Checkins Número de Likes Número de Likes de Perfis Associados Valores Latitude (menor/maior likes) Longitude (menor/maior likes) Checkins (menor/maior likes) Mínimo/Máximo dos dados recuperados Likes Perfis Associados (menor/maior likes) 64 A Tabela 4 define os dados dos dois parâmetros de entrada (E={C, LA, LO, L, L(A)}), sendo estes os neurônios com menor e maior número de likes. 4.4 DETALHAMENTO DO DESENVOLVIMENTO O desenvolvimento do aplicativo desta pesquisa foi realizado de acordo com os módulos (dividos em fases) pré-estabelecidos, e testados individualmente. Foi criado um aplicativo para cada fase (com exceção da fase de Treinamento), e posteriomente o código foi unificado para a concepção do sistema. 4.4.1 Geolocalização Para a criação do funcionamento da geolocalização, houve a necessidade de consulta com o Apple Maps. Esse recurso permitiu a localização do dispositivo e a tradução desses dados em latitude, longitude e da cidade aonde o usuário se encontra (através das funções de geocoder e geocoder reverso). Durante a inicialização do aplicativo (função viewDidLoad) o localizador é alocado, e os parâmetros são setados para haver uma atualização a cada 100 metros, conforme o Quadro 1. localizador = [[CLLocationManager alloc] init]; localizador.distanceFilter = kCLDistanceFilterNone; localizador.desiredAccuracy = kCLLocationAccuracyHundredMeters; [localizador startUpdatingLocation]; Quadro 1. Inicialização da geolocalização. Mesmo tendo sido a geolocalização inicializada, o aplicativo ainda não consultou a latitude e longitude do usuário. Esses processos são realizados quando o usuário efetua o login, na função loginViewFetchedUserInfo. Assim que esses dados são obtidos, o aplicativo inicializa a geolocalização reversa, para descobrir em qual cidade e estado o usuário se encontra. latitude=localizador.location.coordinate.latitude; longitude=localizador.location.coordinate.longitude; CLGeocoder *geocoder = [[CLGeocoder alloc] init]; CLLocation *location = [[CLLocation alloc]initWithLatitude:latitude longitude:longitude]; [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { if (error) { NSLog(@"Geocode falhou com o erro: %@", error); return; } 65 CLPlacemark *myPlacemark = [placemarks objectAtIndex:0]; NSString *countryState = myPlacemark.administrativeArea; NSString *countryCity = myPlacemark.locality; lblCidadeEstado.text = [NSString stringWithFormat:@"%@%@%@",countryCity,@" - ",countryState]; }]; Quadro 2. Geocoder e Geocoder reverso Conforme demonstrado no Quadro 2, a geolocalização se efetua após o login do usuário no Facebook, e o descobrimento do nome da cidade se dá com base na latitude e longitude encontradas anteriormente, que são utilizadas para alimentar o objeto location, que é utilizado como parâmetro para a geolocalização reversa (retorna o nome da cidade e estado, que são mostradas na interface gráfica). Ao realizar o processo de geolocalização, um erro foi encontrado durante essa fase do desenvolvimento. A função loginViewFetchedUserInfo executava as operações do Quadro 2 duas ou três vezes, atrasando e eventualmente comprometendo o processo de geolocalização. Esse comportamento da função é um defeito específico da Facebook API (replicação da execução do código de duas a três vezes, aleatoriamente), e não da maneira como a mesma estava sendo utilizada (primeira hipótese erguida durante esta pesquisa). Para que a execução ocorresse apenas uma vez e as informações de geolocalização fossem recuperadas de forma correta, foi adicionada uma variável booleana chamada FacebookCounter, que controla o número de execuções. Ela é iniciada como false e tem o seu valor modificado para true quando as operações são executadas. -(void)loginViewFetchedUserInfo:(FBLoginView *)loginView user:(id<FBGraphUser>)user{ if (facebookCounter == false) { ... }; } Quadro 3. Correção da função loginViewFetchedUserInfo A medida adotada no Quadro 3 corrigiu o funcionamento do módulo de geolocalização, e permitiu que as informações fossem retornadas e a geolocalização reversa calculada uma única vez. Os procedimentos descritos nos Quadros 1 e 2 ocorrem todos dentro da condição lógica apresentada no Quadro 3. Uma vez que esses dados tenham sido descobertos, é caracterizado o fim da fase 1. 66 4.4.2 Recuperação de Informações Após a descoberta da geolocalização, o aplicativo a utiliza como parâmetro para retornar do banco de dados do Facebook informações específicas das localidades em um raio de mil metros. Tanto a categoria da localidade como o raio de busca são parâmetros previamente definidos na consulta, conforme demonstrado no Quadro 4. NSString *caminhoBusca = [NSString stringWithFormat: @"/search?q=restaurant&type=place¢er=%@,%@&distance=1000",latitude,longitude]; [FBRequestConnection startWithGraphPath:caminhoBusca parameters:nil HTTPMethod:@"GET" completionHandler:^( FBRequestConnection *connection, id result, NSError *error ) { ... } Quadro 4. Código da fase de Recuperação de Informações. Os parâmetros de entrada (distance e q) da string de busca são variáveis, definidas pelo desenvolvedor e inseridos no código, aonde o primeiro é o valor da distância em metros, e o segundo é o valor da categoria (definida pelo Facebook). Os parâmetros de entrada para a string de busca estão especificados na Tabela 5. Tabela 5. Parâmetros da Recuperação de Informações Parâmetros Latitude Longitude Categoria Raio (m) Valores Latitude no momento da inicialização Longitude no momento da inicialização Restaurant 1000 Os dados são tratados durante a recuperação das informações, linha a linha. Como cada linha representa um neurônio, as informações de relevância são tratadas em inseridas no banco de dados SQLite. A criação das tabelas utilizada nas quatro fases são realizadas na inicialização do sistema, conforme o Quadro 5. Durante a função viewDidLoad (função que realiza ações durante a inicialização de um aplicativo em Objective C) é verificada a existência de um banco de dados chamado "kohonen.db". Caso ele exista, para fins de teste da aplicação, ele é removido e o seu caminho é atribuído à variável "dbCaminho". 67 Uma vez que a variável "dbCaminho" possua as informações da localização do banco de dados, o aplicativo cria um novo arquivo kohonen.db e as tabelas associadas a esse arquivo (LUGARES e LUGARES_TREINADOS), conforme a estrutura descrita no item 4.3.2 (Diagrama de Bancos de Dados). Essas tabelas irão comportas os dados originais (LUGARES) e os dados da rede treinada (LUGARES_TREINADOS). A criação dessas tabelas tem relevância apenas a partir da segunda fase (Recuperação de Informações), já que a primeira fase não faz utilização de banco de dados no seu processamento. Caso as tabelas não consigam ser criadas, um aviso é enviado no log do compilador para fins de debug. Nenhum feedback é enviado para o usuário nesta versão da aplicação desenvolvida para esta pesquisa, porém posteriormente os erros podem ser reportados através do sistema de notificações do iOS. if ([filemgr fileExistsAtPath: dbCaminho ] == NO) { const char *dbpath = [dbCaminho UTF8String]; if (sqlite3_open(dbpath, { char *errMsg; const char *sql_stmt "CREATE TABLE IF NOT AUTOINCREMENT, CD_FACEBOOK TEXT, REAL, NU_LIKES REAL, NU_LATITUDE REAL)"; &kohonenDB) == SQLITE_OK) = EXISTS LUGARES (CD_LUGAR INTEGER PRIMARY KEY NM_LUGAR TEXT, NM_CATEGORIA TEXT, NU_CHECKINS REAL, NU_LONGITUDE REAL, NU_LIKESFRIENDS if (sqlite3_exec(kohonenDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) { NSLog(@"Falhou ao criar tabela LUGARES"); } sql_stmt = "CREATE TABLE IF NOT EXISTS LUGARES_TREINADOS (CD_LUGAR INTEGER PRIMARY KEY, CD_FACEBOOK TEXT, NM_LUGAR TEXT, NM_CATEGORIA TEXT, NU_CHECKINS REAL, NU_LIKES REAL, NU_LATITUDE REAL, NU_LONGITUDE REAL, NU_LIKESFRIENDS REAL, VL_DIST_EUCLI REAL)"; if (sqlite3_exec(kohonenDB, sql_stmt, NULL, NULL, &errMsg) != SQLITE_OK) { NSLog(@"Falhou ao criar tabela LUGARES_TREINADOS"); } sqlite3_close(kohonenDB); } else { NSLog(@"Falhou ao abrir/criar banco de dados"); } } Quadro 5. Criação das tabelas "LUGARES" e "LUGARES_TREINADOS" 68 A Facebook Graph API retorna os dados no formato JSON. Esses dados são recuperados da API atribuindo a informação vinda nas chaves à variáveis locais para tratamento, conforme o Quadro 6. Quando a instrução objectForKey possui mais de um parâmetro, significa que está retornando dados de estruturas que estão dentro de outras estruturas. No caso da variável "likesfriends", por exemplo, o sistema está tratando o número total de perfis associados que deram like, parâmetro esse que está dentro do parâmetro "summary", que por sua vez está dentro do "friends_who_like" que está dentro do "context". id checkins = [result objectForKey:@"checkins"]; id likes = [result objectForKey:@"likes"]; id latitude = [result objectForKey:@"location"][@"latitude"]; id longitude = [result objectForKey:@"location"][@"longitude"]; id likesfriends = [result objectForKey:@"context"][@"friends_who_like"][@"summary"][@"total_count"]; Quadro 6. Tratamento das informações retornadas. Uma vez que esses dados são recuperados e atribuídos às suas respectivas variáveis, conforme demonstrado no Quadro 6, eles são inseridos na tabela LUGARES de acordo com o Quadro 7. sqlite3_stmt *statement; const char *dbpath = [dbCaminho UTF8String]; if (sqlite3_open(dbpath, &kohonenDB) == SQLITE_OK) { NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO LUGARES (CD_FACEBOOK, NM_LUGAR, NM_CATEGORIA, NU_CHECKINS, NU_LIKES, NU_LATITUDE, NU_LONGITUDE, NU_LIKESFRIENDS) VALUES (\"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\", \"%@\")",codigo, nome, categoria, checkins, likes, latitude, longitude, likesfriends]; const char *insert_stmt = [insertSQL UTF8String]; sqlite3_prepare_v2(kohonenDB, insert_stmt,-1, &statement, NULL); if (sqlite3_step(statement) == SQLITE_DONE) { NSLog(@"Inserido => %s", insert_stmt); contadorLinhas++; } else { NSLog(@"Falhou => %s", insert_stmt); NSLog(@"Erro: %s", sqlite3_errmsg(kohonenDB)); } sqlite3_finalize(statement); sqlite3_close(kohonenDB); } Quadro 7. Inserção da linha processada na tabela LUGARES. Os códigos apresentados nos Quadros 5, 6 e 7 ocorrem até que todas as localidades recuperadas pelo processo de busca (Quadro 4) tenham sido inseridas nos bancos de dados. Cada 69 uma dessas localidades é um neurônio a ser utilizado pela fase de treinamento. Os trechos definidos como "NSLog" são informações sobre o andamento do processamento das fases, retornadas ao terminal do compilador para fins de debug. Uma vez que a última linha tenha sido inserida, é caracterizado o fim da fase 2 (Recuperação de Informações) e o aplicativo aguarda a interação com o usuário (clique no botão "Pesquisar"), para dar início às fases 3 e 4 (Pré-Processamento e Treinamento). Um dos empecilhos mais complexos ao desenvolvimento foi encontrado nesta fase. Sua complexidade pode ser considerada alta pois sua resolução dependia puramente de fatores externos (que por sua vez, não ocorreram), criando assim uma demanda de modificações no projeto para garantir o seu funcionamento. Durante o projeto do sistema desta pesquisa, entendia-se como "Friend" ou "Amigo", qualquer perfil que fosse associado ao perfil do usuário que realiza a pesquisa. No escopo inicial, esse seria o parâmetro utilizado (de forma escalar) para retornar os dados necessários para o treinamento do Mapa de Kohonen, tais como checkins e likes que esses "Friends" criassem. Porém, segundo o Facebook Developers (2014), em abril as políticas de segurança da empresa em relação à distribuição de dados dos usuários mudaram, assim como algumas expressões. Para o Facebook Graph API, o "Friend" ou "Amigo", que antes referia-se ao perfil associado ao do usuário da pesquisa, passou a ser utilizado para definir qualquer usuário que além de estar associado, deveria também ter instalado o aplicativo utilizado pelo usuário que realizava a pesquisa (inviabilizando a recuperação de informações por esse método, já que o aplicativo estava em desenvolvimento e em uso apenas pelo pesquisador). Dentro do novo conceito de "Friend" também foram criados duas novas expressões: invitable_friends e taggable_friends. A expressão invitable_friends permitia que os perfis associados fossem avisados da existência do seu aplicativo (operação que usualmente utilizava o identificador do usuário, necessário para o cumprimento desta demanda de Recuperação de Informações), porém essa nova expressão gerava um novo identificador substituto, que pela sua característica temporária, inviabilizava seu uso para os fins requeridos pelo aplicativo da pesquisa. A expressão taggable_friends permitia que fosse referenciados quaisquer perfis associados que tivessem sido marcados em fotos, o que também divergia da necessidade da demanda de Recuperação de Informações. 70 A fase de Recuperação de Informações conseguiu ser realizada com um ajuste conceitual do projeto. Ao invés de traçar as localidades através dos perfis associados, foi feito o caminho contrário, traçando-se as localidades em um raio de mil metros e depois verificando-se quais perfis associados fizeram referência a ela, permitindo assim que fossem encontradas todas as localizações próximas juntamente com seus relacionamentos aos perfis associados ao do usuário que efetuou a pesquisa. 4.4.3 Pré-Processamento A fase de pré-processamento é a terceira fase, e consiste na fase de ajuste dos dados a serem utilizados pelos mapas de Kohonen, e é iniciada assim que há uma interação do usuário com a interface do software (botão "Pesquisar" é pressionado). No caso do aplicativo desta pesquisa, para que o treinamento dos mapas auto-organizáveis possa ser efetuado com o máximo de acerto possível na identificação dos padrões, as informações utilizadas por ele devem possuir formatos e precisões similares. NSString *querySQL = [NSString stringWithFormat:@"SELECT CD_LUGAR, CD_FACEBOOK, NM_LUGAR, NM_CATEGORIA, NU_CHECKINS, NU_LIKES, ROUND(NU_LATITUDE,4), ROUND(NU_LONGITUDE,4), NU_LIKESFRIENDS FROM LUGARES"]; const char *query_stmt = [querySQL UTF8String]; if (sqlite3_prepare_v2(kohonenDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { mapaLugares[0][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[1][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[2][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[3][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[4][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[5][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[6][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[7][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaLugares[8][mapaContador] = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, mapaContador++; } sqlite3_finalize(statement); } 0)]; 1)]; 2)]; 3)]; 4)]; 5)]; 6)]; 7)]; 8)]; 71 Quadro 8. Transmissão de dados da tabela LUGARES para a matriz Para realizar a tarefa de pré-processamento, inicialmente o aplicativo copia os dados da tabela LUGARES para uma matriz NSString de x por y (conforme o Quadro 8), onde x é o número de dendritos e y o número total de registro no banco de dados (que corresponde ao total de localidades encontradas), visando realizar a operação diretamente na memória do dispositivo móvel. Uma vez que os dados estejam todos alocados na matriz (e consequentemente, na memória), os dados provenientes de x = {4, 5, 6, 7, 8} (que são respectivamente os checkins, likes, latitude, longitude e likes de amigos) para todos os neurônios são convertidos para o tipo double e atribuídos à variáveis conforme o Quadro 9. m_nuCheckins = [mapaLugares[4][mapaContador] doubleValue]; m_nuLikes = [mapaLugares[5][mapaContador] doubleValue]; m_latitude = [mapaLugares[6][mapaContador] doubleValue]; m_longitude = [mapaLugares[7][mapaContador] doubleValue]; m_nuLikesFriends = [mapaLugares[8][mapaContador] doubleValue]; Quadro 9. Conversão de tipos Alguns dos problemas apresentados na fase de pré-processamento foi a dificuldade de criação de matrizes e manipulação de objetos em Objective-C. Enquanto no Objective-C a própria sintaxe tornava a criação e manipulação de matrizes de objetos mais difícil que a criação e manipulação de matrizes de valores inerente à linguagem C, o cálculo utilizando-se de valores diretos mostrou um desempenho superior ao cálculo utilizando valores dentro de objetos. NSMutableArray *dataArray = [[NSMutableArray alloc] initWithCapacity: 3]; [dataArray insertObject:[NSMutableArray arrayWithObjects:@"0",@"0",@"0",nil] atIndex:0]; [dataArray insertObject:[NSMutableArray arrayWithObjects:@"0",@"0",@"0",nil] atIndex:1]; [dataArray insertObject:[NSMutableArray arrayWithObjects:@"0",@"0",@"0",nil] atIndex:2]; Quadro 10. Criação de matrizes em Objective-C O Quadro 10 mostra a criação de matrizes de objetos, que alocam dentro de si apenas outros objetos. A utilização desse tipo de matriz faria com que os valores acessados necessitassem de um tempo de processamento maior. NSString *mapaLugares[9][nuRegistros]; Quadro 11. Criação de matriz no Objective-C utilizando o formato da linguagem C O Quadro 11 mostra a criação de matrizes conforme foi realizada no aplicativo. Apesar de fazer utilização do tipo NSString, o padrão de criação similar ao da linguagem C faz com que essa 72 matriz aceite apenas valores NSString diretamente, tornando seu processamento mais efetivo em termos de tempo. 4.4.4 Treinamento Caracterizada como a quarta fase do aplicativo desta pesquisa, a fase do treinamento aplica diversas funções matemáticas sobre as variáveis obtidas nas fases anteriores, visando obter um reconhecimento de padrões que permita encontrar similaridades entre os dados treinados e os dados apresentados após o treinamento. A fase de treinamento possui duas entradas, que caracterizam os extremos do mapa. A primeira entrada são os dados da localidade com o maior número de likes. A segunda localidade são os dados da localidade com o menor número de likes. Esses parâmetros foram escolhidos visando aumentar a possibilidade do mapa de encontrar padrões entre esses valores, e gerar uma granularização do mesmo, conforme o Quadro 12. querySQL = [NSString stringWithFormat:@"SELECT NU_CHECKINS, NU_LIKES, NU_LIKESFRIENDS, ROUND(NU_LATITUDE,4), ROUND(NU_LONGITUDE,4) FROM LUGARES WHERE NU_LIKES = (SELECT MAX(NU_LIKES) FROM LUGARES) LIMIT 1"]; query_stmt = [querySQL UTF8String]; if (sqlite3_prepare_v2(kohonenDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { e1_nuCheckins = sqlite3_column_double(statement, 0); e1_nuLikes = sqlite3_column_double(statement, 1); e1_nuLikesFriends = sqlite3_column_double(statement, 2); e1_latitude = sqlite3_column_double(statement, 3); e1_longitude = sqlite3_column_double(statement, 4); } sqlite3_finalize(statement); } Quadro 12. Obtenção do primeiro parâmetro de entrada (e1_) Toda variável que possui o prefixo "e1_" armazena os dados relativos à primeira entrada, para serem utilizados nos cálculos. A Entrada 1, representada no Quadro 12, refere-se aos dados com maior número de likes, caracterizando assim a extremidade "superior" de entrada. Os dados da Entrada 2 (a extremidade "inferior") é coletada através de um SQL similar, mas que utiliza o parâmetro "MIN" ao invés do parâmetro "MAX", obtendo os resultados inversamente proporcionais ao do SQL da Entrada 1. 73 querySQL = [NSString stringWithFormat:@"SELECT NU_CHECKINS, NU_LIKES, NU_LIKESFRIENDS, ROUND(NU_LATITUDE,4), ROUND(NU_LONGITUDE,4) FROM LUGARES WHERE NU_LIKES = (SELECT MIN(NU_LIKES) FROM LUGARES) LIMIT 1"]; query_stmt = [querySQL UTF8String]; if (sqlite3_prepare_v2(kohonenDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { e2_nuCheckins = sqlite3_column_double(statement, 0); e2_nuLikes = sqlite3_column_double(statement, 1); e2_nuLikesFriends = sqlite3_column_double(statement, 2); e2_latitude = sqlite3_column_double(statement, 3); e2_longitude = sqlite3_column_double(statement, 4); } sqlite3_finalize(statement); } Quadro 13. Obtenção do segundo parâmetro de entrada (e2_). Toda variável que possui o prefixo "e2_" armazena os dados relativos à segunda entrada, para serem utilizados nos cálculos. A Entrada 2, representada no Quadro 13 refere-se aos dados com menor número de likes, caracterizando assim a extremidade "inferior" de entrada. Uma vez que os parâmetros de entrada (Entrada 1 e Entrada 2) foram obtidos e atribuídos às variáveis, é inicializado o treinamento do mapa. O mesmo é feito através do cálculo de distância euclidiana para todos os neurônios e ajuste dos pesos do neurônio vencedor (para ambas as entradas), seguido posteriormente do ajuste da taxa de aprendizagem. O Quadro 14 demonstra como é efetuado no sistema desta pesquisa o cálculo da distância euclidiana. O neurônio vencedor é encontrado através de uma condição lógica que é executada ao fim de cada instrução for. Para cada uma das entradas, a primeira vez que o for é executado, o sistema armazena aquele valor para referência (mapaContador igual a zero) e através do if ele realiza comparação com todos os valores posteriores, armazenando o resultado do menor cálculo de 74 distância euclidiana (padrão utilizado para indicar qual é o neurônio vencedor) até o encerramento do loop, permitindo assim que os dados do neurônio vencedor sejam enviados à fase de ajuste de pesos. for (mapaContador = 0; mapaContador < nuRegistros; mapaContador++) { m_nuCheckins = [mapaLugares[4][mapaContador] doubleValue]; m_nuLikes = [mapaLugares[5][mapaContador] doubleValue]; m_latitude = [mapaLugares[6][mapaContador] doubleValue]; m_longitude = [mapaLugares[7][mapaContador] doubleValue]; m_nuLikesFriends = [mapaLugares[8][mapaContador] doubleValue]; //-- Aplica função euclidiana (d = ∑(x-w)2) r_funcaoEuclidiana = pow((e1_nuCheckins-m_nuCheckins),2) + pow((e1_nuLikes-m_nuLikes),2) + pow((e1_latitude-m_latitude),2) + pow((e1_longitude-m_longitude),2) + pow((e1_nuLikesFriends-m_nuLikesFriends),2); if (mapaContador == 0 || r_funcaoEuclidiana < r_Vencedor){ r_Vencedor = r_funcaoEuclidiana; posNeuronioVencedor = mapaContador; } } Quadro 14. Cálculo da função euclidiana para a Entrada 1. Quando o neurônio vencedor é encontrado, seus pesos são calculados e atualizados de acordo com os parâmetros daquela entrada (esse processo ocorre para as Entradas 1 e 2) e atribuídos às variáveis, conforme o Quadro 15. n_nuCheckins = [mapaLugares[4][posNeuronioVencedor] doubleValue] + (e_taxaAprendizagem*(e1_nuCheckins-[mapaLugares[4][posNeuronioVencedor] doubleValue])); n_nuLikes = [mapaLugares[5][posNeuronioVencedor] doubleValue] + (e_taxaAprendizagem*(e1_nuLikes-[mapaLugares[5][posNeuronioVencedor] doubleValue])); n_latitude = [mapaLugares[6][posNeuronioVencedor] doubleValue] + (e_taxaAprendizagem*(e1_latitude-[mapaLugares[6][posNeuronioVencedor] doubleValue])); n_longitude =[mapaLugares[7][posNeuronioVencedor] doubleValue] + (e_taxaAprendizagem*(e1_longitude-[mapaLugares[7][posNeuronioVencedor] doubleValue])); n_nuLikesFriends = [mapaLugares[8][posNeuronioVencedor] doubleValue] + (e_taxaAprendizagem*(e1_nuLikesFriends-[mapaLugares[8][posNeuronioVencedor] doubleValue])); Quadro 15. Atualização dos pesos do neurônio vencedor 75 Uma vez que a atualização dos pesos da Entrada 1 ocorre, o processo de cálculo da distância euclidiana e atualização de pesos ocorre também para a Entrada 2. Uma vez que esses processos tenham ocorrido para as duas entradas, a taxa de aprendizagem é atualizada, de acordo com o Quadro 16. Essas operações ocorrem em uma taxa de dez vezes o número de neurônios encontrados durante a fase de Recuperação de Informações (y multiplicado por 10). e_taxaAprendizagem = e_taxaAprendizagem * (1-((double)contadorIteracoes/ nuIteracoes)); Quadro 16. Atualização da taxa de aprendizagem Uma vez que o processamento das iterações termine, os parâmetros de entrada do usuário (alocados no código) são utilizados na rede recém-treinada, visando obter-se um resultado ordenado pela menor distância euclidiana. Quando esses resultados são obtidos, eles são armazenados na tabela LUGARES_TREINADOS, que diferencia-se da tabela LUGARES apenas pela inserção do campo VL_DIST_EUCLI, que guarda os dados da distância euclidiana da última consulta. if (sqlite3_open(dbpath, &kohonenDB) == SQLITE_OK) { NSString *querySQL = [NSString stringWithFormat:@"SELECT CD_LUGAR, CD_FACEBOOK, NM_LUGAR, NM_CATEGORIA, NU_CHECKINS, NU_LIKES,ROUND(NU_LATITUDE,4), ROUND(NU_LONGITUDE,4), NU_LIKESFRIENDS, VL_DIST_EUCLI FROM LUGARES_TREINADOS ORDER BY VL_DIST_EUCLI"]; const char *query_stmt = [querySQL UTF8String]; if (sqlite3_prepare_v2(kohonenDB, query_stmt, -1, &statement, NULL) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)], [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 4)], [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 5)], [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 8)], [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 9)]); [nomesLugares addObject:[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]]; mapaContador++; } sqlite3_finalize(statement); } sqlite3_close(kohonenDB); } [self.tbeResultados reloadData]; Quadro 17. Retorno dos dados e ordenação pela distância euclidiana. 76 Por último, conforme o Quadro 17, os dados são recuperados da tabela LUGARES_TREINADOS e replicados na interface gráfica, ordenados pela menor distância euclidiana de acordo com os dados de entrada do usuário na rede treinada, finalizando assim as quatro fases descritas que constituem o funcionamento básico do aplicativo desta pesquisa. Durante a construção do aplicativo, a necessidade do treinamento do mapa de Kohonen poderia ser solucionada através de três métodos: a primeira, com a utilização de um framework externo para o treinamento do mapa, a segunda através do treinamento em um servidor e a terceira através do treinamento dos dados no próprio dispositivo móvel. Enquanto a primeira e segunda opções demonstravam vantagens óbvias (diminuição do tempo de processamento e implementação mais fácil), a terceira opção permitia uma maior versatilidade do treinamento (já que as localidades mudam de acordo com o raio de latitude e longitude), e uma menor dependência de internet, já que a transmissão de dados é realizada apenas na fase de Recuperação de Informações. A opção pelo terceiro método também permitiu testar a possibilidade de um dispositivo móvel processar o volume de dados proposto na pesquisa. Durante o desenvolvimento desta pesquisa, uma vez escolhida a realização da quarta fase no próprio aplicativo, houve uma certa dificuldade de encontrar material específico para realizar os cálculos propostos por Teuvo Kohonen. A grande maioria dos artigos e trabalhos consultados sempre faziam uso de um framework externo, o que tornava a compreensão de como o processo era realizado bastante dificultada. Essa demanda foi solucionada consultando a segunda edição do livro "Inteligência Artificial: Noções Gerais" que demonstrava as equações passo-a-passo. 4.4.5 Interface Gráfica A interface gráfica do aplicativo é composta de quatro itens, distribuídos de maneira a fornecer ao usuário o melhor feedback possível. A parte superior aloca a foto e a cidade aonde o usuário se encontra (descoberta na fase um, pelo processo de geolocalização reversa), a parte central possui uma lista para exibição de dados cadenciados e a parte inferior possui os dois únicos elementos de interação com o usuário, o botão "Logout" e o botão "Pesquisar". A foto do usuário indica que a conexão com o perfil da rede social (Facebook) foi realizado com sucesso, enquanto a descrição da cidade serve como um indicador de que o sistema de 77 geolocalização recuperou os dados necessários para o cálculo, e também como um ponto de referência para o usuário, caso ele esteja nas imediações de municípios. Figura 14. Interface gráfica do sistema em funcionamento Após a fase quatro, a lista posicionada no centro do aplicativo desta pesquisa é preenchida com os dados aplicados sobre a rede treinada, e mostrados de acordo com a ordem de menor distância euclidiana. Os botões exibidos na parte inferior são utilizados para desconectar o perfil do usuário que realiza a pesquisa do aplicativo e para inicializar as fases três e quatro, respectivamente. 4.5 DESCRIÇÃO DOS EXPERIMENTOS O módulo de geolocalização foi validado construindo-se um aplicativo específico cuja única função era encontrar a latitude e longitude, e gerar a geolocalização reversa, indicando a cidade. Nas três cidades testadas, o algoritmo retornou a latitude e longitude com precisão de seis casas, assim como o nome e estado da cidade onde o mesmo foi testado (Florianópolis - SC, Curitiba - PR e Itajaí - SC). O módulo de Recuperação de Informações foi validado complementando a criação do aplicativo de geolocalização com a inserção da Facebook API, a biblioteca responsável por fazer a 78 transmissão dos dados. Os dados recuperados do Facebook foram comparados com as páginas públicas aos quais essas informações pertencem, e em todos os casos elas foram validadas em todas as cidades pesquisadas. Os testes do Pré-processamento foram validados de acordo com a utilização dos dados pelo mapa de Kohonen. Quando um dado pré-processado era recusado por algum motivo (precisão ou conversão incompatíveis), ele era corrigido até que todos os dados fossem aceitos para treinamento nos diversos pontos testados (sendo sua grande maioria no centro de Florianópolis e Curitiba). O treinamento do mapa de Kohonen foi feito utilizando-se como padrão de entrada os registros com maior e menor número de likes, o que provou-se válido para criar uma granularização e um reconhecimento de padrões entre os registros envolvidos no processo. As iterações utilizadas começaram com 500 multiplicado pelo número de neurônios, porém esse parâmetro fazia com que o treinamento demorasse muito a ser efetuado. 4.6 RESULTADOS Os testes para o aplicativo foram realizados no centro de Florianópolis (latitude: -27.591194, longitude: -48.558224), obtendo um total de 79 localizações de acordo com os parâmetros de recuperação de informações da Tabela 1. As entradas para os testes após o treinamento estão de acordo com a Tabela 6. Tabela 6. Variáveis de entrada Variáveis: Rede Neural Artificial Latitude Longitude Número de Checkins Número de Likes Valores -27.591194 -48.558224 1300 7000 O número total de iterações realizadas pelo treinamento foi de 790 (79 neurônios multiplicado pelo parâmetro de iterações, que é igual a 10), processado em 12.71 segundos em um iPhone 4S (Processador Apple A5 dual-core de 1GHz, 512 MB de RAM). 79 Tabela 7. Retorno dos dez primeiros registros da rede treinada Nome Macarronada Italiana O Padeiro de Sevilha Texano Lounge Vida Natural Emporium Haishin Sushi Express Bom Bocado Restaurante Debigas Restaurante Buffet Sushi Zen Delivery Pizzaria Juca Pato Pizzaria Valentine Checkins 734 3700 433 60 36 88 35 21 1449 0 Likes 4714 5852 2061 1727 1564 1179 1126 1117 972 996 Likes(A) 0 8 0 0 0 1 1 0 0 2 A Tabela 7 demonstra os 10 primeiros resultados dos 79 obtidos, aonde "Nome" é igual ao nome do estabelecimento conforme registrado no Facebook, "Checkins" é o número total de registros do parâmetro "checkins" que o estabelecimento já obteve, "Likes" é o número total de registros do parâmetro "likes" que o estabelecimento já obteve, e "Likes (A)" é o número total de registros do parâmetro de "likes" relacionados aos perfis associado ao do usuário que efetuou a busca que já foram registrados pela localização exibida. . 80 5 CONCLUSÕES A arquitetura proposta por esse trabalho reconheceu, com um número baixo de iterações (790) as variáveis mais aproximadas de acordo com os parâmetros de entrada, durante um tempo de processamento alto (12,57 segundos) para um aplicativo comercial (contanto que haja o feedback adequado para o usuário). Durante o desenvolvimento houveram modificações na política de compartilhamento de dados do Facebook (implementadas em abril de 2014) que comprometeram o andamento do software, tais como a modificação do conceito de perfil associado (criando uma identificação temporária para o mesmo, ao invés de retornar a identificação padrão) e a limitação ao acesso dos checkins por usuário, permitindo apenas que os mesmos fossem feitos através do acesso aos perfis públicos que possuíssem esse atributo. Esses obstáculos foram resolvidos através da utilização do perfil público dos lugares visitados ao invés do perfil dos usuários associados durante a fase de Recuperação de Informações. A fase de Geolocalização ocorre durante a inicialização e após o login. A Facebook API possui um erro de programação que faz com que as instruções pós-login sejam replicadas de duas a três vezes (aleatoriamente), aumentando o tempo de processamento e dificultando a obtenção das informações necessárias para o início da segunda fase. Através de uma variável booleana foi possível solucionar esse problema, permitindo que o processo ocorresse apenas uma vez. Para obter acesso aos dados do Facebook, o aplicativo precisou conter determinados parâmetros (parte da política de segurança dessa rede social), sem os quais o funcionamento do aplicativo seria inviabilizado, sendo esses public_profile (permite acesso aos dados de perfis públicos), email (permite acesso aos emails do usuários), user_likes (permite acesso ao parâmetro likes dos usuários), user_friends (permite acesso aos relacionamentos entre perfis) e manage_pages (permite a recuperação de informações de páginas públicas). Caso o aplicativo fosse publicado comercialmente, graças aos parâmetros envolvidos, haveria a necessidade de aprovação do sistema pelo Facebook. Qualquer projeto de aplicativo que utilizar o Facebook como rede social para mineração de dados deverá considerar em seu estudo as regras das novas políticas de segurança como ponto de partida para o desenvolvimento de funções para o sistema. Dependendo da natureza do aplicativo, essas políticas poderão limitar severamente ou mesmo inviabilizar a concepção do 81 software. O SQLite, apesar de eficiente em sua funcionalidade, não apresentou (em conjunção com o XCode) um retorno apropriado dos erros ocorridos no banco de dados, dependendo assim da implementação de um sistema de logs do aplicativo desta pesquisa para cada parte do processo que envolvesse interação com o SQLite. Com isso, supriu-se a demanda da identificação dos erros que ocorriam em meio às quatro fases. O treinamento da rede (durante a terceira fase) também mostrou-se muito lento com os dados especificados nesta pesquisa, quando se fazia essa operação diretamente trazendo informações do SQLite (cerca de 50 a 60 segundos por treinamento) e das instruções nativas do Objective-C. Para solucionar essa demanda, os dados foram transferidos para matrizes durante essa fase (para realizar toda operação em memória), e tanto a matriz quando os cálculos são realizados utilizando-se de instruções em C ANSII. Existem determinadas operações em Objective-C que tornam-se mais viáveis (pelo quesito velocidade de processamento) se são processadas sem a orientação a objetos. Considerando que os smartphones possuem uma capacidade inferior à dos computadores convencionais, determinados cálculos (tais como o treinamento dos mapas de Kohonen) possuem um desempenho melhor se feitos em memória com a passagem de valores diretamente para as variáveis. Como o número de neurônios varia de acordo com a entrada, o tempo de resposta do treinamento dos mapas pode vir a ser diferente dependendo do número de localidades descobertas em um raio de mil metros. Em grandes centros, possivelmente esse tempo de processamento pode vir a aumentar exponencialmente (e diminuir em cidades menores). Os parâmetros de entrada possuíam uma proporção de 18% entre as variáveis de checkins e likes. Uma proporção de 15% a 21% foi mantida em todos os resultados cujo parâmetro Likes (A) é igual a zero (pois a interferência dessa variável é desconsiderada nas conclusões nesses casos), indicando assim um reconhecimento de padrão por parte da Rede Neural Artificial proposta no sistema desenvolvido. Com base nos resultados obtidos, conclui-se então que é possível realizar a mineração de dados da rede social Facebook utilizando um dispositivo móvel (apesar do código utilizado para o treinamento do mapa de Kohonen precisar de ajustes para minimizar o tempo de processamento) e que das perguntas do problemas de pesquisa, todas conseguiram ser respondidas, já que mostrou-se possível utilizar o smartphone especificado neste trabalho, não houve a necessidade de um agente 82 externo, a análise foi feita sem a necessidade de adição de outros dados (apenas com informações recuperadas do Facebook) e foi reconhecido um padrão de frequência entre as localidades sugeridas pelos perfis da rede social e o usuário da aplicação, mostrando então que é possível o desenvolvimento de software que utilizam mapas de Kohonen para reconhecimento de padrões em dispositivos móveis. 83 5.1 TRABALHOS FUTUROS O aplicativo apresentado nesta pesquisa realiza uma sequência de fases para chegar ao resultado final, que é o reconhecimento de padrões baseado na mineração de dados das redes sociais. Porém, existem melhorias e novas utilidades que podem ser trabalhadas no software desta pesquisa, tais como: • Diminuição da interação do SQLite: uma menor utilização da interação do banco de dados SQLite durante o processo de treinamento poderia aumentar a velocidade de processamento; • Diminuição do número de dendritos: com os devidos testes executados, uma diminuição do número de dendritos (utilizar apenas número de likes, checkins e número de likes de amigos por exemplo) poderia ser utilizado na tentativa de diminuir o tempo de processamento (mantendo o reconhecimento de padrões similar). • Melhorias na interface gráfica: a interface gráfica poderia ser melhorada, permitindo que o usuário modificasse os padrões de entrada ou mesmo outras categorias fossem escolhidas (o que mudaria os parâmetros de fases como Geolocalização e Treinamento), ampliando assim a versatilidade do aplicativo; • Otimização do código: determinados pontos do código (tal como as ações do SQLite ou a fase de Treinamento) poderiam ser transformados em classes específicas para realizar essas funções, permitindo o reaproveitamento e tornando o código mais fácil de ser mantido; • Otimização do banco de dados: o projeto do banco de dados apresentado nesta pesquisa não considera a criação de índices (usando apenas uma chave primária) ou triggers, entre outras funções disponíveis. A utilização dessas funções ou mesmo uma melhor normalização poderia facilitar a manutenção de aumentar a velocidade de acesso aos dados; • Avisos de erros: algumas fases do aplicativo desta pesquisa poderiam ter um retorno mais adequado para o usuário aos erros apresentados durante o processamento das 84 quatro fases (Ex: Erro de conexão com o Facebook, Geolocalização não encontrada, problemas ao realizar o treinamento da rede e etc). • Treinamento dos mapas em um servidor: o treinamento dos mapas de Kohonen é realizado dentro do smartphone, de acordo com esta pesquisa. Como existe uma obrigatoriedade de conexão com a internet, o treinamento dos mapas poderia ser realizado em um servidor adequado para tal fim, aumentando assim a velocidade de resposta e permitindo uma análise de padrões sobre as pesquisas feitas pelo usuário, possibilitando o relacionamento entre elas. • Reconhecimento de caracteres: se a entrada não for a partir da mineração de dados de redes sociais, e sim uma entrada de dados a partir de uma interação do usuário, o processamento dos mapas de Kohonen podem ser utilizados para reconhecer um ou mais caracteres usados como parâmetro de entrada. • Reconhecimento de padrões em jogos: em jogos que precisem realizar determinadas associações baseados na análise de entradas do jogador, o treinamento do mapa de Kohonen do aplicativo desta pesquisa permite a modificação do mesmo para este tipo de funcionalidade. • Reconhecimento de padrões em outras redes sociais: ao se utilizar outra API (Twitter ou Instagram, por exemplo) e ajustando-se o treinamento do mapa de Kohonen, é possível usar o mesmo tipo de reconhecimento de dados para outras redes sociais, sendo que o Instagram exigiria uma alteração para o reconhecimento de dados através do processamento digital de imagens • Reconhecimento de padrões em imagens: modificando-se os parâmetros de entrada para imagens e não texto, o mapa pode ser utilizado para reconhecer padrões de imagens utilizando os mapas de Kohonen. Diversos ajustes podem ser realizados no aplicativo da pesquisa visando sua melhoria e/ou modificação. A mineração em banco de dados Big Data e o treinamento de redes de Kohonen podem ser realizados por um smartphone contanto que hajam um pré-processamento e uma implementação adequados dos treinamentos dos mapas de Kohonen. 85 REFERÊNCIAS BIBLIOGRÁFICAS ADVIZOR SOLUTIONS. Advizor Solutions Overview. Disponível em: <http://www.advizorsolutions.com>. Acesso em: 12 de jun. de 2014. AGUIRRE, Juan Francisco; VANDAMME, Jean-Phillipe; MESKENS, Nadine. Determinations of Factors Influencing the Achievement of the First-Year University Students Using Data Mining Methods. Disponível em: <http://www.educationaldatamining.org/ITS2006EDM/superby.pdf>. Acesso em: 11 de maio de 2014. AGRAWAL, Rakesh; MANILLA, Heikki; SRIKANT; Ramakrishnan; TOIVONEN, Hannu; VERKAMO, Inkeri. Advances in Knowledge Discovery and Data Mining. Cambridge: MIT Press, 1996. ALEXANDER, Doug. Data Mining. Disponível em: <http://www.laits.utexas.edu/~anorman/BUS.FOR/course.mat/Alex/>. Acesso em: 08 de maio de 2014. APPLE DEVELOPER. Concepts in Objective-C Programming. Disponível em: <https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Mo del-View-Controller/Model-View-Controller.html>. Acesso em: 05 de jun. de 2014. APPLE PRESS INFO. Apple Launches iPhone 4S, iOS5 & iCloud. Disponível em: <http://www.apple.com/pr/library/2011/10/04Apple-Launches-iPhone-4S-iOS-5iCloud.html>.Acesso em: 28 de maio de 2014. AUGIFY. Data Science and Visualization Cloud. Disponível em: < http://www.augify.com>. Acesso em: 12 de jun de 2014. BALABIN, Roman; LOMAKINA, Ekaterina. Neural Networks Approach to Quantum-Chemistry Data: Accurate prediction of density functional theory energies. Journal of Chemical Physics. Vol. 131, n. 7, ago 2009. BATE, Andrew; LINDQUIST, Marie; EDWARDS, Ralph; OLSSON, Sten; ORRE, Roland; LANSNER, Anders; FREITAS, Rogerio Melhado. A Bayesian Neural Network Method for Adverse Drug Reaction Signal Generation. European Journal of Clinical Pharmacology. Vol. 54, n. 4, Jun 1998. BATTITI, Roberto; BRUNATO, Mauro. Reative Business Intelligence. From Data to Models to Insight. Reactive Search Srl, 2011. BEZERRA, Eduardo. Princípios de Análise e Projeto de Sistemas com UML. Rio de Janeiro: Campus, 2002. 86 BOTTACI, Leonardo. Artificial Neural Networks Applied to Outcome Prediction of Colorectal Cancer Patients in Separate Institutions. Disponível em: <http://www.lcc.uma.es/~jja/recidiva/042.pdf >. Acesso em: 02 de jun. de 2014. BUNGE, Mário. Teoria e Realidade. São Paulo: Perspectiva, 1974. CENTRIFUGE SYSTEMS. Centrifuge. Disponível em: < http://centrifugesystems.com>. Acesso em: 12 de jun. de 2014. CHIN, Alvin; ZHANG, Daqing. Mobile Social Networking: An Innovative Approach (Computional Social Sciences). Springer, 2013. CONSORTIUM ON COGNITIVE SCIENCE INSTRUCTION. McCulloch Pits Neurons. Disponível em: <http://www.mind.ilstu.edu/curriculum/mcp_neurons/mcp_neuron_1.php>. Acesso em: 11 de jun. de 2014. CLARK, Richard M. Machine Vision Systems (MVS) and Object Recognition. Disponível em: <http://homepage.ntlworld.com/richard.clark/rs_kohonen.html>. Acesso em: 18 de jul. de 2014. CLIFTON, Christopher. Encyclopedia Britannica: Definition of Data Mining. Disponível em: <http://global.britannica.com/EBchecked/topic/1056150/data-mining>. Acesso em: 09 de maio de 2014. DAWSON, Christian; WILBY, Robert L.; BROWN, Martin R.; HARPHAM, Colin; DARBY, Edmund J.; CRANSTON, Elspeth. Modelling Ranunculus Presence in the Rivers Test and Itchen Using Artificial Neural Networks. Disponível em: <http://www.geocomputation.org/2000/GC016/Gc016.htm>. Acesso em: 17 de jul. de 2014. DEEROS, Dirk; EATON, Chris; LAPIS, George; ZIKOPOULOS, Paul; DEUTSCH, Tom. Harness The Power Of Big Data: The IBM Big Data Plataform. New York: McGrall Hill, 2012. DEPARTMENT OF PSYCHOLOGY FROM UNIVERSITY OF TORONTO. Artificial Neural Networks Technology. Disponível em: < http://www.psych.utoronto.ca/users/reingold/courses/ai/cache/neural2.html >. Acesso em: 18 de jul. de 2014. DOMOSPHERE. How Much Data Is Created Every Minute? Disponível em: <http://www.domo.com/blog/2012/06/how-much-data-is-created-every-minute/ >. Acesso em: 15 de maio de 2014. EATON, Chris; DEEROS, Dirk; LAPIS, George; ZIKOPOULOS, Paul; DEUTSCH, Tom. Understanding Big Data. Analytics for Enterprise Class Hadoop and Streaming Data. Disponível em: <http://public.dhe.ibm.com/common/ssi/ecm/en/iml14296usen/IML14296USEN.PDF>. Acesso em: 11 de jun. de 2014. 87 ELECTRONIC FRONTIER FOUNDATION. Total/Terrorism Information Awareness (TIA). Is It Truly Dead? Disponível em: < http://w2.eff.org/Privacy/TIA/20031003_comments.php>. Acesso em: 11 de maio de 2014. ENGADGET. iPhone 4S Review. Disponível em: < http://www.engadget.com/2011/10/14/iphone4s-review/>. Acesso em: 28 de maio de 2014. FACEBOOK DEVELOPERS. Using the Graph API. Disponível em: <https://developers.facebook.com/docs/graph-api/using-graph-api/>. Acesso em: 07 de mar. de 2014 FAYYAD, Usama; PIATETSKY-SHAPIRO; Gregory; SMYTH, Padhraic. From Data Mining to Knowledge Discovery in Databases. AI Magazine, Vol. 17, n. 37-54, out. 1996. FERNANDES, Anita Maria da Rocha. Inteligência Artificial: Noções Gerais. 2a ed. Florianópolis: Visual Books, 2005. FUHRT, Borko. Handbook of Social Network Technologies and Applications. Springer, 2010. FUKUSHIMA, Kunihiko. Neocognitron: A Self-Organizing Neural Network Model for a Mechanism of Pattern Recognition Unaffected by Shift in Position. Biological Cybernetics. Vol. 36, n 4, ago 1980. GANESAN, Narayan. Application of Neural Networks in Diagnostic Cancer Using Demographic Data. International Journal of Computer Applications. Vol. 1, n 26, jul 2010. GARTNER RESEARCH. The Importance of Big Data: A Definition. Disponível em: <https://www.gartner.com/doc/2057415/importance-big-data-definition>. Acesso em: 19 de maio de 2014. GOSS, Sherri. Data Mining and Our Personal Privacy. Disponível em: <http://www.macon.com/2013/04/10/2429775/data-mining-and-our-personal-privacy.html>. Acesso em: 08 de maio de 2014. GOVERNMENT ACCOUNTABILITY OFFICE. Data Mining: Early Attention To Privacy in Developing a Key DHS Program Could Reduce Risks. Disponível em: <http://www.gao.gov/products/GAO-07-293> Acesso em: 11 de maio de 2014. GRAVES, Alex; SCHMIDHUBER, Jürgen. Offline Handwriting Recognition with Multidimensional Recurrent Neural Networks. Disponível em: <http://www.idsia.ch/~juergen/nips2009.pdf>. Acesso em: 11 de jun. de 2014 GÜNNEMANN, Stephan; KREMER, Hardy; SEIDL, Thomas. An Extension of the PMML Standard to Subspace Clustering Models. Workshop on Predictive Markup Language Modeling. Vol. 11, n. 48, ago 2011. HASTIE, Trevor; TIBSHIRANI, Robert; FRIEDMAN, Jerome. The Elements of Statistical Learning: Data Mining, Inference and Prediction. 2a ed. Springer, 2009. 88 HAYKIN, Simon. Neural Networks: A Comprehensive Foundation. Prentice Hall, 1999. HEATON, Jeff. Introduction to Neural Networks with Java. Heaton Research, 2013. HINTON, Geoffrey; OSINDERO, Simon; TEH, Yee-Whye. A Fast Learning Algorithm For Deep Belief Nets. Neural Computation. Vol. 18, n. 7, out 2006. HSIEH, Tung-Ju. Neural Networks and Their Application for Structural Self-Diagnosis. Disponível em: < http://dspace.mit.edu/handle/1721.1/84217>. Acesso em: 11 de jun. de 2014. IBM. What Is Big Data. Disponível em: <http://www-01.ibm.com/software/data/bigdata/what-isbig-data.html>. Acesso em: 12 de maio de 2014. IEEEXPLORE DIGITAL LIBRARY. Unsupervised Learning Based Performance Analysis of n-Support Vector Regression for Speed Prediction of a Large Road Network. Disponível em: < http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6338917>. Acesso em: 11 de jun. de 2014. ITUNES APP STORE. Paper Boy Online App. Disponível em: <https://itunes.apple.com/gb/app/paper-boy-online-app/id412548455?mt=8>. Acesso em: 27 de maio de 2014. ITUNES APP STORE. Hawrkore. Disponível em: <https://itunes.apple.com/en/app/hawrkore/id388014361?mt=8>. Acesso em: 27 de maio de 2014. JIAWEI, Han; KAMBER, Micheline. Data Mining – Concepts and Techniques. Morgan Kaufmann Publishers, 2001. JACKSON, Jonathan Lee. Extensible Neural Network Software: Applications in Gene Expression Analysis. Disponível em: <https://dspace.mit.edu/bitstream/handle/1721.1/33285/62277185.pdf?sequence=1 > Acesso em: 12 de jun. de 2014. JACOB, Joseph Biju; CHEW, Yeow Eng; TAN, Javan; QUEK, Chai. Self-Organizing TSK Fuzzy Inference System with BCM Theory of Meta-Plasticity. Neural Networks, The 2012 International Joint Conference On, 2012. KANTARDZIC, Mehmed. Data Mining: Concepts, Models, Methods and Algorithms. 2a ed. New Jersey: John Wiley & Sons, 2003. KAWAGUSHI, Kiyoshi. A Multithreaded Software Model for Backpropagation Neural Network Applications. Disponível em: < http://wwwold.ece.utep.edu/research/webfuzzy/docs/kkthesis/kk-thesis-html/>. Acesso em: 17 de jul. de 2014. KOHONEN, Teuvo. Self Organizing Maps. Springer, 2001. 89 KURZWEIL. How Bio-Inspired Deep Learning Keeps Winning Competitions. Disponível em: <http://www.kurzweilai.net/how-bio-inspired-deep-learning-keeps-winning-competitions>. Acesso em: 02 de jun. de 2014. LAI, Chi-Hui. Understanding The Design of Mobile Social Networks. M/C Journal, Vol. 10, n. 1, mar. 2007. LOHR, Steve. The Age of Big Data. Disponível em: <http://www.nytimes.com/2012/02/12/sunday-review/big-datas-impact-in-theworld.html?pagewanted=all&_r=0 >. Acesso em: 16 de jul. de 2014. LUGANO, Giuseppe. Mobile Social Networking in Theory and Practice. FirstMonday, Vol. 13, n. 11, nov. 2008. MA, Yajie; RICHARDS, Mark; GHANEM, Moustafa; GUO, Yike; HASSARD, John. Air Pollution Monitoring and Mining Based on Sensor Grid in London. Sensors. Vol. 8, n. 6, mai. 2008. MA, Yajie; YIKE, Guo; XIANGCHUAN, Tian; GHANEM, Moustafa. Distributed ClusteringBased Aggregation Algorithm for Spatial Correlated Sensor Networks. IEEE Sensors Journal. Vol. 11, n. 3, Set 2010. MAC APP STORE. Xcode. Disponível em: < https://itunes.apple.com/us/app/xcode/id497799835>. Acesso em: 27 de maio de 2014. MAC DEV CENTER. Developing for OS X Mavericks. Disponível em: <https://developer.apple.com/devcenter/mac/index.action>. Acesso em: 27 de maio de 2014. MAGUIRE, David; GOODCHILD, Michael; RHIND, David. Geographic Information Systems: Principles and Applications. Londres: Longman, 1991. MENA, Jesús. Machine Learning Forensics for Law Enforcement, Security and Intelligence. Boca Raton: CRC Press, 2011. MCGRAIL, Anthony; GULSKI, Edward; ALLAN, David; BIRTWHISTLE, David; BLACKBURN; Trevor; GROOT, Edwin. Data Mining Techniques to Assess the Condition of High Voltage Electrical Plant. CIGRE, Vol. 1, n. 39, ago. 2002. MCKINSEY GLOBAL INSTITUTE. Big Data: The Next Frontier For Innovation, Competition And Productivity. Disponível em: <http://www.mckinsey.com/insights/business_technology/big_data_the_next_frontier_for_innovati on>. Acesso em: 22 de maio de 2014. MICROSOFT DEVELOPER NETWORK. Conceitos de Mineração de Dados. Disponível em < http://msdn.microsoft.com/pt-br/library/ms174949.aspx>. Acesso em: 08 de jun. de 2014. MONK, Ellen; WAGNER, Bret. Concepts in Enterprise Resource Planning. 2a ed. Boston: Thomson Course Technology. 2006. 90 MNEMOSINE STUDIO. Kohonen Self-Organizing Maps. Disponível em: <http://mnemstudio.org/neural-networks-kohonen-self-organizing-maps.htm>. Acesso em: 18 de jul. de 2014. NÓREN, Niklas; BATE, Andrew; HOPSTADIUS, Johan; STAR, Kristina; EDWARDS, Ralph. Temporal Pattern Discovery for Trends and Transient Effects: Its Application to Patient Records. Fourteenth International Conference on Knowledge Discovery and Data Mining. Vol. 1, n. 963, out 2008. O’BRIEN, James; MARAKAS, George. Management Information Systems. New York: McGraw-Hill/Irwin, 2011. OJA, Erkii; KASKI, Samuel. Kohonen Maps. Amsterdam: Elsevier, 1999. OLIVEIRA, Jeymisson. Redes Neurais Artificiais. Disponível em: <http://www.dsc.ufcg.edu.br/~pet/jornal/setembro2011/materias/informatica.html>. Acesso em: 17 de jul. de 2014. ORACLE. Meeting The Challenge of Big Data. Disponível em: <http://www.oracle.com/us/technologies/big-data/big-data-ebook-1866219.pdf >. Acesso em: 29 de maio de 2014. PACHET, François; WESTERMANN, Gert; LAIGRE, Damien. Musical Data Mining for Eletronic Music Distribution. First WedelMusic Conference. Vol. 1, n. 101, dez 2001. PEWRESEARCH INTERNET PROJECT. Mobile Technology Fact Sheet. Disponível em: <http://www.pewinternet.org/fact-sheets/mobile-technology-fact-sheet/>. Acesso em: 07 de jun. de 2014. PIATETSKY-SHAPIRO, Gregory; PARKER, Gary. Lesson: Data Mining, and Knowledge Discovery: An Introduction. Disponível em: <http://www.kdnuggets.com/data_mining_course/x1intro-to-data-mining-notes.html>. Acesso em: 09 de maio de 2014. PLOTLY. Analyze and Visualize Data, Together. Disponível em: < https://plot.ly>. Acesso em: 12 de jun. de 2014. POWERS, William. Hamlet’s Blackberry: A Pratical Philosophy for Building a Good Life in the Digital Age. New York: Harper, 2010. RAENTO, Mika; ANTTI Oulasvirta. Designing for Privacy and Self-presentation in Social Awareness. Personal Ubiquituous Comput, Vol. 12, n. 7, out 2008. RIESENHUBER, Maximilian; POGGIO, Tomaso. Hierarchical Models of Object Recognition in Cortex. Nature Neuroscience. Vol. 2, n. 1019, ago 1999. RUSSEL, Ingrid. Neural Networks Module. Disponível em: <http://uhaweb.hartford.edu/compsci/neural-networks-definition.html>. Acesso em: 02 de jun. de 2014. 91 RUSSEL, Matthew. Mining the Social Web: Data Mining Facebook, Twitter, Linkedin, Google+, GitHub and More. O’Reilly Media, 2013. SAFFELL, Matthew; MOODY, John. Learning to Trade Via Direct Reinforcement. Neural Networks, IEEE Transactions On. Vol. 12, n. 4, Jul 2001. SATHI, Arvind. Big Data Analytics: Disruptive Technologies for Changing the Game. MC Press, 2013. SCHMIDHUBER, Jürgen; GRAVES, Alex. Offline Handwriting Recognition with Multidimensional Recurrent Neural Networks. Disponível em: <http://www.idsia.ch/~juergen/nips2009.pdf>. Acesso em 02 de jun. de 2014. SCOTT, John P. Social Network Analysis: A Handbook. 2a ed. Thousand Oaks: Sage Publications, 2000. SECURITY ON NBCNEWS. DHS Halts Anti-Terror DataMining Program. Disponível em: <http://www.nbcnews.com/id/20604775/#.U3KB7V4k_Ew>.Acesso em: 10 de maio de 2014. SETH, Ronald Tardiff. Self Organizing Event Maps. Disponível em: <http://dspace.mit.edu/bitstream/handle/1721.1/17982/57189321.pdf?sequence=1>. Acesso em: 12 de jun. de 2014. SOMMERVILE, IAN. Engenharia de Software. 9a ed. São Paulo: Pearson, 2011. SMYTH, Neil. Objective-C 2.0 Essentials. 3a ed. Payload Media, 2013. TÖNNIES, Ferdinand. Community and Civil Society. Cambridge: Cambridge University Press, 2001. WASSERMAN, Stanley; FAUST Katherine. Social Network Analysis: Methods and Applications. 5 ed. Cambridge: Cambridge University Press, 1999. WELMANN, Barry. Social Structures: A Network Approach. Cambridge: Cambridge University Press, 1988. WAZLAWICK, Raul Sidney. Metodologia de Pesquisa para Ciência da Computação. Rio de Janeiro: Elsevier, 2008. XIAO, Nancy. Using The Modified Back-Propagation Algorithm to Perform Automated Downlink Analysis. Disponível em: < http://dspace.mit.edu/handle/1721.1/40206 >. Acesso em: 12 de jun. de 2014. YAN, Ji. Understanding Human Mobility Patterns Through Mobile Phone Records: a CrossCultural Study. Disponível em: < http://dspace.mit.edu/handle/1721.1/66867>. Acesso em: 11 de jun. de 2014. 92 YANG, Joshua; PICKETT, Matthew; LI, Xuema; OHLBERG, Douglas; STEWART, Duncan; WILLIANS, Stanley. Memristive Switching Mechanism for Metal/Oxide/Metal Nanodevices. Nature Nanotechnology. Vol 3, n. 429, jun 2008. ZERNIK, Joseph. Data Mining as a Civic Duty – Online Public Prisoners Registration Systems. International Journal on Social Media: Monitoring, Measurement, Mining. Vol. 1, n. 69, ago 2010. ZHU, Xingquan; DAVIDSON, Ian. Knowledge Discovery and Data Mining: Challenges and Realities. New York: Hershey, 2007. 93