| import pandas as pd | |
| import joblib | |
| import gradio as gr | |
| # Load model artifact once | |
| artifact = joblib.load("pue_artifact.joblib") | |
| def predict_pue( | |
| zone_id, hour, day_of_week, is_weekend, | |
| weather_factor, event_factor, traffic_index, | |
| distance_km, duration_min, base_fare, | |
| avg_distance, avg_duration, avg_fare, | |
| discount_usage_rate, total_rides | |
| ): | |
| input_data = { | |
| "zone_id": int(zone_id), | |
| "hour": int(hour), | |
| "day_of_week": int(day_of_week), | |
| "is_weekend": int(is_weekend), | |
| "weather_factor": float(weather_factor), | |
| "event_factor": float(event_factor), | |
| "traffic_index": float(traffic_index), | |
| "distance_km": float(distance_km), | |
| "duration_min": float(duration_min), | |
| "base_fare": float(base_fare), | |
| "avg_distance": float(avg_distance), | |
| "avg_duration": float(avg_duration), | |
| "avg_fare": float(avg_fare), | |
| "discount_usage_rate": float(discount_usage_rate), | |
| "total_rides": int(total_rides) | |
| } | |
| X = pd.DataFrame([input_data]) | |
| X = X.reindex(columns=artifact["features"], fill_value=0) | |
| ride = artifact["ride_encoder"].inverse_transform( | |
| artifact["ride_model"].predict(X) | |
| )[0] | |
| discount_prob = artifact["discount_model"].predict_proba(X)[0][1] | |
| route = artifact["route_encoder"].inverse_transform( | |
| artifact["route_model"].predict(X) | |
| )[0] | |
| return { | |
| "Recommended Ride Type": ride, | |
| "Discount Probability": round(float(discount_prob), 2), | |
| "Preferred Route": route | |
| } | |
| # Gradio UI | |
| app = gr.Interface( | |
| fn=predict_pue, | |
| inputs=[ | |
| gr.Number(label="Zone ID"), | |
| gr.Slider(0,23,step=1,label="Hour"), | |
| gr.Slider(0,6,step=1,label="Day of Week"), | |
| gr.Radio([0,1],label="Weekend"), | |
| gr.Slider(1,1.5,label="Weather Factor"), | |
| gr.Slider(1,1.6,label="Event Factor"), | |
| gr.Slider(0.5,2,label="Traffic Index"), | |
| gr.Number(label="Distance (km)"), | |
| gr.Number(label="Duration (min)"), | |
| gr.Number(label="Base Fare"), | |
| gr.Number(label="Avg Distance"), | |
| gr.Number(label="Avg Duration"), | |
| gr.Number(label="Avg Fare"), | |
| gr.Slider(0,1,label="Discount Usage Rate"), | |
| gr.Number(label="Total Rides") | |
| ], | |
| outputs="json", | |
| title="Personalized User Experience – Real-Time ML", | |
| description="Real-time personalization for ride-hailing apps" | |
| ) | |
| app.launch() |