Scritto da Varun Joshi E Gauri Kamat
Poiché l’e-commerce continua a dominare lo spazio di vendita al dettaglio, la sfida di abbinare accuratamente i prodotti tra piattaforme e database diventa più complessa. In questo articolo dimostriamo che la corrispondenza dei prodotti può essere semplicemente un esempio del quadro statistico più ampio della risoluzione delle entità.
L'abbinamento del prodotto (PM) si riferisce al problema di capire se due inserzioni separate si riferiscono effettivamente allo stesso prodotto. Esistono diverse situazioni in cui questo è importante. Ad esempio, considera i casi d'uso seguenti:
- Con la rapida espansione dei mercati online, le piattaforme di e-commerce (ad esempio Amazon) hanno migliaia di venditori che offrono i loro prodotti e nuovi venditori vengono regolarmente inseriti nella piattaforma. Inoltre, questi venditori aggiungono potenzialmente migliaia di nuovi prodotti alla piattaforma ogni giorno (1). Tuttavia, lo stesso prodotto potrebbe già essere disponibile sul sito web di altri venditori. L'abbinamento dei prodotti è necessario per raggruppare queste diverse offerte in un unico elenco in modo che i clienti possano avere una visione chiara delle diverse offerte disponibili per un prodotto
- Nei mercati e-commerce, i venditori possono anche creare elenchi duplicati per acquisire più immobili nella pagina di ricerca. In altre parole, possono elencare lo stesso prodotto più volte (con una leggera variazione nel titolo, nella descrizione, ecc.) per aumentare la probabilità che il loro prodotto venga visto dal cliente. Per migliorare l'esperienza del cliente, è necessaria la corrispondenza dei prodotti per rilevare e rimuovere tali elenchi duplicati
- Un altro caso d’uso importante è l’analisi della concorrenza. Per fissare prezzi competitivi e prendere decisioni sull’inventario, le aziende di e-commerce devono essere consapevoli delle offerte per lo stesso prodotto da parte della concorrenza.
- Infine, i servizi di confronto dei prezzi, ad esempio Google Shopping (2), necessitano della corrispondenza dei prodotti per determinare il prezzo di un prodotto su diverse piattaforme.
In questo articolo mostriamo come il framework Entity Risoluzione (ER) ci aiuta a risolvere il problema del PM. Nello specifico, descriviamo un framework ampiamente utilizzato in ER e dimostriamo la sua applicazione su un set di dati PM sintetico. Iniziamo fornendo informazioni rilevanti sull'ER.
La risoluzione delle entità (ER) è una tecnica che identifica le entità duplicate all'interno o tra origini dati. ER all'interno dello stesso database viene comunemente chiamato deduplicazionementre viene chiamato ER su più database collegamento tra registrazioni. Quando sono disponibili identificatori univoci (come i numeri di previdenza sociale), ER è un compito abbastanza semplice. Tuttavia, tali identificatori in genere non sono disponibili per motivi legati alla riservatezza dei dati. In questi casi, l’ER diventa notevolmente più complessa.
Perché l'ER è importante? ER può aiutare ad ampliare i database esistenti con dati provenienti da fonti aggiuntive. Ciò consente agli utenti di eseguire nuove analisi, senza il costo aggiuntivo della raccolta di più dati. ER ha trovato applicazioni in più settori, tra cui l'e-commerce, la ricerca sui diritti umani e l'assistenza sanitaria. UN recente applicazione prevede il conteggio delle vittime della guerra civile salvadoregna, applicando l'ER alle indagini retrospettive sulla mortalità. Un altro applicazione interessante sta deduplicando i nomi degli inventori in un database di brevetti gestito dall'Ufficio Brevetti e Marchi degli Stati Uniti.
ER deterministico e probabilistico
I metodi ER deterministici si basano sull'accordo esatto su tutti gli attributi di qualsiasi coppia di record. Ad esempio, supponiamo di avere due file A e B. Diciamo che stiamo confrontando i record UN dal file A e B dal file B. Inoltre, supponiamo che il confronto sia basato su due attributi: tipo di prodotto (ad esempio, abbigliamento, elettronica) e anno di produzione. Una regola deterministica dichiara (un, b) come collegamento, se tipo prodottoᵃ = tipo prodottoᵇ e annoᵃ= annoᵇ. Ciò è fattibile, purché tutti gli attributi siano categorici. Se disponiamo di un attributo testuale come il nome del prodotto, il collegamento deterministico potrebbe produrre errori. Ad esempio, se nomeᵃ = “Sony TV 4” e nomeᵇ = “Sony TV4”, allora (un, b) verrà dichiarato non-link, anche se i due nomi differiscono solo per uno spazio.
Ciò di cui abbiamo bisogno allora è qualcosa che tenga conto dei livelli parziali di accordo. È qui che è possibile utilizzare l'ER probabilistico. Nell'ER probabilistico, ogni coppia (un, b) viene assegnata una probabilità di essere un collegamento, in base a (1) quanti attributi concordano; e (2) quanto sono d'accordo. Ad esempio, se tipo prodottoᵃ = tipo prodottoᵇ, annoᵃ= annoᵇ e nomeᵃ e nomeᵇ sono abbastanza vicini, allora (un, b) verrà assegnata un'alta probabilità di essere un collegamento. Se tipo di prodottoᵃ = tipo di prodottoᵇ, annoᵃ= annoᵇ, ma nomeᵃ e nomeᵇ sono agli antipodi (ad esempio “AirPods” e “Sony TV4”), allora questa probabilità sarà molto più bassa. Per gli attributi testuali si basa l'ER probabilistico metriche della distanza delle cordecome il Jaro Winkler e il Levenstein distanze.
Il modello Fellegi-Sunter
Il modello Fellegi-Sunter (3) fornisce un quadro probabilistico, consentendo agli analisti di quantificare la probabilità di una corrispondenza tra i record, in base alla somiglianza dei loro attributi. Il modello funziona calcolando un peso di corrispondenza per ciascuna coppia di record di entrambi i file. Questo peso riflette il grado di accordo tra i rispettivi attributi. Per una data coppia di record il peso della corrispondenza è
dove mᵢ è la probabilità che i due record concordino sull'attributo io dato che sono una corrispondenza; uᵢ è la probabilità che i due record concordino sull'attributo io dato che non corrispondono; E lambda è la probabilità a priori di una corrispondenza, ovvero la probabilità di corrispondenza senza altre informazioni sulla coppia di record. IL M la probabilità generalmente riflette la qualità delle variabili utilizzate per il collegamento, mentre il tu la probabilità riflette l'accordo incidentale tra coppie di record non corrispondenti.
Il peso della corrispondenza viene convertito in una probabilità di corrispondenza tra due record.
Infine, la probabilità di corrispondenza viene confrontata con un valore soglia scelto per decidere se la coppia di record corrisponde, non corrisponde o richiede un'ulteriore revisione manuale.
Generazione di dati
Generiamo dati per riflettere uno scenario realistico di corrispondenza dei prodotti. Nello specifico, generiamo il file A comprendente 79 record e il file B comprendente 192 record. Sono presenti 59 record sovrapposti tra i due file. Entrambi i file contengono quattro variabili di collegamento, vale a dire il nome del prodotto, il tipo di prodotto, la marca e il prezzo. Ad esempio, un record nel file A che rappresenta gli Airpod Apple ha il nome del prodotto “Apple AirPods”, il tipo di prodotto “Auricolari”, il marchio registrato è “Apple” e il prezzo del prodotto è $ 200. Il nome, il tipo e la marca del prodotto sono variabili con valori di stringa, mentre il prezzo è una variabile numerica a valori continui. Generiamo anche errori in ciascuna delle variabili di collegamento. Nei campi con valori stringa introduciamo errori di cancellazione; ad esempio, un Apple Watch serie 6 può essere registrato come “Apple Watch Series 6” nel file A e come “Apple Watch 6” nel file B. Introduciamo anche errori di cambio maiuscole e minuscole nei campi stringa; ad esempio, lo stesso prodotto potrebbe essere registrato come “apple watch serie 6” nel file A e come “Apple Watch 6” nel file B. La natura continua della variabile prezzo può indurre automaticamente errori. Ad esempio, un prodotto potrebbe avere un prezzo di $ 55 in un file, ma di $ 55,2 nell'altro.
Per la generazione di dati sintetici, abbiamo utilizzato la versione gratuita di ChatGPT (ovvero GPT 3.5) (4). Per la generazione dei dati sono stati utilizzati i tre prompt seguenti:
Prompt 1: generare il set di dati con collegamenti
Generate a synthetic dataset which links 59 distinct products from two different sources.
The dataset should have the following columns: Title_A, Product_Type_A, Brand_A, Price_A, Title_B, Product_Type_B, Brand_B, Price_B.
Each row of the dataset refers to the same product but the values of the corresponding columns from Dataset A and Dataset B can be slightly different. There can be typos or missing value in each column. As an example, check out the following couple of rows:
Title_A | Product_Type_A | Brand_A | Price_A | Title_B | Product_Type_B | Brand_B | Price_B
Levis Men 505 Regular | Jeans | Levis | 55 | Levs Men 505 | Jeans | Levis | 56
Toshiba C350 55 in 4k | Smart TV | Toshiba | 350 | Toshiba C350 4k Fire TV | Smart TV | Toshiba Inc | 370
Nike Air Max 90 | Sneakers | Nike | 120 | Nike Air Max 90 | Shoes | Nikes | 120
Sony WH-1000XM4 | Headphones | Sony | 275 | Sony WH-1000XM4 | | Sony | 275 |
Make sure that |Price_A - Price_B| *100/Price_A <= 10
Output the dataset as a table with 59 rows which can be exported to Excel
Il prompt precedente genera il set di dati con i collegamenti. Il numero di righe può essere modificato per generare un set di dati con un numero diverso di collegamenti.
Per generare più record per ogni singolo set di dati (set di dati A o set di dati B) sono stati utilizzati i due prompt seguenti.
Prompt 2: per generare più record per il set di dati A
Generate 20 more distinct products for the above dataset. But this time, I only need the information about dataset A. The dataset should have the following columns: Title_A, Product_Type_A, Brand_A, Price_A
Prompt 3: per generare più record per il set di dati B
Now generate 60 more distinct products for the above dataset. But this time, I only need the information about dataset B. The dataset should have the following columns: Title_B, Product_Type_B, Brand_B, Price_B. Don't just get me electronic products. Instead, try to get a variety of different product types e.g., clothing, furniture, auto, home improvement, household essentials, etc.
Collegamento tra registrazioni
Il nostro obiettivo è identificare i record sovrapposti tra i file A e B utilizzando il modello Fellegi-Sunter (FS). Implementiamo il modello FS utilizzando il schiocco pacchetto (5) in Python.
Per confrontare il titolo del prodotto, il tipo di prodotto e il marchio, utilizziamo l'impostazione predefinita nome funzione di confronto disponibile in schiocco pacchetto. Nello specifico la funzione di confronto presenta i seguenti 4 livelli di confronto:
- Corrispondenza esatta
- Distanza Damerau-Levenshtein <= 1
- Somiglianza con Jaro Winkler >= 0,9
- Somiglianza con Jaro Winkler >= 0,8
Se una coppia di prodotti non rientra in nessuno dei 4 livelli, si verifica un default Qualunque altra cosa il livello è assegnato alla coppia.
IL schiocco il pacchetto non ha una funzione per confrontare colonne numeriche. Pertanto, per il confronto dei prezzi, convertiamo prima il prezzo in una variabile categoriale suddividendolo nei seguenti intervalli: (<$100, $100–200, $200–300, $300–400, $400–500, $500–600, $600–700, $700–800, $800–900, $900–1000, >=$1000). Quindi, controlliamo se il prezzo rientra nello stesso bucket per una coppia di record. In altre parole, usiamo il file Corrispondenza esatta livello di confronto.
Tutti i confronti possono essere specificati tramite un dizionario delle impostazioni nel file schiocco pacchetto
I parametri del modello FS sono stimati utilizzando l'algoritmo di massimizzazione delle aspettative. In schioccoci sono funzioni integrate per farlo
Per valutare le prestazioni del modello FS, notiamo il numero di record collegati, la precisione, il richiamo e il punteggio F1 della previsione. La precisione è definita come la proporzione di record collegati che sono veri collegamenti. E il Richiamo è definito come la percentuale di collegamenti reali correttamente identificati. Il punteggio F1 è pari a 2*Precisione*Richiamo/(Precisione + Richiamo). Splink fornisce una funzione per generare tutti questi parametri come mostrato di seguito
Il codice completo per addestrare e valutare questo modello è disponibile qui: https://github.com/vjoshi345/product-matching-article/blob/main/train_synthetic_fellegi_sunter.py
Eseguiamo il modello FS su tutte le possibili coppie di prodotti dai due set di dati. Nello specifico, le coppie di prodotti sono 15.168 (79*192). IL schiocco Il pacchetto ha una funzione per generare automaticamente previsioni (cioè collegamenti corrispondenti) per diverse soglie di probabilità di corrispondenza. Di seguito mostriamo la matrice di confusione per la probabilità di corrispondenza=0,913 (la soglia per la quale otteniamo il punteggio F1 più alto).
Numero totale di record collegati = 82
Precisione = 58/82 = 0,707
Richiamo = 58/59 = 0,983
F1 = (2 * 0,707 * 0,983)/(0,707 + 0,983) = 0,823
Lo scopo di questo articolo era mostrare come la corrispondenza dei prodotti sia un'istanza specifica del problema più generale di risoluzione delle entità. Lo abbiamo dimostrato utilizzando uno dei modelli più diffusi del framework ER per risolvere il problema di corrispondenza dei prodotti. Poiché volevamo che questo fosse un articolo introduttivo, abbiamo creato un set di dati sintetici relativamente semplice. In uno scenario reale, i dati saranno molto più complessi con decine di variabili diverse, ad esempio descrizione del prodotto, colore, dimensione, ecc. Per una corrispondenza accurata, avremmo bisogno di tecniche PNL più avanzate oltre alle metriche della distanza del testo. Ad esempio, possiamo utilizzare incorporamenti derivati dai modelli Transformer per abbinare semanticamente i prodotti. Questo può aiutarci ad abbinare due prodotti con descrizioni sintatticamente diverse, ad esempio due prodotti con Tipo di prodotto Jeans E Jeans rispettivamente.
Inoltre, il numero di prodotti per set di dati del mondo reale sarà dell’ordine di centinaia di milioni con potenzialmente centinaia di migliaia di collegamenti. Tali set di dati richiedono metodi più efficienti e risorse di calcolo per un'efficace corrispondenza dei prodotti.
(1): https://medium.com/walmartglobaltech/product-matching-in-ecommerce-4f19b6aebaca
(2): https://shopping.google.com/?pli=1
(3) I. Fellegi e AB Sunter (1969). Una teoria per il record linkage. Giornale dell'American Statistical Association
(5): https://moj-analytical-services.github.io/splink/index.html
Fonte: towardsdatascience.com