@Override
  public Map<FieldName, ?> evaluate(Map<FieldName, ?> arguments) {
    RuleSetModel ruleSetModel = getModel();
    if (!ruleSetModel.isScorable()) {
      throw new InvalidResultException(ruleSetModel);
    }

    Map<FieldName, ?> predictions;

    ModelManagerEvaluationContext context = new ModelManagerEvaluationContext(this);
    context.pushFrame(arguments);

    MiningFunctionType miningFunction = ruleSetModel.getFunctionName();
    switch (miningFunction) {
      case CLASSIFICATION:
        predictions = evaluateRuleSet(context);
        break;
      default:
        throw new UnsupportedFeatureException(ruleSetModel, miningFunction);
    }

    return OutputUtil.evaluate(predictions, context);
  }