Why are my classification outputs sometimes saturating? I have built a binary classifier (FWIW - using Keras) but the output values saturate at a value considerably < 1 (see plot).

Is this likely to be implementation problem? Is it because the model is undertrained? Or not normalized correctly? Or something else?

It could occur for many reasons, but one reason could simply be that there's no way to tell with greater certainty. E.g. take this example:




Record
Class
Group




1
0
A


2
1
A


3
1
A


3
1
A


4
0
B


5
0
B


6
1
B


7
1
B


8
1
C


9
0
C


10
0
C


11
0
C




Group A is 75% 1s, B 50% and C 25%. If you had way more data and these proportions don't change much and there's no other predictors other than "Group", then predicting 0.75, 0.5 and 0.25 may be the best you can do.
Other possibilities may be that you have not trained for long enough/used a optimizer + learning-rate schedule combination that leaves the model somewhat underfit, or perhaps regularization (that may be needed to avoid overfitting) regularizes the model away from extreme predictions, or perhaps you used a loss function with label smoothing (which could/should result in something like that).
