This repo provides the official implementation of CROMP (Constrained Regression with Ordered and Margin-sensitive Parameters) along with the test dataset and the test pipeline code to reproduce the benchmarking results as described in the CROMP paper ("Constrained Regression with Ordered and Margin-sensitive Parameters: Application in improving interpretability for regression models with prior knowledge") under publication.
Author: Kaushik Bar
CROMP allows:
- User-defined order among the coefficients
- User-defined minimum margins (i.e., percentage gaps) between the coefficients
- User-defined lower and upper bounds for each coefficient
- Coefficients without any order or margin restrictions
This package is both interpretable and accurate. There is no other package / library available in the public domain today with these capabilities.
Install using PyPI:
pip install cromp
The package depends on:
- python >= 3.6
- scipy
- numpy
- pandas
The tests depend additionally on:
Below is a minimal usage guide. This library aloows flexibility for more fine-grained controls for each coefficient separately. Please go through the tests in addition to see more examples.
>>> from cromp import CROMPTrain, CROMPPredict
>>> df = pd.read_csv("tests/data/ames_house_prices_data.csv")
>>> df_train = df.iloc[:-50, :]
>>> df_test = df.iloc[-50:, :]
>>> target_col = 'SalePrice'
>>> feats_in_asc_order = ['1stFlrSF', 'TotalBsmtSF', 'GrLivArea']
>>> feats_in_no_order = []
>>> # Instantiate model
>>> model = CROMPTrain()
>>> # Configure constraints:
>>> # (i) Dollar increase for each unit of increase of each of the above factors is bounded between 0 and 100.
>>> # (ii) Dollar increase for each unit increase in 'TotalBsmtSF' is at least 50% more than that for '1stFlrSF'.
>>> # (iii) Dollar increase for each unit increase in 'GrLivArea' is at least 50% more than that for 'TotalBsmtSF'.
>>> # (iv) Zero price for zero area (obviously)!
>>> ret_success = model.config_constraints(feats_in_asc_order, min_gap_pct=0.5, feats_in_no_order, lb=0.0, ub=100.0, no_intercept=True)
>>> # Train
>>> ret_success, cromp_model = model.train(df_train, target_col)
>>> # Predict
>>> model = CROMPPredict(cromp_model)
>>> result = model.predict(df_test)
Feel free to contact Kaushik Bar if you have any further questions / feedback.
Author Affiliation: Inxite Out Pvt Ltd
To cite CROMP in your work, please use the following bibtex reference:
@software{Bar_CROMP_Constrained_Regression_2022,
author = {Bar, Kaushik},
license = {MIT},
month = {10},
title = {{CROMP (Constrained Regression with Ordered and Margin-sensitive Parameters)}},
url = {https://github.com/kb-open/CROMP},
year = {2022}
version = {v0.0.3},
publisher = {Zenodo},
doi = {10.5281/zenodo.7152807},
url = {https://doi.org/10.5281/zenodo.7152807}
}