Forecasting from Vietnam's CPI series: step by step on real data
For finance directors and SME owners who need an inflation assumption for a 12-month budget. The post decomposes Vietnam's real CPI series, forecasts it seven ways and scores each on held-back months. A constant-growth line is hard to beat, and the 2026 fuel surge pulls every forecast off course.
A distribution company in Can Tho (my invention) is drawing up a 12-month budget and needs an inflation assumption for every cost line. The usual assumption is one number, such as "CPI up 3.5%". This post tests whether a forecast built from the real CPI series, with decomposition, forecasting and scoring on held-back months, deserves more trust than a ruled straight line. The steps follow Components of a time series and Hyndman and Athanasopoulos (2021). An Excel version on invented numbers is in the seasonal forecasting post.
Where does the data come from, and how far can it be trusted?
I used the all-items consumer price index, monthly, series code VNM.CPI._T.IX.M in the CPI dataset of the International Monetary Fund (IMF), with a reference period labelled 2024 (International Monetary Fund, 2026). I downloaded it on 3 November 2026 through the IMF's public API. The file is dated as last updated on 31 October 2026 and holds 298 unbroken months, December 2001 to September 2026. The IMF names national statistics offices, the OECD and Eurostat as sources for the whole dataset and gives no separate source for Vietnam, so I checked it myself.
From the series I computed month-on-month and year-on-year changes and compared them with what NSO published: January and March to September 2026 (month on month), March to September 2026 and each September from 2022 to 2025 (year on year) (National Statistics Office of Vietnam, 2026; National Statistics Office of Vietnam, 2026). That is 19 comparisons with a largest gap of 0.01 percentage points, about the size of rounding in a two-decimal index (my guess). Two things stay open: the mean of the 12 months of 2024 in the file is 99.58, not 100, and I have not checked the joins between older reference periods in the IMF's spliced series. NSO had already posted October 2026 when I wrote (National Statistics Office of Vietnam, 2026); I left it out to keep to one dataset, downloaded on 3 November.
The last 24 months (index values):
2024-10 .. 2025-09: 100.36 100.48 100.77 101.76 102.11 102.08 102.15 102.31 102.81 102.92 102.97 103.41
2025-10 .. 2026-09: 103.61 104.08 104.28 104.33 105.52 106.83 107.73 108.04 107.63 107.50 107.99 108.66
What do the trend and seasonality of the series look like?
Trend is nearly all of it; seasonality is small and concentrated in February. I took logs of the index and ran STL (Seasonal and Trend decomposition using Loess) with period 12, seasonal window 11 and trend window 21, the defaults the book gives for monthly data, plus the outlier-resistant option the book uses in one of its examples (Hyndman and Athanasopoulos, 2021, section 3.6). Taking logs turns a multiplicative decomposition into an additive one (section 3.2). The training series is 165 months, January 2012 to September 2025. The start year is my choice, and a later section shows how much it matters.
By the definitions in section 4.3 of the book, trend strength is 0.998 and seasonal strength is 0.15 (0 means no seasonality, close to 1 means strong) (Hyndman and Athanasopoulos, 2021). The table sets two views side by side: the average monthly change for 2016 to 2025, computed straight from the data, and the STL seasonal component for the last year.
| Month | Average change on previous month, 2016 to 2025 (%) | STL seasonal component, last year (% of index level) |
|---|---|---|
| Jan | 0.44 | +0.21 |
| Feb | 0.64 | +0.57 |
| Mar | −0.05 | +0.13 |
| Apr | −0.09 | −0.07 |
| May | 0.18 | −0.15 |
| Jun | 0.33 | −0.02 |
| Jul | 0.28 | +0.04 |
| Aug | 0.30 | −0.28 |
| Sep | 0.37 | −0.08 |
| Oct | 0.28 | −0.06 |
| Nov | 0.28 | −0.13 |
| Dec | 0.21 | −0.19 |
The average over all 120 months is 0.26%. January and February run well above it, March and April below. For 2026, NSO writes that February coincided with Tet, the Lunar New Year of Bính Ngọ, lifting food, eating-out and transport prices, and that in March CPI did not fall in line with the usual yearly pattern but rose 1.23%, mainly on fuel prices (my translation of NSO's Vietnamese) (National Statistics Office of Vietnam, 2026).
Tet falls in January or February depending on the year, and STL "does not handle trading day or calendar variation automatically" (Hyndman and Athanasopoulos, 2021, section 3.6). The data carry a hint of this: January and February changes over the 10 years 2016 to 2025 correlate at −0.71, and the two-month total varies less than either month (standard deviation 0.34 against 0.40 and 0.48). That is my arithmetic on 10 points; that Tet moving between months causes it is inference, because Tet dates are not in the data.
Which seven ways of forecasting 12 months ahead?
Seven methods, from the plainest to the most elaborate. Every model runs on the log of the index and is converted back with the exponential function, with no bias adjustment.
| Method | What it does |
|---|---|
| Naive | Carries the last value forward (section 5.2) |
| Seasonal naive | Uses the same month last year (section 5.2) |
| Drift | Grows at the average log increase over the training period (section 5.2) |
| Seasonal naive + drift | Same month last year plus the drift of the years in between (my combination) |
| STL + drift | Drift for the seasonally adjusted part, last year's seasonal component repeated (section 5.7) |
| ETS | Chosen by AICc from six additive-error models (section 8.6) |
| ARIMA | ARIMA(p,1,q)(P,0,Q)12 with drift, p and q from 0 to 2, P and Q from 0 to 1, chosen by AICc (my grid) |
Sections refer to (Hyndman and Athanasopoulos, 2021). I used exponential smoothing and ARIMA as the book describes them, but I have not read the book's automatic ARIMA algorithm, so the 36-model grid is mine. At the September 2025 origin ETS chose (A,A,A) and ARIMA chose (2,1,0)(1,0,0)12.
How did they do on the 12 held-back months?
Every trend-following method erred the same way: forecasts came in below the actual values. I held back the last 12 months, October 2025 to September 2026, equal to the forecast horizon and 12 of 177 months (6.8% of the sample). The book says a test set is typically about 20% of the sample and ideally at least as long as the longest horizon needed (section 5.8) (Hyndman and Athanasopoulos, 2021); I followed the second half. Error is actual minus forecast.
| Method | MAE (index points) | MAPE (%) | Mean error | Forecast 12-month inflation for Sep 2026 (%) | |:--|--:|--:|--:|--:| | Naive | 2.94 | 2.74 | +2.94 | 0.0 | | Seasonal naive | 4.34 | 4.07 | +4.34 | 0.0 | | Drift | 1.14 | 1.06 | +1.10 | 3.31 | | Seasonal naive + drift | 1.11 | 1.03 | +0.96 | 3.31 | | STL + drift | 1.10 | 1.02 | +0.99 | 3.35 | | ETS | 1.20 | 1.11 | +1.12 | 3.32 | | ARIMA | 1.05 | 0.98 | +0.93 | 3.48 |
The actual figure for September 2026 is 5.08% (National Statistics Office of Vietnam, 2026). The five trend-following methods sit 0.13 percentage points of MAPE apart, small against the noise of one 12-month window, so I do not rank them from this table.
Up to January 2026 drift and STL plus drift stay close to the actual values (within 0.5 points, except STL in January, 0.52 too high because January's rise was only 0.05%). In February STL plus drift forecast 105.52, equal to the actual value to two decimals, while drift was 0.70 too low: the February seasonal term did its job, once. From March the gap jumps: actual 106.83, drift 105.11, STL 105.35. By September it is 108.66 against 106.83 and 106.88.
NSO reports that the fuel group's price index fell 9.62% and 8.38% year on year in January and February 2026, then rose 21.6% in March. In September 2026 the transport group rose 11.67% year on year and added 1.16 percentage points to the overall 5.08%, with fuel alone up 23.96% (National Statistics Office of Vietnam, 2026). The CPI series holds nothing about world fuel prices, so no method working from this series alone could have seen that coming. Switching model does not fix it: all five trend-following methods missed in the same direction by a similar amount.
Is one scoring run enough?
No. Take the same seven methods and hold back the previous 12 months instead (origin September 2024): drift, seasonal naive plus drift, STL plus drift and ARIMA score a MAPE of only 0.20% to 0.25%. ETS chose (A,Ad,A) and gave a nearly flat forecast around 100 all year, a MAPE of 1.94%, the same as naive; I have not tracked down why. The book recommends scoring over many forecast origins (section 5.10) (Hyndman and Athanasopoulos, 2021). I cut the data every month from September 2018 to September 2025, 85 origins; each origin used only data up to the cut, re-selected ETS and ARIMA, and forecast 12 months.
| MAPE (%) | 1 month | 3 months | 6 months | 12 months | Average over 1 to 12 months |
|---|---|---|---|---|---|
| Naive | 0.37 | 0.93 | 1.59 | 3.14 | 1.76 |
| Seasonal naive | 2.96 | 2.95 | 2.98 | 3.14 | 3.02 |
| Drift | 0.32 | 0.62 | 0.83 | 0.94 | 0.78 |
| Seasonal naive + drift | 0.82 | 0.85 | 0.87 | 0.94 | 0.88 |
| STL + drift | 0.45 | 0.75 | 0.92 | 0.95 | 0.85 |
| ETS | 0.35 | 0.83 | 1.21 | 1.71 | 1.17 |
| ARIMA | 0.35 | 0.69 | 0.92 | 1.00 | 0.84 |
Drift is first or tied for first at all four horizons. STL plus drift beat drift at 29 of the 85 origins, ARIMA at 30 and ETS at 28 (comparing each origin's average MAPE over 12 months). Only when the target month was February did STL plus drift come out slightly ahead: 0.85% against 0.88%. For this series the seasonal swing is smaller than the error in the trend, so the seasonal part does not repay the extra estimation. The book says the naive method "works remarkably well for many economic and financial time series"; it corresponds to a random walk, and drift is the version with a growth term (sections 5.2 and 9.1) (Hyndman and Athanasopoulos, 2021). My result agrees.
How much does the start year of the data matter?
More than the choice of model. I reran drift with three start dates for both held-back windows.
| Data start | Growth a year (origin Sep 2024) | MAPE Oct 2024 to Sep 2025 | Growth a year (origin Sep 2025) | MAPE Oct 2025 to Sep 2026 |
|---|---|---|---|---|
| Jan 2002 | 6.19% | 1.30% | 6.07% | 0.64% |
| Jan 2012 | 3.31% | 0.24% | 3.31% | 1.06% |
| Jan 2016 | 3.20% | 0.27% | 3.22% | 1.10% |
Starting in 2002 pulls in the high-inflation years (the series has a 3.91% rise in May 2008), so the estimated growth rate is almost double. In 2025 to 2026 that high rate happened to sit near rising inflation and won; the year before it was wrong by more than five times. A ranking from one scoring run is a ranking by luck.
When should you not use this approach?
When a policy or commodity-price shock arrives, when the reference period changes, and when you need a range rather than a single figure.
- Policy and price shocks. NSO writes that fuel-market management was run actively and flexibly, closely following world prices and domestic supply and demand (National Statistics Office of Vietnam, 2026). Decisions on prices, taxes or fees are not in the series.
- Changes of reference period or basket weights, and Tet: I have not checked the joins in the spliced series or built a Tet calendar variable.
- The national CPI is not your cost base. A haulier carries more fuel than the CPI basket does (my inference, no weights computed).
- Point forecasts only, no prediction intervals. Choose the method with Choosing a forecasting method.
Going deeper: what to read closely in decomposition and forecasting
Classical decomposition dates from the 1920s and was widely used until the 1950s (section 3.3); STL was proposed by Cleveland and colleagues (1990) according to the book, and I have not read the original paper (Hyndman and Athanasopoulos, 2021). The book lists STL's advantages (the seasonal part can change over time, and it resists outliers) and two drawbacks: it does not handle calendar variation and it decomposes additively only (section 3.6). Both drawbacks touch this series: outliers (the largest remainders fall between December 2019 and March 2020, 1.8% to 3.3% of the index level; I did not look into the cause) and the Tet effect.
Two criticisms of my own scoring. First, MAPE on an index level looks small because the level contains all the accumulated trend; the book also notes that percentage errors assume the unit of measurement has a meaningful zero and penalise negative errors more heavily than positive ones (section 5.8). Error in percentage points of inflation is easier to read. Second, the 85 origins overlap (neighbouring origins share 11 of their 12 target months), so "29 of 85" is not a statistical test.
What did I read? Sections 3.1 to 3.3, 3.6, 4.3, 5.2, 5.7, 5.8, the opening of 5.10, 8.1, 8.2, 8.6 and 9.1 of Hyndman and Athanasopoulos (2021), online edition, skipping the R code; I have not read sections 5.9, 9.7 and 9.9 or chapter 7 (Hyndman and Athanasopoulos, 2021). For NSO I read the September 2026 price press release in full (National Statistics Office of Vietnam, 2026); from the PDF overview, the month-by-month passage and the table of Septembers (National Statistics Office of Vietnam, 2026); from the CPI listing page, only the monthly summaries (National Statistics Office of Vietnam, 2026). I downloaded the IMF series twice and the two copies were identical. I computed everything in Python (pandas, statsmodels 0.15.0) and did not run R; statsmodels may select different ETS and ARIMA models from fable, the package in the book. I recomputed the four simple methods with separate code and re-ran ETS and ARIMA at the September 2025 origin on their own, with the same results. The code and CSV are not published here; the download call is https://api.imf.org/external/sdmx/3.0/data/dataflow/IMF.STA/CPI/+/VNM.CPI._T.IX.M?format=json.
Quick questions
Where can I get Vietnam's CPI series, and how do I check it?
The primary source is the National Statistics Office of Vietnam (NSO), but its releases give monthly and annual percentage changes, not a long index table. I took the index series from the IMF's CPI dataset and checked it backwards: I computed month-on-month and year-on-year changes from the series and compared them with the figures NSO published. They differ by at most 0.01 percentage points across 19 comparisons (International Monetary Fund, 2026; National Statistics Office of Vietnam, 2026; National Statistics Office of Vietnam, 2026). That checks the months I compared, not all 298.
How seasonal is Vietnam's CPI, and what does Tet do to it?
Weakly. The STL seasonal strength for 2012 to 2025 is 0.15 on a 0-to-1 scale (defined in section 4.3 of (Hyndman and Athanasopoulos, 2021)). February stands out: on average it rose 0.64% on the month in 2016 to 2025, against 0.26% for all months. January and February changes are negatively correlated (−0.71, only 10 years), which hints at Tet moving between the two months. That is my inference, because Tet dates are not in the data.
What does a MAPE of 1% on the CPI index mean for the inflation rate?
More error than 1% suggests. In the held-back year a MAPE of 0.98% to 1.11% went with forecast 12-month inflation of 3.3% to 3.5% against an actual 5.08%, an error of 1.6 to 1.8 percentage points (National Statistics Office of Vietnam, 2026). MAPE divides the error by the index level, and that level already holds years of accumulated price rises, so the figure looks small. For inflation, report the error in percentage points too.
Should a single CPI forecast go into a budget?
A single figure is not enough. This post computes point forecasts only, not prediction intervals (I have not read section 5.9 of the book). The errors of the five trend-following methods share a sign and a size, so averaging them does not make them cancel. For a budget, add high-fuel and low-fuel scenarios, as in One number or several scenarios?.
References
Listed A–Z by author surname, Harvard style. A source with a DOI links to https://doi.org/…; one without links to its page or says plainly that it has no DOI.
- Hyndman, R.J. and Athanasopoulos, G. (2021) Forecasting: Principles and Practice, 3rd edn.No DOIotexts.comCited in 2 articles
- International Monetary Fund (2026) Consumer price index (CPI): Viet Nam, all items, index, monthly (dataset IMF.STA:CPI, version 5.0.0). IMF Data.No DOIdata.imf.orgCited in 1 article
- National Statistics Office of Vietnam (2026) Chỉ số giá tiêu dùng (monthly CPI release summaries, March to October 2026). National Statistics Office of Vietnam.No DOInso.gov.vnCited in 1 article
- National Statistics Office of Vietnam (2026) Tổng quan thị trường giá cả tháng 9, quý III và 9 tháng năm 2026. National Statistics Office of Vietnam.No DOInso.gov.vnCited in 1 article
- National Statistics Office of Vietnam (2026) Thông cáo báo chí về tình hình giá tháng Chín, quý III và 9 tháng năm 2026. National Statistics Office of Vietnam.No DOInso.gov.vnCited in 1 article

Was this article useful?
No ratings yet.
Comments (0)
No comments yet. Be the first.