tchans123 commited on
Commit
11cb6c3
·
verified ·
1 Parent(s): 5efe39a

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +101 -0
app.py ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template, request, jsonify
2
+ import gradio as gr
3
+ import pandas as pd
4
+ from sklearn.model_selection import train_test_split
5
+ from sklearn.linear_model import LogisticRegression
6
+ import warnings
7
+
8
+ # Ignore all warnings
9
+ warnings.filterwarnings("ignore")
10
+
11
+ # Initialize Flask app
12
+ app = Flask(__name__)
13
+
14
+ # Load Data
15
+ df_lending_data = pd.read_csv('Resources/lending_data.csv')
16
+
17
+ # Prepare Features and Labels
18
+ y = df_lending_data['loan_status']
19
+ X = df_lending_data.drop(columns=['loan_status'])
20
+
21
+ # Split Data
22
+ X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
23
+
24
+ # Train Logistic Regression Model
25
+ model = LogisticRegression(max_iter=200, random_state=1)
26
+ model.fit(X_train, y_train)
27
+
28
+ # Gradio Function for Prediction
29
+ def predict_loan_status(loan_size, interest_rate, borrower_income, debt_to_income, num_of_accounts, derogatory_marks, total_debt):
30
+ input_data = pd.DataFrame({
31
+ 'loan_size': [loan_size],
32
+ 'interest_rate': [interest_rate],
33
+ 'borrower_income': [borrower_income],
34
+ 'debt_to_income': [debt_to_income],
35
+ 'num_of_accounts': [num_of_accounts],
36
+ 'derogatory_marks': [derogatory_marks],
37
+ 'total_debt': [total_debt]
38
+ })
39
+ prediction = model.predict(input_data)
40
+ return "Healthy Loan (0)" if prediction[0] == 0 else "High-Risk Loan (1)"
41
+
42
+ # Flask route for home page
43
+ @app.route('/')
44
+ def home():
45
+ return render_template('index.html')
46
+
47
+ # Flask route for prediction
48
+ @app.route('/predict', methods=['POST'])
49
+ def predict():
50
+ # Get form data
51
+ loan_size = float(request.form['loan_size'])
52
+ interest_rate = float(request.form['interest_rate'])
53
+ borrower_income = float(request.form['borrower_income'])
54
+ debt_to_income = float(request.form['debt_to_income'])
55
+ num_of_accounts = int(request.form['num_of_accounts'])
56
+ derogatory_marks = int(request.form['derogatory_marks'])
57
+ total_debt = float(request.form['total_debt'])
58
+
59
+ # Prepare input data
60
+ input_data = pd.DataFrame({
61
+ 'loan_size': [loan_size],
62
+ 'interest_rate': [interest_rate],
63
+ 'borrower_income': [borrower_income],
64
+ 'debt_to_income': [debt_to_income],
65
+ 'num_of_accounts': [num_of_accounts],
66
+ 'derogatory_marks': [derogatory_marks],
67
+ 'total_debt': [total_debt]
68
+ })
69
+
70
+ # Make prediction
71
+ prediction = model.predict(input_data)
72
+ result = "Healthy Loan (0)" if prediction[0] == 0 else "High-Risk Loan (1)"
73
+
74
+ return render_template('index.html', prediction_text=f'Prediction: {result}')
75
+
76
+ # Flask route to serve Gradio interface
77
+ @app.route('/gradio')
78
+ def gradio_interface():
79
+ # Create the Gradio interface
80
+ interface = gr.Interface(
81
+ fn=predict_loan_status,
82
+ inputs=[
83
+ gr.Number(label="Loan Size"),
84
+ gr.Number(label="Interest Rate"),
85
+ gr.Number(label="Borrower Income"),
86
+ gr.Number(label="Debt-to-Income Ratio"),
87
+ gr.Number(label="Number of Accounts"),
88
+ gr.Number(label="Derogatory Marks"),
89
+ gr.Number(label="Total Debt"),
90
+ ],
91
+ outputs="text",
92
+ title="Loan Status Prediction",
93
+ description="Input loan details to predict whether the loan is healthy or high-risk."
94
+ )
95
+
96
+ # Launch Gradio interface on a different port
97
+ return interface.launch(share=True, inline=True)
98
+
99
+ # Run Flask app
100
+ if __name__ == "__main__":
101
+ app.run(debug=True)