Report 1 End-to-end AI strategy simulation for a 5-clinic outpatient chain — no-show reduction, smart overbooking, patient segmentation, and automated reminders.
This project implements the full business strategy from Report 1: Healthcare Clinic Optimization as an interactive Streamlit dashboard. The chain currently loses ₹10.92 lakh/month to a 30% no-show rate — above India's outpatient benchmark of 15–20%. Every recommendation targets that gap without adding a single doctor, clinic, or price change.
The dashboard runs six strategy modules end-to-end, from current-state revenue analysis through a live ML-powered appointment risk scorer, and projects a 12-month path from ₹25.5L to ₹32–34L/month in recovered revenue.
| Parameter | Value |
|---|---|
| Clinics | 5 |
| Scheduled appointments/day | 200 |
| No-show rate | 30% (benchmark: 15–20%) |
| Actual patients seen/day | 140 |
| Revenue per visit | ₹700 |
| Monthly revenue lost | ₹10.92L |
| Technology cost to fix it | ₹8,000–18,000/month |
| Estimated ROI | 50–100× |
The chain is not capacity-constrained. It is engagement-constrained.
Calculates actual vs. theoretical revenue, slot utilisation, and the cost of inaction across four no-show rate scenarios (30% → 22% → 14% → 0%).
GradientBoosting classifier trained on 6,000 synthetic appointment records. Outputs a 0–1 risk score per appointment and routes it to a three-tier reminder protocol:
| Risk Band | Score | Reminders | Channel |
|---|---|---|---|
| Low | < 0.30 | 1 | |
| Medium | 0.30–0.60 | 2 | WhatsApp + SMS |
| High | > 0.60 | 3 | WhatsApp + SMS + Call |
Includes a live risk scorer — enter patient details and get an instant band and protocol recommendation.
Calculates conservative (10% cap) overbooking buffers per time band based on historical no-show rates. Runs a Monte-Carlo waitlist fill simulation across 26 working days.
Recency–Frequency–Monetary segmentation across the patient base into four behavioural cohorts — Champions, At-Risk, High No-Show, and New Patients — each with a differentiated WhatsApp engagement strategy.
Generates a full daily 200-slot reminder schedule, computes per-channel costs (WhatsApp / SMS / Call), and shows the band distribution and cascade logic.
12-month dual-axis projection (revenue + no-show rate), revenue waterfall broken down by intervention, and a full phase-target scorecard (Baseline → 3-Month → 12-Month).
| Baseline | 3 Months | 12 Months | |
|---|---|---|---|
| No-show rate | 30% | ≤ 22% | ≤ 14% |
| Patients/day | 140 | 155 | 170–176 |
| Monthly revenue | ₹25.5L | ₹29–30L | ₹32–34L |
| Slot utilisation | 70% | 77% | 85–88% |
| Revenue uplift | — | +₹3.5–4.5L | +₹6.5–8.5L |
├── healthcare.py # Streamlit dashboard (all 6 modules)
├── Healthcare Report.ipynb # Core strategy implementation (Matplotlib version)
├── README.md
└── Healthcare Clinic Optimization_Report_1.pdf # Full business report
healthcare.py is the primary deliverable — a self-contained interactive dashboard. Healthcare Report.ipynb contains the same six modules as a standalone script that generates a static PNG master dashboard.
Requirements
Python 3.9+
streamlit
plotly
scikit-learn
pandas
numpy
Install and run
git clone https://github.com/<your-username>/healthcare-clinic-optimization.git
cd healthcare-clinic-optimization
pip install -r requirements.txt
streamlit run healthcare.pyOr run the static report generator
python Healthcare Report.ipynb
# Outputs: clinic_optimization_dashboard.pngrequirements.txt:
streamlit>=1.35.0
plotly>=5.20.0
scikit-learn>=1.4.0
pandas>=2.0.0
numpy>=1.26.0
- Sidebar scenario controls — adjust no-show rate, revenue per visit, waitlist fill rate, and overbooking cap live; all charts update instantly
- Live ML risk scorer — enter 8 appointment features and receive a risk score + reminder protocol in real time
- Plotly interactive charts — hover, zoom, and export on all 10+ visualisations
- Raw data toggle — expose underlying DataFrames for any module
- Dark clinical theme — Syne + Mulish typography, teal/navy palette
Why GradientBoosting over Logistic Regression? The non-linear interaction between past no-show count, lead time, and distance is better captured by an ensemble. ROC-AUC consistently lands at 0.74–0.78 on the synthetic dataset, sufficient for risk-band routing.
Why synthetic data? The model architecture, feature set, and risk-band thresholds are production-ready. Real deployment requires substituting the synthetic DataFrame with a clinic's historical appointment export (6–12 months minimum).
Why a 10% overbooking cap? Aggressive overbooking risks wait-time complaints and patient attrition — the single highest-cost outcome for a price-sensitive patient base. The cap is parameterised and can be raised incrementally as validation data accumulates.
| Layer | Tool | Cost/Month |
|---|---|---|
| WhatsApp automation | Wati / Interakt / AiSensy | ₹2,000–5,000 |
| SMS fallback | MSG91 / Textlocal | Pay-per-message |
| Voice reminders | Exotel / Sarvam AI IVR | ₹3,000–8,000 |
| ML prediction | Google Colab / DataRobot | Free |
| CRM & segments | Zoho CRM / Airtable | Free–₹1,500 |
| Scheduling | Practo / Sheets + Zapier | Free |
| Analytics | Looker Studio | Free |
| Total | ₹8,000–18,000 |
Abhishek Sharma Strategy & Analytics Division · May 2026
All projections are model estimates based on stated operating parameters and India outpatient healthcare benchmarks. Simulation uses synthetic data representative of clinic appointment patterns.