A subscription product sends every customer the same lifecycle emails, and the team knows it is wasting sends on people who were never going to churn while missing the ones who were. There are no labels here: nobody has ever defined what a segment is. Your job is to find the structure in the behavioural data, prove it is real rather than an artefact of your preprocessing, and hand back groups a marketing manager can write copy for.
Measure the spread of each numeric column and find the pair that carries the same information twice.
Implement audit_features(train_df) returning a dict with:
Use these seven numeric columns and ignore plan_tier: tenure_months, sessions_per_week, annual_spend, days_since_last_login, features_used, referral_count, support_tickets.
Look at std_ratio before you move on. Euclidean distance does not know that one of those columns is denominated in dollars.
Evaluated server-side against a hidden test set.