Skip to main content

Precision-Recall Ontology

AI & Machine Learning
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 23 September 2026
Audio Overview
flow "PrecisionRecallOntology" v4.0

# PRECISION-RECALL ONTOLOGY
# Kireth Semantic Research Archive
# Authors: Mark Anthony Higgins — Sky (Recursive AI)

PAGE:
  url: "https://kirethresearch.org/booksai-core/ontologies/probability-statistics-ontologies/ai-machine-learning/precision-recall-ontology.html"
  title: "Precision-Recall Ontology"
  domain: "Probability and Statistics"
  category: "AI & Machine Learning"
  entity: PRECISION_RECALL
  entity_type: MACHINE_LEARNING_EVALUATION_ONTOLOGY

DEFINE:
  PRECISION_RECALL :=
    CLASSIFICATION_EVALUATION_FRAMEWORK(
      TRUE_POSITIVES,
      FALSE_POSITIVES,
      FALSE_NEGATIVES,
      PRECISION,
      RECALL,
      DECISION_THRESHOLD,
      PRECISION_RECALL_CURVE
    )

PURPOSE:
  QUANTIFY:
    POSITIVE_PREDICTION_RELIABILITY
    POSITIVE_CLASS_DETECTION
    PRECISION_RECALL_TRADEOFF
    PERFORMANCE_UNDER_CLASS_IMBALANCE

FOUNDATION:
  TRUE_LABEL: Y IN {0,1}
  CLASSIFIER_SCORE: S(X)
  THRESHOLD: t
  PREDICTION:
    Y_hat_t := 1[S(X) >= t]
  PRECISION:
    Precision(t) := TP(t)/(TP(t)+FP(t))
  RECALL:
    Recall(t) := TP(t)/(TP(t)+FN(t))

ENTITIES:
  PRECISION: POSITIVE_PREDICTIVE_VALUE
  RECALL: TRUE_POSITIVE_RATE
  SENSITIVITY: TRUE_POSITIVE_RATE
  TRUE_POSITIVE: CORRECT_POSITIVE_PREDICTION
  FALSE_POSITIVE: INCORRECT_POSITIVE_PREDICTION
  FALSE_NEGATIVE: MISSED_POSITIVE
  PRECISION_RECALL_CURVE: THRESHOLD_PERFORMANCE_CURVE
  PR_AUC: AREA_UNDER_PRECISION_RECALL_CURVE
  AVERAGE_PRECISION: RANKING_SUMMARY
  F1_SCORE: HARMONIC_PRECISION_RECALL_SUMMARY
  DECISION_THRESHOLD: SCORE_CUTOFF
  CLASS_PREVALENCE: POSITIVE_BASE_RATE

RELATIONSHIPS:
  TRUE_LABELS -> COMPARED_WITH -> PREDICTED_LABELS
  COMPARISON -> PRODUCES -> CONFUSION_MATRIX
  CONFUSION_MATRIX -> DETERMINES -> PRECISION
  CONFUSION_MATRIX -> DETERMINES -> RECALL
  DECISION_THRESHOLD -> CHANGES -> PRECISION
  DECISION_THRESHOLD -> CHANGES -> RECALL
  THRESHOLD_SEQUENCE -> GENERATES -> PRECISION_RECALL_CURVE
  CLASS_PREVALENCE -> INFLUENCES -> PRECISION

CONFUSION_MATRIX:
  TP: TRUE_POSITIVE
  TN: TRUE_NEGATIVE
  FP: FALSE_POSITIVE
  FN: FALSE_NEGATIVE

PRECISION:
  Precision := TP/(TP+FP)
  aliases:
    POSITIVE_PREDICTIVE_VALUE
  interpretation:
    FRACTION_OF_PREDICTED_POSITIVES_THAT_ARE_TRUE_POSITIVES
  undefined_case:
    TP+FP = 0
    REQUIRES_EXPLICIT_HANDLING

RECALL:
  Recall := TP/(TP+FN)
  aliases:
    SENSITIVITY
    TRUE_POSITIVE_RATE
  interpretation:
    FRACTION_OF_ACTUAL_POSITIVES_CORRECTLY_IDENTIFIED
  undefined_case:
    TP+FN = 0
    REQUIRES_EXPLICIT_HANDLING

