Réponse au PM en public (j'aime pas les PM )
flamipuche a écrit :
Arhhh tu me fais baver avec ton algo perdu. Tu peux pas m'en dire un peu plus de mémoire.
|
Ben en gros, l'algo est simple :
- Tu récupères l'ensemble des personnes ayant un profile pour ou moins similaire (cumul des abs(différences entres profiles))
- Tu prends l'ensemble des notes attribuées par ces personnes, aux produits, et tu pondères ces notes par le nombre de notes (si 20 personnes dise qu'un produit est bien, c'est plus parlant que si 2 personnes disent qu'un autre produit est très bien, il faut donc en tenir compte). Et enfin, tu appliques à ces notes la pondération que tu as trouvé dans le premier calcul (si une personne est "très compatible", son avis a plus de sens que celui d'une personnes "moyennement compatible".
Le gros problème ensuite, c'est que si t'as 2 personnes très compatibles, et 1000 personnes moyennement compatibles (c'est la réalité des données généralement), il faut que les personnes très compatibles compte énormément par rapport aux autres, donc il faut appliquer une fonction logarithmique dessus.
Ensuite, je peux guère t'en dire plus. Le souci, c'est que tu vas rapidement avoir le problème du volume de données à comparer. Il est donc utile d'établir des tables de statisques, mises à jour régulièrement.
Par exemple, établir 20 profiles "types", et les rattachers à toutes les personnes. Ainsi, lorsque tu fais le calcul, au lieu de comparer les 100 000 profils de ta base, tu ne match qu'une vingtaine de profils, pondérés avec des pondération correspondant au nombre de personnes qui en sont proches. Idem pour les notations, tu peux établir de façon statistiques qu'un profil particulier donnes généralement certaines notes à certains produits. A nouveau, tu réduit considérablement la portée des calculs.
En revanche, tu perds énormément en pertinance des résultats. Il faut donc trouver un juste milieu entre le nombre d'éléments "type", et la vitesse de rafraîchissement des données (hebdomadaire, quotidien, horraire, etc.). Tout ceci ne peut se faire qu'en fonction de tes données à toi, il n'y a pas de règle générale.
Ne pas oublier aussi qu'un filtrage du "bruit" peut être intéressant.
Par exemple, au sein d'un profile, il y a des personnes très atypiques (qui vont systématiquement donner des notes contraires aux autres). C'est là qu'il est important de ne pas faire une bête moyenne, mais de la pondérer par le nombre de personnes à chaque fois : si 100 personnes donnent une note de 10/10 à un produit, et que 10 personnes donnes un avis de 0/10 au même produit, la note tombe à 9/10. Pourtant, les 10 personnes qui ont donné un avis contraire sont négligeables, et ne devraient pas entrer en considération. C'est d'autant plus vrai si ces 10 personnes ensuite donnent 10/10 à un produit que les 100 autres personnes n'ont pas noté : ce produit va sortir en premier, alors qu'il a peu de chances d'intéresser la personne qui consulte le truc.
Enfin, si la personne qui consulte le truc a effectivement donné 0/10 au premier produit, on se rend compte que celui où les 10 autres ont donné 10/10 est réellement succeptible de l'intéresser, alors que l'avis des 100 autres est moins intéressant ! Ainsi, la pondération des notation au sein d'un même profil ne repose plus sur le nombre de votants, mais sur la différence entre les notes qu'ils ont attribué, et celle que la personne qui consulte ont attribué aussi. Et ceci doit s'appliquer à l'ensemble des profils : c'est à dire que si j'aime les rousses et toi les blondes, mais qu'on adore tous les deux les mêmes produits, il y a de grandes chances que les produits que j'aime et que tu ne connais pas t'intéressent, même si on est logiquement incompatibles.
Message édité par MagicBuzz le 14-05-2007 à 16:21:22