Ответ
На последнем проекте я разрабатывал рекомендательную систему для e-commerce платформы. Основной стек — Python, PySpark и FastAPI. Я использовал гибридный подход, сочетающий collaborative filtering на основе матричных разложений (ALS в PySpark) и контентные рекомендации, где эмбеддинги товаров получал с помощью предобученной модели Sentence-BERT.
Ключевые результаты:
- Удалось снизить RMSE на 15% по сравнению с baseline-моделью на основе SVD.
- В ходе A/B-тестирования гибридная система увеличила конверсию в покупки на 8%.
- Для оптимизации инференса в production перевел часть пайплайна на ONNX Runtime, что дало прирост скорости в 3 раза.
Пример реализации обучения ALS-модели:
from pyspark.ml.recommendation import ALS
als = ALS(
userCol="user_id",
itemCol="item_id",
ratingCol="rating",
rank=50,
maxIter=10,
regParam=0.01,
coldStartStrategy="drop"
)
model = als.fit(ratings_df)
Основной вывод: комбинация методов (collaborative + content-based) оказалась значительно эффективнее, чем использование любого из них по отдельности.
Ответ 18+ 🔞
Да ты послушай, какой у меня был проект — ебать мои старые костыли! Делал я для одной маркетплейсовой конторы систему, которая товары подсовывает. Ну, типа «купи ещё вот это, мудила». Технически — Python, PySpark, FastAPI, вся эта ваша движуха.
Подход взял гибридный, не стал на одном методе зацикливаться. С одной стороны — collaborative filtering, классика жанра, через матричные разложения. В PySpark есть ALS, ну я его и впиндюрил. А с другой — контентные рекомендации: брал описания товаров и прогонял через предобученную Sentence-BERT, чтобы эмбеддинги получить. Идея простая: если ты купил дрель, то тебе, возможно, и свёрла нужны (это collaborative), но если ты смотрел именно красную дрель «Бош», то и свёрла тебе, хитрая жопа, предложим красные и того же бренда (это уже контентное).
И знаешь, что вышло? Овердохуища хороших результатов!
- Метрику RMSE по сравнению с baseline'ом на SVD на 15% просадил. Не «улучшил», а именно просадил, там чем меньше — тем лучше.
- Запустили A/B-тест — моя гибридная система конверсию в покупки на 8% подняла. Руководство, конечно, сам от себя охуело.
- Ну и как всегда, на инференсе в продакшене всё начало тормозить. Пришлось часть пайплайна на ONNX Runtime переписывать. После этого скорость выросла в три раза, ядрёна вошь!
Вот, смотри, как ALS-то обучал, ничего сложного:
from pyspark.ml.recommendation import ALS
als = ALS(
userCol="user_id",
itemCol="item_id",
ratingCol="rating",
rank=50,
maxIter=10,
regParam=0.01,
coldStartStrategy="drop"
)
model = als.fit(ratings_df)
Главный вывод, который у меня в башке отложился — ёпта, комбинировать методы это сила. Collaborative filtering один — хорошо, контентный подход один — тоже ничего. Но когда ты их скрещиваешь, получается какой-то монстр, который реально умные штуки советует. Пизда рулю, короче. Один метод может слепой, а другой — кривой, а вместе они нормально ходят.
Видео-ответы
▶
▶
▶
▶
▶