|
|
"""i
|
|
|
mport streamlit as st
|
|
|
import pandas as pd
|
|
|
import numpy as np
|
|
|
from sklearn.ensemble import RandomForestClassifier
|
|
|
from sklearn.model_selection import train_test_split
|
|
|
from joblib import dump, load
|
|
|
|
|
|
|
|
|
|
|
|
# Load and process data
|
|
|
data = pd.read_csv("C:/Users/lenovo/Downloads/Create_score_model/clean_train.csv")
|
|
|
X = data.drop('Credit_Score', axis=1)
|
|
|
y = data['Credit_Score']
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
|
|
|
|
|
X_train.head()
|
|
|
|
|
|
# Train the model
|
|
|
rf = RandomForestClassifier(random_state=42)
|
|
|
rf.fit(X_train, y_train)
|
|
|
|
|
|
# Save the model
|
|
|
#dump(rf, 'credit_classifier.joblib', compress=('gzip', 9))
|
|
|
|
|
|
# Streamlit App
|
|
|
# %%writefile scoring_app.py
|
|
|
loaded_model = load(rf)
|
|
|
|
|
|
# Streamlit interface
|
|
|
st.title("Credit Score Prediction App")
|
|
|
|
|
|
# Input fields
|
|
|
feature1 = st.number_input("Outstanding Debt")
|
|
|
feature2 = st.number_input("Credit Mix")
|
|
|
feature3 = st.number_input("Credit History Age (in months)")
|
|
|
feature4 = st.number_input("Monthly Balance")
|
|
|
feature5 = st.number_input("Payment Behaviour")
|
|
|
feature6 = st.number_input("Annual Income")
|
|
|
feature7 = st.number_input("Number of Delayed Payments")
|
|
|
|
|
|
# Define target names
|
|
|
target_names = {0: "Good", 1: "Poor", 2: "Standard"}
|
|
|
|
|
|
if st.button("Predict"):
|
|
|
prediction = loaded_model.predict([[feature1, feature2, feature3, feature4, feature5, feature6, feature7]])
|
|
|
st.write(f"Predicted Class: {target_names[prediction[0]]}")
|
|
|
|
|
|
"""
|
|
|
|
|
|
import streamlit as st
|
|
|
import pandas as pd
|
|
|
import numpy as np
|
|
|
from sklearn.ensemble import RandomForestClassifier
|
|
|
from sklearn.model_selection import train_test_split
|
|
|
from joblib import dump, load
|
|
|
@st.cache_resource
|
|
|
def load_and_train_model():
|
|
|
try:
|
|
|
|
|
|
data = pd.read_csv("clean_train.csv")
|
|
|
except FileNotFoundError:
|
|
|
st.error("Error: The file 'clean_train.csv' was not found. Please upload the file.")
|
|
|
st.stop()
|
|
|
|
|
|
|
|
|
X = data.drop('Credit_Score', axis=1)
|
|
|
y = data['Credit_Score']
|
|
|
|
|
|
|
|
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
|
|
|
|
|
|
|
|
rf = RandomForestClassifier(random_state=42)
|
|
|
rf.fit(X_train, y_train)
|
|
|
|
|
|
|
|
|
dump(rf, 'credit_classifier.joblib')
|
|
|
return rf
|
|
|
|
|
|
@st.cache_resource
|
|
|
def load_model():
|
|
|
import os
|
|
|
if os.path.exists('credit_classifier.joblib'):
|
|
|
try:
|
|
|
return load('credit_classifier.joblib')
|
|
|
except Exception as e:
|
|
|
st.warning(f"Error loading model: {e}. Retraining the model...")
|
|
|
return load_and_train_model()
|
|
|
else:
|
|
|
st.warning("Model file not found. Training a new model...")
|
|
|
return load_and_train_model()
|
|
|
|
|
|
|
|
|
|
|
|
loaded_model = load_model()
|
|
|
|
|
|
|
|
|
st.title("Credit Score Prediction App")
|
|
|
st.markdown("Predict the credit score category based on user inputs.")
|
|
|
|
|
|
|
|
|
st.sidebar.header("Enter Feature Values:")
|
|
|
feature1 = st.sidebar.number_input("Outstanding Debt", min_value=0.0, step=100.0)
|
|
|
feature2 = st.sidebar.selectbox("Credit Mix (0=Bad, 1=Good, 2=Excellent)", [0, 1, 2])
|
|
|
feature3 = st.sidebar.number_input("Credit History Age (in months)", min_value=0.0, step=1.0)
|
|
|
feature4 = st.sidebar.number_input("Monthly Balance", min_value=0.0, step=100.0)
|
|
|
feature5 = st.sidebar.number_input("Payment Behaviour", min_value=0.0, step=1.0)
|
|
|
feature6 = st.sidebar.number_input("Annual Income", min_value=0.0, step=1000.0)
|
|
|
feature7 = st.sidebar.number_input("Number of Delayed Payments", min_value=0, step=1)
|
|
|
|
|
|
|
|
|
target_names = {0: "Good", 1: "Poor", 2: "Standard"}
|
|
|
|
|
|
|
|
|
if st.button("Predict"):
|
|
|
try:
|
|
|
|
|
|
inputs = np.array([[feature1, feature2, feature3, feature4, feature5, feature6, feature7]])
|
|
|
|
|
|
|
|
|
prediction = loaded_model.predict(inputs)
|
|
|
|
|
|
|
|
|
st.success(f"Predicted Credit Score: {target_names[prediction[0]]}")
|
|
|
except Exception as e:
|
|
|
st.error(f"An error occurred during prediction: {e}")
|
|
|
|
|
|
|
|
|
|
|
|
|