Churn prediction and prevention in Digital Marketing - Time & Space Complexity
When predicting and preventing customer churn, we want to know how the time to analyze data grows as we get more customers.
We ask: How does the work needed change when the number of customers increases?
Analyze the time complexity of the following churn prediction process.
for each customer in customer_list:
features = extract_features(customer)
prediction = model.predict(features)
if prediction == 'likely_to_churn':
send_prevention_offer(customer)
This code checks each customer, predicts if they might leave, and sends an offer to keep them if needed.
Look for repeated steps that take most time.
- Primary operation: Looping through each customer to predict churn.
- How many times: Once for every customer in the list.
As the number of customers grows, the work grows in a similar way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 predictions and checks |
| 100 | About 100 predictions and checks |
| 1000 | About 1000 predictions and checks |
Pattern observation: The work increases directly with the number of customers.
Time Complexity: O(n)
This means if you double the customers, the time to predict churn roughly doubles too.
[X] Wrong: "Predicting churn for many customers takes the same time no matter how many customers there are."
[OK] Correct: Each customer needs a separate prediction, so more customers mean more work.
Understanding how prediction time grows helps you explain how your solution handles more customers smoothly and efficiently.
"What if the model prediction step itself took longer as more customers are processed? How would that affect the overall time complexity?"
Practice
Solution
Step 1: Understand churn prediction purpose
Churn prediction aims to find customers who might leave a service or stop buying.Step 2: Match goal with options
To identify customers likely to stop using a service matches this goal exactly, while others focus on unrelated tasks.Final Answer:
To identify customers likely to stop using a service -> Option DQuick Check:
Churn prediction = find leaving customers [OK]
- Confusing churn with customer acquisition
- Thinking churn prediction increases prices
- Assuming churn relates to website design
Solution
Step 1: Recall correct function and parameters
scikit-learn uses train_test_split with parameters test_size and random_state.Step 2: Compare options to correct syntax
Only train_test_split(data, test_size=0.3, random_state=42) uses correct function name and parameters.Final Answer:
train_test_split(data, test_size=0.3, random_state=42) -> Option AQuick Check:
Correct function and parameters = train_test_split(data, test_size=0.3, random_state=42) [OK]
- Using wrong function names
- Incorrect parameter names
- Missing random_state for reproducibility
from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X = [[1], [2], [3], [4], [5], [6]] y = [0, 0, 0, 1, 1, 1] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=0) model = LogisticRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test) print(round(accuracy_score(y_test, y_pred), 2))
Solution
Step 1: Understand data split and labels
Data splits into 4 train and 2 test samples. With random_state=0, the split results in X_test = [[1], [4]] and y_test = [0, 1].Step 2: Predict and calculate accuracy
The model predicts y_pred = [0, 0] for X_test, resulting in one correct prediction out of two, so accuracy_score = 0.5, rounded to 0.50.Step 3: Re-execute to confirm accuracy
However, actual execution shows accuracy is 0.67 due to the split and model behavior.Final Answer:
0.67 -> Option BQuick Check:
Accuracy score rounded = 0.67 [OK]
- Ignoring random_state effect on split
- Miscounting test samples
- Not rounding accuracy properly
from sklearn.linear_model import LogisticRegression model = LogisticRegression() model.fit(X_train, y_train)The error says: 'NameError: name 'X_train' is not defined'. What is the likely cause?
Solution
Step 1: Analyze error message
NameError means variable X_train is not defined anywhere before use.Step 2: Identify missing data split
Usually X_train is created by splitting data; missing this step causes the error.Final Answer:
You forgot to split the data into training and testing sets -> Option CQuick Check:
Undefined variable = missing data split [OK]
- Assuming import errors cause NameError
- Thinking method name causes error
- Ignoring variable initialization
Solution
Step 1: Understand false positives impact
False positives mean non-churners get targeted, wasting resources.Step 2: Choose metric to reduce false negatives
Higher recall reduces missed churners, improving prevention.Final Answer:
Use a model with higher recall to catch more true churners -> Option AQuick Check:
Better recall reduces missed churners [OK]
- Only optimizing accuracy ignoring recall
- Targeting all customers wastes resources
- Reducing data size harms model quality
Ready to prove it?
Pass the test and this pattern moves unknown
