Back to Projects

Healthcare operations analytics

Emergency Department Patient Flow Optimization & Wait Time Prediction System

Analyzed emergency department operational bottlenecks and developed predictive models to forecast provider wait times using SQL, Python, and Tableau.

SQLPythonTableauMachine Learning

Median wait to provider

0 min

Throughput uplift (simulated)

0%

Model ROC-AUC (holdout)

0.00

Encounters modeled

0.0k

Case study

Project overview

This initiative analyzes Emergency Department patient flow to surface operational bottlenecks that drive wait times and extended length of stay. The work pairs descriptive analytics on real-time flow with predictive models for delay risk and staffing simulations to stress-test throughput improvements before they reach the front line.

Clinical operations context

Hospital overcrowding & demand pressure

When arrivals outpace staffed beds and downstream capacity, EDs absorb systemic strain: boarding, diversion, and care in non-ideal spaces. Crowding amplifies queueing at triage, diagnostics, and disposition—making wait times a barometer of both ED performance and hospital-wide flow constraints.

Operational inefficiencies in ED workflows

Patient flow is rarely linear. Handoffs, duplicate assessments, lab and imaging turnaround, bed assignment delays, and uneven provider workloads create micro-bottlenecks. Without a unified view of timestamps and queues, leaders optimize anecdotes instead of measurable process waste.

Impact of delays on outcomes & throughput

Prolonged waits correlate with left-without-being-seen, patient dissatisfaction, and—in vulnerable populations—heightened clinical risk. Operationally, delays erode effective throughput: fewer patients can be safely seen per shift, length of stay rises, and revenue cycle timing slips when disposition and documentation lag.

Why predictive operational analytics matters

Reactive staffing and static targets struggle in volatile demand. Predictive operational analytics connects historical flow patterns to forward-looking risk—supporting data-informed staffing, bed planning, and improvement prioritization aligned with patient safety and access goals.

Solution focus

The analytics stack extends from bottleneck identification into decision support: who is likely to stall, and what operational levers move the needle on throughput?

Predictive analytics for excessive delay risk

Machine learning models stratify encounters by risk of excessive triage-to-provider delays or prolonged ED stay—surfacing cases for proactive queue management, care-team awareness, and targeted operational follow-up rather than only retrospective reporting.

Staffing simulations & throughput optimization

Scenario-based staffing and intake simulations evaluate coverage changes, role redesign, and parallel processing ideas against historical demand. Leaders can compare projected wait-time and throughput effects before committing resources, grounding operational improvements in quantified trade-offs.

Data model

Healthcare data architecture

A normalized ED operations schema links patients and providers to encounters, granular flow events, and encounter-level outcomes. Primary keys anchor each entity; foreign keys stitch the visit timeline for analytics and ML features.

Primary key (PK)Foreign key (FK)Arrows: child row references parent PK

Click a table to highlight its relationships. Click again to reset.

patient_idattending_provider_idencounter_idencounter_idprovider_id (nullable)patients: click to highlight relationshipspatientsPK patient_iddob, sex, zip…providers: click to highlight relationshipsprovidersPK provider_idrole, specialty…encounters: click to highlight relationshipsencountersPK encounter_idFK patient_idFK attending_provider_idarrival, triage, disposition…flow_events: click to highlight relationshipsflow_eventsPK event_idFK encounter_idFK provider_id (opt.)event_type, event_ts…outcomes: click to highlight relationshipsoutcomesPK outcome_idFK encounter_idlos_min, wait_provider_min…

How this schema powers the analysis

Patient movement

Sequential flow_events tied to each encounter_id reconstruct the ED journey—triage, bed, imaging, provider touchpoints—so analysts can replay paths and segment cohorts.

Wait times & length of stay

Timestamps on encounters and flow_events yield triage-to-provider intervals, door-to-disposition LOS, and boarding time; outcomes consolidates derived metrics for reporting and modeling.

Operational bottlenecks

Joining flow volume to queue depth by event_type and location exposes where dwell time spikes—supporting targeted workflow and capacity interventions.

Predictive modeling

Encounter-level features plus early flow_events feed delay-risk models; outcomes stores labels and scores for calibration, validation, and monitoring drift.

Pipeline

Data cleaning & preprocessing

The ED operations dataset is intentionally realistic: missing timestamps, duplicate keys, messy categorical strings, and long-tail wait times. Cleaning rules balance statistical rigor with operational plausibility so downstream SQL aggregates, Python feature engineering, and models reflect how a real flow team would govern the data.

~1.2M

flow_events evaluated

42

documented cleaning rules

97.8%

rows retained for analytics

Before / after — data quality at a glance

Illustrative rates from the simulated ED pipeline; your production run would log actual counts from each rule version.

Rows with usable triage timestamp

Before88%
After99%

Encounters passing sequence validation

Before79%
After99%

Canonical ESI / disposition codes

Before91%
After100%
AreaIssueBeforeAfterApproach
Triage & flow timestampsNULL or out-of-order event_ts in flow_events11.8% rows with missing/invalid time0.9% retained nulls (documented)COALESCE from source feed; forward-fill from prior event; drop impossible pre-arrival times
Encounter grainDuplicate encounter_id from ETL replays624 duplicate encounter rows1 row per encounter_idROW_NUMBER() PARTITION BY encounter_id ORDER BY ingest_ts; keep rn = 1
DemographicsImpossible patient ages (data entry / test patients)142 encounters age < 0 or > 1150 invalid ages in modeling setInner join to patients WHERE age BETWEEN 0 AND 115; flag excluded rows for audit
Clinical / ops codesMixed ESI & disposition strings ("esi-2", "2", "II")9.3% non-canonical category values100% mapped to reference codesCASE + trim/upper + reference map table; unresolved → ‘UNKNOWN’ + QA queue
Event chronologyNon-monotonic sequences (discharge before triage)2.1% encounters fail sequence rules0.4% quarantined for manual reviewLAG/LEAD checks per encounter_id; invalidate or reorder only when source confidence high
Wait timesExtreme triage-to-provider minutes (sensor glitches)Upper tail > 24h for 0.35% rowsWinsorized + flag for model featuresIQR (1.5×) + clinical cap (e.g. 720m); retain raw in shadow column for traceability

SQL — cleaning & integrity checks

Server-side rules catch grain and chronology problems early; results feed curated views for BI and export slices for Python.

Duplicate encounters & latest ingest

Deduplicate + keep newest ingestsql
WITH ranked AS (
  SELECT
    encounter_id,
    patient_id,
    arrival_ts,
    ingest_ts,
    ROW_NUMBER() OVER (
      PARTITION BY encounter_id
      ORDER BY ingest_ts DESC NULLS LAST, arrival_ts DESC
    ) AS rn
  FROM raw_ed.encounters
)
SELECT encounter_id, patient_id, arrival_ts
FROM ranked
WHERE rn = 1;

Event sequence validation (triage before provider)

Flag non-monotonic flowsql
SELECT
  e.encounter_id,
  BOOL_OR(f.event_ts < e.triage_ts) AS has_pre_triage_event,
  BOOL_OR(
    f.event_type = 'PROVIDER_FIRST_CONTACT'
    AND f.event_ts < e.triage_ts
  ) AS impossible_provider_before_triage
FROM curated.encounters e
JOIN curated.flow_events f ON f.encounter_id = e.encounter_id
GROUP BY e.encounter_id
HAVING BOOL_OR(f.event_ts < e.triage_ts);

Outlier wait times (clinical cap + IQR)

Cap + flag extreme triage-to-providersql
WITH w AS (
  SELECT
    encounter_id,
    TIMESTAMPDIFF(MINUTE, triage_ts, first_provider_ts) AS wait_min
  FROM curated.encounters
  WHERE first_provider_ts IS NOT NULL
),
stats AS (
  SELECT
    wait_min,
    PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY wait_min) AS q1,
    PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY wait_min) AS q3
  FROM w
)
SELECT
  w.encounter_id,
  w.wait_min,
  CASE
    WHEN w.wait_min > 720 THEN 1
    WHEN w.wait_min > (stats.q3 + 1.5 * (stats.q3 - stats.q1)) THEN 1
    ELSE 0
  END AS wait_outlier_flag
FROM w CROSS JOIN stats;

Note: replace PERCENTILE_CONT with your warehouse dialect (e.g. APPROX_QUANTILES in BigQuery, subquery percentiles in MySQL).

Python (pandas) — preprocessing

Pandas handles type coercion, category maps, and row-level diagnostics before scikit-learn feature matrices.

Types, missing timestamps, categorical map

