Preheat oven to 375 degrees F.
Heat olive oil in a large skillet over medium heat. Add onion and garlic, cook until soft, about 5 minutes.
Add carrot and celery, cook for another 5 minutes.
Increase heat to medium-high, add ground beef. Cook until browned, breaking it up as it cooks.
Stir in flour and tomato paste, cook for 2 minutes.
Add beef broth, red wine, Worcestershire sauce, thyme, bay leaf, salt, and pepper. Bring to a simmer, reduce heat to low, and cook for 20 minutes.
While the meat simmers, boil potatoes in salted water until tender, about 15 minutes. Drain and mash with milk and butter.
Remove bay leaf from meat mixture and transfer to a baking dish.
Spread mashed potatoes on top of the meat. Sprinkle with cheddar cheese.
Bake in preheated oven for 20 minutes, or until the top is golden and bubbly.
Let stand for 10 minutes before serving.