Accurate impact estimations could make or break what you are promoting case.
Yet, despite its importance, most teams use oversimplified calculations that may result in inflated projections. These shot-in-the-dark numbers not only destroy credibility with stakeholders but can even lead to misallocation of resources and failed initiatives. But there’s a greater technique to forecast effects of gradual customer acquisition, without requiring messy Excel spreadsheets and formulas that error out.
By the tip of this text, you’ll have the option to calculate accurate yearly forecasts and implement a scalable Python solution for Triangle Forecasting.
The Hidden Cost of Inaccurate Forecasts
When asked for annual impact estimations, product teams routinely overestimate impact by applying a one-size-fits-all approach to customer cohorts. Teams often go for a simplistic approach:
While the calculation is simple, this formula ignores a fundamental premise that applies to most businesses:
Customer acquisition happens step by step all year long.
The contribution from all customers to yearly estimates will not be equal since later cohorts contribute fewer months of revenue.
Triangle Forecasting can cut projection errors by accounting for effects of customer acquisition timelines.
Allow us to explore this idea with a basic example. Let’s say you’re launching a brand new subscription service:
- Monthly subscription fee: $100 per customer
- Monthly customer acquisition goal: 100 recent customers
- Goal: Calculate total revenue for the 12 months
An oversimplified multiplication suggests a revenue of $1,440,000 in the primary 12 months (= 100 recent customers/month * 12 months * $100 spent / month * 12 months).
The actual number is just $780,000!
This 46% overestimation is why impact estimations often don’t pass stakeholders’ sniff test.
Accurate forecasting will not be nearly mathematics —
It’s a tool that helps you construct trust and gets your initiatives approved faster without the danger of over-promising and under-delivering.
Furthermore, data professionals spend hours constructing manual forecasts in Excel, that are volatile, can lead to formula errors, and are difficult to iterate upon.
Having a standardized, explainable methodology may help simplify this process.
Introducing Triangle Forecasting
Triangle Forecasting is a scientific, mathematical approach to estimate the yearly impact when customers are acquired step by step. It accounts for the undeniable fact that incoming customers will contribute otherwise to the annual impact, depending on once they onboard on to your product.
This method is especially handy for:
- Recent Product Launches: When customer acquisition happens over time
- Subscription Revenue Forecasts: For accurate revenue projections for subscription-based products
- Phased Rollouts: For estimating the cumulative impact of gradual rollouts
- Acquisition Planning: For setting realistic monthly acquisition targets to hit annual goals
The “triangle” in Triangle Forecasting refers to the best way individual cohort contributions are visualized. A cohort refers back to the month through which the shoppers were acquired. Each bar within the triangle represents a cohort’s contribution to the annual impact. Earlier cohorts have longer bars because they contributed for an prolonged period.
To calculate the impact of a brand new initiative, model or feature in the primary 12 months :
- For every month (m) of the 12 months:
- Calculate number of shoppers acquired (Am)
- Calculate average monthly spend/impact per customer (S)
- Calculate remaining months in 12 months (Rm = 13-m)
- Monthly cohort impact = Am × S × Rm
2. Total yearly impact = Sum of all monthly cohort impacts

Constructing Your First Triangle Forecast
Let’s calculate the actual revenue for our subscription service:
- January: 100 customers × $100 × 12 months = $120,000
- February: 100 customers × $100 × 11 months = $110,000
- March: 100 customers × $100 × 10 months = $100,000
- And so forth…
Calculating in Excel, we get:

The whole annual revenue equals $780,000— 46% lower than the oversimplified estimate!
💡 Pro Tip: Save the spreadsheet calculations as a template to reuse for various scenarios.
Need to construct estimates without perfect data? Read my guide on “Constructing Defendable Impact Estimates When Data is Imperfect”.
Putting Theory into Practice: An Implementation Guide
While we will implement Triangle Forecasting in Excel using the above method, these spreadsheets change into unimaginable to keep up or modify quickly. Product owners also struggle to update forecasts quickly when assumptions or timelines change.
Here’s how we will perform construct the identical forecast in Python in minutes:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def triangle_forecast(monthly_acquisition_rate, monthly_spend_per_customer):
"""
Calculate yearly impact using triangle forecasting method.
"""
# Create a DataFrame for calculations
months = range(1, 13)
df = pd.DataFrame(index=months,
columns=['month', 'new_customers',
'months_contributing', 'total_impact'])
# Convert to list if single number, else use provided list
acquisitions = [monthly_acquisitions] * 12 if type(monthly_acquisitions) in [int, float] else monthly_acquisitions
# Calculate impact for every cohort
for month in months:
df.loc[month, 'month'] = f'Month {month}'
df.loc[month, 'new_customers'] = acquisitions[month-1]
df.loc[month, 'months_contributing'] = 13 - month
df.loc[month, 'total_impact'] = (
acquisitions[month-1] *
monthly_spend_per_customer *
(13 - month)
)
total_yearly_impact = df['total_impact'].sum()
return df, total_yearly_impact
Continuing with our previous example of subscription service, the revenue from each monthly cohort will be visualized as follows:
# Example
monthly_acquisitions = 100 # 100 recent customers every month
monthly_spend = 100 # $100 per customer monthly
# Calculate forecast
df, total_impact = triangle_forecast(monthly_acquisitions, monthly_spend)
# Print results
print("Monthly Breakdown:")
print(df)
print(f"nTotal Yearly Impact: ${total_impact:,.2f}")

