Triangle Forecasting: Why Traditional Impact Estimates Are Inflated (And How to Fix Them) | Towards Data Science
February 8, 2025

Triangle Forecasting: Why Traditional Impact Estimates Are Inflated (And How to Fix Them) | Towards Data Science

Accurate exposure assessments can make or break your business justification.

Nevertheless, despite their significance, most teams use simplified calculations that can lead to high forecasts. These numbers of shots in the dark not only destroy trust in interested parties, but can also lead to improper distribution of resources and unsuccessful initiatives. But there is the best way to predict the impact of gradual attracting customers, without requiring dirty electric tables and formulas that are mistaken.

By the end of this article, you can calculate the exact annual forecasts and implement the scalable Python solution to predict the triangle.

Hidden cost of inaccurate forecasts

When he was asked about annual exposure assessments, products of products usually overestimate the influence, applying a universal approach to the entire client. Teams often choose a simplified approach:

Multiply the monthly income (or any other appropriate metric) by twelve to evaluate the annual effect.

Although the calculation is simple, this formula ignores the fundamental premise that belongs to most enterprises:

The acquisition of customers occurs gradually within a year.

The contribution of all customers to annual grades is not the same, since later cohorts contribute less than months of income.

Prediction of the triangle can reduce projection errors by taking into account the consequences of the terms of attracting customers.

Let’s look at this concept with the help of the main example. Suppose you launch a new subscription service:

  • Monthly subscription fee: 100 US dollars per client
  • The monthly goal of attracting customers: 100 new customers
  • Purpose: Calculate the total income for the year

Simplified multiplication involves revenue in the amount of $ 1,440,000 in the first year (= 100 new customers / month * 12 months * $ 100 / month * 12 months).

The actual number is only $ 780,000!

This is 46% revaluation – this is why the exposure assessments often do not pass the test for the sniffing of interested parties.

Accurate forecasting is not only mathematics –

This is a tool that helps you strengthen trust and approves your initiatives faster without the risk of excessive and underestimation.

Moreover, experts, according to the data, spend hours to create manual forecasts in Excel, which are changeable, can lead to formula errors and encounter iteration.

The presence of a standardized, explained methodology can help simplify this process.

Presentation of the prediction of the triangle

Prediction of a triangle is a systematic, mathematical approach to assessing annual impact, when customers are acquired gradually. This explains the fact that incoming customers will contribute to the annual effect, depending on when they are on board on your product.

This method is especially convenient for:

  • Launch of a new product: When attracting customers occurs over time
  • Forecasts of subscription income: For accurate forecasts for products based on subscription -based products
  • Phased deployment: To assess the aggregate effects of gradual deployment
  • Acquisition planning: To establish realistic monthly acquisition goals to achieve annual goals
The image generated by the author

The “triangle” in predicting the triangle refers to how individual cohorts are visualized. The cohort belongs to the month in which customers were purchased. Each bar in the triangle is a contribution of cohorts to an annual effect. The earlier cohorts have longer bars, because they contributed for a long period.

To calculate the influence of a new initiative, model or function in the first year:

  1. For each month (m) of the year:
  • Calculate the number of purchased customers (AM)
  • Calculate the average monthly costs/impact on each client
  • Calculate the remaining months of the year (RM = 13th)
  • Monthly effect of cohort = am × s × rm

2. General annual impact = the sum of all monthly cohort influences

The image generated by the author

Creating your first triangular forecast

Let’s calculate the actual income for our subscription service:

  • January: 100 customers × 100 × 12 months = 120,000 US dollars
  • February: 100 customers × 100 × 11 months = 110,000 US dollars
  • March: 100 clients × 100 × 10 months = 100,000 US dollars
  • And so on…

Calculation in Excel, we get:

The image generated by the author

The total annual income is equal 780,000 dollars– 46% lower than a simplified assessment!

💡 PRO TIP: Save the calculations of the spreadsheet as a template for re -use for various scenarios.

Need to build estimates without perfect data? Read my guide to “the construction of protected assessments of the impact, when the data is imperfect.”

Application of theory in practice: the implementation guide

Despite the fact that we can implement the forecasting of the triangle in Excel using the aforementioned method, these electric tables become impossible for quick maintenance or changes. Product owners are also struggling to quickly update forecasts when assumptions or deadlines are changing.

Here’s how we can fulfill the same forecast for Python in a matter of 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 our previous example of the subscription service, the income from each monthly cohort can be visualized 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}")
The image generated by the author

We can also use Python to visualize cohort deposits as a bar. Pay attention to how exposure linearly decreases as it moves through months.

The image generated by the author

Using this Python code, now you can quickly and effectively generate and effectively process and iterative grades, without the need to manually control versions when failing of the electric tables.

In addition to the main forecasts

Although the above example is simple, assuming that monthly acquisitions and expenses are constant during all months, this does not have to be true. Prediction of the triangle can be easily adapted and scale for accounting:

For various monthly expenses based on the levels of expenses, create a distinct forecast of the triangle for each cohort, and then collect the effect of a separate cohort to calculate the general annual effect.

  • Various acquisition rates

As a rule, enterprises do not purchase customers at a constant rate during the year. Acquisition can begin at a slow pace and increase when marketing begins, or we may have a surge of early followers, behind which follows slower growth. To process various bets, go through a list of monthly targets instead of one bet:

# 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)
The image generated by the author

To take into account seasonality, multiply the influence of each month on the appropriate seasonal factor (for example, 1.2 for months for a high season, such as December, 0.8 for several months of season, such as February, etc.), before calculating general influence.

Here’s how you can change the Python code to account for 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)
The image generated by the author

These settings can help you model growth scenarios, including:

  • Gradual extensions in the early stages of launch
  • Growth Step Function based on advertising campaigns
  • Seasonal differences in the purchase of customers

The essence

The presence of reliable and intuitive forecasts can do or violate the work for your initiatives.

But this is not all – forecasting the triangle also finds applications beyond the forecasting of income, including the calculation:

  • Client activation
  • Portfolio rates losses
  • Credit card expenses

Are you ready to immerse yourself? Download the Python template, the total above, and build your first triangle in 15 minutes!

  1. Enter your monthly acquisition goals
  2. Install your expected influence on the client
  3. Visualize your annual trajectory with automatic visualization

Assessments of the real world often require work with imperfect or incomplete data. Check out my article “Construction of protective assessments of the impact, when the data is not imperfect” for the framework for creating assessments in such scenarios.

Confirmation:

Thanks to my wonderful mentor, Katherine Maurer, for the development of the main concept and the first iteration of the method of predicting the triangle and allow me to rely on it through equations and code.

I am always open to feedback and suggestions on how to make these guidages more valuable to you. Happy reading!


Source link

Leave a Reply

Your email address will not be published. Required fields are marked *