Una visió general del sistema de Recomanació i com implementar-ne una des de zero

Aquest bloc inclou una visió general dels sistemes de recomanació que inclouen historial, present, futur, diferents categories d'ell i finalment codi per processar una recomanació de broma.

Foto de Edo Nugroho a Unsplash

Present present i futur:

Si ens fixem en la història del sistema de recomanacions, la idea es va encendre entre 1992 i 1996. Abans s’imaginava els sistemes de recomanació abans que la gent parlés de filtratge col·laboratiu es coneixia com a personalització. Però tot era manual. Per exemple: Amb un agent de viatges que sàpiga que esteu interessats en un safari, mantindrà els ulls al marge del tipus de viatge que us agradaria, no només d’alguna cosa que algú voldria fer. Com a segon exemple: Els compradors personals tenien algunes bases de dades senzilles on podien fer servir els perfils de la gent quan entraven nous productes i tenien idea de qui podrien considerar que seria un bon candidat per a un nou producte. L'any 2007 Netflix va anunciar una competència d'1 milió de dòlars i va canviar el curs del sistema de recomanacions. Va atreure persones de molts orígens participar en la competició. Van sorgir nous algoritmes juntament amb noves fórmules matemàtiques. Per la forma en què la biblioteca sorpresa que utilitzaré per fer un sistema de recomanació d’acudits està completament desenvolupat vigilant el treball de recerca publicat per l’equip guanyador del premi Netflix. Mentre esperem, encara hi ha moltes coses que no sabem. El problema de la recomanació temporal. Com puc afegir les meves recomanacions no només en coses com la temporada en què la gent ha treballat durant un temps, sinó en seqüenciar, què consumiríeu després, ja que ja heu consumit això. Les recomanacions per a l'educació, que és una de les àrees, eren temàtiques molt temporals.

Àmplia divisió del sistema de recomanacions:

Principalment hi ha dues categories de sistema de recomanació. 1. Filtratge col·laboratiu 2. Filtratge basat en contingut

Filtratge col·laboratiu: la clau del filtratge col·laboratiu es basa en el supòsit que les persones que van coincidir en el passat estaran d’acord en el futur i que els agradarà el tipus d’elements similars que els hi va agradar en el passat. Les tres categories principals del filtratge col·laboratiu són: 1. Similitud usuari-usuari 2. ítem Semblança de l’element 3. model basat

Similitud usuari-usuari i element-ítem

Filtratge basat en contingut: els mètodes de filtratge basats en contingut es basen en una descripció de l’element i un perfil de les preferències de l’usuari. Aquests mètodes s’adapten millor a situacions en què es coneixen dades d’un element (nom, ubicació, descripció, etc.), però no de l’usuari.

Recomanació basada en contingut i col·laboració

Prerequisit

1.Basic Python 2.Basic pandas 3.Einess per explorar la biblioteca sorpresa 4. Keras (opcional)

Si voleu saltar directament a codis, aneu a aquest enllaç de github i cerqueu el quadern de jupyter.

Us explicaré cada un dels passos principals que he seguit durant la resolució del problema, però crec fermament si esteu interessats en l’explicació completa del problema i us interessa saber sobre l’ús de la biblioteca sorpresa, aleshores heu de fer un cop d’ull al git repo després de passar per bloc

Anem a començar. Algunes dades bàsiques sobre les dades que utilitzarem.

Descripció de dades

Ara faré un pla per abordar el problema actual i avançar lentament cap a una solució. Passarem per cada pas amb fragments de codi. 1. Recollida de dades 2. Divisió de proves de tren 3. Estadístiques simples 4. Estructura de les dades al format compatible de la biblioteca sorpresa 5. Definició de la mètrica d'error 6. Utilitzant el model de base 7. Proveu diferents models 8. Resultat

Recopilació de dades

  1. Es proporcionen tres fulls excel·lents en dades. Els unirem i formarem un DataFrame combinat de pandes de pitons. Tenim un total de 73421 usuaris.
