# Исследование и настройка предсказательной модели ## Блокноты Jupyter * `research` — Создание множества разных моделей, с использованием разных создаваемых признаков и оптимизацией гиперпараметров. Использует файл аугментированных данных датасета о подержанных автомобилях, создаваемый блокнотом `eda/cars_eda.py`. См. `eda/README.md`. Если параметр блокнота `mlflow_do_log` установлен в `True`, блокнот логирует в MLFlow создаваемые модели в отдельные вложенные (nested) прогоны под одним (новым) общим прогоном с именем, определяемым параметром `mlflow_experiment_name`. Точность предсказания текущей цены автомобиля оценивается в первую очередь по показателю MAPE (из-за наличия в выборке значений цены разных порядков), во вторую очередь учитывается MSE (ради отслеживания систематических ошибок на подвыборках). Исследованные модели: 1. baseline (MAPE = 0.35, MSE = 1.18); 2. с использованием добавленных признаков (feature engineering с помощью scikit-learn) — точность неоднозначна по сравнению с baseline (MAPE = 0.31, MSE = 1.50); 3. с использованием добавленных и выбранных (SFS) признаков — точность существенно лучше baseline (MAPE = 0.20, MSE = 1.02); 4. с использованием добавленных и выбранных признаков и оптимизированными гиперпараметрами (optuna) — точность немного лучше модели 3 по MAPE (MAPE = 0.20, MSE = 0.94). Модель 4 выбрана как финальная модель для последующего развёртывания. Она использует следующие признаки (такие же, как и модель 3): * `extend_features_as_polynomial__selling_price` (исходная цена продажи, нормализована `StandardScaler`), * `extend_features_as_polynomial__selling_price^2`, * `extend_features_as_spline__age_sp_1` (значение базисной функции 2/5 однородного сплайна, нормализованного к крайним значениям возраста автомобилей), * `extend_features_as_spline__age_sp_2` (то же, но базисная функция 3/5), * `scale_to_standard__age` (исходный возраст автомобиля, нормализован `StandardScaler`). По указанию преподавателя, скриншоты пользовательского интерфейса MLFlow сохранены в директории `./mlflow_ui_figures`. По указанию преподавателя, ID финального прогона: `4c7f04ad9ee94237b44f60b6eb14b41e` (вложен в прогон `4e4a9094cb3c4eed9d4a056a27cadcd9`). ## Установка Для исследования и настройки предсказательной модели необходимы общие зависимости, см. [Общие зависимости](../README.md#общие-зависимости) в `README.md`. Для исследования и настройки предсказательной модели используется среда [Jupyter](https://jupyter.org/). См. об установке и использовании Jupyter в проекте в `docs/jupyter.md`. ### Зависимости Дополнительные зависимости, необходимые для исследования и настройки предсказательной модели, — пакеты Python — записаны в файле `requirements/requirements-research.txt` (см. **Пакеты Python**). См. об установке пакетов Python в **Пакеты Python** в `README.md`. ## Работа с блокнотами Jupyter См. об установке и использовании Jupyter в проекте в `docs/jupyter.md`. ## Работа с MLFlow Для управления жизненным циклом моделей машинного обучения используется платформа [MLFlow](https://mlflow.org/). Запуск локального сервера MLFlow (**выполнять в корневой директории проекта**): run_mlflow_server Для остановки сервера MLFlow пошлите ему сигнал `SIGINT` (`Ctrl+C` в терминале). Очистка локальной tracking БД MLFlow от удалённых прогонов (**выполнять в корневой директории проекта**): gc_mlflow Очистка локальной tracking БД MLFlow от конкретных удалённых экспериментов по списку их ID, разделённым запятыми, `` (**выполнять в корневой директории проекта**): gc_mlflow --experiment-ids=