We can even leverage Python to visualise the cohort contributions as a bar chart. Note how the impact decreases linearly as we move through the months.

Using this Python code, you’ll be able to now generate and iterate on annual impact estimations quickly and efficiently, without having to manually perform version control on crashing spreadsheets.
Beyond Basic Forecasts
While the above example is easy, assuming monthly acquisitions and spending are constant across all months, that needn’t necessarily be true. Triangle forecasting will be easily adapted and scaled to account for :
For various monthly spend based on spend tiers, create a definite triangle forecast for every cohort after which aggregate individual cohort’s impacts to calculate the entire annual impact.
- Various acquisition rates
Typically, businesses don’t acquire customers at a continuing rate all year long. Acquisition might start at a slow pace and ramp up as marketing kicks in, or we may need a burst of early adopters followed by slower growth. To handle various rates, pass an inventory of monthly targets as an alternative of a single rate:
# Example: Gradual ramp-up in acquisitions
varying_acquisitions = [50, 75, 100, 150, 200, 250,
300, 300, 300, 250, 200, 150]
df, total_impact = triangle_forecast(varying_acquisitions, monthly_spend)

To account for seasonality, multiply every month’s impact by its corresponding seasonal factor (e.g., 1.2 for high-season months like December, 0.8 for low-season months like February, etc.) before calculating the entire impact.
Here is how you’ll be able to modify the Python code to account for differences due to the season:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def triangle_forecast(monthly_acquisitions, monthly_spend_per_customer, seasonal_factors = None):
"""
Calculate yearly impact using triangle forecasting method.
"""
# Create a DataFrame for calculations
months = range(1, 13)
df = pd.DataFrame(index=months,
columns=['month', 'new_customers',
'months_contributing', 'total_impact'])
# Convert to list if single number, else use provided list
acquisitions = [monthly_acquisitions] * 12 if type(monthly_acquisitions) in [int, float] else monthly_acquisitions
if seasonal_factors is None:
seasonality = [1] * 12
else:
seasonality = [seasonal_factors] * 12 if type(seasonal_factors) in [int, float] else seasonal_factors
# Calculate impact for every cohort
for month in months:
df.loc[month, 'month'] = f'Month {month}'
df.loc[month, 'new_customers'] = acquisitions[month-1]
df.loc[month, 'months_contributing'] = 13 - month
df.loc[month, 'total_impact'] = (
acquisitions[month-1] *
monthly_spend_per_customer *
(13 - month)*
seasonality[month-1]
)
total_yearly_impact = df['total_impact'].sum()
return df, total_yearly_impact
# Seasonality-adjusted example
monthly_acquisitions = 100 # 100 recent customers every month
monthly_spend = 100 # $100 per customer monthly
seasonal_factors = [1.2, # January (New Year)
0.8, # February (Post-holiday)
0.9, # March
1.0, # April
1.1, # May
1.2, # June (Summer)
1.2, # July (Summer)
1.0, # August
0.9, # September
1.1, # October (Halloween)
1.2, # November (Pre-holiday)
1.5 # December (Holiday)
]
# Calculate forecast
df, total_impact = triangle_forecast(monthly_acquisitions,
monthly_spend,
seasonal_factors)

These customizations can allow you to model different growth scenarios including:
- Gradual ramp-ups in early stages of launch
- Step-function growth based on promotional campaigns
- Seasonal differences in customer acquisition
The Bottom Line
Having dependable and intuitive forecasts could make or break the case on your initiatives.
But that’s not all — triangle forecasting also finds applications beyond revenue forecasting, including calculating:
- Customer Activations
- Portfolio Loss Rates
- Credit Card Spend
Able to dive in? Download the Python template shared above and construct your first Triangle forecast in quarter-hour!
- Input your monthly acquisition targets
- Set your expected monthly customer impact
- Visualize your annual trajectory with automated visualizations
Acknowledgement:
Thanks to my wonderful mentor, Kathryne Maurer, for developing the core concept and first iteration of the Triangle Forecasting method and allowing me to construct on it through equations and code.
I’m at all times open to feedback and suggestions on find out how to make these guides more beneficial for you. Glad reading!