agentleFS
Faaz17Faaz17/Agents-and-Skills/skills/research-writing/forecasting-methods/SKILL.md

forecasting-methods

Skill1 starsChanged 2 months agoMITView on GitHub

Forecasting theory and computation for the MGT4897 DXB report — moving averages, weighted moving averages, single and trend-adjusted exponential smoothing, least-squares trend, and associative regression; the CFE, MAD, MSE, MAPE and tracking-signal metrics the brief names; how to choose and defend a model; and how to handle the 2020–2022 COVID structural break. Use for task 3 and for any number that feeds the capacity gap analysis.

The file

We split this skill into the rules it gives an agent

4 rules. About 0 are common, 3 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every method, every error metric, the 2026 forecast, the long-run projection and the associative regression come out of one command.

    line 15
  2. Very specific:

    Run all three (--from / --to), report them, and argue for one — or for a blended view with a stated range.

    line 128
  3. Distinctive:

    Do the two series stay consistent with each other?

    line 162
  4. Distinctive:

    Put full method-by-method workings in the appendices.

    line 172

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Forecasting — methods, metrics, and model choice

Task 3 carries 35 of 100 marks. This skill covers the arithmetic and, more importantly, the judgement the marks actually reward.

Run the engine, do not hand-calculate

py .claude/skills/forecasting-methods/scripts/forecast.py --markdown

Every method, every error metric, the 2026 forecast, the long-run projection and the associative regression come out of one command. Useful variants:

CommandPurpose
--series passengersOne series only
--from 2013 --to 2019Pre-COVID fitting basis
--from 2022Post-COVID fitting basis
--long-to 2036Projection horizon (default 2036)
--associativeOnly the passengers-on-movements regression
--at 500000,550000,600000Movement levels for the associative forecast
--alpha 0.1,0.2,0.3,0.5Smoothing constants to compare
--plainConsole-friendly output instead of markdown tables

Numbers typed by hand into prose drift from the workbook and get caught. Generate, then quote.

The methods

Naive

F(t+1) = A(t). Zero parameters. Its only role is as a benchmark — a sophisticated model that cannot beat naive is not earning its complexity. Reporting that comparison is a mark of a careful analyst.

Simple moving average

F(t+1) = mean of the last n actuals. Smooths noise; lags a trend, and the lag grows with n. On a rising series it under-forecasts systematically, which shows up as a positive CFE and a rising tracking signal.

Weighted moving average

Same, with declining weights on older periods — e.g. 0.5 / 0.3 / 0.2 with the largest weight on the most recent year. Weights must sum to 1 (the script normalises). Responds faster than a simple MA, still lags a trend. Justify the weights; arbitrary weights invite the question "why those?".

Single exponential smoothing

F(t+1) = F(t) + α(A(t) − F(t)), with 0 < α < 1.

α is the responsiveness dial: high α tracks recent movement and reacts to noise; low α is stable and slow. Compare at least two or three values. Single exponential smoothing has no trend term — on a series with a persistent trend it lags permanently, which is exactly what the DXB data shows.

