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

Быстрый старт

Эта страница показывает core plug&play путь: принести скоры донора по warm items, обучить один метод переноса и предсказать скоры для cold-start items. warmtransfer.bench здесь не нужен.

Установка

uv sync
python -m pip install warm-transfer

Запустите пример

Полный исполняемый скрипт лежит в репозитории и подключается в документацию напрямую, чтобы пример в доке не расходился с кодом.

Note

Каталог examples/ доступен только при клоне репозитория; в pip-wheel он не упаковывается. Если вы ставили через pip, скопируйте сниппет ниже в локальный файл и запустите его напрямую.

"""Minimal plug&play warmtransfer example without warmtransfer.bench.

The user brings warm scores from an already trained donor and content for warm/cold items.
LinMap learns a mapping "content -> vector of per-user scores" and predicts
scores for new items.
"""

from __future__ import annotations

import numpy as np
import pandas as pd

from warmtransfer.columns import Columns as C
from warmtransfer.methods import LinMap
from warmtransfer.types import ItemFeatures, TransferInputs

warm_features = ItemFeatures(
    item_ids=np.array([10, 11]),
    matrix=np.array([[1.0, 0.0], [0.0, 1.0]]),
    feature_names=["genre_action", "genre_drama"],
)
cold_features = ItemFeatures(
    item_ids=np.array([20]),
    matrix=np.array([[1.0, 0.0]]),
    feature_names=["genre_action", "genre_drama"],
)

donor_scores = pd.DataFrame(
    {
        C.User: [1, 1, 2, 2],
        C.Item: [10, 11, 10, 11],
        C.Score: [5.0, 1.0, 1.0, 5.0],
    }
)

inputs = TransferInputs(
    donor_scores=donor_scores,
    warm_features=warm_features,
    cold_features=cold_features,
)

reco = LinMap(alpha=1.0).fit(inputs, seed=42).predict(
    user_ids=np.array([1, 2]),
    cold_item_ids=np.array([20]),
)

if __name__ == "__main__":
    print(reco.to_string(index=False))

Ожидаемый вывод:

 user_id  item_id  score
       1       20    4.0
       2       20    2.0

Что произошло

  1. donor_scores — long-format таблица [user_id, item_id, score] только по warm items.
  2. warm_features и cold_features связывают item ids с content-векторами.
  3. LinMap.fit(inputs, seed=42) учит линейное отображение из контента айтема в вектор скоров донора.
  4. predict(user_ids, cold_item_ids) возвращает long-format скоры по всем заданным парам user-item.

Дальше