# Option 1: Explicitly specify categorical columns by name
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output new_model \
  --categorical-columns neighborhood,zip_code \
  --early-stopping-rounds 10

# Option 2: Auto-detect with custom threshold
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output new_model \
  --categorical-threshold 0.05 \
  --early-stopping-rounds 10

# Option 3: Mix of both (explicit + auto)
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output new_model \
  --categorical-columns neighborhood \
  --categorical-threshold 0.05 \
  --early-stopping-rounds 10

//=========================================


# 1. Inspect the trained model
./gbrt-rs info --model new_model --verbose


//========================================

# 2. Predict on training data (sanity check)
./gbrt-rs predict \
  --model new_model \
  --data train_final.csv \
  --output predictions.csv \
  --verbose

# Check predictions look reasonable
head -n 10 predictions.csv

# 3. Compare predictions vs actual prices (quick manual check)
# Extract first column of features and last column (price) for comparison
awk -F',' 'NR>1 {print $1 "," $NF}' train_final.csv | head -n 10


//=========================================

# 4. Get feature importance ranking
./gbrt-rs feature-importance \
  --model new_model \
  --top-k 10 \
  --verbose

# 5. Save detailed feature importance to JSON
./gbrt-rs feature-importance \
  --model new_model \
  --output feature_importance.json \
  --top-k 8

//=========================================

# Create a real test set (split your data)
tail -n 30 train_final.csv > test_final.csv
head -n -30 train_final.csv > train_subset.csv

# Train on subset
./gbrt-rs train \
  --data train_subset.csv \
  --target price \
  --output model_subset \
  --categorical-columns neighborhood,zip_code \
  --early-stopping-rounds 10 \
  --verbose

# Evaluate on held-out test set
./gbrt-rs evaluate \
  --model model_subset \
  --data test_final.csv \
  --target price \
  --verbose


//===============================================

# 6. Run cross-validation to verify stability
./gbrt-rs cross-validate \
  --data train_final.csv \
  --target price \
  --folds 5 \
  --verbose

//=================================================

# 7. Test with invalid categorical column (should error)
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output test_model \
  --categorical-columns neighborhood,wrong_column

# Expected: Error "Unknown categorical column 'wrong_column'..."

# 8. Test with missing target column (should error)
./gbrt-rs train \
  --data train_final.csv \
  --target nonexistent_price \
  --output test_model

# Expected: Error "Target column 'nonexistent_price' not found..."

# 9. Test with invalid test split ratio
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output test_model \
  --test-split 1.5

# Expected: Error "test_size must be between 0 and 1"

//==========================================================

# 10. Train with different hyperparameters
./gbrt-rs train \
  --data train_final.csv \
  --target price \
  --output model_shallow \
  --categorical-columns neighborhood,zip_code \
  --max-depth 3 \
  --learning-rate 0.05 \
  --n-estimators 200 \
  --verbose

# Compare feature importance between models
./gbrt-rs feature-importance --model new_model --top-k 5
./gbrt-rs feature-importance --model model_shallow --top-k 5


//==============================================================

# 11. Full pipeline test
echo "=== Training model ==="
./gbrt-rs train \
  --data train_subset.csv \
  --target price \
  --output pipeline_model \
  --categorical-columns neighborhood,zip_code \
  --early-stopping-rounds 10 \
  --test-split 0.15 \
  --verbose

echo "=== Making predictions ==="
./gbrt-rs predict \
  --model pipeline_model \
  --data test_final.csv \
  --output pipeline_predictions.csv \
  --verbose

echo "=== Evaluating performance ==="
./gbrt-rs evaluate \
  --model pipeline_model \
  --data test_final.csv \
  --target price \
  --verbose

echo "=== Analyzing features ==="
./gbrt-rs feature-importance \
  --model pipeline_model \
  --top-k 5 \
  --verbose

echo "=== Model info ==="
./gbrt-rs info --model pipeline_model --verbose

//================================================

# Verify predictions are in expected range (around 150-900 based on your CSV)
cut -d',' -f2 predictions.csv | sort -n | head -n 1
cut -d',' -f2 predictions.csv | sort -n | tail -n 1
