Собесов

Сценарий ML: ALS на implicit feedback

ML / Data ScienceRecsysСложнаяSenior

Условие

Объясните 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:

  1. Фиксируем Y. Loss квадратичен по X → closed-form solution: x_u = (Y^T·C_u·Y + λ·I)^{-1} · Y^T·C_u·p_u
  2. Фиксируем X. Аналогично для Y.
  3. Повторяем до сходимости (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.

Подводные камни

  1. All-zero для тех, кто не делал ничего: модель присвоит им popularity-like vector. Bias к popular items.
  2. α слишком большой → модель верит каждому шуму. Например, случайный клик становится сильным сигналом.
  3. Missing != negative: пользователь не видел item, не отвергнул. Если treat as negative, learning искажается. ALS confidence-formulation решает это.
  4. Cold start: ALS не справляется. Нужно two-tower с side features.
  5. Calibration: ALS scores — это approximate p(interaction). Не калиброванные probabilities.
  6. 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.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти