Skip to content

Commit d76fe14

Browse files
committed
begin adding smoke model monitoring
1 parent 5fe66aa commit d76fe14

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

src/models/ModelClasses.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class FireRiskModels():
3838
def __init__(self,Modeltype ='propensity',ACS_year = '2016'):
3939

4040
self.SEED = 0
41-
self.type = Modeltype
41+
self.Modeltype = Modeltype
4242

4343

4444
def train(self,NFIRS,ACS,ACS_variables =None, test_year='Current',n_years = 5):
@@ -83,7 +83,7 @@ def train(self,NFIRS,ACS,ACS_variables =None, test_year='Current',n_years = 5):
8383
# predict 2017 using 2016-2015 data
8484

8585
X_train, y_train,input1, Xtrain_years = self.munge_dataset(top10,fires,ACS_data,ACS.tot_pop, n_years,test_year_idx-1)
86-
self.X_train = X_train
86+
8787

8888

8989
X_test, y_test,Input, Xtest_years = self.munge_dataset(top10,fires,ACS_data,ACS.tot_pop, n_years,test_year_idx)
@@ -92,6 +92,12 @@ def train(self,NFIRS,ACS,ACS_variables =None, test_year='Current',n_years = 5):
9292
inference_years = np.append(Xtest_years, str(test_year))
9393
self.years_used = np.union1d(model_years, inference_years)
9494

95+
# Save Training Data
96+
self.X_train = X_train
97+
self.X_test = X_test
98+
self.y_train = y_train
99+
self.y_test = y_test
100+
95101

96102
# Note: `Input` is used for manual data validation to ensure munging performed correctly
97103

@@ -144,14 +150,20 @@ def train(self,NFIRS,ACS,ACS_variables =None, test_year='Current',n_years = 5):
144150
print (confusion_matrix(y_test, self.test_predictions))
145151
print (roc_auc_score(y_test, self.test_prediction_probs[:,1]))
146152
print (classification_report(y_test,self.test_predictions))
153+
self.Classification_report = classification_report(y_test,self.test_predictions,output_dict=True )
147154
#print (log_loss(y_test,self.test_predictions))
148155

149156

150157
#Calculate feature importance for each model
151158
importances = model.feature_importances_
152159
indices = np.argsort(importances)[::-1]
160+
161+
self.Feature_importances = dict()
153162
print("Feature ranking:")
154163
for f in range(len(X_test.columns)):
164+
165+
self.Feature_importances[ X_test.columns[indices[f]] ] = importances[indices[f]]
166+
155167
print("%d. %s (%f)" % (f + 1, X_test.columns[indices[f]], importances[indices[f]]))
156168

157169

@@ -162,6 +174,26 @@ def train(self,NFIRS,ACS,ACS_variables =None, test_year='Current',n_years = 5):
162174

163175
def predict(self,NFIRS,ACS=[],predict_year='Current'):
164176
pass
177+
178+
179+
def save(self,save_path):
180+
import json
181+
# save model
182+
# note save_path Should be a Pathlib object
183+
184+
self.model.save_model( save_path / f'Fire{self.Modeltype} Model.json' )
185+
186+
# save model metrics
187+
with open( save_path / f'Fire{self.Modeltype}_ClassificationReport.json', 'w') as outfile:
188+
json.dump(self.Classification_report, outfile)
189+
190+
# save Model Data
191+
self.X_train.to_csv( save_path / X_train.csv )
192+
self.X_test.to_csv( save_path / X_test.csv )
193+
self.y_train.to_csv( save_path / y_train.csv )
194+
self.y_train.to_csv( save_path / y_train.csv )
195+
196+
165197

166198
@staticmethod
167199
def munge_dataset(top10,fires,ACS,tot_pop, n_years,test_year_idx):

0 commit comments

Comments
 (0)