Условие
Объясните ALS для implicit feedback. Что значит «implicit», как формулируется loss, как ALS его минимизирует.
Решение
Подход
Implicit feedback: clicks, views, purchases — не явные рейтинги. Только positive signal. Отсутствие interaction ≠ «не нравится».
Hu et al. (2008) предложили формулировку:
L = Σ_{u,i} c_{ui} · (p_{ui} − x_u^T y_i)² + λ·(||X||² + ||Y||²)
где:
p_{ui} = 1если interaction, 0 иначе (preference).c_{ui} = 1 + α·r_{ui}гдеr_{ui}— count interactions (confidence).αобычно 40 (Hu); большее α = больше доверия наблюдённым interactions.
Идея: missing = preference 0 с низкой confidence; observed = preference 1 с высокой confidence.
ALS алгоритм
Поскольку loss не-выпуклый по обоим X, Y, alternating:
- Фиксируем Y. Loss квадратичен по X → closed-form solution:
x_u = (Y^T·C_u·Y + λ·I)^{-1} · Y^T·C_u·p_u - Фиксируем X. Аналогично для Y.
- Повторяем до сходимости (5-15 итераций).
Optimization trick (Hu): Y^T·C_u·Y = Y^T·Y + Y^T·(C_u − I)·Y. Первое слагаемое одинаково для всех users (precompute), второе sparse → быстро.
Реализация (implicit library)
import implicit
from scipy.sparse import csr_matrix
# user × item, value = count interactions
user_item_matrix = csr_matrix((counts, (user_ids, item_ids)))
model = implicit.als.AlternatingLeastSquares(
factors=128,
regularization=0.05,
alpha=40.0,
iterations=15,
use_gpu=True
)
model.fit(user_item_matrix)
# Recommend
recs = model.recommend(user_id, user_item_matrix[user_id], N=10)Hyperparameters
factors: размер latent dim, 64-256.regularization: λ, 0.01-0.1.alpha: confidence multiplier, 10-100. Большее — модель сильнее верит observed.iterations: 10-20 обычно достаточно.
Negative sampling alternative
BPR (Bayesian Personalized Ranking): для каждого observed (u,i+), sample негатив i−, оптимизируем σ(x_u^T(y_{i+} − y_{i−})). Часто чуть лучше ALS на ranking metrics.
Evaluation
- NDCG@k, MAP@k, HitRate@k на holdout interactions.
- Coverage: доля items в рекомендациях.
- Online CTR — ground truth.
Подводные камни
- All-zero для тех, кто не делал ничего: модель присвоит им popularity-like vector. Bias к popular items.
- α слишком большой → модель верит каждому шуму. Например, случайный клик становится сильным сигналом.
- Missing != negative: пользователь не видел item, не отвергнул. Если treat as negative, learning искажается. ALS confidence-formulation решает это.
- Cold start: ALS не справляется. Нужно two-tower с side features.
- Calibration: ALS scores — это approximate
p(interaction). Не калиброванные probabilities. - ALS не учитывает context (time, location); для этого — sequence modeling (SASRec) или contextual bandits.
Эталонный ответ
ALS для implicit feedback (Hu 2008): minimize Σ c_ui·(p_ui − x_u^T y_i)² + λ·reg, где c_ui = 1+α·r_ui (confidence), p_ui ∈ {0,1}. Alternating closed-form solve по X и Y итеративно. Hyperparameters: factors 64-256, α 10-100, λ 0.01-0.1, ~15 iterations. Cold start не работает; для него two-tower с side features.