Gradient Boosted Decision Trees explained with a real-life example and some Python code