code: def save_adult_income_model(
      modelpath, test_fraction=0.2, random_state=0
  ):
      dataset = load_adult_income_dataset()
      target = dataset["income"]
      train_dataset, x, y_train, y = train_test_split(
          dataset,
          target,
          test_size=test_fraction,
          random_state=random_state,
          stratify=target,
      )
      x_train = train_dataset.drop("income", axis=1)
      numerical = ["age", "hours_per_week"]
      categorical = x_train.columns.difference(numerical)
  
      categorical_transformer = Pipeline(
          steps=[("onehot", OneHotEncoder(handle_unknown="ignore"))]
      )
  
      transformations = ColumnTransformer(
          transformers=[("cat", categorical_transformer, categorical)]
      )
  
      clf = Pipeline(
          steps=[
              ("preprocessor", transformations),
              ("classifier", RandomForestClassifier()),
          ]
      )
      model = clf.fit(x_train, y_train)
      pickle.dump(model, open(modelpath, "wb"))
  
imports: import os
  import pickle
  import shutil
  import zipfile
  from urllib.request import urlretrieve
  import numpy
  import pandas
  from sklearn.compose import ColumnTransformer
  from sklearn.ensemble import RandomForestClassifier
  from sklearn.model_selection import train_test_split
  from sklearn.pipeline import Pipeline
  from sklearn.preprocessing import FunctionTransformer, OneHotEncoder
  import dice_ml
label_desc: Use image node_id 2 for calling a global function with example usage: save_adult_income_model(modelpath, test_fraction, random_state) without return types