import pandas as pd import joblib import time import re from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) ML_MODEL_PATH = "/home/office-7/support-intelligence-backend/core/services/models/spam_detection_model.pkl" DATASET_PATH = "/home/office-7/Downloads/spam_dedection_dataset - synthetic_spam_50k.csv" def preprocess_ml(text): text = str(text).lower() text = re.sub(r'[^\w\s]', '', text) text = re.sub(r'\d+', '', text) return text.strip() def evaluate_large(): logger.info("Loading ML model...") try: model = joblib.load(ML_MODEL_PATH) except Exception as e: logger.error(f"Failed to load model: {e}") return logger.info("Loading 50k dataset...") try: df = pd.read_csv(DATASET_PATH) except Exception as e: logger.error(f"Failed to load dataset: {e}") return results = [] # Overall Evaluation logger.info("Evaluating Overall Performance...") start_time = time.time() clean_texts = [preprocess_ml(t) for t in df['text']] predictions = model.predict(clean_texts) end_time = time.time() overall_acc = accuracy_score(df['label'], predictions) overall_prec = precision_score(df['label'], predictions) overall_rec = recall_score(df['label'], predictions) overall_f1 = f1_score(df['label'], predictions) avg_speed = (end_time - start_time) / len(df) results.append({ "Language": "OVERALL", "Samples": len(df), "Accuracy": overall_acc, "Precision": overall_prec, "Recall": overall_rec, "F1": overall_f1, "Avg Speed (s)": avg_speed }) # Language-wise Evaluation for lang in df['language'].unique(): logger.info(f"Evaluating Language: {lang}...") lang_df = df[df['language'] == lang] lang_texts = [preprocess_ml(t) for t in lang_df['text']] lang_preds = model.predict(lang_texts) acc = accuracy_score(lang_df['label'], lang_preds) prec = precision_score(lang_df['label'], lang_preds, zero_division=0) rec = recall_score(lang_df['label'], lang_preds, zero_division=0) f1 = f1_score(lang_df['label'], lang_preds, zero_division=0) results.append({ "Language": lang, "Samples": len(lang_df), "Accuracy": acc, "Precision": prec, "Recall": rec, "F1": f1, "Avg Speed (s)": avg_speed # Speed is mostly uniform for ML model }) results_df = pd.DataFrame(results) results_df.to_csv("ml_model_large_eval.csv", index=False) print("\n--- ML Model Performance Summary (50k Dataset) ---") print(results_df.to_string(index=False)) print("\nResults saved to ml_model_large_eval.csv") if __name__ == "__main__": evaluate_large()