Spaces:
Sleeping
Sleeping
| """ | |
| Test script for the refund model service | |
| Run this to verify the model loads and can make predictions | |
| """ | |
| import sys | |
| from pathlib import Path | |
| # Add the parent directory to path to import the service | |
| sys.path.insert(0, str(Path(__file__).parent)) | |
| try: | |
| import xgboost as xgb | |
| import numpy as np | |
| import json | |
| print("β Dependencies imported successfully") | |
| except ImportError as e: | |
| print(f"β Missing dependency: {e}") | |
| print("Run: pip install xgboost numpy") | |
| sys.exit(1) | |
| # Test 1: Load model files | |
| print("\n=== Test 1: Loading Model Files ===") | |
| try: | |
| model_path = Path(__file__).parent / '../../customer_score_models' / 'xgb_model.ubj' | |
| features_path = Path(__file__).parent / '../../customer_score_models' / 'feature_columns.json' | |
| assert model_path.exists(), f"Model file not found: {model_path}" | |
| assert features_path.exists(), f"Features file not found: {features_path}" | |
| print(f"β Model file found: {model_path}") | |
| print(f"β Features file found: {features_path}") | |
| # Load model | |
| model = xgb.Booster() | |
| model.load_model(str(model_path)) | |
| print("β XGBoost model loaded successfully") | |
| # Load features | |
| with open(features_path, 'r') as f: | |
| feature_columns = json.load(f) | |
| print(f"β Feature columns loaded: {len(feature_columns)} features") | |
| except Exception as e: | |
| print(f"β Error loading model: {e}") | |
| sys.exit(1) | |
| # Test 2: Make a test prediction | |
| print("\n=== Test 2: Test Prediction ===") | |
| try: | |
| # Create a dummy feature vector (all zeros except a few) | |
| dummy_features = np.zeros(len(feature_columns), dtype=np.float32) | |
| # Set some realistic values | |
| feature_dict = {col: 0 for col in feature_columns} | |
| feature_dict['user_age'] = 35 | |
| feature_dict['address_pincode'] = 400001 | |
| feature_dict['base_price'] = 500.0 | |
| feature_dict['order_quantity'] = 1 | |
| feature_dict['product_price'] = 500.0 | |
| feature_dict['discount_applied'] = 10.0 | |
| feature_dict['days_to_return'] = 5 | |
| feature_dict['is_exchanged'] = 0 | |
| feature_dict['risk_score'] = 0.3 | |
| feature_dict['discount_ratio'] = 0.02 | |
| feature_dict['price_inverse'] = 0.002 | |
| feature_dict['days_inverse'] = 0.2 | |
| # Set one product type (example) | |
| if 'product_name_Electronics Product' in feature_dict: | |
| feature_dict['product_name_Electronics Product'] = 1 | |
| # Set one payment method | |
| if 'payment_method_Credit Card' in feature_dict: | |
| feature_dict['payment_method_Credit Card'] = 1 | |
| # Convert to array | |
| feature_array = np.array([feature_dict[col] for col in feature_columns], dtype=np.float32) | |
| # Make prediction | |
| dmatrix = xgb.DMatrix(feature_array.reshape(1, -1)) | |
| prediction = model.predict(dmatrix, validate_features=False)[0] | |
| print(f"β Test prediction successful: {prediction:.2f}%") | |
| if 0 <= prediction <= 100: | |
| print("β Prediction is in valid range (0-100)") | |
| else: | |
| print(f"β Warning: Prediction outside expected range: {prediction}") | |
| except Exception as e: | |
| print(f"β Error making prediction: {e}") | |
| import traceback | |
| traceback.print_exc() | |
| sys.exit(1) | |
| # Test 3: Check feature columns structure | |
| print("\n=== Test 3: Feature Columns Analysis ===") | |
| try: | |
| # Count feature types | |
| product_features = [f for f in feature_columns if f.startswith('product_name_')] | |
| payment_features = [f for f in feature_columns if f.startswith('payment_method_')] | |
| numeric_features = [f for f in feature_columns if not (f.startswith('product_name_') or f.startswith('payment_method_'))] | |
| print(f"β Numeric features: {len(numeric_features)}") | |
| print(f" Examples: {numeric_features[:5]}") | |
| print(f"β Product name features: {len(product_features)}") | |
| print(f"β Payment method features: {len(payment_features)}") | |
| print(f" Available: {[f.replace('payment_method_', '') for f in payment_features]}") | |
| except Exception as e: | |
| print(f"β Error analyzing features: {e}") | |
| print("\n" + "="*50) | |
| print("β All tests passed! Model is ready to use.") | |
| print("="*50) | |