Le composant Collaborative Filtering (etrec) utilise un algorithme de filtrage collaboratif basé sur les éléments pour calculer la similarité par paire à partir des données d'interaction utilisateur-élément. À partir d'une colonne utilisateur et d'une colonne élément, il renvoie les N éléments les plus similaires pour chaque élément. Cette fonction est généralement utilisée comme étape de rappel dans un pipeline de recommandation.
Fonctionnement
Lisez les enregistrements d'interaction utilisateur-élément depuis la table d'entrée (colonne utilisateur + colonne élément).
Pour chaque élément, identifiez les utilisateurs ayant interagi avec celui-ci et calculez les scores de similarité par rapport à tous les autres éléments en utilisant le type de similarité sélectionné.
Écrivez les N éléments les plus similaires pour chaque élément dans la table de sortie sous forme de paires clé-valeur (
item_id:similarity_score).
Choisir un type de similarité
Sélectionnez l'algorithme de similarité en fonction des caractéristiques de vos données d'interaction :
| Type de similarité | Cas d'utilisation |
|---|---|
| WbCosine | Filtrage collaboratif basé sur les éléments à usage général. Utilisez cette option par défaut pour la plupart des scénarios de recommandation. |
| asymcosine | Lorsque les relations entre les éléments sont directionnelles. Ajustez alpha (facteur de lissage) et weight (coefficient de pondération) pour contrôler le degré d'asymétrie. |
| Jaccard | Lorsque vos données d'interaction sont binaires (clic ou non-clic, achat ou non-achat). |
Configurer le composant
Deux méthodes de configuration sont disponibles : la PAI console (visuelle) et les commandes PAI (basées sur SQL). Les deux exposent les mêmes paramètres.
Méthode 1 : Configuration dans la PAI console
Sur la page du pipeline de Machine Learning Designer, sélectionnez le composant Collaborative Filtering (etrec) et définissez les paramètres suivants.
Fields Setting tab
| Paramètre | Description |
|---|---|
| User Column | Le nom de la colonne utilisateur dans la table d'entrée. |
| Item Column | Le nom de la colonne élément dans la table d'entrée. |
| Delimiter between items in the output table | Le séparateur entre les éléments dans la table de sortie. Par défaut : espace. |
| Delimiter between key-value in the output table | Le séparateur entre les clés et les valeurs dans la table de sortie. Par défaut : deux-points (:). Les espaces ne sont pas pris en charge. |
Parameters Setting tab
| Paramètre | Description |
|---|---|
| Similarity Type | L'algorithme utilisé pour calculer la similarité entre les éléments. Consultez Choisir un type de similarité. Valeurs valides : WbCosine, asymcosine, Jaccard. |
| TopN | Le nombre maximal d'éléments similaires à conserver par élément dans la table de sortie. |
| Calculation Behavior | Discontinued. Ce paramètre n'est plus effectif. Valeurs valides : Add, Mul, Min, Max. |
| Minimum Item Value | Les utilisateurs ayant moins d'interactions que ce seuil sont exclus du calcul. Augmentez cette valeur pour filtrer les utilisateurs dont l'historique d'interaction est clairsemé, car leur comportement tend à refléter la popularité des éléments plutôt que leurs préférences personnelles. |
| Maximum Item Value | Les utilisateurs ayant plus d'interactions que ce seuil sont exclus du calcul. Diminuez cette valeur pour filtrer les utilisateurs à fort volume (comme les bots automatisés) dont les enregistrements peuvent introduire du bruit dans les scores de similarité. |
| Smoothing Factor | Valide uniquement lorsque Similarity Type est asymcosine. Valeurs valides : (0, 1). Par défaut : 0,5. |
| Weighting Coefficient | Valide uniquement lorsque Similarity Type est asymcosine. L'indice de poids appliqué à la formule du cosinus asymétrique. Par défaut : 1,0. |
Méthode 2 : Configuration à l'aide des commandes PAI
Appelez la commande pai_etrec depuis un script SQL. Pour plus d'informations, consultez SQL Script.
PAI -name pai_etrec
-project algo_public
-DsimilarityType="wbcosine"
-Dweight="1"
-DminUserBehavior="2"
-Dlifecycle="28"
-DtopN="2000"
-Dalpha="0.5"
-DoutputTableName="etrec_test_result"
-DmaxUserBehavior="500"
-DinputTableName="etrec_test_input"
-DuserColName="user"
-DitemColName="item"
| Paramètre | Obligatoire | Description | Par défaut |
|---|---|---|---|
inputTableName |
Oui | Le nom de la table d'entrée. | — |
userColName |
Oui | Le nom de la colonne utilisateur dans la table d'entrée. | — |
itemColName |
Oui | Le nom de la colonne élément dans la table d'entrée. | — |
inputTablePartitions |
Non | Les partitions à lire depuis la table d'entrée. | Table complète |
outputTableName |
Oui | Le nom de la table de sortie. | — |
outputTablePartition |
Non | La partition dans laquelle écrire dans la table de sortie. | — |
similarityType |
Non | L'algorithme de similarité. Valeurs valides : wbcosine, asymcosine, jaccard. |
wbcosine |
topN |
Non | Le nombre d'éléments les plus similaires à conserver par élément. Valeurs valides : 1–10000. | 2000 |
minUserBehavior |
Non | Le nombre minimal d'interactions qu'un utilisateur doit avoir pour être inclus. Les utilisateurs en dessous de ce seuil sont exclus ; leur comportement tend à refléter la popularité des éléments plutôt que leurs préférences personnelles. | 2 |
maxUserBehavior |
Non | Le nombre maximal d'interactions qu'un utilisateur peut avoir pour être inclus. Les utilisateurs au-dessus de ce seuil sont exclus ; les enregistrements à fort volume (par exemple, provenant de bots automatisés) peuvent introduire du bruit. | 500 |
itemDelimiter |
Non | Le délimiteur entre les éléments dans la table de sortie. | Retour arrière |
kvDelimiter |
Non | Le délimiteur entre les clés et les valeurs dans la table de sortie. | : |
alpha |
Non | Le facteur de lissage lorsque similarityType=asymcosine. Valeurs valides : (0, 1). |
0.5 |
weight |
Non | L'indice de poids lorsque similarityType=asymcosine. |
1.0 |
lifecycle |
Non | Le cycle de vie de la table de sortie. | 1 |
coreNum |
Non | Le nombre de cœurs à allouer. | Déterminé par le système |
memSizePerCore |
Non | La mémoire par cœur, en Mo. | Déterminé par le système |
Exemple
Cet exemple crée une table d'entrée minimale, exécute l'algorithme de filtrage collaboratif et inspecte la sortie.
Étape 1 : Créez la table de données d'entraînement.
DROP TABLE IF EXISTS etrec_test_input;
CREATE TABLE etrec_test_input AS
SELECT *
FROM (
SELECT CAST(0 AS STRING) AS user, CAST(0 AS STRING) AS item
UNION ALL SELECT CAST(0 AS STRING), CAST(1 AS STRING)
UNION ALL SELECT CAST(1 AS STRING), CAST(0 AS STRING)
UNION ALL SELECT CAST(1 AS STRING), CAST(1 AS STRING)
) a;
La table etrec_test_input résultante :
| user | item |
|---|---|
| 0 | 0 |
| 0 | 1 |
| 1 | 0 |
| 1 | 1 |
Étape 2 : Exécutez la commande PAI.
DROP TABLE IF EXISTS etrec_test_result;
PAI -name pai_etrec
-project algo_public
-DsimilarityType="wbcosine"
-Dweight="1"
-DminUserBehavior="2"
-Dlifecycle="28"
-DtopN="2000"
-Dalpha="0.5"
-DoutputTableName="etrec_test_result"
-DmaxUserBehavior="500"
-DinputTableName="etrec_test_input"
-DuserColName="user"
-DitemColName="item";
Étape 3 : Consultez la table de sortie.
Interrogez etrec_test_result. Chaque ligne représente un élément et ses éléments les plus similaires, formatés sous forme de paires clé-valeur item_id:similarity_score.
| itemid | similarity |
|---|---|
| 0 | 1:1 |
| 1 | 0:1 |
L'élément 0 et l'élément 1 interagissent tous deux avec les mêmes deux utilisateurs, donc chacun présente un score de similarité de 1,0 avec l'autre.