設計の手順
読者と目的を決める
架空の課題:API 未経験者が最初のリクエストを完成できる教材を選ぶ。実行しやすさ、初心者への説明、出典の追跡性を別々に評価します。
順序のある段階を書く
実行しやすさは 0=手順なし、1=概念だけ、2=手順はあるが入力や結果が不足、3=入力・手順・予想結果あり。Score の数値は定義した段階で解釈し、常に 0–1 とは考えません。
正規化してから重みを掛ける
この例はすべて 0–3 なので 3 で割ります。重みは仮に 0.5、0.3、0.2。元のスコアと各項目の寄与を保存します。最適な重みを示すものではありません。
必須条件を先に確認する
利用許可不明や明らかに古い API 情報は順位付け前に確認します。高い score は高い confidence ではありません。欠損は 0 にせず、再試行・確認・保留とします。
重みの影響と人の判断を比べる
A=(3,1,2) は 0.733、B=(2,3,3) は 0.833。重みを (0.8,0.1,0.1) にすると A=0.9、B=0.733 に逆転します。評価者の理由を聞き、基準を点検します。誤った個別判断は重みだけでは直りません。
具体例 · 本サイトの架空データ
| 観察した事実 | 判断 | コードでの処理 |
|---|---|---|
| A:実行3、初心者1、出典2 | 0.5×1 + 0.3×⅓ + 0.2×⅔ = 0.733 | この重みでは2位 |
| B:実行2、初心者3、出典3 | 0.5×⅔ + 0.3×1 + 0.2×1 = 0.833 | この重みでは1位 |
| C:初心者評価が欠損 | 欠損は0ではない | 追加評価まで保留 |
コピーできる設計例
独自の例です。JSON はリクエストや入力の形、Python は架空スコアの計算のみを示します。API は実行しません。接続前に公式仕様と処理方針を確認してください。
# Offline arithmetic exercise: these are invented ratings.
weights = (0.5, 0.3, 0.2)
ratings = {"A": (3, 1, 2), "B": (2, 3, 3), "C": (2, None, 3)}
assert abs(sum(weights) - 1) < 1e-9
for item_id, values in ratings.items():
if any(value is None for value in values):
print(item_id, "pending review")
continue
assert all(0 <= value <= 3 for value in values)
contributions = [w * value / 3 for w, value in zip(weights, values)]
print(item_id, round(sum(contributions), 3), contributions)
# A: 0.733; B: 0.833; C: pending review判断を設計するよくある失敗
- 0–3 と 0–10 をそのまま足して尺度の大きい項目を優先する。
- 似た評価軸を二重に数える。
- 合成スコアを成功確率と呼ぶ。これは設計した好みの関数です。
TRY / THINK / COMPARE
先に考えてから解説へ
合計 0.91 ですが重要な API 出典を開けません。すぐ推薦しますか?
解説を開く
まず出典を確認します。必須条件なら高得点で補えません。スコアは保存し、推薦は保留します。
提出前の確認
- 段階に観察できる定義がある。
- 尺度と重みを再計算でき、重みの合計は1。
- 必須条件・欠損・confidence を別処理する。
- 複数の重みで順位の変化を確認する。
よくある質問
合計は confidence ですか?
違います。重み付きの評価と、個別判断への確信は別です。
重みはどう決めますか?
読者の課題を定義し、正解データと失敗例で確認します。万能の重みはありません。
参考資料
公式パターンと Datawhale の実践テーマを参考に、説明・例・演習を独自に作成しています。API の実行結果や性能測定ではありません。