PFG: Sistema recomanador en una xarxa social amb esdeveniments


La construcció de sistemes que acompanyen a l’usuari en la seva presa de decisions és una de les metes dels sistemes recomanadors. Sobretot, en una recomanació de qualitat buscant en primer lloc l’eficiència. El repte de proveir una recomanació assequible, personal i de màxima qualitat és l’eix central dels dos pilars d’aquest sistema que els dividirem entre els aspectes tècnics i els aspectes psicològics. És a dir, parlem de tècnics quan l’objectiu és trobar regles i mètodes que explorin i explotin la informació existent d’una manera efectiva i eficient; els factors psicològics són tots aquells que acompanyen les dades a l’hora de presentar-se davant de l’usuari i els factors que engloben a l’usuari en el moment d’entrar dins el sistema (estat anímic, caràcter, circumstàncies personals...). 

Boonobo és el projecte que vaig iniciar amb els companys que formàvem el grup d'Octopi. Aquest consistia en una xarxa social d'esdeveniments on hi havia tres tipus de perfils: els usuaris, les emprese si els artistes. Tota mena d'esdeveniments classificats en 14 categories es trobaven en una sola aplicació a l'abast de tothom.
Donada la naturalesa d'aquesta aplicació, calia implementar un sistema recomanador d'esdeveniments i així és com va nèixer la idea que vaig presentar com a Projecte de Final de Grau.


