Class Capacity Lab
Open Gym Digital Twin · Module 1 · ObserveGemelo Digital de Gimnasio · Módulo 1 · Observar

A booked place is not an occupied place.

Una plaza reservada no es una plaza ocupada.

Group classes are planned around bookings, but revenue, coaching time and member experience depend on who actually shows up. This lab measures the gap between booked demand and realized attendance, tests which operational variables travel with it, and defines the data a real gym would need to forecast and manage capacity.

Las clases grupales se planifican con base en reservas, pero los ingresos, el tiempo del coach y la experiencia del socio dependen de quién llega de verdad. Este laboratorio mide la brecha entre la demanda reservada y la asistencia real, prueba qué variables operativas la acompañan y define los datos que un gimnasio real necesitaría para predecir y gestionar su capacidad.

One class, 40 placesUna clase, 40 plazas
40bookedreservadas 12attendedasistieron 28emptyvacías
Illustration scaled from 1,500 bookings: 30% attendance.Ilustración a escala de 1.500 reservas: 30% de asistencia.
30.3%of 1,500 bookings ended in attendancede 1.500 reservas terminó en asistencia
r = 0.49membership tenure vs. attendance, the strongest signalantigüedad vs. asistencia, la señal más fuerte
r ≈ 0.02booking lead time, essentially no linear signalanticipación de la reserva, sin señal lineal
1,000synthetic member profiles for preference analysisperfiles sintéticos para analizar preferencias
01

The operational problem

El problema operativo

When a class shows full, members join waitlists or give up. When half of those places stay empty, the club has turned members away from capacity it already paid for. Airlines and clinics manage the same tension with no-show forecasting and controlled overbooking, but those tools only work when attendance is measured per session and the forecasts are calibrated.

Cuando una clase aparece llena, los socios entran a lista de espera o desisten. Cuando la mitad de esas plazas queda vacía, el club ha rechazado socios con una capacidad que ya estaba pagando. Aerolíneas y clínicas gestionan esta misma tensión con predicción de no-shows y sobreventa controlada, pero esas herramientas solo funcionan si la asistencia se mide por sesión y las predicciones están calibradas.

This milestone is deliberately descriptive: before predicting anything, establish what the data can and cannot say.

Este hito es deliberadamente descriptivo: antes de predecir nada, hay que establecer qué pueden decir los datos y qué no.

Dataset A · GoalZoneDataset A · GoalZone

Booked vs. attended

Reservadas vs. asistidas

1,500 public booking records across HIIT, Cycling, Strength, Yoga and Aqua. Non-attendance mixes cancellations and no-shows; the source cannot separate them.

1.500 registros públicos de reserva en HIIT, Ciclismo, Fuerza, Yoga y Aqua. La inasistencia mezcla cancelaciones y no-shows; la fuente no permite separarlos.

02

What the evidence shows

Lo que muestra la evidencia

Every number below comes with an effect size, a bootstrap interval (1,000 resamples) and a plain-language reading in the dashboard.

Cada número viene con un tamaño del efecto, un intervalo bootstrap (1.000 remuestreos) y una lectura en lenguaje simple dentro del dashboard.

Finding 1 · TenureHallazgo 1 · Antigüedad

Who attends is mostly about how long they have been a member

Quién asiste depende sobre todo de cuánto tiempo lleva como socio

Point-biserial r = 0.486 (95% bootstrap 0.452–0.525). A gradient this steep is far stronger than most real-world adherence studies report, so it may partly reflect how this educational dataset was built, and survivorship: long-tenure members are, by definition, the ones who stayed.

r punto-biserial = 0,486 (bootstrap 95%: 0,452–0,525). Un gradiente tan marcado es mucho más fuerte que lo reportado por la mayoría de estudios reales de adherencia; puede reflejar en parte cómo se construyó este dataset educativo, y el sesgo de supervivencia: los socios antiguos son, por definición, los que se quedaron.