Load + clean core entitiespython
import pandas as pd

enc = pd.read_csv("encounters.csv", parse_dates=["arrival_ts", "triage_ts", "first_provider_ts"])
flow = pd.read_csv("flow_events.csv", parse_dates=["event_ts"])
pat = pd.read_csv("patients.csv")

# Invalid ages removed for analytics cohort
pat = pat[(pat["age"] >= 0) & (pat["age"] <= 115)]

esi_map = {"esi-2": "2", "2": "2", "II": "2", "esi 3": "3", "THREE": "3"}
enc["esi_level"] = enc["esi_raw"].str.strip().str.lower().map(esi_map).fillna("UNKNOWN")

# Missing triage: borrow first in-ED event after arrival (operational proxy)
flow = flow.sort_values(["encounter_id", "event_ts"])
first_ed = flow.loc[flow["event_type"].eq("IN_ED")].groupby("encounter_id")["event_ts"].min()
enc["triage_ts"] = enc["triage_ts"].fillna(enc["encounter_id"].map(first_ed))

enc = enc.drop_duplicates(subset=["encounter_id"], keep="last")

Per-encounter sequence check

Validate monotonic eventspython
g = flow.groupby("encounter_id")["event_ts"]
viol = g.apply(lambda s: s.is_monotonic_increasing)
bad = viol[~viol].index

flow["wait_min_from_triage"] = (
    flow.merge(enc[["encounter_id", "triage_ts"]], on="encounter_id", how="left")
    .assign(delta=lambda d: (d["event_ts"] - d["triage_ts"]).dt.total_seconds() / 60.0)
)["delta"]

# Winsorize for modeling while keeping raw for audit
cap = flow["wait_min_from_triage"].quantile(0.995)
flow["wait_min_winsor"] = flow["wait_min_from_triage"].clip(upper=cap)

Operational data validation logic

  • 1Arrival anchor: every flow_event must fall between arrival_ts and COALESCE(discharge_ts, NOW()) for the same encounter (with a small clock-skew tolerance).
  • 2One patient per encounter: patient_id is constant across all child tables; mismatches reject the batch.
  • 3Provider scope: optional provider_id on events must exist in providers or be null (system events).
  • 4Business closed loop: rows failing validation are written to a quarantine table with rule_id and snapshot hash—ops can reconcile against source extracts without mutating raw landing data.

Analytics engineering

SQL analytics showcase

Representative SQL used on curated ED operations data to quantify bottlenecks affecting wait times and length of stay. Each tab pairs operational insight with query patterns you can adapt to your warehouse dialect.

Reconstruct the ED path from raw events to see where patients stall before disposition—foundation for every bottleneck metric.

Path reconstruction

Ordered flow_events by encounter_id expose triage → bed → diagnostics → provider → disposition sequences for cohort comparisons.

Ops lens

Segmenting paths by ESI and arrival hour shows which journey shapes drive median dwell, not just average census.

Query library

Dialect notes: examples mix ANSI-style functions with MySQL-style TIMESTAMPDIFF; swap to your warehouse equivalents (e.g. DATEDIFF, DATEADD, BigQuery TIMESTAMP_DIFF).

Encounter journey with dwell between milestones

Uses LEAD to compute minutes between consecutive operational events; surfaces longest intra-visit gaps per encounter.

-- Patient flow: time between consecutive ED events
WITH ordered_events AS (
  SELECT
    encounter_id,
    event_type,
    event_ts,
    LEAD(event_ts) OVER (
      PARTITION BY encounter_id ORDER BY event_ts, event_id
    ) AS next_ts
  FROM curated.flow_events
  WHERE event_ts IS NOT NULL
)
SELECT
  encounter_id,
  event_type,
  TIMESTAMPDIFF(MINUTE, event_ts, next_ts) AS dwell_minutes_until_next
FROM ordered_events
WHERE next_ts IS NOT NULL
ORDER BY encounter_id, event_ts
LIMIT 500;

Disposition mix by flow pattern

Aggregates where discharged patients spent the most cumulative time—ties pathway shape to exit workload.

SELECT
  f.event_type,
  COUNT(DISTINCT e.encounter_id) AS encounters,
  AVG(TIMESTAMPDIFF(MINUTE, e.arrival_ts, e.discharge_ts)) AS avg_los_min
