Il y a ce projet parallèle sur lequel je travaille où j'ai besoin de structurer une solution au problème suivant.
J'ai deux groupes de personnes (clients). Le groupe a l' A
intention d'acheter et le groupe a l' B
intention de vendre un produit déterminé X
. Le produit a une série d'attributs x_i
, et mon objectif est de faciliter la transaction entre A
et B
en faisant correspondre leurs préférences. L'idée principale est de signaler à chaque membre d' A
un correspondant B
dont le produit correspond le mieux à ses besoins, et vice versa.
Quelques aspects compliquant le problème:
La liste des attributs n'est pas finie. L'acheteur peut être intéressé par une caractéristique très particulière ou une sorte de design, ce qui est rare parmi la population et je ne peux pas le prévoir. Impossible de répertorier tous les attributs auparavant;
Les attributs peuvent être continus, binaires ou non quantifiables (ex: prix, fonctionnalité, conception);
Une suggestion sur la façon d'aborder ce problème et de le résoudre de manière automatisée?
J'apprécierais également quelques références à d'autres problèmes similaires si possible.
Excellentes suggestions! Beaucoup de similitudes dans la façon dont je pense aborder le problème.
Le principal problème lié à la cartographie des attributs est que le niveau de détail auquel le produit doit être décrit dépend de chaque acheteur. Prenons un exemple de voiture. Le produit «voiture» possède de nombreux attributs qui vont de ses performances, sa structure mécanique, son prix, etc.
Supposons que je veuille juste une voiture bon marché ou une voiture électrique. Ok, c'est facile à cartographier car ils représentent les principales caractéristiques de ce produit. Mais disons, par exemple, que je veux une voiture avec une transmission à double embrayage ou des phares au xénon. Eh bien, il pourrait y avoir beaucoup de voitures dans la base de données avec ces attributs, mais je ne demanderais pas au vendeur de renseigner ce niveau de détail sur leur produit avant de savoir qu'il y a quelqu'un qui les regarde. Une telle procédure obligerait chaque vendeur à remplir un formulaire complexe et très détaillé, il suffit d'essayer de vendre sa voiture sur la plateforme. Ça ne marcherait pas.
Mais encore, mon défi est d'essayer d'être aussi détaillé que nécessaire dans la recherche pour faire un bon match. Donc, la façon dont je pense est de cartographier les principaux aspects du produit, ceux qui sont probablement pertinents pour tout le monde, afin de réduire le groupe de vendeurs potentiels.
La prochaine étape serait une «recherche affinée». Afin d'éviter de créer un formulaire trop détaillé, je pourrais demander aux acheteurs et aux vendeurs d'écrire un texte libre de leurs spécifications. Et puis utilisez un algorithme de correspondance de mots pour trouver des correspondances possibles. Bien que je comprenne que ce n'est pas une bonne solution au problème parce que le vendeur ne peut pas «deviner» ce dont l'acheteur a besoin. Mais pourrait me rapprocher.
Les critères de pondération suggérés sont excellents. Cela me permet de quantifier le niveau auquel le vendeur correspond aux besoins de l'acheteur. Cependant, la partie mise à l'échelle peut être un problème, car l'importance de chaque attribut varie d'un client à l'autre. Je pense utiliser une sorte de reconnaissance de modèle ou simplement demander à l'acheteur de saisir le niveau d'importance de chaque attribut.
Comme suggéré, se déchaîner . Tout d'abord, corrigez-moi si je me trompe:
Si tel est le cas, la construction d'une table complète des fonctionnalités du produit pourrait être coûteuse en termes de calcul. Et le tableau de données final serait extrêmement clairsemé.
La première étape consiste à réduire la liste des clients (produits) pour la correspondance. Construisons un graphique bipartite, où les vendeurs seraient des nœuds de type 1 et les acheteurs des nœuds de type 2. Créez un avantage entre n'importe quel vendeur et acheteur chaque fois qu'ils font référence à une caractéristique de produit similaire, comme dans l'esquisse suivante:
En utilisant le graphique ci-dessus, pour chaque produit de vendeur unique, vous pouvez sélectionner uniquement les acheteurs intéressés par les fonctionnalités qui correspondent au produit (il est possible de filtrer au moins une fonctionnalité commune, de faire correspondre l'ensemble complet des fonctionnalités ou de définir un niveau de seuil). Mais ce n'est certainement pas suffisant. L'étape suivante consiste à comparer les valeurs des fonctionnalités, comme décrit par le vendeur et l'acheteur. Il existe de nombreuses variantes (par exemple, k-Nearest-Neighbors). Mais pourquoi ne pas essayer de résoudre cette question en utilisant le graphique existant? Ajoutons des poids aux bords:
pour les fonctionnalités continues (par exemple, le prix):
pour les fonctionnalités binaires et non quantifiables - juste biconditionnel logique:
L'idée principale ici est de mettre à l' échelle chaque entité à l'intervalle
[0, 1]
. De plus, nous pouvons utiliser des coefficients de fonctionnalité pour déterminer les fonctionnalités les plus importantes. Par exemple, en supposant que le prix est deux fois plus important que la disponibilité d'une fonction rare:L'une des dernières étapes consiste à simplifier la structure du graphique et à réduire de nombreux bords à un bord avec un poids égal à la somme des poids calculés précédemment pour chaque entité. Avec une structure aussi réduite, chaque paire de clients / produits ne pourrait avoir qu'un seul bord (pas de bords parallèles). Donc, pour trouver la meilleure offre pour le vendeur exact, il vous suffit de sélectionner des acheteurs connectés avec des bords pondérés max.
Défi futur: introduire une méthode bon marché pour pondérer les bords à la première étape :)
la source