# Lesson 4: classification - which customers will leave?
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, precision_score, recall_score

df = pd.read_csv("customers.csv")
print("Churn rate:", f"{df['churned'].mean():.1%}")
X = pd.get_dummies(df.drop(columns=["customer_id", "churned"]), columns=["contract"], drop_first=True, dtype=int)
y = df["churned"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=7, stratify=y)

model = LogisticRegression(max_iter=1000).fit(X_train, y_train)
pred = model.predict(X_test)
print(f"Accuracy:  {accuracy_score(y_test, pred):.1%}")
print(f"Precision: {precision_score(y_test, pred):.1%}  (of those we flagged, how many really left)")
print(f"Recall:    {recall_score(y_test, pred):.1%}  (of those who left, how many we caught)")
print("\nConfusion matrix (rows = actual stay/leave, columns = predicted stay/leave):")
print(confusion_matrix(y_test, pred))

# probabilities let you pick your own cut-off
prob = model.predict_proba(X_test)[:, 1]
flag = prob >= 0.35
print(f"\nWith a 35% cut-off: flagged {flag.sum()}, recall {recall_score(y_test, flag):.1%}, precision {precision_score(y_test, flag):.1%}")
