Налаштування автоматичного перенавчання моделі (Model Retraining)
Модель, навчена один раз, неминуче деградує: дані змінюються, поведінка користувачів еволюціонує, з'являються нові патерни. Автоматичне перенавчання – це система, яка відстежує якість моделі та запускає цикл навчання при виявленні деградації або за розкладом.
Тригери перенавчання
Існує два підходи: schedule-based та trigger-based.
Schedule-based — перенавчання за розкладом (щодня, щотижня) незалежно від якості моделі. Простий у реалізації, передбачуваний, підходить для доменів, що швидко змінюються (нові рекомендації, динамічне ціноутворення).
Trigger-based — перенавчання при виявленні дрифту або деградації метрик:
- Data drift: розподіл вхідних даних змінився (KS-тест, PSI > 0.2)
- Performance drift: метрики на labeled даних впали нижче порога
- Concept drift: зв'язок між ознаками та таргетом змінився
На практиці використовують комбінацію: м'які тригери за дріфтом + жорсткий розклад як fallback.
Архітектура системи перенавчання
[Monitoring] → [Drift Detected / Schedule] → [Data Collection]
→ [Data Validation] → [Training Job] → [Evaluation]
→ [A/B Test / Canary] → [Promotion] → [Monitoring]
Оркестратори: Airflow, Prefect, Kubeflow Pipelines, Vertex AI Pipelines.
Приклад Airflow DAG:
from airflow import DAG
from airflow.operators.python import PythonOperator
dag = DAG(
'model_retraining',
schedule_interval='@weekly',
catchup=False
)
check_drift = PythonOperator(
task_id='check_data_drift',
python_callable=run_drift_detection,
dag=dag
)
collect_data = PythonOperator(
task_id='collect_training_data',
python_callable=prepare_dataset,
dag=dag
)
train = PythonOperator(
task_id='train_model',
python_callable=run_training,
dag=dag
)
check_drift >> collect_data >> train
Управління навчальними даними
Ключове питання: які дані включати у перенавчання? Варіанти:
- Full retrain: усі історичні дані. Стабільно, але дорого за часом та обчисленнями.
- Rolling window: лише дані за останні N днів/тижнів. Модель забуває історію, але краще адаптується до поточних патернів.
- Incremental learning: донавчання на нових даних без перенавчання з нуля. Підходить не всім алгоритмів.
- Weighted samples: старі дані з меншою вагою. Баланс між стабільністю та адаптацією.
Validation gate перед promotion
Автоматично перенавчена модель не повинна потрапляти у production без валідації:
def validate_new_model(new_model, current_model, test_dataset):
new_metrics = evaluate(new_model, test_dataset)
current_metrics = evaluate(current_model, test_dataset)
# Новая модель должна быть лучше текущей
if new_metrics['auc'] < current_metrics['auc'] * 0.99:
raise ValueError(f"New model AUC {new_metrics['auc']:.4f} "
f"worse than current {current_metrics['auc']:.4f}")
# Проверка latency
if new_metrics['p95_latency_ms'] > 100:
raise ValueError("Inference too slow")
return True
Управління експериментами під час автоперенавчання
Кожен цикл перенавчання логується в MLflow із фіксацією: версії даних (DVC hash), гіперпараметрів, метрик, часу навчання. Це дозволяє ретроспективно проаналізувати деградацію та знайти момент, коли модель почала погіршуватися.
Типовий результат: команда переходить від ручного перенавчання "коли згадають" (раз на 2-3 місяці) до автоматичного циклу з щотижневим оновленням та метриками якості, які завжди актуальні.







