Applicazioni pratiche di deep learning/Raccomandazione prodotti

Caricamento librerie

modifica
import pandas as pd
import gensim

Parte 1 : Dati

modifica

Il dataset scaricabile da qui https://www.kaggle.com/datasets/knightbearr/sales-product-data contiene ordini di acquisto Amazon con le seguenti variabili :

  • Order.ID: - Un ID ordine è il sistema numerico che Amazon utilizza esclusivamente per tenere traccia degli ordini. Ogni ordine riceve il proprio ID ordine che non verrà duplicato. Questo numero può essere utile al venditore quando tenta di scoprire alcuni dettagli su un ordine come la data o lo stato della spedizione.
  • Product: - Il prodotto che è stato venduto.
  • Quantity.Ordered: - La quantità ordinata è la quantità totale di articoli ordinati nell'ordine iniziale (senza alcuna modifica).
  • Price.Each: - Il prezzo di ciascun prodotto.
  • Order.Date: - Questa è la data in cui il cliente richiede la spedizione dell'ordine.
  • Purchase.Address: l'ordine di acquisto viene preparato dall'acquirente, spesso tramite un reparto acquisti. L'ordine di acquisto, o PO, di solito include un numero PO, utile per abbinare le spedizioni agli acquisti; una data di spedizione; Indirizzo Di Fatturazione; Indirizzo di spedizione; e gli articoli della richiesta, le quantità e il prezzo.


# Caricamento dati:
df = pd.read_csv('products.csv')


df.head()
 	Order.ID 	Product 	Quantity.Ordered 	Price.Each 	Order.Date 	
0 	176558 	USB-C Charging Cable 		2 		11.95 		04/19/19 08:46 	 
1 	176559 	Bose SoundSport Headphones 	1 		99.99 		04/07/19 22:30 	
2 	176560 	Google Phone 			1 		600.00 		04/12/19 14:38 	
3 	176560 	Wired Headphones 		1 		11.99 		04/12/19 14:38 	
4 	176561 	Wired Headphones 		1 		11.99 		04/30/19 09:27 	


Parte 2 : Domanda di ricerca

modifica

Tramite l'algoritmo word2vec si vogliono trovare i prodotti simili ad un dato prodotto, in modo da raccomandarli al cliente quando quest'ultimo lo visualizza . Solitamente l'algoritmo word2vec viene utilizzato per generare una rete neurale, in cui data una parola restituisce un vettore di parole simili, in questo caso invece, dato un prodotto si vuole un vettore di prodotti simili.

Parte 3 : Modellizzazione e previsione

modifica

Ogni ordine può contenere più prodotti, quindi si crea una lista di liste di prodotti ciascuna relativa ad un ID ordine


df["Order.ID"] = df["Order.ID"].astype(str)
df["Product"] = df["Product"].astype(str)


train_products = df.groupby("Order.ID").apply(lambda order: order['Product'].tolist())


train_products
   Order.ID
   141234                        [iPhone]
   141235      [Lightning Charging Cable]
   141236              [Wired Headphones]
   141237              [27in FHD Monitor]
   141238              [Wired Headphones]
                         ...             
   319666      [Lightning Charging Cable]
   319667         [AA Batteries (4-pack)]
   319668               [Vareebadd Phone]
   319669              [Wired Headphones]
   319670    [Bose SoundSport Headphones]
   Length: 178437, dtype: object


Si crea il modello Word2Vet utilizzando la libreria gensim e passando le liste di prodotti


model = gensim.models.Word2Vec(train_products.values, window=10, min_count=2, workers=4)

Si trovano i prodotti simili all'iPhone e a Google Phone da visualizzare come consigliati nelle loro pagine web.


w1 = "iPhone"
model.wv.most_similar (positive=w1)
   [('Wired Headphones', 0.9473251700401306),
    ('USB-C Charging Cable', 0.9462663531303406),
    ('Bose SoundSport Headphones', 0.9417316913604736),
    ('Lightning Charging Cable', 0.929868221282959),
    ('Google Phone', 0.917348325252533),
    ('Vareebadd Phone', 0.8992235660552979),
    ('Apple Airpods Headphones', 0.8976684212684631),
    ('AA Batteries (4-pack)', 0.8788030743598938),
    ('AAA Batteries (4-pack)', 0.8527209758758545),
    ('27in FHD Monitor', 0.7630480527877808)]
w1 = "Google Phone"
model.wv.most_similar (positive=w1)
   [('Vareebadd Phone', 0.9472762942314148),
    ('USB-C Charging Cable', 0.944845974445343),
    ('Wired Headphones', 0.9425694346427917),
    ('Lightning Charging Cable', 0.9264997839927673),
    ('Bose SoundSport Headphones', 0.9237211346626282),
    ('iPhone', 0.9173483848571777),
    ('Apple Airpods Headphones', 0.9143347144126892),
    ('AA Batteries (4-pack)', 0.8524216413497925),
    ('AAA Batteries (4-pack)', 0.843543291091919),
    ('27in FHD Monitor', 0.8136987090110779)]