anasmkh's picture
Create app.py
910ee10 verified
raw
history blame
3.25 kB
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()