TGViewer
Data Science & Machine Learning Data Science & Machine Learning @datasciencefun · 77.8K subscribers
Post #3961 4.3K
✅ Data Science Project Series Part 4: Sales Forecasting using Time Series.

Project Goal
Predict future sales using historical data.

Business Value
- Inventory planning
- Revenue forecasting
- Staffing decisions
- Strong analytics interview case

Dataset
Monthly or daily sales data. Typical columns:
- Date
- Sales
Target: Future sales values.

Key Concept
Time order matters. No random shuffling.

Tech Stack
- Python
- Pandas
- NumPy
- Matplotlib
- Statsmodels
- Scikit-learn

Step 1. Import Libraries
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.tsa.arima.model import ARIMA
from sklearn.metrics import mean_absolute_error, mean_squared_error


Step 2. Load Data
df = pd.read_csv("sales.csv")
df.head()


Step 3. Date Handling
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
# Sort by date
df = df.sort_index()


Step 4. Visualize Sales Trend
plt.plot(df.index, df['Sales'])
plt.title("Sales over time")
plt.show()

What you observe:
- Trend
- Seasonality
- Sudden spikes

Step 5. Decompose Time Series
decomposition = seasonal_decompose(df['Sales'], model='additive')
decomposition.plot()
plt.show()

Insight
- Trend shows long-term growth
- Seasonality repeats yearly or monthly

Step 6. Train Test Split
Split by time.
train = df.iloc[:-12]
test = df.iloc[-12:]

Why Last 12 months simulate future.

Step 7. Build ARIMA Model
model = ARIMA(train['Sales'], order=(1,1,1))
model_fit = model.fit() # corrected from (link unavailable)

Order meaning
- p: autoregressive
- d: differencing
- q: moving average

Step 8. Forecast
forecast = model_fit.forecast(steps=12)
print(forecast)


Step 9. Plot Forecast vs Actual
plt.plot(train.index, train['Sales'], label='Train')
plt.plot(test.index, test['Sales'], label='Actual')
plt.plot(test.index, forecast, label='Forecast')
plt.legend()
plt.show()


Step 10. Evaluation
mae = mean_absolute_error(test['Sales'], forecast)
rmse = np.sqrt(mean_squared_error(test['Sales'], forecast))
print("MAE:", mae)
print("RMSE:", rmse)

Typical results:
- RMSE depends on scale
- Trend captured well
- Peaks harder to predict

Step 11. Business Interpretation
- Underforecast leads to stockouts
- Overforecast leads to inventory waste
- Accuracy matters near peaks

Model Improvement Ideas
- SARIMA for seasonality
- Prophet for business calendars
- Add promotions and holidays

Resume Bullet Example
- Built time series model to forecast monthly sales
- Used ARIMA with rolling time-based split
- Reduced forecasting error using trend analysis

Interview Explanation Flow
- Why random split fails
- Importance of seasonality
- Error metrics selection

Mini Task for You
- Try SARIMA
- Forecast next 24 months
- Compare RMSE across models

Double Tap ♥️ For More
  • ❤ 18
More from @datasciencefun
  1. Oct 16, 2026𝗗𝗮𝘁𝗮 𝘀𝗰𝗶𝗲𝗻𝗰𝗲 𝗖𝗲𝗿𝘁𝗶𝗳𝗶𝗰𝗮𝘁𝗶𝗼𝗻 𝗪𝗶𝘁𝗵 𝗔𝗜😍 Future Ready Data Scien…
  2. Oct 15, 2026Post #4665
  3. Oct 15, 2026Post #4664
  4. Oct 15, 2026Post #4663
  5. Oct 15, 2026Post #4662
  6. Oct 13, 2026𝗧𝗢𝗣 𝗙𝗥𝗘𝗘 𝗖𝗢𝗨𝗥𝗦𝗘𝗦 𝗧𝗢 𝗕𝗢𝗢𝗦𝗧 𝗬𝗢𝗨𝗥 𝗦𝗞𝗜𝗟𝗟𝗦 𝗜𝗡 𝟮𝟬𝟮𝟲! Explor…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →