# requirements.md

## 概要

`RecencyFrequencyScorer` のインスタンスをファイルに保存・ロードできる機能を追加する。

## 背景・動機

- `fit()` と `optimize()` は計算コストが高い（全件集計 + 凸最適化）
- 学習済みモデルをサーバーにデプロイする際、再学習なしにロードするだけで推薦スコアリングを実行したい
- 現状は保存手段がなく、サーバーでの利用が困難

## ユーザーストーリー

- **学習パイプライン担当として**、`scorer.save("model.pkl")` でモデルを保存したい。これにより学習結果を成果物として管理できる。
- **サーバー運用担当として**、`RecencyFrequencyScorer.load("model.pkl")` でモデルをロードし、`transform()` や `predict()` をそのまま実行したい。再学習コストを払わずに済む。

## 受け入れ条件

1. `fit()` 後のインスタンスを保存・ロードでき、ロード後に `predict()` / `transform()` が同じ結果を返す
2. `optimize()` 後のインスタンスを保存・ロードでき、ロード後に最適化済みの確率で `predict()` / `transform()` が動作する
3. `save()` はファイルパスを受け取り、指定パスに書き込む
4. `load()` はクラスメソッドとして提供し、ファイルパスからインスタンスを復元して返す
5. ファイルフォーマットにバージョンを埋め込み、マイナー・メジャーバージョンが異なる場合は `UserWarning` を出してロードを続行する（ロードはブロックしない）
6. `load()` で信頼できないファイルを扱うリスクを docstring に明記する
7. 保存・ロードの単体テストを追加する

## 制約事項

- 追加の外部依存は導入しない（Python 標準の `pickle` を使用）
- 公開 API は `save(path)` と `load(path)` の 2 メソッドのみ
- `path` は `str` または `pathlib.Path` を受け付ける
