```

Section 1: Model structure


```

[ Input vector x in ℝ⁸ ]
(F3_BM, F3_BI, F3_Math, F3_Science, F3_Sejarah, F3_Geo, F3_RBT, F3_PSV)
│
▼
[ StandardScaler ]
z = (x - mean) / std   (mean and std from training stream only)
│
▼
[ Ridge Regression ]
y_hat = intercept + Σ(coef_j * z_j)
│
▼
[ Output ]
Predicted merit (float, clipped to 0-100)


```
  

Section 4: Evaluation

Model selection: 5-fold KFold (shuffle, random_state=42). Metric: mean absolute error (MAE) on held-out folds. Full metrics per stream and per candidate are stored in model_meta.pkl. Separate test set not used because sample size per stream is small.

Section 5: Limitations

Section 2: Coefficient table

(standardised features; coefficient = change in merit per 1 standard deviation change in that subject)

Subject SCIENCE SEMI SCIENCE ART
BM -1.71 2.63 3.02
BI 1.16 2.55 5.07
Math 7.59 7.15 2.83
Science 5.82 1.04 0.64
Sejarah 1.25 0.69 0.26
Geo 1.96 -1.41 1.11
RBT 1.66 4.85 0.90
PSV 0.45 -0.75 1.26
Intercept 64.36 38.23 18.17

Caption: Negative coefficients on correlated subjects are typical multicollinearity effects. Do not interpret individually as causal.

Hyperparameters: alpha = 5.0 (all three streams)

``` ```

SCIENCE

Math (+7.59)
Science (+5.82)
Geo (+1.96)
BM (-1.71)
RBT (+1.66)
Sejarah (+1.25)
BI (+1.16)
PSV (+0.45)

SEMI SCIENCE

Math (+7.15)
RBT (+4.85)
BM (+2.63)
BI (+2.55)
Geo (-1.41)
Science (+1.04)
PSV (-0.75)
Sejarah (+0.69)

ART

BI (+5.07)
BM (+3.02)
Math (+2.83)
PSV (+1.26)
Geo (+1.11)
RBT (+0.90)
Science (+0.64)
Sejarah (+0.26)
```