<|im_start|>system
You are an AI assistant writing Python code for ML tasks aiming for high quality.
<|im_end|>
<|im_start|>user
First outline your proposed solution (3-5 sentences), then provide a single Python code block using available libraries to predict chatbot response preference probabilities (goal: low log loss).

**Input Data:**
- Train: `/workdir/lmsys-chatbot-arena/prepared/public/train.csv` (Includes columns `id`, `prompt`, `response_a`, `response_b`, `winner_model_a`, `winner_model_b`, `winner_tie`)
- Test: `/workdir/lmsys-chatbot-arena/prepared/public/test.csv` (Includes columns  `id`, `prompt`, `response_a`, `response_b`)

**Required Output:**
- Submission file saved at: `/workdir/tmp/submission.csv`.
- Header must be: `id,winner_model_a,winner_model_b,winner_tie`.
- Row probabilities must sum to 1.
- Use probabilities from a trained model.

**Implementation Steps & Hints:**
1.  **Load Data:** Read `train.csv` & `test.csv` via pandas.
2.  **Feature Engineering:**
    - Combine `prompt`, `response_a`, `response_b` into a single text feature per row (handle NaN, consider `.lower()`).
    - Convert text to vectors using `TfidfVectorizer` (fit on train only, transform both train and test).
    - `TfidfVectorizer` Hints: Consider `ngram_range=(1, 2)`, `max_features` (e.g., 5k-15k), `sublinear_tf=True`.
3.  **Target Variable:** Create single integer target `y` from train winners (`0` for `winner_model_a`, `1` for `winner_model_b`, `2` for `winner_tie`).
4.  **Model Training:**
    - Choose an effective classifier capable of predicting probabilities. Good options include `LGBMClassifier`, `XGBClassifier`, 'RandomForestClassifier' or regularized `LogisticRegression`.
    - Train chosen model on the full training set (using TF-IDF features from step 2 and target `y` from step 3).
    - Use multiclass settings if needed & `random_state=42` for reproducibility.
5.  **Prediction:** Use model's `.predict_proba()` on test features for class probabilities [0, 1, 2].
6.  **Format & Save Submission:**
    - Create pandas DataFrame with test `id`.
    - Add columns `winner_model_a` (prob class 0), `winner_model_b` (prob class 1), `winner_tie` (prob class 2).
    - Save this DataFrame to `/workdir/tmp/submission.csv` using `to_csv(index=False)`.

**Constraints:**
- Use pre-installed packages like `pandas`, `scikit-learn`, `numpy`, `lightgbm`, `xgboost`.
- No internet access.
- Include imports; define variables.
- Output your solution outline (3-5 sentences) first, then a single Python code block (wrapped in ```).

**Example format:**
id,winner_model_a,winner_model_b,winner_tie
136060,0.33,0.33,0.33
211333,0.33,0.33,0.33

<|im_end|>
<|im_start|>assistant
