# How to deal with categorical features in machine learning models?

For instance I have a set of categories from a variable called 'category'. From python, here are my categories and their corresponding counts.

Category_Others        1430
Application/Website    1345
Backups                900
Software/OS            800
Hardware/Virtual       700
Network                302


There are two options I am considering; however, I am not sure which one is more legit.

I assign a value to each category as follows:

Category_Others ---- 0
Application/Website ---- 1
Backups ---- 2
Software/OS ---- 3
Hardware/Virtual ---- 4
Network ---- 5


Or I introduce 5 new variables into my data frame. Then I end up with 5 more columns (i.e. columns with names of each category)

i.e. on Python

category = pd.get_dummies(incident['category'], drop_first=True)


The first approach (assigning 0 to 5) is not recommended. Because that encoding indicates Network is 5 times than Application, which is not true. Or this encoding imposes additional constraints to the model.

In machine learning, people usually use one-hot encoding, which (similar to) your second approach, but many people do not use drop_first=True

There is another small issue on one-hot encoding: for a discrete variable has 6 possible values, should we encode with 6 columns or 5 columns?

People in statistics community usually encode with 5 columns. Many people in machine learning will use default setting in python, which does not have drop_first=True.

If we encode it with 6 columns there are linear dependencies in your design matrix and it will cause some problems in some model. But python usually use regularization on linear model by default, so, it is fine there.

Finally want to give you some statistical way of encoding in addition to machine learning way.

https://stats.idre.ucla.edu/r/library/r-library-contrast-coding-systems-for-categorical-variables/