import pandas as pd from sklearn.svm import SVC from sklearn.preprocessing import LabelEncoder from sklearn.model_selection import train_test_split import joblib import gradio as gr # Load data function def load_data(): data = pd.read_excel('cleaned1.xlsx') label = LabelEncoder() for col in data.columns: data[col] = label.fit_transform(data[col]) return data # Split data into features and target def split(df): y = df.Current_Stage x = df.drop(columns=['Current_Stage']) x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0) return x_train, x_test, y_train, y_test # Train the model def train_model(): df = load_data() x_train, x_test, y_train, y_test = split(df) model = SVC(C=0.1, kernel='linear', gamma='scale') model.fit(x_train, y_train) accuracy = model.score(x_test, y_test) print(f'Model accuracy: {accuracy * 100}%') # Save the model using joblib joblib.dump(model, 'svm_model.pkl') print('Model saved as svm_model.pkl') # Load the saved model def load_model(): return joblib.load('svm_model.pkl') # Function to preprocess the input and predict def preprocess_inputs(inputs): # Ensure that all columns required during training are present feature_columns = [ 'Credit Expiration', 'DPD', 'FS', 'CDR', 'SICR', 'Follow Up', 'Rescheduled ', 'Restructuring', 'Covenant', 'Turnover', 'Group Reason', ' Stage As last Month' ] # Convert "Yes" -> 1 and "No" -> 0 for encoding the radio inputs encoded_inputs = [1 if i == 'Yes' else 0 if i == 'No' else i for i in inputs[:11]] # Convert "Stage As last Month" to an integer (choices 1, 2, or 3) stage_as_last_month = int(inputs[11]) # Append the selected "Stage As last Month" to the list of inputs encoded_inputs.append(stage_as_last_month) # Ensure the inputs match the feature columns order return pd.DataFrame([encoded_inputs], columns=feature_columns) # Prediction function for Gradio interface def predict(*inputs): model = load_model() # Preprocess the inputs to match the training format input_data = preprocess_inputs(inputs) # Make prediction y_pred = model.predict(input_data) return f"The predicted class is: {y_pred[0]}" # Train the model and save it (only run once) train_model() # Build the Gradio interface with radio buttons and textboxes gr.Interface( fn=predict, inputs=[ gr.Textbox(label="Credit Expiration"), gr.Textbox(label="DPD"), gr.Radio(choices=["Yes", "No"], label="FS"), gr.Radio(choices=["Yes", "No"], label="CDR"), gr.Radio(choices=["Yes", "No"], label="SICR"), gr.Radio(choices=["Yes", "No"], label="Follow Up"), gr.Radio(choices=["Yes", "No"], label="Rescheduled"), gr.Radio(choices=["Yes", "No"], label="Restructuring"), gr.Radio(choices=["Yes", "No"], label="Covenant"), gr.Radio(choices=["Yes", "No"], label="Turnover"), gr.Radio(choices=["Yes", "No"], label="Group Reason"), gr.Radio(choices=["1", "2", "3"], label="Stage As last Month") # Updated with choices 1, 2, 3 ], outputs="text" ).launch()