How to bin continuous variable based on label frequency? I have a continuous variable called salary, age etc and output variable as loan_status
Instead of me choosing the cut off points (which I did) for salary and age bins , I would like to compute the bins based on loan_status.
Is there any automated solution or python package to do this (and return the actual bin values which we can interpret (instead of returning some probabilities or something)? If probabilities, I may not know which probability value corresponds to which bin/salary value.
I ask this because I don't have business user inputs. I just wish to compare the model performance (based on my judgement of binning data) against the model performance (based on automated binning).
Please note that I want binning method which takes into account the loan_status. Meaning, if loan_status = 1 for people mostly with salary from 10000 to 50000, then I would like that to be bin 1, 2 (based on n_bins) and rest of the values should be assigned to bin 3. I am aware of quantile binning, k-means binning etc. But I guess they don't consider the outcome label distribution. I know we have similar solutions for categorical encoding based on target label (count, frequency etc). Is there anything for continuous variable encoding based on outcome label?
Again, if it is just a min and max of the bin based on the loan_status, it would just be 2 bins (and there is no intelligence here). Is there any automated package that can suggest us the no of bins for each label or if we configure n_bins=3, can it provide 3 bins for each label?
I would like to arrive at a bin value based on the outcome label distribution
Can guide me on this?
 A: After a somewhat extended discussion in chat with OP, we arrived at some conclusions which I will share here.
The subject is supervised binning (a set of techniques where the predictors are binned based, in some way, on the target variable). A common way to do supervised binning is described in some detail here, and here. The idea simply to run some algorithm (let's say decision trees) in order to determine what are the most "natural" cut points for a  continuous variable (to turn it into a "binned" categorical variable), based on how those cut-points correspond to values of the target variable.
Example: If you have continuous variable X and binary target variable Y, a decision tree can help identify that in most cases of X <= 5 , Y=1 . And in most cases of X > 5, Y=0 . So, it might be logical to turn X into a categorical variable, using X=5 as the cut point.
Now that we've established the logic there, I want to highlight a crucial concern for anyone using this kind of binning.
Data Leakage
With this technique, it's very easy to fall into extensive data leakage. This can occur very simply: If you have your full data set and you run supervised binning on the entire dataset to create these binned variables, then you split it into a train and test set, you have big data leakage. Why? Because your supervised binning algorithm already "saw" the test set data to try to decide the optimal cut points - therefore when you go back to test some model on the test set, the results will be overly optimistic because your supervised binning took that hold-out data into account: clear data leakage.
Once you recognize this risk, though, it's pretty easy to avoid. Create your supervised binning variable by only using training data once you've made the split. Similarly, when you are (hopefully) using k-fold cross validation, you need to create these supervised binning variables separately for each fold! Why? Because again, if you do 5-fold CV, if you use all 5 folds to create the binned variable and then you do the training on 4 to validate on the 5th fold, your binning algorithm has already seen the 5th fold so again, your results will be skewed.
I hope this clarifies why you need to be careful when applying this method, and to only apply it on the same data that your model is being trained on (with no allowance for the supervised binning algorithm to see data it shouldn't see at the current stage of training/validation/testing).
Final tip: To be clear then, you might ask "okay I've selected my model and I'm ready to train it on the entire training set so I can test it out on the test set. How do I generate the supervised binning variable for the test set?" . To avoid leakage, you want to create your supervised binning model (ex: decision tree) on the entire training set. Then, for every test set data point, you run it through that existing, trained model to give supervised binned variable for that test data point (without training the model on the test set - only on training set).
If you have any questions please feel free to ask!
A: If I understood correctly you want to bin 2 variables (salary, and age) according your target variable (loan_status), which I understand is binary.
If my assumption is correct, I recommend to use optbinning, this python package is well documented.
Good luck.
