EXP-05 · BI · forecasting
Next week's profit, honestly
A real engagement with a natural cosmetics brand selling in Mexico. We planned a BI rollout, extracted and unified 4 years of badly formatted spreadsheets, and modeled weekly profit. Reviewing it, I found and fixed a data leak in the model.

Question
Can a small business forecast next week's profit from 4 years of messy spreadsheets?
Problem
Income and expenses lived in yearly spreadsheets with different layouts and merged cells. There was no consolidated view to make decisions on stock, promotions or costs.
Data
The real spreadsheets (2021–2024 income and expenses, sales by channel) are not published. The repo ships `data/synthetic_weekly.csv`: 268 synthetic weeks with the same 19 columns (retail and wholesale sales, costs, advertising, margin, season, promotions, inflation, exchange rate), generated by `data/generate_synthetic.py`. No row or amount matches the real data.
Method
A project plan with WBS and Gantt (2024), scraping and unification of the 2021–2024 Excel files into a weekly dataset, EDA, and a regression model with chronological splits and TimeSeriesSplit. In 2026 I rebuilt it to predict next week's profit using only information available beforehand, compared against naive baselines.
Result
The original model reported R² = 0.885, but through data leakage: the target was effectively same-week profit and a rolling mean included it. Set up correctly on synthetic data, the honest R² is 0.37 (0.97 with the leak), with 33% lower error than repeating last week.
What I learned
Check what the target really is: 'future' profit was same-week profit.
Stack
- Python
- pandas
- scikit-learn
- statsmodels
- Power BI
- Excel
- Project management
Context
Coursework for Project Management (2024) and Professional Practicum II (2025) in the AI & Data Science program (Colegio Universitario IES · Universidad Siglo 21). The 2024 BI planning phase (proposal, WBS and Gantt) was a team effort with Lucas Ferreyra and Luca Maccarone; the data extraction, modeling and the 2026 leakage fix are my own work.