Metadata-Version: 2.1
Name: cromp
Version: 0.0.4
Summary: The official implementation of CROMP (Constrained Regression with Ordered and Margin-sensitive Parameters). CROMP allows user-defined order among the coefficients, user-defined minimum margins (i.e., percentage gaps) between them, and user-defined lower and upper bounds for each coefficient.
Home-page: https://github.com/kb-open/CROMP
Author-email: Kaushik Bar <kb.opendev@gmail.com>
License: MIT License
        
        Copyright (c) 2022 Kaushik Bar
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
        
Project-URL: Homepage, https://github.com/kb-open/CROMP
Project-URL: Bug Tracker, https://github.com/kb-open/CROMP/issues
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Provides-Extra: test
License-File: LICENSE.txt

[![DOI](https://zenodo.org/badge/545916375.svg)](https://zenodo.org/badge/latestdoi/545916375)
[![PyPI - Python](https://img.shields.io/badge/python-3.6%20|%203.7%20|%203.8%20|%203.9-blue.svg)](https://pypi.org/project/cromp/)
[![PyPI - License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/kb-open/CROMP/blob/main/LICENSE.txt)
[![PyPI - PyPi](https://img.shields.io/pypi/v/cromp)](https://pypi.org/project/cromp/)
[![Build](https://img.shields.io/github/workflow/status/kb-open/CROMP/Test%20Build/main)](https://github.com/kb-open/CROMP/actions/)

# ✏️ CROMP (Constrained Regression with Ordered and Margin-sensitive Parameters) 
This repo provides the official implementation of CROMP (Constrained Regression with Ordered and Margin-sensitive Parameters) along with the test dataset and the experimental 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 wage models with prior knowledge**").

Author: [Kaushik Bar](kb.opendev@gmail.com)

Author Affiliation: [Inxite Out Pvt Ltd](https://inxiteout.ai/)

![](assets/model-workflow.png)
---------------------------
## 🎯 Quick Info
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

This package is both interpretable and accurate.
There is no other package / library available in the public domain today with these capabilities.

---------------------------
## 💻 Installation
Install using [PyPI](https://pypi.org/project/cromp/):
```bash
pip install cromp
```

---------------------------
## 💻 Dependencies
The package depends on:
* python >= 3.6
* scipy
* numpy
* pandas

The tests depend additionally on:
* scikit-learn
* [Data scientist salary data](https://www.kaggle.com/datasets/nikhilbhathi/data-scientist-salary-us-glassdoor?select=data_cleaned_2021.csv)
* [Ames House price data](https://www.kaggle.com/competitions/house-prices-advanced-regression-techniques/data?select=train.csv)

---------------------------
## 🚀 Usage
Below is a minimal usage guide. This library aloows flexibility for more fine-grained controls for each coefficient separately.
Please go through the [tests](https://github.com/kb-open/cromp/blob/main/tests/cromp_tests.py) in addition to see more examples.

```python
>>> 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'
>>> feature_cols_in_asc_order = ['1stFlrSF', 'TotalBsmtSF', 'GrLivArea']

>>> # Instantiate and configure
>>> model = CROMPTrain()
>>> ret_success = model.configure(df_train, target_col, feature_cols_in_asc_order, min_gap_pct=0.5, lb=0.0, ub=100.0, no_intercept=True)

>>> # Train
>>> ret_success, wages = model.train()

>>> # Predict
>>> model = CROMPPredict(wages)
>>> ret_success, result = model.predict(df_test, feature_cols_in_asc_order)
```

---------------------------
## ☕ Contact
Feel free to contact [Kaushik Bar](https://www.linkedin.com/in/iamkbar/) if you have any further questions / feedback.

---------------------------
## Citation
To cite CROMP in your work, please use the following bibtex reference:

```bibtex
@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}
}
```