FROM curated.encounters e
JOIN curated.flow_events f
  ON f.encounter_id = e.encounter_id
WHERE e.disposition IN ('HOME', 'ADMIT', 'TRANSFER')
GROUP BY f.event_type
ORDER BY avg_los_min DESC;

Exploratory analysis

Operational bottleneck discovery

EDA on curated ED operations data links arrival pressure, queue shapes, and acuity mix to where delays and LOS stretch. The views below are illustrative of the analytic cuts used to prioritize throughput improvements (connect your warehouse or export to refresh with live numbers).

ED arrival pattern (by hour)

Bimodal peaks mirror day vs evening surges—capacity planning starts here.

Triage-to-provider wait distribution

Right-skewed tail flags where operational interventions (parallel processing, intake) matter most.

Length of stay trend (median & P90)

Rising P90 with flat median often signals boarding or downstream capacity—not just front-door delays.

Throughput bottleneck — median dwell between milestones

Longest segments between operational events highlight where flow engineering pays off.

Provider workload vs average wait

Higher volume with disproportionate waits can signal paneling, handoff friction, or uneven support.

Patient acuity mix over time (ESI bands)

Shifts toward higher acuity increase expected waits even when arrival counts look stable.

Busiest hours × median triage-to-provider delay

Darker cells = longer typical waits when arrivals concentrate—useful for staffing and intake redesign.

Lower delayHigher delay
0
4
8
12
16
20
Sun
Mon
Tue
Wed
Thu
Fri
Sat

How this EDA ties to bottlenecks

  • Align arrival peaks with delay heatmaps to test whether waits are demand-driven vs process-driven.
  • Use dwell rankings to prioritize imaging, lab, and bed workflows before adding net-new staffing.
  • Compare provider workload bars with wait tails to separate individual variation from systemic congestion.

Predictive analytics

Machine learning — delay risk & wait-time forecasting

A Random Forest regressor in Python flags encounters at elevated risk of prolonged provider wait times and supports operational forecasting for staffing and intake—linking predictions to healthcare throughput optimization initiatives.

Random Forest regressionDelay risk predictionOperational forecastingThroughput optimization

Machine learning workflow

End-to-end path from curated ED features to delay-risk scores and wait-time forecasts used for operational forecasting.

01

Define outcome

Regression target: triage-to-first-provider minutes; binary risk flag for prolonged delays.

02

Cohort & leakage guard

Train only on signals available at triage time; hold out recent weeks for temporal validation.

03

Feature engineering

Volume, hour, acuity, workload, staffing—normalized and windowed for stable trees.

04

Random Forest fit

Ensemble of depth-limited trees; robust to nonlinear ED dynamics and interaction effects.

05

Evaluate & calibrate

MAE / RMSE / R² on holdout; threshold sweep for operational precision–recall trade-offs.

06

Ops handoff

Scores to queue dashboards + staffing sim inputs for throughput optimization.

Feature engineering

Features are constrained to information realistically available at triage to avoid optimistic leakage; rolling windows capture short-horizon congestion.

Patient volume

Rolling 1h / 4h ED census and arrival counts; z-scored within site-hour for comparability.

Hour of arrival

Cyclical encoding (sin/cos) plus bucket flags for night/weekend surge patterns.

Acuity level

ESI ordinal mapping and high-acuity indicator for expected service intensity.

Provider workload

Concurrent encounter proxy and recent provider panel minutes from flow_events.

Staffing levels

Nurse FTE on pod vs arrivals; captures understaffed intervals correlated with delays.

Interaction terms

Tree-based model learns volume × acuity and hour × staffing without explicit manual crosses.

Feature importance (Gini)

Aggregated mean decrease in impurity from the fitted forest—directionally consistent with EDA bottleneck themes.

Training / testing split

Chronological split: last 20% of encounter-days held out as test to mimic deployment on future shifts and reduce temporal leakage.

Train94,712 rows
Test23,678 rows
80% · model fitting & tuning20% · unbiased metrics

Prediction pipeline

Batch scoring path suitable for nightly refresh or near-real-time micro-batches from the ED feature store.

CuratedfeaturesSQL + pandasTransformpipelineImpute · scale · encodeRandom Forestregressor500 trees · depth capPredictionsWait min · risk scoreOperationsQueue · staffing sim

Holdout prediction metrics

Illustrative test-set performance for wait-time regression; high-risk classification metrics can be layered via thresholding predicted minutes.

