私は各ユーザーが持っている出会い系アプリのバックエンドを開発しています
彼/彼女の特徴のプロフィール
理想的なマッチの特性のプロファイル
性別、身長、外見など、数十の特性があります。一部の特性は文字列であり、他の特性は数値または配列です。各特性には、0〜4の範囲の重要度が割り当てられています。0はnot important at all
を意味し、4はabsolutely necessary
を意味します。
したがって、ユーザーの一致オブジェクトは次のようになります。
{
{
gender: 'female',
importance: 4
}
{
eyeColor: ['blue', 'green'],
importance: 2
} ,
{
ethnicity: [],
importance: 0
}
heightMin: 150,
heightMax: 200,
heightImportance: 3,
....
}
データはmongodbに保存され、バックエンドはnode.jsにあります。
私はデータサイエンスが初めてです。私は、ユークリッドまたはコサインの類似性のような、ベクトル間の類似性/距離を見つけるためのいくつかの式があることを知っています。しかし、どのような方法(もしあれば)がこの状況で最も適切かはわかりませんか?
ヒントに感謝します。
サンプルデータは、さまざまな種類の特性をさまざまな方法で処理する必要があることを非常によく示しています。
すべての特性がこのように適切に分類されると、次のような一般的なスコアリング関数を作成する準備が整います。
次に、スコアを次のように補完する必要があります。
次のことができますが、後の段階で:
score(ideal 1, profile2)
をscore(ideal 2, profile1)
と組み合わせるとどうなるでしょうかあいにく、ファジーマッチングを実行するには、タイプを知るだけでは不十分です。たとえば、さまざまな身長の人物を選択したい場合、身長5'10 "の検索と重要度4と重要度1の違いは何ですか?身長などの数式を適用しようとしても、プラスまたはマイナス(5-重要度)x 2インチ。
しかし、この色をアイカラーまたはヘアカラーにどのように適用しますか?もちろんできません。各属性には、その属性に適合する独自のマッチングシステムが必要です。
ただし、いくつかのヒントはありますが、理想的にはmuchとしてできるだけ除外し、soonとしてできるだけ除外します。そのため、重要度の高い順にフィルターを優先すると、あまりフィルター処理しない可能性のある属性に到達する前に、かなり多くの人をフィルター処理する可能性が高くなります。しかし、これは必ずしも本当であるとは限りません!たとえば、女性が最も重要な男性を探していて、(天国は禁じられている)mostデータベース内の人が男性である場合、重要性が高いにもかかわらず多くの人を除外していません。
したがって、正しく実行すると検索時間が大幅に短縮されるため、これを考慮する必要があります。したがって、最も効率的な検索を整理できるため、すべてのクライアントの統計情報を保持しておくことはほぼ間違いなく価値があります。