Lunalorla / DI-CA_Icon-2021-2022

Progetto dell'anno 2021-2022 per l'esame di Ingegneria della Conoscenza presso l'Università degli Studi di Bari Aldo Moro.
0 stars 0 forks source link

Recommender System #1

Closed Lunalorla closed 1 year ago

Lunalorla commented 2 years ago

Recommender System Content Based: -https://towardsdatascience.com/hands-on-content-based-recommender-system-using-python-1d643bf314e4

https://github.com/youonf/recommendation_system/blob/master/content_based_filtering/content_based_recommender_approach1.ipynb

-https://www.datacamp.com/tutorial/recommender-systems-python

To do list:

1) come aggiungere un nuovo elemento a un Dataframe (deve avere tutte le categorie, ma alcune potrebbero essere vuote, problema?)

2) ordine esecuzione:

-prendiamo in input un gioco che piace all'utente con tutte le categorie che richiediamo (decidere se deve inserirle per forza o può anche non farlo)

-controlliamo se l'elemento si trova già nel dataframe, altrimenti inserirlo [-salvarsi l'indice dell'elemento appena aggiunto (probabilmente sarà un'aggiunta alla fine)] [-oppure salvarsi l'indice dell'elemento che si sta cercando se lo si trova già all'interno]

-creare la tf-idf matrix, basandosi sulle categorie che vogliamo includere [-per le categorie su cui basare la creazione della tf-idf, unirle prima in un'unica categoria (vedi file web)]

-calcola la similarità del coseno sulla stessa matrice (2 volte)

-applica la funzione che calcola i top n giochi raccomandati (vedi file web) [-(far vedere la differenza di punteggi di similarità, tra i risultati proposti)]

Lunalorla commented 2 years ago

IDEA:

-dare più tipologie di recommendation, la prima è una raccomandazione semplice e diretta, e magari poi dare altre due scelte, basate su categorie precise o magari con l'aggiunta anche dell'ordinamento per prezzo (questo ordinamento viene dopo aver già avuto i risultati della raccomandazione)

Lunalorla commented 2 years ago

Appunti gestione del dataset:

-ripulire e controllare la categoria "SteamSpyTags" -si può togliere "Achievements" -capire la differenza tra "Average playtimes" e "Median playtimes" e capire se toglierne uno dei due -la categoria "English" si riferisce solo al fatto che il gioco sia in Inglese o meno? capire questo e decidere se tenerla, visto che non vengono date info sulle altre lingue, il valore è solo 0 o 1 -"AppId" si riferisce a un ID all'interno di Steam? capire e decidere se tenerlo o meno tanto non sarebbe un problema per la gestione degli index interni -"Categories" presenta una serie di parole separate da punti e virgola, capire come gestire queste frasi se si utilizza la categoria, oppure ripulirla in maniera migliore

RobertoDimatteo commented 2 years ago

1) "SteamSpy_Tags" è tipo "Genre" ma più specifico. Potenzialmente può migliorare la qualità delle raccomandazioni, ma è più difficile da utilizzare; 2) Sono d'accordo, si può togliere "Achievements"; 3) "Average Playtimes" prende tutti i valori di playtime di ogni giocatore, li somma e li divide per il numero di giocatori. "Median Playtimes" prende il valora al centro di una lista in ordine crescente contenete tutti i valori di playtime dei giocatori. (Average di {3,3,6} è 4) (Median sulla stessa lista è 3); 4) Secondo me "English" si può rimuovere, non da altre informazioni utili sulla lingua del gioco; 5) "AppId" penso si riferisca ad un ID all'interno di Steam, sì. Secondo me si può mantenere, si può usare sia come output come "strumento" per la ricerca dei giochi una volta fatto la Cos_Sim (invece di andare per indice si può usare questo, DA CONSULTARE l'uso); 6) Penso che "Categories" si possa rimuovere. Da sì informazioni utili ma non essenziali per lavorare. Un po' Genre e SteamSpy_Tags.

RobertoDimatteo commented 2 years ago

IDEA:

-dare più tipologie di recommendation, la prima è una raccomandazione semplice e diretta, e magari poi dare altre due scelte, basate su categorie precise o magari con l'aggiunta anche dell'ordinamento per prezzo (questo ordinamento viene dopo aver già avuto i risultati della raccomandazione)

Il prezzo lo si potrebbe mettere a priori come parametro per la lista dei risultati della raccomandazione. La raccomandazione per altre categorie si potrebbe mettere, penso intendi di dare la possibilità all'utente di scegliere il tipo di raccomandazione che vuole ricevere.

Lunalorla commented 2 years ago

IDEA: -dare più tipologie di recommendation, la prima è una raccomandazione semplice e diretta, e magari poi dare altre due scelte, basate su categorie precise o magari con l'aggiunta anche dell'ordinamento per prezzo (questo ordinamento viene dopo aver già avuto i risultati della raccomandazione)

Il prezzo lo si potrebbe mettere a priori come parametro per la lista dei risultati della raccomandazione. La raccomandazione per altre categorie si potrebbe mettere, penso intendi di dare la possibilità all'utente di scegliere il tipo di raccomandazione che vuole ricevere.

si per il prezzo intendevo che oltre ad essere usato come parametro per il calcolo della similarità, anche di imporre il filtro sui risultati, in base al budget richiesto dall'utente. Per la seconda cosa, sì, potremmo dargli più modalità di raccomandazione, sempre partendo da quella totale e poi magari facendogli vedere che ha più possibilità.

Lunalorla commented 2 years ago
  1. "SteamSpy_Tags" è tipo "Genre" ma più specifico. Potenzialmente può migliorare la qualità delle raccomandazioni, ma è più difficile da utilizzare;
  2. Sono d'accordo, si può togliere "Achievements";
  3. "Average Playtimes" prende tutti i valori di playtime di ogni giocatore, li somma e li divide per il numero di giocatori. "Median Playtimes" prende il valora al centro di una lista in ordine crescente contenete tutti i valori di playtime dei giocatori. (Average di {3,3,6} è 4) (Median sulla stessa lista è 3);
  4. Secondo me "English" si può rimuovere, non da altre informazioni utili sulla lingua del gioco;
  5. "AppId" penso si riferisca ad un ID all'interno di Steam, sì. Secondo me si può mantenere, si può usare sia come output come "strumento" per la ricerca dei giochi una volta fatto la Cos_Sim (invece di andare per indice si può usare questo, DA CONSULTARE l'uso);
  6. Penso che "Categories" si possa rimuovere. Da sì informazioni utili ma non essenziali per lavorare. Un po' Genre e SteamSpy_Tags.

-si potrebbero ripulire e unire Categories e Genres, ma poi potrebbero risultare troppo lunghi o con troppe info all'interno -quindi average playtimes e median si potrebbero lasciare entrambi o solo uno dei due? secondo me meglio solo average -per AppId meglio consultare l'uso -per i ratings, meglio lasciarli separati? o unirli così da avere la totalità di ratings che un gioco ha ricevuto? poi al massimo per la knowledge base si può pensare di basarsi su uno o l'altro per azioni da compiere

Lunalorla commented 2 years ago

Aggiornamento:

riduzione del dataframe per la vettorizzazione con td-idf alle sole categorie ideali e testuali, i valori numerici non potrebbero essere usati per il calcolo della similarità. riduzione del dataframe con le categorie scelte, testuali e non, così da poter operare su un dominio ristretto.