MAE (test)

6.4 min

Mean absolute error on triage-to-provider wait.

RMSE (test)

8.9 min

Penalizes large misses on long-tail waits.

R² (test)

0.87

Explained variance on holdout week slice.

High-risk precision@50

0.78

Top 50 daily risk scores: share truly breaching SLA.

Operations intelligence

Staffing simulation & throughput optimization

Scenario models stress-test staffing adjustments against historical arrival curves and ML-informed wait distributions—quantifying projected throughput gains and wait-time reductions before operational spend.

Modeled wait improvement

↓ 11%

Avg triage-to-provider (24h profile)

Evening throughput lift

+17%

Patients / provider-hour (evening block)

Scenario modeling

Select a staffing scenario to refresh projections. Baseline holds roster constant; modeled runs apply hour-specific capacity multipliers informed by the wait-time ML layer.

Projected wait times — baseline vs scenario

Hourly triage-to-provider minutes: gray = baseline capacity, blue = selected scenario (evening relief visible 4p–12a when applicable).

Modeled 11% lower average wait vs baseline profile

Throughput simulation (by shift block)

Patients completed per provider-hour proxy—scenario lifts the evening block when incremental coverage is applied.

Provider workload balancing

Utilization index by pod before vs after scenario—narrower spread indicates better balance across teams.

Operational forecasting — arrivals vs staffed capacity

Fourteen-day forward view: modeled arrivals vs effective capacity (baseline gray band vs scenario uplift). Use for bed huddles and premium labor requests.

Executive analytics

Tableau dashboard showcase

Interactive Tableau storytelling for ED operations: wait dynamics, LOS, throughput, LWBS, provider workload, and bottleneck indicators—packaged for huddles and executive readouts.

Key performance indicators

Illustrative KPI tiles mirroring the workbook; replace with live calculations from your published Tableau extracts.

Avg wait time

41 min

Triage → first provider (rolling 7d)

−6% vs prior period

Patient length of stay

3.1 hrs

Median ED LOS, dispositioned cohort

Stable vs target band

Throughput efficiency

3.2

Patients completed / prov-hour (proxy)

+0.4 vs baseline week

LWBS rate

2.4%

Left without being seen (rolling)

−0.3pp vs peak surge

Provider workload

0.86

Panel intensity index (0–1 scale)

Within balanced band

Bottleneck index

Imaging

Top dwell segment vs triage benchmark

Flagged for ops review

Interactive dashboard carousel

Swipe or use arrows to move between the embedded workbook, static captures for recruiters, and drill-down framing. Swap the embed URL in data/projects.ts (links.tableau) when your ED flow workbook is published.

Slide 1 of 3 · Live embed

Live Tableau preview

Embedded Tableau Public — use full screen in Tableau for filters and download.

Loading dashboard...

Case synthesis

Key insights & operational recommendations

Evidence-backed themes from analytics, modeling, and simulation—framed for executive sponsors and operations leaders responsible for throughput, access, and workforce planning.

Key insights

What the data consistently showed

  • Evening surge drives peak delays

    The longest triage-to-provider and door-to-disposition intervals concentrated when arrivals overlapped reduced coverage—validating evening surge as the primary delay window.

  • Provider workload and waits move together

    Higher concurrent panels and touch density correlated with longer waits—not solely census—suggesting queue management and role clarity matter as much as raw volume.

  • Lower-acuity patients still saw throughput drag

    ESI 4–5 cohorts experienced disproportionate dwell between milestones—signaling process friction (bed, imaging, disposition) rather than only acuity-driven service time.

  • Staffing levels shaped waits and LOS projections

    Simulation runs showed the strongest lift in median wait and LOS when evening coverage and triage surge aligned with forecasted demand—capacity policy is a first-class lever.

Operational recommendations

Prioritized levers for leadership consideration

  • Optimize provider scheduling during peak hours

    Align attending and APP coverage with hour-of-week arrival risk; pair with real-time queue depth triggers for discretionary flex staffing.

  • Implement fast-track workflows for low-acuity patients

    Dedicated intake and parallel processing for ESI 4–5 reduces non-value dwell; measure with segment-specific LOS and LWBS watch metrics.

  • Use predictive delay flagging for operational monitoring

    Promote model scores into huddle boards and escalation paths—focus on top-decile risk rather than raw predictions to avoid alert fatigue.

  • Improve staffing allocation using throughput forecasting

    Tie roster decisions to forecast arrivals, P90 wait targets, and LWBS guardrails; re-run scenarios after each major workflow change to keep plans honest.

