How you approach a Machine Learning problem? In my little experience after participating in Kaggle competitions and learning from other kernels below is a set of steps that I have come to follow probably not in the same order

#### Imputing null values

Removing instances with null values is not a good approach, a lot of people impute null values with mean or in some cases median when there are too many outliers and mean is not a good representation, fortunately scikit-learn makes is really easy to impute null values, so this is probably the first step

Before imputing null values it is important to understand why these values were missed in the first place, was it a result of human error? or it is an industrial system where periodic missing values are common? understanding these will help replacing missing values with appropriate ones

But if you really need to use null values then use a decision trees algorithm

#### Removing Multicolliearity

When you’re dealing with too many features, it is important to understand inter-correlated features, they don’t necessarily add more value in your model and could negatively affect them. One way that I have found to check them in Python is using VIF or Variable Inflation Factor, setting a moderate value for VIF is important to get rid of unwanted features in your dataset

#### Outliers and normal distribution

Another very important thing to check is detecting outliers in your dataset and visualizing them using Box plots, I have seen approaches where people set upper and lower limits using np.percentile(array, 0.99) or np.percentile(array, 0.05) and set everything above and below this range to minimum or maximum number returned from the np.percentile()

Also if data is right or left skewed it can hurt your model’s performance so it is important to fix skewness in your data for example by taking a log to get a normal distribution, but if you have zero values in your data then a log transformation cannot work

#### Label encoding for categorical variables

If data contains categorical variables such as Model of a car (Honda, Toyota, Nissan) it is imperative to convert them to numbers using Label Encoder, One hot encoding or using get_dummies in Pandas where appropriate

#### Correlation check with output variable or finding the most important features

It is important to check correlation with your target variable and recognize your most important features, Scikit-learn makes it really easy to do, also you can generate a heat map or scatterplot to visualize any correlation and choose your important features

We can also use Random Forrest or XGBoost that gives a list of important features in your dataset, we can start by discarding least important features for getting a better model, we must also use cross-validation for testing our model with held-out training data

#### Feature Engineering

One important bit that is true for any winning Kaggle competition is building your intuition for data and engineer features, this cannot be emphasized enough and it really takes your creativity and experience to bring new features in your dataset that will make your model more robust

After the above I have seen users build their first model probably using XGBClassifier or XGBRegressor but not before reducing dimensions with PCA or TruncatedSVD and using FeatureUnion for stacking features horizontally if faced with many dimensions, more on this in a later blog post

So questions for you dear reader

What do you think of the above, do you find it helpful? What practices do you follow?

Let me know in the comments

*Thank you **Salahuddin** and *Irtaza Shah* for reviewing this post and sharing your feedback*