добавить README к research, обновить общий README (расположение файлов requirements), вынести документацию по использованию Jupyter в отдельный файл
Этот коммит содержится в:
59
research/README.md
Обычный файл
59
research/README.md
Обычный файл
@@ -0,0 +1,59 @@
|
||||
# Исследование и настройка предсказательной модели
|
||||
|
||||
## Блокноты 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, разделённым запятыми, `<ids>` (**выполнять в корневой директории проекта**):
|
||||
|
||||
gc_mlflow --experiment-ids=<ids>
|
||||
Двоичные данные
research/mlflow_ui_figures/registered_model_experimental.png
Обычный файл
Двоичные данные
research/mlflow_ui_figures/registered_model_experimental.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 43 KiB |
Двоичные данные
research/mlflow_ui_figures/registered_model_final.png
Обычный файл
Двоичные данные
research/mlflow_ui_figures/registered_model_final.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 37 KiB |
Двоичные данные
research/mlflow_ui_figures/run_final_model_artifacts_mlmodel.png
Обычный файл
Двоичные данные
research/mlflow_ui_figures/run_final_model_artifacts_mlmodel.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 93 KiB |
Двоичные данные
research/mlflow_ui_figures/runs_with_metrics_display.png
Обычный файл
Двоичные данные
research/mlflow_ui_figures/runs_with_metrics_display.png
Обычный файл
Двоичный файл не отображается.
|
После Ширина: | Высота: | Размер: 62 KiB |
@@ -41,7 +41,7 @@ mlflow_tracking_server_uri: str = 'http://localhost:5000'
|
||||
mlflow_registry_uri: Optional[str] = None
|
||||
# URL сервера registry MLFlow (если не указан, используется `mlflow_tracking_server_uri`).
|
||||
|
||||
mlflow_do_log: bool = False
|
||||
mlflow_do_log: bool = True
|
||||
# Записывать ли прогоны (runs) в MLFlow.
|
||||
mlflow_experiment_id: Optional[str] = None
|
||||
# ID эксперимента MLFlow, имеет приоритет над `mlflow_experiment_name`.
|
||||
|
||||
Ссылка в новой задаче
Block a user