code: def scatter_plot_summary_holdout(
      train_summary,
      validation_summary,
      k,
      label=["Train", "Validation"],
      drop_learners=[],
      drop_cols=[],
  ):
      """Generates a scatter plot comparing learner performance by training and validation.
  
      Args:
          train_summary (pd.DataFrame): summary for training synthetic data generated by get_synthetic_summary_holdout()
          validation_summary (pd.DataFrame): summary for validation synthetic data generated by
              get_synthetic_summary_holdout()
          label (string, optional): legend label for plot
          k (int): number of simulations (used only for plot title text)
          drop_learners (list, optional): list of learners (str) to omit when plotting
          drop_cols (list, optional): list of metrics (str) to omit when plotting
      """
      train_summary = train_summary.drop(drop_learners).drop(
          drop_cols, axis=1
      )
      validation_summary = validation_summary.drop(drop_learners).drop(
          drop_cols, axis=1
      )
  
      plot_data = pd.concat([train_summary, validation_summary])
      plot_data["label"] = [
          i.replace("Train", "") for i in plot_data.index
      ]
      plot_data["label"] = [
          i.replace("Validation", "") for i in plot_data.label
      ]
  
      fig, ax = plt.subplots()
      fig.set_size_inches(12, 8)
      xs = plot_data["Abs % Error of ATE"]
      ys = plot_data["MSE"]
      group = np.array(
          [label[0]] * train_summary.shape[0]
          + [label[1]] * validation_summary.shape[0]
      )
      cdict = {label[0]: "red", label[1]: "blue"}
  
      for g in np.unique(group):
          ix = np.where(group == g)[0].tolist()
          ax.scatter(xs[ix], ys[ix], c=cdict[g], label=g, s=100)
  
      for i, txt in enumerate(plot_data.label[:10]):
          ax.annotate(txt, (xs[i] + 0.005, ys[i]))
  
      ax.set_xlabel("Abs % Error of ATE")
      ax.set_ylabel("MSE")
      ax.set_title(
          "Learner Performance (averaged over k={} simulations)".format(
              k
          )
      )
      ax.legend(loc="center left", bbox_to_anchor=(1.1, 0.5))
      plt.show()
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from matplotlib import pyplot
  import numpy
  import pandas
  from sklearn.metrics import mean_squared_error
  from sklearn.metrics import auc
  from sklearn.model_selection import train_test_split
  from sklearn.linear_model import LinearRegression
  from xgboost import XGBRegressor
  from scipy.stats import entropy
  import warnings
  from causalml.inference.meta import BaseXRegressor, BaseRRegressor, BaseSRegressor, BaseTRegressor
  from causalml.inference.tree.causal.causaltree import CausalTreeRegressor
  from causalml.propensity import ElasticNetPropensityModel
  from causalml.metrics import plot_gain, get_cumgain
label_desc: Use image node_id 9 for calling a global function with example usage: scatter_plot_summary_holdout(train_summary, validation_summary, k, label, drop_learners, drop_cols) without return types