mcpField
M
Model Evaluator

Model Evaluator

github.com/jmsktmテスト・品質10208 回インストール40 週間前に更新
リポジトリ

Model Evaluator について

Model Evaluatorは、機械学習モデルを厳密に評価・比較するためのスキルです。予測性能、効率、頑健性、公平性、キャリブレーションを扱い、評価設計、統計検定、LLM固有の評価も支援します。

主な機能

  1. 01タスクに適した評価指標の選定
  2. 02テストセットと評価手順の設計
  3. 03モデル比較と有意性の検定
  4. 04LLMの品質と効率の評価
  5. 05頑健性、公平性、キャリブレーションの分析

活用シーン

  1. 01分類や生成タスクの指標選定
  2. 02候補モデルの比較とレポート作成
  3. 03LLMの精度、レイテンシ、コストの評価
  4. 04分布変化やサブグループ別のモデル挙動確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jmsktm/claude-settings --skill model-evaluator

インストール後、Claude Code で/model-evaluatorを入力して読み込まれたか確認します。

詳細

モデル評価

モデル評価スキルは、複数の観点から機械学習モデルの性能を厳密に評価・比較するのに役立ちます。適切な指標の選択、評価プロトコルの設計、よくある統計上の落とし穴の回避、データに基づくモデル選択の判断をサポートします。

適切なモデル評価には、精度スコアの確認だけでは不十分です。このスキルでは、予測性能、計算効率、堅牢性、公平性、キャリブレーション、本番環境への適合性まで、幅広い観点から評価します。「どのモデルが最適か」だけでなく、「自分の具体的なユースケースや制約に最適なモデルはどれか」という問いにも答えられるよう支援します。

LLM、分類器、カスタムモデルのいずれを比較する場合も、このスキルを使えば、評価方法が妥当で、信頼できる結論を導き出せます。

コアワークフロー

ワークフロー 1:評価プロトコルの設計
  1. 評価目標を定義します:
    • 主な目標(精度、速度、コストなど)
    • 副次的な制約
    • テストする障害モード
    • シミュレーションする実環境の条件
  2. 適切な指標を選択します:
    タスクの種類主な指標副次的な指標
    分類正解率、F1、AUC-ROC適合率、再現率、混同行列
    回帰RMSE、MAE、R-squared残差分析、予測区間
    ランキングNDCG、MRR、MAPPrecision@k、Recall@k
    生成BLEU、ROUGE、BERTScore人間による評価、忠実性
    LLMタスク固有の正解率レイテンシ、コスト、一貫性
  3. テストセットを設計します:
    • ホールドアウトテストデータ
    • エッジケースのコレクション
    • 敵対的な例
    • 分布シフトテスト
  4. 統計的手法を計画します:
    • 統計的有意性を検証するためのサンプルサイズ
    • 信頼区間
    • 多重比較の補正
ワークフロー 2:比較評価の実施
  1. 評価インフラストラクチャを準備します:
    class ModelEvaluator:
        def __init__(self, test_data, metrics):
            self.test_data = test_data
            self.metrics = metrics
            self.results = {}
    
        def evaluate(self, model, model_name):
            predictions = model.predict(self.test_data.inputs)
            scores = {}
            for metric in self.metrics:
                scores[metric.name] = metric.compute(
                    predictions,
                    self.test_data.labels
                )
            self.results[model_name] = scores
            return scores
    
        def compare(self):
            return statistical_comparison(self.results)
    
  2. すべてのモデルで一貫した方法で評価を実行します
  3. 信頼区間を算出します
  4. 統計的有意性を検定します
  5. 比較レポートを作成します
ワークフロー 3:LLM 固有の評価
  1. 評価の観点を定義します:
    • タスクの正確性(事実性、推論、コーディング)
    • 回答の質(一貫性、関連性、スタイル)
    • 安全性とアラインメント
    • 効率性(トークン数、レイテンシ、コスト)
  2. 評価データセットを作成します:
    • 代表的なプロンプト
    • 正解データ(該当する場合)
    • 人間の選好データ
  3. LLM 評価を実装します:
    • 自動評価指標(完全一致、意味的類似度)
    • LLM-as-judge による評価
    • 人間による評価プロトコル
  4. 複数の観点から結果を分析します
  5. トレードオフを踏まえた推奨事項を提示します

クイックリファレンス

操作コマンド/トリガー
評価を設計する「[model type] をどのように評価すればよいですか」
指標を選択する「[task type] にはどの指標を使えばよいですか」
モデルを比較する「これらのモデルを比較してください:[list]」
LLM を評価する「LLM の性能を評価してください」
統計的検定「この差は有意ですか」
バイアス評価「モデルにバイアスがないか確認してください」

ベストプラクティス

  • 複数の指標を使用する:単一の指標では全体像を把握できません

    • 集約指標と詳細指標の両方を含めます
    • 点推定値だけでなく、信頼区間も報告します
    • サブグループごとの性能を示します
  • 現実的なデータでテストする:評価データは本番環境と一致している必要があります

    • 実際の入力と同じ分布にします
    • エッジケースや難しい例を含めます
    • モデルが見たことのないデータでテストします
  • ばらつきを考慮する:モデルとデータにはランダム性があります

    • 学習ベースの評価では、複数のシードを使って実行します
    • ブートストラップ法で信頼区間を算出します
    • 比較には適切な統計検定を使用します
  • あらゆるコストを考慮する:性能は精度だけではありません

    • 推論のレイテンシとスループット
    • メモリと計算リソースの要件
    • ホスト型モデルの API コスト
    • メンテナンスと更新の負担
  • 堅牢性をテストする:モデルは困難な状況にどのように対処するでしょうか?

    • 入力の摂動やノイズ
    • 分布シフト
    • 敵対的サンプル
    • 欠損した入力や不正な形式の入力
  • 公平に評価する:モデル間の公平な比較を確保します

    • すべてのモデルに同じテストデータを使用します
    • 前処理を統一します
    • ハイパーパラメーター調整にかける労力を同等にします
    • 利点と欠点をすべて記録します

高度な手法

多次元評価

複数の軸でモデルを採点します:

def multi_dim_evaluate(model, test_data):
    return {
        "accuracy": compute_accuracy(model, test_data),
        "latency_p50": measure_latency(model, test_data, percentile=50),
        "latency_p99": measure_latency(model, test_data, percentile=99),
        "memory_mb": measure_memory(model),
        "cost_per_1k": compute_cost(model, n=1000),
        "robustness": adversarial_accuracy(model, test_data),
        "fairness": demographic_parity(model, test_data)
    }
LLM-as-Judge プロトコル

LLM を使って LLM の出力を評価します:

Prompt template:
"Rate the following response on a scale of 1-5 for:
- Accuracy: Is the information correct?
- Helpfulness: Does it address the user's need?
- Clarity: Is it easy to understand?

Question: {question}
Response: {response}
Ground truth (if available): {ground_truth}

Provide scores and brief justification."
A/B テストのフレームワーク

本番環境での評価に使用します:

class ABTest:
    def __init__(self, model_a, model_b, traffic_split=0.5):
        self.models = {"A": model_a, "B": model_b}
        self.split = traffic_split
        self.results = {"A": [], "B": []}

    def serve(self, request):
        variant = "A" if random.random() < self.split else "B"
        response = self.models[variant].predict(request)
        return response, variant

    def record_outcome(self, variant, success):
        self.results[variant].append(success)

    def compute_significance(self):
        return statistical_test(self.results["A"], self.results["B"])
キャリブレーション分析

予測確率に意味があることを確認します:

- Expected Calibration Error (ECE)
- Reliability diagrams
- Brier score decomposition
- Temperature scaling for recalibration

避けるべきよくある落とし穴

  • 評価を繰り返してテストセットに過剰適合する
  • モデル比較における統計的有意性を無視する
  • タスクに不適切な指標を使用する(クラスの不均衡がある場合の正解率など)
  • 学習データに似すぎたデータで評価する
  • モデル選定で計算コストを無視する
  • 分布シフトに対する堅牢性をテストしない
  • A/B テストで相関と因果関係を混同する
  • 統計検定で多重比較を考慮しない

コメント