fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Leakage-Free Fitting, Scaling, and Preprocessing

Install and import#

bash
npm install fintech-algorithms
ts
import { 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#

NameTypeNotes
inputD00InputReads 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 values is absent, empty, or holds a non-finite number — throws RangeError
  • When train holds 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#

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#

Leakage-Free Fitting, Scaling, and Preprocessing — article hero
Leakage-Free Fitting, Scaling, and Preprocessing — calculation ledger
Leakage-Free Fitting, Scaling, and Preprocessing — concept anatomy
Leakage-Free Fitting, Scaling, and Preprocessing — failure boundary
Leakage-Free Fitting, Scaling, and Preprocessing — method map
Leakage-Free Fitting, Scaling, and Preprocessing — scenario contrast

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.

Read the article →

References#

The rest of the Statistical Computing and Reproducibility family#