Binary classification project predicting patient no-shows for HealthConnect Clinic using historical appointment and demographic data — built during the AnalystLab Africa Data Science track.
# HealthConnect-Project
---
## 📌 Problem Overview & Business Context
HealthConnect Clinic faces operational inefficiencies and financial losses caused by patients missing scheduled medical appointments. Unattended appointment slots result in:
1. **Wasted Operational Capacity:** Unused medical staff hours and clinical facilities.
2. **Delayed Patient Care:** No-shows prevent other patients on waiting lists from accessing timely healthcare.
3. **Revenue Leakage:** Unutilized time slots directly impact clinic sustainability.
### 🎯 Central Project Question
*Can HealthConnect Clinic leverage historical appointment and patient demographic data to predict, at or before booking time, whether a patient will fail to attend a scheduled appointment?*
By formulating this business problem as a **binary classification model**, the clinic can identify high-risk appointments in advance and deploy targeted intervention strategies (e.g., automated SMS/WhatsApp reminders, direct telephone follow-ups, or strategic slot overbooking).
---
## 📊 Dataset & Exploratory Data Assessment
The dataset (`HealthConnect_Appointment_Data.csv`) contains **5,000 anonymized historical records** spanning 18 distinct variables.
### 1. Data Structure & Summary Statistics
| Metric / Feature | Value / Details |
| :--- | :--- |
| **Total Record Count** | 5,000 records |
| **Unique Patients** | 1,696 patients |
| **Feature Count** | 18 columns (Numeric, Categorical, Datetime) |
| **Primary Key / ID Integrity** | `appointment_id` (0 duplicates) |
| **Target Variable Distribution** (`appointment_outcome`) | **No-Show:** 48.5% (2,423) • **Attended:** 46.3% (2,314) • **Cancelled:** 5.3% (263) |
### 2. Data Quality & Missing Value Assessment
* **`reminder_channel`** (1,366 missing / 27.3%): Structural gap. Cross-tabulation confirms missingness occurs *exclusively* when `reminder_sent == 'No'`. Standardized by imputing `'None'`.
* **`distance_to_clinic_km`** (90 missing / 1.8%): …