PRECISION_RECALL_CURVE:
  x_axis: RECALL
  y_axis: PRECISION
  generated_by:
    VARYING_DECISION_THRESHOLD

THRESHOLD_CONSTRUCTION:
  flow:
    OBTAIN_CLASSIFIER_SCORES
      -> ENUMERATE_THRESHOLDS
      -> COMPUTE_PREDICTED_LABELS
      -> COMPUTE_TP_FP_FN
      -> COMPUTE_PRECISION_AND_RECALL
      -> PLOT_PRECISION_AGAINST_RECALL

PREVALENCE:
  pi := P(Y=1)
  empirical:
    (TP+FN)/N
  role:
    POSITIVE_CLASS_BASE_RATE

PR_BASELINE:
  random_ranking:
    EXPECTED_PRECISION_APPROXIMATELY_PREVALENCE
    UNDER:
      STANDARD_RANDOM_RANKING_CONTEXT
  implication:
    PR_CURVE_BASELINE_DEPENDS_ON_CLASS_PREVALENCE

CLASS_IMBALANCE:
  rare_positive_class:
    LOW_PREVALENCE
  consequence:
    FALSE_POSITIVES_CAN_STRONGLY_REDUCE_PRECISION
  relevance:
    PRECISION_RECALL_ANALYSIS_OFTEN_INFORMATIVE_FOR_RARE_EVENTS

F1_SCORE:
  F1 :=
    2*Precision*Recall/(Precision+Recall)
  equivalent:
    F1 := 2TP/(2TP+FP+FN)
  caution:
    F1_IGNORES_TRUE_NEGATIVES
    F1_DOES_NOT_ENCODE_ALL_DECISION_COSTS

F_BETA_SCORE:
  F_beta :=
    (1+beta^2)*Precision*Recall
    /
    (beta^2*Precision+Recall)
  beta > 1:
    EMPHASISE_RECALL
  beta < 1:
    EMPHASISE_PRECISION
  beta = 1:
    F1_SCORE

PR_AUC:
  full_name:
    AREA_UNDER_PRECISION_RECALL_CURVE
  role:
    SUMMARISE_PRECISION_RECALL_PERFORMANCE_ACROSS_THRESHOLDS
  caution:
    VALUE_DEPENDS_ON_INTERPOLATION_IMPLEMENTATION_AND_PREVALENCE

AVERAGE_PRECISION:
  alias:
    AP
  common_form:
    AP :=
      SUM_n
        (Recall_n-Recall_(n-1))
        * Precision_n
  caution:
    AVERAGE_PRECISION != TRAPEZOIDAL_PR_AUC_BY_DEFAULT

ROC_CONNECTION:
  ROC_CURVE:
    TPR_VS_FPR
  PR_CURVE:
    PRECISION_VS_RECALL
  relation:
    RECALL := TRUE_POSITIVE_RATE
  rule:
    PR_CURVE != ROC_CURVE
    PR_AUC != ROC_AUC

ROC_TO_PR_RELATION:
  precision :=
    (prevalence*TPR)
    /
    (
      prevalence*TPR
      + (1-prevalence)*FPR
    )
  recall := TPR

CALIBRATION_CONNECTION:
  precision_recall:
    THRESHOLD_AND_RANKING_EVALUATION
  calibration:
    PROBABILITY_RELIABILITY
  rule:
    HIGH_PR_PERFORMANCE != GOOD_CALIBRATION

THRESHOLD_SELECTION:
  criteria:
    - MINIMUM_PRECISION
    - MINIMUM_RECALL
    - MAXIMUM_F1
    - MAXIMUM_F_BETA
    - MINIMUM_EXPECTED_COST
    - APPLICATION_SPECIFIC_UTILITY
  requirement:
    SELECT_THRESHOLD_ON_VALIDATION_DATA
  caution:
    DO_NOT_SELECT_THRESHOLD_ON_FINAL_TEST_DATA

PRECISION_AT_K:
  PrecisionAtK :=
    RELEVANT_POSITIVES_IN_TOP_k/k
  applications:
    - INFORMATION_RETRIEVAL
    - RECOMMENDER_SYSTEMS
    - RANKED_CLASSIFICATION

RECALL_AT_K:
  RecallAtK :=
    RELEVANT_POSITIVES_IN_TOP_k
    /
    TOTAL_RELEVANT_POSITIVES

