AI Navigate

[P] XGBoost + TF-IDFを用いた感情予測 — 精度は良好だが強度の推定で苦戦中(アドバイス求む)

Reddit r/MachineLearning / 2026/3/19

💬 オピニオンTools & Practical Usage

要点

  • 約1200サンプルを用いて、6クラスの感情状態と1–5の強度スコアを予測する。TF-IDFテキスト特徴量とエンジニアリング済みメタデータを組み合わせ、分類と回帰のためにXGBoostモデルを用いた。
  • 感情分類の精度はおおよそ66〜67%程度。誤分類の多くは隣接するクラス間で発生し、データセットは小さくノイズが多いとされ、テキスト特徴量がメタデータより支配的である。
  • 強度は当初、分類タスクとして取り組まれ、精度は約21%に留まった。その後、回帰へ切り替え、予測を1–5へ丸めた場合のMAEが約1.22に達した。
  • TF-IDF特徴量の調整はトレードオフを示す。特徴量を500に削減すると精度が低下し、1000〜1500へ増やすとわずかな改善が見られるが、最適なバランスは不明なままで、特徴量エンジニアリングの影響は限定的である。

皆さん、こんにちは、

約1200サンプルの小規模なMLプロジェクトに取り組んでおり、以下を予測しようとしています:

  1. 感情状態(分類—6クラス)
  2. その感情の強さ(1–5)

データセットには:

  • journal_text(短く、ノイズの多い振り返り)
  • メタデータの例として:
    • ストレスレベル
    • エネルギーレベル
    • 睡眠時間
    • 日中の時間帯
    • 前日の気分
    • 雰囲気タイプ
    • 顔の感情ヒント
    • 継続時間(分)
    • 振り返りの質

これまでに行ったこと

1. テキスト処理

TF-IDFを使用:

  • max_features = 500 → tried 1000+ as well
  • ngram_range = (1,2)
  • stop_words = 'english'
  • min_df = 2

得られた形状:

  • 約1200サンプル × 500–1500特徴量

2. メタデータ

  • カテゴリカルデータ(face_emotion_hint)を数値に変換
  • 他のデータは数値のまま
  • 欠測値の処理(XGBoost には NaN のまま、または簡易補完を適用)

また、エンジニアリングした特徴:

  • text_length
  • word_count
  • stress_energy = stress_level * energy_level
  • emotion_hint_diff = stress_level - energy_level

StandardScalerを用いてメタデータを標準化

テキストと組み合わせて:

from scipy.sparse import hstack X_final = hstack([X_text, X_meta_sparse]).tocsr() 

3. モデル

感情状態(分類)

XGBClassifierを使用:

  • 精度 ≈ 66–67%

分類レポートは概ね良好で、混乱は主に隣接クラス間に見られる。

Intensity(初期分類)

  • 精度 ≈ 21%(非常に低い)

4. 強度 → 回帰へ切替

XGBRegressorを使用:

  • 予測を 1–5 に丸める

評価:

  • MAE ≈ 1.22

現在の課題

1. 強度の改善があまり進んでいない

  • 特徴量エンジニアリングとチューニングを行っても
  • MAE は約 1.2 のまま
  • わずかな改善のみ(約0.05–0.1)

2. TF-IDF のチューニングの混乱

  • 特徴量を減らす(500)→ 精度が低下
  • 増やす(1000–1500)→ やや良くなる

最適なバランスをどう見つけるか分からない

3. 特徴量エンジニアリングの効果は小さい

  • 複数の特徴量を追加したが大きな改善はなし
  • どんな特徴量が実際に強度に役立つか分からない

観察

  • データセットは小さい(1200行)
  • ラベルはノイズが多い(主観的な感情+強度)
  • モデルは近接クラスを混同する(予想どおり)
  • テキストがメタデータよりも支配的に見える

質問

  1. 順序予測(通常の回帰の代わりに、より良いアプローチはあるか?)
  2. 特に感情強度のためのより良い特徴量のアイデアはありますか?
  3. 他のモデル(LightGBM、線形モデルなど)を試すべきですか?
  4. テキストとメタデータを組み合わせるより良い方法はありますか?

目標

単に精度を最大化するだけでなく、以下を満たすものを作ること:

  • ノイズの多いデータを扱えること
  • 汎用性が高いこと
  • 現実世界の挙動を反映すること

ご提案や洞察をぜひお願いします

submitted by /u/Udbhav96
[link] [comments]