Skip to content

Conversation

@zhangtemplar
Copy link
Contributor

Summary:
Improved the NaN handling logic in the AUPRC (Area Under Precision-Recall Curve) metric calculation to correctly handle edge cases where division by zero occurs.

The changes address NaN values that arise from 0.0/0.0 divisions in both recall and precision calculations:

Recall NaN handling:

  • NaNs occur on the right side of the recall tensor due to cumsum starting from the left (num_fp) but being flipped
  • Changed NaN replacement value from 1.0 to 0.0 to match the 0.0 value appended on the right side
  • Removed the conditional check since we should always handle NaNs consistently

Precision NaN handling:

  • Added explicit NaN handling for precision tensor (previously missing)
  • NaNs in precision occur on the right side similar to recall
  • Replace NaNs with 0.0 (not 1.0 as stated in comment) to prevent NaN propagation in _riemann_integral
  • This prevents the entire AUPRC result from becoming NaN when any precision element is NaN

Added detailed comments explaining the root cause of NaN values and the rationale for the chosen replacement values.

Differential Revision: D86464670

@meta-cla meta-cla bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Nov 6, 2025
@meta-codesync
Copy link
Contributor

meta-codesync bot commented Nov 6, 2025

@zhangtemplar has exported this pull request. If you are a Meta employee, you can view the originating Diff in D86464670.

Summary:

Improved the NaN handling logic in the AUPRC (Area Under Precision-Recall Curve) metric calculation to correctly handle edge cases where division by zero occurs.

The changes address NaN values that arise from 0.0/0.0 divisions in both recall and precision calculations:

**Recall NaN handling:**
- NaNs occur on the right side of the recall tensor due to cumsum starting from the left (num_fp) but being flipped
- Changed NaN replacement value from 1.0 to 0.0 to match the 0.0 value appended on the right side
- Removed the conditional check since we should always handle NaNs consistently

**Precision NaN handling:**
- Added explicit NaN handling for precision tensor (previously missing)
- NaNs in precision occur on the right side similar to recall
- Replace NaNs with 0.0 (not 1.0 as stated in comment) to prevent NaN propagation in _riemann_integral
- This prevents the entire AUPRC result from becoming NaN when any precision element is NaN

Added detailed comments explaining the root cause of NaN values and the rationale for the chosen replacement values.

Reviewed By: iamzainhuda

Differential Revision: D86464670
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. fb-exported meta-exported

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant