Расскажи про последний проект

Ответ

На последнем проекте я разрабатывал рекомендательную систему для 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 один — хорошо, контентный подход один — тоже ничего. Но когда ты их скрещиваешь, получается какой-то монстр, который реально умные штуки советует. Пизда рулю, короче. Один метод может слепой, а другой — кривой, а вместе они нормально ходят.