Перейти к содержанию

warm-transfer

Переносит и калибрует скоры уже обученного рекомендателя на cold-start айтемы. Plug&play, model-agnostic, без переобучения донора.

from warmtransfer.methods import LinMap

reco = LinMap(alpha=1.0).fit(inputs, seed=42).predict(user_ids, cold_item_ids)
  • Быстрый старт


    Перенести скоры донора на cold items за пять минут.

    Начать

  • Работает с вашими скорами


    Принесите warm-item скоры любой модели. warm-transfer не переобучает донора.

    Зачем

  • Бьёт сильные бейзлайны


    Score transfer бьёт персонализированный Grouped MP в 36 из 40 ячеек dataset-donor.

    Результаты

  • Методы и API


    Семнадцать методов, один контракт ColdStartMethod.fit(...).predict(...).

    Справочник

Какую проблему решает

Ваш рекомендатель уже умеет скорить warm items, но у новых айтемов нет истории взаимодействий. warm-transfer использует warm-скоры и контент айтемов, чтобы предсказать скоры для cold-start items. Донором может быть ALS, BPR, CatBoost, EASE, two-tower модель или закрытая production-модель.

Главный результат

На текущей benchmark-матрице 8 dataset loaders × 5 donors (seed=42) методы score transfer бьют сильный персонализированный бейзлайн grouped_most_popular_pers по per-user AUC в 36 из 40 dataset-donor ячеек.

Главный контраст: наивный nearest-neighbor transfer часто наследует популярность соседей и проигрывает Grouped MP. Калиброванный transfer, особенно linmap и stacking_plus, сохраняет персонализацию из скоров донора и работает устойчивее. Бенчмарк покрывает matrix-factorization, GBDT, linear item-item и neural donors; 4 промаха в основном на ML-1M, где baseline AUC уже высокий.

Эти числа получены на одном seed (seed=42). Отдельный multi-seed прогон оценивает дисперсию headline-вывода на 3 доменах (ML-1M, Goodbooks, KION) × ALS × 5 seeds (см. результаты по seed-разбросу); он подтверждает устойчивость headline на этих ячейках. Он не перепрогоняет 4 пограничные ячейки, где transfer проигрывает (ML-1M × bpr/catboost/two_tower, amazon-toys × bpr) — их нет в multi-seed конфиге, и они остаются single-seed.

Архитектура

  • warmtransfer — лёгкое ядро: методы переноса, метрики и content similarity.
  • warmtransfer.bench — optional benchmark layer: dataset loaders, splitters, donor adapters и runner warmbench.

Быстрый вердикт: какой метод подойдёт моим данным?

Не уверены, какой метод выбрать? Принесите взаимодействия, контент айтемов и скоры своей модели — recommend прогонит все применимые методы на честном псевдо-cold holdout и подскажет лучший (и стоит ли вообще использовать трансфер):

import warmtransfer as wt

result = wt.recommend(interactions, content, donor_scores)
print(result)              # лидерборд + вердикт
result.best_transfer       # лучший не-бейзлайн метод, напр. "linmap"
result.predict(users, new_item_ids)   # победитель, дофиченный на всех warm

Или из терминала:

warmbench try --interactions inter.parquet --content content.parquet --scores scores.parquet

Оценка делается на holdout из ваших тёплых айтемов; донор не переобучается — трактуйте как слегка оптимистичный сигнал того, помогает ли трансфер. Готовый пример — в examples/recommend_quickstart.py.

Куда дальше