Precise impact estimates can make or break your business case.
However, despite their importance, most equipment use calculations with excess simplification that can lead to inflated projections. These shooting numbers in the dark not only destroy credibility with interested parties, but can also result in the bad allocation of failed resources and initiatives. But there is a better way to forecast the effects of the gradual acquisition of customers, without requiring spreadsheets and disorderly excel formulas that are wrong.
At the end of this article, you may calculate precise annual forecasts and implement a scalable Python solution for the triangle prognosis.
The hidden cost of inaccurate forecasts
When asked that annual impact estimates, products of products routinely overestimate the impact by applying a unique approach to customer cohorts. Teams often opt for a simplistic approach:
Multiply monthly income (or any other relevant metric) by twelve to estimate the annual impact.
While the calculation is easy, this formula ignores a fundamental premise that applies to most companies:
The acquisition of customers occurs gradually throughout the year.
The contribution of all customers to annual estimates is not the same, since later cohorts contribute less months of income.
The triangle prognosis can reduce projection errors by accounting for the effects of customer acquisition deadlines.
Let's explore this concept with a basic example. Let's say you are launching a new subscription service:
- Monthly subscription rate: $ 100 per customer
- Monthly client acquisition objective: 100 new customers
- Objective: Calculate the total income for the year
A simplified multiplication suggests an income of $ 1,440,000 in the first year (= 100 new customers / month * 12 months * $ 100 spent / month * 12 months).
The real number is only $ 780,000!
This 46% overestimation is the reason why impact estimates often do not pass the Sniff test of the interested parties.
The precise prognosis is not just about mathematics –
It is a tool that helps you generate trust and obtains your approved initiatives faster without the risk of promising and under delivery.
In addition, data professionals spend hours building manual forecasts in Excel, which are volatile, can lead to formula errors and are difficult to iterate.
Having a standardized and explainable methodology can help simplify this process.
Presentation of triangle forecasts
The triangle prognosis is a systematic and mathematical approach to estimate the annual impact when customers are acquired gradually. It represents the fact that incoming customers will contribute differently to the annual impact, depending on when they are aboard their product.
This method is particularly useful for:
- New product releases: When customer acquisition occurs over time
- Subscription income forecasts: For precise income projections for subscription products
- Lladros plajos: To estimate the cumulative impact of gradual deployments
- Acquisition planning: To establish realistic monthly acquisition objectives to achieve annual goals
The “triangle” in the triangle prognosis refers to the way in which individual cohort contributions are displayed. A cohort refers to the month in which customers were acquired. Each bar in the triangle represents the contribution of a cohort to the annual impact. The previous cohorts have longer bars because they contributed for a prolonged period.
To calculate the impact of a new initiative, model or function in the first year:
- For each month (m) of the year:
- Calculate the number of clients acquired (AM)
- Calculate the average monthly spending/impact per customer (s)
- Calculate the remaining months in year (RM = 13 m)
- Monthly cohort impact = am × s × rm
2. Total annual impact = sum of all cohort monthly impacts

Building your first triangle forecast
Let's calculate real income 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
- Etc…
Calculating in Excel, we get:

The total annual income is equal to $ 780,000– 46% lower than simplification estimate too much!
PRO COUNCIL: save the calculation sheet calculations as a template to reuse for different scenarios.
Do you need to build estimates without perfect data? Read my guide on “creation of defense impact estimates when the data is imperfect.”
Put the theory into practice: an implementation guide
While we can implement the triangles prognosis in Excel using the previous method, these spreadsheets become impossible to maintain or modify. Product owners also struggle to update the forecasts quickly when assumptions or deadlines change.
This is how we can build the same prognosis 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 each 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 the subscription service, the income of each monthly cohort can be displayed as follows:
# Example
monthly_acquisitions = 100 # 100 new customers each month
monthly_spend = 100 # $100 per customer per month
# 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 also take advantage of Python to visualize cohort contributions as a bar chart. Note how the impact decreases linearly as we advance during the months.

Using this python code, it can now generate and iterate in annual impact estimates quickly and efficiently, without manually carrying out the control of versions in the blocking calculation sheets.
Beyond basic forecasts
While the previous example is simple, assuming that monthly acquisitions and expenses are constant during all months, that is not necessarily true. The triangle forecast can be easily adapted and climbing to take into account:
For a variable monthly expense based on expenses, create a different triangle prognosis for each cohort and then add the impacts of the individual cohort to calculate the total annual impact.
- Variable acquisition rates
In general, companies do not acquire customers at a constant pace throughout the year. The acquisition can begin at a slow pace and increase as marketing is activated, or we could have an explosion of the first users followed by a slower growth. To handle variable rates, pass a list of monthly objectives instead 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 take into account seasonality, multiply the impact of each month by its corresponding seasonal factor (for example, 1.2 for high season such as December, 0.8 for low season such as February, etc.) before calculating the total impact.
This is how the Python code can modify to take into account seasonal variations:
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 each 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 new customers each month
monthly_spend = 100 # $100 per customer per month
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 help you model different growth scenarios that include:
- Gradual rambadas in the early launch stages
- Growth of the passage function based on promotional campaigns
- Seasonal variations in customer acquisition
The final result
Having reliable and intuitive forecasts can make or break the case for your initiatives.
But that's not all: the triangle forecast also finds applications beyond the prognosis of income, including calculation:
- Customer activations
- Portfolio loss rates
- Credit card spending
Ready to dive? Download the shared Python template and build your first triangle forecast in 15 minutes!
- Enter your monthly acquisition goals
- Establish the monthly monthly impact of the client
- Visualize your annual trajectory with automated visualizations
Real world estimates often need to deal with imperfect or incomplete data. See my article “Creation of defense impact estimates when the data is imperfect” so that a framework creates defensible estimates in such scenarios.
Recognition:
Thanks to my wonderful mentor, Kathryne Maurerto develop the central concept and the first iteration of the triangle prognosis method and allow me to build on it through equations and code.
I am always open to comments and suggestions on how to make these guides more valuable to you. Happy reading!