Trend-adjusted (Holt's) exponential smoothing

Smooths level and trend separately:

L(t) = α·A(t) + (1−α)·(L(t−1) + T(t−1))
T(t) = β·(L(t) − L(t−1)) + (1−β)·T(t−1)
F(t+1) = L(t) + T(t)

Appropriate where a trend is present and the analyst wants recent trend weighted more heavily than a straight line does. On the short post-COVID window it extrapolates recovery momentum aggressively — note that rather than quoting it flat.

Least-squares linear trend

y = a + b·x fitted on the year index. Uses the whole window, gives an interpretable slope ("about b additional passengers per year"), and reports r² — the share of variation explained. It is also the only method here that is straightforwardly extendable to 2036.

Associative (causal) regression — task 3(c)

Passengers regressed on flight movements, not on time:

passengers = a + b · movements

This is a different kind of model from everything above, and the report must say so. Time-series methods project the past forward; an associative model predicts one variable from another. The brief asks for expected passenger traffic at 500,000, 550,000 and 600,000 movements — that is this model, not the trend line.

The slope has a physical meaning: passengers per aircraft movement, a function of average aircraft size and load factor. Interpreting it that way, and asking whether it can hold at higher movement volumes, is the analysis the marks are for.

The error metrics — what each one actually detects

Let e(t) = A(t) − F(t), over the n periods where a forecast exists.

MetricFormulaDetectsWatch for
CFEΣ e(t)Cumulative biasLarge positive = persistent under-forecasting. On a capacity decision, that is the dangerous direction
MADΣ|e(t)| / nAverage error size, in original unitsSame units as the data, so it is the one to quote to a COO
MSEΣ e(t)² / nAverage squared errorPenalises large misses heavily — the right lens when one bad year is costlier than several small ones
MAPE(Σ |e(t)/A(t)| / n) × 100Average error as a percentageUnit-free, so it compares across the two series. Distorted by small denominators — the 2020 collapse inflates it
TSCFE / MADBias relative to typical errorOutside ±4 = the model is out of control. MAPE will not tell you this

Compare models on more than one metric. The classic error is ranking by MAPE alone and recommending a model with a tracking signal of 3.5 — accurate on average, but wrong in the same direction nearly every year. Say which metric drove the recommendation and why.

The metrics must be computed over a common comparison window where possible. A 3-year moving average produces fewer forecasts than a naive model, so their metrics are not computed over identical periods; the script reports n for each so the report can acknowledge it. Acknowledging it is worth more than hiding it.

The COVID structural break — the analytical crux

DXB fell from 86.4m passengers in 2019 to 25.8m in 2020, and recovered past 2019 by 2023. This is not noise. It is a structural break, and how it is handled separates a competent report from a distinction.

Fitting a least-squares trend across the whole 2013–2025 series gives r² ≈ 0.006 — the line explains essentially none of the variation, and projects 2035 below the 2025 actual. Quoting that number as a forecast would be indefensible. Run it, show it, and explain why it is rejected. Demonstrating that a model fails is evidence of judgement.

Three defensible bases, each with a different answer:

BasisFitting windowr²Character
Full series2013–2025~0.006Break dominates; unusable for projection
Pre-COVID2013–2019~0.85Mature-growth trajectory, ignores the recovery
Post-COVID2022–2025~0.82Steep, but part of that slope is recovery, not growth

Run all three (--from / --to), report them, and argue for one — or for a blended view with a stated range. A capacity decision on a 20-year asset should not rest on a four-observation recovery trend, and saying so is the argument.

Other legitimate treatments worth naming: excluding 2020–2021 as outliers; using a dummy variable for the break; forecasting from 2023 onward once recovery completed. Each has a cost. Name it.

Choosing and defending a model — the marks are here

The brief says "recommend the most suitable model". A recommendation needs four things:

  1. The metric comparison, laid out honestly
  2. The metric that decided it, and why that metric fits this decision — MAD for operational staffing, MSE where a single large miss is costly, TS where sustained bias would compound into an infrastructure error
  3. The behaviour of the series — trend present? break present? seasonality? (annual data hides seasonality, which is itself worth a sentence, since airport operations are acutely seasonal and the annual series conceals it)
  4. The decision the forecast serves — a 2026 staffing plan and a 2036 capacity decision do not need the same model, and saying so explicitly is exactly the kind of judgement task 2 asks for

It is entirely defensible to recommend different models for different horizons: a responsive short-term method for 2026, a trend model on a stated basis for 2036. That reads as an analyst thinking, not a student ticking a box.

Sanity checks before any number reaches the report

  • Does the 2026 forecast sit in a plausible band against 95.2m in 2025?
  • Does the 2035/2036 figure imply a growth rate you would defend out loud?
  • Is the associative forecast an extrapolation beyond the observed movement range (max 454,800 in 2025)? Say so — all three of the brief's levels are.
  • Does passengers ÷ movements stay plausible at the forecast levels (roughly 209 in 2025)?
  • Do the two series stay consistent with each other?
  • Are the units right — passengers in millions vs absolute; movements in thousands?

Reporting conventions

  • Round in prose, keep full precision in the workbook: "approximately 112.3 million", not "112,292,354"
  • State the fitting window every time a forecast is quoted
  • Give the regression equation, r and r² whenever a regression is used
  • Number every table and figure and refer to each in the text
  • Put full method-by-method workings in the appendices; the main text carries the comparison summary and the interpretation

Citing the theory

Forecasting method claims should carry a textbook or journal citation. Standard operations management texts covering exactly this material:

  • Heizer, Render and Munson — Operations Management
  • Slack, Brandon-Jones and Burgess — Operations Management
  • Krajewski, Malhotra and Ritzman — Operations Management: Processes and Supply Chains
  • Stevenson — Operations Management

For the five journal articles the brief requires, air transport demand forecasting is a well-served literature — see aviation-data-sources for the journals to search. Verify every reference; never invent a DOI.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.