.. _sec_tabularinterpretability: Interpretable rule-based modeling ================================= *Note*: This addition was made through collaboration with `the Yu Group `__ of Statistics and EECS from UC Berkeley. **Tip**: Prior to reading this tutorial, it is recommended to have a basic understanding of the TabularPredictor API covered in :ref:`sec_tabularquick`. In this tutorial, we will explain how to automatically use interpretable models powered by integration with `🔍 the imodels package `__. This allows for automatically learning models based on rules which are extremely concise and can be useful for (1) understanding data or (2) building a transparent predictive model. *Note*: ``imodels`` must be installed for this tutorial. You can ensure ``imodels`` is installed via ``pip install autogluon.tabular[imodels]``. ``imodels`` is not installed by default. Begin by loading in data to predict. Note: interpretable rule-based modeling is currently only supported for binary classification. .. code:: python from autogluon.tabular import TabularDataset, TabularPredictor train_data = TabularDataset('https://autogluon.s3.amazonaws.com/datasets/Inc/train.csv') subsample_size = 500 # subsample subset of data for faster demo, try setting this to much larger values train_data = train_data.sample(n=subsample_size, random_state=0) train_data.head() .. raw:: html
age workclass fnlwgt education education-num marital-status occupation relationship race sex capital-gain capital-loss hours-per-week native-country class
6118 51 Private 39264 Some-college 10 Married-civ-spouse Exec-managerial Wife White Female 0 0 40 United-States >50K
23204 58 Private 51662 10th 6 Married-civ-spouse Other-service Wife White Female 0 0 8 United-States <=50K
29590 40 Private 326310 Some-college 10 Married-civ-spouse Craft-repair Husband White Male 0 0 44 United-States <=50K
18116 37 Private 222450 HS-grad 9 Never-married Sales Not-in-family White Male 0 2339 40 El-Salvador <=50K
33964 62 Private 109190 Bachelors 13 Married-civ-spouse Exec-managerial Husband White Male 15024 0 40 United-States >50K
Now, we create a predictor and fit it to the data. By specifying ``presets='interpretable'``, we tell the predictor to fit only interpretable models. .. code:: python predictor = TabularPredictor(label='class') predictor.fit(train_data, presets='interpretable') predictor.leaderboard() .. parsed-literal:: :class: output No path specified. Models will be saved in: "AutogluonModels/ag-20221213_014805/" Presets specified: ['interpretable'] Beginning AutoGluon training ... AutoGluon will save models to "AutogluonModels/ag-20221213_014805/" AutoGluon Version: 0.6.1b20221213 Python Version: 3.8.10 Operating System: Linux Platform Machine: x86_64 Platform Version: #1 SMP Tue Nov 30 00:17:50 UTC 2021 Train Data Rows: 500 Train Data Columns: 14 Label Column: class Preprocessing data ... AutoGluon infers your prediction problem is: 'binary' (because only two unique label-values observed). 2 unique label values: [' >50K', ' <=50K'] If 'binary' is not the correct problem_type, please manually specify the problem_type parameter during predictor init (You may specify problem_type as one of: ['binary', 'multiclass', 'regression']) Selected class <--> label mapping: class 1 = >50K, class 0 = <=50K Note: For your binary classification, AutoGluon arbitrarily selected which label-value represents positive ( >50K) vs negative ( <=50K) class. To explicitly set the positive_class, either rename classes to 1 and 0, or specify positive_class in Predictor init. Using Feature Generators to preprocess the data ... Fitting AutoMLPipelineFeatureGenerator... Available Memory: 31596.94 MB Train Data (Original) Memory Usage: 0.29 MB (0.0% of available memory) Inferring data type of each feature based on column values. Set feature_metadata_in to manually specify special dtypes of the features. Stage 1 Generators: Fitting AsTypeFeatureGenerator... Note: Converting 1 features to boolean dtype as they only contain 2 unique values. Stage 2 Generators: Fitting FillNaFeatureGenerator... Stage 3 Generators: Fitting IdentityFeatureGenerator... Fitting CategoryFeatureGenerator... Fitting CategoryMemoryMinimizeFeatureGenerator... Stage 4 Generators: Fitting DropUniqueFeatureGenerator... Types of features in original data (raw dtype, special dtypes): ('int', []) : 6 | ['age', 'fnlwgt', 'education-num', 'capital-gain', 'capital-loss', ...] ('object', []) : 8 | ['workclass', 'education', 'marital-status', 'occupation', 'relationship', ...] Types of features in processed data (raw dtype, special dtypes): ('category', []) : 7 | ['workclass', 'education', 'marital-status', 'occupation', 'relationship', ...] ('int', []) : 6 | ['age', 'fnlwgt', 'education-num', 'capital-gain', 'capital-loss', ...] ('int', ['bool']) : 1 | ['sex'] 0.1s = Fit runtime 14 features in original data used to generate 14 features in processed data. Train Data (Processed) Memory Usage: 0.03 MB (0.0% of available memory) Data preprocessing and feature engineering runtime = 0.1s ... AutoGluon will gauge predictive performance using evaluation metric: 'accuracy' To change this, specify the eval_metric parameter of Predictor() Automatically generating train/validation split with holdout_frac=0.2, Train Rows: 400, Val Rows: 100 Fitting 12 L1 models ... Fitting model: RuleFit ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.73 = Validation score (accuracy) 2.24s = Training runtime 0.04s = Validation runtime Fitting model: RuleFit_2 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.73 = Validation score (accuracy) 2.11s = Training runtime 0.08s = Validation runtime Fitting model: RuleFit_3 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.77 = Validation score (accuracy) 2.06s = Training runtime 0.08s = Validation runtime Fitting model: GreedyTree ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.81 = Validation score (accuracy) 0.63s = Training runtime 0.02s = Validation runtime Fitting model: BoostedRules ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.78 = Validation score (accuracy) 0.64s = Training runtime 0.02s = Validation runtime Fitting model: BoostedRules_2 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.82 = Validation score (accuracy) 0.64s = Training runtime 0.02s = Validation runtime Fitting model: Figs ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.82 = Validation score (accuracy) 0.66s = Training runtime 0.02s = Validation runtime Fitting model: Figs_2 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.81 = Validation score (accuracy) 0.69s = Training runtime 0.02s = Validation runtime Fitting model: Figs_3 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.78 = Validation score (accuracy) 0.73s = Training runtime 0.02s = Validation runtime Fitting model: HierarchicalShrinkageTree ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.82 = Validation score (accuracy) 1.05s = Training runtime 0.02s = Validation runtime Fitting model: HierarchicalShrinkageTree_2 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.82 = Validation score (accuracy) 1.05s = Training runtime 0.02s = Validation runtime Fitting model: HierarchicalShrinkageTree_3 ... /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( /home/ci/opt/venv/lib/python3.8/site-packages/sklearn/utils/validation.py:758: UserWarning: pandas.DataFrame with sparse columns found.It will be converted to a dense numpy array. warnings.warn( 0.82 = Validation score (accuracy) 1.13s = Training runtime 0.02s = Validation runtime Fitting model: WeightedEnsemble_L2 ... 0.83 = Validation score (accuracy) 0.29s = Training runtime 0.0s = Validation runtime AutoGluon training complete, total runtime = 15.08s ... Best model: "WeightedEnsemble_L2" TabularPredictor saved. To load, use: predictor = TabularPredictor.load("AutogluonModels/ag-20221213_014805/") .. parsed-literal:: :class: output model score_val pred_time_val fit_time pred_time_val_marginal fit_time_marginal stack_level can_infer fit_order 0 WeightedEnsemble_L2 0.83 0.099216 3.479751 0.000589 0.285408 2 True 13 1 HierarchicalShrinkageTree_3 0.82 0.018755 1.133771 0.018755 1.133771 1 True 12 2 Figs 0.82 0.019264 0.659746 0.019264 0.659746 1 True 7 3 BoostedRules_2 0.82 0.019817 0.639075 0.019817 0.639075 1 True 6 4 HierarchicalShrinkageTree 0.82 0.021195 1.048791 0.021195 1.048791 1 True 10 5 HierarchicalShrinkageTree_2 0.82 0.021696 1.046431 0.021696 1.046431 1 True 11 6 GreedyTree 0.81 0.018515 0.634493 0.018515 0.634493 1 True 4 7 Figs_2 0.81 0.018829 0.691391 0.018829 0.691391 1 True 8 8 BoostedRules 0.78 0.018710 0.635131 0.018710 0.635131 1 True 5 9 Figs_3 0.78 0.019958 0.733970 0.019958 0.733970 1 True 9 10 RuleFit_3 0.77 0.079872 2.060572 0.079872 2.060572 1 True 3 11 RuleFit 0.73 0.042912 2.236065 0.042912 2.236065 1 True 1 12 RuleFit_2 0.73 0.080854 2.108514 0.080854 2.108514 1 True 2 .. raw:: html
model score_val pred_time_val fit_time pred_time_val_marginal fit_time_marginal stack_level can_infer fit_order
0 WeightedEnsemble_L2 0.83 0.099216 3.479751 0.000589 0.285408 2 True 13
1 HierarchicalShrinkageTree_3 0.82 0.018755 1.133771 0.018755 1.133771 1 True 12
2 Figs 0.82 0.019264 0.659746 0.019264 0.659746 1 True 7
3 BoostedRules_2 0.82 0.019817 0.639075 0.019817 0.639075 1 True 6
4 HierarchicalShrinkageTree 0.82 0.021195 1.048791 0.021195 1.048791 1 True 10
5 HierarchicalShrinkageTree_2 0.82 0.021696 1.046431 0.021696 1.046431 1 True 11
6 GreedyTree 0.81 0.018515 0.634493 0.018515 0.634493 1 True 4
7 Figs_2 0.81 0.018829 0.691391 0.018829 0.691391 1 True 8
8 BoostedRules 0.78 0.018710 0.635131 0.018710 0.635131 1 True 5
9 Figs_3 0.78 0.019958 0.733970 0.019958 0.733970 1 True 9
10 RuleFit_3 0.77 0.079872 2.060572 0.079872 2.060572 1 True 3
11 RuleFit 0.73 0.042912 2.236065 0.042912 2.236065 1 True 1
12 RuleFit_2 0.73 0.080854 2.108514 0.080854 2.108514 1 True 2
The rule-based models take slightly different forms (see below), but all try to optimize predictive performance using as few rules as possible. See the `imodels package `__ for more details. |image0| Specifically, the interpretable preset fits different hyperparameter configurations of 5 models types: 1. Greedy CART decision tree - returns a tree learned via greedy optimization (`Description `__, `Paper `__) 2. Hierarchical Shrinkage tree - returns regularized version of CART decision tree (`Description `__, `Paper `__) 3. Fast interpretable greedy-tree sum - returns a *sum* of trees, which are greedily grown simultaneously (`Description `__, `Paper `__) 4. RuleFit - returns a set of weighted rules, which are learned by a sparse linear model on rules extracted from decision trees (`Description `__, `Paper `__) 5. Boosted rule set - returns a set of rules, which are learned sequentially via AdaBoost (`Description `__, `Paper `__) In addition to the usual functions in ``TabularPredictor``, this predictor fitted with interpretable models has some additional functionality. For example, we can now inspect the complexity of the fitted models (i.e. how many rules they contain). .. |image0| image:: https://raw.githubusercontent.com/csinva/imodels/master/docs/img/model_table_rules.png .. code:: python predictor.interpretable_models_summary() .. parsed-literal:: :class: output /home/ci/opt/venv/lib/python3.8/site-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above. and should_run_async(code) .. raw:: html
model_types model_performance complexity model_best model_paths model_fit_times model_pred_times num_bag_folds max_stack_level num_classes model_hyperparams
Figs FigsModel 0.82 6.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Figs/ 0.659746 0.019264 0 2 2 {'random_state': 0, 'max_rules': 6}
HierarchicalShrinkageTree HSTreeModel 0.82 19.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Hier... 1.048791 0.021195 0 2 2 {'random_state': 0, 'max_rules': 6}
HierarchicalShrinkageTree_2 HSTreeModel 0.82 19.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Hier... 1.046431 0.021696 0 2 2 {'random_state': 0, 'max_rules': 12}
HierarchicalShrinkageTree_3 HSTreeModel 0.82 19.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Hier... 1.133771 0.018755 0 2 2 {'random_state': 0, 'max_rules': 18}
BoostedRules_2 BoostedRulesModel 0.82 20.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Boos... 0.639075 0.019817 0 2 2 {'random_state': 0, 'n_estimators': 10}
Figs_2 FigsModel 0.81 10.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Figs_2/ 0.691391 0.018829 0 2 2 {'random_state': 0, 'max_rules': 10}
GreedyTree GreedyTreeModel 0.81 17.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Gree... 0.634493 0.018515 0 2 2 {'random_state': 0, 'max_leaf_nodes': 18}
BoostedRules BoostedRulesModel 0.78 10.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Boos... 0.635131 0.018710 0 2 2 {'random_state': 0, 'n_estimators': 5}
Figs_3 FigsModel 0.78 15.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Figs_3/ 0.733970 0.019958 0 2 2 {'random_state': 0, 'max_rules': 15}
RuleFit_3 RuleFitModel 0.77 35.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Rule... 2.060572 0.079872 0 2 2 {'random_state': 0, 'max_rules': 18}
RuleFit RuleFitModel 0.73 8.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Rule... 2.236065 0.042912 0 2 2 {'random_state': 0, 'max_rules': 7}
RuleFit_2 RuleFitModel 0.73 29.0 WeightedEnsemble_L2 AutogluonModels/ag-20221213_014805/models/Rule... 2.108514 0.080854 0 2 2 {'random_state': 0, 'max_rules': 12}
We can also explicitly inspect the rules of the best-performing model. .. code:: python predictor.print_interpretable_rules() # can optionally specify a model name or complexity threshold .. parsed-literal:: :class: output /home/ci/opt/venv/lib/python3.8/site-packages/ipykernel/ipkernel.py:283: DeprecationWarning: `should_run_async` will not call `transform_cell` automatically in the future. Please pass the result to `transformed_cell` argument and any exception that happen during thetransform in `preprocessing_exc_tuple` in IPython 7.17 and above. and should_run_async(code) .. parsed-literal:: :class: output > ------------------------------ > FIGS-Fast Interpretable Greedy-Tree Sums: > Predictions are made by summing the "Val" reached by traversing each tree > ------------------------------ marital-status_1.0 <= 0.500 (Tree #0 root) Val: 0.066 (leaf) education-num <= 11.500 (split) age <= 38.500 (split) Val: 0.185 (leaf) age <= 51.500 (split) Val: 0.558 (leaf) Val: 0.188 (leaf) Val: 0.767 (leaf) + capital-gain <= 7073.500 (Tree #1 root) Val: -0.024 (leaf) relationship_1 <= 0.500 (split) Val: 0.274 (leaf) Val: 0.934 (leaf) In some cases, these rules are sufficient to accurately make predictions. In other cases, they may just be used to gain a better understanding of the data before proceeding with more black-box models.