Use Case Decision
I started with Black Hut Coffee, a fictional coffee subscription business that I created the synthetic data for. The very accurate forecasts made me question the data behind the results, and I moved the project to Spotify's publicly reported subscriber data.
From fictional Black Hut Coffee business to real-life Spotify subscriber business
The change gave me a real business case with reported observations to check. It also made the earlier coffee exercise useful in a different way: it showed why I need to understand how the data was created before trusting a forecast.
Created using Copilot in Excel
and traditional s-curve growth assumptions
Publicly reported quarterly subscriber counts
from Spotify investor-relations reports
Why I changed the use case
A fictional coffee subscription business with data created synthetically using Copilot in Excel and traditional s-curve growth assumptions
Black Hut Coffee let me practise forecasting subscribers and revenue, compare methods and build the reporting workflow. It was a useful place to start because I could work through the process with a complete dataset.
The forecasts were extremely accurate
Those results made me look again at the s-curve assumptions behind the synthetic history. I needed to check whether the models were reproducing the invented growth path. The accuracy did not establish that I would achieve the same results for a real business.
What the coffee exercise taught me
The work was not wasted. I had built a forecasting and dashboard workflow, and the results reminded me to challenge the evidence as well as the model. I carried that approach into this Spotify case study.
Synthetic data is invented by nature. Its values reflect the assumptions used to create it, even when AI is only filling the blanks in an otherwise observed dataset. Those filled values are estimates, not new business observations. I can use them for practice or as clearly labelled inputs, but I cannot treat them as fully reliable evidence without checking them against real observations.
How that lesson carries into Spotify
Spotify's public investor-relations reports provide quarterly observations and a source record that I can inspect. I still need to check the definitions, reconcile the numbers and distinguish reported values from estimates.
My new use case: Spotify
Quickly assess Spotify Subscriber year end landing expectations using python statistical forecasting methods.
Approach
My aim is to assess Spotify's year-end subscriber landing using historical patterns, test how useful those patterns have been, and explain what the results can support in a planning discussion.
My reasoning about the data
I began with Black Hut Coffee's synthetic history, then moved to Spotify's publicly reported quarterly data to test my approach against a real business. I bring the shareholder reports into a consistent workbook and record the source filename in each populated cell's notes. I also check later reports for revisions to earlier quarters, so changes in the published figures remain traceable.
I keep Premium subscribers and Ad-supported monthly active users (MAU) separate because they measure different things. Premium subscribers represent paying subscriptions, including subscribers who may not have listened recently. Ad-supported MAU measures active users of the free service. Their sum provides a combined measure for this project, but it cannot be treated as Spotify's official MAU or a count of unique active users. The published data does not give me enough detail to reconcile the difference reliably.
For the monthly forecasting experiment, I use linear interpolation between reported quarter-end counts. This creates a consistent monthly series, but the intervening values are estimates. It does not create additional observed data or reveal what actually happened within each quarter. I retain the reported quarter-end markers and distinguish user counts, measured at a point in time, from revenue earned over a period.
To investigate seasonality, I examine quarterly net additions and each quarter's contribution to annual additions across complete years. This helps me assess whether Q4 consistently accounts for a larger share of growth. I base that assessment on the reported quarterly figures, recognising that a recurring pattern does not, by itself, explain what causes it.
Why I selected these forecasting models
I started with Prophet to explore trend and annual seasonality, then widened the comparison. The six methods let me test a simple seasonal baseline, different treatments of trend and seasonality, and a blend of forecasts.
| Model | What it does | What I want to learn |
|---|---|---|
| Seasonal Naive | Repeats the last 12 monthly levels. | Does a more complex method improve on a simple seasonal reference? |
| ETS Holt Damped | Projects the level and trend, gradually reducing the trend's influence. This standalone model has no seasonal component. | Is a moderated growth trend sufficient for this series? |
| ARIMA | Uses changes in the series and past forecast errors, without an explicit seasonal term. | How well does a non-seasonal model capture the historical movement? |
| SARIMA | Adds an annual seasonal structure to ARIMA on the monthly calendar. | Does modelling the recurring annual pattern improve the forecast? |
| Prophet | Combines a changing linear trend with annual seasonality. | How useful is that separation of growth and the seasonal pattern? |
| Ensemble | Averages three forecasts with fixed equal weights: undamped Holt trend, seasonal Holt-Winters with a damped trend, and SARIMA. | Does combining different model structures give a useful planning reference? |
The Ensemble is a three-model blend. It does not average all six methods shown here. Premium and Ad-supported forecasts are fitted separately and then added.
How I test and judge the results
I use chronological training and test periods, with the most recent 15%, 20%, 25%, 30% or 35% held back. Each frozen forecast is compared with the same test dates across all six methods. I review both monthly scores and scores at reported quarter ends, using WAPE for the size of the error and bias for its direction. A near-zero bias can hide errors that cancel each other out.
The final July–December 2026 outlook uses a separate refit through June 2026. Changing the test slider changes the historical evaluation; it does not change that saved full-history outlook. I consider performance across the test windows, the shape of the forecast and how clearly I can explain it to management. The dashboard's suggested reference remains provisional.
The holdouts overlap, so they are sensitivity checks rather than independent tests. Monthly interpolation was also completed before the split: at a cut-off between quarters, a training estimate can depend on a quarter-end observation inside the test period. Checking only reported dates does not remove this issue. A direct quarterly backtest is the next validation step.
How I structured the assignment
I use AI as a coding assistant, specifying the dataset, Google Colab environment and outputs I need. I run the code, inspect the results and refine the instructions as issues arise. The dashboard follows the logical sections of the notebook so that the inputs, workings and decisions can be explained without scrolling through every line of Python.
- Collecting Data: assemble the reported history, check definitions and reconciliation, and retain the source record.
- Data Frequency Experiment: create the monthly estimates, inspect the charts and distinguish estimated months from reported quarter ends.
- Forecasting: run the six methods on consistent inputs and retain forecasts, settings and diagnostics.
- Comparing forecasts: review historical errors, bias and sensitivity to the test window.
- Management Advice: assess the year-end landing, compare planning choices and explain the risks and next decisions.
The Assumptions page records the modelling choices and limits. The final dashboard cell assembles saved results without fitting the models again. The downloadable files retain the forecast values and supporting checks.
This structure responds to the assignment's requirement to show workflow and thought process, and Marianne's coaching advice to document data choices, model reasoning and assumptions in plain English.
What this approach can support
This approach gives management a starting point for planning future subscriber growth, with separate forecasts for Premium subscribers and Ad-supported users. Comparing the models helps assess how sensitive the outlook is to the forecasting method. Testing forecasts against historical results also helps judge which methods deserve more confidence.
For FP&A, the output can inform discussions about growth expectations, targets and where further investigation is needed. A wide difference between forecasts is a reason to examine the assumptions more closely before committing to a plan.
The subscriber forecasts can also provide a foundation for revenue scenarios by adding assumptions about average subscribers, Premium ARPU and advertising monetisation. That would connect the growth outlook to its financial implications.
Collecting Data
Publicly available Spotify investor-relations reports provide the quarterly counts that anchor this student case study. The original workbook and final report metadata provide the source record.
Monthly subscriber base · reported quarter ends only
Only reported quarter-end dates are plotted. Lines connect those quarterly snapshots; this chart contains no interpolated monthly points. The combined total adds Premium subscribers and Ad-supported MAU.
Cumulative revenue · reported quarter ends only
Seasonality in the reported quarterly data
Compare net additions in Q1, Q2, Q3 and Q4 and how much each quarter contributes to the year's total. Net additions are changes in the reported count, not gross new subscriptions. Revenue measures show each quarter's revenue and its share of annual revenue.
Net additions per quarter
Each quarter's share of the annual total
Bars average each year's quarterly shares; dots show individual years. The 25% line represents an evenly distributed year. Negative contributions remain below zero.
Inspect each complete year's quarterly values and shares
Compare quarterly patterns across all available measures
A recurring Q4 uplift supports testing seasonal methods; it does not establish why growth changes or guarantee that a seasonal model will forecast better. Trend changes, commercial decisions and reporting changes can also affect these observations. Compare holdout results before choosing a method.
Collection and validation workflow
Combined total = Premium subscribers + Ad-supported MAU. It is a workbook measure mixing two reported populations, and differs from Spotify's official deduplicated total MAU.
Source register
Collector source notes
Full workbook source-note record
Assembly record
Fingerprints and report metadata
Data Frequency Experiment
A monthly worksheet makes the models easier to compare on a common calendar. Reported quarter ends remain the original observations.
Monthly subscriber base
Ad-supported users sit below Premium subscribers. Blue and green monthly points mark the two levels of the stack; hovering shows each component's own count and whether the date is reported or estimated. White markers identify quarter-end reported components. Counts are monthly snapshots, not a running sum.
Cumulative revenue by month
What the frequency change means
Subscriber counts are stocks
Intermediate months use linear interpolation between reported quarter-end counts. This creates a monthly path, but no new measured subscriber observations.
Revenue is a flow
The earlier monthly preparation allocates quarterly revenue across months. The cumulative chart adds those flows over time and should reconcile to quarterly revenue totals.
Monthly and reported-only testing
Monthly scores compare every worksheet month. Reported-only scores check original quarter ends. Both are available in the comparison section.
Training cut-offs need care
Interpolation happens before the monthly split. A cut-off between quarter ends can leave training estimates that depend on a later count inside the holdout. A separate forecast fitted directly to reported quarterly data remains a useful next validation.
Forecasting
Inspect each technique on the same source series and test dates. Dashed lines are frozen forecasts; solid lines use the June 2026 refit.
Full executive explanation
Total subscribers means Premium subscribers + Ad-supported MAU. The ad-supported measure counts monthly active users. Accuracy tiles refer to the selected frozen test; December tiles use the fixed June 2026 refit.
Combined total
Premium subscribers
Ad-supported MAU
Accuracy and updated forecast
Reported quarter-end accuracy
Method and diagnostics
How the forecast is built and tested
Selected frozen fit and June 2026 refit
Comparing forecasts
All six methods face the same holdout. The charts begin at the selected test month, while fitting still uses the full earlier history.
Chart visibility controls leave the accuracy tables unchanged. SARIMA is bright Spotify green; Prophet is darker green; Ensemble is teal.
Combined total
Premium subscribers
Ad-supported MAU
Monthly accuracy
Reported quarter-end accuracy
Lower WAPE, MAPE, MAE and RMSE mean smaller errors. Positive bias means overforecasting. RMSE and MAE are in millions. Errors in the two segments can cancel in the combined total.
Updated July–December 2026 forecasts
Management Advice
A provisional planning reference, supported by common-window tests and the spread of model forecasts. The evidence covers subscribers and users, not a revenue forecast.
The initial candidate has the lowest median reported-quarter total WAPE across the five windows. This is a robustness check across overlapping tests, not independent repeated validation.
Build a combined subscriber outlook
Choose one forecasting method for Premium and one for Ad-supported. Click a forecast line or a method button to highlight it. The Total chart adds the two selected forecasts for each month.
Premium subscribers
Ad-supported subscribers (MAU)
Total subscribers
Combined population: Premium + Ad-supported MAU
June is the reported starting point; July–December are point forecasts from the saved June 2026 refits. Changing the test slider does not refit these forecasts. The mixed-method total has no separate validation result or confidence interval. It is the case-study combined population, not Spotify's reported total MAU.
Forecast accuracy across test windows
Cells show combined-total WAPE. Lower is better. A method that wins one window may not win another. Overlapping holdouts reuse some observations.
December 2026 outlook by method
Choose a method for each subscriber type using the dropdowns or by clicking a bar. The highlighted bars show your choices. The total below adds their December forecasts, and the monthly outlook above uses the same selections.
Premium subscribers · December by method
Ad-supported MAU · December by method
Total subscribers · selected December outlook
Point forecasts from the fixed June 2026 refits. Combined total = Premium subscribers + Ad-supported MAU, the measure used for this project. The spread across methods is a model comparison, not a confidence interval; the selected mixed-method total has no separate backtest.
Proposed management actions
Limits that affect the decision
Treat the current results as a retrospective test of a monthly series derived from quarterly reports. Apparent monthly accuracy and seasonality may partly reflect interpolation. Run a separate quarterly backtest and validate on genuinely new reported quarters before relying on one method for planning.
No model includes planned pricing, acquisition campaigns or churn drivers. Revenue planning needs average subscriber exposure, ARPU, advertising assumptions and FX. Subscriber year-end counts alone are insufficient to forecast revenue. No probability bands were supplied with these model outputs.
Assumptions
The data choices, model settings and planning judgements behind the year-end subscriber outlook. This register also records limitations that affect how I interpret the results.
Saved model settings
These records show the settings and fitted configurations saved by the six forecasting scripts. They update with the selected test window.