Iniciat a l'agost del 2015 i presentant en convocatòria de febrer del 2016, ha estat un PFG que potser sembla temporalment curt, en quant a mesos es tracta però, que vaig viure molt i el qual vaig dedicar-hi fins a l'últim minut de temps lliure. Una dedicació, en mitjana, de 15 hores a la setmana van aconseguir que aquest projecte no només fos un projecte d'investigació amb un simple desenvolupament, sino que aconseguís ser ambiciós i complís tots els passos en el cicle de desenvolupament de software.
L'aplicatiu original no estava disponible i tampoc tenia una versió estable de la interficie web així que el projecte també va haver d'incloure una aplicació web per poder recollir i mostrar les dades als usuaris (recollir les interaccions, mostrar les recomanacions).
Del resultat final n'estic força contenta, que no vol dir conforme, sí és cert que vaig aconseguir investigar sobre sistemes recomanadors, aprender més sobre deenvolupament frontend, treure una aplicació que funcionés, testejar amb usuaris reals i analitzar els resultats obtinguts; malgrat això em va quedar l'indexació amb ElasticSearch i una millora del SR al tinter.
Al tinter no vol dir que al calaix, el projecte el continuo utilitzant per fer proves, és super important tenir en compte que les dades amb les que treballa són reals i això és... fantàstic!
La memòria estarà disponible al repositori de la Universitat en els pròxims mesos (ja penjaré l'enllaç al menú) però de mentre us deixo un breu resum amb captures de l'aplicació.

Resum del desenvolupament

Les xarxes socials són el reflex virtual dels grafs que uneixen a les persones arreu del món, han substituït en gran mesura les relacions físiques i han aconseguir apropar a milions de persones que comparteixen motivacions en comú. Paral·lelament, s’han reproduït la qualitat de les relacions humanes en aquests mitjans virtuals i una d’aquestes, són les recomanacions. A la vegada, aquestes han evolucionat per oferir a l’usuari una navegació més satisfactòria i personalitzada.

Els esdeveniments són el nexe entre un món i l’altre, quelcom convocat de manera virtual i que després es realitza físicament per fer trobar a un col·lectiu de consumidors: música, esport, fotografia... Una startup es forma a partir d’un projecte que neix entorn aquest efecte: Boonobo, una plataforma d’esdeveniments. I és amb aquest projecte, que s’ha volgut no només suplir una part del core de l’aplicatiu, sinó posar a disposició de tota la comunitat universitària, la investigació i el desenvolupament que l’ha dut a terme.

El projecte consisteix en construir un sistema recomanador que basant-se en l’activitat dels usuaris en l’aplicació, recomani un llistat d’esdeveniments a aquest. El projecte s’engloba dins de l’àmbit de la intel·ligència artificial, més concretament els recomanadors col·laboratius que explicarem més endavant. Ens basarem en diferents maneres d’enfocar les dades per obtenir esdeveniments amb procediments diferents.

Per aconseguir-ho es divideix aquest projecte en tres pilars:
  • El desenvolupament d’una aplicació web per poder interaccionar amb l’usuari i no només recollir les dades necessàries d’aquest, sinó mostrar els resultats i recollir el feedback. Aquesta permetrà registrar-se, loguejar-se, establir amistats amb altres usuaris, buscar usuaris, buscar esdeveniments, filtrar esdeveniments, mostrar esdeveniments i establir el vincle entre l’usuari i l’esdeveniment.
  • La implementació d’un algorisme que a partir de les dades recollides en l’aplicació, ens calculi aquestes recomanacions. Aquest algorisme tindrà diferents bases que es descriuen més endavant i a les quals es vol assolir en totalitat. Basant-nos en el sistema col·laboratiu, s’implementarà paral·lelament un model Nearest Neighborhood i un model All Neighborhood i s’aniran complementant amb nous filtres sorgits de la metodologia escollida per desenvolupar el projecte. 
  •  La recol·lecció del feedback dels usuaris després de l’ús de l’aplicació amb el sistema recomanador i l’elaboració d’unes estadístiques de funcionament com a conclusions del projecte. 

Conceptes prèvis

a. Sistema recomanador

Proveir un portal de recomanacions personalitzades però, implica que aquests sistema ha de saber-ho tot sobre l’usuari. Introduïm doncs una primera idea que seria el perfil d’usuari o el model usuari que genera un sistema recomanador per a poder treballar sobre aquest usuari. No cal que sigui complex, per començar podria tenir per exemple les preferències i gustos de la persona. La construcció d’aquest model és clau per al sistema recomanador i la manera de construir-lo depèn de cada aplicatiu.
Per a construir un bon model d’usuari ens els aplicatius actuals però, ens falta un últim pilar: la comunitat. Aquest entorn comunitari ens proporcionarà informació addicional com les amistats del nostre usuari i per tant, les preferències d’aquestes amistats. Construirem doncs el nomenat neighborhood o mostra de veïns que podrà anar des de tot el conjunt d’usuaris fins a subgrups que realitzi el propi usuari de les seves amistats.

b. Sistema col·laboratiu


La idea principal de l’elaboració d’una recomanació col·laborativa és explotar la informació sobre el comportament anterior o les opinions dels usuaris existents en la comunitat per a predir quins ítems o productes probablement més li agradarà o no a l’usuari actual. Per enfocar-ho i fer-nos una primera idea de com funciona, imaginem-nos una matriu d’usuaris i ítems i com a valors, per exemple, les seves avaluacions o ràtings sobre els productes que volem estudiar. Volem saber per un usuari quina serà la predicció d’avaluació o rating segons les reaccions de la resta d’usuaris i les seves en esdeveniments anteriors. Per això aplicarem la fòrmula:

Per calcular la similitut entre l’usuari a i qualsevol usuari de la matriu (b) utilitzarem la Correlació de Pearson.

c. Filtratge per contingut

No és tan fàcil trobar característiques de l’usuari que sempre ens serveixin: perquè un cop t’hagi agradat un llibre no vol dir que tots els llibres que pertanyen al mateix gènere t’agradin, o perquè el llibre fos de tapa tova no vol dir que se t’hagi derecomanar tots els llibres de tapa tova.

Els processos més avançats d’intel·ligència artificial són capaços de generar similituds entre ítems de manera bastant precisa; un exemple seria el More Like This que implementa ElasticSearch. En el cas d’aquest projecte, s’ha utilitzat el contingut per aplicar un filtre després del sistema col·laboratiu. Un cop s’obtenen les prediccions de recomanació, es passa un filtre basat en contingut per augmentar o disminuir el valor de la probabilitat p(a,r) on a és l’usuari i r l’ítem.

Tecnologies utilitzades


o IDE Eclipse
o Repositori Bitbucket i control de versions Git
o Framework CakePHP per a l’aplicació web (amb PHP, Javascript i HTML)
o Bootstrap template per una web responsive
o Servidor en Cloud Amazon Web Service
o Base de Dades MysQL
o Java i llibreria Apache Maths per al Sistema Recomanador
o Board Trello for Agile development

Conclusions de la implementació

  • Ampliar el coneixement sobre Sistemes Recomanadors
Aquest projecte m’ha proporcionat la oportunitat d’endinsar-me en el la branca de la intel·ligència artificial que més interès em despertava. He estat capaç de realitzar un curs sencer online sobre introducció a aquests sistemes i assolir els coneixements bàsics per planificar-ne un projecte.
  • Aprenentatge de noves tecnologies i metodologies
Durant aquest projecte no només s’ha aconseguit més coneixements teòrics sinó que també s’ha millorat les habilitats ens molts aspectes tècnics.

- Millorar el coneixement en Java
- Ampliar el coneixement de CakePHP i entendre Bootstrap
- Ampliar coneixement de Javascript
- Funcionament i configuració de AWS
  • Emprenedoria i treball en equip
Aquest projecte ha estat desenvolupat, com s’ha comentat anteriorment, en un marc d’emprenedoria tecnològica. Si bé s’ha decidit entregar de forma lliure el codi i el projecte perquè tothom en tingui accés i , aquest té una motivació real: l’aplicatiu final que utilitzarà aquest sistema recomanador.
La interfície generada adhoc en aquest projecte, no és res més que un reflexe dels requeriments mínims decidits per tot l’equip humà que conforma la startup. Una interfície necessària per recollir i mostrar informació que ja s’està realitzant, però no estava iniciada al principi de la planificació d’aquest projecte i per això ha requerit una implementació provisional en el marc del PFG.
El món de l’emprenedoria és molt gran per un alumne que just finalitza la carrera, i encara que no hagi influenciat el desenvolupament informàtic del PFG, els coneixements i l’aprenentatge ha estat intrínsec.
  •  Entendre l’ètica sobre la captura de dades implícites de l’usuari
El gran repte que s’obra dins aquest món és el de ser capaços de crear sistemes automatitzats i auto-aprenents que tinguin uns límits en quant a la recol·lecció de les dades es tracta. “Amb l’ètica hem topat” diuen els grans experts en aquesta àrea i és que, si algú pensava que la única limitació és la purament científica, és que no ha entès l’essència dels sistemes recomanadors. Ha estat curiós entendre aquest món i consultar la legislació europea que es vol fer al respecte.
  • Les limitacions dels sistemes recomanadors
Entre la gran investigació que hi ha d’aquest món, és poca si tenim en compte la gran quantitat de limitacions que té. L’inici en fred, la dispersió de dades, la introducció d’un nou element a avaluar en una gran base de dades, el creixement de les dades, l’ètica regulada en la legislació vigent, la sinonimia, diversitat d’opinions i la identificació d’usuaris diferents.
  • El desenvolupament d’una xarxa social per poder interaccionar amb l’usuari
S’ha aconseguit l’objectiu de desenvolupar un aplicatiu web amb totes les característiques de xarxa social per recopilar informació i construir així una interfície on es mostri també l’output del sistema.
  • La implementació d’un Sistema recomanador a partir de les dades escollides
Aquest projecte és, sense cap mena de dubte, el primer esgraó en aquesta especialitat i el que m’ha fet obrir els ulls a tot una disciplina nova. La importància principal d’aquest projecte no era fer un sistema recomanador perfecte, que si era important però no principal, sinó assentar les bases d’un coneixement per a un treball futur amb un projecte des d’on partir.
  • La recol·lecció de les opinions dels usuaris
Les proves del funcionament d’un aplicatiu es fan a partir de test automàtics i test d’usuaris. Així, se’n verifica el seu correcte funcionament i es detecta els possibles errors que puguin haver-hi. L el sistema recomanador? es tractava d’un software que només el podien validar aquells usuaris els quals se’ls hi havien recopilat les dades. Per suposat l’avaluació és subjectiva però, com he pogut comprovar en l’anàlisi de les dades, ajuda al programador a fer-se una opinió d’allò que desenvolupa.
  • La implementació d’un sistema que es nodreixi d’ ElasticSearch
Aquest era un dels objectius inicials que es volia desenvolupar en aquest projecte. Si bé s’ha explicat en apartats anteriors que la seva raó de ser-hi perdia força per el canvi d’enfocament que s’havia donat al treball, tampoc hauria estat descabellat incorporar-lo. El filtratge per contingut hauria estat més complex encara que no hagués funcionat 100% amb tots els esdeveniments. L’altre motiu de no incloure-ho, que s’explica en aquestes línies, va ser un motiu personal. Per indisposició mèdica vaig perdre el temps necessari per desenvolupar-ho i incloure-ho al projecte i després de fer una valoració de la importància del backlog, es va descartar.
  •  Planificar i desenvolupar un projecte informàtic
Se’ns explica a la carrera que, un bon enginyer no és aquell que sap desenvolupar millor que un altre les habilitats tècniques (com podrien ser programació), sinó aquell que és capaç de tenir els coneixements suficients per planificar un projecte segons els seus requeriments. Què significa això? identificar quines tasques necessitaran més temps que altres no per la quantitat de feina, sinó per la complexitat, resoldre conflictes de calendari quan quedin tasques per fer i no s’arribi als terminis, ser capaç de redactar una memòria on quedin reflectits tots els mesos de treball...

Conclusions dels resultats


Com s’ha comentat en apartat anteriors, els possibles errors de l’aplicatiu web han estat corregits gràcies al feedback dels usuaris. Però, com verifiquem que el sistema recomanador funciona? Així doncs, es va demanar a tots els usuaris que s’havien registrat a la pàgina web que emplenessin un formulari on havien de donar tres puntuacions: la qualitat dels esdeveniments dels apartats recomanats, top 20 i random.
A partit dels resultats es realitza un diagrama de caixa, histogrames i es planteja una hipòtesi sobre les mitjanes de les tres valoracions en una població i es demostra a partir del test de mitjanes contrastades. És amb aquestes dades que s’acaba provant la qualitat final del sistema recomanador i com compleix l’objectiu inicial marcat.


Qui sap? Potser això és l'excusa perfecte per escriure noves entrades sobre els sistemes recomanadors. El cert, és que el trobo un món super interessant (i què no trobo jo interessant en aquest món?) i en vaig aprendre força durant el PFG. Per concloure aquesta entrada informar que la qualificació final va ser de 9 sobre 10, faré accessible també l'exposició de la defensa.


0 Comentarios