Supervised Learning: time estimation of bike repair
But my concern is that my shops might be similar, it doesn't mean that they would spend the same amount of time to repair a bike. My second thought was to treat each shop independently, so basically one model per shop.


You need to decide which problem you're trying to solve, e.g.:


average duration of repair for a particular type of bike and repair id
average duration of repair for a particular shop (can be used to rank shops by their performance)
average duration of repair for a particular type of bike in a particular shop (can be used to predict the best shop for a particular bike)
...


After having clearly defined the problem, you need to format the data so that every instance corresponds to the item for which you want to predict something. For instance if the goal is to predict duration by type of bike, then an instance represents a type of bike so the feature should contain information about the bike and the target variable could be the average duration for this bike. In this case you shouldn't have several instances for the same type of bike.