Leakage-Free Fitting, Scaling, and Preprocessing
Install and import#
npm install fintech-algorithmsimport { leakageFreeFittingScalingAndPreprocessing } from "fintech-algorithms/foundations/statistical-computing-and-reproducibility/leakage-free-fitting-scaling-and-preprocessing";Signature#
leakageFreeFittingScalingAndPreprocessing(input)Fits a standardizing centre and scale on the training split alone, then applies that one transform to both splits.
Parameters#
| Name | Type | Notes |
|---|---|---|
input | D00Input | Reads train, at least two finite numbers to fit on, and test, the held-out finite numbers to transform. A non-empty values list of finite numbers must also be present; it is validated but not used here. |
Returns#
D00Output
fittedMean and fittedScale are the training mean and sample standard deviation, transformedTrain and transformedTest are both splits centred and scaled by those two figures, and fitUsedTestData is always false.
Errors#
- When
valuesis absent, empty, or holds a non-finite number — throws RangeError - When
trainholds fewer than two observations — throws RangeError - When the training data is constant, so its sample standard deviation is zero — throws RangeError
Complexity: time O(n),
space O(n).
Worked example#
verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.
Input#
{
"values": [1, 2, 3, 4, 5],
"floatingValue": 0.1,
"maxSafeMagnitude": 1.7976931348623157e+308,
"window": 3,
"rawValues": [1, null, 2, "bad", 3],
"invalidPolicy": "drop-and-report",
"seed": 42,
"sampleCount": 5,
"leftVector": [
{
"index": "A",
"value": 1
},
{
"index": "B",
"value": 2
}
],
"rightVector": [
{
"index": "B",
"value": 20
},
{
"index": "C",
"value": 30
}
],
"train": [10, 12, 14, 16],
"test": [18, 20],
"actual": [1, 2.0000001, 3],
"expected": [1, 2, 3]
}Showing 14 of 18 fields.
Call#
leakageFreeFittingScalingAndPreprocessing(input)Returns#
object with 2 fields: fittedMean, fittedScale
{
"fittedMean": 13,
"fittedScale": 2.581988897471611
}Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Floating-Point Arithmetic — IEEE 754-2019
- math.fsum — Python Documentation
- Random Sampling — NumPy Documentation
- Common Pitfalls and Recommended Practices — scikit-learn
- Historical-example decision