IHC 2012 Companion Proceedings • Tutorial November 5-9, 2012 • Cuiabá, MT, Brazil Algoritmos de Clusterização e Python Científico apoiando Modelagem de Usuário Andrey Araujo Masiero Leonardo A. Ferreira Plinio Thomaz Aquino Jr. Centro Universitário da FEI Fund. Educacional Inaciana Pe. Sabóia de Medeiros Av. Humberto A. Castelo Branco, 3972 09859-901 - S. Bernardo Campo - SP - Brasil +55 11 4352 2900 Centro Universitário da FEI Fund. Educacional Inaciana Pe. Sabóia de Medeiros Av. Humberto A. Castelo Branco, 3972 09859-901 - S. Bernardo Campo - SP - Brasil +55 11 4352 2900 Centro Universitário da FEI Fund. Educacional Inaciana Pe. Sabóia de Medeiros Av. Humberto A. Castelo Branco, 3972 09859-901 - S. Bernardo Campo - SP - Brasil +55 11 4352 2900 [email protected] [email protected] ABSTRACT [email protected] terfaces adaptativas. Por fim, serão demonstradas técnicas para obter as Personas com base em métodos estatı́sticos de medida de dispersão dos dados e ferramentas disponı́veis para a apresentação gráfica no Python permitindo uma comparação analı́tica dos mesmos. Python is a interactive, interpreted, object oriented, multiplataform programming language with libraries that aid the studies in Human-Computer Interaction throughout the use of machine learning algorithms, that assists in the construction of the Personas user type. These might help the developer during the interface development and may also enhance the ones that are currently in use. The moment that this technique may apply depends on how the information is acquired – with surveys or system’s log. This paper presents an way to capture this information and transform this data, making possible to use clustering algorithms to group the collected profiles, enabling the automatization of the process in order to use in adaptive interfaces. Lastly, techniques grounded in statistics methods of spreadness measurements used to define a Personas and Python tools to graphically present the data, allowing an analytical comparison, will be demonstrated. Categories and Subject Descriptors H.5.2 [User Interfaces]: Evaluation/methodology; D.1.m [Software Engineering]: Miscellaneous General Terms Algorithms, Design, Theory, Human Factors Keywords Python, Clustering, Personas, User Modeling 1. INTRODUÇÃO Com a existência da diversidade de usuários de sistemas tecnológicos é difı́cil para o projetista atender a todos os perfis[2]. Para mitigar esse problema, os projetistas utilizam de técnicas que permitem construir um modelo de usuário de tal forma, que seja possı́vel atender uma grande parte dos perfis de usuários. Um modelo de usuário utilizado para esse objetivo é chamado de Personas apresentado por Jung [?] na área de psicologia e posteriormente utilizado por Cooper em projetos de interface [3]. RESUMO Python é uma linguagem de programação interativa, interpretada, orientada à objeto e multiplataforma com bibliotecas que auxiliam os estudos na área de Interação HumanoComputador através de algoritmos de aprendizado de máquina, que auxiliam na construção de modelos de usuários do tipo Personas. Estas podem auxiliar o projetista durante o desenvolvimento de interfaces, além de permitir a melhora das que já estão em utilização. O momento de utilização desta técnica dependerá de como as informações serão capturadas – com surveys ou log de aplicação. Este trabalho apresenta uma forma de capturar essas informações e tratar esses dados, possibilitando o agrupamento dos perfis coletados através de algoritmos de clusterização, permitindo automatizar esse processo para utilização em in- Personas representa um grupo de usuários através de um personagem fictı́cio [1]. Uma das opções para agrupar as caracterı́sticas dos usuários e criar os grupos os quais serão extraı́dos personagens fictı́cios ou Personas, é utilizar a técnica de clustering. Clustering é um dos passos do processo de Data Mining que é utilizado para extração de conhecimentos em um conjunto de informações [16]. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, or republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. IHC'12, Brazilian Symposium on Human Factors in Computing Systems. November 5-9, 2012, Cuiabá, MT, Brazil. Copyright 2012 SBC. ISSN 2316-5138 (pendrive). ISBN 978-85-7669-262-1 (online). Assim, esse trabalho tem como objetivo apresentar a criação de Personas com o auxı́lio de Clustering utilizando como ferramenta o Python Cientı́fico. Dessa maneira, a estrutura do trabalho é formada pela apresentação do Python e suas bibliotecas cientı́ficas nas primeiras seções, em seguida será apresentado com um pouco mais de detalhes a técnica de modelagem de usuário Personas. Por fim, uma discussão de como unir as duas técnicas para benefı́cio do projetista. 47 2. A LINGUAGEM DO PYTHON • I/O de Dados Python é uma linguagem de programação que tem como objetivo tornar o trabalho de desenvolvimento mais rápido e integrado com o diferentes sistemas. O estilo que sua sintaxe apresenta é próximo à um pseudo-código, o que torna a leitura do código intuitiva e de fácil interpretação [15]. • Estatı́stica Básica • dentre outros Atualmente estão sendo adicionados ao NumPy novos tipos de variáveis para facilitar o trabalho com informações de tempo e datas. Permitindo que operações aritméticas entre as mesmas se tornem mais intuitivas. Toda a filosofia do Python é embasada em um documento chamado de PEP201 . O PEP20 apresenta um poema chamado The Zen of Python onde estão descritas as normas de codificação do Python. Em termos gerais a filosofia procura enfatizar o esforço realizado pelo programador ao invés do esforço computacional. Além disso, no Python possuir um código “bonito” é melhor do que um código que aparenta ser mais rápido. Entretanto, esta funcionalidade é relativamente nova na biblioteca e sofreu grandes melhorias entre as versões 1.6 e 1.7 do NumPy, sendo possı́vel que novos recursos sejam adicionados futuramente. Para manter o código “bonito” e de fácil leitura, Python foi criado sem caracteres especiais para delimitar blocos no código. Para considerar que uma linha do código está contida em um bloco, o interpretador verifica a indentação entre as linhas. Além disso, Python possui apenas 31 palavras reservadas deixando-o simples para o interpretador. Além das funções, as estruturas de dados existentes neste módulo são fundamentais para execução dos algoritmos e funções existentes nos SciKits, como veremos na seção 5. 4. Python é uma linguagem multiplataforma e portável já que funciona através da interpretação de um bytecode, ou seja, um código pré-compilado que será interpretado por uma espécie de máquina virtual, parecida com o Java ou C#. O SciPy oferece além de métodos para a análise de dados, funções que permitem também a geração de base de dados seguindo certas condições estatı́sticas pré-definidas pelo usuário (como média, variância e distribuição desejada), além de valores de constantes matemáticas e fı́sicas, que auxiliam o desenvolvimento de novos projetos e possı́veis simulações. Um outra caracterı́stica importante do Python é sua tipagem forte onde os objetos possuem uma boa definição dos tipos de dados e não é possı́vel utilizar de coerções. Além das caracterı́sticas apresentadas, o Python ainda possui o auxı́lio de frameworks e módulos desenvolvidos pela comunidade para expansão de suas funcionalidades. Alguns desses frameworks e módulos serão apresentados nas seções posteriores. 3. Existem diversas maneiras de expandir o Python além de sua biblioteca padrão, como com os módulos que foram desenvolvidos com o objetivo especı́fico de complementar o Scipy e oferecer novas funcionalidades em diversas áreas. O projeto que reúne essas bibliotecas tem o nome de Scipy Toolkits, mais conhecido como SciKits 3 . NUMPY - NÚMEROS E MATRIZES Este é um dos módulos mais importantes no trabalho de pesquisas cientificas, pois contém funções de alto desempenho para manipulação de dados multidimensionais, como por exemplo, vetores e matrizes [7]. 5. Grande parte das funções utilizadas no módulo NumPy são implementador em C/C++ ou Fortran para que o desempenho computacional seja maior. As funções existentes no NumPy abrangem diversas áreas, principalmente a matemática, pois esses foram criados com o oferecer ao Python recursos disponı́veis aos usuário de MATLAB2 no que diz respeito a computação numérica. SCIKIT-LEARN - APRENDIZADO DE MÁQUINA COM PYTHON Para o aprendizado de máquina, o SciKit-Learn é um dos projetos que fazem parte dos SciKits e disponibiliza diversas módulos como por exemplo: 1. Aprendizado Supervisionado: Regressão Linear, Logı́stica e Bayesiana, Gradiente Descendente, Perceptron, Análise de Discriminante Linear e Quadrática, SMV, e Naı̈ve Bayes, entre outros. As funções do NumPy estão agrupadas da seguinte maneira: • Cálculo 2. Aprendizado Não-Supervisionado: K-Means, Affinity Propagation, DBSCAN, Cluster Hierárquico, PCA e ICA, entre outros; • Lógica • Ordenação de Dados 3. Transformação de base de dados: pré-processamento de dados, extração de caracterı́sticas em texto e imagens e aproximação de kernel, entre outros; • Álgebra Linear 1 http://www.python.org/dev/peps/pep-0020/ acesso em 20 de setembro de 2012. 2 http://www.mathworks.com/products/matlab/ SCIPY - BIBLIOTECA CIENTIFICA SciPy é um módulo de Python com o foco em cientistas, engenheiros e matemáticos. Ele depende do NumPy, porém oferece uma gama maior de métodos para estatı́stica, otimizações, integrações, álgebra, processamento de sinais e imagens, dentre outras áreas de utilização de algoritmos [7]. último 3 As bibliotecas que atualmente fazem parte da mesma estão no endereço http://scikits.appspot.com/scikits 48 4. Validação Cruzada: Permutação Aleatória, Leave-OneOut e Leave-P-Out; 5. Base de dados de exemplos e possibilidade de download de certas bases disponı́veis na internet. O objetivo do desenvolvimento do Scikit-Learn é oferecer soluções simples e eficientes à problemas de aprendizado de máquina [12]. Por se tratar de uma biblioteca que visa a viabilização de reutilização de código de forma acessı́vel [12], o Scikit-Learn se integra facilmente com o Numpy, Scipy e Matplotlib. Existem várias maneiras de criar personas. [13] apresentaram um ciclo de vida para criação, uso e descarte de personas. Trata-se de um ciclo completo de aplicação de personas no desenvolvimento de produtos. Neste trabalho, considerase apenas um processo de concepção de personas, com o objetivo de evidenciar a vantagem de integração do Python cientı́fico na modelagem de usuários. Desta maneira, as seguintes fases são consideradas para a concepção de personas: “Planejamento”, “Pesquisa”, “Criação e Modelagem”. Uma das técnicas de clusterização mais conhecidas é o KMeans, proposto por Stuart P. Lloyd [9, 10], que utiliza a distância Euclidiana entre centro de um cluster existente e cada ponto da amostra para realizar a classificação. O conceito de Clustering apresentado ao longo da seção 5 auxiliará principalmente na fase de “Criação e Modelagem”, onde existe a necessidade de agrupar as informações dos usuários para obter-se as personas. Na seção 7 será apresentado o processo como um todo. Uma outra maneira de classificar os dados obtidos é utilizando o Density Based Spatial Clustering of Applications with Noise (DBSCAN) proposto por Ester et. al.. Este utiliza a densidade dos pontos da amostra para realizar a classificação, pois considera que existe uma densidade maior de pontos dentro do cluster do que fora do mesmo [5]. 7. CRIANDO PERSONAS Para iniciar-se o processo, é necessário definir quais são os tipos de informações que serão utilizadas nas personas. Como exemplo, utilizaremos informações adquiridas através de questionários conforme apresentado por Masiero et al. [11] em seu trabalho, porém tais informações podem ser oriundas de qualquer fonte, como por exemplo, informações de log de sistema. Outra informação relevante é que esse processo pode ser aplicado em qualquer momento do projeto. Esse momento é definido de acordo com o tipo de informação que será utilizado, neste caso o questionário pode ser tanto pré como pós projeto. Uma terceira forma de realizar a classificação é utilizando uma matriz de similaridade calculada para cada par de pontos pertencentes a amostra, da maneira como é realizada pelo Affinity Propagation proposto por Frey e Dueck [6]. No SciKit-Learn, estes três algoritmos estão implementados e se baseiam na classe estimator e implementam os métodos fit() – que é responsável pela realização do treinamento – e predict() – responsável pela classificação. A seguir encontra-se um exemplo de como estes algoritmos podem ser utilizados para realizar a classificação de dados já carregados dentro de um script em Python. 6. de estudo do perfil de usuários alvos de um produto ou serviço. As personas ajudam a estabelecer um consenso entre os projetistas e stakeholders sobre as necessidades e motivações do público-alvo. Esta técnica produz um conjunto de personagens fictı́cios ou representações reais identificadas de acordo com as definições iniciais do projeto. O primeiro passo desse processo é transformar todas as respostas do questionário em dados numéricos para que os algoritmos sejam executados. Uma das maneiras que pode-se realizar essa transformação é aplicar um código para cada uma das respostas da questão. Veja no exemplo abaixo: PERSONAS Persona é uma técnica que ajuda a entender e aplicar o perfil de usuários no processo de criação de produtos eficientes e efetivos. O conceito de personas foi popularizado por Cooper [3], que definiu personas como: “Personas não são pessoas reais... são arquétipos hipotéticos dos usuários atuais... definidos com rigor e precisão significantes”. Cooper [4] se referiu à personas como arquétipos hipotéticos porque não há como provar que as personas representam realmente os usuários atuais antes do lançamento de um produto. 1. Você realizou a tarefa de forma fácil e rápida? (a) Concordo totalmente –> 1 (b) Concordo em parte –> 2 (c) Discordo em parte –> 3 (d) Discordo totalmente –> 4 Personas também foram são definidas como modelos descritivos de usuários que representam um grupo de pessoas reais e suas caracterı́sticas [2]. Esses modelos agrupam informações sobre conhecimento, habilidades, motivações e preocupações, descrevendo os padrões de ação que um grupo de usuários tem sobre um determinado projeto, permitindo a troca de informações entre os perfis de usuário e a equipe do projeto [14]. Personas podem servir como ferramentas de apoio para documentação de soluções de projeto de interface, armazenando e organizando a representação de usuários [1]. Transformado as respostas em números precisa realizar uma análise das informações e verificar quais as escalas entre as respostas, pois existem diferentes intervalos definidos entre as variáveis. Por exemplo, quando existem perguntas como a do exemplo acima e a informação da idade do usuário as escalas são totalmente diferentes, uma idade por variar entre 0 até 100 anos e a pergunta de múltipla escolha ficará com um limite entre 1 e 4. Esse tipo de situação pode dificultar na execução do algoritmo criando um certo viés dos dados. Para resolver esse problema realiza-se uma normalização dos dados, geralmente entre 0 e 1 [8], mantendo-os dentro de Neste trabalho definimos as personas como modelos criados para representar pessoas reconhecidas por algum processo 49 uma mesma escala. A normalização realizada nesse caso é representada na equação 1. Xnorm = min(X) − X max(X) (1) [2] Com os dados normalizados, pode-se aplicar um dos algoritmos de clusterização apresentados na seção 5. Para este exemplo, utilizaremos o DBScan, que tem demonstrado um melhor resultado, sem depender de informar o número de grupos que se deseja. [3] [4] #Executando o dbscan S = np.vstack(dadosUsuarios) core_samples, labels = dbscan(S, eps=0.6, \ min_samples=1, metric=’euclidean’, \ random_state=None) [5] Ao executar o algoritmo ele retorna na variável labels o valor do ı́ndice que o usuário pertence. Após esse passo precisamos separar os elementos em seus grupos para gerar as Personas. Grupos formados, este é o último passo para criarmos as Personas que é simplesmente combinar os valores das variáveis e encontrar um valor em comum entre elas. Conforme apresentado por [11], para encontrar o valor em comum pode-se utilizar três métodos a média, a moda ou a mediana. [6] [7] [8] [9] [10] Antes de aplicar qualquer uma das três medidas de dispersão é necessário fazer a seguinte validação a média deve ser descartada quando o desvio padrão dos dados for maior do que 30% da média. Nesse caso, é indicado que utilize da mediana ou moda. Após encontrar o ponto central de cada uma das variáveis existentes nas informações do usuário, as personas estão formadas e prontas para divulgação aos projetistas e stakeholders. 8. [11] CONSIDERAÇÕES FINAIS O procedimento de caracterização de perfil do usuário pode onerar o projeto de interface de um produto ou sistema, quando não existem ferramentas de apoio. Isso acontece por que a caracterização do usuário é realizada por entrevistas, questionários, grupo focal, entre outros, produzindo uma grande quantidade de informação que deve ser combinada para a produção de conteúdo relevante. As informações coletadas podem ser mal aproveitadas na busca de uma métrica comum no mercado: ter o perfil reconhecido e empregar o menor esforço possı́vel. [12] [13] [14] Dado esse cenário, esse trabalho apresentou o Python como uma ferramenta que apoia a modelagem de usuário, e adicionalmente poderá integrar módulos de sistema que capturam informações dos perfis automaticamente. O Python foi considerado como cientifico por utilizar de bibliotecas desenvolvidas com o foco em aplicações cientificas e acadêmicas, sendo útil e importante também em aplicações de mercado. [15] [16] 9. REFERÊNCIAS [1] P. T. Aquino, Junior. Picap: padrões e personas para expressão da diversidade de usuários no projeto de 50 interação. 2008. Biblioteca Digital de Teses e Dissertações da USP. Disponı́vel em: <http://www.teses.usp.br/teses/disponiveis/3/3141/tde15092008-144412/>. Acesso em: 2012-04-19. P. T. Aquino, Junior and L. V. L. Filgueiras. User modeling with personas. In Proceedings of the 2005 Latin American conference on Human-computer interaction, CLIHC ’05, pages 277–282, New York, NY, USA, 2005. ACM. A. Cooper. The Inmates Are Running the Asylum. Macmillan Publishing Co., Inc., Indianapolis, IN, USA, 1999. A. Cooper, R. Reimann, and D. Cronin. About face 3: the essentials of interaction design. Wiley-India, 2007. M. Ester, H. peter Kriegel, J. Sander, and X. Xu. A density-based algorithm for discovering clusters in large spatial databases with noise. In Proceedings of the 2nd International Conference on Knowledge Discovery and Data mining, pages 226–231. AAAI Press, 1996. B. J. Frey and D. Dueck. Clustering by passing messages between data points. Science, 315:2007, 2007. E. Jones, T. Oliphant, P. Peterson, et al. SciPy: Open source scientific tools for Python, 2001–. J. Lattin, D. Carrol, and P. Green. Análise de dados multivariados. São Paulo: Cegrage Learning, 2011. S. P. Lloyd. Least squares quantization in pcm. IEEE Transactions on Information Theory, 28:129–137, 1982. J. MacQueen et al. Some methods for classification and analysis of multivariate observations. In Proceedings of the fifth Berkeley symposium on mathematical statistics and probability, volume 1, pages 281–297. California, USA, 1967. A. A. Masiero, M. G. Leite, L. V. L. Filgueiras, and P. T. Aquino, Jr. Multidirectional knowledge extraction process for creating behavioral personas. In Proceedings of the 10th Brazilian Symposium on on Human Factors in Computing Systems and the 5th Latin American Conference on Human-Computer Interaction, IHC+CLIHC ’11, pages 91–99, Porto Alegre, Brazil, Brazil, 2011. Brazilian Computer Society. F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, et al. Scikit-learn: Machine Learning in Python . Journal of Machine Learning Research, 12:2825–2830, 2011. J. Pruitt and T. Adlin. The persona lifecycle: keeping people in mind throughout product design. Morgan Kaufmann Publishers, 2006. J. Pruitt and J. Grudin. Personas: practice and theory. In Proceedings of the 2003 conference on Designing for user experiences, DUX ’03, pages 1–15, New York, NY, USA, 2003. ACM. M. Summerfield. Programming in Python 3: a complete introduction to the Python language. Addison-Wesley Professional, 2009. I. Witten, E. Frank, and M. Hall. Data Mining: Practical machine learning tools and techniques. Morgan Kaufmann, 2011.