Newer
Older
TIASJudgeModel / docs / 06_TEST / TEST_04_クラス不均衡対策の実験.md

クラス不均衡対策の実験 (Class Imbalance Experiments)

TEST_03 で紫・淡白の再現率が低かったため,クラス不均衡への対策(SPEC_02「クラス不均衡」→「対策の設定」)を 2 モデル × 3 通り × 2 条件 × 3 seed で試した結果.対策なしの結果は TEST_03 のものを使い,同じ seed・同じ fold どうしで対応比較した.表は uv run python scripts/summarize_cv.py runs で再生成できる.

項目内容
実行日時2026-09-28 08:50〜10:14
実行場所Archimedes の RTX A6000(GPU 1 の 1 枚.未使用の GPU のみを使用)
本数36 本(ConvNeXt-Tiny・ResNet-50 × 対策 3 通り × ややあり込み/除外 × seed 42・43・44)
モデルと学習率ConvNeXt-Tiny(1e-4)・ResNet-50(1e-3).TEST_03 の設定から対策のキーだけを変えた
対策重み inverse・重み sqrt_inverse・バランス・サンプリング balanced
コードf9d9ebd-dirty(コミット 8387ebd の内容を実行時点で未コミットのまま使用.既定のままなら変更前と同じ学習になることはテストで確認済み)

結果 (Results)

common(「あり」と淡紅)の macro F1・正解率と,all(ややあり込みの全体)の macro F1.15 fold の平均 ± 標準偏差.

モデル対策条件common macro F1common 正解率all macro F1
ConvNeXt-Tinyなし込み0.541 ± 0.0660.668 ± 0.0350.510 ± 0.056
ConvNeXt-Tiny重み inverse込み0.585 ± 0.0570.669 ± 0.0630.546 ± 0.054
ConvNeXt-Tiny重み sqrt込み0.563 ± 0.0450.645 ± 0.0570.524 ± 0.032
ConvNeXt-Tinybalanced込み0.566 ± 0.0710.663 ± 0.0810.528 ± 0.061
ConvNeXt-Tinyなし除外0.592 ± 0.0680.744 ± 0.0350.480 ± 0.056
ConvNeXt-Tiny重み inverse除外0.632 ± 0.0600.745 ± 0.0300.528 ± 0.043
ConvNeXt-Tiny重み sqrt除外0.595 ± 0.0600.750 ± 0.0300.490 ± 0.049
ConvNeXt-Tinybalanced除外0.611 ± 0.0520.734 ± 0.0410.509 ± 0.046
ResNet-50なし込み0.546 ± 0.0570.649 ± 0.0660.520 ± 0.050
ResNet-50重み inverse込み0.558 ± 0.0450.635 ± 0.0550.535 ± 0.035
ResNet-50重み sqrt込み0.590 ± 0.0570.666 ± 0.0700.554 ± 0.043
ResNet-50balanced込み0.562 ± 0.0380.627 ± 0.0450.533 ± 0.043
ResNet-50なし除外0.637 ± 0.0620.748 ± 0.0450.519 ± 0.056
ResNet-50重み inverse除外0.637 ± 0.0580.720 ± 0.0450.542 ± 0.047
ResNet-50重み sqrt除外0.633 ± 0.0560.733 ± 0.0450.534 ± 0.044
ResNet-50balanced除外0.616 ± 0.0500.712 ± 0.0620.523 ± 0.038

対策なしとの対応比較 (Paired Comparison)

対策あり − 対策なし(同じモデル・条件・seed・fold どうし.15 fold).recall は common でのクラス別再現率の差.

