ENH: Add overlay_dx_score metric for regression evaluation

### Describe the workflow you want to enable

## Current Problem

When evaluating regression models, especially for time series forecasting, existing metrics (MAE, RMSE, R²) don't capture how well predictions align visually with actual values across different tolerance levels.

## Desired Workflow
```python
from sklearn.metrics import overlay_dx_score
from sklearn.model_selection import cross_val_score

# Simple evaluation
score = overlay_dx_score(y_true, y_pred)

# Cross-validation with custom scorer
from sklearn.metrics import make_scorer
scorer = make_scorer(overlay_dx_score)
scores = cross_val_score(model, X, y, scoring=scorer, cv=5)

# GridSearchCV
from sklearn.model_selection import GridSearchCV
grid = GridSearchCV(model, param_grid, scoring=scorer)
grid.fit(X, y)
```

## Use Cases

1. Time series forecasting evaluation where visual alignment matters
2. Scenarios where outlier sensitivity of MSE/RMSE is problematic
3. Understanding prediction quality at multiple tolerance levels
4. Model selection when alignment is more important than absolute error


## Proposed Implementation

Add `overlay_dx_score()` function to `sklearn.metrics`.

### Function Signature
```python
def overlay_dx_score(y_true, y_pred, *,
                     sample_weight=None,
                     multioutput='uniform_average',
                     max_percentage=100.0,
                     min_percentage=0.1,
                     step=0.1):
    """
    Overlay DX metric for evaluating regression predictions.
    
    Measures alignment by computing area under curve showing percentage 
    of predictions within tolerance intervals of varying sizes.
    
    Returns float between 0 and 1, higher is better.
    """
```

### How It Works

1. Define tolerance intervals as percentages of the data range
2. For each tolerance level, compute percentage of predictions within tolerance
3. Calculate area under the resulting curve
4. Normalize by maximum possible area

### Mathematical Formula
```
overlay_dx = A / A_max
```

where:
- A = area under the overlay percentage curve
- A_max = maximum possible area (max_percentage × 100)

### Key Features

- Supports `sample_weight` (sklearn standard)
- Supports `multioutput` regression
- Less sensitive to outliers than MSE/RMSE
- Provides interpretable score (0 to 1 range)

### Implementation Details

- Pure NumPy implementation, no external dependencies
- Vectorized operations for efficiency
- Follows sklearn API conventions
- Complete numpydoc documentation
- 95%+ test coverage ready

## References

- Repository: https://github.com/Smile-SA/overlay_dx
- Currently used internally for time series forecasting evaluation
- Compatible implementation exists: works with cross_val_score, GridSearchCV, Pipeline

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

_No response_

COMMENT:
@boumediene77, I know nothing about the use case, but it looks like your package https://github.com/Smile-SA/overlay_dx has a nice README. I couldn't figure out whether it was on PyPI or not.

Just curious, could you add a few details about your motivation behind having this functionality in scikit-learn rather than keep working on your package?

If in your package `overlay_dx` is a callable that follows the [metric scikit-learn API](https://scikit-learn.org/stable/glossary.html#term-evaluation-metric), it seems like it could already be used with scikit-learn?

Other than this, do you have an article that presents this overlay_dx and compares it to other metrics for forecasting?

Including a new feature in scikit-learn is generally not an easy task because we need to decide whether the new functionality is worth the maintenance cost, see [related FAQ for algorithms](https://scikit-learn.org/stable/faq.html#what-are-the-inclusion-criteria-for-new-algorithms). Metrics are arguably easier to add than a new algorithm (aka estimator in scikit-learn jargon) but still.

See also the [metaphor of a contribution as a puppy](https://snarky.ca/setting-expectations-for-open-source-participation/#submittingacontribution) from Brett Cannon's talk "Setting expectations for open source participation". The whole article is very good and you have a [video](https://youtu.be/tzFWz5fiVKU?t=48m55s) that goes with it.

Labels: New Feature, Needs Info