Бизнес-задача: определить характеристики поездки и спрогнозировать длительность поездки такси для оценки стоимости и планирования.
Техническая задача: построить модель регрессии, предсказывающую длительность поездки такси в Нью-Йорке по признакам маршрута, времени, погоды и OSRM.
Данные: NYC Taxi Trip Duration (Kaggle), обогащённые погодой, праздниками и OSRM.
taxi-trip-duration-prediction/
├── data/
│ ├── README.md # Куда положить CSV после скачивания
│ ├── train.csv # (локально, не в Git)
│ ├── weather_data.csv
│ ├── holiday_data.csv
│ ├── osrm_data_train.csv
│ └── submissions/
│ ├── test.csv
│ ├── osrm_data_test.csv
│ └── submission_gb.csv # генерируется ноутбуком
├── notebooks/
│ └── nyc_taxi_trip_duration.ipynb
├── LICENSE
├── README.md
└── requirements.txt
Подробная раскладка файлов — в data/README.md.
trip_duration: длительность поездки (секунды). При обучении:y_log = np.log1p(trip_duration).
- Признаки времени из
pickup_datetime(час, день недели, праздники). - Объединение с OSRM и погодой.
- Кодирование категорий (
OneHotEncoder,drop='first'). - Отбор: SelectKBest, 25 признаков (
f_regression). - Масштабирование: MinMaxScaler (fit на train).
- Исключена утечка:
dropoff_datetimeне используется при обучении.
- EDA и feature engineering — распределения, выбросы, географические и погодные признаки.
- Подготовка — train/val 67/33, 25 признаков, нормализация.
- Модели — линейные, полином, Ridge, деревья, Random Forest, Gradient Boosting, XGBoost.
- Сабмит —
GradientBoostingRegressor, предсказание:np.expm1(pred_log).
| Модель | RMSLE (train) | RMSLE (val) | MeAE (мин) |
|---|---|---|---|
| Линейная регрессия | 0.54 | 0.54 | — |
| Полином 2-й степени | 0.47 | 0.69 | — |
| Ridge (α=1) | 0.48 | 0.48 | — |
| Decision Tree (default) | 0.00 | 0.57 | — |
| Decision Tree (depth=12) | 0.41 | 0.43 | — |
| Random Forest | 0.40 | 0.41 | — |
| Gradient Boosting | 0.37 | 0.39 | 1.8 |
| XGBoost | — | ~0.39 | — |
- RMSLE — RMSE между
log1p(y)и предсказанием в log-шкале. - MeAE — медианная абсолютная ошибка в минутах после
expm1для GB на validation.
- Лучший результат на validation у Gradient Boosting (RMSLE 0.39, MeAE 1.8 мин).
- Логарифм целевой переменной и отбор 25 признаков стабилизируют качество.
- Сильный вклад OSRM (
total_distance,total_travel_time) и временных признаков.
git clone https://github.com/theKerimKerimov/taxi-trip-duration-prediction.git
cd taxi-trip-duration-prediction
python -m venv .venv
# Windows: .venv\Scripts\activate
# Linux/macOS: source .venv/bin/activate
pip install -r requirements.txtСкачайте файлы с Kaggle и разложите по data/README.md.
jupyter notebook notebooks/nyc_taxi_trip_duration.ipynbВыполняйте ячейки по порядку из каталога notebooks/ (пути к data/ поднимаются автоматически через project_root).
Сабмит сохраняется в data/submissions/submission_gb.csv.
- Python 3.11+
- pandas, numpy, scipy, scikit-learn, XGBoost
- matplotlib, seaborn, plotly
- Jupyter
См. requirements.txt.
Код проекта — MIT. Данные Kaggle — по правилам соревнования.
Karim · 2026
📍 Москва