# 精度改善ワークスペース（2026-06-19 開始）

## 方針

後段モデル比較の結論：**学習モデル間の差は小さく（human_total MAE 8.72〜8.88）、後段モデルの差し替えでは精度は伸びない**。
伸びしろは上流（代表フレーム抽出・LLM評価・濃度・教師データ）にある。
→ まず「直すべき場所を特定」し、その後で上流を改善する。後段の交差検証・濃度3条件比較（依頼案6,7）はそのあと。

参考: `reports/ClaudeCode引き継ぎ_精度改善方針_20260619.md` / `reports/後段モデル比較レポート_20260619.md`

データ結合: `検証/results/downstream_model_comparison/features.csv`（動画/フレームパス・LLM特徴量・濃度・人間点数）と `predictions.csv`（モデル別予測・誤差）を `sample_id` で結合。すべて `encoding='utf-8-sig'`。

## フォルダ構成

| パス | 内容 |
|---|---|
| `01_error_analysis/` | 大外し上位50件（原因分類用、total/soup両方） |
| `02_density_boundary/` | visual_density 11/12 境界サンプル |
| `03_low_score/` | 60点未満の低評価サンプル一覧 |
| `scripts/` | 抽出スクリプト3本 |

## 第1段階の結果（自動生成済み・これから人手分類）

### 01 大外し分析
- `large_errors_human_total.csv`（主軸=線形回帰 visual+brix／比較=RF・LGBM）: 50件、abs_error 6.64〜39.01
- `large_errors_human_soup.csv`（主軸=線形回帰 visual_only）: 50件、abs_error 7.23〜39.74
- **sample_id 805・219 が両target共通で最上位** → 原因調査の最優先候補
- 人手分類列: `分類`（フレーム抽出ミス/LLM評価ミス/濃度ズレ/教師点数ブレ/画像では判断不能/その他）, `メモ`

### 02 visual_density 11/12 境界
- 203件（12=156, 11=47）
- 注意: この区間は brix が12で頭打ちのため `density_brix_abs_diff` がほぼ0で機能しない。**妥当性確認は `total_error` と実画像目視で行う**こと
- features.csv に `summary` 列が無く空欄（必要なら別途付与）
- 人手列: `境界判定妥当(yes/no)`, `正しいと思うdensity`, `メモ`

### 03 低評価60点未満
- **519件中わずか12件（2.3%）** — 低評価データが極端に少ない
- モデル予測が乗るのは3件のみ、いずれも**+37〜39点の過大評価** → `anomaly_recall≈0` と整合
- スコア回帰のチューニングでは救えない。**低評価データ拡充＋別建ての要注意判定が必須**
- 人手列: `分類`（通常/要注意/撮り直し推奨）, `メモ`

### 01b 大外し一次分類（A: 完了）
`findings_一次分類.md` 参照。大外しの根本原因は3つ：
- **LLM評価ミス 42%**（最優先）: 白泡・脂膜・白い膜・浮いた具材/肉の白さで visual_density を過大評価。方針書の警告パターンそのもの。
- **画像判断不能 26%**: assessable=0 なのに後段が約77〜80を機械付与→両方向に大外し。**パイプライン分岐の欠陥**。
- **その他 32%**（うち天井効果が主）: 人間=100・特徴量最大でも予測が約92.7で飽和。優先度低。
→ 上流（assessable分岐＋LLM density境界）の修正が大外しの約7割に効く。当初仮説が実データで裏付け。

### 04 交差検証・濃度条件（C: 完了）
`04_cross_validation/summary.md` 参照。
- **5-fold CV**: 線形回帰/Ridge（visual_plus_brix）が MAE最良かつ std最小で最安定。木系はstd大。→ 本番初期は線形/Ridgeで確定。
- CV MAEは約9.4で固定test(8.72)より高い＝固定分割より誠実な推定値。
- **濃度なし時の劣化はごく小さい**（total +0.06 MAE / soup はほぼ無効果）。**実測濃度が将来なくなっても後段への影響は軽微**で、精度の鍵は visual 評価。
- 推定濃度カラムは未整備のため2条件比較。推定濃度は将来対応。

### 05 打ち手1（判断不能画像の分岐）後段再比較（完了）
`05_branch_comparison/` 参照。プロンプト不変・既存LLM出力を再利用（**LLM再課金なし**）。5-fold CV、線形回帰で条件を揃えた比較：

| target | 条件 | n | MAE | std | corr |
|---|---|---:|---:|---:|---:|
| total | baseline_all | 519 | 9.41 | 0.93 | 0.599 |
| total | **exclude_assessable0** | 346 | **8.56** | 0.67 | 0.558 |
| total | exclude_retake1 | 190 | 9.38 | 1.44 | 0.533 |
| soup | baseline_all | 519 | 8.71 | 0.55 | 0.553 |
| soup | **exclude_assessable0** | 346 | **8.25** | 0.42 | 0.477 |
| soup | exclude_retake1 | 190 | 8.37 | 1.08 | 0.475 |

結論：
- **assessable=0 を後段に流さないと total MAE -9%(9.41→8.56)・soup -5%(8.71→8.25)、std も低下し安定化。** 打ち手1は有効。
- **retake_recommended=1 での厳格カットは逆効果**（photo_quality≠良いを全除外→63%減でMAE改善せずstd大幅悪化）。採用しない。
- 採用基準: **scoreable = assessable=1**。assessable=0 は「要確認/撮り直し」へ分岐。
- 副作用: corr はわずかに低下（外れ値的な高分散行を除いたため）。本番ではその行は元々スコアしないので問題なし。

## 次のステップ（人手分類の結果で分岐）

1. **人手分類を実施**（01のCSV、特に 805・219）→ 外れ原因の内訳を把握
2. 内訳に応じて改善対象を決定：
   - フレーム抽出ミスが多い → 代表フレーム抽出の改善（3〜5枚化・湯気/白飛び除外・統合）
   - LLM評価ミスが多い → プロンプトの境界説明補強（`APIテスト/index.html` と `豚山スープ画像評価プロンプト方針.md` を同期更新）
   - 濃度ズレが多い → density_source の扱い・推定濃度の検証
3. 低評価データの追加収集と要注意判定の別建て
4. 後段モデルの 5-fold 交差検証・濃度3条件比較（依頼案6,7）