Finding 2 · CompositionHallazgo 2 · Composición

Class rankings change once you compare like with like

El ranking de clases cambia al comparar grupos equivalentes

Raw rateTasa brutaSame tenure mix (direct standardization)Misma mezcla de antigüedad (estandarización directa)20% — 40%

Aqua leads the raw rates; HIIT leads after standardization. Category explains little overall (Cramér’s V = 0.05). Part of what looks like a “class effect” is who books the class.

Aqua lidera las tasas brutas; HIIT lidera tras estandarizar. La categoría explica poco en general (V de Cramér = 0,05). Parte de lo que parece un “efecto de la clase” es quién la reserva.

InteractiveInteractivo

Pick a member’s tenure. Watch who shows up.

Elige la antigüedad del socio. Mira quién llega.

3.4%

Months of membership

Meses de membresía

3

The AM advantage shrinks and becomes uncertain

La ventaja de la mañana se reduce y se vuelve incierta

AM 31.6% vs. PM 26.2%. With a common tenure mix the gap falls to 4.0 points and the 95% interval crosses zero. Not enough to move classes.

AM 31,6% vs. PM 26,2%. Con una mezcla común de antigüedad la brecha baja a 4,0 puntos y el intervalo del 95% cruza el cero. No alcanza para mover clases.

4

Booking further ahead doesn’t predict attendance

Reservar con más anticipación no predice asistencia

r = 0.024 (−0.022 to 0.074). Clinical no-show research finds the opposite, so this is a gap worth testing with real timestamps. Hover a point for its count.

r = 0,024 (−0,022 a 0,074). La investigación clínica de no-shows encuentra lo contrario: una diferencia que vale la pena probar con marcas de tiempo reales. Pasa el cursor por un punto para ver su conteo.

5

Weekday patterns are small and fragile

Los patrones por día son pequeños y frágiles

Wednesday stands out (20.7%, n = 116), but the overall association is small (V = 0.07) and schedule cohorts are not sessions.

El miércoles destaca (20,7%, n = 116), pero la asociación global es pequeña (V = 0,07) y las cohortes de horario no son sesiones.

6

Personal training and classes overlap, but not as cross-sell evidence

El PT y las clases se superponen, pero no prueban venta cruzada

1,000 synthetic profiles (CC0). The strongest class pair, Pilates → Yoga, has lift 1.12 with an interval of 0.71–1.53 that includes 1.

1.000 perfiles sintéticos (CC0). El par de clases más fuerte, Pilates → Yoga, tiene lift 1,12 con intervalo 0,71–1,53 que incluye el 1.

↗

Explore every number yourself

Explora cada número por tu cuenta

Filter cohorts by class, weekday and time. Every coefficient comes with a plain-language meaning, an operational implication and the method behind it.

Filtra cohortes por clase, día y franja. Cada coeficiente viene con su significado en lenguaje simple, su implicación operativa y el método detrás.

03

How it was built

Cómo se construyó

3 source files reconciled3 fuentes conciliadas→ Cleaning & quality logLimpieza y registro de calidad→ Descriptive rates + Wilson CIsTasas descriptivas + IC de Wilson→ Effect sizes + bootstrapTamaños del efecto + bootstrap→ Tenure standardizationEstandarización por antigüedad→ Offline dashboardDashboard offline

Right statistic for the data

La estadística adecuada a cada dato

Point-biserial correlation for numeric vs. binary; Cramér’s V for categorical, never arbitrary numeric codes for categories. Set-based support, confidence and lift for multi-select preferences.

Correlación punto-biserial para numérica vs. binaria; V de Cramér para categóricas, nunca códigos numéricos arbitrarios. Soporte, confianza y lift sobre conjuntos para preferencias de selección múltiple.

Uncertainty everywhere

Incertidumbre en todo

