docs: def add_model_from_params(
              self, name, model_expression, sample_size,
              probability_mode='full_product', choice_mode='individual',
              choosers_fit_filters=None, choosers_predict_filters=None,
              alts_fit_filters=None, alts_predict_filters=None,
              interaction_predict_filters=None, estimation_sample_size=None,
              prediction_sample_size=None, choice_column=None):
          """
          Add a model by passing parameters through to MNLDiscreteChoiceModel.
  
          Parameters
          ----------
          name
              Must match a segment in the choosers table.
          model_expression : str, iterable, or dict
              A patsy model expression. Should contain only a right-hand side.
          sample_size : int
              Number of choices to sample for estimating the model.
          probability_mode : str, optional
              Specify the method to use for calculating probabilities
              during prediction.
              Available string options are 'single_chooser' and 'full_product'.
              In "single chooser" mode one agent is chosen for calculating
              probabilities across all alternatives. In "full product" mode
              probabilities are calculated for every chooser across all
              alternatives.
          choice_mode : str or callable, optional
              Specify the method to use for making choices among alternatives.
              Available string options are 'individual' and 'aggregate'.
              In "individual" mode choices will be made separately for each
              chooser. In "aggregate" mode choices are made for all choosers at
              once. Aggregate mode implies that an alternative chosen by one
              agent is unavailable to other agents and that the same
              probabilities can be used for all choosers.
          choosers_fit_filters : list of str, optional
              Filters applied to choosers table before fitting the model.
          choosers_predict_filters : list of str, optional
              Filters applied to the choosers table before calculating
              new data points.
          alts_fit_filters : list of str, optional
              Filters applied to the alternatives table before fitting the model.
          alts_predict_filters : list of str, optional
              Filters applied to the alternatives table before calculating
              new data points.
          interaction_predict_filters : list of str, optional
              Filters applied to the merged choosers/alternatives table
              before predicting agent choices.
          estimation_sample_size : int, optional
              Whether to sample choosers during estimation
              (needs to be applied after choosers_fit_filters)
          prediction_sample_size : int, optional
              Whether (and how much) to sample alternatives during prediction.
              Note that this can lead to multiple choosers picking the same
              alternative.
          choice_column : optional
              Name of the column in the `alternatives` table that choosers
              should choose. e.g. the 'building_id' column. If not provided
              the alternatives index is used.
  
          """
          logger.debug('adding model {} to LCM group {}'.format(name, self.name))
          self.models[name] = MNLDiscreteChoiceModel(
              model_expression, sample_size,
              probability_mode, choice_mode,
              choosers_fit_filters, choosers_predict_filters,
              alts_fit_filters, alts_predict_filters,
              interaction_predict_filters, estimation_sample_size,
              prediction_sample_size, choice_column, name)