Este relatório técnico apresenta os resultados dos estudos realizados com os dados de visualização de TV fornecidos pelo Ibope em um cenário específico. Simulou-se e avaliou-se o comportamento de alguns usuários que interagem com um sistema de recomendação baseado em Filtragem Colaborativa para televisão digital portátil. Os detalhes da simulação, desde a preparação e a organização dos dados, a geração dos perfis e das recomendações, o cálculo da porcentagem de acerto, além dos gráficos, análises e conclusões, são apresentados neste documento.
Como descobrir e classificar coisas usando machine learning sem compilcação
Relatório técnico i fc 29-07
1. UNIVERSIDADE FEDERAL DE SÃO CARLOS
CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA
PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO
Relatório Técnico
Aplicando Filtragem Colaborativa aos dados de TV fornecidos
pelo IBOPE
ALUNA: Elaine Cecília Gatto
ORIENTADOR: Prof. Dr. Sergio Donizetti Zorzo
São Carlos-SP
Julho/2010
2. AGRADECIMENTOS
Agradeço a Paulo Muniz Ávila e a Adriano Lucas pelo auxílio prestado durante a
realização deste trabalho, especificamente na parte de organização dos dados. Agradeço
também ao IBOPE por ter fornecido os dados de visualização necessários para os testes.
i
3. RESUMO
Este relatório técnico apresenta os resultados dos estudos realizados com os dados de
visualização de TV fornecidos pelo Ibope em um cenário específico. Simulou-se e avaliou-se
o comportamento de alguns usuários que interagem com um sistema de recomendação
baseado em Filtragem Colaborativa para televisão digital portátil. Os detalhes da simulação,
desde a preparação e a organização dos dados, a geração dos perfis e das recomendações, o
cálculo da porcentagem de acerto, além dos gráficos, análises e conclusões, são apresentados
neste documento.
Palavras-Chave: Sistemas de Recomendação, Filtragem de Informação, Filtragem
Colaborativa, Televisão Digital, Knn.
ii
4. LISTA DE FIGURAS
Figura 1 – Contexto do Estudo de Caso ..................................................................................... 6
Figura 2 – Características dos domicílios .................................................................................. 8
Figura 3 – Características socioeconômicas............................................................................... 8
Figura 4 – Conteúdo da tabela usuários ..................................................................................... 8
Figura 5 – Tabela usuários ......................................................................................................... 8
Figura 6 – Amostra dos arquivos TXT....................................................................................... 9
Figura 7 – Tabela que contém os descritores de gênero .......................................................... 12
Figura 8 – Tabela que contém os descritores de subgênero ..................................................... 12
Figura 9 – Tabela que contém os descritores de gênero com seus respectivos subgêneros ..... 12
Figura 10 – Tabela que contém os códigos originais das emissoras ........................................ 12
Figura 11 – Tabela que contém os códigos das emissoras ....................................................... 12
Figura 12 – Tabela que contém os programas.......................................................................... 12
Figura 13 – Tabela que contém as informações da programação de TV ................................. 12
Figura 14 – Amostra das planilhas de sintonia ........................................................................ 13
Figura 15 – Planilhas após organização ................................................................................... 14
Figura 16 – Tabela para armazenamento ................................................................................. 14
Figura 17 – Tabela que resulta da Listagem 1 ......................................................................... 14
Figura 18 – Tabela que contém a mescla do EPG com o histórico do usuário ........................ 18
Figura 19 – Tabela com os novos campos início e fim da sintonia ......................................... 18
Figura 20 – Tabela com o resultado de SUBTIME() ............................................................... 18
Figura 21 – Tabela que adiciona o campo de duração do tipo inteiro ..................................... 21
Figura 22 – Tabela que adiciona o dia da semana.................................................................... 21
Figura 23 – Tabela que adiciona o período .............................................................................. 22
Figura 24 – Tabela que contém a versão final dos dados......................................................... 22
Figura 25 – Tabela do histórico de visualização de cada usuário ............................................ 22
Figura 26 – Tabela que armazena as avaliações de todos os usuários ..................................... 23
Figura 27 – Tabela que armazena as informações do usuário em análise ................................ 23
iii
5. Figura 28 – Tabela que armazena os usuários que gostam de programas similares ................ 23
Figura 29 – Tabela que armazena os usuários que gostam de gêneros similares..................... 23
Figura 30 – Tabela que armazena as recomendações (gêneros/programas) obtidas ................ 23
Figura 31 - % de acerto programa usuário 11 .......................................................................... 33
Figura 32 - % de acerto programa usuário 12 .......................................................................... 34
Figura 33 - % de acerto programa usuário 21 .......................................................................... 34
Figura 34 - % de acerto programa usuário 22 .......................................................................... 35
Figura 35 - % de acerto programa usuário 23 .......................................................................... 35
Figura 36 - % de acerto programa usuário 31 .......................................................................... 36
Figura 37 - % de acerto programa usuário 32 .......................................................................... 36
Figura 38 - % de acerto programa usuário 33 .......................................................................... 37
Figura 39 - % de acerto programa usuário 41 .......................................................................... 37
Figura 40 - % de acerto programa usuário 42 .......................................................................... 38
Figura 41 - % de acerto programa usuário 51 .......................................................................... 38
Figura 42 - % de acerto programa usuário 52 .......................................................................... 39
Figura 43 - % de acerto programa usuário 61 .......................................................................... 39
Figura 44 - % de acerto programa usuário 62 .......................................................................... 40
Figura 45 - % de acerto programa usuário 63 .......................................................................... 40
Figura 46 - % de acerto gênero usuário 11............................................................................... 42
Figura 47 - % de acerto gênero usuário 12............................................................................... 43
Figura 48 - % de acerto gênero usuário 21............................................................................... 43
Figura 49 - % de acerto gênero usuário 22............................................................................... 44
Figura 50 - % de acerto gênero usuário 23............................................................................... 44
Figura 51 - % de acerto gênero usuário 31............................................................................... 45
Figura 52 - % de acerto gênero usuário 32............................................................................... 45
Figura 53 - % de acerto gênero usuário 33............................................................................... 46
Figura 54 - % de acerto gênero usuário 41............................................................................... 46
Figura 55 - % de acerto gênero usuário 42............................................................................... 47
Figura 56 - % de acerto gênero usuário 51............................................................................... 47
Figura 57 - de acerto gênero usuário 52 ................................................................................... 48
Figura 58 - % de acerto gênero usuário 61............................................................................... 48
iv
6. Figura 59 - % de acerto gênero usuário 62............................................................................... 49
Figura 60 - % de acerto gênero usuário 63............................................................................... 49
Figura 61 – Comparação de gêneros entre os usuários 11 e 12 ............................................... 51
Figura 62 – Comparação de gêneros entre os usuários 21, 22 e 23 ......................................... 51
Figura 63 – Comparação de gêneros entre os usuários 31, 32 e 33 ......................................... 52
Figura 64 – Comparação de gêneros entre os usuários 41 e 42 ............................................... 52
Figura 65 – Comparação de gêneros entre os usuários 51 e 52 ............................................... 53
Figura 66 – Comparação de gêneros entre os usuários 61, 62 e 63 ......................................... 53
Figura 67 – Comparação de programas entre os usuários 11 e 12 ........................................... 54
Figura 68 – Comparação de programas entre os usuários 21, 22 e 23 ..................................... 54
Figura 69 – Comparação de programas entre os usuários 31, 32 e 33 ..................................... 55
Figura 70 – Comparação de programas entre os usuários 41 e 42 ........................................... 55
Figura 71 – Comparação de programas entre os usuários 51 e 52 ........................................... 56
Figura 72 – Comparação de programas entre os usuários 61, 62 e 63 ..................................... 56
Figura 73 – Comparação entre programas e gêneros usuário 11 ............................................. 60
Figura 74 – Comparação entre programas e gêneros usuário 12 ............................................. 60
Figura 75 – Comparação entre programas e gêneros usuário 21 ............................................. 61
Figura 76 – Comparação entre programas e gêneros usuário 22 ............................................. 61
Figura 77 – Comparação entre programas e gêneros usuário 23 ............................................. 62
Figura 78 – Comparação entre programas e gêneros usuário 31 ............................................. 62
Figura 79 – Comparação entre programas e gêneros usuário 32 ............................................. 63
Figura 80 – Comparação entre programas e gêneros usuário 33 ............................................. 63
Figura 81 – Comparação entre programas e gêneros usuário 41 ............................................. 64
Figura 82 – Comparação entre programas e gêneros usuário 42 ............................................. 64
Figura 83 – Comparação entre programas e gêneros usuário 51 ............................................. 65
Figura 84 – Comparação entre programas e gêneros usuário 52 ............................................. 65
Figura 85 – Comparação entre programas e gêneros usuário 61 ............................................. 66
Figura 86 – Comparação entre programas e gêneros usuário 62 ............................................. 66
Figura 87 – Comparação entre programas e gêneros usuário 63 ............................................. 67
Figura 88 – Média 1 ................................................................................................................. 69
Figura 89 – Média 2 ................................................................................................................. 69
v
7. LISTA DE TABELAS
Tabela 1 – Características dos domicílios .................................................................................. 7
Tabela 2 – Características socioeconômicas dos domicílios ...................................................... 7
Tabela 3 – Identificando os campos nos arquivos TXT ........................................................... 10
Tabela 4 – Layout dos arquivos TXT....................................................................................... 10
Tabela 5 – Relação quantidade de programas/categoria .......................................................... 11
Tabela 6 – % de Acerto de programas dos usuários 11, 12, 21, 22 e 23 .................................. 32
Tabela 7 – % de Acerto de programas dos usuários 31, 32, 33, 41 e 42 .................................. 32
Tabela 8 – % de Acerto de de programas dos usuários 51, 52, 61, 62 e 63 ............................. 33
Tabela 9 – % de Acerto dos gêneros dos usuários 11, 12, 21, 22, 23 ...................................... 41
Tabela 10 – % de Acerto dos gêneros dos usuários 31, 32, 33, 41 e 42 .................................. 41
Tabela 11 – % de Acerto dos gêneros dos usuários 51, 52, 61, 62 e 63 .................................. 42
Tabela 12 – Comparação entre gêneros e programas dos usuários 11, 12 e 21. ...................... 57
Tabela 13 – Comparação entre gêneros e programas dos usuários 22, 23 e 31. ...................... 57
Tabela 14 – Comparação entre gêneros e programas dos usuários 32, 33 e 41. ...................... 58
Tabela 15 – Comparação entre gêneros e programas dos usuários 41, 42 e 51. ...................... 58
Tabela 16 – Comparação entre gêneros e programas dos usuários 52 e 61. ............................ 59
Tabela 17 – Comparação entre gêneros e programas dos usuários 62 e 63. ............................ 59
Tabela 18 – Média 1 programas e gêneros ............................................................................... 68
Tabela 19 – Média 2 programas e gêneros ............................................................................... 68
vi
8. LISTAGENS
Listagem 1 – Consulta SQL para descobrir qual emissora o usuário está assistindo............... 15
Listagem 2 – Consulta SQL para mesclar as informações do EPG com as do usuário ........... 15
Listagem 3 – Cálculo do horário de início e de fim da sintonia............................................... 16
Listagem 4 – Cálculo do tempo de visualização ...................................................................... 16
Listagem 5 – Cálculo da conversão do tempo do formato hora para inteiro ........................... 17
Listagem 6 – Cálculo do dia da semana ................................................................................... 17
Listagem 7 – Cálculo do período do dia .................................................................................. 19
Listagem 8 – Separando os usuários de cada domicílio ........................................................... 21
Listagem 9 – Inserindo os dados nas tabelas ratings e myprofile ............................................ 25
Listagem 10 – Melhores programas e gêneros ......................................................................... 25
Listagem 11 – Programas e gêneros mais visualizados ........................................................... 25
Listagem 12 – Cálculo da distância.......................................................................................... 26
Listagem 13 – Cálculo da norma.............................................................................................. 26
Listagem 14 – Knn usuários ..................................................................................................... 26
Listagem 15 – Cálculo da similaridade entre usuários ............................................................. 28
Listagem 16 – Inserção dos usuários parecidos nas tabelas correspondentes .......................... 28
Listagem 17 – Inserção das recomendações geradas na tabela resultProgramas ..................... 29
Listagem 18 – Comparação entre o que foi assistido e recomendado ..................................... 30
vii
9. LISTA DE EQUAÇÕES
Equação 1 – Cálculo dos Knn usuários .................................................................................... 27
Equação 2 – Cálculo da porcentagem de acerto de acordo com o número de recomendações
geradas ................................................................................................................ 31
Equação 3 – Cálculo da média da porcentagem de acerto de acordo com o número de
recomendações .................................................................................................... 31
Equação 4 – Cálculo da média da porcentagem de acerto de acordo com o número de dias
monitorados......................................................................................................... 31
viii
10. SUMÁRIO
CAPÍTULO 1 - INTRODUÇÃO ............................................................................................. 1
CAPÍTULO 2 - SISTEMAS DE RECOMENDAÇÃO ......................................................... 2
2.1 Filtragem de Informação .......................................................................................... 2
2.1.1 Filtragem Baseada em Conteúdo ............................................................... 3
2.1.2 Filtragem Colaborativa .............................................................................. 4
2.1.3 Filtragem Híbrida ...................................................................................... 4
CAPÍTULO 3 - ESTUDO DE CASO ..................................................................................... 6
3.1 Conhecendo e Preparando os Dados ........................................................................ 7
3.1.1 EPG ............................................................................................................ 8
3.1.2 Histórico dos usuários ............................................................................. 13
3.2 Metodologia ............................................................................................................ 22
3.3 Simulação ............................................................................................................... 24
CAPÍTULO 4 - RESULTADOS ........................................................................................... 31
4.1 Porcentagem de Acerto: programas por usuários ................................................... 32
4.2 Porcentagem de Acerto: gêneros por usuário ......................................................... 41
4.3 Porcentagem de Acerto: comparação de gêneros e programas entre usuários do
mesmo domicílio .......................................................................................................... 50
4.4 Porcentagem de Acerto: comparação entre programas e gêneros por usuário ....... 57
4.5 Porcentagem de Acerto: médias dos programas e gêneros .................................... 68
CAPÍTULO 5 - CONCLUSÕES ........................................................................................... 70
REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 71
ix
11. 1 INTRODUÇÃO
Sistemas de recomendação fornecem recomendações com base em informações sobre
as preferências dos usuários. A Filtragem de Informação é utilizada pelos sistemas de
recomendação para o processamento e sugestão das informações aos usuários. A Filtragem
Colaborativa é uma abordagem de Filtragem de Informação muito utilizada em sistemas de
recomendação e tenta prever a utilidade de itens para um determinado usuário com base nos
itens previamente avaliados por outros usuários, sugerindo itens relevantes e descartando os
irrelevantes. Muito utilizados na Internet, os sistemas de recomendação têm sido empregados
no contexto de TVD (TV Digital), como por exemplo, (Ávila, 2010), (Lucas, 2009), (Uribe,
2009), (Solla et al, 2008), (Bar et al, 2008), (Einarsson, 2007), (Chorianopoulus, 2007), (Choi,
Koh and Lee, 2007), (Yu et al, 2006), (Silva, 2005), (Bozios et al, 2001), (Gutta et al, 2000),
(Das and Horst, 1998), entre outros. Da mesma forma que ocorre na Internet, os sistemas de
recomendação poderão ser utilizados na TVD para a recomendação de programas de TV,
publicidade e propaganda e também para comércio eletrônico. Em sistemas de recomendação
item é tudo aquilo que pode ser visualizado ou avaliado pelo usuário. Em uma loja virtual, por
exemplo, os itens são os produtos que são vendidos, em uma biblioteca, livros, em uma
locadora de DVDs, os filmes, e assim por diante. Assim, os itens no contexto de TVD podem
ser os programas, a propaganda e os produtos a serem vendidos.
Este Relatório Técnico apresenta os estudos realizados com a Filtragem Colaborativa
aplicada aos dados de TV Digital fornecidos pelo IBOPE1 e está estruturado da seguinte
forma: o Capítulo 1 introduz o trabalho, o Capítulo 2 contém uma breve revisão bibliográfica
sobre sistemas de recomendação, o Capítulo 3 apresenta o estudo de caso, o Capítulo 4, os
resultados obtidos e o Capítulo 5, as conclusões. Os estudos visaram observar e avaliar como
a Filtragem Colaborativa pode ser utilizada em sistemas de recomendação no contexto da TV
Digital.
1
Multinacional brasileira de capital privado, o IBOPE é uma das maiores empresas de pesquisa de mercado da
América Latina. Há 67 anos fornece um amplo conjunto de informações e estudos sobre mídia, opinião pública,
intenção de voto, consumo, marca, comportamento e mercado. (www.ibope.com.br)
12. CAPÍTULO 1 -
2 CAPÍTULO 2 - SISTEMAS DE RECOMENDAÇÃO
Os sistemas de recomendação envolvem várias tecnologias como: a ciência cognitiva, a
teoria da aproximação, a recuperação de informação, a filtragem de informação, teorias de
previsão, entre outras, e podem ser aplicados a diversos domínios. Essas técnicas
fundamentam o funcionamento dos sistemas de recomendação e as mais aplicadas são as de
Filtragem de Informação, as quais são basicamente divididas em Filtragem Colaborativa e
Filtragem Baseada em Conteúdo. Um sistema de recomendação pode utilizar uma única
técnica de Filtragem de Informação ou as duas em conjunto, tornando-se, assim, um sistema
híbrido. Essas técnicas também possuem algoritmos desenvolvidos particularmente para o seu
tipo (TORRES, 2004; REATEGUI, 2005). As subseções a seguir contêm mais detalhes sobre
os dois principais tipos de Filtragem de Informação.
2.1 Filtragem de Informação
Uma das primeiras formas de Filtragem de Informação é proveniente do trabalho
Disseminação Seletiva da Informação (SDI), concebido como uma forma automática para que
cientistas se mantivessem informados sobre novos documentos publicados em suas áreas de
especialização. O cientista podia criar e modificar um perfil de usuário de palavras-chave que
descrevessem os seus interesses. A SDI foi implementado em larga escala, entretanto,
utilizou-se muito menos que o previsto. (FOLTZ, 1992)
Filtragem da Informação é o nome usado para descrever uma variedade de processos
que envolvem a prestação de informações a pessoas que delas necessitam. Sistemas de
Filtragem de Informação são projetados para a filtragem de dados não estruturados ou semi-
estruturados, em oposição às aplicações de banco de dados, que utilizam dados bem
estruturados. Os sistemas tratam, principalmente, informações textuais, mas também podem
2
13. tratar imagens, voz, vídeo ou outros tipos de dados que fazem parte dos sistemas de
informação multimídia.
A Filtragem também pode ser baseada em descrições de preferências individuais ou de
grupo, chamadas de perfis, os quais geralmente representam interesses de longo prazo. Além
disso, também tem sido usada para descrever o processo de acesso e recuperação de
informações de bancos de dados remotos, caso em que os dados de entrada são os resultado
das pesquisas nos bancos de dados (BELKIN, 1992).
2.1.1 Filtragem Baseada em Conteúdo
O objetivo da Filtragem Baseada em Conteúdo é gerar descrições dos conteúdos dos
itens automaticamente e compará-las com a descrição do interesse do usuário, verificando,
dessa forma, se o item é ou não relevante para o mesmo baseando-se na análise do conteúdo
do item e no perfil do usuário (MARCHI, 2008; TORRES, 2004).
Podem ser aplicadas técnicas, entre elas, índices de busca booleana, filtragem
probabilística e modelos vetoriais. Nos índices de busca booleana, a consulta é formada por
um conjunto de palavras-chave unidas por operadores booleanos, ao passo que, na filtragem
probabilística, aplica-se o raciocínio probabilístico para determinar a probabilidade que um
documento apresenta para atender as necessidades de informações de um usuário. (FOLTZ,
1992; MARCHI, 2008; REATEGUI, 2005; TORRES, 2004)
O modelo vetorial é o mais aplicado e a técnica TF-IDF (Term Frequency - Inverse-
Document Frequency) é baseada nesse modelo. Essa técnica considera o peso que uma
palavra possui dentro da coleção de documentos e indica que a frequência das palavras
comuns em dois textos evidencia a semelhança entre eles. Por último, o tamanho de um
documento também é analisado, pois um texto longo tem maior possibilidade de semelhança
que um texto curto, visto que esse possui menos palavras que o outro (MARCHI, 2008;
TORRES, 2004).
3
14. 2.1.2 Filtragem Colaborativa
A Filtragem Colaborativa remete a situações em que certas pessoas pedem a outras
opiniões ou recomendações sobre determinado assunto, como por exemplo, que filme assistir,
que livro ler, etc. Essa técnica é assim chamada, pois existe um processo de seleção no
momento de geração das recomendações e, para isso, as pessoas colaboram entre si,
utilizando algumas estratégias de recomendação como, por exemplo, a avaliação de um
produto.
Tecnicamente, a Filtragem Colaborativa ocorre em três passos: no armazenamento das
opiniões das pessoas, no agrupamento de pessoas com perfis semelhantes (vizinhos) e, por
fim, na recomendação propriamente dita de algo que foi altamente avaliado pelos vizinhos.
Essa técnica é muito utilizada em lojas virtuais como Submarino, Americanas, Amazon, entre
outras. (TORRES, 2004)
O Coeficiente de Pearson e o Cosseno são duas formas matemáticas muito utilizadas
para medir a similaridade em Filtragem Colaborativa. O Coeficiente de Correlação de Pearson
mede a força da relação entre duas variáveis e o valor zero indica que não existe nenhuma
relação entre as mesmas. Isso ocorre quando duas variáveis são absolutamente independentes
entre si. O valor máximo de + 1,00 ocorre quando a associação for positiva e a mais forte
possível. O valor máximo de -1,00 ocorre quando a associação for negativa e a menos forte
possível. Já o Cosseno é uma métrica para medir o cosseno do ângulo entre dois vetores num
espaço vetorial, sendo que esses representam os usuários, e retorna valores entre 0 e 1. Quanto
mais próximo de 1 for o valor, mais similares são os dois vetores (SILVA, 2008; MAIA,
2008).
2.1.3 Filtragem Híbrida
A Filtragem Híbrida mistura a Filtragem Baseada em Conteúdo e a Filtragem
Colaborativa em um único sistema, melhorando as recomendações oferecidas aos usuários e,
dessa forma, procura resolver alguns dos problemas introduzidos por ambas as técnicas.
4
15. Assim, os métodos de recomendação nessa categoria podem se combinar de diversas
formas: a) Filtragem Colaborativa processada sequencialmente após a Filtragem Baseada em
Conteúdo; b) Filtragem Baseada em Conteúdo processada sequencialmente após a Filtragem
Colaborativa e; c) Filtragem Baseada em Conteúdo processada paralelamente com a Filtragem
Colaborativa (ADOMAVICIUS, 2005; EINARSSON, 2007).
5
16. 3 CAPÍTULO 3 - ESTUDO DE CASO
Este estudo de caso teve como objetivo avaliar o processo e as implicações que a
Filtragem Colaborativa gera ao ser utilizada no contexto da TVD Portátil. A necessidade de se
gerar recomendações melhores que as baseadas apenas em Filtragem de Conteúdo também
motivou o desenvolvimento deste estudo de caso. As seções deste capítulo descrevem com
detalhes como o estudo de caso foi realizado.
Considera-se, para os testes, o contexto apresentado na Figura 1. O usuário interage com
a TVD disponível em seu aparelho celular. A rede broadcast transmite áudio, vídeo e dados
(como o EPG – Guia Eletrônico de Programação) para o celular. O celular captura e armazena
tudo o que o usuário visualiza. Quando o usuário solicita a recomendação, o celular envia os
dados do EPG e do seu histórico para o servidor de recomendações. O servidor faz todo o
processamento de geração das recomendações utilizando a Filtragem Colaborativa e envia a
lista de recomendações para o usuário. O usuário, então, visualiza a lista no display do
dispositivo e pode selecionar alguma delas ou não.
Figura 1 – Contexto do Estudo de Caso
6
17. 3.1 Conhecendo e Preparando os Dados
Os dados fornecidos pelo IBOPE continham as informações do EPG, histórico de
visualização do usuário (o que o telespectador assistiu) e também as informações
socioeconômicas dos indivíduos de cada domicilio. Todos esses dados do IBOPE foram
separados e armazenados no banco de dados MySQL. Os dados compreendem 15 dias de
programação e monitoramento de 6 domicílios brasileiros com a programação da TV Aberta.
Esses domicílios foram monitorados minuto a minuto, assim como cada indivíduo foi
monitorado separadamente. A Tabela 1 ilustra a quantidade de indivíduos e de TVs por
domicílio e a Tabela 2 apresenta as informações socioeconômicas dos domicílios.
Tabela 1 – Características dos domicílios
Qtde domicílios Qtde TVs Qtde indivíduos
1 1 2
2 1 3
3 2 3
4 2 2
5 1 2
6 2 3
Total 15
Tabela 2 – Características socioeconômicas dos domicílios
Domicílio 1 2 3 4 5 6
Classe Social DE C C AB C AB
Idade da
dona-de- 44 45 39 32 60 36
casa
Grau de
instrução do Primário Ginasial Ginasial Colegial Colegial Colegial
chefe-de- incompleto incompleto incompleto completo incompleto completo
casa
Sexo do
Feminino Feminino Feminino Feminino Feminino Feminino
indivíduo 1
Idade do
44 45 39 32 60 36
indivíduo 1
7
18. Domicílio 1 2 3 4 5 6
Sexo do
Feminino Masculino Masculino Masculino Masculino Masculino
Indivíduo 2
Idade do
8 48 40 30 77 38
indivíduo 2
Sexo do
Feminino Feminino Masculino
indivíduo 3
Idade do
indivíduo 3
Em seguida, foram criadas as tabelas no banco de dados para armazenar essas
informações, como ilustram as Figuras 2, 3 e 5. A Figura 4 indica a captura de tela da tabela
users, que contém informações básicas dos usuários.
Figura 2 –
Características dos
domicílios
Figura 3 –
Características
socioeconômicas
Figura 4 – Conteúdo da tabela
usuários
Figura 5 – Tabela
usuários
3.1.1 EPG
O EPG é composto por 15 arquivos TXT, denominados arquivos de programação,
sendo um para cada dia (de 05/03/2008 à 19/03/2008), com a grade de 10 emissoras de TV
8
19. Aberta, com início às 00:00:00 e término às 05:59:00. A Figura 6 ilustra uma amostra do
layout inicial desses arquivos e a Tabela 3 apresenta como esse layout foi organizado.
Figura 6 – Amostra dos arquivos TXT
Tomando-se como exemplo a primeira linha da Figura 2, identificam-se os campos,
conforme indicados na Tabela 3. Após o entendimento dos arquivos que compõem o EPG, os
dados foram copiados dos arquivos de programação para uma planilha do BrOffice com o
auxílio do recurso colar especial. Esse recurso permitiu que os dados fossem exportados
exatamente como foram construídos no layout, separando os campos em colunas. No
momento da exportação, os dados numéricos perderam seu formato e foram, então,
9
20. reformatados de acordo com a Tabela 4. Após a exportação, foi feita a limpeza dos dados
desnecessários.
Tabela 3 – Identificando os campos nos arquivos TXT
Coluna Conteúdo Identificação
005 Código da emissora
1.ª 005100PNREXXXXX
100PNREXXXXX Descartado
002645 Código do programa
2.ª 002645RELIGIOSO MAT
RELIGIOSO MAT Nome do programa
3.ª 000000 Descartado
4.ª 0000 Descartado
060000 Início do programa
Fim do
5.ª 060000080000DIA_05 080000
programa
Dia do
DIA_05
programa
6.ª 111111100000000000000003XX Descartado
Tabela 4 – Layout dos arquivos TXT
Descrição Tipo Posição Inicial
Código da emissora Numérico (03) 1
Código do programa Numérico (06) 24
Nome do programa Caractere (30) 30
Início do programa Numérico (06) 160
Fim do programa Numérico (06) 166
Em seguida, perceberam-se algumas inconsistências de horários, que foram
imediatamente corrigidas para que a análise futura não gerasse resultados errôneos. O
processo acima descrito se repetiu para cada um dos 15 arquivos de programação e os dados
foram agrupados em uma única planilha que continha o EPG dos 15 dias.
O comportamento do usuário é composto por várias planilhas, denominadas planilhas
de sintonia, que possuem muito mais informações que o EPG. As planilhas de sintonia e o
EPG contêm códigos que identificam as emissoras da TV Aberta. Foi necessário padronizar
esses códigos, pois o número de identificação foi registrado diferentemente nesses arquivos.
Para evitar a inconsistência de dados, foi adicionada uma coluna ao EPG com o nome da
Emissora e, em seguida, os códigos das emissoras de TV Aberta foram padronizados, pois
havia conflitos de códigos entre as emissoras Bandeirantes, Record, Rede TV! e TV Cultura.
Também foram adicionados no EPG o dia da semana e a duração do programa. O
EPG, nessa etapa, ainda não estava completo, pois faltavam o gênero e o subgênero de cada
10
21. programa. Para isso, procurou-se, nos sites oficiais de cada emissora, o gênero dos Programas
transmitidos e, em seguida, foram identificados de acordo com a norma brasileira ABNT
NBR 15603-2:2007 e constam do Anexo C - “Descritor de gênero no descritor de conteúdo”.
Para facilitar essa identificação, foi utilizado o recurso de filtro para classificar o EPG
de acordo com o nome do programa. Caso esse se repetisse dos 15 dias do intervalo
considerado, não era necessário procurar novamente no site da emissora. Ressalta-se que a
planilha do EPG totalizou cerca de 4.500 linhas com identificação de aproximadamente 800
programas diferentes. A Tabela 5 ilustra a relação quantidade de programas/categorias
encontrada no EPG. No MySQL também foram criadas tabelas para guardar as informações
do EPG. As Figuras de 7 a 13 apresentam essas tabelas.
Tabela 5 – Relação quantidade de programas/categoria
Gênero Quantidade
Minissérie 0
Erótico 1
Novela 15
Reality Show 15
Filme 24
Humorístico 25
Informação 32
Educativo 33
Esporte 40
Sorteio, televendas, premiação 42
Debate/Entrevista 52
Série/Seriado 56
Outros 62
Infantil 63
Jornalismo 146
Variedade 203
TOTAL 812
11
22. Figura 7 – Tabela que
contém os descritores de
gênero
Figura 8 – Tabela que contém os
descritores de subgênero
Figura 9 – Tabela que contém os
descritores de gênero com seus
respectivos subgêneros
Figura 11 – Tabela que contém os
Figura 10 – Tabela que
códigos das emissoras
contém os códigos originais
das emissoras Figura 12 – Tabela que contém os
programas
Figura 13 – Tabela que contém as informações da programação de TV
12
23. 3.1.2 Histórico dos usuários
As planilhas de sintonia que contêm os dados dos usuários, foram modificadas de
forma que técnicas de Filtragem Colaborativa pudessem ser aplicadas. Cada domicílio possui
uma quantidade de usuários, que foram monitorados separadamente. Esses dados vieram
todos juntos nas planilhas de sintonia e foi necessário separá-los. A Figura 14 apresenta uma
captura de tela de como as planilhas de sintonia estão organizadas. DOMIC_0x indica o
número do domicílio (X é o número do domicílio). DIA_0x indica o dia do monitoramento.
Inds indica o número do indivíduo (usuário). Tvs indica o número da TV. 06:00 em diante
indica o horário do monitoramento. Assim, a planilha é preenchida com o número do canal
que aquele indivíduo está assistindo naquela TV, naquele horário, naquele dia e naquele
domicílio.
Figura 14 – Amostra das planilhas de sintonia
Os dados foram, então, separados por domicílios e, em seguida, por usuários de cada
domicílio. Apesar de alguns domicílios possuírem mais de uma TV, percebeu-se que não há
registros de monitoramento em mais de uma TV ao mesmo tempo e, portanto, considera-se
que o domicílio tem apenas uma TV. A Figura 15 apresenta como os dados foram
organizados no momento da separação. A coluna Domicílio indica o domicílio ao qual aquele
indivíduo pertence. A coluna Dia indica o dia da visualização do programa. A coluna Horário
13
24. indica a hora de visualização. A coluna Indivíduo indica qual é o usuário que está vendo
aquele programa. A coluna TV indica o canal que o usuário está assistindo. Observa-se que os
dados também foram formatados: data no formato AAAA-mm-dd, hora no formato
HH:mm:ss e TV no formato 00X. As planilhas resultantes foram convertidas em arquivos
CSV, que em seguida foram inseridos no MySQL. Para tanto, criou-se uma tabela para cada
domicílio, chamada dx_cru (Cru por conter os dados originais), que armazena essas
informações, conforme ilustra a Figura 16.
Figura 16 – Tabela para
armazenamento
Figura 17 – Tabela que resulta da
Listagem 1
Figura 15 – Planilhas após organização
A partir do campo codigoEmissora, foi possível buscar na tabela codigos_emissoras
qual emissora o usuário estava assistindo. A consulta SQL da Listagem 1 fez essa mescla e,
então, inseriu o resultado em outra tabela, chamada dx_v2, na qual x indica o número do
domicílio. A consulta seleciona os campos da tabela dx_cru quando o código da emissora
nessa tabela for igual ao da tabela codigos_emissoras, ordenando pelo código da emissora da
tabela dx_cru. A Figura 14 apresenta os campos da tabela criada no MySQl.
14
25. INSERT INTO d1_v2
SELECT d.id_d1, d.domicílio, d.dia, d.Horário, d.id_users, d.codigoEmissora, d.nomeEmissora
FROM d1_cru d, codigos_emissoras c
WHERE d.codigoEmissora = c.codigo_p
ORDER BY d.codigoEmissora;
Listagem 1 – Consulta SQL para descobrir qual emissora o usuário está assistindo
No passo seguinte, fez-se a mescla com o EPG, obtendo todas as informações
referentes ao programa visualizado. A Listagem 2 apresenta a consulta SQL utilizada para
fazer a mescla. O resultado da consulta também foi armazenado em outra tabela, chamada
dx_v3. A Figura 15 apresenta os campos dessa tabela. A consulta seleciona alguns campos da
tabela dx_cru e da tabela EPG quando o dia e o código da emissora são iguais em ambas e
quando o horário da tabela dx_cru é maior ou igual à hora do início do programa e menor ou
igual à hora do fim do programa. Sem informar essas condições, o resultado gerado estará
incorreto. Novamente, isso é repetido para todos os domicílios.
INSERT INTO d1_v3
SELECT d.domicilio, d.id_d1, d.id_users, e.id_epg, d.dia as ddia, e.dia as edia, d.Horario,
e.horaInicio, e.horaFim, e.inicioPrograma, e.fimPrograma, e.duracaoPrograma,
e.codigoPrograma, e.nomePrograma, d.codigoEmissora as dce, e.codigoEmissora as ece,
e.nomeEmissora, e.genero, e.descritorGenero, e.subgenero, e.descritorSubgenero,
e.generoSubgenero, e.descritorGeneroSubgenero
FROM d1_cru d, matrixepg e
WHERE ((d.dia=e.dia) and (d.codigoEmissora = e.codigoEmissora)
and (d.Horário > = e.horaInicio) and (d.Horário <= e.horaFim))
ORDER BY d.id_users,d.dia,d.Horário;
Listagem 2 – Consulta SQL para mesclar as informações do EPG com as do usuário
O passo seguinte consistiu em encontrar os horários de início e de fim da sintonização
do usuário naqueles canais. Para tanto, usou-se uma consulta SQL, como ilustra a Listagem 3,
que usa os comandos MIN() e MAX() que retorna o valor mínimo ou máximo, e o campo
horário da tabela dx_v3 como base. A Figura 16 apresenta a tabela criada para armazenar o
resultado dessa consulta.
15
26. INSERT INTO d1_v4
SELECT d.domicilio, d.id_d1, d.id_users, d.id_epg, d.dia, d.Horario, min(d.Horario) AS
inicioSintonia, max(d.Horario) AS fimSintonia, d.horaInicio, d.horaFim, d.inicioPrograma,
d.fimPrograma, d.duracaoPrograma, d.codigoPrograma, d.nomePrograma, d.dce as
codigoEmissora, d.nomeEmissora, d.genero, d.descritorGenero, d.subgenero,
d.descritorSubgenero, d.generoSubgenero, d.descritorGS
FROM d1_v3 d
GROUP BY d.id_users, d.nomePrograma, d.dia
HAVING (d.Horário=min(d.Horario))
ORDER BY d.id_users, d.dia, d.Horario;
Listagem 3 – Cálculo do horário de início e de fim da sintonia
Em seguida, calculou-se o tempo em que o usuário permaneceu sintonizado nos
canais. A Listagem 4 demonstra a consulta SQL utilizada. O comando SUBTIME(), que
retorna a subtração entre as datas, foi utilizado para fazer o cálculo de subtração entre os
campos início e fim de sintonia. A Figura 17 apresenta a tabela criada para armazenar o
resultado dessa consulta.
INSERT INTO d1_v5
SELECT d.domicilio, d.id_d1, d.id_users, d.id_epg, d.dia, d.Horario, d.inicioSintonia,
d.fimSintonia, subtime(d.fimSintonia, d.inicioSintonia) as duracaoSintonia, d.horaInicio,
d.horaFim, d.inicioPrograma, d.fimPrograma, d.duracaoPrograma, d.codigoPrograma,
d.nomePrograma, d.codigoEmissora, d. nomeEmissora,d.genero, d.descritorGenero, d.subgenero,
d.descritorSubgenero, d.generoSubgenero, d.descritorGS
FROM d1_v4 d;
Listagem 4 – Cálculo do tempo de visualização
Após calcular o tempo de visualização, foi necessário converter esse tempo em
número inteiro, para a posterior utilização nos cálculos da Filtragem Colaborativa. A
Listagem 5 apresenta a consulta SQL utilizada. Utilizaram-se os comandos HOUR(), que
retorna a hora do tempo sendo o valor de retorno entre 0 a 23 e MINUTE(), que retorna o
minuto da hora, na faixa de 0 a 59, para realizar o seguinte cálculo:
duracao em inteiro = (hora * 60 ) + minuto
duracao em inteiro = ( hora ( fim sintonia – inicio sintonia ) * 60 ) + ( minuto ( fim sintonia – inicio sintonia ) )
16
27. A Figura 18 apresenta a tabela criada no MySQL para armazenar o resultado.
INSERT INTO d1_v6
SELECT d.domicilio, d.id_dx, d.id_users, d.id_epg, d.dia, d.Horario, d.inicioSintonia,
d.fimSintonia, d.duracaoSintonia, ((hour (subtime (d.fimSintonia,d.inicioSintonia)) * 60) +
minute(subtime(d.fimSintonia,d.inicioSintonia))) as duracaoS2, d.horaInicio,d.horaFim,
d.inicioPrograma, d.fimPrograma, d.duracaoPrograma, d.codigoPrograma, d.nomePrograma,
d.codigoEmissora, d.nomeEmissora, d.genero, d.descritorGenero, d.subgenero,
d.descritorSubgenero, d.generoSubgenero, d.descritorGS
FROM d1_v5 d;
Listagem 5 – Cálculo da conversão do tempo do formato hora para inteiro
Ainda faltavam algumas informações que podem ser úteis no momento de geração das
recomendações, o dia da semana e o período do dia. A Listagem 6 ilustra a consulta SQL
utilizada para encontrar o dia da semana e a Listagem 7 a consulta para o período. As Figuras
19 e 20 apresentam as tabelas criadas no banco de dados para armazenar os resultados dessas
consultas.
INSERT INTO d1_v7
SELECT d.domicilio, d.id_dx, d.id_users, d.id_epg, d.dia, d.Horario, d.inicioSintonia,
d.fimSintonia, d.duracaoSintonia, duracaoS2, DAYNAME(dia) as diaSemana, d.horaInicio,
d.horaFim, d.inicioPrograma, d.fimPrograma, d.duracaoPrograma, d.codigoPrograma,
d.nomePrograma, d.codigoEmissora as codigoEmissora,d.nomeEmissora, d.genero,
d.descritorGenero, d.subgenero, d.descritorSubgenero, d.generoSubgenero, d.descritorGS
FROM d1_v6 d;
Listagem 6 – Cálculo do dia da semana
17
28. Figura 18 – Tabela que contém a Figura 19 – Tabela com os novos Figura 20 – Tabela com o
mescla do EPG com o histórico do campos início e fim da sintonia resultado de SUBTIME()
usuário
O dia da semana é descoberto passando-se o campo dia para o comando DAYNAME()
do MySQL, que retorna o nome do dia da semana para a data. Faixas de horário foram
definidas para identificar o período do dia. Quando a faixa varia entre 06:00:00 e 11:59:00,
usa-se a variável manha, criando o campo período. Quando a faixa varia entre 12:00:00 e
17:59:00, usa-se a variável tarde, entre 18:00:00 e 23:59:00 usa-se a variável noite e entre
00:00:00 e 05:59:00, madrugada. Os dados são inseridos em outra tabela. Assim, finaliza-se a
organização dos dados.
set @manha='manha';
set @tarde='tarde';
set @noite='noite';
set @madrugada='madrugada';
18
29. INSERT INTO d1_v8
SELECT d.domicílio, d.id_d1, d.id_users, d.id_epg, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoSintonia as duracaoS1, d.duracaoS2, d.diaSemana, @manha as periodo,
d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d1_v7 d
WHERE (inicioSintonia>='06:00:00' and fimSintonia<='11:59:00');
INSERT INTO d1_v8
SELECT d.domicílio, d.id_d1, d.id_users, d.id_epg, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoSintonia as duracaoS1, d.duracaoS2, d.diaSemana, @tarde as periodo,
d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM dx_v7 d
WHERE (inicioSintonia>='12:00:00' and fimSintonia<='17:59:00');
INSERT INTO d1_v8
SELECT d.domicílio, d.id_d1, d.id_users, d.id_epg, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoSintonia as duracaoS1, d.duracaoS2, d.diaSemana, @noite as periodo,
d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM dx_v7 d
WHERE (inicioSintonia>='18:00:00' and fimSintonia<='23:59:00');
INSERT INTO d1_v8
SELECT d.domicílio, d.id_d1, d.id_users, d.id_epg, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoSintonia as duracaoS1, d.duracaoS2, d.diaSemana, @madrugada as periodo,
d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM dx_v7 d
WHERE (inicioSintonia>='00:00:00' and fimSintonia<='06:59:00');
Listagem 7 – Cálculo do período do dia
O último passo foi o de separar os usuários de cada domicílio em tabelas específicas.
A consulta fez uma comparação entre o domicílio e o usuário e cria o campo userid, que
identifica o usuário X que pertence ao domicílio X.
INSERT INTO user_11 SELECT '11' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d1_v8 d WHERE (domicílio='1' and id_users='1');
19
30. INSERT INTO user_12 SELECT '12' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d1_v8 d WHERE (domicílio='1' and id_users='2');
INSERT INTO user_21 SELECT '21' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d2_v8 d WHERE (domicílio='2' and id_users='1');
INSERT INTO user_22 SELECT '22' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d2_v8 d WHERE (domicílio='2' and id_users='2');
INSERT INTO user_23 SELECT '23' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d2_v8 d WHERE (domicílio='2' and id_users='3');
INSERT INTO user_31 SELECT '31' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d3_v8 d WHERE (domicílio='3' and id_users='1');
INSERT INTO user_32 SELECT '32' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d3_v8 d WHERE (domicílio='3' and id_users='2');
INSERT INTO user_33 SELECT '33' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d3_v8 d WHERE (domicílio='3' and id_users='3');
INSERT INTO user_41 SELECT '41' as userid, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoS2, d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d4_v8 d WHERE (domicílio='4' and id_users='1');
INSERT INTO user_42 SELECT '42' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d4_v8 d WHERE (domicílio='4' and id_users='2');
INSERT INTO user_51 SELECT '51' as userid, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoS2, d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d5_v8 d WHERE (domicílio='5' and id_users='1');
20
31. INSERT INTO user_52 SELECT '52' as userid, d.dia, d.inicioSintonia, d.fimSintonia,
d.duracaoS2, d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d5_v8 d WHERE (domicílio='5' and id_users='2');
INSERT INTO user_53 SELECT '53' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d5_v8 d WHERE (domicílio='5' and id_users='3');
INSERT INTO user_61 SELECT '61' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d6_v8 d WHERE (domicílio='6' and id_users='1');
INSERT INTO user_62 SELECT '62' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d6_v8 d WHERE (domicílio='6' and id_users='2');
INSERT INTO user_63 SELECT '63' as userid, d.dia, d.inicioSintonia, d.fimSintonia, d.duracaoS2,
d.diaSemana, d.periodo, d.nomePrograma, d.nomeEmissora, d.descritorGS
FROM d6_v8 d WHERE (domicílio='6' and id_users='3');
Listagem 8 – Separando os usuários de cada domicílio
Figura 21 – Tabela que adiciona o
campo de duração do tipo inteiro
Figura 22 – Tabela que adiciona o
dia da semana
21
32. Figura 25 – Tabela do
histórico de visualização
de cada usuário
Figura 23 – Tabela que adiciona o Figura 24 – Tabela que contém a
período versão final dos dados
3.2 Metodologia
Para aplicar a Filtragem Colaborativa foi necessário criar mais tabelas no banco. A
tabela ratings armazena o que todos os usuários visualizaram no dia analisado, além do
que foi visto no passado. A tabela myprofile armazena o que um usuário específico
visualizou no dia analisado, assim como as visualizações passadas desse usuário em
particular. A tabela similaruser armazena os usuários parecidos com o usuário analisado
levando em conta os programas, juntamente com a pontuação. A tabela similaruser2 faz o
mesmo, entretanto, está relacionada aos gêneros e seus subgêneros. A tabela
resultProgramas tem como função armazenar os resultados das recomendações geradas,
tanto para programas quanto para gêneros. Esse resultado é utilizado para calcular a
porcentagem de acerto. As Figuras de 26 a 30 apresentam as tabelas cridas no MySQL.
22
33. Figura 26 – Tabela que armazena as avaliações de Figura 27 – Tabela que armazena as informações
todos os usuários do usuário em análise
Figura 28 – Tabela que Figura 29 – Tabela que
armazena os usuários que armazena os usuários que Figura 30 – Tabela que armazena
gostam de programas similares gostam de gêneros similares as recomendações
(gêneros/programas) obtidas
Os passos para a execução da Filtragem Colaborativa nesses dados são listados a
seguir:
1. Os dados são inseridos no banco, conforme o usuário e o dia a ser analisado;
2. Encontram-se os 10 melhores programas e gêneros para se recomendar, de
acordo com os outros usuários;
3. Encontram-se os 10 programas e gêneros mais visualizados, de acordo com os
outros usuários;
4. Calcula-se a distância dos programas e dos gêneros;
5. Calcula-se a norma dos usuários e do usuário em análise;
6. Encontram-se os knn usuários para os programas e para os gêneros;
7. Calcula-se o quanto cada usuário é parecido com o outro;
8. Os Knn usuários são salvos nas tabelas similaruser e similaruser2;
9. Encontram-se as sugestões para programas e gêneros;
10. As recomendações geradas são comparadas ao programa/gênero assistido pelo
23
34. usuário no dia seguinte e calcula-se, dessa forma, a porcentagem de acerto das
recomendações, tanto para os programas, quanto para os gêneros.
Esses passos se repetem de forma iterativa. Após seguir os passos para o primeiro
usuário e para o primeiro dia, aplica-se novamente ao primeiro usuário e ao segundo dia e
assim por diante. Vale ressaltar que sempre é levado em consideração o que foi visto no dia
da pesquisa e nos dias anteriores.
3.3 Simulação
Nesta seção descreve-se a aplicação dos passos citados na seção 3.2. Após a criação
de todas as tabelas necessárias, iniciou-se o processo de simulação. Como existem 15
usuários e a simulação foi feita para todos, apresenta-se aqui apenas a simulação para um
usuário.
Usuário 11 – Dia 1:
No primeiro passo, os dados correspondentes ao primeiro dia são inseridos nas tabelas
ratings e myprofile, conforme ilustra a Listagem 9.
insert into myprofile select * from user_11 where dia='2008-03-05';
insert into ratings select * from user_11 where dia='2008-03-05';
insert into ratings select * from user_12 where dia='2008-03-05'
insert into ratings select * from user_21 where dia='2008-03-05';
insert into ratings select * from user_22 where dia='2008-03-05';
insert into ratings select * from user_23 where dia='2008-03-05';
insert into ratings select * from user_31 where dia='2008-03-05';
insert into ratings select * from user_32 where dia='2008-03-05';
insert into ratings select * from user_33 where dia='2008-03-05';
insert into ratings select * from user_41 where dia='2008-03-05';
insert into ratings select * from user_42 where dia='2008-03-05';
insert into ratings select * from user_51 where dia='2008-03-05';
insert into ratings select * from user_52 where dia='2008-03-05';
24
35. insert into ratings select * from user_61 where dia='2008-03-05';
insert into ratings select * from user_62 where dia='2008-03-05';
insert into ratings select * from user_63 where dia='2008-03-05';
Listagem 9 – Inserindo os dados nas tabelas ratings e myprofile
No passo seguinte, os 10 melhores programas e gêneros da base foram recomendados,
de acordo com os outros usuários. Calculou-se a média e a quantidade de vezes que o
programa/gênero foi visualizado agrupando-se, na primeira consulta, pelo nome do
programa e, na segunda, pelo gênero. A Listagem 10 apresenta a consulta SQL.
SELECT round(avg(duracao),1) AS avgrating, count(userid) AS nbratings, r.descritorGS,
r.nomePrograma FROM ratings r GROUP BY r.nomePrograma ORDER BY avgrating
DESC LIMIT 10;
SELECT round(avg(duracao),1) AS avgrating, count(userid) AS nbratings, r.descritorGS,
r.nomePrograma FROM ratings r GROUP BY r.descritorGS ORDER BY avgrating
DESC LIMIT 10;
Listagem 10 – Melhores programas e gêneros
No terceiro passo, os programas e gêneros mais visualizados são encontrados,
conforme demonstra a Listagem 11. A consulta SQL é a mesma utilizada na Listagem 10,
entretanto, a ordem dos dados na Listagem 11 é dada pelo número de visualizações.
SELECT round(avg(duracao),1) AS avgrating, count(userid) AS nbratings, nomePrograma,
descritorGS FROM ratings GROUP BY nomePrograma ORDER BY nbratings DESC;
SELECT round(avg(duracao),1) AS avgrating, count(userid) AS nbratings, descritorGS,
nomePrograma FROM ratings GROUP BY descritorGS ORDER BY nbratings DESC;
Listagem 11 – Programas e gêneros mais visualizados
No passo 4, calcula-se a distância dos programas e dos gêneros. Soma-se a duração da
tabela myprofile com a duração da tabela ratings, quando os nomes de programas/gêneros
em ambas são iguais (Listagem 12).
SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m WHERE
m.nomePrograma = r.nomePrograma GROUP BY r.userid;
25
36. SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m WHERE
m.descritorGS = r.descritorGS GROUP BY r.userid;
Listagem 12 – Cálculo da distância
No passo 5, calcula-se a norma da tabela ratings e da tabela myprofile. Multiplica-se a
duração e, em seguida, faz-se a soma (Listagem 13).
SELECT userid, sum((duracao)*(duracao)) AS norm FROM ratings r GROUP BY userid;
SELECT sum((duracao)*(duracao)) AS norm FROM myprofile;
Listagem 13 – Cálculo da norma
Assim, os knn usuários para os programas e para os gêneros são calculados. A
Listagem 14 apresenta a consulta SQL utilizada. São necessárias três subconsultas para
calcular os knn usuários.
SELECT distances.userid AS userid, dist/(sqrt(my.norm)*sqrt(users.norm)) AS score FROM
(SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m
WHERE m.nomePrograma = r.nomePrograma GROUP BY r.userid) AS distances,
(SELECT userid, sum((duracao)*(duracao)) AS norm
FROM ratings r GROUP BY userid) AS users,
(SELECT sum((duracao)*(duracao)) AS norm FROM myprofile) AS my
WHERE users.userid = distances.userid ORDER BY score DESC;
Listagem 14 – Knn usuários
Para o melhor entendimento, as consultas são explicadas mais detalhadamente a
seguir:
1. Primeiro subselect:
a) sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m: Cálculo da norma das
tabelas myprofile e ratings. A consulta recebe o nome dist, para que o seu
resultado possa ser manipulado.
b) (SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m WHERE
m.nomePrograma = r.nomePrograma GROUP BY r.userid) AS distances: Cálculo da norma das
tabelas myprofile e ratings quando os nomes dos programas em ambas as
tabelas são iguais. Agrupa-se pelo número de usuários da tabela ratings. A
consulta recebe o nome distances, para que o seu resultado possa ser
manipulado.
26
37. 2. Segundo subselect:
a) sum((duracao)*(duracao)) AS norm FROM ratings r: Cálculo da norma da tabela ratings.
b) (SELECT userid, sum((duracao)*(duracao)) AS norm FROM ratings r GROUP BY userid) AS users:
Cálculo da norma da tabela ratings agrupada pelo número de usuário. A
consulta recebe o nome users, para que o seu resultado possa ser manipulado.
3. Terceiro subselect:
a. (SELECT sum((duracao)*(duracao)) AS norm FROM myprofile) AS my: O Cálculo da norma
da tabela myprofile recebe o nome my, para ser manipulada.
b. (SELECT sum((duracao)*(duracao)) AS norm FROM myprofile) AS my WHERE users.userid =
distances.userid ORDER BY score DESC: Cálculo da norma da tabela myprofile
quando o campo userid do alias users for igual ao campo userid do alias
distances colocando a pontuação em ordem decrescente.
4. Select principal: SELECT distances.userid AS userid, dist/(sqrt(my.norm) * sqrt(users.norm)) AS
score FROM: Selecionar os usuários da consulta distances. Cálculo da pontuação a partir das
consultas em seguida.
Resumindo, essa consulta faz o cálculo das normas, usando o campo duração como
parâmetro, conforme ilustra a Equação 1:
∑( )
(√(∑ ) √(∑ ))
Equação 1 – Cálculo dos Knn usuários
O passo 7 consiste em calcular o quanto cada usuário é parecido com outro, tanto em
gênero, quanto em programa. A consulta SQL determina myrating para o campo duração da
tabela myprofile (visualização do usuário em análise) e herrating (visualização do outro
usuário) para o campo duração da tabela ratings. A seleção é feita quando o usuário em
análise e os nomes dos programas/gêneros nas tabelas ratings, myprofile e EPG são iguais e
esses são agrupados e ordenados pelo nome do programa/gênero da tabela myprofile. Isso é
feito para todos os usuários, sendo que é apenas necessário trocar o userid.
27
38. SELECT m.nomePrograma, r.descritorGS, m.duracao AS myrating, r.duracao AS herrating
FROM ratings r, myprofile m, matrixepg e WHERE r.userid=11 AND
r.nomePrograma=m.nomePrograma AND r.nomePrograma=e.nomePrograma GROUP BY
m.nomePrograma ORDER BY m.nomePrograma;
SELECT m.descritorGS, m.nomePrograma, m.duracao AS myrating, r.duracao AS herrating
FROM ratings r, myprofile m, matrixepg e WHERE r.userid=11 AND
r.descritorGS=m.descritorGS AND r.descritorGS=e.descritorGeneroSubgenero GROUP BY
m.descritorGS ORDER BY m.descritorGS;
Listagem 15 – Cálculo da similaridade entre usuários
Os Knn usuários são salvos nas tabelas similaruser e similaruser2.
insert into similaruser
SELECT distances.userid AS userid, dist/(sqrt(my.norm)*sqrt(users.norm)) AS score FROM
(SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m
WHERE m.nomePrograma = r.nomePrograma GROUP BY r.userid) AS distances,
(SELECT r.userid, sum((duracao)*(duracao)) AS norm FROM ratings r
GROUP BY userid) AS users,
(SELECT sum((duracao)*(duracao)) AS norm FROM myprofile) AS my
WHERE users.userid = distances.userid ORDER BY score DESC LIMIT 30;
insert into similaruser2
SELECT distances.userid AS userid, dist/(sqrt(my.norm)*sqrt(users.norm)) AS score FROM
(SELECT r.userid, sum((m.duracao)*(r.duracao)) AS dist FROM ratings r, myprofile m
WHERE m.descritorGS = r.descritorGS GROUP BY r.userid) AS distances,
(SELECT r.userid, sum((duracao)*(duracao)) AS norm FROM ratings r
GROUP BY userid) AS users,
(SELECT sum((duracao)*(duracao)) AS norm FROM myprofile) AS my
WHERE users.userid = distances.userid ORDER BY score DESC LIMIT 30;
Listagem 16 – Inserção dos usuários parecidos nas tabelas correspondentes
No penúltimo passo, encontram-se as sugestões para programas e gêneros, as quais são
inseridas na tabela resultProgramas.
insert into resultProgramas
SELECT m.nomePrograma, m.descritorGeneroSubgenero, score, nbratings FROM epg m,
(SELECT nomePrograma, sum(r.duracao*similaruser.score) AS score,
28
39. count(similaruser.userid) AS nbratings FROM similaruser, ratings r
WHERE similaruser.userid = r.userid GROUP BY nomePrograma ORDER BY score
DESC LIMIT 10) AS scores WHERE m.nomePrograma = scores.nomePrograma
GROUP BY nomePrograma ORDER BY score DESC;
insert into resultProgramas
SELECT r.nomePrograma, r.descritorGS, sum(r.duracao*s.score) AS score, count(s.userid) AS
nbratings FROM similaruser2 s, ratings r WHERE s.userid = r.userid GROUP BY r.descritorGS
ORDER BY score DESC LIMIT 10;
Listagem 17 – Inserção das recomendações geradas na tabela resultProgramas
Quebrando a primeira consulta SQL:
1. Subselect
a) sum(r.duracao*similaruser.score) AS score: Cálculo da pontuação. Somatório da
multiplicação do campo duração da tabela ratings pelo campo score da tabela
similaruser. Recebe o nome score, pontuação.
b) count(similaruser.userid) AS nbratings: O contador dos usuários da tabela similaruser
recebe o nome nbratings, número de visualizações.
c) (SELECT nomePrograma, sum(r.duracao*similaruser.score) AS score, count(similaruser.userid) AS
nbratings FROM similaruser, ratings r WHERE similaruser.userid = r.userid GROUP BY nomePrograma
ORDER BY score DESC LIMIT 10) AS scores: Selecionar os nomes dos programas, a
pontuação e o número de visualizações quando os usuários (userid) são iguais,
agrupar pelo nome do programa, classificar a pontuação em ordem crescente,
limitar o retorno a 10 registros. Recebe o nome de scores.
2. Select principal: Selecionar o nome dos programas, os descritores de gêneros, a
pontuação, o número de avaliações quando os nomes dos programas são iguais nas tabelas
EPG e scores, agrupar pelo nome do programa e classificar a pontuação em ordem
decrescente.
Segunda consulta SQL: Selecionar os nomes dos programas, os descritores de gêneros, a
pontuação, o número de visualizações quando os usuários são iguais em ambas as tabelas.
Agrupar pelo descritor de gênero e classificar a pontuação em ordem decrescente, limitado a
10 registros.
29
40. As recomendações geradas são comparadas com o que o usuário assistiu no dia seguinte e
então é calculada a porcentagem de acerto das recomendações, tanto para os programas,
quanto para os gêneros. As consultas SQLs, ilustradas na Listagem 18, verificam se no dia
posterior, o nome do programa da tabela resultPrograms consta na tabela do usuário.
SELECT r.*, u.* FROM resultProgramas r, user_11 u
WHERE u.dia='2008-03-06' AND r.nomePrograma = u.nomePrograma
GROUP BY r.nomePrograma ORDER BY score DESC;
SELECT r.*, u.* FROM resultProgramas r, user_11 u
WHERE u.dia='2008-03-06‘ AND u.descritorGS = r.descritorGeneroSubgenero
GROUP BY r.descritorGeneroSubgenero ORDER BY score DESC;
Listagem 18 – Comparação entre o que foi assistido e recomendado
Ao fim desse ciclo, inicia-se o próximo dia de avaliação. Por exemplo, avaliando o
usuário 11 no dia 06: a tabela myprofile contém os dados do usuário 11 correspondentes ao
dia 05 e a tabela ratings os dados de todos os usuários correspondentes ao dia 05. No dia -6,
os dados correspondentes ao dia 06 são inseridos nas tabelas, juntando-se aos dados do dia 05,
na tabela myprofile os dados do usuário 11 e na tabela ratings os dados de todos os usuários,
ambos correspondentes ao dia 06. Assim, simulam-se recomendações diárias e para cada
usuário.
30
41. 4 RESULTADOS
Neste capítulo, os resultados obtidos com a aplicação da técnica de Filtragem
Colaborativa nos dados de visualização de TV fornecidos pelo IBOPE são apresentados em
detalhes. A porcentagem de acerto de cada usuário é apresentada em forma de gráficos e o
modo como esses foram gerados também é explicitado.
Dois atributos alvos foram utilizados: os nomes dos programas e os descritores de
gêneros. Para todos os gráficos, foram feitas planilhas no Excel que contalibizaram quantos
programas/gêneros a consulta SQL de comparação acertou. Como o número de
recomendações geradas foi 10, então, a fórmula base para o cálculo da porcentagem de acerto
utilizada foi:
Equação 2 – Cálculo da porcentagem de acerto de acordo com o número de recomendações
geradas
Além disso, também se calculou a média da porcentagem de acerto, tanto para o número
de recomendações geradas, quanto para a quantidade de dias. Nesse caso, foram utilizadas as
seguintes equações indicadas abaixo:
∑( )
Equação 3 – Cálculo da média da porcentagem de acerto de acordo com o número de
recomendações
∑( )
Equação 4 – Cálculo da média da porcentagem de acerto de acordo com o número de dias
monitorados
31
43. Tabela 8 – % de Acerto de de programas dos usuários 51, 52, 61, 62 e 63
Usuário 51 Usuário 52 Usuário 61 Usuário 62 Usuário 63
Dia Recom. Acerto % Acerto % Acerto % Acerto % Acerto %
1 10 2 20% 4 40% 5 50% 0 0% 5 50%
2 10 3 30% 5 50% 2 20% 4 40% 6 60%
3 10 0 0% 2 20% 5 50% 3 30% 6 60%
4 10 4 40% 5 50% 4 40% 0 0% 2 20%
5 10 2 20% 3 30% 0 0% 2 20% 0 0%
6 10 0 0% 0 0% 0 0% 0 0% 0 0%
7 10 3 30% 3 30% 6 60% 2 20% 4 40%
8 10 3 30% 3 30% 7 70% 0 0% 4 40%
9 10 1 10% 1 10% 4 40% 2 20% 6 60%
10 10 3 30% 4 40% 0 0% 0 0% 7 70%
11 10 3 30% 4 40% 5 50% 0 0% 8 80%
12 10 4 40% 4 40% 2 20% 3 30% 5 50%
13 10 0 0% 0 0% 0 0% 1 10% 0 0%
14 10 3 30% 3 30% 4 40% 1 10% 5 50%
Soma 31 3,1 41 4,1 44 4,4 18 1,8 58 5,8
Média 1 31% 41% 44% 18% 58%
Média 2 22% 29% 31% 13% 41%
Figura 31 - % de acerto programa usuário 11
Observa-se que os usuários 11 e 12 tiveram uma baixa porcentagem de acerto, atingindo
40% no máximo. Isso indica que as recomendações de programas sugeridas ao usuário não
foram satisfatórias. Nesse caso, pode-se utilizar as recomendações de gêneros para tentar
encontrar mais programas que estejam de acordo com as preferências do usuário. Os usuários
21 e 22 têm uma porcentagem de acerto maior, que atinge aproximadamente 70%. Esse valor
indica que as recomendações de programas encontradas são adequadas. Entretanto, vale
33
44. observar que em alguns dias a porcentagem de acerto foi zero. O usuário 23 também obteve
boas recomendações, atingindo aproximadamente 75% de acerto.
Figura 32 - % de acerto programa usuário 12
Figura 33 - % de acerto programa usuário 21
34
45. Figura 34 - % de acerto programa usuário 22
Figura 35 - % de acerto programa usuário 23
Já o usuário 31, durante vários dias, teve uma baixa porcentagem de acerto, atingindo
aproximadamente 50%. Os usuários 32 e 33 obtiveram porcentagem de acerto baixa, o que
35
46. não é adequado. Isso indica que a Filtragem Colaborativa não acertou os programas
recomendados para esses usuários. O usuário 41 também obteve uma baixa porcentagem de
acerto, enquanto que, para o usuário 42, a Filtragem Colaborativa conseguiu sugerir os
programas, atingindo aproximadamente 60% de acerto.
Figura 36 - % de acerto programa usuário 31
Figura 37 - % de acerto programa usuário 32
36
47. Figura 38 - % de acerto programa usuário 33
Figura 39 - % de acerto programa usuário 41
37
48. Figura 40 - % de acerto programa usuário 42
O usuário 51 atingiu aproximadamente 40% de acerto e o usuário 52, 50%. O usuário
61 obteve uma boa porcentagem de acerto, aproximadamente 70%, enquanto o usuário 62
atingiu aproximadamente 40%. O usuário 63 obteve a melhor porcentagem de acerto,
aproximando-se de 80%. Os resultados acima podem ser visualizados nas figuras de X a Y.
Figura 41 - % de acerto programa usuário 51
38
49. Figura 42 - % de acerto programa usuário 52
Figura 43 - % de acerto programa usuário 61
39
50. Figura 44 - % de acerto programa usuário 62
Figura 45 - % de acerto programa usuário 63
40
52. Tabela 11 – % de Acerto dos gêneros dos usuários 51, 52, 61, 62 e 63
Usuário 51 Usuário 52 Usuário 61 Usuário 62 Usuário 63
Dia Recom. Acerto % Acerto % Acerto % Acerto % Acerto %
1 10 2 20% 2 20% 3 30% 0 0% 7 70%
2 10 5 50% 3 30% 1 10% 3 30% 7 70%
3 10 1 10% 2 20% 5 50% 2 20% 5 50%
4 10 3 30% 5 50% 6 60% 0 0% 2 20%
5 10 4 40% 2 20% 4 40% 3 30% 0 0%
6 10 3 30% 4 40% 3 30% 4 40% 0 0%
7 10 5 50% 3 30% 7 70% 2 20% 5 50%
8 10 3 30% 4 40% 8 80% 0 0% 7 70%
9 10 4 40% 7 70% 3 30% 3 30% 7 70%
10 10 2 20% 3 30% 0 0% 0 0% 6 60%
11 10 4 40% 4 40% 7 70% 2 20% 6 60%
12 10 1 10% 2 20% 5 50% 2 20% 5 50%
13 10 2 20% 2 20% 3 30% 2 20% 1 10%
14 10 2 20% 2 20% 4 40% 1 10% 5 50%
Soma 41 4,1 45 4,5 59 5,9 24 2,4 63 6,3
Média 1 41% 45% 59% 24% 63%
Média 2 29% 32% 42% 17% 45%
Figura 46 - % de acerto gênero usuário 11
O usuário 11 e 12 atingiram uma boa porcentagem de acerto, aproximadamente 75%.
Conforme mostram os gráficos 46 e 47, os dias de 6 à 14 apresentam uma variação bem
parecida. Isso ocorre porque esses usuários pertencem ao mesmo domicílio. O usuário 21 e o
22 atingiram uma ótima porcentagem de acerto, aproximadamente 90% e 80%
respectivamente. Em alguns dias, como é possível observar, a porcentagem de acerto foi zero.
42
53. O usuário 23 manteve uma boa porcentagem durante os dias monitorados, entre 40% e 80%.
Para o usuário 31, o acerto é melhores nos primeiros dias.
Figura 47 - % de acerto gênero usuário 12
Figura 48 - % de acerto gênero usuário 21
43
54. Figura 49 - % de acerto gênero usuário 22
Figura 50 - % de acerto gênero usuário 23
44
55. Como mostram os gráficos, os usuários 32 e 33 tiveram valores baixos, atingindo no
máximo 40% e 20% de acerto, respectivamente. O usuário 41 também obteve uma baixa
porcentagem. Já para o usuário 42, a Filtragem Colaborativa obteve uma boa porcentagem de
acerto, atingindo no máximo 80%.
Figura 51 - % de acerto gênero usuário 31
Figura 52 - % de acerto gênero usuário 32
45
56. Figura 53 - % de acerto gênero usuário 33
Figura 54 - % de acerto gênero usuário 41
46
57. Figura 55 - % de acerto gênero usuário 42
Os usuários 51 e 52 também apresentaram bons resultados. Ainda assim, o usuário 51
teve um desempenho um pouco abaixo comparado ao do apresentado pelo usuário 52. Os
usuários 61 e 63 obtiveram uma boa porcentagem, enquanto o usuário 62 apresentou valores
baixos.
Figura 56 - % de acerto gênero usuário 51
47
58. Figura 57 - de acerto gênero usuário 52
Figura 58 - % de acerto gênero usuário 61
48
59. Figura 59 - % de acerto gênero usuário 62
Figura 60 - % de acerto gênero usuário 63
49