LTV Drivers

Decomposes period-over-period changes in customer lifetime value into ARPU and lifetime effects.

Purpose

Provide a driver-based view of customer lifetime value, attributing period-over-period changes in LTV to changes in monetization and retention dynamics.

This model is designed as an explanatory and analytics layer, enabling:

  • Clear attribution of LTV expansion or contraction

It turns LTV from a black-box KPI into explainable metric.

Business Logic

  • Start from LTV
  • Compute period-over-period deltas using LAG
  • Attribute LTV change into:
    • ARPU effect: changes in ARPU
    • Lifetime effect: changes in customer lifetime
  • Ensure driver components reconcile to total LTV change
  • Exclude the first period where lagged values are unavailable

Output Contract

Definitions

ColumnDescription
dateDate of the snapshot (YYYY-MM-DD)
value_typeIndicator such as actual, budget
arpuLTV change driven by ARPU variation
customer_lifetimeLTV change driven by lifetime variation
ltv_deltaTotal period-over-period change in LTV

Sample & Implementation

Drivers of changes in customer lifetime value (LTV) over time.
datevalue_typearpucustomer_lifetimeltv_delta
2025-02-01budget720.974544632.7821546035.4462
2025-03-01budget1381.105417376.122218778.6154
2025-04-01budget1381.499317397.5118800.0769
2025-05-01budget1381.820217418.577618821.1538
2025-06-01budget1382.060117439.333618841.8462
2025-07-01budget1382.4389-69308.4515-68006.0385
2025-08-01budget1284.261415886.029717188.3571
2025-09-01budget1284.584315904.095717206.5
2025-10-01budget1284.861615921.915717224.3571
2025-11-01budget1285.087415939.495617241.9286
{{config(materialized='view')}}


with ltv as (
    select * from {{ ref('ltv') }}
),

calculated_values as (
    select
        date,
        value_type,
        (arpu - LAG(arpu) OVER (PARTITION BY value_type ORDER BY date)) * LAG(customer_lifetime) OVER (PARTITION BY value_type ORDER BY date) as arpu,
        (customer_lifetime - LAG(customer_lifetime) OVER (PARTITION BY value_type ORDER BY date)) * LAG(arpu) OVER (PARTITION BY value_type ORDER BY date) as customer_lifetime,
        (ltv - LAG(ltv) OVER (PARTITION BY value_type ORDER BY date)) as ltv_delta
    from ltv
)

select *
from calculated_values
where arpu IS NOT NULL

Dependencies

  • Transformations: LTV

On this page

Star us on GitHub

If you enjoy this content and find it useful, give us a star on GitHub to show your support and stay updated with our latest improvements.