[Project] Tutoring Business Revenue & Risk Analysis (SQL, Python & Power BI)
- Anna's Data Journey
- 4 dni temu
- 3 minut(y) czytania

Why I worked on this project
While working in tutoring, one thing became very clear:
Not every scheduled lesson actually turns into real revenue.
At first glance, a tutoring business might look predictable - lessons are booked, schedules are full, and revenue seems easy to estimate.
But in reality, many factors disrupt this:
cancellations
no-shows
late or missing payments
This made me curious about a simple but important question:
Where is revenue actually being lost?
The business problem
Tutoring businesses operate on planned schedules, but real performance depends on what actually happens.
From a business perspective, several questions become critical:
How big is the gap between expected and actual revenue?
Which factors contribute most to revenue loss?
Are some student groups more risky than others?
Does revenue instability vary across the academic year?
Without analysing these areas, it’s easy to overestimate performance and underestimate operational risk.
How I approached the analysis
This project was inspired by my own experience running a tutoring business, where I observed how operational factors such as cancellations, no-shows and payment delays affect real revenue.
To reflect this realistically while maintaining privacy, I created a synthetic dataset in Python based on patterns observed in a real tutoring environment.
The dataset includes:
students and tutors
lesson schedules
lesson outcomes (completed, cancelled, no-show)
pricing and payments
Once the data was generated, I used SQL to analyse key business questions.
This included:
revenue distribution by lesson status
percentage contribution of each status to revenue
revenue loss by age groupmonthly patterns in disrupted lessons
expected vs actual revenue calculation
Finally, I built a Power BI dashboard to present the results in a clear and business-focused way.
The goal was not just analysis, but decision support.
What the analysis revealed
Several important patterns emerged.
First, there is a clear gap between expected and actual revenue.
Not all scheduled lessons translate into income, which creates a hidden layer of financial risk.
Second, cancellations and no-shows are the main drivers of revenue loss.
These factors have a direct and measurable impact on overall performance.
Third, revenue risk is not evenly distributed.
Certain student groups contribute more to lost revenue than others, suggesting the need for more targeted strategies.
Finally, revenue patterns vary across the academic year.
Some months show increased instability, indicating periods where the business is more vulnerable.
Why this matters from a business perspective
Without analysing operational disruptions, businesses may assume their revenue is more stable than it actually is.
This type of analysis helps organisations:
identify where revenue is being lost
understand which segments are higher risk
adjust policies around cancellations and attendance
improve forecasting and financial planning
In real-world settings, even small improvements in these areas can significantly impact profitability.
Tools used
Python (Pandas, Faker) for data generation
SQL for business analysis
Power BI for dashboard development and visualisation
Final thought
What stood out to me in this project is how much revenue loss can remain hidden behind a “full schedule”.
From the outside, everything looks fine.
But underneath, cancellations and no-shows quietly reduce performance.
This project reinforced something I’m noticing more and more:
clear business questions and structured analysis often matter more than complex models.
Want to see the technical side?
The full project - including Python notebooks, SQL queries, dataset and Power BI dashboard - is available on my GitHub.
The repository shows the complete workflow from data generation to final visualisation.
![[Project] Operational Performance & MI Reporting: Turning Service Data into Daily Decisions](https://static.wixstatic.com/media/0fb6dc8a6cb74de287f9ba00051ec135.jpg/v1/fill/w_980,h_653,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/0fb6dc8a6cb74de287f9ba00051ec135.jpg)
![[Project] Breaking into Data Analytics: UK vs Poland - A Small Job Market Analysis](https://static.wixstatic.com/media/11062b_24cfc6baabf945e0917412f4bdc80a9d~mv2_d_5616_3744_s_4_2.jpg/v1/fit/w_0,h_NaN,lg_1,q_80,usm_0.66_1.00_0.01,enc_avif,quality_auto/11062b_24cfc6baabf945e0917412f4bdc80a9d~mv2_d_5616_3744_s_4_2.jpg)
![[Project] Discount Strategy Analysis: When Discounts Start Destroying Profit (Python + Power BI)](https://static.wixstatic.com/media/11062b_e35021ea9a72475cb7e89aab183ed247~mv2.jpg/v1/fill/w_980,h_653,al_c,q_85,usm_0.66_1.00_0.01,enc_avif,quality_auto/11062b_e35021ea9a72475cb7e89aab183ed247~mv2.jpg)
Komentarze