Capstone project (MSIS, School of Information, UT Austin — 2026) analyzing EMS response performance in New York City using the FDNY EMS Incident Dispatch Data. The project decomposes the full EMS call lifecycle, compares eight machine learning models for predicting response time, and applies a DeepSurv survival model to estimate the probability of delayed ambulance arrival under different operational scenarios.
Full write-up: docs/Masters_Report.pdf
- Data source: FDNY EMS Incident Dispatch Data (NYC Open Data)
- Problem: Understand what drives EMS response time and lifecycle delays in NYC, and predict response time / arrival reliability using ML.
- Approach:
- Clean and engineer features from raw incident dispatch records (temporal, cyclical, spatial, interaction, and rolling-window features).
- Train and compare 8 models — Linear Regression, Random Forest, Gradient Boosting, XGBoost, LightGBM, MLP, LSTM, and an XGBoost+LightGBM ensemble — to predict total response time.
- Fit a DeepSurv (neural Cox proportional hazards) survival model to estimate the probability an ambulance has not yet arrived by a given time threshold, and evaluate representative scenarios (e.g. weekday rush hour vs. weekend night).
- Key result: Tree-based ensembles (LightGBM, Random Forest) substantially outperform linear and neural sequence models (R² ≈ 0.988 vs. 0.73 for linear regression). Hospital turnaround (median ≈ 40.5 min) and on-scene time (median ≈ 22.3 min) are the dominant contributors to total cycle time, not dispatch or travel time.
ems-response-time-analysis/
├── data/
│ ├── raw/ # Original EMS_Incident_Data.csv (not tracked — see Data below)
│ └── processed/ # Cleaned/engineered output (EMS_Incident_Data_Cleaned.csv, ems_data_processed.csv)
├── notebooks/
│ ├── 01_data_preprocessing.ipynb # Cleaning, filtering, dtype fixes, initial EDA
│ ├── 02_feature_engineering_eda.ipynb # Temporal/cyclical/interaction features + EDA
│ ├── 03_predictive_modeling.ipynb # 8-model comparison (LR, RF, GB, XGBoost, LightGBM, MLP, LSTM, Ensemble)
│ └── 04_survival_analysis.ipynb # DeepSurv survival model + scenario analysis
├── docs/
│ └── Masters_Report.pdf # Full written report
├── reports/
│ └── figures/ # Exported plots/figures
├── requirements.txt
├── .gitignore
└── README.md
The raw dataset (~28.7M rows) is too large for this repo and is not included. To reproduce:
- Download the EMS Incident Dispatch Data from NYC Open Data.
- Save it as
data/raw/EMS_Incident_Data.csv. - Run the notebooks in order (see below).
git clone https://github.com/Talasoolyn/ems-response-time-analysis.git
cd ems-response-time-analysis
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtRun the notebooks in order — each stage saves the data the next one needs:
01_data_preprocessing.ipynb— readsdata/raw/EMS_Incident_Data.csv, filters to severity levels 1–3, cleans/converts datetime and dtype columns, removes irrelevant dispositions, and writesdata/processed/EMS_Incident_Data_Cleaned.csv. Includes initial exploratory analysis (severity, borough, call-type distributions).02_feature_engineering_eda.ipynb— builds the full engineered feature set (cyclical encodings, interaction terms, polynomial terms, rolling/historical features), runs EDA on the engineered data, and writesdata/processed/ems_data_processed.csv.03_predictive_modeling.ipynb— temporal train/test split, feature scaling, and the 8-model comparison (Linear Regression, Random Forest, Gradient Boosting, XGBoost, LightGBM, MLP, LSTM, and the XGBoost+LightGBM ensemble), plus results visualization and feature importance/interpretability analysis.04_survival_analysis.ipynb— fits the DeepSurv survival model on the same engineered features/split, calibrates it against observed 8-minute arrival rates, and runs the two operational scenarios (weekday rush hour vs. weekend night). Reproduces its own minimal setup (load data, rebuild features, split, scale) so it can run independently of notebook 3.
| Model | RMSE | R² | MAPE |
|---|---|---|---|
| LightGBM | 0.407 | 0.988 | 0.54% |
| Random Forest | 0.407 | 0.988 | 0.24% |
| Ensemble (XGBoost + LightGBM) | 0.409 | 0.988 | 0.44% |
| Gradient Boosting | 0.409 | 0.988 | 0.40% |
| XGBoost | 0.416 | 0.988 | 0.49% |
| MLP | 0.479 | 0.984 | 2.12% |
| Linear Regression | 1.953 | 0.727 | 7.46% |
| LSTM | 3.701 | 0.019 | 54.37% |
See docs/Masters_Report.pdf for full methodology, EDA, and the DeepSurv survival scenario
analysis (weekday rush hour vs. weekend night arrival reliability).
Tal Asoolyn — MS in Information Studies, The University of Texas at Austin (2026) Supervising Committee: Shounak Roychowdhury (Supervisor), Ying Ding