Algorytm dopasowywania preferencji

12

Pracuję nad tym projektem pobocznym, w którym muszę opracować rozwiązanie następującego problemu.

Mam dwie grupy osób (klientów). Grupa Azamierza kupić, a grupa Bzamierza sprzedać określony produkt X. Produkt ma szereg atrybutów x_i, a moim celem jest ułatwienie transakcji Ai Bdopasowanie ich preferencji. Główną ideą jest wskazanie każdego członka Akorespondenta, w Bktórego produkcie lepiej odpowiada jego potrzebom i odwrotnie.

Niektóre skomplikowane aspekty problemu:

  1. 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;

  2. 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.

R & D
źródło

Odpowiedzi:

9

Moją pierwszą sugestią byłoby w jakiś sposób zmapować atrybuty niekwantyfikowalne do wielkości za pomocą odpowiednich funkcji mapowania. W przeciwnym razie po prostu je pomiń.

Po drugie, nie sądzę, że trzeba zakładać, że lista atrybutów nie jest skończona. Standardowe i intuicyjne podejście polega na reprezentowaniu każdego atrybutu jako indywidualnego wymiaru w przestrzeni wektorowej. Każdy produkt jest więc po prostu punktem w tej przestrzeni. W takim przypadku, jeśli chcesz dynamicznie dodawać więcej atrybutów, po prostu musisz ponownie mapować wektory produktu w nową przestrzeń funkcji (z dodatkowymi wymiarami).

Dzięki tej reprezentacji sprzedawca jest punktem w przestrzeni funkcji z atrybutami produktu, a kupujący jest punktem w tej samej przestrzeni funkcji z atrybutami preferencji. Zadaniem jest następnie znalezienie najbardziej podobnego punktu kupującego dla danego punktu sprzedawcy.

Jeśli twój zestaw danych (tj. Liczba kupujących / sprzedających) nie jest bardzo duży, możesz rozwiązać ten problem, stosując podejście najbliższego sąsiada zaimplementowane przy pomocy drzew KD.

W przypadku bardzo dużych danych można zastosować podczerwień. Zindeksuj zestaw sprzedawców (tj. Atrybuty produktu), traktując każdy atrybut jako osobny termin, przy czym wartość terminu waga jest ustawiona na wartość atrybutu. Zapytanie w tym przypadku to nabywca, który jest również zakodowany w przestrzeni terminów jako wektor zapytania z odpowiednimi wagami terminów. Krok pobierania zwróci Ci listę najlepszych K najbardziej podobnych dopasowań.

Debasis
źródło
Wright. Głównym problemem tutaj jest liczba wymiarów, tj. Poziom szczegółowości, którego muszę użyć. Czy mógłbyś mi wyjaśnić „podejście IR”.
RD
1
Przez IR miałem na myśli wyszukiwanie informacji. Możesz pomyśleć, że wszystkie dokumenty (sprzedawcy) w Twojej kolekcji i zapytanie (kupujący) są wektorami osadzonymi w przestrzeni terminu (atrybutu). Jak powiedziałem, takie podejście wymaga ustalonej liczby wymiarów do pracy.
Debasis
7

Zgodnie z sugestią, szalejąc . Przede wszystkim popraw mnie, jeśli się mylę:

  • Istnieje tylko kilka funkcji dla każdego unikalnego produktu;
  • Nie ma ostatecznej listy funkcji, a klienci mogą dodawać nowe funkcje do swoich produktów.

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:

wykres

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):

    cena_waga

  • dla funkcji binarnych i niekwantyfikowalnych - po prostu logiczny dwuwarunkowy:

    feature_weight

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:

przym_w_1

przym_w_2

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 :)

sobach
źródło