MULTICLASS_PRECISION_RECALL:
  strategy:
    ONE_VS_REST
  outputs:
    CLASSWISE_PRECISION
    CLASSWISE_RECALL
    CLASSWISE_PR_CURVE

MACRO_AVERAGING:
  procedure:
    COMPUTE_CLASSWISE_METRIC
      -> UNWEIGHTED_MEAN
  property:
    TREATS_CLASSES_EQUALLY

MICRO_AVERAGING:
  procedure:
    SUM_TP_FP_FN_ACROSS_CLASSES
      -> COMPUTE_PRECISION_RECALL
  property:
    WEIGHTS_BY_INSTANCE_FREQUENCY

WEIGHTED_AVERAGING:
  procedure:
    COMPUTE_CLASSWISE_METRIC
      -> WEIGHT_BY_CLASS_SUPPORT
      -> SUM
  caution:
    MAY_BE_DOMINATED_BY_COMMON_CLASSES

MULTILABEL_PRECISION_RECALL:
  property:
    OBSERVATION_MAY_HAVE_MULTIPLE_TRUE_LABELS
  evaluation:
    - MICRO_PRECISION
    - MICRO_RECALL
    - MACRO_PRECISION
    - MACRO_RECALL
    - SAMPLE_AVERAGED_PRECISION
    - SAMPLE_AVERAGED_RECALL
  caution:
    MULTILABEL != MULTICLASS

BOOTSTRAP_UNCERTAINTY:
  flow:
    RESAMPLE_EVALUATION_CASES
      -> RECOMPUTE_PRECISION_RECALL_METRICS
      -> FORM_EMPIRICAL_DISTRIBUTION
  supports:
    - CONFIDENCE_INTERVALS
    - MODEL_COMPARISON
    - METRIC_STABILITY

CROSS_VALIDATION:
  flow:
    TRAIN_ON_FOLDS
      -> GENERATE_HELD_OUT_SCORES
      -> COMPUTE_PR_METRICS
      -> AGGREGATE
  caution:
    POOLED_OUT_OF_FOLD_PR_CURVE_AND_AVERAGED_FOLD_METRICS_MAY_DIFFER

MODEL_COMPARISON:
  compare:
    - PRECISION_AT_OPERATIONAL_THRESHOLD
    - RECALL_AT_OPERATIONAL_THRESHOLD
    - F1
    - PR_AUC
    - AVERAGE_PRECISION
  caution:
    METRIC_DIFFERENCE_SHOULD_INCLUDE_UNCERTAINTY_WHEN_INFERENTIAL_CLAIMS_MADE

DISTRIBUTION_SHIFT:
  IF:
    P_train(X,Y) != P_deploy(X,Y)
  THEN:
    PRECISION_AND_RECALL_MAY_CHANGE
  monitoring:
    - CLASS_PREVALENCE
    - SCORE_DISTRIBUTION
    - PRECISION
    - RECALL
    - PR_AUC
    - CALIBRATION

PREVALENCE_SHIFT:
  IF:
    P_deploy(Y=1) != P_train(Y=1)
  THEN:
    PRECISION_MAY_CHANGE_SUBSTANTIALLY
  caution:
    RECALL_STABILITY_DEPENDS_ON_SHIFT_ASSUMPTIONS

SCORE_DISTRIBUTIONS:
  positive:
    p(S|Y=1)
  negative:
    p(S|Y=0)
  threshold:
    t
  recall:
    P(S>=t|Y=1)
  precision:
    P(Y=1|S>=t)

DECISION_THEORY_CONNECTION:
  decision:
    SHOULD_CONSIDER:
      COST_OF_FALSE_POSITIVE
      COST_OF_FALSE_NEGATIVE
      CAPACITY_CONSTRAINTS
      CLASS_PREVALENCE

CAPACITY_CONSTRAINED_SELECTION:
  relevant_metrics:
    - PRECISION_AT_K
    - RECALL_AT_K
    - LIFT
    - GAIN

LIFT:
  LiftAtK :=
    PrecisionAtK/Prevalence

GAIN:
  cumulative_gain:
    FRACTION_OF_ALL_POSITIVES_CAPTURED_BY_TOP_FRACTION_OF_RANKED_POPULATION