Combina totes les dades

2. Tal com es descriu a la informació del conjunt de dades, les qualificacions 99 indiquen que l’usuari no ha valorat aquesta broma. Eliminarem aquests registres i prepararem les dades en format ['user_id', 'joke_id', 'rating'].

Preparació de dades

Prova de tren dividida

Utilitzarem scikit-learning train_test_split i dividirem les dades com a 70-30. El 70% estarà disponible per al tren i el 30% per a la prova

Estadístiques bàsiques

1. Nota mitjana per usuari i per broma

distribució de qualificació de tots els usuarisdistribució de la qualificació de totes les bromes

Estructura les dades en format compatible de la biblioteca sorpresa

Estructurarem les dades segons la biblioteca sorpresa. Accepta les dades en un format com a "[usuari", "acudit", "qualificació"]. Si haguéssim tingut algun problema per a la recomanació de pel·lícules, hauríem estructurat les dades com a ['usuari', 'pel·lícula' i 'qualificació'].

preparar dades amb estil de biblioteca sorpresa

Definició de la mètrica d’error

farem servir l’error absolut absolut de mitja normalitzada com a mètrica d’error.

Fórmula d’error absolut absolut (NAME) normalitzadacodi per calcular NMAE

Ús del model base

Crearem un model de línia base utilitzant el model de línia de referència donat per la biblioteca sorpresa. El model base proporciona 0,2033 NMAE, provarem diferents models de sorpresa i combinarà tots els resultats per obtenir millors resultats.

Proveu diferents models

  1. Model de base de KNN: utilitza una tècnica basada en la similitud per predir la classificació dels usuaris per als nous acudits. En el nostre cas, l’error NMAE és 0,196

2. XGBoost en userAverageRating, jokeAverageRating, sortida de base i sortida de KNN Baseline: Hem combinat tota la sortida del model sorpresa anterior i hem executat un model de regressió XGB a les dades després de l'hiperàmetre paràmetre. Aquí obtenim un resultat lleugerament millor de 0,1928 NMAE

3. Model SVD: el model SVD utilitza tècniques de factorització de matrius per resoldre el problema de compliment de la matriu i prediu la qualificació.

4. XGBoost en userAverageRating, jokeAverageRating, sortida de base, sortida de KNN Baseline i sortida del model SVD. Aquest model dóna 0,18 NMAE i és el millor fins ara.

5. Model amb enginyeria de funcions: obtinc dues funcions fàcils per comprovar el seu efecte en el model. Una de les funcions és user_average + joke_avg-global_avg. Aquest model dóna NMAE com a 20.2. També havia provat altres tècniques d’enginyeria de funcions. Tampoc van funcionar bé.

6. Models d'aprenentatge Depp mitjançant keras: Com que l'enginyeria de funcions no va funcionar bé, estic pensant provar alguns models de xarxes neuronals senzilles amb keras. Vaig provar 3 models diferents. Una amb totes les funcions bàsiques com la mitjana d’usuari, la broma mitjana, la segona i la tercera amb totes les funcions, però amb diferents arquitectures. Un dels models tenia un 14,9% NMAE.

Resultats

Com veiem el model Second_NN funciona millor, ja que té el error de prova més baix.

Pensaments finals

Com tots sabem que cap model és perfecte. Hi ha i sempre hi haurà marge de millora en aquest model. Pot tractar diferents tècniques d’enginyeria de funcions, alguns consells d’experts de domini i diferents arquitectures de xarxes neuronals poden conduir a models millors.

Com a segona nota, puc dir que els sistemes de recomanació creixen ara fa uns dies. La biblioteca Sorpresa facilita la vida als desenvolupadors donant a la famosa implementació del model. Per crear un sistema bàsic de recomanacions és realment útil. Crec que he complert el meu propòsit d'escriure aquest bloc i he fet que els desenvolupadors coneguessin la biblioteca sorpresa amb una petita introducció de codificació. El codi complet està disponible aquí a git.