Pracuję nad tym projektem pobocznym, w którym muszę opracować rozwiązanie następującego problemu.
Mam dwie grupy osób (klientów). Grupa A
zamierza kupić, a grupa B
zamierza sprzedać określony produkt X
. Produkt ma szereg atrybutów x_i
, a moim celem jest ułatwienie transakcji A
i B
dopasowanie ich preferencji. Główną ideą jest wskazanie każdego członka A
korespondenta, w B
którego produkcie lepiej odpowiada jego potrzebom i odwrotnie.
Niektóre skomplikowane aspekty problemu:
Lista atrybutów nie jest skończona. Kupujący może być zainteresowany bardzo szczególną cechą lub jakimś projektem, który jest rzadki wśród populacji i nie mogę przewidzieć. Nie można wcześniej wyświetlić wszystkich atrybutów;
Atrybuty mogą być ciągłe, binarne lub niekwantyfikowalne (np. Cena, funkcjonalność, wygląd);
Wszelkie sugestie, jak podejść do tego problemu i rozwiązać go w sposób zautomatyzowany?
W razie potrzeby doceniłbym także odniesienia do innych podobnych problemów.
Świetne sugestie! Wiele podobieństw do sposobu, w jaki myślę o podejściu do problemu.
Głównym problemem związanym z mapowaniem atrybutów jest to, że poziom szczegółowości, do którego należy opisać produkt, zależy od każdego nabywcy. Weźmy przykład samochodu. „Samochód” produktu ma wiele atrybutów, od jego osiągów, budowy mechanicznej, ceny itp.
Załóżmy, że chcę tylko tani samochód lub samochód elektryczny. Ok, to łatwe do zmapowania, ponieważ reprezentują one główne cechy tego produktu. Powiedzmy na przykład, że chcę samochód z przekładnią Dual-Clutch lub reflektorami ksenonowymi. Cóż, może być wiele samochodów w bazie danych z tymi atrybutami, ale nie prosiłbym sprzedawcy o uzupełnienie tego poziomu szczegółów przed informacją, że ktoś ich szuka. Taka procedura wymagałaby od każdego sprzedawcy wypełnienia złożonej, bardzo szczegółowej formy, po prostu próby sprzedaży swojego samochodu na platformie. Po prostu nie działa.
Ale nadal moim wyzwaniem jest staranie się być tak szczegółowe, jak to konieczne, w poszukiwaniu dobrego dopasowania. Tak więc myślę o mapowaniu głównych aspektów produktu, które są prawdopodobnie istotne dla wszystkich, w celu zawężenia grupy potencjalnych sprzedawców.
Następnym krokiem byłoby „wyszukane wyszukiwanie”. Aby uniknąć tworzenia zbyt szczegółowego formularza, mógłbym poprosić kupujących i sprzedających o napisanie dowolnego tekstu specyfikacji. A następnie użyj algorytmu dopasowywania słów, aby znaleźć możliwe dopasowania. Chociaż rozumiem, że nie jest to właściwe rozwiązanie problemu, ponieważ sprzedawca nie może „odgadnąć”, czego potrzebuje kupujący. Ale może zbliżyć mnie do siebie.
Sugerowane kryteria ważenia są świetne. Pozwala mi to oszacować poziom, do którego sprzedawca odpowiada potrzebom kupującego. Problemem może być część skalująca, ponieważ ważność każdego atrybutu różni się w zależności od klienta. Zastanawiam się nad użyciem jakiegoś rozpoznawania wzorców lub po prostu poproszeniem kupującego o wprowadzenie poziomu ważności każdego atrybutu.
Zgodnie z sugestią, szalejąc . Przede wszystkim popraw mnie, jeśli się mylę:
Jeśli tak, zbudowanie pełnej tabeli funkcji produktu może być kosztowne obliczeniowo. A ostateczna tabela danych byłaby bardzo rzadka.
Pierwszym krokiem jest zawężenie listy klientów (produktów) w celu dopasowania. Zbudujmy dwudzielny wykres, w którym sprzedający byliby węzłami typu 1, a kupujący - węzłami typu 2. Utwórz przewagę między sprzedawcą i kupującym za każdym razem, gdy odwołują się do podobnej funkcji produktu, jak na poniższym szkicu:
Korzystając z powyższego wykresu, dla każdego unikalnego produktu sprzedawcy możesz wybrać tylko kupujących, którzy są zainteresowani funkcjami, które pasują do produktu (możliwe jest odfiltrowanie co najmniej jednej wspólnej funkcji, dopasowanie pełnego zestawu funkcji lub ustawienie poziomu progowego). Ale z pewnością to nie wystarczy. Następnym krokiem jest porównanie wartości funkcji, zgodnie z opisem sprzedającego i kupującego. Istnieje wiele wariantów (np. K-Nearest-Neighbours). Ale dlaczego nie spróbować rozwiązać tego pytania przy użyciu istniejącego wykresu? Dodajmy ciężary do krawędzi:
dla funkcji ciągłych (np. cena):
dla funkcji binarnych i niekwantyfikowalnych - po prostu logiczny dwuwarunkowy:
Główną ideą tutaj jest skalowanie każdej funkcji do przedziału
[0, 1]
. Dodatkowo możemy użyć współczynników funkcji, aby określić najważniejsze cechy. Na przykład założenie, że cena jest dwa razy ważniejsza niż dostępność jakiejś rzadkiej funkcji:Jednym z ostatnich kroków jest uproszczenie struktury wykresu i zmniejszenie wielu krawędzi do jednej krawędzi o wadze równej sumie wcześniej obliczonych wag każdej cechy. Przy tak zredukowanej strukturze każda para klientów / produktów może mieć tylko jedną krawędź (bez krawędzi równoległych). Tak więc, aby znaleźć najlepszą ofertę dla dokładnego sprzedawcy, wystarczy wybrać połączonych nabywców z maksymalnymi ważonymi krawędziami.
Wyzwanie na przyszłość: wprowadzenie taniej metody ważenia krawędzi na pierwszym kroku :)
źródło