🚀 ML-проект формата «для резюме и собеседований»,
🚀 ML-проект формата «для резюме и собеседований», а не просто для практики
Несколько недель назад я решил: вместо того чтобы на собеседованиях просто говорить «я работал со Scikit-Learn», сделать реальный end-to-end-проект — от EDA до API и тестов, чтобы было о чём по-деловому разговаривать 😄
В итоге получился вот такой open-source репозиторий на GitHub: California Housing Price Prediction (ML + FastAPI API) 🏡💻
⸻
Что я сделал в этом проекте?
💡 Задача: Прогноз медианной стоимости домов в Калифорнии (переменная MedHouseVal в единицах по 100 000$).
📊 Датасет: Знаменитый California Housing из Scikit-Learn — более 20 000 строк и 8 числовых признаков (MedInc, HouseAge, AveRooms, Latitude, Longitude, …).
🧠 Модели: • LinearRegression на сырых признаках • LinearRegression в Pipeline со StandardScaler • Базовый RandomForestRegressor • RandomForestRegressor, настроенный через GridSearchCV (cv=3)
📈 Результаты (на Test set):
Лучшей стала модель RandomForestRegressor (tuned): • RMSE ≈ 0.5039 • MAE ≈ 0.3266
⸻
🧱 Инфраструктура и стек: • Python + pandas + numpy + scikit-learn • Визуализации через matplotlib (EDA можно посмотреть в README) • Модель сохраняется с помощью joblib в папку models/ • FastAPI + uvicorn для HTTP-API и Swagger UI • Небольшие, но реальные тесты на pytest ✅
⸻
🧪 Не только ноутбук, а нормальная инженерия
В проекте я специально реализовал то, о чём часто спрашивают на собеседованиях:
🚫 Защита от data leakage • Один раз делаю train_test_split • Всё, что чему-то «учится» на данных (например, StandardScaler), обучается только на train и живёт внутри Pipeline • GridSearchCV запускается только на train, а не на всём датасете
🎯 Честная оценка качества • Test-набор = 20% данных, полностью отложен • Метрики на нём считаются один раз в конце, для финальной оценки
🧩 Подход “production thinking” • Модель сохраняется в best_model.joblib • Отдельный model_metadata.json с метаданными • Простой CLI-скрипт predict.py для предсказаний из терминала • Отдельный сервис на FastAPI с эндпоинтом /predict и автодокументацией (/docs, /redoc)
✅ Тестирование • Есть тесты и для обучения, и для предсказаний — чтобы при любом изменении кода/данных всё сразу «падало» и было понятно, что пошло не так.
⸻
Зачем вообще этот проект? 🤔
Если ты: • Ищешь аккуратный и защищаемый проект для резюме • Хочешь на собеседованиях чётко и структурно рассказывать про цепочку EDA → модели → оценка → API → тесты • Или нужен простой, но профессиональный шаблон для своих проектов ML + API
то ты можешь просто: • Сделать git clone репозитория • Запустить python src/train_model.py • Затем поднять API: uvicorn src.api:app --reload • И сразу идти в /docs и гонять запросы к API 😎
⸻
Если захочешь:
⭐ поставь звёздочку репозиторию, 🛠 напиши идеи по улучшению (feature engineering, monitoring, более продвинутый hyperparameter tuning, Docker, CI/CD и т.д.), или, если у тебя есть похожий проект, скинь ссылку — буду рад посмотреть и обменяться идеями 🤝
🔗 GitHub: https://lnkd.in/esXRywep
#MachineLearning #Python #FastAPI #OpenSource #DataScience #MLOps #Portfolio #CareerSwitch #ml #start #Ai #dl #base #help #OS #APIDevelopment #MLProject #PortfolioProject #feature #LR #RandomForesst #RF #RFR #LinearRegression #eda #RMSE #MAE #pytest #joblib #learning
· 11.12
Известный датасет). А почему решили рандом форест взять в качестве модели?
ответить
коммент удалён