• No products in the cart.

203.4.5 Type of Datasets, Type of Errors and Problem of Overfitting

The Problem of Over Fitting

In previous section, we studied about What is a Best Model?

• In search of the best model on the given data we add many predictors, polynomial terms, Interaction terms, variable transformations, derived variables, indicator/dummy variables etc.,
• Most of the times we succeed in reducing the error. What error is this?
• So by complicating the model we fit the best model for the training data.
• Sometimes the error on the training data can reduce to near zero
• But the same best model on training data fails miserably on test data.
• Imagine building multiple models with small changes in training data. The resultant set of models will have huge variance in their parameter estimates. • The model is made really complicated, that it is very sensitive to minimal changes
• By complicating the model the variance of the parameters estimates inflates
• Model tries to fit the irrelevant characteristics in the data
• Over fitting
• The model is super good on training data but not so good on test data
• We fit the model for the noise in the data
• Less training error, high testing error
• The model is over complicated with too many predictors
• Model need to be simplified
• A model with lot of variance

LAB: Model with huge Variance

• Data: Fiberbits/Fiberbits.csv
• Take initial 90% of the data. Consider it as training data. Keep the final 10% of the records for validation.
• Build the best model(5% error) model on training data.
• Use the validation data to verify the error rate. Is the error rate on the training data and validation data same?

Solution

fiber_bits_train<-Fiberbits[1:90000,]
fiber_bits_validation<-Fiberbits[90001:100000,]

Model on training data

Fiber_bits_tree3<-rpart(active_cust~., method="class", control=rpart.control(minsplit=5, cp=0.000001), data=fiber_bits_train)
Fbits_pred3<-predict(Fiber_bits_tree3, type="class")
conf_matrix3<-table(Fbits_pred3,fiber_bits_train\$active_cust)
accuracy3<-(conf_matrix3[1,1]+conf_matrix3[2,2])/(sum(conf_matrix3))
accuracy3
##  0.9524889

Validation Accuracy

fiber_bits_validation\$pred <- predict(Fiber_bits_tree3, fiber_bits_validation,type="class")

conf_matrix_val<-table(fiber_bits_validation\$pred,fiber_bits_validation\$active_cust)
accuracy_val<-(conf_matrix_val[1,1]+conf_matrix_val[2,2])/(sum(conf_matrix_val))
accuracy_val
##  0.7116

Error rate on validation data is more than the training data error.

The Problem of Under-fitting

• Simple models are better. Its true but is that always true? May not be always true.
• We might have given it up too early. Did we really capture all the information?
• Did we do enough research and future reengineering to fit the best model? Is it the best model that can be fit on this data?
• By being over cautious about variance in the parameters, we might miss out on some patterns in the data.
• Model need to be complicated enough to capture all the information present.
• If the training error itself is high, how can we be so sure about the model performance on unknown data?
• Most of the accuracy and error measuring statistics give us a clear idea on training error, this is one advantage of under fitting, we can identify it confidently.
• Under fitting
• A model that is too simple
• A mode with a scope for improvement
• A model with lot of bias

LAB: Model with huge Bias

• Lets simplify the model.
• Take the high variance model and prune it.
• Make it as simple as possible.
• Find the training error and validation error.

Solution

• Simple Model
Fiber_bits_tree4<-rpart(active_cust~., method="class", control=rpart.control(minsplit=30, cp=0.25), data=fiber_bits_train)
prp(Fiber_bits_tree4) Fbits_pred4<-predict(Fiber_bits_tree4, type="class")
conf_matrix4<-table(Fbits_pred4,fiber_bits_train\$active_cust)
conf_matrix4
##
## Fbits_pred4     0     1
##           0 11209   921
##           1 25004 52866
accuracy4<-(conf_matrix4[1,1]+conf_matrix4[2,2])/(sum(conf_matrix4))
accuracy4
##  0.7119444
• Validation accuracy
fiber_bits_validation\$pred1 <- predict(Fiber_bits_tree4, fiber_bits_validation,type="class")

conf_matrix_val1<-table(fiber_bits_validation\$pred1,fiber_bits_validation\$active_cust)
accuracy_val1<-(conf_matrix_val1[1,1]+conf_matrix_val1[2,2])/(sum(conf_matrix_val1))
accuracy_val1
##  0.4224