Product metrics

There are a lot of critical metrics for monitoring the health of a Software-as-a-Service (SaaS) startup. Let’s take Churn Rate and LTV:CAC Ratio as example and calculate them.

Loading, cleaning, and joining the data

This includes information on which marketing campaigns our users were acquired through.

Additionally, for each campaign, let’s make sure we know the acquisition cost per user.








Churn Rate

Churn Rate is the percentage of customers who cancel their subscription in a given period. You want to keep this number as low as possible, to ensure a healthy growth. They say a churn rate between 3-8% is good.


Looks like customers are sticking around, which suggests they must like the product

LTV:CAC Ratio ⚖️️️

Lifetime Value (LTV) shows the expected profit from a customer over their lifetime.




Now let’s find out our LTV:CAC Ratio. A good one is around ~3.


Nice. Our metrics are looking too promising!


Product metrics

There are a lot of critical metrics for monitoring the health of a Software-as-a-Service (SaaS) startup. Let’s take Churn Rate and LTV:CAC Ratio as example and calculate them.

Loading, cleaning, and joining the data

This includes information on which marketing campaigns our users were acquired through.

Additionally, for each campaign, let’s make sure we know the acquisition cost per user.








Churn Rate

Churn Rate is the percentage of customers who cancel their subscription in a given period. You want to keep this number as low as possible, to ensure a healthy growth. They say a churn rate between 3-8% is good.

# Churn Rate (over a period of one month)

from dateutil.relativedelta import relativedelta
from datetime import datetime

df0["LastActivity"] = df0["LastActivity"].map(lambda x: datetime.strptime(x, '%Y-%m-%d').date())
df0["SignupDate"] = df0["SignupDate"].map(lambda x: datetime.strptime(x, '%Y-%m-%d').date())

end_date = df0["SignupDate"].max() - relativedelta(years=1)
start_date = end_date - relativedelta(months=1)

is_existing_user = df0["SignupDate"] <= start_date

active_at_start = is_existing_user & (df0["LastActivity"] >= start_date)
inactive_at_end = is_existing_user & (df0["LastActivity"] <= end_date)

churn_rate = (active_at_start & inactive_at_end).sum() / active_at_start.sum()
pd.DataFrame({ 'Churn Rate' : [churn_rate] })

Looks like customers are sticking around, which suggests they must like the product

LTV:CAC Ratio ⚖️️️

Lifetime Value (LTV) shows the expected profit from a customer over their lifetime.

# Lifetime Value (LTV) = Average Revenue × Average Customer Lifespan

from dateutil.relativedelta import relativedelta
from datetime import datetime
import numpy as np

df0["LastActivity"] = df0["LastActivity"].map(lambda x: datetime.strptime(x, '%Y-%m-%d').date())
df0["SignupDate"] = df0["SignupDate"].map(lambda x: datetime.strptime(x, '%Y-%m-%d').date())

monthly_revenue = df0["Fee"].astype(int)

lifespan_months = (df0["LastActivity"] - df0["SignupDate"]) / np.timedelta64(1, 'M')

LTV = monthly_revenue * lifespan_months

pd.DataFrame({ 'ID' : df0["ID"], 'LTV' : LTV })



Now let’s find out our LTV:CAC Ratio. A good one is around ~3.

# LTV:CAC Ratio

LTV_CAC = (df0["LTV"] / df0["AcquisitionCostPerUser"]).mean()

pd.DataFrame({ 'LTV:CAC' : [LTV_CAC] })

Nice. Our metrics are looking too promising!


Product metrics

There are a lot of critical metrics for monitoring the health of a Software-as-a-Service (SaaS) startup. Let’s take Churn Rate and LTV:CAC Ratio as example and calculate them.

Loading, cleaning, and joining the data

This includes information on which marketing campaigns our users were acquired through.

Additionally, for each campaign, let’s make sure we know the acquisition cost per user.

CSV

CSV

Find and replace

£
with

Column settings

Join

on columnandon column

CSV

Join

on columnandon column
Loading…

Churn Rate

Churn Rate is the percentage of customers who cancel their subscription in a given period. You want to keep this number as low as possible, to ensure a healthy growth. They say a churn rate between 3-8% is good.

Code

Loading…

Looks like customers are sticking around, which suggests they must like the product

LTV:CAC Ratio ⚖️️️

Lifetime Value (LTV) shows the expected profit from a customer over their lifetime.

Code

Column settings

Join

on columnandon column

Now let’s find out our LTV:CAC Ratio. A good one is around ~3.

Code

Loading…

Nice. Our metrics are looking too promising!