spam-detection-app / evaluate_ml_large.py
premmm's picture
Upload folder using huggingface_hub
9930208 verified
Raw
History Blame Contribute Delete
2.99 kB
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()