import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score, classification_report, confusion_matrix from sklearn.preprocessing import StandardScaler # Load the dataset df = pd.read_csv('bank_loans.csv') # Display the first few rows to understand the structure (optional) print(df.head()) print(df.info()) # Check for missing values (optional) print("Missing values:\n", df.isnull().sum()) # Handle missing values if any (optional, assuming numerical columns filled with mean) df.fillna(df.mean(), inplace=True) # Encode categorical variables (assuming 'Gender', 'Married', etc. as example categorical features) df = pd.get_dummies(df, drop_first=True) # Separate features and target variable X = df.drop(columns=['Loan_Status']) # Assuming 'Loan_Status' is the target column (1 = Approved, 0 = Not Approved) y = df['Loan_Status'] # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # Standardize the features scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # Initialize and train the Random Forest Classifier rf_model = RandomForestClassifier(n_estimators=100, random_state=42) rf_model.fit(X_train_scaled, y_train) # Predict on the test set y_pred = rf_model.predict(X_test_scaled) # Calculate accuracy and other performance metrics accuracy = accuracy_score(y_test, y_pred) print("Random Forest Model Accuracy:", accuracy) print("\nClassification Report:\n", classification_report(y_test, y_pred)) # Plot confusion matrix for better insight into model performance conf_matrix = confusion_matrix(y_test, y_pred) plt.figure(figsize=(6, 4)) sns.heatmap(conf_matrix, annot=True, fmt="d", cmap="Blues", xticklabels=['Not Approved', 'Approved'], yticklabels=['Not Approved', 'Approved']) plt.xlabel("Predicted") plt.ylabel("Actual") plt.title("Confusion Matrix") plt.show() # Feature importance visualization feature_importances = rf_model.feature_importances_ features = X.columns # Create a dataframe for feature importances feature_df = pd.DataFrame({'Feature': features, 'Importance': feature_importances}) feature_df = feature_df.sort_values(by='Importance', ascending=False) # Plot feature importances plt.figure(figsize=(10, 6)) sns.barplot(x='Importance', y='Feature', data=feature_df, palette="viridis") plt.title("Feature Importances in Random Forest Model") plt.xlabel("Importance") plt.ylabel("Feature") plt.show()