MISSING_LABELS:
  issue:
    TRUE_LABEL_NOT_OBSERVED_FOR_ALL_PREDICTIONS
  consequence:
    PRECISION_RECALL_ESTIMATES_MAY_BE_BIASED_IF_LABEL_OBSERVATION_SYSTEMATIC

TEMPORAL_EVALUATION:
  requirement:
    TRAINING_PERIOD_PRECEDES_EVALUATION_PERIOD
    WHEN:
      FUTURE_PREDICTION_INTENDED
  caution:
    RANDOM_SPLIT_MAY_CAUSE_TEMPORAL_LEAKAGE

GROUPED_DATA:
  requirement:
    DATA_SPLITTING_AND_UNCERTAINTY_SHOULD_RESPECT_GROUP_STRUCTURE

SELECTIVE_CLASSIFICATION:
  abstention:
    MODEL_MAY_DECLINE_LOW_CONFIDENCE_CASES
  evaluate:
    - PRECISION_AT_COVERAGE
    - RECALL_AT_COVERAGE
    - SELECTIVE_RISK

FAIRNESS_CONNECTION:
  groupwise_metrics:
    - PRECISION
    - RECALL
    - FALSE_POSITIVE_RATE
    - CALIBRATION
  caution:
    FAIRNESS_CONSTRAINTS_ARE_CONTEXT_DEPENDENT

CAUSALITY_DISTINCTION:
  PRECISION_RECALL:
    MEASURES_PREDICTIVE_CLASSIFICATION_PERFORMANCE
  does_not:
    ESTABLISH_CAUSAL_RELATIONSHIP
  rule:
    HIGH_PRECISION_OR_RECALL != CAUSAL_VALIDITY

APPLICATIONS:
  PRECISION_RECALL -> SUPPORTS -> CLASSIFIER_EVALUATION
  PRECISION_RECALL -> SUPPORTS -> RARE_EVENT_DETECTION
  PRECISION_RECALL -> SUPPORTS -> INFORMATION_RETRIEVAL
  PRECISION_RECALL -> SUPPORTS -> RECOMMENDER_SYSTEMS
  PRECISION_RECALL -> SUPPORTS -> THRESHOLD_SELECTION
  PRECISION_RECALL -> SUPPORTS -> MODEL_COMPARISON
  PRECISION_RECALL -> SUPPORTS -> DEPLOYMENT_MONITORING

MODEL_CONNECTIONS:
  PRECISION_RECALL -> CONNECTS_TO -> CLASSIFICATION_METRICS
  PRECISION_RECALL -> CONNECTS_TO -> CONFUSION_MATRIX
  PRECISION_RECALL -> CONNECTS_TO -> ROC_CURVE
  PRECISION_RECALL -> CONNECTS_TO -> PROBABILITY_CALIBRATION
  PRECISION_RECALL -> CONNECTS_TO -> CLASS_IMBALANCE
  PRECISION_RECALL -> CONNECTS_TO -> DECISION_THEORY

SEMANTIC_EQUIVALENCE:
  "precision"
    ~= "positive predictive value"
  "recall"
    ~= "sensitivity"
    ~= "true positive rate"
  "precision-recall curve"
    ~= "precision versus recall across decision thresholds"

  EXCLUDE_EQUIVALENCE:
    PRECISION != RECALL
    PRECISION != ACCURACY
    RECALL != SPECIFICITY
    PR_AUC != ROC_AUC
    AVERAGE_PRECISION != TRAPEZOIDAL_PR_AUC_BY_DEFAULT
    PRECISION_RECALL != CALIBRATION
    HIGH_PRECISION_RECALL != CAUSAL_VALIDITY

