Time Series Forecasting Project
Part of the Data Science Roadmap
In short
Every business asks 'how much will we sell next month?'. A forecasting project shows you can respect time order, beat a simple baseline and talk honestly about uncertainty.
Apply Phase 11's forecasting skills to a real business-relevant time series, with a clear evaluation of forecast accuracy and honest communication of uncertainty.

Think of it like this
The kite shop before the festival
A kite seller doesn't order stock on a hunch. He looks at past seasons: sales climb in early January, peak just before the kite festival, then crash. He also checks which weekday the festival falls on. Forecasting is that thinking, in code, with a range instead of one number.
Watch it happen
Ten weeks of sales, split by time
1/5Weekly sales in time order. Rows can't be shuffled; order is the whole point.
The big ideas
What you need to know
Split by time
Train on the past, test on later dates. Use rolling or expanding windows for cross-validation.
Beat a naive baseline
'Same as last week' is surprisingly hard to beat. Show your model does.
Seasons and holidays
Add weekday, month and holiday features. Festivals and salary days move sales a lot in India.
Give a range
Report MAE in real units and show a likely range, not just a single line.
See it in code
Walk through the code
1import pandas as pd2from sklearn.linear_model import LinearRegression3from sklearn.metrics import mean_absolute_error4 5df = pd.read_csv("daily_sales.csv", parse_dates=["date"], index_col="date")6df["last_week"] = df["sales"].shift(7) # same weekday, a week earlier7df["dow"] = df.index.dayofweek8df = df.dropna()9 10train, test = df[:"2025-12-31"], df["2026-01-01":]11X = ["last_week", "dow"]12model = LinearRegression().fit(train[X], train["sales"])13 14print("Naive MAE:", mean_absolute_error(test["sales"], test["last_week"]))15print("Model MAE:", mean_absolute_error(test["sales"], model.predict(test[X])))1/3Features built only from the past: last week's sales and the day of the week.
A starter that splits by date and compares a model against the 'same day last week' baseline.
Save yourself the pain
Common mistakes
Oops
Using train_test_split with shuffling on daily sales data.
Do this instead
Split by date. Shuffling lets the model peek at the future and gives a fake, rosy score.
Oops
Showing one forecast line as if it's certain.
Do this instead
Show a range, explain what drives it, and say how far ahead the forecast stays useful.
Your mission
First milestone: baseline to beat
Quick check
Why compare your forecast against a 'same as last week' baseline?
Go deeper
- 1Choose a time series with a real forecasting use case (sales, demand, traffic).
- 2Compare at least two modeling approaches (e.g. ARIMA and Prophet) and justify your final choice.
- 3Present the forecast with a confidence range, not just a single predicted line.
More projects at this stop
Stuck on this topic? Ask an Insider
Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.