комментарии в блокнот research (до MLFlow)
Этот коммит содержится в:
@@ -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),
|
||||
|
||||
Ссылка в новой задаче
Block a user