モデル対策条件common F1 の差上回った fold淡白紫淡紅暗赤紅
ConvNeXt-Tiny重み inverse込み+0.044 ± 0.06411 / 15+0.19+0.15−0.03−0.05
ConvNeXt-Tiny重み inverse除外+0.040 ± 0.06312 / 15+0.19+0.09−0.07+0.02
ConvNeXt-Tiny重み sqrt込み+0.021 ± 0.05210 / 15+0.12+0.23−0.06−0.07
ConvNeXt-Tiny重み sqrt除外+0.003 ± 0.0748 / 15−0.01−0.04−0.02+0.06
ConvNeXt-Tinybalanced込み+0.025 ± 0.0609 / 15+0.07+0.19−0.00−0.09
ConvNeXt-Tinybalanced除外+0.018 ± 0.06710 / 15+0.13+0.05−0.08+0.03
ResNet-50重み inverse込み+0.011 ± 0.0607 / 15+0.16+0.10−0.04−0.05
ResNet-50重み inverse除外−0.000 ± 0.0535 / 15+0.11+0.08−0.04−0.12
ResNet-50重み sqrt込み+0.043 ± 0.06511 / 15+0.12+0.10+0.01−0.03
ResNet-50重み sqrt除外−0.004 ± 0.0658 / 15−0.01+0.10−0.01−0.07
ResNet-50balanced込み+0.016 ± 0.0688 / 15+0.13+0.15−0.05−0.08
ResNet-50balanced除外−0.021 ± 0.0714 / 15+0.06+0.07−0.04−0.09

クラス別再現率の差の標準偏差は 0.1〜0.3 と大きい(各 fold の held_out に淡白・紫は 11〜12 人しかいないため).

分かったこと (Findings)

  1. ConvNeXt-Tiny では重み inverse が安定して効く.込み・除外とも common macro F1 が約 +0.04 上がり(11〜12/15 fold),除外では 0.632 となって ResNet-50 の最良(0.637)と並んだ
  2. ResNet-50(学習率 1e-3)では効果がほとんど無い.除外ではどの対策も ±0.02 の範囲で,上回った fold も半分以下.込みで sqrt_inverse だけが +0.043(11/15)
  3. 狙いどおり淡白・紫の再現率は上がるが(多くの組み合わせで +0.1〜0.2),淡紅・暗赤紅の再現率が下がる入れ替わりが起きる(−0.03〜−0.12).macro F1 の改善が小さいのはこのため
  4. all(ややあり込みの全体)の macro F1 も上がる(ConvNeXt・inverse で 0.510 → 0.546,ResNet-50・sqrt で 0.520 → 0.554)
  5. 3 通りの対策の中では,重み inverse が最も安定.balanced は同じ画像を何度も学習するためか効果が不安定で,ResNet-50 の除外では下がった
  6. 紫の再現率は対策後も 0.3〜0.55 に留まる.紫は枚数の少なさに加えて暗赤紅と色が近く(TEST_02.ΔE 4.6),不均衡対策だけでは解決しない

注意 (Caveats)

  • 差の多くは fold 間のばらつき(標準偏差 0.05〜0.08)と同程度で,確定的に言えるのは「ConvNeXt・inverse はおおむね改善する」程度
  • ResNet-50 の学習率 1e-3 は TEST_03 で結果を見て選んだもので,その上に重ねた比較である(TEST_03「学習率について」)
  • 対策の種類と強さも結果を見て選ぶことになるため,最終的な構成は入れ子の交差検証など評価とは別のデータで選ぶ必要がある

次の一手 (Next Steps)

  • 今後の基準の構成を「ConvNeXt-Tiny・重み inverse」または「ResNet-50(1e-3)」とし,学習率の公平な選び直し(入れ子の交差検証)と組み合わせる
  • 紫と暗赤紅の取り違えを混同行列で詳しく見る(紫の多くがどのクラスに流れているか)
  • 入力解像度を上げる(224 → 320 等).色むらの細部が紫の判別に効く可能性がある

実験 ID (Run IDs)

手元の runs/ に回収済み(.gitignore 対象).名前の末尾 _cwinv・_cwsqrt・_balanced が対策を表す.実験 ID の日時は 2026-09-28 08:50〜10:12.

ls -d runs/*_f9d9ebd-dirty