← All posts
AI Systemsdemand-forecastingindian-retaild2cmachine-learninginventory

Your Demand Forecast Is Wrong Because It Doesn't Know What Diwali Is

9 May 2026Nayikala Team9 min read

Off-the-shelf forecasting tools were trained on Western seasonality and Western holidays. They systematically misshape Indian festival demand — and the fix isn't a better model, it's the right features.


It's August 19, 2024. Raksha Bandhan morning. A founder watches her Blinkit listing for premium rakhis flick from "in stock" to "out of stock" at 10:47 AM. By 11 AM, every QC platform — Blinkit, Zepto, Swiggy Instamart — is OOS on rakhis in most pincodes. Zepto sold 820 rakhis per minute at peak (Business Today). Swiggy Instamart did 5× the rakhis on a single day that it did across the entire previous year. Blinkit's CEO publicly called it an "all-time high."

This is not a celebration story. This is what failure to forecast a known, dated, annual spike looks like — at companies with the best forecasting infrastructure in Indian commerce.

Comparison chart of Raksha Bandhan 2024 quick-commerce surge across Blinkit, Zepto and Swiggy Instamart — Zepto sold 820 rakhis per minute at peak, Zepto YoY rakhi growth 150 percent, Zepto earrings 4.5x YoY, Swiggy Instamart total orders 3.5x YoY, Swiggy single-day rakhis 5x prior full year — all three platforms still ran out of stock at peak hours despite advance planning
Comparison chart of Raksha Bandhan 2024 quick-commerce surge across Blinkit, Zepto and Swiggy Instamart — Zepto sold 820 rakhis per minute at peak, Zepto YoY rakhi growth 150 percent, Zepto earrings 4.5x YoY, Swiggy Instamart total orders 3.5x YoY, Swiggy single-day rakhis 5x prior full year — all three platforms still ran out of stock at peak hours despite advance planning

Now ask yourself: if Zepto missed Raksha Bandhan, what is your Prophet model — running on two years of Shopify data with holidays_country='IN' — doing about Diwali this October?

The model isn't the problem. The features are.

Most Indian D2C and SME founders we talk to are running one of three things: Excel + gut, a SaaS OMS like Unicommerce that does basic trend extrapolation, or a Python notebook with Prophet that someone's analyst built. All three break on Indian seasonality for the same reason — and it has nothing to do with the algorithm.

Prophet's holiday handling is built around a symmetric window assumption: lower_window=-3, upper_window=3 around a date, with a single coefficient. That model says: "demand is elevated for a few days around the holiday, with the peak on the day itself." This is approximately true for Christmas. It is approximately false for almost every Indian festival.

Bar chart of the asymmetric Diwali buying curve — sales lift 2 weeks before Diwali plus 51 percent, online traffic lift 2 weeks before plus 36 percent, 42 percent of Diwali gift buyers complete purchases 1-4 weeks before the festival, browse-to-buy starts about 4 weeks before — proving the biphasic pre-festival surge plus festival-day drop pattern Western forecasting models miss
Bar chart of the asymmetric Diwali buying curve — sales lift 2 weeks before Diwali plus 51 percent, online traffic lift 2 weeks before plus 36 percent, 42 percent of Diwali gift buyers complete purchases 1-4 weeks before the festival, browse-to-buy starts about 4 weeks before — proving the biphasic pre-festival surge plus festival-day drop pattern Western forecasting models miss

The EventCast paper deployed across 4 countries and 160 regions in 2026 measured this empirically. Religious and cultural holidays — about 15% of all events in their taxonomy — show a biphasic pattern: a pre-festival surge followed by a during-festival drop. Indian Diwali is the textbook case. YouGov India 2024 put hard numbers on it: sales lift in the two weeks before Diwali was +51%; 42% of gift buyers complete their purchase 1-4 weeks before. On Diwali day itself, many categories drop — people are lighting diyas, not browsing Myntra.

