import pandas as pd from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.naive_bayes import MultinomialNB from sklearn.pipeline import Pipeline from sklearn import metrics import joblib url = "https://raw.githubusercontent.com/justmarkham/pycon-2016-tutorial/master/data/sms.tsv" df = pd.read_csv(url, sep='\t', header=None, names=['label', 'message']) # Encode labels df['label_num'] = df.label.map({'ham': 0, 'spam': 1}) # Train/test split X_train, X_test, y_train, y_test = train_test_split(df['message'], df['label_num'], test_size=0.2, random_state=42) # Build pipeline model = Pipeline([ ('tfidf', TfidfVectorizer()), ('nb', MultinomialNB()) ]) # Train model.fit(X_train, y_train) # Evaluate preds = model.predict(X_test) print("Accuracy:", metrics.accuracy_score(y_test, preds)) # Save model joblib.dump(model, "spam_classifier_model.joblib")