| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -44,14 +44,8 @@ mlflow_experiment_id: Optional[str] = None
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# ID эксперимента MLFlow, имеет приоритет над `mlflow_experiment_name`.
 | 
					 | 
					 | 
					 | 
					# ID эксперимента MLFlow, имеет приоритет над `mlflow_experiment_name`.
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mlflow_experiment_name: Optional[str] = 'Current price predicion for used cars'
 | 
					 | 
					 | 
					 | 
					mlflow_experiment_name: Optional[str] = 'Current price predicion for used cars'
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Имя эксперимента MLFlow (ниже приоритетом, чем `mlflow_experiment_id`).
 | 
					 | 
					 | 
					 | 
					# Имя эксперимента MLFlow (ниже приоритетом, чем `mlflow_experiment_id`).
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mlflow_baseline_run_name: str = 'Baseline model'
 | 
					 | 
					 | 
					 | 
					mlflow_root_run_name: str = 'Models'
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Имя ноговго прогона MLFlow для baseline модели.
 | 
					 | 
					 | 
					 | 
					# Имя корневого прогона MLFlow (остальные прогоны будут созданы блокнотом внутри этого, как nested)
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mlflow_feateng_run_name: str = 'Model with engineered features'
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Имя ноговго прогона MLFlow для модели, использующей дополнительные признаки
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mlflow_feateng_filtered_run_name: str = 'Model with filtered engineered features'
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Имя ноговго прогона MLFlow для модели, использующей дополнительные признаки и фильтрацию признаков
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					mlflow_optimized_feateng_filtered_run_name: str = 'Optimized model with filtered engineered features'
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# Имя ноговго прогона MLFlow для модели с оптимизированными гиперпараметрами, использующей дополнительные признаки и фильтрацию признаков
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# %%
 | 
					 | 
					 | 
					 | 
					# %%
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					from collections.abc import Sequence
 | 
					 | 
					 | 
					 | 
					from collections.abc import Sequence
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -102,6 +96,7 @@ if mlflow_registry_uri is not None:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# %%
 | 
					 | 
					 | 
					 | 
					# %%
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					if mlflow_do_log:
 | 
					 | 
					 | 
					 | 
					if mlflow_do_log:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    mlflow_experiment = mlflow.set_experiment(experiment_name=mlflow_experiment_name, experiment_id=mlflow_experiment_id)
 | 
					 | 
					 | 
					 | 
					    mlflow_experiment = mlflow.set_experiment(experiment_name=mlflow_experiment_name, experiment_id=mlflow_experiment_id)
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    mlflow_root_run_id = None  # изменяется позже
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# %%
 | 
					 | 
					 | 
					 | 
					# %%
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					DATA_PATH = (
 | 
					 | 
					 | 
					 | 
					DATA_PATH = (
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -282,21 +277,34 @@ def score_predictions(target_test, target_test_predicted):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# %%
 | 
					 | 
					 | 
					 | 
					# %%
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					# использует глобальные переменные mlflow_do_log, mlflow_experiment
 | 
					 | 
					 | 
					 | 
					# использует глобальные переменные mlflow_do_log, mlflow_experiment, mlflow_root_run_name
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def mlflow_log_model(
 | 
					 | 
					 | 
					 | 
					def mlflow_log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model,
 | 
					 | 
					 | 
					 | 
					    model,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_params,
 | 
					 | 
					 | 
					 | 
					    model_params,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics,
 | 
					 | 
					 | 
					 | 
					    metrics,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    *,
 | 
					 | 
					 | 
					 | 
					    *,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run_name,
 | 
					 | 
					 | 
					 | 
					    nested_run_name,
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_signature=None,
 | 
					 | 
					 | 
					 | 
					    model_signature=None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    input_example=None,
 | 
					 | 
					 | 
					 | 
					    input_example=None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #pip_requirements=None,
 | 
					 | 
					 | 
					 | 
					    #pip_requirements=None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    comment_file_path=None,
 | 
					 | 
					 | 
					 | 
					    comment_file_path=None,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					):
 | 
					 | 
					 | 
					 | 
					):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    global mlflow_root_run_id
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if not mlflow_do_log:
 | 
					 | 
					 | 
					 | 
					    if not mlflow_do_log:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        return
 | 
					 | 
					 | 
					 | 
					        return
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    with mlflow.start_run(experiment_id=mlflow_experiment.experiment_id, run_name=run_name):
 | 
					 | 
					 | 
					 | 
					    experiment_id = mlflow_experiment.experiment_id
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    start_run_root_kwargs_extra = {}
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if mlflow_root_run_id is not None:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        start_run_root_kwargs_extra['run_id'] = mlflow_root_run_id
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    else:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        start_run_root_kwargs_extra['run_name'] = mlflow_root_run_name
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    with mlflow.start_run(experiment_id=experiment_id, **start_run_root_kwargs_extra) as root_run:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if root_run.info.status not in ('RUNNING',):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            raise RuntimeError('Cannot get the root run to run')
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if mlflow_root_run_id is None:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            mlflow_root_run_id = root_run.info.run_id
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        # важно одновременно использовать nested=True и parent_run_id=...:
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        with mlflow.start_run(experiment_id=experiment_id, run_name=nested_run_name, nested=True, parent_run_id=mlflow_root_run_id):
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            _ = mlflow.sklearn.log_model(
 | 
					 | 
					 | 
					 | 
					            _ = mlflow.sklearn.log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                model,
 | 
					 | 
					 | 
					 | 
					                model,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                'model',
 | 
					 | 
					 | 
					 | 
					                'model',
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -392,7 +400,7 @@ mlflow_log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pipeline,
 | 
					 | 
					 | 
					 | 
					    pipeline,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run_name=mlflow_baseline_run_name,
 | 
					 | 
					 | 
					 | 
					    nested_run_name='Baseline model',
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -545,7 +553,7 @@ mlflow_log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pipeline,
 | 
					 | 
					 | 
					 | 
					    pipeline,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run_name=mlflow_feateng_run_name,
 | 
					 | 
					 | 
					 | 
					    nested_run_name='Model with engineered features',
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -665,7 +673,7 @@ mlflow_log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pipeline,
 | 
					 | 
					 | 
					 | 
					    pipeline,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run_name=mlflow_feateng_filtered_run_name,
 | 
					 | 
					 | 
					 | 
					    nested_run_name='Model with filtered engineered features',
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -785,7 +793,7 @@ mlflow_log_model(
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    pipeline,
 | 
					 | 
					 | 
					 | 
					    pipeline,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
					 | 
					 | 
					 | 
					    model_params=model_params,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
					 | 
					 | 
					 | 
					    metrics={k: float(v) for k, v in metrics.items()},
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run_name=mlflow_optimized_feateng_filtered_run_name,
 | 
					 | 
					 | 
					 | 
					    nested_run_name='Optimized model with filtered engineered features',
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
					 | 
					 | 
					 | 
					    model_signature=mlflow_model_signature,
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
					 | 
					 | 
					 | 
					    input_example=df_orig_features.head(MODEL_INOUT_EXAMPLE_SIZE),
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
					 | 
					 | 
					 | 
					    #pip_requirements=str(MODEL_PIP_REQUIREMENTS_PATH),
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
 
 |