Kaleigh Unger

If the carline were a data problem

Carline: The Problem of Pain (not the C.S. Lewis one :-)

Not pulled from real data, but imagined from real carline woes. What's real is how I'd actually work it: not just the surface numbers, but digging, combining datasets, looking for patterns that weren't obvious on the first pass - data science rigor, outside-of-the-box thinking.

Stuck in carline right now? Escape into a world where getting to your kid is just the click of a button. Play →

What the raw data shows

39.2

avg. wait, minutes

82

worst single wait

101

complaints logged

30

dismissals observed

Complaints by category

61 wait time
21 lane discipline
11 communication
8 safety

Time series, not a point average

n=30. Wait time decays over the adoption period, then stabilizes - the series reaches stationarity. Baseline is the stabilized value, not the decay period.

baseline ~32 min Aug 4: 63 min avg, 82 min worst Aug 5: 61 min avg, 79 min worst Aug 6: 56 min avg, 67 min worst Aug 7: 52 min avg, 64 min worst Aug 10: 48 min avg, 62 min worst Aug 11: 45 min avg, 66 min worst Aug 12: 48 min avg, 66 min worst Aug 13: 41 min avg, 63 min worst Aug 14: 39 min avg, 53 min worst Aug 17: 36 min avg, 52 min worst Aug 18: 39 min avg, 54 min worst Aug 19: 40 min avg, 54 min worst Aug 20: 40 min avg, 57 min worst Aug 21: 34 min avg, 56 min worst Aug 24: 33 min avg, 45 min worst Aug 25: 40 min avg, 50 min worst Aug 26: 38 min avg, 51 min worst Aug 27: 32 min avg, 50 min worst Aug 28: 35 min avg, 50 min worst Aug 31: 31 min avg, 51 min worst Sep 1: 34 min avg, 53 min worst Sep 2: 36 min avg, 46 min worst Sep 3: 36 min avg, 58 min worst Sep 4: 31 min avg, 48 min worst Sep 7: 33 min avg, 44 min worst Sep 8: 34 min avg, 56 min worst Sep 9: 29 min avg, 45 min worst Sep 10: 29 min avg, 49 min worst Sep 11: 31 min avg, 47 min worst Sep 14: 31 min avg, 52 min worst day 1 day 30

Indigo = pre-stationarity (adoption period). Purple = post-stationarity (baseline). Hover or tap a bar for that day's numbers.

At face value: wait time is high, optimize the carline. Loop redesign, staggered dismissal, added lane capacity - symptom-level interventions.

Then we combined it with another dataset

Family transport preferences - not just complaints

Complaint volume is a measure of dissatisfaction, not cause. Second dataset: family-level attributes - extended-day enrollment, stated bus interest.

22

repeat-complaint families

55%

of them are also extended-day families who already want a bus

16

families total who'd take a bus today, out of 65

Complaint frequency correlates with bus-readiness, not randomly distributed across the population. Reframe: this is at least partly an unmet transport-demand problem, not a pure carline-throughput problem.

Honest footnote: a real 95% confidence interval at a ±5% margin needs roughly 384 families surveyed. This toy has 65. Real rigor means knowing your sample size before you trust your percentages - this page is a sketch of the method, not a finished study.

So - not one fix, three

Independent variables, not mutually exclusive. Toggle any combination - the projection updates.

Projected outcome for this combination

projected wait

cars removed

effort

timeline

A small example of build considerations

Three source tables, joined on a real key, rolled into a derived signal not visible in any single table.

Simplified example of joins and derivations, pared down in complexity for the sake of a demo - production-scale data carries more sources, messier keys, and higher cardinality than this.

carline_days

observed_on date

dismissal_time string

avg_wait_minutes integer

worst_wait_minutes integer

cars_in_line integer

note text

complaints

logged_on date

channel string

category string

severity integer

family_id fk → families.id

families

label string

extended_day boolean

wants_bus boolean

carpool_interested boolean

↓ JOIN complaints.family_id → families.id · aggregate carline_days as a time series ↓

family_signal (derived)

family_id

complaint_count agg

is_vocal complaint_count >= 2

extended_day, wants_bus joined

wait_trend (derived)

rolling_10day_avg

plateau_start_date first day within 15% of baseline

plateau_baseline_minutes

↓ correlate ↓

55% of vocal families are already bus-ready - a pattern invisible in any single source table, only visible after the join.
Next layer, not built: embed complaint free-text and cluster semantically instead of by hand-typed category - surfaces groupings like "wants a real alternative" vs. "just venting" that a fixed category list can't see. Same honesty rule as the search box below: this is a sketch of where the method goes next, not a claim that it's running.
Peek at 5 raw rows from carline_days ▸
Date Avg wait Worst wait Cars Field notes
Aug 4 63 min 82 min 112 Kids still working out which line is which.
Aug 5 61 min 79 min 121 Rain. Nobody wanted to walk the extra 10 feet.
Aug 6 56 min 67 min 112 Everyone's still learning where to line up.
Aug 7 52 min 64 min 104 Staff still working out the choreography too.
Aug 10 48 min 62 min 118 Everyone's still learning where to line up.

Full 30-day log is in the export.

Search the log

Keyword + synonym search, not real semantic search - the natural next step once this points at a real vector-capable store instead of a hand-typed table.