Kaleigh Unger

If the carline were a data problem

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

What if the carline problem were a database problem...

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

Export the report ↓

39.3

avg. wait, minutes

82

worst single wait

101

complaints logged

30

dismissals observed

Complaints by category

61 wait time
21 lane discipline
10 communication
9 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 ~33 min Aug 4: 63 min avg, 82 min worst Aug 5: 61 min avg, 79 min worst Aug 6: 56 min avg, 68 min worst Aug 7: 55 min avg, 76 min worst Aug 10: 47 min avg, 60 min worst Aug 11: 42 min avg, 52 min worst Aug 12: 45 min avg, 57 min worst Aug 13: 40 min avg, 60 min worst Aug 14: 39 min avg, 53 min worst Aug 17: 42 min avg, 52 min worst Aug 18: 41 min avg, 55 min worst Aug 19: 40 min avg, 54 min worst Aug 20: 38 min avg, 60 min worst Aug 21: 41 min avg, 55 min worst Aug 24: 33 min avg, 55 min worst Aug 25: 33 min avg, 45 min worst Aug 26: 39 min avg, 49 min worst Aug 27: 31 min avg, 48 min worst Aug 28: 32 min avg, 50 min worst Aug 31: 37 min avg, 53 min worst Sep 1: 34 min avg, 49 min worst Sep 2: 31 min avg, 51 min worst Sep 3: 34 min avg, 53 min worst Sep 4: 36 min avg, 46 min worst Sep 7: 36 min avg, 58 min worst Sep 8: 31 min avg, 48 min worst Sep 9: 32 min avg, 43 min worst Sep 10: 33 min avg, 55 min worst Sep 11: 29 min avg, 45 min worst Sep 14: 29 min avg, 49 min worst day 1 day 30

Indigo = pre-stationarity (adoption period). Purple = post-stationarity (baseline). Hover a bar for values.

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

50%

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

17

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 ↓

50% 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 68 min 123 New families figuring out the flow — lots of confusion at the flagpole.
Aug 7 55 min 76 min 123 Kids still working out which line is which.
Aug 10 47 min 60 min 121 First few weeks are always like this, in theory.

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.