The reason
All the Perceptron does is multiply and add. Each input gets multiplied by a weight. All of it gets added together. That's the entire operation.
The problem is that each weight is fixed. One number, decided during training, applied every single time that input appears.
Go back to the train ticket. What weight should it get? If the murder happened somewhere else, the ticket means nothing — the weight should be zero. If the murder happened on that train, the ticket is everything — the weight should be huge. But those are two different answers. The Perceptron has to pick one and stick with it.
It can't say "it depends." It has no way to make one input's weight change based on what another input is doing. Every input is scored alone, in isolation, every time.
Think of a recipe where every ingredient just adds its own flavour independently. More salt makes it saltier. More pepper makes it spicier. Simple, predictable.
But some flavours only work together. Fish sauce on its own tastes awful. Lime juice on its own is just sour. Combined, in the right dish, they become something neither one is alone. No amount of adjusting individual weights will find that.
That's not a gap in the training. It's a gap in the design.