Algoritmos de Clusterização e Python Científico

Propaganda
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.
Download