class_docstr: Analysis block that estimates column importances via permutation.
  
  Roughly speaking, the procedure:
      - iterates over all input columns
      - if the input column is optional, shuffle its values, then generate predictions for the input data
      - compare this accuracy with the accuracy obtained using unshuffled data
      - all accuracy differences are normalized with respect to the original accuracy (clipped at zero if negative)
      - report these as estimated column importance scores
  
  Note that, crucially, this method does not refit the predictor at any point.
  
  :param row_limit: Set to 0 to use the entire validation dataset.
  :param col_limit: Set to 0 to consider all possible columns.
  
  Reference:
      https://scikit-learn.org/stable/modules/permutation_importance.html
      https://compstat-lmu.github.io/iml_methods_limitations/pfi.html
code: def __init__(
      self,
      disable_column_importance=False,
      row_limit=1000,
      col_limit=10,
      deps=tuple(
          "AccStats",
      ),
  ):
      super().__init__(deps=deps)
      self.disable_column_importance = disable_column_importance
      self.row_limit = row_limit
      self.col_limit = col_limit
      self.n_decimals = 3
  
file_path: lightwood/lightwood/analysis/helpers/feature_importance.py
imports: from copy import deepcopy
  from types import SimpleNamespace
  from typing import Dict
  import numpy
  from sklearn.utils import shuffle
  from lightwood.helpers.log import log
  from lightwood.data.encoded_ds import EncodedDs
  from lightwood.analysis.base import BaseAnalysisBlock
  from mindsdb_evaluator import evaluate_accuracies
  from lightwood.api.types import PredictionArguments
label_desc: Use image node_id 1 to create a new PermutationFeatureImportance object from inherited base classes: BaseAnalysisBlock with example: obj = PermutationFeatureImportance(disable_column_importance, row_limit, col_limit, deps)