プリファレンスマッチングアルゴリズム


12

次の問題の解決策を構築する必要がある場所で作業しているこのサイドプロジェクトがあります。

私は2つのグループの人々(クライアント)を持っています。グループAB決まった製品を購入し、グループは売却するつもりですX。製品は、一連の属性を持っているx_i、と私の目的は、間の取引を促進することであるAB自分の好みを照合することによってを。主なアイデアはABその製品が彼のニーズにより適しているか、その逆の対応する各メンバーを指摘することです。

問題の複雑な側面:

  1. 属性のリストは有限ではありません。バイヤーは非常に特定の特性またはある種のデザインに興味があるかもしれませんが、これは人口の間ではまれであり、私は予測できません。以前にすべての属性をリストすることはできません。

  2. 属性は、連続、バイナリ、または数量化不可能(例:価格、機能、デザイン);

この問題にアプローチし、自動化された方法で解決する方法に関する提案はありますか?

また、可能であれば、他の同様の問題への参照も歓迎します。


素晴らしい提案!私が問題にアプローチすることを考えている方法との多くの類似点。

属性のマッピングに関する主な問題は、製品を説明する詳細レベルが各バイヤーに依存することです。車の例を見てみましょう。製品「車」には、性能、機械的構造、価格など、さまざまな属性があります。

安い車か電気自動車が欲しいだけだとしよう。わかりました。この製品の主な機能を表しているため、マッピングは簡単です。しかし、たとえば、デュアルクラッチトランスミッションまたはキセノンヘッドライトを搭載した車が欲しいとしましょう。データベースにはこの属性を持つ多くの車が存在する可能性がありますが、それらを探している人がいるという情報の前に、売り手にこのレベルの詳細を製品に入力するように頼みません。そのような手順では、すべての売り手がプラットフォームで自分の車を売ろうとする複雑で非常に詳細なフォームに記入する必要があります。うまくいきません。

しかし、それでも、私の課題は、検索で必要なだけ詳細になり、良い一致をすることです。したがって、私が考えているのは、潜在的な売り手のグループを絞り込むために、おそらく誰にでも関係のある製品の主要な側面をマッピングすることです。

次のステップは「洗練された検索」です。あまりにも詳細なフォームを作成しないようにするために、買い手と売り手に仕様のフリーテキストを書くよう依頼することができます。そして、いくつかの単語照合アルゴリズムを使用して、可能な一致を見つけます。売り手は買い手が必要とするものを「推測」できないため、これは問題の適切な解決策ではないことを理解していますが。しかし、私を近づけるかもしれません。

提案された重み付け基準は素晴らしいです。これにより、売り手が買い手のニーズと一致するレベルを定量化できます。ただし、各属性の重要性はクライアントごとに異なるため、スケーリング部分は問題になる可能性があります。何らかのパターン認識を使用するか、各購入者に各属性の重要度を入力するように依頼することを考えています。

回答:


9

私の最初の提案は、適切なマッピング関数の助けを借りて、何らかの方法で数量化不可能な属性を数量にマッピングすることです。それ以外の場合は、そのままにしておきます。

第二に、属性のリストが有限ではないと仮定する必要はないと思います。標準的で直感的なアプローチは、各属性をベクトル空間の個々の次元として表現することです。その場合、各製品はこの空間の単なるポイントになります。その場合、さらに属性を動的に追加する場合は、製品ベクトルを新しいディメンション空間に追加マッピングするだけで済みます。

この表現では、売り手は製品属性を持つ機能空間のポイントであり、買い手は嗜好属性を持つ同じ機能空間のポイントです。タスクは、特定の売り手ポイントに最も類似した買い手ポイントを見つけることです。

データセット(買い手/売り手の数)がそれほど多くない場合は、kdツリーを使用して実装された最近傍アプローチでこれを解決できます。

非常に大きなサイズのデータ​​の場合、IRアプローチを使用できます。各属性を別の用語として扱い、用語の重みを属性値に設定して、売り手のセット(製品属性)にインデックスを付けます。この場合のクエリは、適切な用語の重みを持つクエリベクトルとして用語スペースにエンコードされている買い手です。検索ステップでは、最も類似した上位Kのリストが返されます。


ライト。ここでの主な問題は、次元の数、つまり使用する必要がある詳細レベルです。「IRアプローチ」を明確にしてください。
RD

1
IRとは、情報検索を意味します。コレクション内のドキュメント(売り手)とクエリ(買い手)は、すべて用語(属性)スペースに埋め込まれたベクトルであると考えるかもしれません。先ほど言ったように、そのようなアプローチを使用するには、あらかじめ設定された次元数が必要です。
デベーシス14年

7

提案されているように、ワイルドになります。まず、私が間違っている場合は修正してください:

  • 独自の製品ごとにいくつかの機能があります。
  • 究極の機能リストはありません。クライアントは製品に新しい機能を追加できます。

その場合、完全な製品機能テーブルの構築には計算コストがかかります。そして、最終データテーブルは非常にまばらです。

最初のステップは、一致する顧客(製品)リストを絞り込むことです。売り手はタイプ1のノード、買い手はタイプ2のノードとなる2部グラフを作成しましょう。次のスケッチのように、売り手と買い手が同様の製品機能を参照するたびに、売り手と買い手の間にエッジを作成します。

グラフ

上記のグラフを使用すると、一意の売り手のすべての製品について、その製品に一致する機能に関心のある購入者のみを選択できます(少なくとも1つの共通機能をフィルター処理機能の完全なセットに一致、またはしきい値レベルを設定できます)。しかし確かに、それだけでは十分ではありません。次のステップでは、売り手と買い手が説明するように、機能値を比較します。多くのバリアントがあります(k-Nearest-Neighborsなど)。しかし、既存のグラフを使用してこの問題を解決してみませんか?エッジに重みを追加しましょう:

  • 連続的な機能(価格など)の場合:

    price_weight

  • バイナリおよび数量化不可能な機能の場合-論理的な二条件:

    feature_weight

ここでの主なアイデアは、すべての機能を間隔に合わせてスケーリングすることです[0, 1]。さらに、特徴係数を使用して最も重要な特徴を決定できます。たとえば、価格がいくつかのまれな機能の可用性の2倍重要であると仮定します。

adj_w_1

adj_w_2

最後のステップの1つは、グラフ構造を単純化し、各フィーチャの以前に計算された重みの合計に等しい重みで、多くのエッジを1つのエッジに減らすことです。このような縮小された構造では、顧客/製品のすべてのペアに1つのエッジのみを含めることができます(平行なエッジはありません)。そのため、正確な売り手に最適な取引を見つけるには、最大の加重エッジを持つ接続された買い手を選択するだけです。

将来の課題:最初のステップでエッジを重み付けするための安価な方法を導入します:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.