I can give you one reason. Passenger load. It doesn't matter how many passengers are on the train, it still costs, let's say £300 to run a train each Km. That includes the wages of the people who run the train, train & track maintenance and other overhead expenses (electric bill, management, ticket stations, etc). It's just about the same distance (160Km) from Birmingham to London as it is from Birmingham to Leeds. That means it may cost £48000 to run the train. But if you have fewer passengers going to Leeds, that £48000 has to be spread over fewer passengers. So their tickets will be higher. I'm sure there are other factors.