input: from typing import List
  
  def predict_football_match_winner(data: pd.DataFrame) -> str:
      """ Predict the winning team of football matches using a Gradient Boosting Classifier.
      The function uses historical data from past 5 years of the Premier League to train the model.
      >>> predict_football_match_winner(pd.DataFrame({
      ...     'home_team_goals': [1, 2, 3], 'away_team_goals': [0, 1, 2], 
      ...     'home_team_possession': [50, 60, 70], 'away_team_possession': [50, 40, 30],
      ...     'home_team_shots': [5, 6, 7], 'away_team_shots': [4, 5, 6], 
      ...     'home_team_yellow_cards': [0, 1, 2], 'away_team_yellow_cards': [1, 0, 1],
      ...     'home_team_red_cards': [0, 0, 1], 'away_team_red_cards': [0, 1, 0],
      ...     'winner': ['home', 'draw', 'away']
      ... }))
      ['home', 'draw', 'away']
      """
      import pandas as pd
      import numpy as np
      from sklearn.model_selection import train_test_split
      from sklearn.ensemble import GradientBoostingClassifier
  
      # Select features
      features = data[['home_team_goals', 'away_team_goals', 'home_team_possession', 'away_team_possession',
                       'home_team_shots', 'away_team_shots', 'home_team_yellow_cards', 'away_team_yellow_cards',
                       'home_team_red_cards', 'away_team_red_cards']]
  
      # Select target
      target = data['winner']
  
      # Split data into training and test sets
      X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42)
  
      # Train the model
      gbm = GradientBoostingClassifier()
      gbm.fit(X_train, y_train)
  
      # Make predictions
      y_pred = gbm.predict(X_test)
  
      # Return predictions
      return y_pred.tolist()
output:     # Evaluate the model
      accuracy = gbm.score(X_test, y_test)
  
      # Print the accuracy for reference
      print(f"Model accuracy: {accuracy:.2f}")
  
      # Return the predictions for the test set
      return y_pred.tolist()