Deterministic 1,000-resample percentile bootstrap for every coefficient, Wilson intervals for rates, small-cell warnings, and intervals withheld when strata are too sparse.

Bootstrap percentil determinista de 1.000 remuestreos para cada coeficiente, intervalos de Wilson para tasas, alertas de celdas pequeñas e intervalos omitidos cuando los estratos son escasos.

Confounding before conclusions

Confusión antes que conclusiones

Direct standardization over five tenure strata and a linear partial correlation test whether schedule and lead-time patterns survive once member composition is held constant.

Estandarización directa en cinco estratos de antigüedad y una correlación parcial lineal comprueban si los patrones de horario y anticipación sobreviven al fijar la composición de socios.

What this lab does not claim.Lo que este laboratorio no afirma. No causal effects, no fitted prediction model, no utilization figures for a real club and no overbooking recommendation. Dataset B is synthetic and is never merged with Dataset A. The public site ships aggregated counts only; raw GoalZone rows are not redistributed. Sin efectos causales, sin modelo predictivo ajustado, sin cifras de utilización de un club real y sin recomendación de sobreventa. El Dataset B es sintético y nunca se combina con el Dataset A. El sitio público solo publica conteos agregados; no se redistribuyen las filas crudas de GoalZone.
04

With more data: the digital-twin roadmap

Con más datos: la hoja de ruta del gemelo digital

Each stage unlocks only when a specific kind of data exists. The literature behind each step is in the scientific discussion.

Cada etapa se desbloquea solo cuando existe un tipo de dato concreto. La literatura detrás de cada paso está en la discusión científica.

NOWAHORAObserveObservar Public bookings and profiles. Rates, effect sizes, confounding checks.Reservas y perfiles públicos. Tasas, tamaños del efecto, control de confusión.
NEEDSREQUIEREConnectConectar
  • Session IDs + capacity
  • IDs de sesión + capacidad
  • Stable member IDs
  • IDs estables de socio
  • Cancellation timestamps
  • Marcas de tiempo de cancelación
NEEDSREQUIEREPredictPredecir
  • Visit history per member
  • Historial de visitas por socio
  • Calibrated P(attend)
  • P(asistir) calibrada
  • Temporal validation
  • Validación temporal
NEEDSREQUIERESimulateSimular
  • Waitlist events
  • Eventos de lista de espera
  • Cost of empty vs. over-full
  • Costo de plaza vacía vs. sobrecupo
  • Overbooking scenarios
  • Escenarios de sobreventa
NEEDSREQUIEREDecideDecidir
  • Randomized pilots
  • Pilotos aleatorizados
  • Reminders, nudges, release rules
  • Recordatorios, nudges, reglas de liberación
  • Retention outcomes
  • Resultados de retención
05

Reproducible by design

Reproducible por diseño

Python (pandas, pyarrow) builds every table, document and the dashboard from the source CSVs. The dashboard is a single self-contained HTML file with hand-written SVG charts, keyboard-accessible, printable and usable offline. An executed public Kaggle notebook reproduces the association analysis with identical results.

Python (pandas, pyarrow) genera cada tabla, documento y el dashboard a partir de los CSV de origen. El dashboard es un único HTML autocontenido con gráficos SVG hechos a mano, accesible por teclado, imprimible y usable sin conexión. Un notebook público ejecutado en Kaggle reproduce el análisis de asociaciones con resultados idénticos.

Deliverables

Entregables

  • Interactive bilingual dashboard with cohort filters
  • Dashboard interactivo bilingüe con filtros de cohorte
  • Data dictionary, quality report and source provenance
  • Diccionario de datos, informe de calidad y procedencia de fuentes
  • Association & tenure notebook
  • Notebook de asociaciones y antigüedad
  • Metric definitions and limitations handoff
  • Definiciones de métricas y documento de limitaciones
  • Real-gym data contract (YAML) for the next milestone
  • Contrato de datos para un gimnasio real (YAML) para el siguiente hito