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()