Subido por Celia Elena Tarquino Peralta

Ramovecchi, Hernán y García, María Sol

Anuncio
UNIVERSIDAD DEL CENTRO DE LA PROVINCIA DE
BUENOS AIRES
TRABAJO FINAL DE GRADO
CARRERA
INGENIERÍA DE SISTEMAS
JoyMeter - Sistema de
recomendación de actividades a
usuarios de dispositivos móviles
Autores: Hernán Javier Ramovecchi - María Sol García
Director: Dr Jorge Andrés Diaz Pace
ÍNDICE GENERAL
ÍNDICE DE FIGURAS
ÍNDICE DE TABLAS
1 INTRODUCCIÓN
1.1 ENFOQUE PROPUESTO
1.2 ORGANIZACIÓN DEL TRABAJO
2 EMOCIONES
2.1 ESTADOS DE ÁNIMO
2.2 EMOCIONES POSITIVAS
2.3 UTILIDAD DE LAS EMOCIONES POSITIVAS
2.4 BENEFICIO DE LAS EMOCIONES POSITIVAS
2.5 LO QUE DEPENDE LA VOLUNTAD
2.6 VALORACIÓN DE LAS EMOCIONES POSITIVAS
3 AGENTES DE ASISTENCIA
3.1 AGENTES DE INTERFAZ
3.2 SISTEMAS DE RECOMENDACIÓN
3.2.1 TÉCNICAS DE RECOMENDACIÓN
3.2.1.1 RECOMENDACIÓN BASADA EN CONTENIDO
3.2.1.2 RECOMENDACIÓN COLABORATIVA
3.2.1.3 RECOMENDACIÓN BASADA EN CONOCIMIENTO
3.2.1.4 SISTEMAS DE RECOMENDACIÓN DEMOGRÁFICOS
3.2.1.5 SISTEMAS DE RECOMENDACIÓN BASADOS EN UTILIDADES
3.2.2 CAPTURA DE LAS PREFERENCIAS DEL USUARIO
3.2.3 DOMINIOS DE APLICACIÓN DE LOS SISTEMAS DE RECOMENDACIÓN
4 MACHINE LEARNING
4.1 APRENDIZAJE SUPERVISADO VERSUS NO SUPERVISADO
4.2 ALGORITMOS SUPERVISADOS DE APRENDIZAJE
4.2.1 K VECINOS MÁS CERCANOS (Nearest-neighbor)
4.2.2 NAIVE BAYES
4.2.3 TABLA DE DECISIÓN
4.2.4 MÁQUINAS DE SOPORTE VECTORIAL
4.2.5 REDES NEURONALES ARTIFICIALES
4.2.6 ÁRBOLES DE DECISIÓN
4.2.5 ENSAMBLES
5 APLICACIONES MÓVILES
5.1 ANDROID
5.2 GENERALIDADES DE LAS APLICACIONES ANDROID
5.3 COMPONENTES DE LAS APLICACIONES
5.4 VENTAJA DEL USO DE ANDROID SOBRE OTROS S.O MÓVILES
6 TRABAJOS RELACIONADOS
6.1 GOOGLE NEWS
6.2 XPod
3
5
8
9
11
13
13
15
16
17
18
19
22
22
24
25
25
27
30
30
30
31
32
34
34
36
36
36
37
37
37
38
39
41
42
45
46
50
52
52
53
1
6.3 HULU CF-NADE ALGORITHM
54
6.4 PICFEEL - A WORLD OF FEELINGS
57
6.5 HAPINNESS
58
7 ENFOQUE
60
7.1 JOYMETER
60
7.1.1 ACTIVIDADES
61
7.1.2 NIVEL DE SATISFACCIÓN
62
7.1.3 SUGERENCIA DE ACTIVIDADES
62
7.1.4 AUTENTICACIÓN
62
7.1.5 ACCESIBILIDAD
62
7.1.6 USABILIDAD
63
7.1.7 ACCESO OFFLINE Y SINCRONIZACIÓN
63
7.2 DISEÑO DE ARQUITECTURA
64
7.2.1 SERVIDOR
65
7.2.2 CLIENTE
67
7.3 CÁLCULO DEL NIVEL SUBJETIVO DE LA FELICIDAD
70
7.4 RECOMENDACIÓN DE ACTIVIDADES
71
7.4.1 INFORMACIÓN CAPTADA PARA GENERAR RECOMENDACIONES
72
7.4.2 CLASIFICADORES
73
7.4.3 ESTRATEGIAS DE RECOMENDACIÓN
74
8 EVALUACIÓN EXPERIMENTAL
80
8.1 CLASIFICADORES PROVISTOS POR WEKA
80
8.2 CONSIDERACIONES
81
8.3 PERFILES DE USUARIO ANTERIORES A LA UTILIZACIÓN DE LAS TÉCNICAS DE
RECOMENDACIÓN
82
8.4 INFORMACIÓN POSTERIOR AL PERÍODO DE EXPERIMENTACIÓN CON LAS
TÉCNICAS DE RECOMENDACIÓN
87
8.5 COMPARACIÓN Y ANÁLISIS DE RESULTADOS
93
9 CONCLUSIONES
94
9.1 VENTAJAS
95
9.2 LIMITACIONES
96
9.3 TRABAJOS FUTUROS
96
10 APÉNDICE
98
APÉNDICE A: ESCALAS DE FELICIDAD
98
APÉNDICE B: TECNOLOGÍAS UTILIZADAS EN EL SERVIDOR
99
APÉNDICE C: TECNOLOGÍAS UTILIZADAS EN EL CLIENTE
112
APÉNDICE D: MANUAL DE USUARIO
122
11 REFERENCIAS
127
2
ÍNDICE DE FIGURAS
Figura 1: JoyMeter sistemas de recomendación de actividades
8
Figura 2: Diagrama de contexto de JoyMeter con usuario utilizando la App
10
Figura 3. Efectos de las emociones positivas
17
Figura 4: Interacción usuario-agente de interfaz
23
Figura 5: Perfil de usuario basado en el contenido
25
Figura 6: Vecinos cercanos con preferencias similares
27
Figura 7: Los sistemas de recomendación llegaron para quedarse
32
Figura 8: Ejemplo de la técnica de aprendizaje no supervisado – clustering
35
Figura 9: Ejemplo de una red neuronal artificial de multicapa tipo feed-forward
38
Figura 10: Ejemplo de un árbol de decisión
38
Figura 11(a) : Probabilidad de que precisamente n de 25 clasificadores están en el error
(suponiendo que cada uno tiene tasa de error de 0,45).
40
Figura 11(b): Tasa de error vs el número de clasificadores en el conjunto (empleando voto
mayoritario) para tres tasas de error independientes.
40
Figura 12: Dispositivos móviles
41
Figura 13: Sistemas operativos móviles en el mundo y Argentina 2015
42
Figura 14: Logotipo del último OS Android (Nougat)
43
Figura 15: Arquitectura Android
43
Figura 16: Ciclo de vida de una actividad en Android
49
Figura 17: Landing page de GoogleNews
53
Figura 18: Pantalla de Hulu de recomendación de productos
54
Figura 19: Un ejemplo demostrativo de CF-NADE
55
Figura 20: Top 5 de películas más similares recomendadas por el algoritmo
56
Figura 21: Aplicación PicFeel
57
Figura 22: Aplicación Happiness
58
Figura 23: Recordatorio de la aplicación Happiness, para cargar una nueva entrada
58
Figura 24: Diagrama nocional de los componentes de JoyMeter y las APIs externas con la
interacción del usuario
61
Figura 25: Deploy general de Joymeter e integración con APIs externas
64
Figura 26: Diagrama de componentes del servidor de JoyMeter
66
Figura 27: Flujo de alta y recepción de mensaje de un dispositivo con GCM
66
Figura 28: Arquitectura del cliente de JoyMeter
68
Figura 29: Flujo del alta de un usuario en JoyMeter y componentes involucrados
69
Figura 30: Perfil de usuario
72
Figura 31: Estrategias de recomendación
74
Figura 32: Sugerencia del tipo de Actividad en base a los atributos independientes
74
Figura 33: Distribución de probabilidad de tipos posibles de actividad
75
Figura 34: Basic Activity Recommender
75
Figura 35: Filter Activity Recommender
77
Figura 36: Feedback Filter
77
Figura 37: Usuario A, distribución por tipo de actividad
82
3
Figura 38: Usuario A, distribución por momento del día
Figura 39: Usuario A, distribución por tipo de día
Figura 40: Usuario A, distribución por nivel de satisfacción
Figura 41: Usuario B, distribución por tipo de actividad
Figura 42: Usuario B, distribución por momento del día
Figura 43: Usuario B, distribución por tipo de día
Figura 44: Usuario B, distribución por nivel de satisfacción
Figura 45: Usuario A, aceptación total de recomendaciones
Figura 46: Usuario A, técnicas de recomendación aceptadas
Figura 47: Usuario A, actividades aceptadas por tipo
Figura 48: Usuario A, actividades aceptadas por momento del día
Figura 49: Usuario B, aceptación total de recomendaciones
Figura 50: Usuario B, técnicas de recomendación aceptadas
Figura 51: Usuario B, actividades aceptadas por tipo
Figura 52: Usuario B, actividades aceptadas por momento del día
83
83
84
85
85
86
86
87
87
88
88
90
90
91
91
4
ÍNDICE DE TABLAS
Tabla 1: Fuente que nos proporcionan emociones positivas
Tabla 2: Ejemplo de dataset para aprendizaje supervisado
Tabla 3: Usuario A, matriz de confusión de estrategia con filtro
Tabla 4: Usuario A, matriz de confusión de estrategia de clasificación
Tabla 5: Usuario B, matriz de confusión de estrategia con filtro
Tabla 6: Usuario B, matriz de confusión de estrategia de clasificación
19
34
89
88
92
92
5
Dedicatorias
A mi esposa, Natalia, por creer en mí y estar a mi lado siempre.
A mis padres, Lidia y “Chacho” quienes siempre se preocuparon
en brindarme una buena educación, con mucho esfuerzo y sacrificio.
A mi hermano Damián, familia y amigos por acompañarme en este ciclo.
H.J.R
A Facundo, mi compañero de vida, por apoyarme incondicionalmente.
A mi mamá Patricia, por su esfuerzo dándome la posibilidad de estudiar.
A Hernan, mi compañero de tesis, por su empuje y dedicación.
Y a mi familia y amigos, por acompañarme siempre.
M.S.G
6
Agradecimientos
Agradecemos a nuestro director Dr Jorge Andrés Díaz Pace, por escuchar esta propuesta
de Tesis y compartir el mismo entusiasmo que nosotros en la realización de este proyecto,
con predisposición y paciencia. También queremos hacer llegar nuestro agradecimiento a
todos los profesionales que formaron parte de nuestro ciclo académico, sin su vocación
docente no podríamos haber realizado este logro. A todos ellos, muchas gracias.
7
1 Introducción
Los sistemas de recomendación estudian las preferencias y gustos de los usuarios
con el objetivo sugerir ítems que factiblemente sean de su interés. Las recomendaciones
forman parte de la cotidianeidad de las personas ya sea al escoger una película, un médico
o un viaje a realizar. Las áreas de aplicación de la tecnología de sistemas de
recomendación abarcan dominios tradicionales tales como, música, noticias y hasta otros
más sofisticados.
Estas recomendaciones pueden formarse empleando diferentes técnicas y enfoques,
particularmente la tecnología de agentes inteligentes y específicamente los agentes de
interfaz o personales pueden ser utilizados para modelar este tipo de sistemas. Estos
agentes normalmente emplean internamente técnicas y algoritmos de Inteligencia Artificial.
Figura 1: JoyMeter sistemas de recomendación de actividades
8
En los últimos años, psicólogos e investigadores han investigado y proporcionado
evidencias concretas sobre una cuestión dejada anteriormente a los filósofos: ¿qué nos
hace felices? Descubrimientos en el campo de la psicología positiva sugieren que las
acciones de un individuo pueden tener un efecto significativo en su felicidad y satisfacción
con la vida.
En particular, el cultivo de emociones positivas mediante la realización de ciertas
actividades puede ayudar a una persona a desarrollar áreas del cerebro asociadas al
bienestar y la felicidad. En este contexto, se considera importante fomentar la práctica de
actividades que hacen felices a una persona, sirviéndose para ello de tecnologías ubicuas
como son los dispositivos móviles.
El presente trabajo apunta a combinar agentes y
recomendaciones para que una persona pueda realizar actividades tendientes a mejorar su
estado de felicidad.
Los sistemas de recomendación juegan un rol primordial, ya que asisten al usuario
en la ardua tarea de filtrar items relevantes de información, en base a sus objetivos,
preferencias, y necesidades que constituye el perfil de usuario. Existen diferentes técnicas
de recomendación aplicadas para lograr interpretar el perfil del usuario. Entre la variedad de
estos enfoques, pueden nombrarse: filtrado colaborativo, perfil demográfico, basado en el
historial del usuario, entre otros. Algunos recomendadores avanzados, hacen uso de una
combinación de estas técnicas, dando como resultado una solución híbrida.
1.1 Enfoque propuesto
La capacidad de una aplicación móvil para realizar un seguimiento de las actividades
de una persona, y adicionalmente sugerir ciertas actividades que le permitan lograr un cierto
grado de felicidad sostenido en el tiempo es el punto de partida para este trabajo.
9
Figura 2: Diagrama de contexto de JoyMeter con usuario utilizando la App
El objetivo principal del presente trabajo final fue el desarrollo de una herramienta
denominada JoyMeter que permite el seguimiento de actividades personales junto con el
nivel de satisfacción obtenido al realizar las mismas. Este sistema permite cargar
actividades, actualizarlas, consultarlas y ofrecer un historial con los niveles de satisfacción
del usuario a lo largo del tiempo. Se diseñó un sistema de recomendación, con el fin de
sugerir actividades a partir de la retroalimentación de la interacción con el usuario, donde se
analizaron distintas estrategias de recomendación. En esta línea, se evaluaron distintas
reglas para contemplar la satisfacción otorgada por ciertas actividades predefinidas, y el
feedback provisto por los usuarios de la aplicación.
Para facilitar el acceso, JoyMeter puede ser accedida desde múltiples dispositivos,
en base a una arquitectura cliente/servidor. El dispositivo móvil juega el rol de cliente,
haciendo uso de servicios Web expuestos por el servidor, como son el caso de la carga,
edición y eliminación de las actividades. Adicionalmente, el dispositivo móvil puede
consultar el nivel e historial de felicidad alcanzados.
Para las recomendaciones se consideraron aspectos de extensibilidad, y se
implementaron distintos enfoques de recomendación (por ej. reglas heurísticas, Machine
Learning, etc.), en base a un enfoque de diseño modular que soporta la incorporación de
distintas técnicas. Como funcionalidad adicional, la herramienta está integrada con
10
Facebook para facilitar el Login del usuario con las credenciales de Facebook, así como
también permite al usuario publicar en Facebook cada una de las actividades que se
agreguen cuando así lo desee.
1.2 Organización del trabajo
El resto del trabajo se estructura en ocho capítulos los cuales están organizados del
siguiente modo:
En el capítulo 2, se describen conceptos sobre estado emocional positivo y
bienestar, incluyendo cómo estás emociones positivas afectan a las personas y como el
cultivo de emociones positivas logran un estado emocional saludable.
En el capítulo 3, se hace una introducción a los agentes de interfaz y sistemas de
recomendación, mencionando las diferentes técnicas de recomendación.
En el capítulo 4, se describen técnicas básicas de Machine Learning, partiendo de
los tipos de aprendizajes (supervisado y no supervisado), y se abordan los algoritmos más
conocidos de aprendizaje
En el capítulo 5, se centra en dispositivos móviles, y nociones de aplicaciones
móviles para el sistema operativo Android..
En el capítulo 6, se analizan algunos trabajos relacionados en el ámbito de los
dispositivos móviles y de sistemas de recomendación existentes.
En el capítulo 7, se describe la solución propuesta para JoyMeter, describiendo su
arquitectura y sus componentes y tecnologías asociadas, y se ilustran sus principales
funcionalidades.
Adicionalmente,
se presentan las funcionalidades específicas de
recomendación de actividades orientadas por “niveles de felicidad”.
En el capítulo 8, se reportan algunos experimentos
JoyMeter,
y
se
de uso de la aplicación
analizan los resultados obtenidos con distintas estrategias de
recomendación..
11
Finalmente, en el capítulo 9, se presentan las conclusiones y se comentan posibles
trabajos futuros derivados de este proyecto.
12
2 Emociones
Por años las investigaciones relacionadas al bienestar y la felicidad se han centrado
en el control y la disminución de los estados emocionales negativos. Sin embargo, en los
últimos tiempos viene creciendo una tendencia igualmente valiosa a promover, la cuál da
pie a este trabajo: ​el cultivo de las emociones positivas.
La Psicología Positiva ha afirmado desde hace más de una década que el optimismo
se puede aprender. Esto ahora está respaldado por hallazgos neurocientíficos de los
últimos años, que muestran que los circuitos neuronales implicados en el bienestar tienen
plasticidad, así como la habilidad de crecer y cambiar. Por tanto, es posible enseñar a
nuestro cerebro a pensar con mayor positividad y a disfrutar de las emociones positivas por
medio de saborear, optar por la empatía y la compasión y entrenarnos en la atención plena.
Las respuestas emocionales y los estados de ánimo son resultado de las vivencias
cotidianas, en el que jugamos un papel muy activo en la génesis de dichos estados
emocionales, tanto los positivos como los negativos. Podemos tener cierto grado de control
sobre ellos, es decir, podemos hacer cosas tanto para favorecer los estados de ánimo
positivos, como para reducir o eliminar los estados emocionales negativos [57].
2.1 Estados de Ánimo
El modo en que una persona se siente no es azaroso, sino que responde a una serie
de factores personales y del contexto, los cuales influyen y explican esa manera subjetiva
de encontrarse. El comportamiento, incluyendo la manera de sentir, reaccionar, actuar y
pensar, es producto de la interacción con el entorno, es decir una persona actúa, siente o
piensa en respuesta a un ambiente con el que participa, y que por tanto, nos presenta
situaciones y experiencias que no nos dejan indiferentes: una persona interpreta los hechos,
se emociona y actúa ante ellos, y lo hace de un modo diferente según la persona [57].
Una emoción es un modo subjetivo de sentirse ante un hecho, situación o estímulo
concreto. Tiene una duración limitada en el tiempo. Cuando estos estados emocionales se
prolongan más en el tiempo (horas, días, temporadas), se habla de “Estado Anímico”. Para
simplificar, se puede clasificar en “Positivos” (Cuando la experiencia subjetiva es agradable,
satisfactoria, relajante, placentera) y “Negativos” (La experiencia subjetiva es de malestar,
sufrimiento, tensión, desagrado) [57].
13
Los estados de ánimo surgen como respuesta a nuestras experiencias con el
entorno (las situaciones cotidianas, noticias recibidas, la actuación de las personas con las
que se relacionan, las consecuencias de sus actos), y pueden estar influidos por otras
variables: La hora del día, el clima, la época del año, la alimentación, el estado de salud, la
calidad del sueño, el nivel de energía-cansancio. Éstas son variables que pueden ejercer
algún efecto en las personas [57].
Hay pocas vivencias cotidianas que le generen a una persona una respuesta
emocional neutra; las experiencias suelen provocar respuestas emocionales muy diversas,
acordes con la situación (o con nuestro modo de interpretar la situación): enfado, asco,
sorpresa, relajación, alegría, tensión, ilusión, impaciencia. Y esto engloba todos los matices
y definiciones que cada persona pueda hacer [57].
La respuesta emocional de cada persona ante un mismo hecho es muy subjetiva,
pues depende de varios componentes: la respuesta fisiológica (ej. tensión muscular, presión
en el pecho), el componente cognitivo (la manera de interpretar los hechos y nuestras
propias reacciones ante los hechos) y el componente motor (una determinada manera de
actuar ante esos hechos). Según esto, los estados emocionales o anímicos de una persona
pueden reflejarse a través de lo que dicha persona hace o dice, a través de su lenguaje
verbal y no verbal, una sonrisa, una mueca tensa, un comentario pesimista, una lágrima, un
discurso agresivo, un exceso de actividad motora. Todos ellos le funcionan a la persona o al
resto como señales que ayudan a comprender su estado de ánimo o el del otro y a elegir el
mejor comportamiento en consecuencia. Solo hay que saber detectarlos e “interpretarlos”.
La Inteligencia Emocional [1] hace referencia a un conjunto de habilidades importantes a la
hora de manejar adecuadamente las emociones propias o las de otros. Estas habilidades
engloban:
●
Detección de la emoción
●
Comprensión de la misma (saber interpretarla)
●
Expresión adecuada (saber comunicarla)
●
Actuación para su regulación (saber cuál es la mejor manera de proceder ante
dicha emoción).
Todas ellas son habilidades que se pueden aprender y ejercitar tanto a nivel
individual como el terreno social y ello favorecerá un comportamiento más eficaz en las
relaciones interpersonales de una persona y en la regulación de sus propios estados. Esto
ayuda a que una persona se conozca mejor: a conocer lo que le afecta, de qué modo le
afecta y cómo se comporta cuando se siente de una determinada manera. El conocimiento
14
sobre las emociones y sus causas permite a una persona ejercer un mejor control sobre
ellas[57].
El primer paso para comprender nuestras emociones es aprender a detectarlas y
localizar qué las genera. Sólo aprendiendo a detectar cuando una persona se siente bien o
mal se podrá conocer también cómo volver a generar esas emociones (en caso de que
sean positivas) o qué hacer para prevenirlas o modificarlas (en caso de que sean
negativas). Para ello, es posible realizar un “autorregistro”, que busca asociar las emociones
con sus antecedentes [57].
Una vez recopilada dicha información, es posible establecer relaciones sobre los
sucesos y actividades y las emociones que provocan [57]​.
2.2 Emociones positivas
El estudio de las emociones positivas es controvertido y complejo; al mismo tiempo,
es apasionante en cuanto integra los dominios biológicos, cognitivos y sociales del
desarrollo humano. Sin embargo, hoy día se le ha descuidado por el énfasis excesivo
puesto en su contraparte.
Las emociones positivas son parte de la naturaleza humana y se han convertido en
una clave indiscutible para la consecución de las relaciones sociales. Son creadoras de
experiencias positivas, capaces de promover el disfrute y la gratificación [2], de desarrollar
la creatividad y de aumentar la satisfacción y el compromiso [3] [4], lo que en general se
traduce en una espiral ascendente de transformaciones en la vida de las personas.
Las emociones positivas son aquellas en las que predomina la valencia del placer o
bienestar [5]; tienen una duración temporal y movilizan escasos recursos para su
afrontamiento; además, permiten cultivar las fortalezas y virtudes personales, aspectos
necesarios y que conducen a la felicidad. Asimismo, son estados subjetivos que la persona
experimenta en razón de sus circunstancias, por lo que son personales e involucran
sentimientos. Son descritas como reacciones breves que típicamente se experimentan
cuando sucede algo que es significativo para la persona.
Las emociones positivas tienen un objetivo fundamental en la evolución, en cuanto
que amplían los recursos intelectuales, físicos y sociales de los individuos, los hacen más
perdurables y acrecentar las reservas a las que se puede recurrir cuando se presentan
amenazas u oportunidades; asimismo, incrementan los patrones para actuar en ciertas
situaciones mediante la optimización de los propios recursos personales en el nivel físico,
psicológico y social [4].
15
Una herramienta afín de las emociones positivas es el abanico de expresiones
faciales que las acompañan, aunque es importante resaltar que la gesticulación para la
expresión de las emociones negativas es más amplia y clara que para las positivas; en
efecto, resulta más fácil reconocer emociones y sentimientos relacionados con la tristeza, la
melancolía o el miedo, que los de alegría, satisfacción o placer. En este sentido, algunas de
las emociones positivas más comunes son la felicidad, el amor y el humor.
El proceso emocional se desencadena por la percepción de condiciones internas y
externas que dan lugar a la evaluación valorativa, para posteriormente producir la
experiencia por medio de la expresión corporal o un lenguaje no verbal, convirtiéndolas así
en un fenómeno observable. Así, es posible reconocer si existe una sensación agradable y
se precisa de una emoción positiva, a la que además se le otorga el valor de algo bueno.
Se proponen cuatro tipos de emociones positivas [3]: la alegría, el interés, el amor y
la satisfacción. Mientras que otros autores incluyen al optimismo como una emoción positiva
básica [2], o conforman una tercera línea teórica y proponen un abordaje más sistemático y
empírico que incluya aspectos cognitivos y biológicos [6], sugiriendo la existencia de dos
tipos de emociones positivas distintos: alegría y amor. Por último, hay quienes emplean el
término de “fluidez” [7] como aquel estado emocional positivo en el que la persona se halla
totalmente concentrada y abstraída por la tarea, la que le produce placer y gracias a la cual
pierde la noción del tiempo. [58]
2.3 Utilidad de las emociones positivas
Experimentar emociones positivas es una actividad específica de la naturaleza
humana debido a que contribuye en la calidad de vida de las personas [3]. Lo anterior lleva
a distinguir una doble importancia de las emociones positivas: por un lado, como detonante
para el bienestar; por el otro, como un medio para conseguir un crecimiento psicológico
personal y duradero.
Las emociones positivas optimizan la salud, el bienestar subjetivo y la resiliencia
psicológica, favoreciendo un razonamiento eficiente, flexible y creativo. Un razonamiento de
este tipo es clave para el desarrollo de un aprendizaje significativo. Así es como las
emociones positivas ayudan a otorgar sentido y significado positivo a las circunstancias
cambiantes y adversas [8].
Una teoría que sustenta lo anterior es la llamada “teoría de ampliación y
construcción de las emociones positivas”, la cual sostiene que emociones como la alegría,
el entusiasmo, la satisfacción y demás comparten la finalidad de ampliar los pensamientos y
16
acciones de las personas [3] [4], además de que el cultivo de aquellas puede servir para la
consecución de las metas de vida que las personas se plantean, así como para la búsqueda
del bienestar.
Lo anterior ha sido sometido a experimentaciones que demuestran cómo las
emociones positivas producen patrones de pensamiento novedosos, flexibles, inclusivos y
creativos; de igual modo, amplían el repertorio de pensamientos y acciones de la persona
que resultan de la primera –y central– premisa de esta teoría. Adicionalmente, la teoría de
ampliación y construcción propone que experimentar emociones positivas permite construir
y reforzar los recursos con los que cuenta la persona (Figura 2.3.a), ya sea de forma física,
intelectual y social, creando así una espiral ascendente que transforma a la persona. Incluso
hay evidencia empírica que sugiere que dicha espiral ascendente predice con gran
efectividad el sentido de bienestar de las personas [8]. [58]
Figura 3. Efectos de las emociones positivas
2.4 Beneficio de las emociones positivas
Una de las principales ventajas del cultivo de las emociones positivas radica en que
ejercen una gran influencia sobre el procesamiento intelectual, la resolución de problemas,
el razonamiento y las habilidades sociales [9].
Las investigaciones realizadas por varios autores han demostrado que el
experimentar emociones positivas está relacionado con la existencia de una organización
cognitiva más abierta, flexible y compleja [10] [11] [12] [13] [14].
En esta misma línea, otras investigaciones hallaron que los estados afectivos
positivos facilitan la solución creativa de diversos problemas [15]. Además, ayudan a
fortalecer ante la adversidad en cuanto que promueven la resiliencia [15] y protegen contra
17
la depresión, pues se transforman en un ingrediente activo esencial que incrementa los
recursos psicológicos de afrontamiento de la persona [16].
Por otro lado, distintas intervenciones psicológicas han puesto de relieve la
importancia que tienen las emociones positivas frente a algunas emociones negativas
(miedo, enojo y tristeza); así, la teoría de ampliación y construcción explica que estados
emocionales como la alegría o el interés combaten los efectos de las emociones negativas
que impiden el crecimiento psicológico o el mejoramiento de la salud física o mental [17]
[18]. Lo anterior también significa que mientras que las emociones negativas limitan el
repertorio de pensamiento-acción de una persona, las positivas lo amplían. Además, estas
mismas se vuelven herramientas terapéuticas sumamente valiosas, entre las que podemos
contar las técnicas de relajación, las terapias del comportamiento y las cognitivas [19].
Los estados emocionales positivos permiten a los individuos considerar y elaborar
un plan acerca de sus resultados futuros [20], mientras que los negativos hacen posible
responder a los eventos inmediatos [21]. Las personas que experimentan emociones
positivas en un momento determinado muestran una ventaja cognitiva en relación a la
experimentación de estados emocionales negativos en cuanto que logran plantearse
nuevas metas que anteriormente no habían podido considerar [15].
Como consecuencia de que las emociones positivas son algo más que la mera
ausencia de emociones negativas [15], es importante enfatizar que las primeras son útiles
en el campo de la salud en tanto que previenen enfermedades y reducen la ansiedad. Las
emociones positivas hacen desaparecer los efectos fisiológicos que anteriormente habían
sido generados por las emociones negativas [16].
Las personas que se consideran felices asimilan mejor los riesgos a la salud, y por
tanto, experimentan un menor desgaste del sistema cardiovascular [17] y, en consecuencia,
gozan de una mejor salud.
Adicionalmente, el desarrollo de emociones positivas está relacionado con la
disminución del estrés que es posible registrar en el sistema nervioso vegetativo y en el
cardiocirculatorio. Por último y a este respecto, se ha evidenciado que quien experimenta
alegría a lo largo del día, con mayor probabilidad la tendrá el día siguiente. [58]
2.5 Lo que depende de la voluntad
Las cosas que una persona hace o deja de hacer tienen consecuencias
emocionales. Un persona tenderá a buscar aquellas actividades o lugares donde disfrutó de
emociones positivas y en las que se sintió bien, pero no siempre se actúa así. Esto suele
18
suceder porque la persona se ha habituado o no es conscientes de lo que quiere, o porque
a veces se pierde todo un día (e incluso toda la vida) pensando en lo que puede que le
suceda mañana, o pierde el día rumiando las cosas que le pasaron ayer. En cualquier caso,
al hacerlo ha perdido las oportunidades de disfrutar hoy.
En primer lugar la persona debe saber que las emociones positivas pueden provenir
de diferentes fuentes, tales como la posesión (por ejemplo, poseer un smartphone que nos
permita estar en contacto con nuestros seres queridos), o el significado que le brinda la
posesión (por ejemplo, tener el último modelo de smartphone y presumir de ello). Otra
fuente, más interesante que la anterior, es la realización de actividades, tanto por el hecho
de realizarlas como por la capacidad que ha adquirido para realizar la actividad de
determinada manera (por ejemplo, practicar rafting en los rápidos de un río). Una fuente
más de emociones positivas es el “yo” (por ejemplo, la satisfacción y el orgullo de realizar
una actividad). Y, por último, la fuente más importante de emociones positivas, es el
estímulo de las demás personas. El siguiente cuadro detalla un resumen de los diferentes
focos emocionales que son fuente de emociones positivas. [59]
Foco
Fuente
Cosas y su significado
Emociones positivas experimentadas en respuesta a un
objeto o a los significados a los que lo asociamos.
Actividades
Emociones positivas experimentadas en respuesta a una
actividad y a las habilidades para su realización.
Yo
Emociones positivas experimentadas en respuesta a cambios
en nosotros mismos.
Otras personas
Emociones positivas evocadas por los efectos de las
actividades de otras personas.
Tabla 1: Fuente que nos proporcionan emociones positivas [59]
2.6 Valoración de las emociones positivas
La valoración de felicidad y satisfacción ha tomado relevancia en distintos ámbitos
cotidianos. Un ejemplo de la importancia de esta información son las encuestas de
satisfacción, ya sean a un cliente para brindar un mejor servicio o mejorar un producto,
satisfacción de un paciente, satisfacción laboral, como también la satisfacción personal.
Se ha vuelto relevante, al punto, que se generó un indicador que mide la calidad de
vida en términos más holísticos y psicológicos (FNB: felicidad nacional bruta creada por
19
Jigme Singye Wangchuck en ​1972​). Sin embargo, incluso este indicador, se enfrenta a una
gran dificultad, medir algo tan subjetivo como la felicidad y el bienestar.
La felicidad es un tema complejo, en efecto, pero en las últimas décadas se han
desarrollado teorías serias y métodos de medida fiables que permiten esgrimir las críticas.
Investigar acerca de la felicidad posee la dificultad que, a diferencia de otros temas, por
ejemplo, la física cuántica o la teoría de la relatividad; cada individuo tiene sus propios
argumentos; la felicidad es una opción individual que tiene que ver con los valores que cada
persona reconoce o acepta. Indudablemente, esto dificulta la divulgación de conocimientos,
ya que hay que batallar con los prejuicios y teorías del oyente. Pero visto desde otra
perspectiva, el hecho de que cada una de las personas crea saber que es la felicidad, indica
que es un tema importante y en el que cierta forma cada uno de nosotros, nos
consideramos expertos.
La felicidad como concepto ha sido abordado desde muchas perspectivas, tales
como la filosófica y la artística. La perspectiva científica se caracteriza por ofrecer una
definición operacional de la felicidad que, aunque no comprende toda la complejidad que
otras perspectivas consideran sobre este concepto, sí permite su medición. En palabras
simples, la felicidad es definida como el grado con que una persona aprecia la totalidad de
su vida presente de forma positiva y experimenta afectos de tipo placentero. Esta definición
tiene implicancias importantes para la medición de la felicidad. Si se reconoce que se trata
de un fenómeno interior a cada persona, entonces parece más adecuado medirla con
auto-reportes que con evaluaciones de expertos o pares. Y si la felicidad tiene grados,
entonces las mediciones deberían reconocer distintos niveles y no clasificar a las personas
simplemente como felices o infelices. La medición de la felicidad también debería anclarse
en el presente, remitir a la vida en general e incorporar tanto pensamientos como
sentimientos.
Entre los distintos métodos que se han desarrollado y evaluado, lo más frecuente es
recurrir a preguntas sencillas y generales para evaluar la felicidad global y la satisfacción
con la vida presente. También es frecuente la utilización de preguntas sobre afectos
positivos y negativos, los cuales pueden ser analizados por separado o resumidos en una
escala de balance afectivo.
Además del conjunto de preguntas mínimas para medir la felicidad existen otras
mediciones
internacionalmente
aceptadas
que
podrían
implementarse
de
forma
complementaria. Entre estas mediciones se incluye la escalera de felicidad de Gallup,
20
índices específicos creados por investigadores reconocidos en el área, preguntas por
satisfacción en áreas específicas de la vida y preguntas por satisfacción instantánea. Ésta
última puede ser medida con técnicas de muestreo experiencial o de reconstrucción del día.
En el primer caso se utiliza el apoyo de tecnología para obtener informes frecuentes e
inmediatos de las personas en su entorno cotidiano, mientras que en el segundo se llena
una agenda correspondiente a los eventos del día anterior, en donde las personas reportan
su experiencia en períodos específicos del día.
Hay varias escalas de felicidad como se describen en el Apéndice A.
2.7 Resumen
En este capítulo se presentó el estado de ánimo como una consecuencia directa de
las emociones que viven las personas, puntualmente como las emociones positivas afectan
a las personas y la valoración de las mismas para un estado emocional saludable.
21
3 Agentes de asistencia
Los sistemas de recomendación estudian las preferencias y gustos de los usuarios
con el objetivo de recomendarles ítems a comprar o examinar que factiblemente sean de su
interés. Estos sistemas se han convertido en un componente esencial, por ejemplo, en los
sistemas de comercio electrónico debido a que personalizan las ofertas maximizando de
este modo la probabilidad de venta.
Estas recomendaciones pueden formarse empleando diferentes técnicas y
enfoques, particularmente la tecnología de agentes inteligentes específicamente los agentes
de interfaz o personales puede ser utilizada para modelar este tipo de sistemas.
3.1 Agentes de Interfaz
Debido a que no existe en la comunidad de Inteligencia Artificial una definición
formal del concepto “Agente”, una manera conceptual de definirla es como un sistema de
software (o hardware) que tiene las siguientes propiedades [22]:
• Autonomía: operan sin la intervención directa de humanos u otros agentes,
teniendo control sobre sus acciones y estado interno.
• Sociabilidad: Interactúan con humanos y posiblemente con otros agentes, mediante
algún protocolo de comunicación.
• Reactividad: Responden ante eventos, tomando sus propias decisiones, incluso
modificando su manera de operar, siempre teniendo en cuenta su razón de ser (objetivo).
Estos eventos están ligados al ambiente donde operan, el cual puede ser el mundo físico,
un usuario a través de una interfaz gráfica, otros agentes, Internet, o quizá una combinación
de estos.
• Pro-actividad: No actúan únicamente en respuesta a su ambiente, son capaces
también tomar la iniciativa.
Dentro del espectro de los agentes, se denominan “agentes de interfaz” o “agentes
personales” a aquellos que proveen asistencia activa al usuario en sus tareas
computacionales [23].
Los agentes de interfaz fueron concebidos para asistir de manera personalizada a
los usuarios en las tareas realizadas sobre una aplicación. Son capaces de aprender los
intereses, preferencias, prioridades, objetivos y necesidades de los usuarios, a fin de
22
brindarle asistencia proactiva y reactiva en el entorno de una aplicación computacional,
incrementando de este modo la productividad de la misma.
Así como una persona que brinda asistencia a otra, aprende a ser más competente
en su trabajo, un agente de interfaz a medida que interactúa con el usuario, aprende de él y
puede volverse cada vez más competente. El agente capta información de las preferencias
del usuario a través de diversas fuentes:
• Observación: Continuamente observando la interacción del usuario con la
aplicación. El agente puede monitorear las actividades del usuario, mantener registro de las
acciones realizadas durante un periodo de tiempo, encontrar regularidades, patrones
recurrentes, y ofrecer asistencia de acuerdo a lo observado.
• Feedback: El feedback del usuario puede ser implícito o explícito. El feedback
implícito ocurre por ejemplo cuando el usuario ignora una sugerencia del agente y toma otro
curso de acción. A su vez, el usuario puede proporcionar también su feedback
explícitamente (ya sea negativo o positivo) evaluando la asistencia dada por el agente.
• Instrucciones: Una tercera fuente de aprendizaje son las instrucciones dadas
explícitamente por el usuario, este puede entrenar al agente dándole ejemplos hipotéticos
de situaciones y diciéndole que es lo que debe realizar en tal caso.
• Fuentes Externas: Finalmente, puede también adquirir conocimiento de las tareas o
sugerencias realizadas por otros agentes que asistan a otros usuarios dentro del mismo
marco de trabajo.
Figura 4: Interacción usuario-agente de interfaz (adaptado de [23])
23
Particularmente, un agente personal puede ser desarrollado para proveer
recomendaciones, resumir y filtrar información, o incluso contemplar personas con gustos
similares (agentes sociales). Los sistemas de recomendación son una clase específica de
agentes sociales [45]. La manera de proceder de un sistema de recomendación es
comparable a la de un agente de información debido a que el objetivo de ambos es
descubrir información que sea interesante al usuario.
En los sistemas de recomendación, la asistencia a los usuarios se basa
fundamentalmente en la información capturada a través de la observación del
comportamiento de los usuarios en la aplicación. De esta manera, el agente aprende las
preferencias, intereses y hábitos de los usuarios, que son registrados en su perfil.
Los agentes de interfaz han sido aplicados en diversidad de dominios incluyendo
aplicaciones industriales, aplicaciones comerciales, comercio electrónico, y monitoreo. En
síntesis, los agentes de interfaz permiten personalizar una aplicación para un usuario en
particular, con el objetivo de facilitar las tareas del usuario sobre la aplicación.
En nuestro caso de estudio, un sistema de recomendación de actividades para el
usuario con el fin de mejorar su estado anímico, el agente debe ser capaz de estudiar las
actividades que al usuario le agradan hacer, con su comportamiento histórico y el feedback
provisto (recomendaciones aceptadas o rechazadas), con el fin de sugerir actividades a
realizar para que sea más feliz.
3.2 Sistemas de Recomendación
El término “sistema de recomendación” caracteriza a cualquier sistema que produce
como salida recomendaciones individualizadas o a aquellos que guían al usuario de una
manera personalizada a través de una aplicación o un sistema.
Un sistema de recomendación mantiene una representación de los gustos y
preferencias de los usuarios con el propósito de sugerir ítems que sean de su interés.
Existen dos entidades básicas en cualquier sistema de recomendaciones, el ​usuario
(a veces mencionado como cliente) y el ​ítem (mencionado también como producto u objeto).
Un sistema de recomendación tiene dos objetivos principales: i) sugerir ítems en los que el
usuario se espera que esté interesado, y ii) predecir la utilidad de un ítem específico para un
usuario en particular.
Los sistemas de recomendación difieren de otros sistemas de manejo de
información en el hecho de que las recomendaciones se ajustan a las necesidades
individuales de cada usuario. En un sistema de recomendación, las recomendaciones son
24
obtenidas personalizadamente en base al estudio de la interacción entre el usuario y la
aplicación. Para lograr su propósito, los sistemas de recomendación mantienen
conocimiento de las preferencias de los usuarios en lo que se denomina perfil de usuario. El
éxito de un sistema recomendador se centra en el grado de concordancia que pueda
obtener entre la representación de las preferencias del usuario y las verdaderas
preferencias del usuario [24].
3.2.1 Técnicas de Recomendación
Si bien dentro de las técnicas propuestas para realizar sistemas de recomendación
se destacan el filtrado colaborativo y las recomendaciones basadas en contenido, existen
otros enfoques para el desarrollo de estos sistemas, tales como: las recomendaciones
basadas en conocimiento, basadas en funciones de utilidad o en datos demográficos. En
esta sección se detallan los aspectos principales de estas técnicas, junto a los enfoques
híbridos que han surgido.
3.2.1.1 Recomendación Basada en Contenido
Las recomendaciones basadas en contenido [25] [26], son una consecuencia y
continuación de las investigaciones de filtrado de información realizadas por [27]. En estos
sistemas los ítems interesantes son definidos mediante sus características asociadas. Un
sistema basado en contenido aprende los intereses del usuario basándose en las
características de los ítems que el usuario ha adquirido o se ha interesado en el pasado,
con el objetivo de recomendar ítems similares que puedan resultar interesantes en el futuro.
Por ejemplo, si se realiza una actividad con características similares (deporte: salir a correr,
deporte andar en bicicleta, en cierto sentido se las podrían considerar similares, hay una
clara tendencia del usuario a hacer deportes).
Figura 5: Perfil de usuario basado en el contenido
25
Dado que esta técnica trabaja sugiriendo al usuario ítems que sean similares a los
previamente contemplados en el pasado, el perfil debe ser capaz de mantener
representaciones de tales ítems. Por ende, la representación del perfil se encuentra ligada a
las características particulares de los ítems de cada dominio.
Ventajas respecto a otros enfoques:
•
No agrega esfuerzo extra al usuario, es decir, el usuario no tiene que proveer
opiniones acerca de los ítems. Simplemente se estudian las preferencias y se sacan
conjeturas respecto a la similitud de un ítem con tales preferencias (teniendo en cuenta la
descripción y características de los ítems).
•
Debido a que la información se encuentra en el ítem, no es necesario contar con la
opinión o ratings de otros usuarios para efectuar recomendaciones.
Sin embargo esta técnica presenta algunas desventajas:
•
Limitación respecto a la estructura del ítem: Este tipo de enfoque tiene el problema
de encontrarse limitado por las características que están explícitamente asociadas con los
ítems a recomendar. Esto hace que las recomendaciones queden a merced de la
información descriptiva disponible.
•
Análisis de contenido limitado: Si existe más de un ítem con las mismas
características, estos no pueden ser diferenciados con respecto a su calidad. Por ejemplo,
en el caso de dos actividades con características similares, no puede evaluarse cuál de las
dos actividades gustará más.
•
Tendencia a recomendar ítems similares (portfolio effect): Tiende a realizar
sugerencias de ítems muy similares a los que el usuario ha adquirido previamente.
Igualmente en este punto deben contemplarse las excepciones relativas al dominio de
aplicación del recomendador, en nuestro dominio, puede pretenderse recomendar
actividades similares a los que el usuario ha realizado anteriormente.
•
Problema de usuario nuevo: Al incorporarse un nuevo usuario al sistema, este
deberá adquirir (o contemplar) un número suficiente de ítems antes de que el sistema tenga
suficientes evidencias como para poder inferir las preferencias y realizar recomendaciones
confiables.
Varios proyectos de investigación han utilizado únicamente filtrado basado en
contenido para realizar las recomendaciones. Entre ellos se encuentran: Woodruff [28] el
cual es un sistema de recomendación de material de lectura digital; Krakatoa [29], un
26
periódico personalizado, donde el perfil de usuario es creado en base a un conjunto de
palabras clave y ratings capturados tanto explícitamente como implícitamente. Para
identificar el tema del artículo se hace un análisis de frecuencia para extraer las palabras
clave. Si a un usuario le gusta un documento, los pesos de las palabras extraídas se
añaden a los pesos de las palabras correspondientes en el perfil del usuario. Este proceso
es conocido como retroalimentación de relevancia [30].
3.2.1.2 Recomendación Colaborativa
Estos sistemas se basan en las opiniones de otros usuarios y sugieren o predicen la
utilidad de un cierto ítem para un usuario activo en base a esas opiniones [31].
Para cada usuario se crea un conjunto de "vecinos cercanos", usuarios cuyas
evaluaciones anteriores tienen grandes semejanzas a las del usuario en cuestión. Los
resultados para los elementos no calificados se predicen en base a la combinación de
puntos (scores) conocidos de los vecinos cercanos.
Figura 6: Vecinos cercanos con preferencias similares
Un perfil de usuario típico en un sistema colaborativo consiste en un vector de ítems
y sus ratings, el que será continuamente actualizado a medida que el usuario interactúa con
el sistema. Los ratings de los usuarios pueden obtenerse tanto explícitamente como
también puede darse el caso en el que la valoración de un ítem sea extraída implícitamente,
es decir se extrae indirectamente infiriendo a través del comportamiento del usuario.
Varias técnicas han sido propuestas para la creación de estos perfiles, incluyendo
redes Bayesianas [43], y técnicas de clustering, las cuales identifican grupos de usuarios
con preferencias similares.
Al igual que en el caso de recomendaciones basadas en contenido, esta técnica
crea un modelo a largo plazo, los perfiles de usuario son modelos que deben ser
27
actualizados a medida que aumentan las evidencias acerca de las preferencias del usuario
a través de sus ratings.
Varios son los factores que hacen que el filtrado colaborativo sea una buena técnica
utilizada en los sistemas de recomendación:
• Es completamente independiente de la representación de los ítems a recomendar y
logra buen desempeño en dominios de ítems complejos tales como música, películas o
gráficos, donde la variación de gustos es responsable de la variación de las preferencias
([32] denominan a esto como “correlación persona-persona”).
• No necesita conocimiento del dominio para realizar recomendaciones. Los
sistemas colaborativos confían sólo en los ratings de los usuarios y estos son usados para
recomendar ítems sin ningún tipo de dato descriptivo.
• El gran poder del enfoque colaborativo con respecto a los enfoques basados en
contenido es su capacidad de brindar a los usuarios recomendaciones inesperadas
(recomendaciones que no se darían si se estudiara solo los datos históricos del usuario).
Puede darse el caso que exista un usuarios que le de placer hacer actividades al aire libre
(picnic, ir a pescar) y que también disfrute de hacer deportes, pero en un sistema
recomendador basado en contenido entrenado sobre las preferencias de un usuario que ha
ido a pescar y hacer picnic, no será capaz de sugerir actividades para que realice deporte,
ya que no tienen nada en común estos tipos distintos de actividades. Solo mirando más allá
de las preferencias individuales aprendidas podrán realizarse otras sugerencias que puedan
ser del interés del usuario.
Sin embargo, esta técnica presenta algunas desventajas:
• Problema de arranque (ramp-up problem) [33], [34]: Este término en realidad se
refiere a dos problemas distintos, pero relacionados.
a) Problema de un nuevo usuario: Debido a que las recomendaciones son formadas
en base a la comparación de ratings entre un usuario objetivo y el resto de los usuarios, a
los enfoques basados únicamente en acumulación de ratings se les dificulta categorizar a
un usuario nuevo o a un usuario con poca cantidad de ratings..
b) Problema de un nuevo ítem: Cuando un nuevo ítem es agregado a la base de
datos no existe manera que sea recomendado a un usuario hasta que no se tenga más
información a través de otro usuario. Si un ítem no ha sido contemplado entonces no puede
ser recomendado, esto se debe a que no existen evaluaciones de los usuarios sobre el
ítem. Este problema se da particularmente en dominios de artículos periodísticos o noticias
donde existe un flujo continuo de entrada de nuevos ítems y cada usuario califica solamente
28
algunos. Esto hace necesario a los sistemas recomendadores idear algún incentivo que
estimule a los usuarios a proveer sus ratings.
Para intentar solventar este problema, los sistemas de filtrado colaborativo utilizan
alguna estrategia de recomendación inicial, ya sea recomendación basada en contenido, o
estereotipos. Esto conlleva al desarrollo de enfoques de recomendación híbridos.
•
Problema
de
ratings
dispersos
(sparsity
problem)
[36]:
Los
sistemas
recomendadores colaborativos están sujetos a la superposición de ratings entre los usuarios
(las recomendaciones a un usuario dependen de los ratings de los demás usuarios) lo cual
dificulta el desempeño de la técnica cuando el espacio de ratings es escaso. Si el conjunto
de ítems cambia muy rápidamente, entonces los ratings viejos serán de poco valor a los
usuarios nuevos. Si el conjunto de ítems es grande y los intereses del usuario apenas
varían, entonces la probabilidad de coincidir con otros usuarios será menor.
• Escalabilidad (Scalability) [35]: Un problema importante en sistemas de filtrado
colaborativo se presenta cuando crece el número de ítems o de usuarios en el sistema, lo
cual conlleva a incrementos en los cálculos para determinar el conjunto de usuarios
similares.
• Usuarios con gustos inusuales (the gray sheep problem) [34] [37]: Los sistemas de
filtrado colaborativo logran su mejor desempeño cuando el usuario pertenece a un grupo
con muchos vecinos de similares preferencias. De darse el caso, que un usuario tenga
gustos inusuales se tendrá dificultad para encontrar otros usuarios con gustos similares y de
este modo las recomendaciones pueden volverse pobres.
• Tendencia a recomendar ítems similares (The portfolio effect) [38]: Existen
dominios donde es deseable no recomendar un ítem que el usuario ya haya contemplado,
como por ejemplo noticias que el usuario haya leído.
• Otro problema que afecta al filtrado colaborativo es que si un usuario no utiliza
regularmente el sistema y los gustos de este han variado, el sistema tenderá a seguir
recomendando ítems en base a las preferencias del pasado.
Algunos de los sistemas más importantes utilizan esta técnica, GroupLens [39] es un
recomendador de noticias en el que los usuarios califican las noticias en una escala de 1 a
5, posteriormente se generan grupos de usuarios evaluando su similitud. Este es
considerado como el primer sistema que ha empleado exitosamente filtrado colaborativo.
Ringo [40] es un sistema en el que los usuarios brindan explícitamente sus ratings
para obtener recomendaciones de CDs de audio. Este sistema compara los perfiles (ratings)
para encontrar usuarios con gustos musicales similares.
29
Otros ejemplos de recomendadores colaborativos son el sistema de recomendación
de libros Amazon.com y recomendador de películas MovieLens del grupo Grouplens.
3.2.1.3 Recomendación Basadas en Conocimiento
Las recomendaciones basadas en conocimiento intentan sugerir ítems mediante la
inferencia de las necesidades y preferencias del usuario. En algún sentido todas las
técnicas pueden ser descritas como que realizan algún tipo de inferencia. Pero este enfoque
se distingue en el hecho de que tiene conocimiento funcional aparte del conocimiento sobre
los objetos a recomendar [34]. El conocimiento funcional es conocimiento acerca de cómo
un ítem particular se ajusta a las necesidades del usuario, por consiguiente se puede
razonar sobre la relación entre una necesidad y una posible recomendación.
El sistema debe ser capaz de poder realizar el mapeo entre las necesidades del
usuario y los ítems a recomendar.
Estos sistemas tienen la ventaja de no requerir de ratings para realizar las
recomendaciones. No obstante, tiene el problema de necesitar significativo esfuerzo para
construir y mantener los modelos.
El perfil de usuario puede ser cualquier clase de estructura de conocimiento que
soporte inferencias del tipo que se necesiten. El conocimiento usado por un recomendador
basado en conocimiento puede tomar muchas formas. Sistemas como Entree [41] utilizan
conocimiento del arte culinario para inferir similitud entre restaurantes en base a las
preferencias introducidas en la consulta del usuario.
3.2.1.4 Sistemas de Recomendación Demográficos
Los sistemas de recomendación demográficos realizan recomendaciones en base a
la categorización de los usuarios a través de sus atributos personales tales como edad,
ocupación y estado civil [44].
La principal ventaja de este enfoque es que no crea un modelo de usuario a largo
plazo como lo hacen las técnicas colaborativas o basadas en contenido. La información
sobre las preferencias del usuario es inferida de acuerdo a la clase demográfica a la que
pertenezca el cliente. Esta particularidad hace que esta técnica no cuente con el problema
de un “nuevo usuario”.
30
3.2.1.5 Sistemas de Recomendación Basados en Utilidades
Al igual que los sistemas de recomendación demográficos, los sistemas
recomendadores basados en utilidades no son sistemas de aprendizaje a largo plazo en los
que se trate de construir generalizaciones acerca de sus usuarios. Este tipo de sistemas
basan sus sugerencias en función de la evaluación de la concordancia entre las
necesidades del usuario y las opciones disponibles.
Este tipo de enfoque realiza las sugerencias mediante el cómputo de la utilidad de
un ítem con respecto al usuario. Claro está que el problema es cómo crear tal función de
utilidad para el usuario [41].
Una ventaja es que pueden contemplarse dentro de la función de utilidad atributos
no relacionados con el producto, tales como confiabilidad del proveedor y disponibilidad del
producto, haciendo posible de este modo por ejemplo realizar cambios de precio de acuerdo
a si el cliente necesita la entrega inmediatamente.
Si bien los sistemas basados en utilidades son flexibles, por otra parte tienen fallas.
El usuario debe construir o completar una función de preferencias, y por consiguiente debe
pesar la relevancia de cada una de las posibles características. A menudo esto crea una
interacción que es abrumadora para el usuario. Además, los cambios importantes en el
espacio de productos en el que se maneja el cliente, implican un completo reajuste de la
función de utilidad.
3.2.2 Captura de las Preferencias del Usuario
Las preferencias o intereses de los usuarios son mapeadas en lo que se denomina
perfil de usuario. Estos perfiles forman la base con la cual se generan las recomendaciones
personalizadas de cualquier sistema de recomendación.
Los algoritmos de aprendizaje del perfil deben lidiar con la tarea de reflejar los
continuos cambios que puedan suscitarse en las preferencias de los clientes. Estos
algoritmos pueden extraer conocimiento sobre las preferencias del usuario explícitamente,
implícitamente o mediante una combinación de ambos enfoques [42].
Técnicas explícitas de construcción de perfiles requieren que el usuario sea quien
especifique cuales son sus preferencias y gustos, para lo cual se utilizan técnicas como
llenado de formularios o encuestas, autocategorización del usuario en alguna taxonomía
predefinida o calificación de los ítems (frecuentemente encontrado en enfoques
colaborativos).
31
Por otra parte, en las técnicas implícitas no se requiere cooperación por parte del
usuario para obtener un esquema de sus preferencias. Este enfoque utiliza técnicas de
machine learning, data mining, KDD (knowledge discovery in databases) o de recuperación
de información para construir un modelo de las preferencias del usuario.
Las técnicas explícitas proveen una mayor certeza sobre las preferencias del usuario
a costa de una engorrosa actualización del perfil por parte del usuario, lo cual puede resultar
tedioso y en el caso extremo puede llegar a suprimir su interacción con la aplicación.
Contrariamente, las técnicas implícitas cuentan con la ventaja de liberar al usuario de la
tediosa tarea de mantener actualizado su perfil a costa de un menor desempeño en las
inferencias sobre sus gustos.
3.2.3 Dominios de Aplicación de los Sistemas de Recomendación
Los sistemas de recomendación han llegado para quedarse. Han sido y están siendo
utilizados en cada vez más campos de aplicación. Abarcando desde los más tradicionales
(películas, libros, música) hasta otros más sofisticados (destinos turísticos, comercio
electrónico, recorridos en bicicleta como Cyclopath, etc).
Figura 7: Los sistemas de recomendación llegaron para quedarse
La mayor parte de los sistemas de recomendación se encuentran implantados en
sistemas de venta, donde el objetivo es tentar al usuario a comprar, es decir se utiliza como
estrategia de marketing. De este modo se pueden desarrollar productos que se adapten a
las características particulares de los clientes.
También existen otros sistemas que no son de venta directa. Pero sí que poseen
una masa crítica de gente, y obtienen generan ingresos monetarios haciendo publicidad en
32
la página. Tal es el caso de YouTube. Youtube no cobra suscripción, y el usuario percibe
que el servicio es gratuito. Lo que en realidad hay de fondo es un sistema publicitario,
donde cada determinada cantidad de tiempo y dependiendo de los videos que se desean
ver. Se pasa un corto publicitario, orientado al perfil del usuario que está utilizando la
aplicación. Donde se lo obliga a ver determinados segundos, para luego poder cancelar el
video si así lo deseara el usuario.
Otro caso muy conocido es la plataforma de videos on-line de Netflix. Netflix no solo
que gasta millones de dólares en mejorar su algoritmo de recomendación de películas, sino
que lo expresa libremente hacia la comunidad web. Demostrando el alto interés que tiene
poder realizar una recomendación acertada al usuario, que está buscando en un mar de
opciones algo para mirar. Según Netflix en relación a la naturaleza de sus usuarios,
desarrolló una medida de tiempo de 2 minutos y medio, donde sabe que si el usuario no
encuentra algo interesante para ver en ese lapso, sale de la plataforma. De más está decir
que si eso es recurrente el usuario terminará cancelando la suscripción a la plataforma,
impactando negativamente en la recaudación de Netflix.
Netflix informó a principio del 2016 que está haciendo estudios constantes para
mejorar las técnicas de recomendación. Puntualmente se espera en la próxima release del
recomendador hacer uso de técnicas híbridas de recomendación, donde se tomará en
cuenta los contenidos disponibles, el historial del usuario, la tendencia social, el horario de
conexión a la plataforma, así como también del dispositivo que se está accediendo (tablet,
smartphone, tv, pc).
3.4 Resumen
En este capítulo se presentaron a los sistemas de recomendación como una clase
de agentes personales, que realizan recomendaciones en base a las preferencias del
usuario.
Por otro lado, también se expusieron las diferentes técnicas de recomendación existentes
más utilizadas, evidenciando sus fortalezas y debilidades.
33
4 Machine Learning
Machine Learning es un tipo de inteligencia artificial (IA) que proporciona a las
computadoras la habilidad de aprender sin ser programadas de forma explícita. Machine
Learning se centra en el desarrollo de programas informáticos que pueden enseñar a sí
mismos para crecer y cambiar cuando son expuestos a nuevos datos.
4.1 Aprendizaje supervisado versus no supervisado
Machine learning es una rama de Inteligencia Artificial que usa algoritmos, por
ejemplo, para encontrar patrones en los datos y predecir eventos futuros. En Machine
Learning un dataset de observaciones llamado instancias es compuesto por un número de
variables llamados atributos. El aprendizaje supervisado es el modelado de estos datasets
que contienen instancias etiquetadas. En el aprendizaje supervisado, cada instancia puede
ser representada como (x, y), donde ‘x’ es un conjunto de atributos independientes (pueden
ser discretos o continuos) e ‘y’ es el atributo objetivo. El atributo objetivo ‘y’ puede ser
continuo o discreto tambien; sin embargo la categoría de modelado es de regresión si
contiene un objetivo continuo, y de clasificación si el objetivo es discreto (que también se
llama etiqueta de clase). La tabla 2 muestra un dataset para aprendizaje supervisado con
siete atributos independientes x1,x2, …, x7, y un atributo objetivo dependiente ‘y’. Más
específicamente, x1, x2 ∈ {b, n} y x3, . . . , x7 ∈ R y el atributo objetivo ‘y’ ∈
{up,unchanged,down}. El atributo tiempo es usado para identificar una instancia y no es
usado en el modelo. Los datasets de entrenamiento y prueba son representados de la
misma manera, sin embargo, donde el conjunto de entrenamiento contiene un conjunto de
vectores de valores de etiqueta conocida (y), las etiquetas para el conjunto de prueba son
desconocidas.
Tiempo
x1
x2
x3
x4
x5
x6
x7
y
9:30
b
n
-0.06
-116.9
-21.7
28.6
0.209
up
9:31
b
b
0.06
-85.2
-61
-21.7
0.261
unchanged
9:32
b
b
0.26
-4.4
-114.7
-61
0.17
down
9:33
n
b
0.11
-112.7
-132.5
-114.7
0.089
unchanged
9:34
n
n
0.08
-128.5
-101.3
-132.5
0.328
down
34
Tabla 2: Ejemplo de dataset para aprendizaje supervisado.
En aprendizaje no supervisado, el dataset no contiene un atributo objetivo, o una
salida conocida. Como los valores de clase no son determinados a priori, el propósito de
esta técnica de aprendizaje es encontrar similitudes entre los grupos o grupos intrínsecos
dentro de los datos. Una demostración muy sencilla de dos dimensiones (dos atributos) se
muestra en la Figura 8 con los datos particionados en cinco clusters. Un caso podría ser, sin
embargo, tener que particionar los datos en dos clusters o tres, etc., La respuesta “correcta”
depende en el conocimiento previo o sesgos asociados con el dataset para determinar el
nivel de similitud requerido por el problema subyacente. Teóricamente, es posible tener
tantos clusters como instancias de datos, aunque esto contradice al propósito del clustering.
Dependiendo del problema y los datos disponibles, el algoritmo requerido puede seguir la
técnica de aprendizaje supervisado o no supervisado. En esta tesis, el objetivo es predecir
actividades para un usuario, que le genere un nivel de satisfacción tal que aumente el nivel
de satisfacción objetivo en la proporción esperada. Dado que las actividades históricas del
usuario son conocidas, esto requiere una técnica de aprendizaje supervisado.
Adicionalmente, se decidió explorar el uso de diferentes algoritmos ya que alguno
puede ser mejor que otro, dependiendo de los datos subyacentes.
Figura 8: Ejemplo de la técnica de aprendizaje no supervisado – clustering
35
4.2 Algoritmos supervisados de aprendizaje
4.2.1 K vecinos más cercanos (Nearest-neightbor)
El método de machine learning de los K vecinos más cercanos (kNN - k nearest
neighbor) es uno de los más simples y generalmente se refiere a un aprendizaje perezoso
ya que el aprendizaje no se implementa realmente hasta que la clasificación o la predicción
es requerida. Este toma la clase más frecuente medida por la distancia euclídea ponderada
(o alguna otra medida de distancia) entre los K ejemplos de entrenamiento más cercanos en
el espacio de características. En problemas más específicos como la clasificación de texto,
kNN ha mostrado que funciona tan bien como otros modelos más complejos [46]. Cuando
hay atributos nominales presentes, generalmente se recomienda llegar a una “distancia”
entre los distintos valores de los atributos [47]. Una desventaja de usar este modelo es los
tiempos de clasificación lentos, sin embargo se puede mejorar la velocidad usando
algoritmos de reducción de dimensionalidad; por ejemplo, reduciendo el número de
atributos. Ya que el aprendizaje no se implementa hasta la fase de clasificación, este no es
un algoritmo apto para utilizar cuando se necesitan decisiones rápidamente.
4.2.2 Naive Bayes
El clasificador de tipo Naive Bayes, es un modelo probabilístico eficiente basado en
el teorema de Bayes, el cual examina la probabilidad de que características aparezcan en
las clases predichas. Dado el conjunto de atributos X = {x1, x2, . . . , xn}, el objetivo es
construir la probabilidad a-posteriori para el evento Ck entre el conjunto de posibles clase
resultado C = {c1, c2, . . . , ck}. Por lo tanto, con las reglas bayesianas P(Ck|x1, . . . , xn) ∝
P(Ck)P(x1, . . . , xn|Ck), donde P(x1, . . . , xn|Ck) es la probabilidad que el atributo X
pertenezca a Cj, asumiendo independencia 1​ ​podemos reescribir como:
Una nueva instancia con un conjunto de atributos X es etiquetada con la clase Cj
que logra la más alta probabilidad a-posteriori.
36
4.2.3 Tabla de decisión
Un clasificador de tipo tabla de decisión se construye sobre la idea conceptual de
una tabla de búsqueda. El clasificador retorna la clase mayoría del conjunto de
entrenamiento si la celda de la tabla de decisión que coincide con la nueva instancia está
vacía. En ciertos conjuntos de datos,
se puede conseguir una mayor performance de
clasificación usando tablas de decisión en vez de otros modelos más complejos.
4.2.4 Máquinas de soporte vectorial
Las máquinas de soporte vectorial (Support Vector Machines), [48] durante mucho
tiempo han sido reconocidas como capaces de manejar de manera eficiente los datos
multidimensionales. Originalmente fueron diseñadas como un clasificador de dos clases,
aunque pueden funcionar con más clases realizando múltiple clasificaciones binarias (una a
una entre cada par de clases). El algoritmo funciona clasificando instancias basadas en una
función lineal de la característica.
Adicionalmente, las clasificaciones no lineales pueden ser realizadas utilizando un
núcleo. El clasificador se alimenta con instancias pre-etiquetadas y seleccionando puntos
como vectores de soporte, el SVM busca un hiperplano que maximice el margen.
4.2.5 Redes neuronales Artificiales
Una red neuronal artificial (ANN - artificial neural network) es un grupo
interconectado de nodos con la intención de representar la red de neuronas en el cerebro.
Son muy usados en literatura, por su habilidad de aprender patrones complejos.
Presentaremos una breve reseña de su estructura en esta sección. Una red neuronal
artificial está comprendida por nodos (representados como círculos en la Figura 9), una
capa de entrada representada como x1…, x6, una capa opcional oculta, y una capa de
salida y. El objetivo de un ANN es determinar un conjunto de pesos w (entre la entrada, el
oculto y la salida de nodos) esto minimiza la suma total de errores cuadrados. Durante el
entrenamiento, estos pesos wi son ajustados de acuerdo el parámetro de aprendizaje λ ∈
[0, 1] hasta que las salidas sean consistentes. Los valores de λ altos pueden realizar
cambios en los pesos que son demasiado drásticos, mientras que valores que son muy
pequeños pueden requerir más iteraciones (llamadas epochs) antes que el modelo aprenda
lo suficiente de los datos de entrenamiento.
37
La dificultad de usar redes neuronales es encontrar parámetros que aprendan de los
datos de entrenamiento sin sobre ajuste (memorizar los datos de entrenamiento) y por lo
tanto resulte en un mal desempeño con los datos que no fueron vistos. Si hay muchos
nodos ocultos, el sistema puede sobre ajustar los datos actuales, mientras que si hay muy
pocos, puede evitar que el sistema ajuste adecuadamente los datos de entrada. Además,
una selección de criterio de parada tiene que ser elegida. Esto puede incluir la suspensión
en función de cuándo el error total de la red cae por debajo de un cierto nivel de error
predeterminado o cuando un cierto número de epochs (iteraciones) se ha completado.
Figura 9: Ejemplo de una red neuronal artificial de multicapa tipo feed-forward
4.2.6 Árboles de decisión
Los árboles de decisión son clasificadores muy utilizados debido a que el algoritmo
crea reglas que son fáciles de entender e interpretar. Una de las formas más populares, el
C4.5. Las mejoras son: 1) es más robusto al ruido, 2) que permite el uso de atributo
continuo, y 3) que funciona con datos faltantes. El C4.5 comienza como un algoritmo de
divide y conquista recursivo, en primer lugar con la selección de un atributo del conjunto de
entrenamiento para colocarlo en el nodo raíz. Cada valor del atributo crea una nueva rama,
con la repetición de este proceso de forma recursiva utilizando todos las instancias que
llegan a esa rama. Un nodo ideal contiene todos (o casi todos) los atributos de una clase.
Para determinar el mejor atributo a elegir para un nodo en particular en el árbol, la ganancia
en entropía de la información de la decisión se calcula.
38
Figura 10: Ejemplo de un árbol de decisión
4.2.7 Ensambles
Un ensamble (conjunto) es una colección de múltiples clasificadores base que toman
un nuevo ejemplo, pasado a cada uno de los clasificadores base, y luego combina esas
predicciones de acuerdo a algún método, como por ejemplo a través del voto. La motivación
es que mediante la combinación de las predicciones, el conjunto es menos probable de
clasificar erróneamente. Por ejemplo, la Figura 11.a muestra un conjunto con 25
clasificadores hipotéticos, cada uno con una tasa de error independiente de 0,45
(suponiendo un problema de dos clases uniforme). La probabilidad de obtener k
clasificadores de votos incorrectos es una distribución binomial:
La probabilidad de obtener 13 o más en error es de 0.31, la cual es menor que la
tasa de error del clasificador individual. Esta es una ventaja potencial de usar múltiples
modelos. Esta ventaja de usar múltiples modelos (ensambles) se da bajo la suposición que
la tasa de error del clasificador individual es menor a 0.50. Si la tasa de error del clasificador
independiente es 0.55, entonces la probabilidad de 13 o más en error es 0.69 - sería mejor
no usar un conjunto de clasificadores. La Figura 11.b ​muestra la tasa de error del conjunto
para tres tasas de error independientes, 0.55, 0.50, y 0.45 para conjuntos que contienen un
número impar de clasificadores, desde 3 a 101. En la figura se puede observar que cuanto
menor es la tasa de error del clasificador independiente, mayor el número de clasificadores
en el conjunto, menor es la probabilidad de predicción incorrecta de la mayoría de los
clasificadores. La idea de la independencia del clasificador puede ser poco razonable,
teniendo en cuenta que los clasificadores pueden predecir de una manera similar debido al
conjunto de entrenamiento. Obtener un clasificador base que genere errores tan des
relacionados como sea posible es lo ideal. La creación de un conjunto diverso de
clasificadores dentro del ensamble se considera una propiedad importante ya que la
39
probabilidad de que una mayoría de los clasificadores base clasifiquen erróneamente la
instancia se reduce. Estos métodos promueven la diversidad mediante la construcción de
clasificadores base en diferentes subconjuntos de los datos de entrenamiento o diferentes
pesos de los clasificadores.
Figura 11(a): Probabilidad de que precisamente n de 25 clasificadores están en el error
(suponiendo que cada uno tiene tasa de error de 0,45).
Figura 11(b): Tasa de error vs el número de clasificadores en el conjunto (empleando voto
mayoritario) para tres tasas de error independientes.
4.3 Resumen
En este capítulo se expuso el concepto de Machine Learning con sus dos enfoques
de aprendizaje, supervisado y no supervisado. Por último se describieron y analizaron los
algoritmos y técnicas de aprendizaje supervisado.
40
5 Aplicaciones Móviles
Un dispositivo móvil es una unidad de tamaño reducido, fácil de transportar para el
usuario que posee capacidades de procesamiento, conexión a internet, memoria,
almacenamiento, etc. Se entiende por los mismos a los teléfonos celulares (smartphones),
tablets y por último; en menor medida las PDAs y los eReaders.
Figura 12: Dispositivos móviles
Estos dispositivos, al igual que las computadoras, poseen un sistema operativo. El
sistema operativo juega el rol de intermediario entre el usuario y el hardware de la unidad.
El propósito del Sistema Operativo es crear un entorno en el que el usuario pueda ejecutar
programas. En pocas palabras es un facilitador al usuario, abstrayéndolo de complicados
procesos para llevar a cabo una tarea.
Para determinar qué tipo de dispositivo se utilizará en el presente trabajo, se priorizó
alcanzar una masa crítica de usuarios. Hoy día, la manera más simple de lograrlo es a
través de una aplicación que corra en un dispositivo móvil. Estos últimos años, la tendencia
indica que cada vez más personas acceden a la información a través de sus celulares, en
vez de una computadora.
Actualmente los sistemas operativos de dispositivos móviles que se encuentran
dominando el mercado según la información recabada en el 2015 son:
41
Figura 13: Sistemas operativos móviles en el mundo y Argentina 2015
Puede verse una clara tendencia que los sistemas operativos móviles más utilizados
en el mundo son al momento, IOS que utiliza el Iphone y los celulares con sistema operativo
Android (sea la marca que fuera). A nivel mundial Android supera por 5 puntos al Iphone
pero en Argentina la brecha se agranda obteniendo un total de 81.6% del mercado de uso
de celulares en Argentina.
Todo indica, que nuestra aplicación debe ser basada en un sistema operativo
Android si deseamos que esté disponible para la mayor cantidad de personas. Tanto a nivel
mundial como solamente de Argentina.
5.1 Android
Android es un Sistema Operativo (SO), además de una plataforma de software,
basado en el núcleo de Linux. Diseñada desde un principio para dispositivos móviles,
permite controlar dispositivos por medio de bibliotecas desarrolladas o adaptadas por
Google mediante el lenguaje de programación Java.
Es una plataforma de código abierto. Esto quiere decir, que cualquier desarrollador
puede crear, desarrollar aplicaciones y compilarlas a código nativo. Inicialmente, Android
fue desarrollada por Google Inc. aunque poco después se unió Open Handset Alliance, un
consorcio de 48 compañías de Hardware, Software y telecomunicaciones, las cuales
llegaron a un acuerdo para promocionar los estándares de códigos abiertos para
dispositivos móviles.
42
Figura 14: Logotipo del último OS Android (Nougat)
Google sin embargo, ha sido quien ha publicado la mayoría del código fuente de
Android bajo la licencia de Software Apache, una licencia de software libre y de código
abierto a cualquier desarrollador.
Arquitectura Android:
Figura 15: Arquitectura Android
La arquitectura interna de la plataforma Android, está básicamente formada por 4
componentes (Figura ).
●
Aplicaciones (Applications)​. Todas las aplicaciones creadas con esta plataforma,
incluirán como base un cliente de email (correo electrónico), calendario, programa
de SMS, mapas, navegador, contactos, y algunos otros servicios mínimos. Todas
ellas escritas en el lenguaje de programación Java.
43
●
Framework de Aplicaciones​. Todos los desarrolladores de aplicaciones Android,
tienen acceso total al código fuente usado en las aplicaciones base. Esto ha sido
diseñado de esta forma, para que no se generen cientos de componentes de
aplicaciones distintas, que respondan a la misma acción, dando la posibilidad de que
los programas sean modificados o reemplazados por cualquier usuario sin tener que
empezar a programar sus aplicaciones desde el principio.
●
Bibliotecas​. Android incluye en su base de datos un set de librerías C/C++, que son
expuestas a todos los desarrolladores a través del framework de las aplicaciones
Android System C library, librerías de medios, librerías de gráficos, 3D, base de
datos, entre otros.
●
Runtime de Android​. Android incorpora un conjunto de librerías que aportan la
mayor parte de las funcionalidades disponibles en las librerías base del lenguaje de
programación Java. La máquina virtual está basada en registros, y ejecuta clases
compiladas por el compilador de Java que anteriormente han sido transformadas al
formato .dex (Dalvik Executable) por la herramienta ''dx''.
●
Dalvik​. Es la máquina virtual(VM - Virtual Machines) que utiliza el sistema operativo
Android, la cual ejecuta las aplicaciones en los dispositivos con este SO. Los
programas son escritos en el lenguaje JAVA y compilados a bytecode. Estos son
luego convertidos desde archivos (compatibles con Java VM) “.class” hacia archivos,
compatibles con Dalvik “.dex” (executables Dalvik) antes de instalarlos en el
dispositivo. El formato Dalvik, compacto y ejecutable, fue diseñado para adecuarse a
sistemas que están restringidos en términos de memoria y velocidad de procesador.
La licencia de esta máquina virtual sigue la filosofía código abierto. A menudo Dalvik
es nombrada como una máquina virtual Java, pero esto no es estrictamente
correcto, ya que el bytecode con el que opera no es Java bytecode. Sin embargo, la
herramienta dx incluida en el SDK de Android permite transformar los archivos class
de Java compilados por un compilador Java al formato de archivos Dex. Dalvik fue
diseñada para que un dispositivo pueda ejecutar múltiples instancias de la VM.
5.2 Generalidades de las aplicaciones Android
En Android, las aplicaciones se encuentran escritas en el lenguaje de programación
Java. Las herramientas del SDK de Android compilan el código – junto con cualquier archivo
44
de datos o recursos – en un Android package, un nuevo archivo con la extensión .apk. Todo
el código en un .apk es considerado como una aplicación y es el archivo que los dispositivos
con el sistema Android utilizan para instalar la aplicación. Una vez instalada la aplicación en
el dispositivo, cada aplicación Android “vive” en su propio security sandbox:
●
El sistema operativo Android es un sistema Linux multi-usuario, en el cual cada
aplicación es un usuario diferente.
●
Por defecto, el sistema asigna a cada aplicación un único ID de usuario de Linux
(este es usado solo por el sistema y desconocido por la aplicación). El sistema
asigna permisos para todos los archivos de la aplicación, de esta manera, solo el ID
de usuario asignado a esa aplicación puede acceder a los mismos.
●
Cada proceso tiene su propia máquina virtual (VM), por lo tanto, el código de una
aplicación se ejecuta aislado del resto de las aplicaciones.
●
Por defecto, cada aplicación se ejecuta en su propio proceso Linux. Android lanza el
proceso cuando cualquiera de los componentes de la aplicación necesita ser
ejecutado, luego mata el proceso cuando no es necesario o cuando el sistema debe
recuperar memoria para otras aplicaciones.
De esta manera, el sistema Android implementa el principio de privilegio mínimo
(least privilege). Por lo tanto, cada aplicación por defecto, tiene acceso solo a los
componentes que requiere para realizar su trabajo. Esto crea un ambiente muy seguro en el
cual una aplicación no puede acceder a partes del sistema para las cuales no posee
permisos. Sin embargo, hay formas de que una aplicación comparta datos con otras
aplicaciones y para una aplicación para acceder a los servicios del sistema:
●
Es posible determinar que dos aplicaciones compartan el mismo ID de usuario de
Linux, en dicho caso ambas son capaces de acceder a los archivos de la otra. Para
conservar los recursos del sistema, las aplicaciones con los mismos ID de usuario
también se pueden ejecutar en el mismo proceso de Linux y compartir la misma VM
(la aplicación también deberá ser firmada con el mismo certificado).
45
●
Una aplicación puede pedir permisos para acceder a datos del dispositivo, como los
contactos del usuario, mensajes SMS, la cámara, entre otros. Todos los permisos de
aplicación deben ser otorgados al momento de requerir usarlos.
5.3 Componentes de las Aplicaciones
Los componentes de aplicación son la esencia de una aplicación Android. Cada
componente es un punto distinto por el cual el sistema puede ingresar a la aplicación. No
todos los componentes son puntos de entrada para el usuario y algunos tienen
dependencias entre sí, pero cada uno existe como una entidad, juegan un rol específico;
cada uno de ellos ayuda a definir el comportamiento general de la aplicación.
Existen 4 tipos diferentes de componentes de aplicación. Cada tipo sirve a un propósito
diferente y tiene su propio ciclo de vida que define como un componente es creado y
destruido.
Los 4 tipos de componentes de aplicación son:
●
Activity/Fragment. Representa una única pantalla con una interfaz de usuario. Por
ejemplo, una aplicación de email puede tener una actividad que muestre la lista de
nuevos emails, otra actividad para componer un email, y otra actividad para leer
emails. Aunque las actividades trabajan juntas para formar una experiencia de
usuario cohesiva en la aplicación de email, cada actividad es independiente de las
demás. Por esta razón, una aplicación diferente puede iniciar cualquiera de estas
actividades (si la aplicación de email lo permite). Por ejemplo la aplicación de la
cámara puede iniciar la actividad que compone un email, para que el usuario pueda
compartir su foto. En versiones posteriores a 3.0 de Android, se introdujo el concepto
de Fragment, el cual debe ser considerado como un componente de una Actividad,
con su ciclo de vida y con la particularidad que pueden realizar invocaciones entre
componentes.
●
Service. Es un componente que se ejecuta en segundo plano para realizar
operaciones de larga ejecución o para realizar trabajos para procesos remotos. Un
servicio no provee una interfaz de usuario. Por ejemplo, un servicio puede reproducir
música en segundo plano mientras el usuario se encuentra en una aplicación
diferente, o puede recuperar datos desde la red sin bloquear la interacción del
46
usuario con una actividad. Otro componente, como una actividad, puede inicializar el
servicio y dejarlo en ejecución o enlazarlo para interactuar con el.
●
BroadcastReceiver. Es un componente que responde a mensajes de difusión en
todo el sistema. Muchas emisiones (broadcast) se originan en el sistema; por
ejemplo, una emisión anuncia que la pantalla se apagó, la batería está baja de
energía, o una foto fue capturada. Las aplicaciones también pueden iniciar las
emisiones- por ejemplo, para comunicar a otras aplicaciones que cierta información
fue descargada al dispositivo y está disponible para ser usada. Aunque los
broadcast receivers no muestran una interfaz de usuario, pueden crear una barra de
estado de notificación para alertar al usuario cuando el evento de emisión ocurre.
Comúnmente un broadcast receiver es solo un “portal” hacia otros componentes y
está desarrollado para requerir una mínima cantidad de trabajo.
●
ContentProvider. Gestiona un conjunto compartido de datos de aplicación. Se
pueden almacenar los datos en el sistema de archivos, en una base de datos, en la
web, o en cualquier lugar persistente de almacenamiento que la aplicación pueda
acceder. A través del content provider, otras aplicaciones pueden acceder y hasta
modificar los datos (si el content provider lo permite). Por ejemplo, el sistema
Android provee un content provider que gestiona la información de los contactos del
usuario. Por lo tanto, cualquier aplicación con los permisos necesarios podrá
gestionar, a través de este contentProvider, la lectura o escritura de la información
de un contacto en particular. Además los content provider, son útiles para leer y
escribir datos que son privados a la aplicación.
Todos estos componentes deben ser definidos en un archivo que toda aplicación
Android debe especificar llamado "AndroidManifest.xml". El "Android Manifest" contiene
información esencial necesaria sobre el sistema Android, información que además es
mandatoria antes de poder ejecutar cualquier línea de código. Entre otras cosas el "Android
Manifest" contiene lo siguiente:
●
Nombre del paquete Java. Este nombre sirve como un identificador único de la
aplicación.
●
Describe todos los componentes de la aplicación (Actividades, Servicios, "Broadcast
receivers" y "Content providers"). Nombre de cada clase y el componente que
47
implementa. De esta forma el sistema Android sabe que componentes hay y bajo
qué condiciones se ejecutarán.
●
Android Manifest también determina qué procesos contendrán los componentes de
la aplicación.
●
Determina que permiso tiene la aplicación para acceder a partes protegidas del API
e interactuar con otras aplicaciones.
●
También determina qué permisos tienen otros para acceder a los componentes de la
aplicación.
●
Lista las clases de instrumentación que proporcionan perfiles y otra información de
ejecución. Esta declaración solo está presente en desarrollo y pruebas, cuando la
aplicación es publicada se elimina.
●
Declara el nivel mínimo del API Android.
Un aspecto único del diseño del sistema Android es que cualquier aplicación puede
iniciar un componente de otra aplicación. Por ejemplo, si el usuario desea capturar una foto
con la cámara del dispositivo, existe una posibilidad de que otra aplicación haga eso y que
nuestra aplicación lo reuse, en vez de desarrollar una actividad para capturar una foto. La
aplicación no necesita incorporar o enlazar el código de la aplicación de la cámara. En su
lugar, la aplicación simplemente puede iniciar la actividad en la aplicación de la cámara que
captura la foto. Cuando se completa, la foto es retornada por un evento a la aplicación que
la solicitó para su uso. El usuario ve como que la cámara es parte de su aplicación cuando
en realidad se hizo uso de un componente.
Cuando el sistema inicia un componente, se inicia el proceso de esa aplicación (si
no está en ejecución en ese momento) e instancia las clases necesarias. Por ejemplo, si la
aplicación inicia la actividad en la aplicación de la cámara que captura la foto, esa actividad
se ejecuta en el proceso que pertenece a la aplicación de la cámara, no en el proceso de la
aplicación que lo llama. Por este motivo, a diferencia de las aplicaciones en la mayoría de
otros sistemas, las aplicaciones Android no poseen un solo punto de entrada (por ejemplo,
no existe una función main()).
Dado que el sistema ejecuta cada aplicación en un proceso diferente con permisos
de archivos que restringen el acceso a otras aplicaciones, la aplicación no puede
directamente activar un componente de otra aplicación. Esto se hace por medio del SO
Android. Entonces, para activar un componente de otra aplicación, se debe enviar un
48
mensaje al sistema que especifique el intento(intent) de iniciar un componente en particular.
Luego el sistema activa el componente. A continuación (Figura 16) se muestra el ciclo de
vida de un componente y sus respectivos métodos que pueden ser sobrescritos para
agregar la funcionalidad deseada.
Figura 16: Ciclo de vida de una actividad en Android
49
5.4 Ventajas del uso de Android sobre otros sistemas operativos
móviles
●
Código abierto. El hecho de que Android esté liberado con licencia Apache y código
abierto lo convierte en un sistema operativo totalmente libre para que un
desarrollador no solo pueda modificar su código sino también mejorarlo. A través de
esas mejoras puede publicar el nuevo código y con él ayudar a mejorar el sistema
operativo para futuras versiones sin depender de fabricantes u operadoras para ver
si se libera o no dicha mejora. Del mismo modo, al ser código abierto garantiza que,
en caso de haber un bug o error, sea detectado y reparado con mayor eficacia al no
existir ninguna traba legal para indagar en su interior ni depender de nadie para
pedir autorización a su cambio.
●
Libertad. Android da completa libertad al propietario de un teléfono a instalar lo que
desee, sea desde Android Market como un ejecutable aparte (apk) no limitando la
libertad del usuario ni imponiendo software propietario para poder instalar música,
archivos, documentos directamente desde el cable USB como si de un disco externo
se tratara. La misma libertad tienen los desarrolladores o empresas pudiendo
realizar aplicaciones o complementos como Flash, Opera o cualquier otro software
sin tener que pedir permiso a nadie para ofrecerlo a los usuarios que libremente
podrán instalarlo.
●
Sin fronteras. El desarrollo de Android no está apadrinado por determinadas
operadoras, fabricantes o proveedores. Permite indagar en su código a través del
SDK o desde el propio terminal así como modificar su Firmware de manera
extraoficial (aunque esté permitido y no sea ilegal, en ocasiones conlleva a la
pérdida de la garantía del teléfono)
●
Comunidad. Android cuenta con una gran comunidad mundial de desarrolladores y
también con multitud de eventos, concursos, competiciones y reuniones así como
múltiples vías de comunicación como foros y chats oficiales para fomentar la
participación y la colaboración para encontrar mejoras e ideas para futuras
versiones.
●
Coste y gustos. Precisamente por el hecho de que Android puede ser instalado en
teléfonos de cualquier fabricante o incluso en otros dispositivos, esto permite poder
disfrutar de una amplia gama de terminales de diferentes precios y para
determinados poderes adquisitivos. Esto se da sin tener que forzar o limitar un
sistema operativo o terminal a determinadas clases dando la opción de que toda
50
persona pueda adquirir el terminal que más le guste así como de diferentes
características o costes o incluso fabricantes.
●
Personalizable. Al ser abierto y libre, Android es completamente personalizable
tanto por usuarios instalando fondos de pantalla, animaciones, widgets, skins o
temas como para fabricantes con la posibilidad de crear sus propias capas como
“MotoBlur” o “HTC Sense” permitiendo a unos y a otros poder customizar o
personalizar sus teléfonos de la mejor manera posible y dando a elegir al usuario la
interfaz más adecuada para su gusto evitando imponer un determinado estilo o
interfaz.
●
Multitarea. Android con su sistema de multitarea inteligente es capaz de gestionar
varias aplicaciones abiertas a la vez dejando en suspensión aquellas que no se
utilicen y cerrarlas en caso de resultar ya inútiles para evitar un consumo de
memoria.
●
No solo móviles. La libertad del código de Android ha hecho que en poco tiempo se
implante en multitud de dispositivos electrónicos, desde móviles hasta ordenadores
portátiles, netbooks, microondas, lavadoras, marcos digitales, navegadores GPS,
entre otros. Esto convierte a Android en un sistema operativo multifunción y
completamente escalable que garantizará su crecimiento y expansión así como
ayudará a fabricantes a tener un motor inteligente para sus productos.
5.5 Resumen
En este capítulo se expusieron los sistemas operativos móviles que se encuentran
en el mercado, junto con la variedad de dispositivos que se encuentran en el mercado. Se
relevó la información que se posee de cada uno de ellos tanto a nivel mundial como así
también en Argentina. Luego, post decisión de optar por Android, fueron expuestas las
generalidades de las aplicaciones Android, los componentes y por último las ventajas sobre
otros sistemas operativos móviles.
51
6 Trabajos relacionados
En este capítulo se reportan diferentes aplicaciones que realizan recomendaciones
personalizadas o que se encuentran ligadas al ámbito emocional. Estas aplicaciones son
utilizadas a través de dispositivos móviles, como así también a través de una página web.
Se analizará cada aplicación por separado, considerando lo expuesto en los capítulos
anteriores.
6.1 Google News (sesión de noticias de Google)
Google News es una aplicación que recopila noticias de miles de fuentes y los muestra en
una página web personalizada, y es importante para el presente trabajo ya que la tendencia
de los usuarios de Google News es utilizar la aplicación, a través de su celular mientras
están viajando a las oficinas de sus respectivos trabajos.
El sistema de recomendación de Google News se desarrolló en 2007. Se trata de la
implementación de un servicio de ​recomendación colaborativo [capítulo 3.2.1.2 del presente
trabajo] de noticias en un entorno donde los elementos cambian rápidamente, con las
limitaciones para una escalabilidad alta, considerando que existen millones de usuarios para
millones de artículos. Este sistema se caracteriza por una elevada tasa de rotación de su
catálogo de artículos: los artículos son noticias que tienen un flujo constante. Las últimas
noticias son, a menudo, las más interesantes, por lo que el sistema debe regenerar el
modelo de recomendación frecuentemente, aumentando el problema de escalabilidad
[desventaja descrita en el capítulo 3.2.1.2].
Google News sólo utiliza retroalimentación implícita para construir un perfil de un
usuario, cuando éste hace clic sobre los temas.
El sistema es puramente colaborativo y se basa en los ID de noticias e ID de los
usuarios, de modo que un usuario está representado por la lista de noticias a las cuales hizo
clic. El método basado en la similitud utiliza sólo el recuento de aquellas visitas que un
mismo usuario efectúa sobre una misma noticia al menos dos veces. El método basado en
el modelo utiliza dos técnicas de agrupamiento, una probabilística: la indexación semántica
latente PLSI, [49] y la otra MinHash [50]. PLSI es un método probabilístico para la
representación factorial de los documentos y sus términos: los términos se sustituyen por
los identificadores de usuario. En cambio, MinHash es un método de agrupamiento
52
probabilístico basado en la concatenación de p-firmas aleatorias extraídas de objetos al
grupo: se considera a los objetos como usuarios, extrayendo de sus perfiles las firmas
aleatorias.
Con la finalidad de acelerar el cálculo de PLSI y MinHash, se utiliza un framework de
paralelización de tipo MapReduce [51]. El sistema proporciona una puntuación total por un
método híbrido ponderado [52]. La puntuación global de la noticia i está dada por
∑ W a rai ​con W a
a
el peso del algoritmo
a y un rai
la puntuación dada por el
algoritmo de una de las noticias i. Los pesos se obtienen mediante un parámetro discreto
predefinido.
El sistema se utiliza como un ranking: para obtener una lista de las noticias que se
recomienda, el sistema devuelve una lista ordenada con los pesos de cada noticia.
La alta escalabilidad de la solución técnica y su adaptación a un catálogo con una
tasa muy alta de actualización son las principales particularidades de este sistema de
recomendación.
Figura 17: Landing page de GoogleNews
6.2 XPod
Xpod [53] es un reproductor de música móvil que selecciona canciones de acuerdo
al estado emocional de los usuarios y las actividades que realizan. El reproductor utiliza una
colección de datos fisiológicos externos al dispositivo llamado BodyMedia SensorWear. En
comparación con las actividades que se consideraron en nuestro trabajo, las actividades
consideradas en Xpod son más generales, y abarcan: reposo, pasiva y activa.
XPod controla una serie de variables para determinar los niveles de la actividad y el
movimiento del usuario para predecir qué música es adecuada en ese momento. Utiliza una
53
red de Bayes para inferir el estado emocional del usuario (deprimido, contento, exuberante,
o ansioso/frenético) de información de contexto teniendo en consideración el clima, ruido,
hora, género y edad. La música es luego recomendada de acuerdo al estado emocional
inferido, usando etiquetas de estado emocional en cada canción disponible.
El usuario Xpod entrena el reproductor para entender qué música prefiere bajo qué
condiciones. Después del entrenamiento, Xpod puede predecir la conveniencia de una
canción dado el contexto en el cual se encuentra el usuario.
6.3 Hulu “CF-NADE: Algorithm”
Hulu es una plataforma online de películas y series on-demand, como es Netflix. La
plataforma puede ser utilizada a través de cualquier dispositivo que posea conexión a
internet como una computadora, una tablet o un smartphone.
Investigadores de Hulu inventaron un original método de filtrado colaborativo basado
en redes neuronales, denominado estimador neuronal autorregresiva de distribución para el
filtrado colaborativo (CF-NADE en inglés).
Los servicios en línea modernos dependen en gran medida de los sistemas de
recomendación para ayudar a los usuarios a encontrar los ítems que podrían estar
interesados y ofrecer experiencias personalizadas a través del establecimiento de
relevancia entre los elementos y también entre los usuarios. En Hulu, el Personalized
Masthead (Banner personalizado), como también el Watchlist y la lista Top Picks son en
parte impulsados por el filtrado colaborativo.
Figura 18: Pantalla de Hulu de recomendación de productos
54
CF-NADE [54] modela la distribución del vector de la valoración del usuario,
optimizado mediante la maximización de la probabilidad conjunta de todos los vectores.
Figura 19: Un ejemplo demostrativo de CF-NADE
Considérese el siguiente ejemplo un usuario calificó 4 películas, "Transformers", "Bob
Esponja", "Teenage Mutant Ninja Turtles" y "Interestelar", con puntuaciones de 4,2,3 y 5,
respectivamente, en una escala de 5 estrellas. En CF-NADE, la probabilidad conjunta de
vector (4,2,3,5) es factorizada como un producto de los condicionales por regla de la
cadena, que son:
1. La probabilidad de que el usuario da "Transformers" 4 estrellas sin condicionamiento
2. La probabilidad de que el usuario da "Bob Esponja" 2 estrellas condicionado por dar
4 estrellas a "Transformers".
3. La probabilidad de que el usuario da "Tortugas Ninja" 3 estrellas, a condición de
haber dado 4 estrellas, y de 2 estrellas a "Transformers" y "Bob Esponja",
respectivamente.
55
4. La probabilidad de que el usuario da "interestelar" 5 estrellas, a condición de haber
dado 4 estrellas, 2 estrellas y 3 estrellas a "Transformers", "Bob Esponja" y
"Tortugas Ninja", respectivamente.
Cada condicional se modela mediante una red neuronal feed-forward, y los
parámetros de estas redes neuronales son compartidos entre todas las redes. CF-NADE se
“entrena” para reducir al mínimo la probabilidad del vector de usuario, de entre todos los
usuarios. Con un modelo entrenado, dado el historial de calificación de un usuario, podemos
predecir su preferencia sobre una película sin clasificar.
Figura 20: Top 5 de películas más similares recomendadas por el algoritmo
La Figura 6.3.c representa los 5 primeros vecinos más próximos de las películas de
entrada (columna más a la izquierda) utilizando similitud del coseno. En la imagen se puede
ver que los mejores 5 películas más similares a "Star Trek VI" son otras películas de Star
Trek; los mejores 5 películas más similares a "Sleepless in Seattle" son todas las películas
románticas; y los mejores 5 películas más similares a "Rey León" son todas las
animaciones.
56
6.4 PicFeel - A World of Feelings
PicFeel [55] es una aplicación social para compartir emociones basadas en
experiencias vividas. El usuario utiliza la app básicamente para sacar una foto, geo-ubicarla
y compartir la emoción que experimentó en ese momento.
Con PicFeel se pueden localizar emociones a través del mundo, encontrar los
lugares más cercanos donde la gente sintió una emoción y encontrar una ruta para llegar a
ese destino.
Figura 21: Aplicación PicFeel
Esta aplicación no posee recomendación directa de emociones a experimentar. Pero si
permite ver a través de otros usuarios de la aplicación, las experiencias que vivieron.
57
6.5 Happiness
Happiness [56] es una aplicación móvil que corre en celulares Iphone, es una
especia de diario virtual, donde la persona ingresa su estado de ánimo en relación a la
actividad que está realizando.
Figura 22: Aplicación Happiness
Adicionalmente, Happiness permite al usuario configurar recordatorios para incluir
entradas en el diario.
Figura 23: Recordatorio de la aplicación Happiness, para cargar una nueva entrada
Happiness no dispone recomendación alguna en cuanto a que actividades realizar
buscando como objetivo ser más feliz. Se lo puede considerar como un diario personal
digital. Como punto negativo, se puede mencionar que al ser estar desarrollado solamente
58
en Iphone, dispone de un público muy específico. Ya que todos los otros smartphones son
descartados
6.6 Resumen
En este capítulo se presentaron algunas de las aplicaciones móviles, que realizan
recomendaciones personalizadas a sus usuarios en sus ámbitos particulares. Por otro lado
también se expusieron aplicaciones que juegan el rol de registro de la felicidad en base a la
carga de datos del usuario en la aplicación.
Es importante destacar que hasta el momento del presente trabajo, no se pudo
encontrar una aplicación que combine el registro de actividades, con el estado de ánimo del
usuario y una futura recomendación personalizada.
59
7 Enfoque
En
los
capítulos
previos
se
presentaron distintas técnicas para realizar
recomendaciones personalizadas de actividades para que cada usuario de JoyMeter logre
alcanzar un estado emocional positivo. Para materializar y evaluar este enfoque se ha
construido una aplicación que interactúa con cada usuario en particular, para permitirle la
carga de actividades, ver el historial de actividades, el nivel actual e histórico de felicidad, y
realizar solicitudes de recomendaciones. En este capítulo se presentan los aspectos de
diseño más relevantes de JoyMeter. En la sección 7.1 se describe la aplicación y sus
principales requerimientos. En la sección 7.2 se detalla su funcionalidad y las decisiones de
diseño involucradas. En la sección 7.3 se especifica el nivel subjetivo de felicidad y la
propuesta de JoyMeter para obtenerlo. Finalmente, en la sección 7.4 se presentan las
tareas desempeñadas por el recomendador.
7.1 JoyMeter
JoyMeter es una herramienta de seguimiento de actividades personales junto con el
nivel de satisfacción obtenido al realizar las mismas. El sistema permite cargar actividades,
actualizarlas, consultarlas y ofrece un historial de los niveles de satisfacción del usuario a lo
largo del tiempo. Adicionalmente incluye un sistema de recomendación, que se detallará
más adelante. Se dispone de distintas reglas para contemplar la satisfacción otorgada por
ciertas actividades predefinidas, y el feedback provisto por los usuarios de la aplicación.
Para facilitar el acceso, la aplicación brinda la posibilidad de ser accedida desde
múltiples dispositivos.
Como funcionalidad adicional, la herramienta está integrada con Facebook para
facilitar el Login del usuario con las credenciales de Facebook, así como también permite al
usuario publicar en Facebook cada una de las actividades que este crea cuando así lo
desee.
A continuación se adjunta un diagrama nocional de los componentes de JoyMeter,
las APIs externas y el usuario interactuando con el sistema. Cada componente en este
diagrama se analizará en detalle a medida que las decisiones de diseño van siendo
detalladas.
60
Figura 24: Diagrama nocional de los componentes de JoyMeter y las APIs externas con la
interacción del usuario
A continuación, se describen los requerimientos de alto nivel, los cuales definen la
funcionalidad de la aplicación, para luego dar lugar a la descripción de las decisiones de
diseño tomadas para poder cumplir con dichos requerimientos.
7.1.1 Actividades
1. Un usuario debe poder cargar una actividad que haya realizado, junto a su
descripción, tipo de actividad y el nivel de satisfacción personal que ha alcanzado
realizando la misma.
2. Un usuario debe poder consultar las actividades cargadas en un periodo de tiempo.
3. Un usuario debe poder editar una actividad creada previamente, editando los valores
anteriormente guardados, este cambio se verá reflejado en el historial de
actividades.
61
4. Un usuario debe poder eliminar una actividad previamente cargada, una vez
eliminada no se verá en el historial de actividades.
5. El usuario puede seleccionar publicar la actividad que está siendo cargada . La
misma será publicada en Facebook en el perfil del usuario.
7.1.2 Nivel de satisfacción
1. Un usuario debe poder obtener el nivel de satisfacción diario, obtenido en relación a
las actividades del día en cuestión, como así también el nivel de satisfacción del dia
previo con aplicando un factor de decaimiento.
2. En nivel de felicidad diario como el histórico de un usuario debe ser actualizado
cuando este cargue, edite o elimine una actividad.
7.1.3 Sugerencia de actividades
1. El usuario debe poder solicitar que una actividad le sea sugerida, dicha actividad
será sugerida en base a la interacción registrada del usuario con el sistema. El
usuario podrá cargar la actividad tal cual le fue sugerida, editando parcialmente
algún valor o en todo caso ignorar la sugerencia si no es de su agrado.
2. El usuario será notificado en el dispositivo que esté utilizando, la actividad sugerida
por el sistema.
7.1.4 Autenticacion
1. El usuario debe autenticarse con el sistema, de modo que asegure su identidad para
poder acceder a la información del mismo. El sistema solicitará al usuario que
ingrese sus credenciales de Facebook, una vez validada la identidad del usuario, el
mismo podrá acceder al sistema.
7.1.5 Accesibilidad
1. El usuario podrá acceder fácilmente al sistema y en cualquier momento para cargar
aquella actividad que haya realizado.
62
2. Un usuario puede consultar el sistema y hacer actualizaciones en el mismo desde
múltiples dispositivos, los cambios se verán reflejados en todos ellos, siempre y
cuando dichos dispositivos posean conexión a internet.
7.1.6 Usabilidad
1. Un usuario sin experiencia previa en el uso del sistema debe poder operarlo
correctamente. El usuario puede utilizar el sistema de manera intuitiva, accediendo a
las funcionalidades sin complicaciones. La interfaz del sistema debe ser fácil de usar
y debe seguir los estándares preestablecidos, para que el usuario la navegue con
naturalidad.
7.1.7 Acceso offline y sincronización
1. El usuario puede consultar el historial, cargar, editar y/o eliminar actividades incluso
cuando este se encuentre sin acceso a internet, sin notar diferencia alguna. Los
cambios serán actualizados cuando se re establezca la conexión, propagando los
cambios en cualquier otro dispositivo vinculado a la misma cuenta.
63
7.2 Diseño de Arquitectura
Por ser JoyMeter un sistema que requiere ser accedido desde distintos dispositivos
de manera distribuida, se optó por una arquitectura cliente/servidor. La diversidad de
plataformas, en sistemas distribuidos han logrado poner esta arquitectura como pilar base
de cualquier diseño arquitectónico que ataque dicho enfoque.
En JoyMeter, el usuario accede a la aplicación a través de un dispositivo Android,
que cumple el rol de cliente del sistema. Y se conecta a través de un protocolo de
comunicación con el servidor de JoyMeter el cual le brinda servicios necesarios para la
utilización de la aplicación a través de una API.
Figura 25: Deploy general de Joymeter e integración con APIs externas
64
7.2.1 Servidor
El servidor de JoyMeter, es un servicio web que expone una API REST con la
funcionalidad requerida por el cliente, tanto como para consultar y persistir los datos, como
para llevar el cálculo del nivel de felicidad histórico y la generación de las actividades a
sugerir.
El servidor de JoyMeter se encuentra dividido en una arquitectura por capas. La
arquitectura basada en capas se enfoca en la distribución de roles facilitando la distribución
de responsabilidades y un fácil mantenimiento/modificabilidad del sistema, ya que en caso
que sobrevenga algún cambio, solo se atacará el nivel requerido sin tener que involucrar a
las demás capas. En ambientes colaborativos, este patrón permite distribuir el trabajo por
niveles. De este modo, cada grupo de trabajo estará abstraído del resto de los niveles, y
solo bastará conocer la API que existe entre niveles.
En estas arquitecturas, a cada nivel se le confía una misión simple, lo que permite el
diseño de arquitecturas escalables. Las división en capas de la arquitectura del servidor de
JoyMeter son ​Resource​ ​(presentacion), S
​ ervice​ (lógica)​ ​y ​Repository​ ​(persistencia).
En líneas generales, un componente de la capa Resource solicita a un componente
de la capa service que le brinde la información necesaria para responder una solicitud que
le ha llegado. El componente de la capa Service que atendió la solicitud, puede valerse de
otro/otros componentes de la misma capa, para que le brinde los elementos necesarios
para responder la solicitud o sino también puede hacer uso de uno/unos de los
componentes de la capa inferior, Repository.
Adicionalmente, el server cuenta con un componente que opera de manera
transversal a las 3 capas, este componente es el ExceptionHandler y es el encargado de
manejar las excepciones de la aplicación para retornar una respuesta http valida, con su
status code correspondiente.
La autenticación en la capa resource para el alta de un usuario utiliza la API de
Facebook para validar las credenciales de facebook, las cuales fueron obtenidas
previamente por el cliente. Mientras que la autorización de los recursos de un usuario se
lleva a cabo, mediante un componente que intercepta los llamados que llegan a la capa
Resource, y valida las credenciales del usuario verificando que sea una sesión válida para
el recurso que se desea acceder.
65
Figura 26: Diagrama de componentes del servidor de JoyMeter
Otra integración que se lleva a cabo en el servidor que es importante a destacar, es
el uso de la API de Google GCM(Google cloud messaging) para la notificación en los
dispositivos android asociados a la sesión del usuario.
Figura 27: Flujo de alta y recepción de mensaje de un dispositivo con GCM
El alta de un dispositivo Android se genera en los pasos 1, 2 y 3. Solicitando el token
a GCM, obteniendolo y por último enviándolo al servidor que lo almacenará para cuando
desee enviar una notificación al celular en cuestión. En ese caso, el servidor enviará un
mensaje al servicio de GCM, con el token del dispositivo. El servicio de GCM le enviará al
dispositivo de destino el mensaje (pasos a y b). De esta manera, cuando el usuario solicite
que se le sugiera una actividad a realizar, el servidor recibe una petición de sugerencia,
genera la sugerencia y la envía de vuelta al usuario a través de la API de Google, la cual
genera una notificación en el dispositivo móvil.
Para más detalle referido a la implementación del servidor, puede consultarse la
sección B del apéndice.
66
7.2.2 Cliente
Como punto de partida, pensando en el requerimiento de accesibilidad, el cual
pretende facilitar la carga de actividades en cualquier momento del día en cualquier lugar,
se ha desarrollado una aplicación para dispositivos móviles para la plataforma Android.
A nivel de interfaz visual, el cliente incluye los siguientes componentes:
●
LoginActivity: Página de bienvenida con los términos y condiciones. Al final de los
términos y condiciones se encuentra el botón para iniciar la registración con las
credenciales de Facebook.
●
HistoryActivity: Página que despliega el historial de las actividades que el usuario
realizó. A través de 2 botones permite agregar una actividad nueva y solicitar el
gráfico del nivel de satisfacción respectivamente.
●
ActivityListFragment: Fragmento que contiene la lista de todas las actividades
realizadas por el usuario. Está contenida en la HistoryActivity. Cada elemento es
clickeable y brinda la posibilidad de editarlo o eliminarlo.
●
SingleActivity: Página donde se despliega toda la información correspondiente a
una actividad. Podrá ser una actividad nueva, en ese caso el formulario estará vacío.
O una actividad existente, en ese caso el formulario estará cargado con la
información de la respectiva actividad. Al confirmar la página, se grabará la actividad
nueva, o se actualizará la existente dependiendo de cada caso.
●
ChartActivity: Página donde se despliega el gráfico del nivel de felicidad del
usuario.
Entre las decisiones de implementación de alto nivel, pueden detallarse los
componentes visuales de la aplicación, la comunicación con el servidor que será a través de
una API Rest, una base de datos local en el dispositivo y un bus de eventos que facilita la
comunicación entre los componentes de la aplicación
67
Figura 28: Arquitectura del cliente de JoyMeter
Como puede apreciarse en el diagrama, los componentes visuales solicitan al bus
de eventos, la información necesaria para desplegar los elementos de la vista. Esa solicitud
será atendida por el Presentador, que realizará la lógica necesaria (llamado a la API o
consulta en la base de datos local) para retornar a través del bus, la información solicitada.
JoyMeter requiere autenticación del usuario para asegurar el accesos de los mismo.
Para lograr la integración con Facebook y GCM(Google Cloud Messaging), se tuvieron que
integrar tanto el SDK de Facebook, como el servicio de mensajería de Google en el flujo de
registración. El proceso de registración comienza solicitando un token de Facebook con las
credenciales del usuario, luego se procede a dar de alta el dispositivo en el servicio de GCM
para obtener el GCMToken con el cual se identificó al dispositivo. Por último con ambos
datos (token de Facebook y token de GCM) se realiza un llamado a nuestro servidor donde
se procede a dar de alta al usuario y se retorna un token de sesión para validar los llamados
posteriores al servidor. En el siguiente diagrama se muestra el proceso completo, teniendo
en consideración todos los componentes involucrados.
68
Figura 29: Flujo del alta de un usuario en JoyMeter y componentes involucrados
Para simplificar el diagrama, las flechas representan llamados asincrónicos con
callbacks asociados respectivamente. Esto es un principio de Android para evitar la espera
ocupada y que los componentes visuales no se queden sin responder a la interacción con el
usuario, se logra que la aplicación sea más fluida. También se han excluido los parámetros
involucrados en cada llamada para que sea más simple el diagrama. Como por ejemplo el
llamado a signup dispondrá del token de Facebook y también el token de GCM para dar de
alta el usuario en el servidor de JoyMeter. Por último, el llamado que realiza el componente
visual LoginActivity al componente HistoryActivity posee un llamado de “fantasía”. Esto en
Android se realiza a través de un Intent que posee la referencia a la clase del componente
HistoryActivity y ejecutando el método starActivity.
Para más detalle referido a la implementación del servidor, dirigirse a la sección C
del Apéndice
69
7.3 Cálculo del nivel subjetivo de felicidad
El objetivo de este trabajo se enfoca en recomendar actividades que provoquen
emociones positivas en el usuario repercutiendo en su bienestar y felicidad. Es asi que
JoyMeter utiliza la información recopilada de las actividades cargadas por el usuario, para
hacer el cálculo del nivel de felicidad relativo de este usuario por día, a medida que se
extrae de los valores de satisfacción de las actividades antes mencionadas.
La felicidad es un tema complejo, en efecto, pero en las últimas décadas se han
desarrollado teorías y métodos de medida . Investigar acerca de la felicidad posee la
dificultad que, a diferencia de otros temas, cada individuo tiene sus propios argumentos; y la
felicidad es una opción individual que tiene que ver con los valores que cada persona
reconoce o acepta. Esta definición tiene implicancias importantes para la medición de la
felicidad. Si reconocemos que se trata de un fenómeno interior a cada persona, entonces
parece más adecuado medirla con auto-reportes que con evaluaciones de expertos o pares.
Es por eso que JoyMeter, obtiene el cálculo de una medida subjetiva de felicidad,
basándose en los valores de satisfacción diarios evaluados por el mismo usuario.
Si bien el valor generado por JoyMeter, no deja de ser un valor obtenido a través de
una función heurística, sirve como punto de partida para evaluar el estado de un usuario en
un día dado, para ser tomado como referencia a la hora de generar una recomendación que
se adapte a las necesidades del usuario, buscando promover los estados emocionales
positivos.
Si se considera la felicidad como una un estado emocional que es alimentado por la
realización de actividades que producen satisfacción hacerlas y que decae a medida que no
se alimenta con nuevas actividades, podría modelarse la felicidad como un modelo de
decaimiento.
Si se observa cierta cantidad de felicidad, al paso del tiempo se puede verificar un
cambio en dicha cantidad; la cantidad ​M de felicidad es una función del tiempo ​t, esto es
M = M (t) . Al paso del tiempo ocurre una desintegración o decaimiento de la felicidad. En
otras palabras, en cualquier tiempo, la rapidez de cambio de la cantidad M (t) es
directamente proporcional a la cantidad de felicidad presente:
δM(t)/δt = k.M(t)
Donde δM(t)/δt es la variación de la felicidad con respecto al tiempo, k es la llamada
constante de proporcionalidad. Debido a que es definió que a través del paso del tiempo, el
nivel de felicidad va disminuyendo (decreciendo), esto permite concluir que k < 0 ya que
70
M (t) > 0 . Esta ecuación diferencial representa un modelo matemático con resolución a
variables separables. En efecto
δM/M = k.δt
Integrando se tiene
∫ δM/M = ∫ k.δt ⇒ ln M = kt + C ⇒ M = ekt+c = ekt ec = ekt C
Entonces la solución homogenea de la ecuación diferencial es:
M (t) = Cekt
Teniendo en consideración la felicidad del día anterior, más las actividades realizadas en el
día {N(t)} la solución particular para esta ecuación diferencial es:
M (t) = M (t−1) ek + N (t)
Se toma el promedio del nivel de satisfacción del dia, el cual está compuesto por el
promedio del nivel de satisfacción de las actividades realizadas ese dia junto con el nivel de
satisfacción del dia anterior afectado por la función de decaimiento.
7.4 Recomendación de Actividades
JoyMeter es un asistente personal, capaz de aprender de las actividades de interés
de los usuarios, captando la información necesaria a través de la observación,
monitoreando las actividades cargadas por el usuario y calculando el ya mencionado nivel
de felicidad, del cual se ampliará más adelante. Adicionalmente el feedback implícito que es
recolectado de las sugerencias hechas por JoyMeter que el usuario aceptó o rechazó es
registrado por el agente. Con la información obtenida a través del proceso de observación y
el feedback recolectado, JoyMeter trata de encontrar regularidades o patrones recurrentes
en las actividades realizadas por un usuario, y asiste al mismo para realizar actividades las
cuales generen un nivel de satisfacción tal que se incremente el nivel de felicidad del
usuario. JoyMeter tiene como objetivo el cultivo de emociones positivas mediante la
realización de actividades que ayuden a una persona a desarrollar áreas del cerebro
asociadas al bienestar y la felicidad. Un sistema de recomendación tiene como objetivo
71
principal sugerir actividades en las que el usuario se espera esté interesado, el éxito del
sistema de recomendación se centra en el grado de concordancia que pueda obtener entre
la representación de las preferencias del usuario y las verdaderas preferencias del usuario.
En el caso de JoyMeter, éste aprende de los intereses del usuario basándose de las
características de las actividades que el usuario ha cargado en el sistema, con el objetivo de
recomendar actividades similares que puedan resultar interesantes en el futuro. En este
sentido, JoyMeter es un sistema de recomendación basada en contenido. Para el problema
del usuario nuevo, JoyMeter resuelve con una estrategia de recomendación basado en
sugerencias pre-establecidas.
7.4.1 Informacion captada para generar recomendaciones
Como ya se mencionó, JoyMeter obtiene información para asistir al usuario
recomendando una actividad a realizar que sea de su preferencia, mediante la observación
de la interacción del usuario y la aplicación y el feedback implícito obtenido a partir del
resultado de las sugerencias propuestas al usuario. De la información capturada de la
interacción del usuario con JoyMeter, se registran todas las actividades realizadas por el
usuario.
Figura 30: Perfil de usuario
De estas actividades, los datos que se utilizan para la generación del perfil del
usuario son:
1. Si la actividad se realizo un dia laboral o no laboral: WorkingDay o WeekendDay
2. El momento del día en el que se realizó la actividad: Morning, Evening o Night
3. Nivel de satisfacción obtenido al realizar la actividad: valor entre 1 y 5
4. El tipo de actividad: Ocio, Deporte, Profesional y Estudio
72
Cuando un usuario solicita que el sistema le sugiera una actividad a realizar, se
registra el feedback implícito derivado de la acción del usuario al aceptar o rechazar la
actividad propuesta por JoyMeter. En el sistema, se registra:
●
Cada sugerencia realizada
●
La actividad en la cual se basó la sugerencia
●
Si la sugerencia fue aceptada o no1
●
El identificador de la nueva sugerencia, si es que el usuario aceptó y cargó la nueva
actividad.
7.4.2 Clasificadores
Para la implementación de estas recomendaciones que utilizan mecanismos de
Machine Learning, se utiliza la biblioteca Weka, la cual provee un gran número de
algoritmos de clasificación en Java. El componente en JoyMeter que utiliza el clasificador
provisto por Weka es ActivityBaseClassifier, y es el encargado de entrenar el clasificador y
generar el modelo.
El clasificador se utiliza para predecir un tipo de actividad basándose en los atributos
que fueron definidos de entrada (tipo de dia, momento del dia y nivel de satisfacción).
JoyMeter ofrece 4 tipos de actividad, a saber: ​Ocio, Deporte, Profesional y Estudio. ​El
clasificador debe ser entrenado con las preferencias del usuario obtenidas mediante un
proceso de observación, para luego generar un modelo (perfil de usuario) a partir de los
datos de las actividades realizadas por el usuario que se encuentran persistidas en la base
de datos. Periodicamente se ejecuta un proceso, para todos los usuarios, el cual obtiene las
actividades del usuario y genera el modelo el cual es persistido para su posterior uso por el
clasificador.
Adicionalmente, cuando un usuario solicita una sugerencia, se verifica si posee ya
un modelo asociado. De existir dicho modelo, y si no se encuentra “vencido” (superó los 30
días desde su generación), este el modelo ha de ser usado por el recomendador. En caso
que el usuario no posea un modelo y posea suficientes actividades para crearlo o se trate
de un modelo vencido, el modelo es re-generado y se persiste previamente al proceso de
recomendación. En caso de que no posea suficientes actividades para generar el modelo,
se utiliza una estrategia de recomendaciones preestablecidas.
​Al realizar una sugerencia, el sistema la persiste con el estado “No aceptada”. Si el usuario la acepta luego
manteniendo el tipo de actividad, el sistema persiste la relación de la nueva actividad con la sugerencia y le
cambia el estado a “Aceptada”
1
73
7.4.3 Estrategias de recomendación
Joymeter propone dos estrategias de recomendación, una denominada “Basic
Activity Recommender” y la otra “Filter Activity Recomender”. Estas estrategias toman la
información histórica del usuario, y generan una predicción que se ajuste a los gustos del
mismo. La principal diferencia entre ambas estrategias radica en que “Filter Activity
Recomender” utiliza el feedback implícito del usuario (recomendaciones realizadas
anteriormente que fueron aceptadas o rechazadas).
Figura 31: Estrategias de recomendación
Como parámetros de entrada se toma el perfil del usuario, para el cual se obtiene el
nivel de felicidad objetivo, el dia de la semana (dia laborable o fin de semana) y el momento
del día (mañana, tarde o noche) llamados de ahora en más, atributos independientes. Con
esa información, el recomendador entrega una actividad a sugerir, la cual se espera sea del
agrado del usuario.
Ambas estratégias de recomendación, utilizan el componente ActivityBaseClassifier
de JoyMeter, el cual delega internamente en un clasificador de Weka. ActivityBaseClassifier
provee 2 métodos para la realización de las estrategias de recomendación a partir de los
atributos independientes. Estos son ​suggestActivity que resuelve un tipo de Actividad a
sugerir, y ​getActivityTypeDistribution ​el cual retorna la distribución de probabilidad de los
tipos posibles de actividad dependiendo los atributos de entrada. A continuación se
presenta un ejemplo.
Figura 32: Sugerencia del tipo de Actividad en base a los atributos independientes
74
Figura 33: Distribución de probabilidad de tipos posibles de actividad
Basic Activity Recommender
Las instancias generadas a partir de todos los niveles de satisfacción que cumplen la
condición, son clasificadas por medio del ActivityBaseClassifier, resultando en un listado de
tipos de actividad sin duplicados, y finalmente se devuelve uno de los elementos de la lista
de tipos resultado de manera aleatoria.
Una vez que se cuenta con el tipo de actividad a recomendar, se obtienen todas las
actividades del usuario que se condicen también con los atributos independientes y se
resuelve una descripción aleatoria de estas actividades. De no existir una actividad que
cumpla con estas caracteristicas, se obtiene la descripción de una de las actividades
preestablecidas que coincidan con el tipo a sugerir. Finalmente se genera el Advice, que no
es más que la actividad generada a partir de los datos antes mencionados..
Figura 34: Basic Activity Recommender
75
Filter Activity Recommender (filtro basado en el feedback del
usuario)
Este enfoque, a diferencia del primero, no solo genera recomendaciones al usuario
basándose en lo aprendido a través de la observación, sino que también toma el feedback
implícito introducido por el usuario (recomendaciones realizadas anteriormente que fueron
aceptadas o rechazadas) y lo utiliza para filtrar aquellas actividades. Se utilizan los atributos
independientes para obtener la distribución de probabilidad de tipos de actividad, para el/los
niveles de felicidad objetivo.
La distribución de probabilidades promedio obtenida se ordena de mayor a menor
(Ranker), y se toma el acumulado con una cota superior de 0.7 de probabilidad (ABC2). De
esta manera se da prioridad a los tipos de actividad con mayor probabilidad de acierto.
Finalmente, se filtran los tipos de actividad que fueron menos aceptados por el
usuario en recomendaciones previamente realizadas. Para esto, se arma un vector
acumulado
a
partir
de
obtener
el
porcentaje
de
sugerencias
aceptadas
(sugeridas/realizadas) para cada uno de los tipos restantes, y se calcula la incidencia de
cada tipo, ponderando el nivel de aceptación con la probabilidad de acierto sobre la
sumatoria de todos los niveles ponderados:
n
F (t) = %a(t) * p(t) / ∑ (%a(i) * p(i))
i=1
Donde
a(t) ​es la cantidad de aciertos, p(t) ​es la probabilidad de acierto, n ​el total
de tipos de actividad a ponderar
Una vez generado el vector acumulado, con las probabilidades de cada tipo
ponderadas según la probabilidad de acierto y el porcentaje de aceptación, de manera
aleatoria se obtiene el tipo de actividad (random entre cero y uno). De este modo, los tipos
con mayor valor ponderado, tienen más probabilidad de ser seleccionados.
2
https://docs.google.com/viewer?a=v&pid=sites&srcid=YWx1bW5vcy5leGEudW5pY2VuLmVkdS5hcnxpb
nZvcHxneDozZGFkOGExZWVhMzMzZDU1
76
Una vez adquirido el tipo de actividad a recomendar, se obtienen todas las
actividades del usuario que se condicen también con los atributos independientes y se
resuelve una descripción aleatoria de estas actividades, con la que se genera el Advice a
sugerir al mismo.
Figura 35: Filter Activity Recommender
Figura 36: Feedback Filter
77
Recomendación basada en sugerencias Preestablecidas
La estrategia de recomendación basada en sugerencias preestablecidas es utilizada
por las dos implementaciones existentes de Activity Recommender, en los casos que se
trate de un usuario que no posea suficientes actividades3 para generar un perfil de usuario.
Este modelo de sugerencia utiliza un conjunto de actividades predefinidas a sugerir y
las actividades cargadas por el usuario, si existiera alguna. Esta estrategia es utilizada
cuando se trata de un usuario nuevo, el cual no tiene información previamente cargada
como para generar el perfil del usuario y ser usado por el clasificador para predecir una
actividad que sea de las preferencias del mismo. Esta simple estrategia toma de forma
aleatoria una actividad entre un conjunto compuesto de actividades base y las actividades
cargadas por el usuario hasta el momento.
Se optó por crear 19 actividades tratando de contemplar actividades genéricas para
un usuario común. Estas actividades son:
●
Tomar una cerveza con amigos. Tipo de la actividad, Ocio.
●
Caminar por el centro. Tipo de actividad, Deporte.
●
Ir a pescar. Tipo, Ocio.
●
Ir de camping. Tipo de la actividad, Ocio.
●
Trabajar. Tipo de la actividad, Profesional.
●
Ir a la playa. Tipo de actividad, Ocio.
●
Tomar mate en la plaza. Tipo de actividad, Ocio.
●
Leer un libro.Tipo de la actividad, Ocio.
●
Ver una película.Tipo de la actividad, Ocio
●
Jugando un juego de mesa.Tipo de la actividad, Ocio
●
Tomarse un café.Tipo de la actividad, Ocio
●
Ver la television.Tipo de la actividad, Ocio
●
Ir de compras.Tipo de la actividad, Ocio.
●
Cocinar algo para comer luego.Tipo de la actividad, Ocio
●
Caminata.Tipo de la actividad, Deporte
●
Permanecer en la cama.Tipo de la actividad, Ocio
●
Reunión de trabajo.Tipo de la actividad, Profesional
●
Visitar a la familia.Tipo de la actividad, Ocio
●
Estudiando.Tipo de la actividad, Estudio
​El modelo de weka (parte del perfil del usuario) se genera si el usuario tiene actividades y ya tiene
más de un mes de uso de la aplicación.
3
78
7.5 Resumen
En este capítulo se describieron los requerimientos de alto nivel, los cuales
definieron la funcionalidad de la aplicación y las decisiones de diseño tomadas desde las de
más alto nivel, entrando en decisiones más específicas del lado del servidor y del cliente. Se
describió la integración con las APIs de Facebook y GCM para el login y la mensajería. Por
último se presentaron los dos enfoques para la realización de recomendaciones una con y
otra sin el feedback implícito del usuario de recomendaciones posteriores. Al final se
describió la integración con la librería de Weka para la inclusión de técnicas de Machine
Learning.
79
8 Evaluación Experimental
En
el
Capítulo
7
se
expusieron
los
diferentes
enfoques
para
obtener
recomendaciones basadas en contenido con técnicas de machine learning. El primer
enfoque con una técnica de clasificación pura, y el segundo con una técnica de clasificación
más un filtro basado en el feedback del usuario.
Este capítulo se analizarán los clasificadores provistos por weka, ambas técnicas de
recomendación y el resultado de las pruebas. El capítulo se encuentra organizado de la
siguiente manera. En la sección 8.1 se prueban los distintos tipos de clasificadores provistos
por Weka y se analizará cuál es el más conveniente para este trabajo. En la Sección 8.2 se
presentan las aclaraciones a ser consideradas para analizar las estrategias de
recomendación. En la Sección 8.3 se presentan los perfiles de usuario utilizados para el
análisis de las técnicas de recomendación. En la sección 8.4 se realiza la comparación y
análisis de los resultados para ambas técnicas de clasificación y se concluye cual se
recomienda a utilizar.
8.1 Clasificadores provistos por Weka
Como se mencionó con anterioridad, la biblioteca de Weka provee una serie de
técnicas de clasificación con algoritmos de Machine Learning en Java. En esta sección, con
los datos de entrada generados durante la primer iteración de JoyMeter (dataset generado
con usuarios que utilizaron la aplicación con recomendaciones aleatorias), entrenando el
clasificador con el 66% de los datos de entrada (89 instancias) y evaluando con el 33%
restante, arrojaron los siguientes resultados:
●
NaiveBayes: 70% accuracy, 30% error, precision avg4 (68%), recall avg5 (70%)
●
SimpleLogistic 66% accuracy 33% error, precision avg (61,5%), recall avg (66%)
●
DecisionTable 60% accuracy 40% error, precision avg (57%), recall avg (60%)
4
Precision average: precision media por cada atributo de clase (Ocio, Deporte, Estudio, Profesional)
Recall average: recall medio por cada atributo de clase (Ocio, Deporte, Estudio, Profesional) idem
accuracy
5
80
Dados los resultados de las pruebas de estos 3 algoritmos, se concluyó en la
elección del algoritmo de Naive Bayes, ya que provee la mejor cantidad de instancias
correctamente clasificadas.
8.2 Consideraciones
Para analizar las estrategias de recomendación, se tuvieron una serie de
consideraciones que se describen a continuación:
●
JoyMeter realiza 3 recomendaciones diarias, una por cada momento del día
(mañana, tarde y noche) para cada usuario. El usuario adicionalmente puede solicitar
más recomendaciones cuando así lo desee.
●
Las dos técnicas de recomendación van siendo alternadas a medida que se realizan
las sugerencias de las actividades. Con este enfoque, basado en AB testing6, se
busca que las técnicas de recomendación no se vean afectadas por el cansancio del
usuario al utilizar la aplicación, o al menos se vean afectadas por igual.
●
La técnica utilizada para la recomendación (con y sin filtro), es registrada en conjunto
con la sugerencia realizada para futuro análisis.
●
Se utilizó un dataset generado previamente por cada usuario (actividades
realizadas), para entrenar al clasificador.
●
Para la estrategia con filtrado en base al feedback del usuario. Se tomarán las
sugerencias aceptadas por los usuarios previamente (sugerencias hechas con una
estrategia random)
Con el clasificador entrenado para cada perfil de usuario, se hizo el seguimiento de
dos usuarios particulares, en el uso de JoyMeter, a fin de analizar la información obtenida
anteriormente sobre la precisión teórica del clasificador en contraste con la precisión real,
obtenida en base al uso de la aplicación sobre los usuarios aceptando/rechazando las
sugerencias dependiendo de cada técnica y las métricas obtenidas.
6
​https://en.wikipedia.org/wiki/A/B_testing
81
8.3 Perfiles de usuario anteriores a la utilización de las técnicas de
recomendación
Los perfiles que se encuentran en esta sección corresponden a los dos usuarios que
más activos se encuentran en JoyMeter.
Perfil de usuario A:
El usuario A, posee un total de 82 actividades cargadas en JoyMeter al momento de
realizar el análisis de los clasificadores de Weka. Los gráficos a continuación brindan la
información inherente a sus preferencias que darán como resultado el perfil de dicho
usuario.
Figura 37: Usuario A, distribución por tipo de actividad
Para este usuario, en el gráfico de torta se ve una clara tendencia de las
preferencias del usuario en base al tipo de Actividad, el tipo de actividad recurrente es
“Ocio”, luego lo sigue “Profesional”, “Deporte” y por último “Estudio”.
82
Figura 38: Usuario A, distribución por momento del día
En cuanto a la preferencia de en cual momento del día realiza actividades están
bastante equilibradas: por la mañana 43,4%, por la tarde 27,7% y por la noche 28,9%.
Figura 39: Usuario A, distribución por tipo de día
Las actividades de este usuario, tiene mayor tendencia a ser realizadas en un día
laboral (Lunes a Viernes) que en el fín de semana.
83
Figura 40: Usuario A, distribución por nivel de satisfacción
Dentro de todas las actividades que realizó, para la puntuación de satisfacción de las
actividades, el usuario utilizó todo el rango provisto por JoyMeter, las puntuaciones más
recurrentes fueron “Cuatro”, “Cinco” y “Tres” en ese orden. En una considerable menor
medida “Uno” y “Dos” fueron utilizados en muy pocos casos. Existe una clara tendencia en
este perfil, de no cargar actividades que no le son de agrado o no generan una satisfacción
considerable.
Perfil de usuario B:
El segundo usuario a ser considerado para el experimento es el usuario B, este
usuario posee más actividades cargadas que el usuario A, con total de 99 actividades. Los
gráficos a continuación brindan la información que describe las preferencias del usuario.
84
Figura 41: Usuario B, distribución por tipo de actividad
Según el tipo de actividad, para el usuario B, el más frecuente es “Ocio”, con el 51%
de las actividades. Los tipos de “Estudio”, “Profesional” poseen el mismo porcentaje 18.4%
y en último lugar se encuentra el tipo de actividad “Deporte” con un 12,2%
Figura 42: Usuario B, distribución por momento del día
El momento en el cual el usuario B realiza las actividades que carga en JoyMeter es
por la noche (36,7%) y en menor medida por la tarde (34,7%). Por último, por la mañana
con un 28,6%.
85
Figura 43: Usuario B, distribución por tipo de día
Al igual que con el usuario A, el usuario B también posee una tendencia a realizar
actividades los días de semana que no están comprendidos como fin de semana.
Figura 44: Usuario B, distribución por nivel de satisfacción
Para la puntuación de satisfacción de las actividades, el usuario B utilizó todo el
rango provisto por JoyMeter, las puntuaciones “Cuatro” y “Tres” fueron las más utilizadas
con un porcentaje de 26,5% y 25,5% respectivamente. Luego siguen las puntuaciones “Dos”
(17,3%), Uno (16,3%) y Cinco (14,3%).En una considerable menor medida “Uno” y “Dos”
fueron utilizados en muy pocos casos. Existe una clara tendencia en este perfil, de no
cargar actividades que no le son de agrado o no generan una satisfacción considerable.
86
8.4 Información posterior al período de experimentación con las
técnicas de recomendación
Esta sección se encuentra cronológicamente ubicada, pasado un mes desde que se
implementaron las técnicas de recomendación.
Usuario A:
Para el usuario A, luego del tiempo de prueba, se capturó la siguiente información.
El total de recomendaciones realizadas fue 111.
Figura 45: Usuario A, aceptación total de recomendaciones
Del total de recomendaciones realizadas,
un 63,1% fue aceptado y las demás
fueron descartadas.
Considerando solamente las sugerencias aceptadas, el gráfico de porcentaje de
aceptación de cada técnica es el siguiente
Figura 46: Usuario A, técnicas de recomendación aceptadas
87
La técnica que mayor aceptación tuvo fue la que posee el filtro que considera el
feedback del usuario, con un total de 50,7%. En menor medida, con solo tres centésimas de
diferencia se encuentra la técnica con clasificación pura. Descartando con un 1,5%
correspondiente a la técnica de random realizada en la iteración anterior.
Considerando las recomendaciones aceptadas, el porcentaje y el número total de
actividades por tipo se puede apreciar en el siguiente gráfico.
Figura 47: Usuario A, actividades aceptadas por tipo
La cantidad de Actividades aceptadas por tipo, coinciden con el perfil del usuario, ya
anteriormente a la fase de recomendaciones, se pudo apreciar que este tiene una clara
tendencia a realizar actividades de ocio por sobre las demás.
En
el
siguiente
gráfico,
se
muestra
la
distribución
de
aceptación
de
recomendaciones, dependiendo el momento del día.
Figura 48: Usuario A, actividades aceptadas por momento del día
88
Existe una tendencia a no aceptar recomendaciones por la noche. Ya que el número
de aceptadas decrece considerablemente tomando en consideración los otros momentos
del día, Mañana y Tarde.
Utilizando la biblioteca de Weka, y extendiendo la funcionalidad que posee para
probar un clasificador para ver su tasa de efectividad. Se hicieron las corridas con ambas
técnicas arrojando los siguientes resultados para el usuario A
Con filtro basado en feedback
Deporte
Profesional
Estudio
Ocio
Deporte
1
2
2
7
Profesional
0
3
0
2
Estudio
0
0
0
0
Ocio
3
3
1
18
Tabla 3: Usuario A, matriz de confusión de estrategia con filtro.
Los aciertos con esta técnica arrojaron un 52,4% de aciertos
Con clasificador
Deporte
Profesional
Estudio
Ocio
Deporte
3
1
0
5
Profesional
0
0
1
2
Estudio
0
0
0
0
Ocio
1
7
2
20
Tabla 4: Usuario A, matriz de confusión de estrategia de clasificación.
Los aciertos con esta técnica arrojaron un 54,8% de aciertos
Se realizaron dos iteraciones posteriores consecutivas a los valores obtenidos con el
fin de considerar si existen cambios significativos en la efectividad de los clasificadores.
Para la técnica con el filtro basado en el feedback del usuario, los valores en cada
prueba resultaron: aciertos: 22/42 (52,4%), aciertos: 22/42 (52,4%), aciertos: 21/42 (50%)
89
Para la técnica con el clasificador de Weka, los valores en cada prueba resultaron:
aciertos: 23/42 (54,8%), aciertos: 22/42 (52,4%), aciertos: 21/42 (50%)
Usuario B:
Para el usuario B, el total de recomendaciones realizadas fue 100.
Figura 49: Usuario B, aceptación total de recomendaciones
Del total de recomendaciones realizadas, un 53% fue aceptado y las demás fueron
descartadas.
Considerando solamente las sugerencias aceptadas, el gráfico de porcentaje de
aceptación de cada técnica:
Figura 50: Usuario B, técnicas de recomendación aceptadas
90
La técnica que mayor aceptación tuvo fue la que posee el filtro que considera el
feedback del usuario, con un total de 52,8%. En menor medida, con solo seis centésimas de
diferencia se encuentra la técnica con clasificación pura.
Considerando las recomendaciones aceptadas, el porcentaje y el número total de
actividades por tipo se puede apreciar en el siguiente gráfico.
Figura 51: Usuario B, actividades aceptadas por tipo
La cantidad de Actividades aceptadas por tipo, coinciden con el perfil del usuario, ya
que este tiene una clara tendencia a realizar actividades de ocio por sobre las demás.
En
el
siguiente
gráfico,
se
muestra
la
distribución
de
aceptación
de
recomendaciones, dependiendo el momento del día.
Figura 52: Usuario B, actividades aceptadas por momento del día
91
El usuario B, a diferencia con el usuario A, posee una distribución aproximadamente
equitativa en relación a en cuál momento del día fue realizada una recomendación. Por la
tarde con un 37,7%, por la noche con un 32,1% y por la mañana con un 30,2%.
Al igual que con el usuario A, se hizo uso de la biblioteca de Weka para obtener tasa
de efectividad. Se hicieron las corridas con ambas técnicas arrojando los siguientes
resultados para el usuario B
Con filtro basado en feedback
Deporte
Profesional
Estudio
Ocio
Deporte
0
0
0
0
Profesional
2
7
0
0
Estudio
2
0
2
1
Ocio
4
4
6
18
Tabla 5: Usuario B, matriz de confusión de estrategia con filtro.
Los aciertos con esta técnica arrojaron un 58,7% de aciertos
Con clasificador
Deporte
Profesional
Estudio
Ocio
Deporte
0
0
0
0
Profesional
2
5
1
2
Estudio
1
1
2
5
Ocio
5
5
5
12
Tabla 6: Usuario B, matriz de confusión de estrategia de clasificación.
Los aciertos con esta técnica arrojaron un 41,3% de aciertos
Se realizaron dos iteraciones posteriores a los valores obtenidos con el fin de
considerar si existen cambios cambios significativos en la efectividad de los clasificadores.
Para la técnica con el filtro basado en el feedback del usuario, los valores en cada
prueba resultaron: aciertos: 27/46 (58,7%), aciertos: 24/46 (52%), aciertos: 25/46 (54%)
92
Para la técnica con el clasificador de Weka, los valores en cada prueba resultaron:
aciertos: 19/46 (41,3%), aciertos: 20/46 (43,4%), aciertos: 19/46 (41,3%)
8.5 Comparación y análisis de resultados
Luego de la fase de experimentación, con los usuarios seleccionados para el
análisis, la información capturada arroja resultados positivos en ambas técnicas de
recomendación. Como se dijo anteriormente, las técnicas fueron siendo alternadas a fin de
evaluarlas por igual considerando el mismo período de tiempo y el mismo desgaste que el
usuario puede percibir al ser recomendado tres veces al día, con sugerencias
personalizadas de actividades a realizar.
En este contexto se deberá analizar para futuros ciclos, el momento preferible para
realizar la recomendación a cada usuario dependiendo su perfil, a fin de evitar el descarte
de recomendaciones por parte del usuario. La tasa de descarte de recomendaciones fue en
promedio 41,95%, para el usuario A 36,9% y para el usuario B 47%.
Por muy poco margen, la técnica de recomendación con filtro basado en el feedback
del usuario, posee mejor índice de aceptación. Para el usuario A 50,7%, y para el usuario B
52,8%. Si bien el margen no es significativo, en comparación con la tasa de acierto que tuvo
cada estrategia utilizando la librería de Weka para obtener la aceptación de cada técnica.
Por más que el usuario B tuvo menor tasa de acierto con la estrategia del filtro en
comparación con la estrategia de clasificación pura, en la práctica, fue la técnica que más
acepto.
Es por ello que se concluye con el muestreo de usuarios realizado, en el período
comprendido, que la técnica con el filtro basado en el feedback del usuario es la técnica ha
de ser considerada para futuros trabajos.
8.6 Resumen
En este capítulo se analizó a través de experimentación y tasa de acierto, cuál es el
clasificador más conveniente para este trabajo de los que provee la biblioteca de Weka. Se
recabó la información de los perfiles de usuario antes de la fase de experimentación para
una vez concluida, analizar los resultados entre cada estrategia y dar como conclusión cuál
es la estrategia más conveniente.
93
9 Conclusiones
Como se vio en capítulos precedentes, JoyMeter es un agente de recomendaciones
de actividades personales, que basa sus predicciones en una técnica de recomendaciones
basadas en contenido con el objetivo de obtener recomendaciones de actividades de
manera personalizada de acuerdo a las preferencias de cada usuario.
La implementación de los dos algoritmos de recomendación propuestos requiere de
dos componentes distintos en el perfil de usuario. El primer componente consta de un
conjunto de actividades personales previstas por el usuario. Y el segundo componente
consta del feedback indirecto previsto por el usuario al aceptar o rechazar una actividad
sugerida. Esta información es utilizada por el algoritmo de recomendación con filtro para
priorizar aquellas actividades que han sido del agrado del usuario en el pasado. Ambos
algoritmos de recomendación utilizan un clasificador provisto por Weka para la predicción
de actividades a sugerir.
La evaluación de la propuesta se realizó en dos etapas. En la primera etapa, se
utilizaron los datos obtenidos de actividades cargadas por un conjunto de usuarios junto con
sugerencias realizadas por una heurística de selección aleatoria de actividades. Con estos
datos se obtuvieron métricas sobre las actividades cargadas por cada usuarios y se
realizaron pruebas de precisión a los algoritmos de clasificación provistos por la biblioteca
Weka. Entre los clasificadores con los cuales se experimentó se optó por el clasificador de
redes de Bayes, Naive Bayes, ya que fue el que obtuvo mejor desempeño.
En una segunda etapa, llevada a cabo luego de la interacción de los usuarios con el
sistema de recomendaciones, se evaluó la efectividad de ambas estrategias de
recomendación sobre una muestra de usuarios y se obtuvieron métricas de los niveles de
aceptación sobre las recomendaciones realizadas con ambas estrategias. Los resultados
obtenidos muestran que ambas técnicas de recomendación tuvieron aproximadamente el
mismo grado de aceptación, obteniendo en promedio una diferencia porcentual que se
inclina al clasificador con filtro. Adicionalmente, dicha decisión fue reafirmada al comparar
ambas técnicas de clasificación para un perfil de usuario donde la técnica con clasificación
pura arrojaba mayores aciertos, pero en la práctica, el porcentaje de aceptación fue superior
con la estrategia de recomendación con filtro basado en el feedback implícito.
94
9.1 Ventajas
A continuación se listan las principales ventajas del desarrollo propuesto en el
presente trabajo:
●
Recomendaciones personalizadas mediante métodos no invasivos: Ambos enfoques
personalizan las recomendaciones individuales construyendo los perfiles desde la
interacción con JoyMeter, aprendiendo del comportamiento de los usuarios
individuales.
●
Provisión de una técnica interactiva: En ambos enfoques, la concepción de los
perfiles de usuarios no es estática sino que se actualiza de acuerdo a una
determinada periodicidad. Esta característica permite que las recomendaciones se
realicen sobre las preferencias y gustos actuales de un usuario.
●
Transparencia al cambio de estrategias: El cambio de estrategia de recomendación,
permite obtener métricas de la efectividad de las mismas sin afectar a la percepción
del usuario en cuanto al uso de la herramienta
●
Uso de un dispositivo móvil: Las personas disponen hoy día sus dispositivos móviles
a su alcance en cada momento. Como JoyMeter se basa en la captura de
actividades por parte del usuario. Fué imprescindible que JoyMeter haya sido
realizado para dispositivos móviles para estar siempre al alcance de la mano del
usuario.
●
Integración con Facebook: La integración de JoyMeter con Facebook es un punto
positivo ya que existen usuario que hacen uso constante de esta famosa red social
para contar su jornada. JoyMeter brinda la posibilidad que el usuario comparta en
Facebook la actividad que está realizando, fomentando indirectamente el uso de
JoyMeter.
●
Decisiones de Diseño: JoyMeter se encuentra íntegramente desarrollado en Java,
con frameworks y estructuras extensibles para poder agregar o modificar
componentes sin que impacten en todo el diseño. Por ejemplo, algunas de las
funcionalidades extensibles son: probar distintas técnicas de recomendación
significa extender la funcionalidad base definida de un solo componente; o cambiar
la estrategia por la cual se calcula subjetivamente la felicidad que el usuario posee
significa extender la funcionalidad del componente ​LevelOfJoyService y definir su
nueva lógica.
95
9.2 Limitaciones
Dado que JoyMeter es aún un prototipo, su implementación posee limitaciones,
algunas de las cuales se mencionan a continuación:
●
Evaluaciones particulares: El número de usuarios que se utilizó en el sistema no fue
lo suficientemente grande todavía, como para una evaluación más real de las
técnicas de recomendación utilizando métodos o métricas tradicionales.
●
Evaluaciones parciales: La captura de datos se realizó durante un período limitado.
Es necesario todavía monitorizar las actividades durante un periodo más amplio, en
el cual contemplar un mayor aprendizaje del agente, comprobando como el
recomendador evoluciona su comportamiento en el tiempo.
●
Formato limitado: El recomendador se encuentra acoplado al formato de las
actividades, el cual fijo. Si pudiera desacoplarse a través del uso de palabras claves
(como es planteado en la sección próxima, trabajos futuros), el recomendador
lograría autonomía en su definición para el aprendizaje.
9.3 Trabajos Futuros
En base a las experiencias con JoyMeter, posibles extensiones del enfoque son:
●
La priorización de actividades (por ej., de la más reciente sobre la más antigua), para
mejorar el filtrado, evitando recomendar aquellas actividades que dejaron de ser del
agrado del usuario.
●
Adecuar el agente, de manera que actúe de manera más “proactiva”, de manera que
en base al nivel felicidad (nivel del día/histórico) decida sugerir (sin intervención del
usuario) una actividad que le genere un nivel de satisfacción dado que ayude a subir
su nivel de felicidad. Por ejemplo, si el nivel de felicidad viene decreciendo, y llega a
una cota/nivel crítico, el agente podría enviar una sugerencia al usuario de una
actividad a recomendar.
●
Incluir recordatorios periódicos y amigables para incentivar el registro de las
actividades que está realizando el usuario.
●
Recomendaciones colaborativa a través de la integración con Facebook, observando
las actividades que realizan los círculos de amigos de Facebook que también utilizan
JoyMeter.
●
Recomendación de actividades basada en la captura de palabras claves en la
descripción de la actividad y no en un tipo predefinido. Por ejemplo, en vez de crear
96
una actividad que tenga el tipo deporte y en descripción “jugar a la pelota”. El
usuario responderá la simple pregunta de “qué estás haciendo?” y de esa oración a
través de técnicas de data-mining se podrá saber qué tipo de actividad está
realizando y con qué criterio se tendrá en cuenta para realizar una recomendación.
97
Apéndice
Apéndice A: Escalas de felicidad
1. Escalera de felicidad de Gallup:
Propone valorar la felicidad en base a la metáfora de una escalera con escalones
numerados, donde el escalón de más alto (valor 10) representa la mejor vida posible y el
más bajo la peor vida posible. El individuo debe responder a la pregunta ¿en qué peldaño
de la escalera siente que se encuentra actualmente?
2. Escala de satisfacción con la vida de Diener:
Propone 5 afirmaciones sobre la satisfacción del individuo con respecto a su vida y
sus logros, el individuo debe responder el nivel de adhesión con respecto a cada afirmación,
con valores entre 1 y 7, donde 7 significa “Totalmente de acuerdo” y 1 significa “Totalmente
en desacuerdo”
3. Escala de la felicidad subjetiva de Lyubomirsky:
Propone 4 preguntas con respecto al nivel de felicidad general del individuo, a las
cuales se debe responder entre 7 valores los cuales van desde “Poco Feliz” hasta “Muy
Feliz”.
4. Satisfacción en áreas específicas:
Se propone calificar el nivel de satisfacción con respecto a 7 áreas específicas,
como salud, situación económica y amistades, calificando entre 10 posibles valores, donde
1 corresponde a completamente insatisfecho y 10 a completamente satisfecho.
5. Reconstrucción del día:
En este método las personas reconstruyen su día previo, con un cuestionario
autoadministrado. Por ejemplo, la encuesta propuesta por Kahneman et al. (2004) se divide
en cuatro módulos. El primer módulo incluye las preguntas mínimas para medir la felicidad,
pero agrega preguntas por estados de ánimo. El segundo módulo pide reconstruir el día de
ayer como si escribiera un diario de vida: ¿dónde estaba?, ¿qué hizo y experimentó? y
¿cómo se sintió? Estas preguntas permiten que el entrevistado recuerde las actividades
realizadas, horas de inicio y término, y el grado de satisfacción personal asociado a ellas. El
tercer módulo profundiza en la descripción y sentimientos asociados a cada episodio del día
anterior. El cuarto módulo incluye preguntas generales sobre cómo fue el día de ayer, cómo
se sintió el entrevistado y cómo lo percibe que lo vio el resto.
6. Escala de Fredrickson:
Propone veinte adjetivos que describen cada emoción a niveles de intensidad
diferente con una escala de 5 grados de intensidad. Para computar una razón o ratio de
positividad, el individuo debe indicar en qué nivel ha experimentado (usando una escala de
0 a 4 donde 0 es nada y 4 es mucho) cada una de las veinte emociones. Se debe contar
con un uno todas las emociones positivas en el que hayas contestado un nivel de intensidad
98
igual o mayor de 2. Contar con un uno todas las emociones negativas en el que hayas
contestado hayas contestado un nivel de intensidad igual o mayor a 1. y finalmente dividir el
total de emociones positivas por el de negativas (o por 1 en caso de ausencia de emociones
negativas).
Apéndice B: Tecnologías utilizadas en el Servidor de JoyMeter
Para la implementación del servidor, se optó por la tecnología JEE, utilizando el
framework Spring, el cual simplifica y facilita el desarrollo de aplicaciones web (entre otras),
junto con Jersey para exponer los distintos endpoints y JPA/Hibernate para la persistencia
de datos.
Entre las ventajas de utilizar JEE, Spring y Jersey frameworks:
●
Se consiguen plataformas para el despliegue en la nube sin costo
●
Spring ofrece una amplia gama de soluciones para facilitar y agilizar el desarrollo
de servicios web.
●
Spring IoC containers e inyección de dependencias, facilitan el desarrollo y delega
la creación de objetos a el framework
●
Jersey facilita el desarrollo de servicios web Restful, permitiendo exponer los
servicios con gran variedad de representaciones de datos (media types)
●
Jersey ofrece su propia API que se extienden al conjunto de herramientas JAX-RS
con las características y utilidades adicionales para simplificar aún más el servicio
REST y desarrollo de clientes
El uso de Hibernate/JPA:
El desarrollo es más productivo, el ORM ayudará a disminuir el tiempo requerido
para la implementación de una aplicación de forma exponencial, al eliminar la necesidad de
profundizar en la codificación de mecanismo de mapeo objeto/relacional.
Bien diseñado: ORM es un patrón de un diseño arquitectónico efectivo, ya fue
implementado y bien probado durante un período de tiempo. No tenemos que gastar
nuestro tiempo para hacer de nuevo algo que ya está hecho, probado y utilizado por
muchos años.
Hibernate es independiente del motor de base de datos
Ya que Hibernate es Orientado a objetos, la curva de aprendizaje es mucho más
corta.
99
Estructura del servidor
Una aplicación de servicios web estándar desarrollada con spring se encuentra
estructurada en capas, es por eso que el servidor de JoyMeter se encuentra dividido en una
arquitectura por capas. La arquitectura basada en capas tiene se enfoca en la distribución
de roles lo cual facilita la distribución de responsabilidades y un fácil mantenimiento, ya que
en caso que sobrevenga algún cambio, solo se atacará el nivel requerido sin tener que
involucrar a las demás capas. En ambientes colaborativos, permite distribuir el trabajo por
niveles. De este modo, cada grupo de trabajo estará totalmente abstraído del resto de los
niveles, solo bastará conocer la API que existe entre niveles.
Spring
ofrece
gran
número
de
soluciones
siguiendo
este
patrón,
invitando
a
extender/implementar sus interfaces y hacer uso de las mismas.
Manejo de excepciones
Adicionalmente, el server cuenta con un componente que opera de manera
transversal a las 3 capas, este componente es el ExceptionHandler, propio del framework
Jersey. Este componente es el encargado de manejar las excepciones de la aplicación para
retornar una respuesta http valida, con su status code correspondiente. Por ejemplo, en la
capa de presentación, nos podemos topar en tiempo de ejecución con un request mal
formado, por lo que se lanzara una excepcion JoymeterBadRequestException la cual por
100
extender de WebApplicationException será manejada por el exception handler de Jersey,
generando una respuesta con status code 400 (Bad Request).
Las excepciones correspondientes serán descritas con un mayor nivel de detalle en
la capa de presentación, por cada llamado a la api.
Capa Resource - Capa de presentación
La capa Resource, expone los recursos que el servidor de JoyMeter brinda a sus
clientes. Para lograr este objetivo, el servidor utiliza http como protocolo de comunicación a
través de una API de servicios REST. Se optó por utilizar Jersey ya que es la API oficial de
RESTful de Oracle.
Un Sistema RESTful ofrece beneficios adicionales como el desacoplamiento,
permitiendo un sistema altamente escalable.Se puede escalar muy ampliamente mediante
la adición de nodos de servidor adicionales con un balanceador de carga. Al poseer una
interfaz uniforme beneficia que no debamos documentar por cada recurso, las operaciones
básicas de la API. Cada recurso se expone a través de una URI con los cuatro métodos
(GET, POST, UPDATE, DELETE) para referirse a nuestros recursos, lo que asegura que
cualquier herramienta que pueda trabajar con HTTP (de los cuales hay muchas) puedan
comunicarse con nuestro servidor. Cuando se hace correctamente, esto significa que el
cliente no necesita comprender nada más que el formato de datos. En particular, no es
necesario entender la estructura URI del servidor. Idealmente, una API REST será
consumida por un conjunto de clientes, que comprendan los formatos de datos (que hablen
el mismo idioma).
101
JoyMeter, expone tres apis para la interacción con los clientes. Estos son:
SessionResource:
● Método POST ({joymeter.uri}/sessions) para atender la solicitud de alta de un
usuario, con la información necesaria para identificar al mismo y el dispositivo con el
cual se registró. En respuesta a esta solicitud, se retornará la credencial que
identifica al usuario con el dispositivo, la cual deberá ser utilizada para posteriores
consultas al servidor.
UserResource:
● Método GET ({joymeter.uri}/users/me) para atender la solicitud de obtener la
información de un usuario.
●
Método PUT ({joymeter.uri}/users/me) para atender la solicitud de actualizar la
información de un usuario.
●
Método GET ({joymeter.uri}/users/me/loj) para atender la solicitud de obtener el
historial de nivel de felicidad de un usuario en el transcurso de n días.
●
Método GET ({joymeter.uri}/users/me/suggest) para atender la solicitud de un
usuario que desea que se le sugiera una actividad a realizar.
La representación gráfica de resftulObjects de los resource Session y User quedaría de la
siguiente manera:
ActivityResource:
● Método GET ({joymeter.uri}/activities) para atender la solicitud de obtener todas las
actividades realizadas por el usuario en cuestión.
102
●
Metodo POST ({joymeter.uri}/activities) para atender la solicitud de agregar una
nueva actividad para un usuario determinado.
●
Método GET ({joymeter.uri}/activities/{id}) para atender la solicitud de obtener en
detalle una actividad en particular (identificada por su id).
●
Método PUT ({joymeter.uri}/activities/{id}) para atender la solicitud de actualizar la
información de una actividad en particular (identificada por su id).
●
Método DELETE ({joymeter.uri}/activities/{id}) para atender la solicitud de borrar una
determinada actividad (identificada por su id).
●
Método POST ({joymeter.uri}/activities/syncup) para atender la solicitud proveniente
del cliente para actualizar el servidor con los últimas actividades del usuario (cuando
el cliente no puede conectarse con el servidor por problemas externos a la
aplicación, el cliente guarda temporalmente estos cambios y la informa al servidor
una vez establecida nuevamente la conexión).
La representación gráfica de ActivityResource se muestra a continuación:
A continuación se presenta las posibles respuestas de error propias de JoyMeter por cada
operacion en la API:
Resource
Operation
Descripcio
n de la
operación
Caso de error
HTTP
Status
code
Excepción que
dispara el error
Joymeter
error code
103
sessions
activities
POST
signUp de
usuario
Token de facebook
invalido
400 - Bad
request
JoymeterBadReques
tException
100
Token de facebook
vencido
400 - Bad
request
JoymeterBadReques
tException
101
GET
Obtiene el
listado de
todas las
actividades
del usuario
autenticado
N/A
N/A
N/A
N/A
POST
Agrega una
actividad al
usuario
autenticado
N/A
N/A
N/A
N/A
GET
Obtiene la
actividad
con
identificado
r <id> de la
actividad
Identificador de actividad
inválido
400 - Bad
request
JoymeterBadReques
tException
102
El usuario autenticado no
tiene permisos para
acceder a la actividad de
identificador <id>
401 Unauthori
zed
JoymeterUnauthoriz
edException
99
Elimina la
actividad
con
identificado
r <id> de la
actividad
Identificador de actividad
inválido
400 - Bad
request
JoymeterBadReques
tException
102
El usuario autenticado no
tiene permisos para
acceder a la actividad de
identificador <id>
401 Unauthori
zed
JoymeterUnauthoriz
edException
99
Modifica la
actividad
con
identificado
r <id> de la
actividad
Identificador de actividad
inválido
400 - Bad
request
JoymeterBadReques
tException
102
El usuario autenticado no
tiene permisos para
acceder a la actividad de
identificador <id>
401 Unauthori
zed
JoymeterUnauthoriz
edException
99
GET
Obtiene la
representac
ión del
usuario
autenticado
N/A
N/A
N/A
N/A
PUT
Modifica los
datos del
usuario
autenticado
N/A
N/A
N/A
N/A
users/me/s
uggest
GET
Sugiere
una
actividad al
usuario
autenticado
N/A
N/A
N/A
N/A
users/me/l
oj
GET
Obtiene el
histórico de
nivel de
felicidad
para el
usuario
autenticado
N/A
N/A
N/A
N/A
activities/{i
d}
DELETE
PUT
users/me
104
Adicionalmente
todas
las
operaciones
son
interceptadas
por
JoymeterSecurityInterctor
(cuyas responsabilidades son descritas en la ​sesión​) quien valida a partir de las
credenciales previstas si es un usuario previamente autenticado. Los errores derivados de
esta validación se describen en la siguiente tabla:
Caso de error
HTTP Status
code
Excepción que dispara
el error
Joymeter error
code
No se pasan las
credenciales en el
request
401 Unauthorized
JoymeterUnauthorizedEx
ception
99
Token de sesión
inválido
400 - Bad
request
JoymeterInvalidSessionE
xception
98
Seguridad en la capa de presentación:
Para asegurar el acceso de clientes autenticados a los distintos recursos expuestos,
y asegurar que únicamente el cliente autenticado y autorizado para un usuario dado puede
acceder únicamente a los recursos de ese usuario.
HTTP Basic es el mecanismo de seguridad elegido para proteger el server de
llamados no autorizados. Como HTTP no posee estado, hay que enviar las credenciales en
cada petición.
Las credenciales son incluidas agregando un header del tipo Authorization, con el
formato Authorization: Bearer {joymeterSessionId}. Siendo joymeterSessionId la credencial
que identifica a un usuario utilizando un dispositivo en la aplicación.
Si se intenta acceder a un recurso protegido sin la cabecera Authorization, el
servidor responde con un status 400 Bad request y la descripción del error en formato
JSON.
A favor y en contra del HTTP Basic:
● A favor:
105
●
○ Estándar HTTP, funciona out-of-the-box.
○ Es RESTfull, no obliga a mantener estado en el servidor.
En contra:
○ La credencial del usuario se transmite sin cifrar.
Para solucionar el punto que posee en contra, se utilizará HTTPs para el cifrado de
cada solicitud. De esta manera se protegerá la información sensible de JoyMeter.
El único método que no se encuentra protegido es el que atiende la solicitud de alta
de un usuario. Ya que claro está, no existe al momento del llamado, las credenciales del
usuario en cuestión.
Capa Service - Capa de lógica
Es la capa que a partir de una petición de la capa de presentación, se encarga de la
lógica de negocio de la aplicación, y de la comunicación con la capa de Repository para la
persistencia de los datos.
La capa service, puede hacer uso de otros componentes del mismo nivel para llevar
a cabo su tarea.
Aquí, se encuentran validación y verificaciones relacionadas a la lógica del negocio,
cálculos, manipulación de datos, y como ya se mencionó, el acceso y persistencia de los
datos a través de la capa repository.
JoyMeter Server tiene en su capa de lógica los siguientes servicios:
● UserService
● ActivityService
● SessionService
● NotificationService
● RecomendationService
● LevelOfJoyService
User service:
User service es el encargado de toda la lógica relacionada a las acciones que se
pueden hacer para un usuario, como actualizar un usuario, obtener una actividad sugerida
para ese usuario o obtener el Level of Joy histórico del usuario.
Este
servicio,
se
sirve
de
otros
servicios
como
NotificationService,
LevelOfJoyService y RecomendationService para completar la funcionalidad de cada
método. Asi como también hace uso del repositorio UserRepository para persistir los datos
del usuario una vez completadas con las acciones de cada método.
106
Activity service:
Se ocupa de la lógica relacionada a las actividades de un usuario como: obtener una
actividad en base a su identificador, agregar una nueva actividad de un usuario, borrar una
actividad y actualizar una actividad.
Este servicio hace uso del LevelOfJoyService ,para actualizar los niveles de felicidad
en base a los cambios en las actividades. El nivel de felicidad de un día dado, se calcula en
base a la totalidad de las actividades de ese día, la satisfacción alcanzada por cada una de
estas y el nivel del día anterior. Es por esta razón que cada nueva actividad, cada
actualización o eliminación, afecta al cálculo del nivel cada día.
Adicionalmente, activity service hace uso del ActivityRepository, para persistir las
actividades y sus cambios.
Session service:
Es responsable de la lógica de autenticación y generación de sesiones. Este
servicio, tiene un solo método signUp, el cual se comunica con la API de facebook usando
el token del usuario, valida el mismo contra facebook, si este no es un usuario válido de
facebook retorna una excepción, la cual será manejada posteriormente por un exception
handler de jersey y devuelta como un error Bad Request. Si el usuario es un usuario de
facebook, y el token no ha expirado, en base a el email que nos retorna facebook, se valida
si el usuario es un usuario de JoyMeter y se genera una session para el mismo, caso
contrario, se crea un usuario de joymeter y se genera la session para este.
Para lograr la comunicacion con facebook, se usa el modulo de spring “Spring
Social”.
Para la persistencia de las sesiones se usa el SessionRepository, mientras que la validación
de la existencia del usuario y la persistencia de un nuevo usuario se hacen a través de
UserRepository.
Notification service:
Es el encargado de la lógica para notificar al usuario sobre una actividad sugerida.
Este servicio sigue el patrón strategy, facilitando la implementación de distintas estrategias
para la notificación de actividades. Para poder enviar notificaciones a los clientes, el
servidor debe ser dado de alta en al API de GCM de google. Google provee una clave para
al Servidor, de esta manera se reconoce que 3rd party server está haciendo cuál llamado.
107
Dentro de llamado deberá incluirse a quien será dirigido el mensaje (en el campo “to”
, irá el GCM Token id del cliente cuando se registró a la api) y en “data” puede ir cualquier
objeto en formato JSON, este será el mensaje en sí.
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"data" : {
...
},
}
Para enviar el mensaje, la implementación actual, utiliza el default client de Jersey
para hacer un llamado post, con la información necesaria para ejecutar el envío de mensaje
satisfactoriamente.
Este servicio es utilizado, por el servicio UserService.
108
Recommendation service:
Es el servicio encargado de elegir una actividad para sugerir a un usuario. Este
servicio sigue el patrón strategy, permitiendo implementar nuevas estrategias para la
elección de la actividad a recomendar. Hoy se ofrece una implementación simple, la cual
toma las dos estrategias de recomendación mencionadas en el capítulo 7 - enfoque. Este
servicio es utilizado, por el servicio UserService.
Level of Joy service:
Es el responsable de mantener el cálculo del nivel de felicidad histórico. El nivel de
felicidad se actualiza para cada día, en cada cambio en las actividades del usuario, ya sea
una nueva actividad, una actividad que se elimina o una que se actualiza. Es importante re
calcular los niveles de satisfacción históricos en cada cambio de actividad porque el nivel de
felicidad de un día dado se calcula en base al nivel del día anterior, aplicando un factor de
decaimiento, y aplicando el nivel obtenido de las actividades del dia:
F (t) = F (t−1) × d + A(t)
F: función nivel de satisfacción en el día t
D: factor de decaimiento
A: función nivel de satisfacción promedio en actividades del día t
El servicio Level Of Joy, sigue el patrón template method, permitiendo implementar
distintas alternativas para el cálculo de la función A y el factor de decaimiento d
Por defecto, el cálculo se hace sacando el ​promedio ​del nivel de felicidad de las
actividades del día, y se aplica como factor de decaimiento el valor ​0.99
109
LevelOfJoyService hace uso de ActivityRepository para obtener la información de las
actividades, y del LevelOfJoyRepository para persistir los cálculos de los niveles de felicidad
históricos,
como
para
obtener
el
historial
y
ser
retornado
en
el
método
getLastEntriesByUser.
Capa Repository - Capa de persistencia
La capa repository, es la capa encargada de persistir los datos, y obtener los datos
de forma transparente a la capa superior (capa de servicio). Esta capa sigue el patrón de
strategy, permitiendo la implementación de distintas alternativas para la persistencia de
datos sin afectar a la capa superior, abstrayendo y encapsulando la implementación de la
persistencia, de esta manera, podemos persistir ya sea en una base de datos relacional, por
medio de un ORM como Hibernate, o consumiendo un servicio REST externo, sin
necesidad de modificar los llamados hechos en la capa de servicio.
110
Se eligió persistir los datos en una una bd relacional, MySQL. Donde se guardarán el
perfil de los usuarios, las actividades que el usuario va realizando, así como también el
historial de felicidad del usuario y las sugerencias. La persistencia, como se mencionó
anteriormente se realiza utilizando la implementación JPA de Hibernate.
Por ejemplo para el caso del UserRepository, el cual es utilizado por los servicios
SessionService y UserService. La interfaz UserRepository, define todos los métodos para
obtener la información del usuario y para persistir los cambios del mismo.
La implementación actual, implementa estos métodos definidos en la interfaz por medio de
JPA/Hibernate.
Contamos con cinco repositorios:
● ActivityRepository
111
●
●
●
●
AdviceRepository
LevelOfJoyRepository
SessionRepository
UserRepository
Cada uno encargado del acceso a datos de una entidad determinada, estas
entidades hoy se encuentran mapeadas uno a uno con una tabla de la base de datos, las
tablas son:
Apéndice C: Tecnologías utilizadas en el Cliente de JoyMeter
●
Facebook SDK: El SDK de facebook para Android, integra cualquier aplicación
Android que se desarrolle con la famosa red social. Luego de la integración, se
podrá hacer inicio de sesión, compartir contenido, enviar mensajes, invitaciones a la
aplicación, etc. Para más información ​https://developers.facebook.com/docs/android/
●
GCM (Google Cloud Messaging): es el servicio gratuito de google para enviar
mensajes en varias plataformas, como Android, iOS y Chrome. Por ejemplo, un
servidor puede enviar mensajes directamente a dispositivos individuales, grupos de
dispositivos o dispositivos suscritos a temas. Además, la aplicación en un dispositivo
112
puede enviar mensajes directamente a un servidor y a los dispositivos que
pertenecen al mismo grupo. Para más información ​https://cloud.google.com/
●
Otto: Otto es un proyecto de código abierto diseñado para implementar un bus de
eventos, donde los componentes pueden publicar y suscribirse a eventos de su
interés.
Utilizando Otto se logra desacoplar las diferentes partes de la aplicación al mismo
tiempo que les permite comunicarse de manera eficiente. Otto hace uso solamente
de 2 métodos. Lo cual lo hace muy simple para manejar. El método register acepta
por parámetro un componente el cual desea registrarse al bus de eventos. (en este
caso this es un componente visual).
A través de la anotación @Subscribe, se definen en el componente que se
subscribió, los métodos que se ejecutarán en caso de que un evento de su interés
sea ejecutado. Cuando un evento se dispare con el DTO que el componente
interesado define en su clase, se atenderá el evento disparado.
Por último, el componente que desee disparar este evento en el Bus, deberá hacerlo
con el método post de la siguiente manera
Para más información ​http://square.github.io/otto/
●
Retrofit: ​Retrofit es el HTTP client creado para Android por square. Retrofit
convierte una HTTP API en una interfaz de Java.
113
En este ejemplo puede verse la declaración de la interfaz GitHubService, con un
método listRepost() el cual arriba de la declaración del método, tiene una anotación
que dicho método se refiere a un llamado GET al path “users/{user}/repos” donde
{user} es un Path param en la url, definido tanto en la anotación, como en el método.
La clase Retrofit genera la implementación de la interface GitHubService
Cada llamada a los métodos creados en la interfaz, podrán ser sincrónicos (busy
waiting) o asincrónicos (definiendo un callback). En nuestro caso hacemos uso de los
llamados asincrónicos, justamente para evitar una espera ocupada y lograr así, una
aplicación más fluida a vista del usuario.
●
GreenDao: greenDAO es una biblioteca de código abierto para Android que
proporciona una interfaz fácil de usar para bases de datos SQLite para ayudar a los
desarrolladores a manejar datos de manera eficiente mediante mapeo de objetos
Java a tablas de la base (a menudo llamadas ORM). De esta manera se puede
almacenar, actualizar, eliminar y realizar queries para los objetos Java usando una
API orientada a objetos simples.
Para poder utilizar greenDAO en cualquier proyecto Android, es necesario crear un
proyecto secundario, el cual generará el código específico para el proyecto que se
está trabajando en cuestión (creando las respectivas entidades con las relaciones y
restricciones pertinentes). Esta funcionalidad se desacopló del uso de la base, en
relación a la construcción de la misma, por cuestiones de practicidad, modelamiento
y performance.
114
Para más información ​http://greenrobot.org/greendao/documentation/introduction/
●
MPAndroidChart: es una librería para desplegar todo tipo de gráficos en
aplicaciones Android, estos pueden ser gráficos de linea, de barra horizontales o
verticales, gráficos de torta, gráficos de vela, gráficos de burbuja, gráficos del tipo
radar, etc. Todos customizables y con la posibilidad de adaptarlos a la interfaz visual
de cualquier aplicación android. Solamente bastará indicar el tipo de gráfico, los
índices, la escala y el contenedor visual donde se desplegará. Para más información
https://github.com/PhilJay/MPAndroidChart
Autenticación con JoyMeter (Login)
Al estar JoyMeter integrado con Facebook, el usuario que desee utilizar la aplicación
por primera vez se encontrará con una página de Login, que le informará los términos y
condiciones de la aplicación, así como también los permisos necesarios para integrarse con
Facebook. El usuario se autenticará con las credenciales de facebook. Y posteriormente
pasará a estar registrado en JoyMeter.
Hay dos modos de implementar el inicio de sesión con Facebook en Android:
●
Clase LoginButton: proporciona un botón que puedes agregar a tu interfaz de
usuario. Sigue el token de acceso actual y tiene la capacidad de iniciar y cerrar
sesiones.
●
Clase LoginManager: permite comenzar inicios de sesión sin usar ningún elemento
de la interfaz de usuario.
115
JoyMeter, hace uso del botón de Login en la pantalla inicial. Para que el botón sea
visible al usuario solamente bastará asociar al layout de la pantalla de Login la clase
correspondiente al Botón de Facebook, y una acción al ser seleccionado por el usuario
(FacebookCallback).
En esta porción del código se puede apreciar que al botón “loginBtn” se le registra
un callback del tipo FacebookCallback<LoginResult>. Se creará una clase anónima con
dicha interfaz y se definirán los métodos “onSuccess”, “onCancel” y “OnError” para cada
resultado respectivamente.
Para identificar cada dispositivo Android que es usado para utilizar JoyMeter
debemos incluir el alta del dispositivo en GCM, en el proceso de registración del usuario que
ya poseíamos con facebook. El flow completo para el login del usuario sería:
116
JActivityService - Presentador de Actividades
Puede considerarse la capa de lógica que involucra todas las operaciones que
pueden llegar a realizarse con las actividades del usuario (crear, modificar, consultar,
eliminar), teniendo en cuenta la interacción con la base de datos local del cliente y la
actualización con el server, cuando así se requiera. Veamos cada caso particularmente.
●
Obtener las actividades correspondientes al usuario
○
Obtener las actividades de la base local
○
En caso que no exista ninguna solicitarlas al servidor
○
Al obtener la respuesta del servidor actualizar la base local
○
Disparar un evento con las actividades del usuario
Diagrama flujo - obtener localmente las actividades realizadas
117
Diagrama flujo - solicitar las actividades al servidor ya que localmente no existen
●
Agregar una actividad nueva.
○ Agregar la actividad en la base local
○
Llamar al servidor para agregar la actividad en el servidor.
○
En caso de no haber conexión o falla de conexión con el servidor, se
guardará localmente la acción para sincronizar el servidor posteriormente.
Diagrama de flujo - agregar una actividad local y en el servidor
Diagrama de flujo - servidor inaccesible, se guardará la acción para sincronizar luego
118
●
Actualizar una actividad existente
○ Actualizar la actividad en la base local
○
Llamar al servidor para actualizar en el servidor la actividad modificada.
○
En caso de no haber conexión o falla de conexión con el servidor, se
guardará localmente la acción para sincronizar el servidor posteriormente.
○
Disparar un evento con la actividad actualizada.
Diagrama de flujo - actualizar una actividad local y en el servidor
Como puede verse en el diagrama, si existe conexión a internet se envía la
información al servidor de JoyMeter para actualizar la actividad. En caso de que el resultado
del llamado al servidor sea un success, como ya se encuentra en la base local, no se realiza
ninguna acción. En caso de que el servidor nos retorne un error. Se guardará la acción, para
actualizar el server más tarde.
En caso de que no haya conexión a internet. El flujo sería el siguiente
Diagrama de flujo - servidor inaccesible, se guardará la acción para sincronizar luego
En caso de que el connectivityHelper retorne que no existe conección a internet. Se
procederá a guardar temporalmente la acción para sincronizar con el servidor cuando la
conexión se re-establezca.
●
Eliminar una actividad existente.
119
○
○
○
○
Eliminar la actividad en la base local.
Llamar al servidor para eliminar la actividad en el servidor.
En caso de no haber conexión o falla de conexión con el servidor, se
guardará localmente la acción para sincronizar el servidor posteriormente.
Disparar un evento con la actividad eliminada.
Al igual que en el flujo de actualizar una actividad, la respuesta satisfactoria del
server se desestima, ya que localmente se eliminó. En caso que el servidor de JoyMeter
retorne un error. Se procederá a guardar la acción correctora para cuando se restablezca la
conexión.
●
Sincronizar información con el servidor
○
Para enviar la información necesaria para sincronizar la información del
cliente al servidor, hay que tener unas consideraciones necesarias. Ya que el
usuario puede estar interactuando con el celular, creando, eliminando y
modificando actividades, que luego deberán o no, -depende de la acción que
se realizó- ser informada al servidor. Por ejemplo, si mientras el usuario no
posee conexión a internet crea una nueva actividad y luego la modifica. Al
servidor habrá que enviarle solamente el alta de una nueva actividad con los
valores de la actualización. También existe el caso en que primero cree una
actividad, luego la modifique, y al final la elimine. En ese caso, no habrá que
enviar información alguna de dicha actividad al servidor.
El payload para la api de sincronización corresponde al formato:
120
Donde syncupActionMethod podrá ser “SAVE”, “UPDATE” o “DELETE” y
activity es toda la información contenida de la actividad.
Cuando el endpoint de syncup responde con un SUCCESS, confirmando que
la base de datos del server se actualizó correctamente, se procede a eliminar
toda la información temporal del celular.
Compartir con Facebook
El código necesario para publicar una actividad recién realizada se encuentra
centralizado en el siguiente método:
Si el usuario seleccionó compartir en facebook la actividad, ya sea creada o
actualizada recientemente. Se inicializa el SDK de facebook, se crea el callbackManager, y
el contenido ShareContent de facebook a compartir.
121
Se creó la clase ShareUtils, para centralizar y simplificar la lógica para crear el
contenido a compartir en facebook, a través de la actividad pasada por parámetro.
Con el método show, se desplegará la ventana de facebook para compartir el
contenido, permitiendo al usuario la opción de etiquetar personas, indicar en qué ubicación
está realizando la actividad. Así como también escribir un comentario personalizado en
base a la publicación
Apéndice D: Manual de usuario
Pantalla inicial/principal de JoyMeter
Una vez que el usuario se haya autenticado a través de facebook, se accede a la
pantalla de inicio. En la misma se encuentran el listado de las últimas actividades, el botón
se utiliza para crear nuevas actividades y un botón
para poder acceder al gráfico de
satisfacción de los últimos días.
122
Cómo agregar una nueva actividad
Para cargar una nueva actividad, se debe presionar el botón
, se abrirá un
formulario de carga, en el cual se podrá cargar:
●
El título de la nueva actividad
●
El tipo de actividad (Trabajo, Entretenimiento, Recreación, Descanso, etc)
●
La descripción de la actividad
●
El nivel de satisfacción (de 1 a 5, representado con estrellas)
●
Fecha y hora de inicio de la actividad
●
Duración de la actividad
●
Si se desea compartir esta actividad en Facebook
Una vez cargados estos campos, se debe presionar el botón
ubicado en la
esquina superior derecha para confirmar la creación de la actividad. Una vez guardada la
actividad se retorna a la pantalla principal.
En caso que el usuario seleccione que desea compartir la actividad en Facebook,
antes de retornar a la pantalla principal se abrirá una pantalla de facebook para publicar en
la red social la actividad que está realizando el usuario. La misma tendrá una descripción
pre-cargada. El usuario podrá modificar/agregar el detalle de lo que va a publicar cómo
agregar una imagen a la misma publicación, como así también etiquetar amigos, mostrar
dónde se encuentra.
123
Cómo editar una actividad
En la pantalla principal de JoyMeter se listan las actividades más recientes del
usuario, manteniendo presionada la actividad deseada, se despliega un menú con las
opciones Editar y Eliminar.
Si se selecciona la opción Editar, se abrirá la página con un formulario con los mismos
campos que el formulario de carga, con los valores de la actividad precargados:
●
El título de la actividad
●
El tipo de actividad
●
La descripción de la actividad
●
El nivel de satisfacción
●
Fecha y hora de inicio de la actividad
●
Duración de la actividad
●
Si se desea compartir esta actividad en Facebook
Una vez actualizados los campos deseados, se debe presionar el botón
ubicado
en la esquina superior derecha. Una vez guardada la actividad actualizada con los nuevos
valores se retorna a la pantalla principal.
Al igual como en el caso de creación de una nueva actividad. En caso que el usuario
haya seleccionado que desea compartir la actividad en Facebook, se abrirá de la misma
manera anteriormente descrita la pantalla de facebook para compartir en la red social la
actividad.
124
Cómo eliminar una actividad
En la pantalla principal de JoyMeter, manteniendo presionada la actividad deseada,
se despliega un menú con las opciones Editar y Eliminar.
Si se selecciona la opción Eliminar , se eliminará la actividad mostrando una notificación de
que se eliminó correctamente.
Gráfico de Satisfacción
En la pantalla principal de JoyMeter, al presionar el botón
, se desplegará un
gráfico que representa el nivel actual de felicidad que el usuario posee, así como también el
historial de los últimos N días de cómo fue variando el nivel de felicidad. Esta variación se
calcula en base a las actividades que el usuario fue realizando y el nivel de satisfacción que
fue cargando en cada actividad.
Sugerencia de Actividades
Al final de la vista anterior, se puede apreciar el botón que el usuario puede utilizar
para solicitar a JoyMeter, le sugiera una actividad a realizar. La recomendación es
informada al usuario a través de una push-up notification.
125
Al hacer clic en la notificación se abre la aplicación de JoyMeter y se carga la
actividad que fue sugerida para ser finalmente aceptada por el usuario o descartada.
126
11 Referencias
[1] Daniel Goleman - Inteligencia Emocional - 1996.
[2] Martin Seligman - Authentic Happiness -2002.
[3] ​Fredrickson, B. L. - What good are positive emotions? - 1998.
[4] Fredrickson, B. L. The role of positive emotions in positive psychology: The
broaden-and-build theory of positive emotions. - 2001.
[5] Lucas, R.E., Diener, E., Larsen, R.J. - Measuring positive emotions - 2003.
[6] Diener, Ed; Smith, Heidi; Fujita, Frank - The personality structure of affect - 1995.
[7] Csikszentmihalyi, M. - Society, culture and person: a systems view of creativity - 1988.
[8] Fredrickson, B. L.; ​Joiner, T. - ​Positive emotions trigger upward spirals toward emotional
well-being​ - 2002.
[9] Oros, L. B.; Richaud, M.C.;Vanucci,V. - Desarrollo de emociones positivas en la niñez.
Lineamientos para la intervención escolar. - 2011.
[10] ​Derryberry, D. y Tucker, D. M. - Motivating the focus of attention. - 1994.
[11] Isen, A. M. - Positive effect and decision making. - 2000.
[12] Isen, A. M. y Daubman, K. A. - The influence of affect on categorization. - 1984.
[13] Isen, A. M., Daubman, K. A. y Nowicki, G. P. - Positive affect facilitates creative problem
solving. - 1987.
[14] Isen, A. M., Johnson, M. M. S., Mertz, E. y Robinson, G. F. - . The influence of positive
affect on the unusualness of word associations. - 1985.
[15] Lyubomirsky, S., Sheldon, K. M., & Schkade, D. - Pursuing happiness: The architecture
of sustainable change - 2005.
[16] Fredrickson, B. L. - The value of positive emotions - 2003.
[17] Fredrickson, B. L. y Levenson, R. W. - Positive emotions speed recovery from the
cardiovascular sequelae of negative emotions. - 1998.
[18] Fredrickson, B.L., Mancuso, R.A., Branigan, C. y Tugade, M.M. - The undoing effect of
positive emotions - 2000.
[19] Fredrickson, B. L. - Cultivating positive emotions to optimize health and well-being. 2000
[20] Fridja, N.H. - The emotions. - 1986.
[21] Salovey, P., Stroud, L.R., Woolery, A. y Epel, E. - Perceived emotional intelligence,
stress reactivity, and symptom reports: further explorations using the trait meta-mood scale.
- 2002.
[22] M. Wooldridge and N. R. Jennings - Intelligent agents:Theory and practice - 1995.
[23] Maes, P. - Agents that reduce work and information overload- 1994.
[24] Denis Lemongew Nkweteyim. - A Collaborative Filtering Approach To Predict Web
Pages of Iterest from Navigation Patterns of Past Users Within an Academic Website. 2005.
[25] Pazzani M. J., Muramatsu J., Billsus D.: Syskill & Webert: Identifying Interesting Web
Sites. - 1996.
[26] Lang, K. - Newsweeder: Learning to filter news. - 1995.
[27] Belkin, N. and Croft, B. - Information filtering and information retrieval. - 1992.
127
[28] A. Woodruff, R. Gossweiler, J. Pitkow, E.H. Chi, and S.K. Card. - Enhancing a Digital
Book with a Reading Recommender. - 2000.
[29] Kamba, T. Bharat, K. Albers, M.C. - The Krakatoa Chronicle: An Interactive,
Personalized Newspaper on the Web - 1995.
[30] Balabanović, M. Shoham, Y. - Fab: Content-Based, Collaborative Recommendation 1997.
[31] Sarwar, B. M., Karypis, G., Konstan, J. A., and Riedl, J. - Item-based Collaborative
Filtering Recommender Algorithms. - 2001.
[32] Schafer, J. B., Konstan, J. and Riedl, J. - Recommender Systems in E-Commerce 1999.
[33] Konstan, J. A., Riedl, J., Borchers, A. and Herlocker, J. L. - Recommender Systems: A
GroupLens Perspective. - 1998.
[34] Burke, R. Hybrid Recommender Systems: Survey and Experiments. User Modeling and
User-Adapted Interaction. - 2002.
[35] Ungar, L. H., and Foster, D. P. - Clustering methods for collaborative filtering. - 1998.
[36] Konstan, J., Miller, B., Maltz, D., Herlocker, J., Gordon, L., and Riedl, J. GroupLens:Applying Collaborative Filtering to Usenet News. - 1997.
[37] Claypool, M., Gokhale, A., Miranda, T., Murnikov, P., Netes, D. and Sartin,M. Combining Content-Based and Collaborative Filters in an Online Newspaper - 1999.
[38] Towle, B. and Quinn, C. - Knowledge Based Recommender Systems Using Explicit
User Models - 2000.
[39] Resnick, P., Iacovou, N., Suchak, M., Bergstrom, P. and Riedl, J. - GroupLens: An Open
Architecture for Collaborative Filtering of Netnews - 1994.
[40] Shardanand, U., and Maes, P. Social Information Filtering: Algorithms for Automating
'Word of Mouth'. In Proceedings of CHI '95. Denver, CO - 1995.
[41] Burke, R. Hybrid Recommender Systems: Survey and Experiments. User Modeling and
User-Adapted Interaction. 12(4), pages 331-370.
[42] Hanani, U., B. Shapira, and P. Shoval, ‘Information filtering: Overview of
issues, research and systems’. User Modeling and User Adapted Interaction 11 - 2001.
[43] Breese, J. S., Heckerman, D. and Kadie, C - ‘Empirical analysis of predictive algorithms
for collaborative filtering’. In: Proceedings of the 14th Annual Conference on Uncertainty in
Artificial Intelligence - 1998.
[44] Krulwich, B -‘Lifestyle Finder: Intelligent User Profiling Using Large-Scale Demographic
Data’. Artificial Intelligence Magazine 18 (2) - 1997.
[45] Middleton, S.E. "Capturing knowledge of user preferences with recommender systems",
Mini-thesis, University of Southampton - 2001.
[46] Yiming Yang and Xin Liu. A re-examination of text categorization methods. In
Proceedings of the 22nd Annual International ACM SIGIR Conference on Research and
development in information retrieval - 1999.
[47] Ian H Witten, Eibe Frank, and Mark A Hall. Data Mining: Practical Machine Learning
Tools and Techniques: Practical Machine Learning Tools and Techniques. Elsevier - 2011.
[48] Vladimir Vapnik. The Nature of Statistical Learning Theory. Springer - 1995.
[49] Hofmann - Probabilistic latent semantic indexing - 2004.
[50] E. Cohen, M. Datar, S. Fujiwara, A. Gionis, P. Indyk, R. Motwani, J. Ullman, and C.
Yang. Finding Interesting Associations without Support Pruning. In Proc. of the 16th Intl.
Conf. on Data Engineering - (ICDE 2000).
128
[51] J. Dean, and S. Ghemawat., ”MapReduce: Simplified Data Processing on Large
Clusters.”, In Proc. of 6th Symposium on Operating Systems Design and Implementation
(OSDI) - 2004.
[52] Burke, R: Hybrid recommender systems: Survey and Experiments. User Modeling and
User-Adapted Integration - 2007
[53] XPod https://www.researchgate.net/publication/234779704_A_Human_Activity_Aware_Learning_
Mobile_Music_Player
[54] CF-NADE - ​http://tech.hulu.com/blog/2016/08/01/cfnade.html​.
[55] PicFeel - ​http://www.emotional-apps.com/picfeel​.
[56] Happiness - ​http://babypl.pl/spyappsiphone/track-your-happiness-iphone-app​.
[57] Miriam Rocha Díaz - 2014 - Emociones, Estados de Ánimo e Inteligencia Emocional
https://miriamrochadiaz.wordpress.com/2014/05/06/emociones-estados-de-animo-e-intelige
ncia-emocional/
[58] Ahmad Ramsés Barragán Estrada y Cinthya Itzel Morales Martínez - 2014
-PSICOLOGÍA DE LAS EMOCIONES POSITIVAS: GENERALIDADES Y BENEFICIOS
[59] Enrique García Fernández Abascal -​ - ​Disfrutar de las emociones positivas: Psicología
129
Descargar