/** * Ridge regression kernel for the model-based explainers (B/C class). * * Operates on mark-level aggregates (tens to hundreds of rows, ≤ ~20 * features), so closed-form solutions and brute-force leave-one-out are * cheap. No external dependencies. * * FROZEN for the executor agent: do not modify scoring logic here. * See docs/explain-data-worklog.md §1. */ export interface IRidgeModel { beta: number[]; intercept: number; } /** Gaussian elimination with partial pivoting; A is modified-safe (copied). */ export declare function solveLinearSystem(A: number[][], b: number[]): number[]; /** * Closed-form ridge fit with centered features and target (the intercept is * not penalized). λ = 0 reduces to OLS. */ export declare function fitRidge(X: number[][], y: number[], lambda: number): IRidgeModel; export declare function predictRidge(model: IRidgeModel, X: number[][]): number[]; /** * Leave-one-out cross-validated R². Negative values mean the model predicts * held-out marks worse than the mean — an honest overfitting signal that a * training-set R² would hide (per-mark dummies fit perfectly in-sample). */ export declare function looCvR2(X: number[][], y: number[], lambda: number): number; export declare const DEFAULT_LAMBDA_GRID: number[]; /** pick λ maximizing LOO-CV R² over a fixed grid — deterministic */ export declare function selectLambda(X: number[][], y: number[], grid?: number[]): { lambda: number; cvR2: number; }; /** standardize a column to zero mean / unit variance; constant columns → all zeros */ export declare function standardize(values: number[]): number[]; /** * Deterministic PRNG (mulberry32). `Math.random` is forbidden in the explain * module: the same view state must always produce the same explanations. */ export declare function mulberry32(seed: number): () => number; /** Fisher–Yates shuffle with an injected PRNG */ export declare function shuffled(items: T[], rand: () => number): T[]; /** * One-sided permutation p-value with add-one smoothing: * P(score ≥ real | null). Guards the "lucky prediction" failure mode. */ export declare function permutationPValue(realScore: number, permutedScores: number[]): number;