The Empty Chair

2025
Applied AI · Machine Learning · Ethical UX

Applied AI for predicting and preventing clinic no-shows — from data cleaning to training an interpretable model

The Problem

Every empty chair in a clinic is a missed story.

A patient who didn’t get their scan.
A parent who couldn’t arrange transport.
Someone who meant to come — but life got in the way.

Across more than 110,000 real clinic visits in Brazil (UCI Medical Appointment dataset), roughly 20% of appointments result in no-shows.

For a mid-sized clinic, that can mean €500,000–€1,000,000 in lost capacity per year.

Most systems react too late — sending generic reminders after risk has already hardened into absence.

I wanted to explore a different question:

What if we could spot risk early — and respond with support instead of blame?

My Approach

This wasn’t about building the most complex model.
It was about building the most responsible one.

I worked in Google Colab with real, messy healthcare data — keeping everything transparent and reproducible.

The goal was simple:

• Predict risk early
• Keep the system interpretable
• Design decisions that remain human-controlled
• Build ethics into the architecture itself

Working With Real Data (Carefully)

Healthcare data is never neutral.

The dataset contained socioeconomic signals, including scholarship status (welfare enrollment). I treated this not as a cause of no-show behavior, but as a possible signal of structural barriers.

It was used only to guide supportive outreach — never to restrict access.

Just as important were the features I deliberately excluded:

• Gender
• Neighbourhood

These can introduce bias without improving clinical actionability.
That decision was ethical, not technical.

Modeling Decisions

I trained a Logistic Regression model in Google Colab, choosing it deliberately over more complex alternatives.

Not because it is simple, but because it is appropriate.

Logistic Regression allows clinicians and designers to understand why risk increases or decreases. It remains stable at scale and is straightforward to validate and communicate. In healthcare contexts, interpretability is not a preference — it is a requirement.

More complex models may offer marginal performance improvements, but they reduce transparency and make it harder to explain decisions to staff, patients, or regulators.

In this project, clarity and accountability mattered more than incremental gains in predictive power.

Evaluation

With only ~20% no-shows, accuracy would be misleading.

Instead, I evaluated:

ROC-AUC (ranking quality)
PR-AUC (performance at the top of the risk list)

Results:

• ROC-AUC: 0.68
• Average Precision: 0.37

Strong enough to trust the ranking — without overstating certainty.

Designing the Decision Threshold

The threshold wasn’t treated as a technical afterthought.

I set it at ~0.35 to prioritize recall.

Why?

Missing care is expensive.
Sending an extra supportive reminder is not.

False positives are acceptable when the intervention is supportive rather than punitive.

Even more important:

The threshold is capacity-aware.

• Limited staff → raise threshold
• More capacity → lower threshold

Clinic staff can adjust the threshold themselves depending on daily capacity, workload, or operational pressure, allowing the system to adapt to real-world conditions.

The model adapts to operational reality — not the other way around.

From Risk Score → Human Decision

Clinics don’t act on numbers.

They act on decisions.

I translated the risk score into a simple action layer:

• Low risk → standard reminder
• Medium risk → early supportive message
• High risk → proactive outreach suggestion

The system suggests.
Staff decide.

Humans remain in control.

Limitations

Public data has limits.

The dataset does not include:

• Transport distance
• Weather
• Travel time
• Detailed patient history

These are meaningful attendance drivers.

Class imbalance also limits precision.

These constraints were acknowledged and documented.

What I’d Develop Next

If expanded further, I would:

• Add attendance history
• Integrate contextual signals (weather, transport friction)
• Explore advanced but interpretable models
• Remove post-intervention signals from baseline prediction
• Fully design the supportive messaging system

That messaging layer would embed:

• Public transport routes
• Travel timing
• Child care resources

Screens are conceptually designed — detailed UI would be built in the next iteration.

UX & Ethical Design Decisions

Several design principles shaped the interface layer:

• Age used in training — removed from interface (not actionable, reduces bias risk)
• Color used carefully — urgency ≠ alarm
• No automatic decisions
• No penalties
• No overbooking
• Outreach is optional and supportive

A false positive receives nothing more than a helpful message.

No one is labeled.
No one is punished.

What This Project Is Really About

People miss appointments for stacked reasons.

No single column explains it.

But when signals are combined thoughtfully — and used responsibly — they can help clinics reach the right people at the right time.

With care instead of blame.

That’s what The Empty Chair is about.

The model was trained in Google Colab and demonstrated through an interactive prototype built with Gradio, allowing live exploration of no-show risk predictions during development. The project was created as part of my Applied AI bootcamp final exam.