6

私は、Amazonの「Xを表示/購入した顧客はYとZも表示/購入した」という方針に沿って、商品間の類似性を計算しようとしています。私が見たすべての例と参照は、ランク付けされたアイテムのアイテムの類似性を計算するため、ユーザーとユーザーの類似性を見つけるため、または現在のユーザーの履歴に基づいて推奨アイテムを見つけるためのものです。現在のユーザーの好みを考慮に入れる前に、ターゲットを絞らないアプローチから始めたいと思います。

Amazon.comの推奨事項に関するホワイトペーパーを見ると、オフラインの商品と商品の類似性について次のロジックを使用しています。

For each item in product catalog, I1 
  For each customer C who purchased I1
    For each item I2 purchased by customer C
       Record that a customer purchased I1 and I2
  For each item I2 
    Compute the similarity between I1 and I2

正しく理解できれば、「I1とI2の類似性を計算する」までに、単一の値I1(外側のループ)と組み合わせて購入したアイテム(I2)のリストがあります。

この計算はどのように実行されますか?

もう1つのアイデアは、これを考えすぎて、必要以上に難しくしているということです。I1と組み合わせて購入したI2の数についてトップnのクエリを実行するだけで十分でしょうか。

このアプローチが正しいかどうかについての提案にも感謝します。私の製品データベースには、いつでも約15万のアイテムがあります。私が見た読み物の大部分は、ユーザーとアイテムの類似性、さらにはユーザーとユーザーの類似性を示しているので、代わりにそのルートを探す必要があります。

私は過去に類似性アルゴリズムを使用しましたが、それらには常にランクまたはスコアが含まれていました。これが機能する唯一の方法は、購入/購入していない場合に0/1のスコアを付ける顧客と製品のマトリックスを作成することだと思います。購入履歴とアイテムサイズを考えると、これは非常に大きくなる可能性があります。

編集:Pythonをタグとしてリストしましたが、できればOracle PL / SQLを使用して、ロジックをデータベース内に保持したいと思います。

4

4 に答える 4

6

アイテム間の協調フィルタリングについて理解しましょう。購入マトリックスがあるとします

        Item1  Item2 ... ItemN
 User1  0        1   ...  0
 User2  1        1   ...  0 
  .
  .
  .
 UserM  1        0   ...  0

次に、列ベクトルを使用してアイテムの類似性を計算できます。たとえば、コサインを使用します。以下のようなアイテム類似性対称行列があります

        Item1  Item2 ... ItemN
 Item1  1       1/M  ...  0
 Item2  1/M     1    ...  0 
  .
  .
  .
 ItemN  0       0    ...  1

これは、「Xを表示/購入した顧客は、Y、Z、...も表示/購入した」(協調フィルタリング)と説明できます。アイテムのベクトル化はユーザーの購入に基づいているためです。

Amazonのロジックは上記とまったく同じですが、目標は効率を向上させることです。彼らが言ったように

すべてのアイテムペアを反復処理し、各ペアの類似度メトリックを計算することで、製品間のマトリックスを構築できます。ただし、多くの製品ペアには共通の顧客がいないため、このアプローチは処理時間とメモリ使用量の点で非効率的です。反復アルゴリズムは、単一の製品とすべての関連製品の間の類似性を計算することにより、より良いアプローチを提供します

于 2012-05-12T06:11:12.357 に答える
5

このトピックに関する優れたO'Reillyの本があります。ホワイトペーパーはそのような擬似コードでロジックをレイアウトするかもしれませんが、そのアプローチはあまりうまく拡張できないと思います。計算はすべて確率計算であるため、ベイズの定理のようなものは、「人物AがXを購入した場合、Zを購入した可能性はどのくらいですか?」と言うのに慣れています。データの単純なループは非常に困難です。あなたは一人一人のためにそれをすべて経験しなければなりません。

于 2010-03-05T22:32:00.727 に答える
4

@Neilまたは後でこの質問に来る人は誰でも:

類似性メトリックの選択はあなた次第であり、将来のためにそれを順応性のあるままにしておきたいかもしれません。まず、フロベニウスの規範に関するウィキペディアの記事を確認してください。または、送信したリンクのように、Jaccard係数cos(I1,I2)

user-item –vs– user-user –vs– item-item、またはその他の組み合わせは、客観的に答えることができません。これは、ユーザーから取得できるデータの種類、UIがユーザーから情報を引き出す方法、データのどの部分が信頼できると考えるか、および独自の時間的制約(ハイブリッドに関する限り)によって異なります。

多くの人が上記の質問で修士号を取得しているので、アルゴリズムの複雑さを増す余地を残しながら、最も簡単な実装可能なソ​​リューションから始めたいと思うでしょう。

于 2011-03-14T05:41:27.417 に答える
0

これはあなたの質問に対する完全な答えではないかもしれませんが、この問題を調べる別の方法は、 Frequent Itemset Miningです。これは、最小頻度しきい値を指定して、頻繁に共同購入されるすべての製品ペア/グループを計算します。また、顧客の購入を、一般的に共同購入された製品にマッピングできます。

純粋数学の問題であるため、モデルのトレーニングやベイズ確率の予測はありません。トランザクションベースで一緒に購入された可能性のあるすべての製品ペアの頻度を数える必要があります。これは指数関数的な検索スペースですが、使用できるさまざまな効率的なアルゴリズムと実装があります(SPMFはJavaで記述された非常に優れたものです)。これは、クイックベースラインモデルとして機能する可能性があります。

于 2019-03-29T14:29:37.827 に答える