A symmetric Prophet window around November 1 doesn't model that. It smears a bell curve over the date and silently underpredicts the pre-festival ramp while overpredicting day-of demand. Your inventory plan inherits the shape of that smear.

Indian festival demand is multiplicative, not additive

This is the structural one. Prophet's default is seasonality_mode='additive' — which means a Diwali bump is modeled as a constant +500 units regardless of whether your daily baseline is 200 or 2,000. Sounds reasonable until you grow.

Diwali demand isn't +500 units. It's 3.5× BAU at the aggregate (RedSeer's 2025 explicit number for festive vs business-as-usual). Within that, fashion runs at 3× yearly average. Travel accessories were +250% YoY festive 2024 (Unicommerce). Premium fashion + beauty on Amazon spiked +400% festive 2024 (eMarketer). Onam in Kerala lifted home appliance sales +200% YoY in that single state — invisible in any national-aggregate model (India Retailing).

Horizontal bar chart of festive 2024 category-specific demand multipliers versus business-as-usual baseline — Amazon premium fashion and beauty 400 percent spike, travel accessories 250 percent YoY, electronics and gaming accessories 100 percent YoY, home and wearables 100 percent YoY, hair styling 61 percent YoY peak Diwali, makeup 54 percent YoY, beauty bath and body kits 54 percent YoY, beauty and personal care overall 50 percent YoY, FMCG essentials Tier-2 cities 30 percent YoY, premium large appliances Amazon 30 percent YoY, smartphones and appliances 18-20 percent YoY, consumer durables 9 percent YoY, fashion 300 percent of yearly average
Horizontal bar chart of festive 2024 category-specific demand multipliers versus business-as-usual baseline — Amazon premium fashion and beauty 400 percent spike, travel accessories 250 percent YoY, electronics and gaming accessories 100 percent YoY, home and wearables 100 percent YoY, hair styling 61 percent YoY peak Diwali, makeup 54 percent YoY, beauty bath and body kits 54 percent YoY, beauty and personal care overall 50 percent YoY, FMCG essentials Tier-2 cities 30 percent YoY, premium large appliances Amazon 30 percent YoY, smartphones and appliances 18-20 percent YoY, consumer durables 9 percent YoY, fashion 300 percent of yearly average

These are multiplicative effects. The fix in Prophet is one line — seasonality_mode='multiplicative'. On the pipelines we've audited, switching from additive to multiplicative produced bigger error reductions than swapping the model out for NeuralProphet — a one-line change beating a library swap. Most analyst-built Prophet pipelines we've inspected at SMEs have never flipped that flag.

The deeper problem: Prophet's bell-curve Fourier decomposition cannot represent the cliff edge that follows Diwali. Demand for sweets, gifting, electronics goes from 5× to baseline in 24 hours. There is no smooth seasonal function in Prophet's vocabulary that captures a cliff. The library will fit something that looks plausible and is wrong on both sides of the discontinuity.

SARIMA's moving holiday problem, and why Amazon Forecast isn't your way out

SARIMA's seasonal period is fixed — period=52 for weekly, period=365 for daily. Eid shifts ~11 days every Gregorian year. Diwali shifts up to four weeks. Holi, Navratri, Onam — all lunar, all moving. A festival that lands in week 44 this year and week 41 next year will never align inside SARIMA's fixed seasonal structure. No tuning fixes this. The model is structurally blind.

Amazon Forecast handles holidays better, and Meesho has publicly cited a 20% forecast accuracy improvement after switching to it (AWS case study). But the economics don't work for SMEs. A worked example: 1,000 SKUs × 3 quantiles × 30-day horizon × daily run = 2.7M forecast points/month. At Amazon Forecast's tiered pricing, that's roughly $1,500/month for compute alone. The same workload on a t3.large EC2 spot instance with self-hosted LightGBM is $5-10/month. Two orders of magnitude difference. Forecast makes economic sense at 10M+ points/month — i.e., Myntra/Meesho scale, not yours.

Horizontal bar chart of monthly cost to forecast 1,000 SKUs daily across compute options — Amazon Forecast managed service approximately $1,500 per month, SageMaker DeepAR self-managed approximately $21 per month, AWS EC2 t3.large on-demand $1.87 per month, EC2 t3.large spot $0.29 per month — 95 percent cost gap between managed Amazon Forecast and a self-hosted EC2 spot pipeline at SME scale
Horizontal bar chart of monthly cost to forecast 1,000 SKUs daily across compute options — Amazon Forecast managed service approximately $1,500 per month, SageMaker DeepAR self-managed approximately $21 per month, AWS EC2 t3.large on-demand $1.87 per month, EC2 t3.large spot $0.29 per month — 95 percent cost gap between managed Amazon Forecast and a self-hosted EC2 spot pipeline at SME scale

What you can do this week, for free

Four things to do this week on your existing stack, before any architecture changes.

1. Pull last year's daily sales by SKU and overlay it with the actual Hindu and Islamic calendar. Not Google Calendar's India holidays — that file misses Onam, Karva Chauth, regional Navratri. Use Calendarific's free tier (500 calls/month is enough), or the open-source Panchangam library which computes festival dates from Swiss Ephemeris. Mark each SKU's lift in the -15 to +5 day window around Diwali, Raksha Bandhan, Ganesh Chaturthi, Eid, Onam, Pongal — whichever match your customer geography. You'll see the asymmetry immediately.

2. Switch your Prophet model to multiplicative. One line:

m = Prophet(seasonality_mode='multiplicative')

Then add custom holiday rows with asymmetric windows: lower_window=-10, upper_window=2 for Diwali on a gifting SKU. lower_window=-7, upper_window=0 for Eid apparel. lower_window=0, upper_window=3 for Holi colour powders. Per-holiday prior_scale between 0.5 and 5.0 — the default 10 is almost no regularization, which is why your model treats every minor festival like Diwali.

3. Build a lag_365 feature. If you're using any tree-based model, the single most important feature for annual seasonality is the value 365 days ago. M5 winners used lag_364, lag_365, lag_366 to handle year-length variation. Models without these systematically miss Diwali magnitude.

4. Pull Google Trends for your top three categories. Use pytrends-modern (github.com/yiromo/pytrends-modern) — the original pytrends was archived in April 2025 and most blog posts you'll find on Stack Overflow point to dead code. Trends has been shown to reduce out-of-sample retail forecast error by ~9% across multiple peer-reviewed studies, and it's a leading indicator — searches for "diwali gift hampers" peak 2-3 weeks before transactions do.

These four steps will get you from "structurally blind" to "structurally aware." Your forecast won't be perfect, but it will stop being systematically wrong in the same direction every year.

Bar chart showing 21-feature LightGBM architecture validated at M5 competition scale — lag features at 1, 2, 3, 7, 14, 28 and 365 days; rolling means and rolling standard deviations at 7, 14, 28 and 90 days; exponentially weighted moving averages at alpha 0.1 and 0.3; calendar features for day-of-week, month, week-of-year and weekend; festival flags for Diwali, Holi, Eid and Navratri with days-to-festival signed integers and 7-day window booleans
Bar chart showing 21-feature LightGBM architecture validated at M5 competition scale — lag features at 1, 2, 3, 7, 14, 28 and 365 days; rolling means and rolling standard deviations at 7, 14, 28 and 90 days; exponentially weighted moving averages at alpha 0.1 and 0.3; calendar features for day-of-week, month, week-of-year and weekend; festival flags for Diwali, Holi, Eid and Navratri with days-to-festival signed integers and 7-day window booleans

Where it gets harder

The four fixes above remove the worst systematic errors. They don't get you to a forecast you can plan capital against.

Then there's the engineering layer most SMEs hit and don't know how to cross.

Horizontal bar chart of festival demand hyperlocality that national models miss — Onam home appliances Kerala plus 200 percent YoY, Durga Puja West Bengal economy ₹65,000 crore with Kolkata 70 percent share at ₹45,500 crore, Ganesh Chaturthi Maharashtra-Karnataka-Goa-AP-Telangana corridor ₹25,000 crore with 7 lakh Maharashtra pandals, Mumbai Dadar market festival uplift 35-40 percent, Onam garment sales Kerala ₹10,000 crore
Horizontal bar chart of festival demand hyperlocality that national models miss — Onam home appliances Kerala plus 200 percent YoY, Durga Puja West Bengal economy ₹65,000 crore with Kolkata 70 percent share at ₹45,500 crore, Ganesh Chaturthi Maharashtra-Karnataka-Goa-AP-Telangana corridor ₹25,000 crore with 7 lakh Maharashtra pandals, Mumbai Dadar market festival uplift 35-40 percent, Onam garment sales Kerala ₹10,000 crore

The full feature stack for a festival-aware model needs Agmarknet mandi prices (rural purchasing power signal — free via data.gov.in), IMD or Open-Meteo weather (the 2025 monsoon arrived May 24 — eight days early, the earliest since 2009 — and that cut the South India cooling-product season by two weeks for Voltas, Blue Star, Havells), MSP announcement dates as sentiment shocks, festival categorical encodings with regional variants, and city-tier features because Tier 2/3 Diwali FMCG spikes don't look like Tier 1.

Then there's the hierarchy problem. During Diwali, your category mix shifts dramatically — sweets and gifting spike while staples stay flat. A top-down forecast disaggregating by annual-average proportions misallocates badly inside the festival window. Nixtla's HierarchicalForecast MinTrace reconciliation with festival-conditioned covariance handles this; static-proportion top-down does not.

Stat cards showing Honasa Consumer Mamaearth Q2 FY25 inventory collapse — ₹300 crore trade-channel near-expiry inventory at distributors per AICPDF, ₹63.51 crore total return provision, ₹41.21 crore physical returns received in warehouses, ₹21.32 crore still being collected, Q2 FY24 net profit ₹29.78 crore versus Q2 FY25 net loss ₹18.71 crore, marketing spend 40 percent of revenue at ₹183 crore
Stat cards showing Honasa Consumer Mamaearth Q2 FY25 inventory collapse — ₹300 crore trade-channel near-expiry inventory at distributors per AICPDF, ₹63.51 crore total return provision, ₹41.21 crore physical returns received in warehouses, ₹21.32 crore still being collected, Q2 FY24 net profit ₹29.78 crore versus Q2 FY25 net loss ₹18.71 crore, marketing spend 40 percent of revenue at ₹183 crore

Then there's the source-of-truth question that broke Mamaearth. In Q2 FY25, Honasa took a ₹63.51 crore sales return provision because their forecast was running on system-level sell-in data — what shipped to super-stockists — not sell-through data, what actually reached consumers. Varun Alagh said it himself: "Most of our understanding was from the system inventory… all of that has resulted in a higher net inventory take back compared to what we had estimated." The ₹141 crore inventory pile-up was invisible until Project Neev forced reconciliation. Same forecasting blind spot, different layer of the data pipeline. If your model is fed Tally sell-in numbers, it's modelling shipments to your distributor, not demand from your customer. The forecast can be technically correct and operationally useless at the same time.

The pipeline that actually works — Tally XML agent on local LAN polling Sales Register, Shopify GraphQL hitting the 1,000-point/min bucket, SP-API daily Reports for the marketplace cut, all landing in S3, joined against a panchangam-derived calendar, fed into a hierarchically reconciled LightGBM ensemble with sell-through ground truth — is the layer SaaS dashboards don't expose and analyst notebooks don't finish.

The unresolved part

The exact gap between what Prophet's bell-curve Fourier decomposition can represent and what a Diwali demand curve actually does — multiplicative, biphasic, ending in a cliff — is where the engineering decisions live.



← All posts

More from the blog