Applicazioni pratiche di deep learning/Raccomandazione prodotti
Caricamento librerie
modificaimport pandas as pd
import gensim
Parte 1 : Dati
modificaIl 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
modificaTramite 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
modificaOgni 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)]