Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Прогнозирование длительности поездки такси (регрессия)

Python Jupyter scikit-learn XGBoost Kaggle License: MIT Status Year

📊 Обзор проекта

Бизнес-задача: определить характеристики поездки и спрогнозировать длительность поездки такси для оценки стоимости и планирования.

Техническая задача: построить модель регрессии, предсказывающую длительность поездки такси в Нью-Йорке по признакам маршрута, времени, погоды и 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 не используется при обучении.

🛠️ Техническая реализация

  1. EDA и feature engineering — распределения, выбросы, географические и погодные признаки.
  2. Подготовка — train/val 67/33, 25 признаков, нормализация.
  3. Модели — линейные, полином, Ridge, деревья, Random Forest, Gradient Boosting, XGBoost.
  4. СабмитGradientBoostingRegressor, предсказание: np.expm1(pred_log).

Модели и метрики (validation)

Модель 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

GitHub
Kaggle
LinkedIn
LeetCode
Email
Telegram

📍 Москва

About

Machine learning portfolio project: predict NYC Yellow Cab trip duration from GPS, datetime, holidays, weather and OSRM routing data. Full pipeline in Jupyter with Gradient Boosting submission.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages