docstr: Args:
      clip_bounds (tuple): lower and upper bounds for clipping propensity scores. Bounds should be implemented
              such that: 0 < lower < upper < 1, to avoid division by zero in BaseRLearner.fit_predict() step.
      model_kwargs: Keyword arguments to be passed to the underlying classification model.
docstr_tok: ["Args",":","clip_bounds","(","tuple",")",":","lower","and","upper","bounds","for","clipping","propensity","scores",".","Bounds","should","be","implemented","such","that",":","0","<","lower","<","upper","<","1",",","to","avoid","division","by","zero","in","BaseRLearner.fit_predict","(",")","step",".","model_kwargs",":","Keyword","arguments","to","be","passed","to","the","underlying","classification","model","."]
code: def __init__(self, clip_bounds=(1e-3, 1 - 1e-3), **model_kwargs):
      """
      Args:
          clip_bounds (tuple): lower and upper bounds for clipping propensity scores. Bounds should be implemented
                  such that: 0 < lower < upper < 1, to avoid division by zero in BaseRLearner.fit_predict() step.
          model_kwargs: Keyword arguments to be passed to the underlying classification model.
      """
      self.clip_bounds = clip_bounds
      self.model_kwargs = model_kwargs
      self.model = self._model
  
imports: from abc import ABCMeta, abstractmethod
  import logging
  import numpy
  from pygam import LogisticGAM, s
  from sklearn.metrics import roc_auc_score
  from sklearn.linear_model import LogisticRegressionCV
  from sklearn.model_selection import StratifiedKFold, train_test_split
  import xgboost
label_desc: Use image node_id 1 to create a new PropensityModel object  with example: obj = PropensityModel(clip_bounds)