• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/ml/scoring.php
  • Класс: Bitrix\Crm\Ml\Scoring
  • Вызов: Scoring::canStartTraining
static function canStartTraining(Model\Base $model, bool $useCache = false): Result
{
	$result = new Result();

	if ($model->getState() !== false)
	{
		return $result->addError(new Error('Model already exists', static::ERROR_MODEL_ALREADY_EXISTS));
	}

	if ($useCache)
	{
		[$successfulRecords, $failedRecords] = $model->getCachedTrainingSetSize();
	}
	else
	{
		[$successfulRecords, $failedRecords] = $model->getTrainingSetSize();
	}
	$totalRecords = $successfulRecords + $failedRecords;
	if (
		$totalRecords < static::getMinimalTrainingSetSize()
		|| $successfulRecords < static::getMinimalClassSize()
		|| $failedRecords < static::getMinimalClassSize()
	)
	{
		return $result->addError(
			new Error('Not enough data to train model', static::ERROR_NOT_ENOUGH_DATA)
		);
	}

	$lastTraining = static::getLastTraining($model);
	if ($lastTraining)
	{
		if ($lastTraining['DATE_FINISH'] instanceof DateTime)
		{
			$lastTrainingTimestamp = $lastTraining['DATE_FINISH']->getTimestamp();
			$retrainPeriodInSeconds = static::RETRAIN_PERIOD * 24 * 60 * 60;
			if ((time() - $lastTrainingTimestamp) < $retrainPeriodInSeconds)
			{
				return $result->addError(new Error('You can not start training. Too little time passed since the last training', static::ERROR_TOO_SOON));
			}
		}
	}

	return $result;
}