Recommendations should be validated with clinical operations, nursing leadership, and finance before implementation; use this section as the executive narrative spine for your steering deck.

Project outcomes

Measurable impact on ED flow intelligence

Deliverables connect analytics engineering, machine learning, and simulation to leadership-ready outcomes—bottleneck clarity, risk detection, and throughput uplift under realistic staffing constraints.

What we delivered

Operational bottlenecks mapped

Ranked ED dwell segments and queue hotspots—imaging, bed assignment, and disposition—to focus improvement cycles on measurable flow constraints.

Predictive delay risk in production

Random Forest scoring flags high-risk encounters for proactive monitoring, complementing retrospective Tableau views.

Staffing simulations for throughput

Scenario modeling quantified projected wait and LOS compression before funding incremental evening and triage surge coverage.

Drivers of wait & LOS explained

Multivariate view tied hour, volume, acuity, workload, and staffing to prolonged waits—closing the loop between analytics and operations.

Executive KPIs

Illustrative portfolio metrics; replace with your audited study numbers. Counters run when this section enters the viewport (once).

Bottleneck categories ranked

0

Top dwell segments prioritized for ops

Holdout model R²

0.00

Wait-time regression (test slice)

Projected median wait ↓

0%

Evening staffing scenario vs baseline

Staffing scenarios tested

0

Roster + triage surge combinations

Operational metrics (study scope)

Encounters modeled

118,390

Flow events analyzed

1.24M

Data quality rules applied

42

Throughput improvement trajectory

Indexed throughput (100 = discovery baseline) as analytics, ML, and staffing layers compound.

Evening block — indexed before vs after

All metrics scaled to baseline = 100 so throughput, wait, and LOS improvements are comparable on one axis (illustrative simulation uplift, +1 attending 4p–12a).

Reflection

What I learned

This project deepened how I connect technical rigor to front-line operations. The lessons below are the threads I would carry into the next ED throughput initiative—or any high-stakes healthcare analytics engagement where access, safety, and workforce pressure intersect.

01

Emergency Department operations analytics

ED analytics is as much about narrative and timing as it is about metrics. Stakeholders experience crowding in hours and handoffs, not in row counts—so every chart had to answer “what should we do before the next surge?” Anchoring visuals to triage-to-provider and disposition milestones made conversations with ops credible.

02

Patient flow optimization

Flow is a path, not a snapshot. Reconstructing journeys with ordered events revealed where dwell time was structural versus random noise. The biggest lesson was to resist over-aggregating: cohorting by acuity, hour, and pod kept recommendations specific enough to act on.

03

Predictive healthcare analytics

Prediction is only useful when it respects clinical and operational reality. Features had to be available at decision time, labels had to avoid optimistic leakage, and model outputs had to be explainable enough for a charge nurse to trust. Treating risk scores as queue-management signals—not diagnoses—kept ethics and usability aligned.

04

SQL-based healthcare data modeling

Good SQL models are contracts with the business. Defining encounters, flow events, and outcomes explicitly—PKs, FKs, and grain—reduced rework between extraction, BI, and Python. Investing early in integrity checks and quarantine patterns paid off every time the source feed changed.

05

Machine learning for operational forecasting

Forecasts fail silently when nobody owns the feedback loop. Pairing Random Forest outputs with simple calibration reviews and scenario stress-tests helped leaders see models as planning inputs, not oracles. The lesson was to budget time for monitoring drift and for retraining after major workflow changes.

06

Healthcare data quality challenges

Messy timestamps and duplicate keys are not edge cases—they are the default. Building transparent cleaning rules and before/after documentation mattered as much as the analysis itself. When data quality was visible in the appendix, trust in downstream dashboards improved markedly.

07

Operational throughput analysis

Throughput is multi-dimensional: arrivals, completions, staffing, and acuity all move together. Combining EDA, ML risk layers, and staffing simulation let me speak both to “how bad is it now?” and “what happens if we add coverage here?”—closing the loop between measurement and decision.

The through-line: treat analytics as a shared language between data teams and people running the floor—precise enough to audit, plain enough to act on Monday morning.