комментарии в блокнот research (до MLFlow)

lab_2/master
syropiatovvv 5 дней назад
Родитель af9340eda2
Сommit 3ee22c3f0e
Подписано: syropiatovvv
Идентификатор GPG ключа: 297380B8143A31BD

@ -13,6 +13,12 @@
# name: python3
# ---
# %% [markdown]
# # Исследование и настройка предсказательной модели для цен подержанных автомобилях
# %% [markdown]
# Блокнот использует файл аугментированных данных датасета о подержанных автомобилях, создаваемый блокнотом `eda/cars_eda.py`. См. ниже параметры блокнота для papermill.
# %%
from typing import Optional
@ -23,7 +29,9 @@ data_aug_pickle_relpath: str = 'cars.aug.pickle'
# Путь к файлу (pickle) для сохранения очищенного датасета относительно директории данных `data`. Игнорируется, если установлен data_aug_pickle_path.
mlflow_tracking_server_uri: str = 'http://localhost:5000'
# URL tracking сервера MLFlow
mlflow_registry_uri: Optional[str] = None
# URL сервера registry MLFlow (если не указан, используется `mlflow_tracking_server_uri`)
mlflow_experiment_name: str = 'Current price predicion for used cars'
mlflow_experiment_new: bool = False
@ -60,6 +68,9 @@ DATA_PATH = (
else (BASE_PATH / 'data')
)
# %% [markdown]
# ## Загрузка и обзор данных
# %%
with open(
(
@ -71,15 +82,30 @@ with open(
) as input_file:
df_orig = pickle.load(input_file)
# %% [markdown]
# Обзор строк датасета:
# %%
df_orig.head(0x10)
# %% [markdown]
# Размер датасета:
# %%
len(df_orig)
# %% [markdown]
# Количество непустых значений и тип каждого столбца:
# %%
df_orig.info()
# %% [markdown]
# ## Разделение датасета на выборки
# %% [markdown]
# Выделение признаков и целевых переменных:
# %%
feature_columns = (
'selling_price',
@ -106,7 +132,7 @@ assert all(
for col in features_to_scale_to_standard_columns
)
features_to_encode_one_hot_columns = (
features_to_encode_wrt_target_columns = (
'fuel_type',
'selling_type',
'transmission',
@ -114,13 +140,16 @@ features_to_encode_one_hot_columns = (
)
assert all(
(col in df_orig.select_dtypes(('category', 'object')).columns)
for col in features_to_encode_one_hot_columns
for col in features_to_encode_wrt_target_columns
)
# %%
df_orig_features = df_orig[list(feature_columns)]
df_target = df_orig[list(target_columns)]
# %% [markdown]
# Разделение на обучающую и тестовую выборки:
# %%
DF_TEST_PORTION = 0.25
@ -131,9 +160,18 @@ df_orig_features_train, df_orig_features_test, df_target_train, df_target_test =
)
)
# %% [markdown]
# Размеры обучающей и тестовой выборки соответственно:
# %%
tuple(map(len, (df_target_train, df_target_test)))
# %% [markdown]
# ## Создание пайплайнов обработки признаков и обучения модели
# %% [markdown]
# Пайплайн предобработки признаков:
# %%
preprocess_transformer = sklearn.compose.ColumnTransformer(
[
@ -143,19 +181,25 @@ preprocess_transformer = sklearn.compose.ColumnTransformer(
'encode_categoricals_wrt_target',
#sklearn.preprocessing.OneHotEncoder(),
sklearn.preprocessing.TargetEncoder(
target_type='continuous', smooth='auto', cv=3, shuffle=True, random_state=0x2ED6,
target_type='continuous', smooth='auto', shuffle=True, random_state=0x2ED6,
),
features_to_encode_one_hot_columns,
features_to_encode_wrt_target_columns,
),
],
remainder='drop',
)
# %% [markdown]
# Регрессор — небольшой случайный лес, цель — минимизация квадрата ошибки предсказания:
# %%
regressor = sklearn.ensemble.RandomForestRegressor(
10, criterion='squared_error', max_features='sqrt', random_state=0x016B,
)
# %% [markdown]
# Составной пайплайн:
# %%
pipeline = sklearn.pipeline.Pipeline([
('preprocess', preprocess_transformer),
@ -165,12 +209,18 @@ pipeline = sklearn.pipeline.Pipeline([
# %%
pipeline
# %% [markdown]
# ## Baseline модель
# %%
_ = pipeline.fit(df_orig_features_train, df_target_train.iloc[:, 0])
# %%
target_test_predicted = pipeline.predict(df_orig_features_test)
# %% [markdown]
# Метрики качества (MAPE, а также MSE, MAE):
# %%
metrics = {
'mse': sklearn.metrics.mean_squared_error(df_target_test, target_test_predicted),

Загрузка…
Отмена
Сохранить