Make room for what’s next.
Forecast demand, understand the uncertainty, and keep stock in step.
Sales & demand forecast
Daily units · observed sales and the path ahead
Product outlook
From predicted demand to your next stock decision.
| Product | 30-day demand | Expected value | Test error | Stock plan |
|---|
Planning signals
ACTIONABLEYour stock signals will appear here.
Stock with a plan.
Set available stock, supplier lead times, and a safety-cover target.
Stockout dates are estimated from point forecasts, with no replenishment. They are shown only within the selected forecast horizon. These are planning estimates.
Measure the model.
Forecasts earn their place by outperforming a simple alternative.
Learn from the past. Test on what comes next.
The model is selected on two 28-day validation windows. The final 28 days are held back for an independent test. After evaluation, the selected model is refit on all available sales.
Model comparison by product
Results on the independent final 28-day test.
| Product | Selected model | Regression WAPE | Weekly WAPE | Selected MAE | Range coverage |
|---|
Calendar regression
A Ridge regression learns a trend and weekday patterns. Annual Fourier terms are enabled only when the initial training window includes a full year. The intercept is not regularised.
L2 penalty α = 3 · non-negative predictionsWeekly baseline
The final observed week repeats into the forecast. It is a useful benchmark that can win when a more complex model does not improve validation errors.
Seasonal naïve · 7-day cycleAn honest planning range
Bounds use the 80th percentile of absolute validation errors. Coverage is measured on the final test. Summed product bounds are a planning envelope, not an 80% portfolio confidence interval.
No claim of guaranteed future coverageYour data, your forecast.
Daily sales in. A transparent, evaluated forecast out.
Bring your sales history.
Drop a CSV here or choose a file. Processing stays in this browser; your sales aren’t sent to a forecasting server.
Download sample sales CSV Up to 30,000 rows · 50 products · 8 MBA simple, daily format
| date | product | units | unit_price |
|---|---|---|---|
| 2026-10-01 | Product A | 24 | 129 |
| 2026-10-02 | Product A | 31 | 129 |
| 2026-10-03 | Product A | 0 | 129 |
- date, product, units are required. Unit price is optional.
- Use YYYY-MM-DD and at least 140 continuous daily observations per product.
- All products must share the same final date. Missing days are flagged.
- Duplicate product/date rows are summed. Zero means known zero sales.
- Units and prices must be non-negative. Returns need separate treatment.
Active dataset
Synthetic demonstration data
| Product | Daily records | First date | Last date | Latest unit price | Seasonality |
|---|
Reloading restores demo data. Stock settings are stored locally in this browser. Synthetic demo prices, stock levels, and sales patterns are invented for the project.
Meet SalesCast-AI.
A complete sales forecasting and inventory-planning project.
A better forecast starts
with a fair test.
Explore a fictional six-product business, bring your own daily sales, and see how a learned forecast compares with simply repeating last week.
Try it in four steps
- Explore the demo.
Choose a product and a 14-, 30-, 60-, or 90-day forecast. Hover over the chart for daily values.
- Inspect the evidence.
Open Model performance. Compare error against the weekly baseline and check test-period range coverage.
- Plan stock.
Change stock, lead time, and safety-cover days. Review order quantities and estimated stockout dates.
- Bring your own sales.
Use the sample CSV format, import continuous daily records, and export the forecasts for analysis.
What’s in the project
Forecast charts, CSV import, model evaluation, and inventory planning.
Data generation, scikit-learn models, honest validation, and evaluation plots.
Fixed seed, documented assumptions, and cross-language verification fixtures.
Architecture, methodology, formulas, experiments, and limitations.
python -m http.server 8000 --directory distThen open http://localhost:8000. No API key is required.