WickedFaith's picture
Upload 77 files
3efedb0 verified
raw
history blame contribute delete
2.89 kB
import joblib
import numpy as np
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score
class LoanApprovalModel:
def __init__(self, model_type='random_forest'):
self.model_type = model_type
self.model = self._get_model()
self.preprocessor = None
self.feature_names = None
def _get_model(self):
if self.model_type == 'random_forest':
return RandomForestClassifier(n_estimators=100, random_state=42)
elif self.model_type == 'gradient_boosting':
return GradientBoostingClassifier(random_state=42)
else:
raise ValueError(f"Unsupported model type: {self.model_type}")
def train(self, preprocessor, X_train, y_train, feature_names=None):
"""Train the model"""
self.preprocessor = preprocessor
self.feature_names = feature_names
# Transform the data
X_train_processed = preprocessor.fit_transform(X_train)
# Train the model
self.model.fit(X_train_processed, y_train)
def predict(self, X):
"""Make predictions"""
X_processed = self.preprocessor.transform(X)
return self.model.predict(X_processed)
def predict_proba(self, X):
"""Get prediction probabilities"""
X_processed = self.preprocessor.transform(X)
return self.model.predict_proba(X_processed)
def evaluate(self, X_test, y_test):
"""Evaluate model performance"""
y_pred = self.predict(X_test)
y_proba = self.predict_proba(X_test)[:, 1]
metrics = {
'accuracy': accuracy_score(y_test, y_pred),
'precision': precision_score(y_test, y_pred),
'recall': recall_score(y_test, y_pred),
'f1': f1_score(y_test, y_pred),
'roc_auc': roc_auc_score(y_test, y_proba)
}
return metrics
def save_model(self, filepath):
"""Save model to disk"""
model_data = {
'model': self.model,
'preprocessor': self.preprocessor,
'feature_names': self.feature_names,
'model_type': self.model_type
}
joblib.dump(model_data, filepath)
@classmethod
def load_model(cls, filepath):
"""Load model from disk"""
model_data = joblib.load(filepath)
model_instance = cls(model_type=model_data['model_type'])
model_instance.model = model_data['model']
model_instance.preprocessor = model_data['preprocessor']
model_instance.feature_names = model_data['feature_names']
return model_instance