• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/ml/scoring.php
  • Класс: Bitrix\Crm\Ml\Scoring
  • Вызов: Scoring::onMlModelStateChange
static function onMlModelStateChange(Event $event): void
{
	if (!Loader::includeModule('ml'))
	{
		return;
	}

	$mlModel = $event->getParameter('model');
	$model = self::getModelByName($mlModel->getName());
	Details::onModelUpdate($model);

	$currentTraining = self::getLastTraining($model);
	if (
		$currentTraining
		&& !in_array(
			$currentTraining['STATE'],
			[TrainingState::FINISHED, TrainingState::CANCELED],
			true
		)
	)
	{
		$updatedTrainingFields = [];
		// update latest training
		// update performance metric
		switch ($model->getState())
		{
			case \Bitrix\Ml\Model::STATE_TRAINING:
				$updatedTrainingFields['STATE'] = TrainingState::TRAINING;
				break;
			case \Bitrix\Ml\Model::STATE_EVALUATING:
				$updatedTrainingFields['STATE'] = TrainingState::EVALUATING;
				break;
			case \Bitrix\Ml\Model::STATE_READY:
				$updatedTrainingFields['STATE'] = TrainingState::FINISHED;
				$updatedTrainingFields['DATE_FINISH'] = new DateTime();
				$performance = $event->getParameter('performance');
				if ($performance && $performance['AUC'])
				{
					$updatedTrainingFields['AREA_UNDER_CURVE'] = (float)$performance['AUC'];
				}
				break;
			default:
				break;
		}

		ModelTrainingTable::update($currentTraining['ID'], $updatedTrainingFields);

		$currentTraining = array_merge($currentTraining, $updatedTrainingFields);
		Details::onTrainingProgress($model, $currentTraining);
	}
}