print("test", test_score) print(classification_report(y_test, pipe.predict(X_test))) data[labels.name + ' probability'] = pipe.predict_proba(X)[:, 1] # Create LIME Explainer feature_names = list(ce.columns_) categorical_features = list(ce.cat_columns_ix_.values()) categorical_names = {i: ce.classes_[c] for c, i in ce.cat_columns_ix_.items()} class_names = ['No ' + labels.name, labels.name] explainer = LimeTabularExplainer(ce.transform(data), feature_names=feature_names, class_names=class_names, categorical_features=categorical_features, categorical_names=categorical_names) # Create and save the combined Logistic Regression and LIME Explained Model. explainedmodel = ExplainedModel(data=data, labels=labels, model_name='telco_linear', categoricalencoder=ce, pipeline=pipe, explainer=explainer,data_dir=data_dir) explainedmodel.save() # If running as as experiment, this will track the metrics and add the model trained in this training run to the experiment history. cdsw.track_metric("train_score",round(train_score,2)) cdsw.track_metric("test_score",round(test_score,2)) cdsw.track_metric("model_path",explainedmodel.model_path) cdsw.track_file(explainedmodel.model_path)
#import os, sys from collections import ChainMap #from pandas.io.json import dumps as jsonify from churnexplainer import ExplainedModel em = ExplainedModel(model_name='telco_linear',data_dir='/home/cdsw') def explain(args): #data = dict(ChainMap(request.args, em.default_data)) data = dict(ChainMap(args, em.default_data)) data = em.cast_dct(data) probability, explanation = em.explain_dct(data) return { 'data': dict(data), 'probability': probability, 'explanation': explanation } #test #x={"StreamingTV":"No","MonthlyCharges":70.35,"PhoneService":"No","PaperlessBilling":"No","Partner":"No","OnlineBackup":"No","gender":"Female","Contract":"Month-to-month","TotalCharges":1397.475,"StreamingMovies":"No","DeviceProtection":"No","PaymentMethod":"Bank transfer (automatic)","tenure":29,"Dependents":"No","OnlineSecurity":"No","MultipleLines":"No","InternetService":"DSL","SeniorCitizen":"No","TechSupport":"No"} #explain(x)
log = logging.getLogger("werkzeug") log.setLevel(logging.ERROR) # Since we have access in an environment variable, we want to write it to our UI # Change the line in the flask/single_view.html file. if os.environ.get("SHTM_ACCESS_KEY") != None: access_key = os.environ.get("SHTM_ACCESS_KEY", "") subprocess.call([ "sed", "-i", 's/const\saccessKey.*/const accessKey = "' + access_key + '";/', "/home/cdsw/flask/single_view.html", ]) # Load the explained model em = ExplainedModel(model_name="telco_linear", data_dir="/home/cdsw") # Creates an explained version of a partiuclar data point. This is almost exactly the same as the data used in the model serving code. def explainid(N): customer_data = dataid(N)[0] customer_data.pop("id") customer_data.pop("Churn probability") data = em.cast_dct(customer_data) probability, explanation = em.explain_dct(data) return { "data": dict(data), "probability": probability, "explanation": explanation, "id": int(N), }