Model Persistence
Imports
import pandas as pd
from sklearn.ensemble import RandomForestRegressorData
df = pd.read_csv('../DATA/Advertising.csv')dfTV
radio
newspaper
sales
055 more lines
230.1
37.8
69.2
22.1
1
44.5
39.3
45.1
10.4
2
17.2
45.9
69.3
9.3
3
151.5
41.3
58.5
18.5
4
180.8
10.8
58.4
12.9
...
...
...
...
...
195
38.2
3.7
13.8
7.6
196
94.2
4.9
8.1
9.7
197
177.0
9.3
6.4
12.8
198
283.6
42.0
66.2
25.5
199
232.1
8.6
8.7
13.4
200 rows × 4 columnsdf.describe()TV
radio
newspaper
sales
count39 more lines
200.000000
200.000000
200.000000
200.000000
mean
147.042500
23.264000
30.554000
14.022500
std
85.854236
14.846809
21.778621
5.217457
min
0.700000
0.000000
0.300000
1.600000
25%
74.375000
9.975000
12.750000
10.375000
50%
149.750000
22.900000
25.750000
12.900000
75%
218.825000
36.525000
45.100000
17.400000
max
296.400000
49.600000
114.000000
27.000000Data Preparation
X = df.drop('sales',axis=1)
y = df['sales']from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=101)# HOLD OUT SET# Further split 30% of test into validation and hold-out (15% and 15% each)
X_validation, X_holdout_test, y_validation, y_holdout_test = train_test_split(X_test, y_test, test_size=0.5, random_state=101)Model Training
model = RandomForestRegressor(n_estimators=10,random_state=101)model.fit(X_train,y_train)RandomForestRegressor(n_estimators=10, random_state=101)Model Evaluation
validation_predictions = model.predict(X_validation)from sklearn.metrics import mean_absolute_error,mean_squared_errormean_absolute_error(y_validation,validation_predictions)0.6636666666666673mean_squared_error(y_validation,validation_predictions)**0.5 #RMSE0.7831368547918899Hyperparameter Tuning
model = RandomForestRegressor(n_estimators=35,random_state=101)
model.fit(X_train,y_train)RandomForestRegressor(n_estimators=35, random_state=101)validation_predictions = model.predict(X_validation)mean_absolute_error(y_validation,validation_predictions)0.6759047619047621mean_squared_error(y_validation,validation_predictions)**0.5 #RMSE0.8585352183157281Final Hold Out Test Performance for Reporting
model = RandomForestRegressor(n_estimators=35,random_state=101)
model.fit(X_train,y_train)RandomForestRegressor(n_estimators=35, random_state=101)test_predictions = model.predict(X_holdout_test)mean_absolute_error(y_holdout_test,test_predictions)0.5817142857142852mean_squared_error(y_holdout_test,test_predictions)**0.50.730550812603694Full Training
final_model = RandomForestRegressor(n_estimators=35,random_state=101)final_model.fit(X,y)RandomForestRegressor()Saving Model (and anything else as pickle file)
joblib.dump(final_model,'final_model.pkl')['final_model.pkl']X.columnsIndex(['TV', 'radio', 'newspaper'], dtype='object')list(X.columns)['TV', 'radio', 'newspaper']joblib.dump(list(X.columns),'column_names.pkl')['column_names.pkl']Loading Model (Model Persistence)
col_names = joblib.load('column_names.pkl')col_names['TV', 'radio', 'newspaper']loaded_model = joblib.load('final_model.pkl')loaded_model.predict([[230.1,37.8,69.2]])array([21.998])