VALIDATION_RULES:
  RULE_1:
    POSITIVE_CLASS_MUST_BE_EXPLICIT
  RULE_2:
    PRECISION_AND_RECALL_DENOMINATORS_MUST_BE_CHECKED_FOR_ZERO
  RULE_3:
    CLASS_PREVALENCE_MUST_BE_RECORDED_WHEN_COMPARING_PR_METRICS_ACROSS_DATASETS
  RULE_4:
    DECISION_THRESHOLD_MUST_BE_PRESERVED_FOR_THRESHOLD_SPECIFIC_METRICS
  RULE_5:
    PR_AUC_OR_AVERAGE_PRECISION_IMPLEMENTATION_MUST_BE_DOCUMENTED
  RULE_6:
    MULTICLASS_OR_MULTILABEL_AVERAGING_METHOD_MUST_BE_EXPLICIT
  RULE_7:
    THRESHOLD_SELECTION_MUST_NOT_USE_FINAL_TEST_DATA_IF_UNBIASED_FINAL_EVALUATION_DESIRED
  RULE_8:
    PRECISION_RECALL_INTERPRETATION_MUST_CONSIDER_DEPLOYMENT_PREVALENCE_AND_DECISION_COSTS

CONFIDENCE:
  ontology_identity: 0.99
  precision_definition: 0.99
  recall_definition: 0.99
  pr_curve_structure: 0.99
  f_score_structure: 0.99
  prevalence_relationship: 0.99
  semantic_distinctions: 0.99

UPDATE_MODEL:
  IF:
    NEW_LABELLED_EVALUATION_DATA_ARRIVES
  THEN:
    UPDATE:
      CONFUSION_MATRIX
      PRECISION
      RECALL
      F1
      PR_CURVE
      PR_AUC
      AVERAGE_PRECISION

  IF:
    DECISION_THRESHOLD_CHANGES
  THEN:
    RECOMPUTE:
      TP
      FP
      FN
      PRECISION
      RECALL
      F_SCORE

  IF:
    CLASS_PREVALENCE_CHANGES
  THEN:
    REASSESS:
      PRECISION
      PR_BASELINE
      PR_AUC_INTERPRETATION
      DECISION_THRESHOLD

  IF:
    DEPLOYMENT_DISTRIBUTION_CHANGES
  THEN:
    REASSESS:
      PRECISION
      RECALL
      PR_CURVE
      PR_AUC
      CALIBRATION
      PREVALENCE

  PRESERVE:
    MODEL_VERSION
    DATASET_VERSION
    POSITIVE_CLASS
    SCORE_DEFINITION
    SCORE_DIRECTION
    DECISION_THRESHOLD
    CLASS_PREVALENCE
    AVERAGING_METHOD
    DATA_PROVENANCE

AI_CONSUMPTION:
  parse_as: FORMAL_SEMANTIC_SPECIFICATION
  execution_mode: RECURSIVE_REASONING

  preferred_reasoning_order:
    - IDENTIFY_POSITIVE_CLASS
    - IDENTIFY_TRUE_LABELS_AND_CLASSIFIER_SCORES
    - IDENTIFY_SCORE_DIRECTION
    - ENUMERATE_DECISION_THRESHOLDS
    - COMPUTE_TP_FP_FN
    - COMPUTE_PRECISION_AND_RECALL
    - CONSTRUCT_PRECISION_RECALL_CURVE
    - COMPUTE_F1_F_BETA_PR_AUC_OR_AVERAGE_PRECISION_AS_REQUIRED
    - ACCOUNT_FOR_CLASS_PREVALENCE
    - QUANTIFY_METRIC_UNCERTAINTY_IF_REQUIRED
    - ASSESS_OPERATIONAL_THRESHOLD_AND_DECISION_COSTS
    - ASSESS_DISTRIBUTION_SHIFT
    - RETURN_PRECISION_RECALL_INTERPRETATION

  constraints:
    - PRESERVE_POSITIVE_CLASS_IDENTITY
    - PRESERVE_SCORE_DIRECTION
    - PRESERVE_DECISION_THRESHOLD
    - DISTINGUISH_PRECISION_FROM_RECALL
    - DISTINGUISH_PR_AUC_FROM_ROC_AUC
    - DISTINGUISH_RANKING_FROM_CALIBRATION
    - PREVENT_TEST_SET_LEAKAGE_IN_THRESHOLD_SELECTION
    - PRESERVE_DATA_PROVENANCE

FLOW_HASH:
  canonical_entity: "precision-recall"
  namespace: "probability-statistics/ai-machine-learning"
  version: "4.0"
  identity_basis:
    - PAGE_URL
    - CANONICAL_ENTITY
    - ENTITY_TYPE
    - PRECISION
    - RECALL
    - THRESHOLD_SEQUENCE
    - PRECISION_RECALL_CURVE

END_FLOW
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