From b5b92e3ef0c5a79502acc8b56e7a29571e791b90 Mon Sep 17 00:00:00 2001 From: Chris Russell Date: Wed, 19 Jun 2024 23:17:19 +0100 Subject: [PATCH] rebuild notebooks --- examples/adult_fairlearn_comparision.ipynb | 657 ++++--- examples/high-dim_fairlearn_comparision.ipynb | 317 +-- .../multi_group_fairlearn_comparision.ipynb | 325 +--- examples/quickstart_xgboost.ipynb | 1732 ++++++++--------- 4 files changed, 1388 insertions(+), 1643 deletions(-) diff --git a/examples/adult_fairlearn_comparision.ipynb b/examples/adult_fairlearn_comparision.ipynb index f85fa8d..c00162c 100644 --- a/examples/adult_fairlearn_comparision.ipynb +++ b/examples/adult_fairlearn_comparision.ipynb @@ -163,43 +163,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.187550\n", - " 0.160686\n", + " 0.200729\n", + " 0.161794\n", " \n", " \n", " Predictive Parity\n", - " 0.114406\n", - " 0.128911\n", + " 0.095843\n", + " 0.095927\n", " \n", " \n", " Equal Opportunity\n", - " 0.061973\n", - " 0.014374\n", + " 0.091404\n", + " 0.021044\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.061973\n", - " 0.014374\n", + " 0.091404\n", + " 0.021044\n", " \n", " \n", " Equalized Odds\n", - " 0.081831\n", - " 0.049741\n", + " 0.101773\n", + " 0.055598\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.111037\n", - " 0.125743\n", + " 0.099629\n", + " 0.111880\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.121397\n", - " 0.123448\n", + " 0.125470\n", + " 0.134539\n", " \n", " \n", " Treatment Equality\n", - " 0.247530\n", - " 0.523846\n", + " 0.012277\n", + " 0.281679\n", " \n", " \n", "\n", @@ -207,14 +207,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.187550 0.160686\n", - "Predictive Parity 0.114406 0.128911\n", - "Equal Opportunity 0.061973 0.014374\n", - "Average Group Difference in False Negative Rate 0.061973 0.014374\n", - "Equalized Odds 0.081831 0.049741\n", - "Conditional Use Accuracy 0.111037 0.125743\n", - "Average Group Difference in Accuracy 0.121397 0.123448\n", - "Treatment Equality 0.247530 0.523846" + "Statistical Parity 0.200729 0.161794\n", + "Predictive Parity 0.095843 0.095927\n", + "Equal Opportunity 0.091404 0.021044\n", + "Average Group Difference in False Negative Rate 0.091404 0.021044\n", + "Equalized Odds 0.101773 0.055598\n", + "Conditional Use Accuracy 0.099629 0.111880\n", + "Average Group Difference in Accuracy 0.125470 0.134539\n", + "Treatment Equality 0.012277 0.281679" ] }, "execution_count": 5, @@ -273,43 +273,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.184112\n", - " 0.157874\n", + " 0.192595\n", + " 0.148528\n", " \n", " \n", " Predictive Parity\n", - " 0.115583\n", - " 0.128469\n", + " 0.088080\n", + " 0.088552\n", " \n", " \n", " Equal Opportunity\n", - " 0.063914\n", - " 0.016894\n", + " 0.061808\n", + " 0.014514\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.063914\n", - " 0.016894\n", + " 0.061808\n", + " 0.014514\n", " \n", " \n", " Equalized Odds\n", - " 0.081155\n", - " 0.049132\n", + " 0.085363\n", + " 0.049967\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.112489\n", - " 0.125768\n", + " 0.099167\n", + " 0.113456\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.121499\n", - " 0.122951\n", + " 0.129501\n", + " 0.141496\n", " \n", " \n", " Treatment Equality\n", - " 0.232591\n", - " 0.476311\n", + " 0.114719\n", + " 0.368360\n", " \n", " \n", "\n", @@ -317,14 +317,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.184112 0.157874\n", - "Predictive Parity 0.115583 0.128469\n", - "Equal Opportunity 0.063914 0.016894\n", - "Average Group Difference in False Negative Rate 0.063914 0.016894\n", - "Equalized Odds 0.081155 0.049132\n", - "Conditional Use Accuracy 0.112489 0.125768\n", - "Average Group Difference in Accuracy 0.121499 0.122951\n", - "Treatment Equality 0.232591 0.476311" + "Statistical Parity 0.192595 0.148528\n", + "Predictive Parity 0.088080 0.088552\n", + "Equal Opportunity 0.061808 0.014514\n", + "Average Group Difference in False Negative Rate 0.061808 0.014514\n", + "Equalized Odds 0.085363 0.049967\n", + "Conditional Use Accuracy 0.099167 0.113456\n", + "Average Group Difference in Accuracy 0.129501 0.141496\n", + "Treatment Equality 0.114719 0.368360" ] }, "execution_count": 6, @@ -383,38 +383,38 @@ " \n", " \n", " Accuracy\n", - " 0.810401\n", - " 0.806552\n", + " 0.811384\n", + " 0.803767\n", " \n", " \n", " Balanced Accuracy\n", - " 0.747187\n", - " 0.732342\n", + " 0.748654\n", + " 0.715969\n", " \n", " \n", " F1 score\n", - " 0.612423\n", - " 0.593460\n", + " 0.614561\n", + " 0.571837\n", " \n", " \n", " MCC\n", - " 0.487204\n", - " 0.466558\n", + " 0.489989\n", + " 0.445613\n", " \n", " \n", " Precision\n", - " 0.599476\n", - " 0.596953\n", + " 0.601376\n", + " 0.598355\n", " \n", " \n", " Recall\n", - " 0.625941\n", - " 0.590007\n", + " 0.628337\n", + " 0.547570\n", " \n", " \n", " ROC AUC\n", - " 0.747187\n", - " 0.703610\n", + " 0.748654\n", + " 0.732474\n", " \n", " \n", "\n", @@ -422,13 +422,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.810401 0.806552\n", - "Balanced Accuracy 0.747187 0.732342\n", - "F1 score 0.612423 0.593460\n", - "MCC 0.487204 0.466558\n", - "Precision 0.599476 0.596953\n", - "Recall 0.625941 0.590007\n", - "ROC AUC 0.747187 0.703610" + "Accuracy 0.811384 0.803767\n", + "Balanced Accuracy 0.748654 0.715969\n", + "F1 score 0.614561 0.571837\n", + "MCC 0.489989 0.445613\n", + "Precision 0.601376 0.598355\n", + "Recall 0.628337 0.547570\n", + "ROC AUC 0.748654 0.732474" ] }, "execution_count": 7, @@ -487,38 +487,38 @@ " \n", " \n", " Accuracy\n", - " 0.811318\n", - " 0.805995\n", + " 0.810663\n", + " 0.802883\n", " \n", " \n", " Balanced Accuracy\n", - " 0.744150\n", - " 0.725404\n", + " 0.744658\n", + " 0.713858\n", " \n", " \n", " F1 score\n", - " 0.609492\n", - " 0.584750\n", + " 0.609723\n", + " 0.568715\n", " \n", " \n", " MCC\n", - " 0.485152\n", - " 0.458510\n", + " 0.484844\n", + " 0.442154\n", " \n", " \n", " Precision\n", - " 0.603761\n", - " 0.599353\n", + " 0.601599\n", + " 0.596841\n", " \n", " \n", " Recall\n", - " 0.615332\n", - " 0.570842\n", + " 0.618070\n", + " 0.543121\n", " \n", " \n", " ROC AUC\n", - " 0.744109\n", - " 0.699059\n", + " 0.744658\n", + " 0.727113\n", " \n", " \n", "\n", @@ -526,13 +526,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.811318 0.805995\n", - "Balanced Accuracy 0.744150 0.725404\n", - "F1 score 0.609492 0.584750\n", - "MCC 0.485152 0.458510\n", - "Precision 0.603761 0.599353\n", - "Recall 0.615332 0.570842\n", - "ROC AUC 0.744109 0.699059" + "Accuracy 0.810663 0.802883\n", + "Balanced Accuracy 0.744658 0.713858\n", + "F1 score 0.609723 0.568715\n", + "MCC 0.484844 0.442154\n", + "Precision 0.601599 0.596841\n", + "Recall 0.618070 0.543121\n", + "ROC AUC 0.744658 0.727113" ] }, "execution_count": 8, @@ -998,16 +998,13 @@ " /* fitted */\n", " background-color: var(--sklearn-color-fitted-level-3);\n", "}\n", - "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x30d1093c0>,\n",
-       "                      estimator=DecisionTreeClassifier(),\n",
-       "                      nu=2.8954273085152237e-05)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x1649162c0>,\n",
+       "                      estimator=DecisionTreeClassifier(), nu=0.0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ - "ExponentiatedGradient(constraints=,\n", - " estimator=DecisionTreeClassifier(),\n", - " nu=2.8954273085152237e-05)" + "ExponentiatedGradient(constraints=,\n", + " estimator=DecisionTreeClassifier(), nu=0.0)" ] }, "execution_count": 9, @@ -1068,78 +1065,78 @@ " \n", " \n", " Accuracy\n", - " 0.999918\n", - " 0.810990\n", + " 1.000000\n", + " 0.808697\n", " \n", " \n", " Balanced Accuracy\n", - " 0.999888\n", - " 0.742996\n", + " 1.000000\n", + " 0.741724\n", " \n", " \n", " F1 score\n", - " 0.999829\n", - " 0.608016\n", + " 1.000000\n", + " 0.605405\n", " \n", " \n", " MCC\n", - " 0.999775\n", - " 0.483521\n", + " 1.000000\n", + " 0.479245\n", " \n", " \n", " Precision\n", - " 0.999829\n", - " 0.603506\n", + " 1.000000\n", + " 0.597732\n", " \n", " \n", " Recall\n", - " 0.999829\n", - " 0.612594\n", + " 1.000000\n", + " 0.613279\n", " \n", " \n", " ROC AUC\n", - " 0.999888\n", - " 0.742996\n", + " 1.000000\n", + " 0.741724\n", " \n", " \n", " Statistical Parity\n", - " 0.194762\n", - " 0.180055\n", + " 0.194578\n", + " 0.197648\n", " \n", " \n", " Predictive Parity\n", - " 0.000202\n", - " 0.131554\n", + " 0.000000\n", + " 0.070381\n", " \n", " \n", " Equal Opportunity\n", - " 0.001131\n", - " 0.068685\n", + " 0.000000\n", + " 0.064160\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.001131\n", - " 0.068685\n", + " 0.000000\n", + " 0.064160\n", " \n", " \n", " Equalized Odds\n", - " 0.000610\n", - " 0.080923\n", + " 0.000000\n", + " 0.090139\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.000170\n", - " 0.120165\n", + " 0.000000\n", + " 0.091150\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.000062\n", - " 0.117185\n", + " 0.000000\n", + " 0.135767\n", " \n", " \n", " Treatment Equality\n", - " 1.000000\n", - " 0.284807\n", + " 0.000000\n", + " 0.024078\n", " \n", " \n", "\n", @@ -1147,21 +1144,21 @@ ], "text/plain": [ " train test\n", - "Accuracy 0.999918 0.810990\n", - "Balanced Accuracy 0.999888 0.742996\n", - "F1 score 0.999829 0.608016\n", - "MCC 0.999775 0.483521\n", - "Precision 0.999829 0.603506\n", - "Recall 0.999829 0.612594\n", - "ROC AUC 0.999888 0.742996\n", - "Statistical Parity 0.194762 0.180055\n", - "Predictive Parity 0.000202 0.131554\n", - "Equal Opportunity 0.001131 0.068685\n", - "Average Group Difference in False Negative Rate 0.001131 0.068685\n", - "Equalized Odds 0.000610 0.080923\n", - "Conditional Use Accuracy 0.000170 0.120165\n", - "Average Group Difference in Accuracy 0.000062 0.117185\n", - "Treatment Equality 1.000000 0.284807" + "Accuracy 1.000000 0.808697\n", + "Balanced Accuracy 1.000000 0.741724\n", + "F1 score 1.000000 0.605405\n", + "MCC 1.000000 0.479245\n", + "Precision 1.000000 0.597732\n", + "Recall 1.000000 0.613279\n", + "ROC AUC 1.000000 0.741724\n", + "Statistical Parity 0.194578 0.197648\n", + "Predictive Parity 0.000000 0.070381\n", + "Equal Opportunity 0.000000 0.064160\n", + "Average Group Difference in False Negative Rate 0.000000 0.064160\n", + "Equalized Odds 0.000000 0.090139\n", + "Conditional Use Accuracy 0.000000 0.091150\n", + "Average Group Difference in Accuracy 0.000000 0.135767\n", + "Treatment Equality 0.000000 0.024078" ] }, "execution_count": 10, @@ -1172,7 +1169,8 @@ "source": [ "def eval(train, classifier=mitagator):\n", " return pd.concat((performance.evaluate(train['target'], classifier.predict(train['data'])),\n", - " performance.evaluate_fairness(train['target'], classifier.predict(train['data']), train['groups'])),axis=0)\n", + " performance.evaluate_fairness(train['target'], classifier.predict(train['data']), \n", + " train['data'][train['groups']])),axis=0)\n", "\n", "out = pd.concat((eval(train), eval(test)), axis=1)\n", "out.columns = ['train', 'test']\n", @@ -1226,78 +1224,78 @@ " \n", " \n", " Accuracy\n", - " 0.999918\n", - " 0.811318\n", + " 1.000000\n", + " 0.810663\n", " \n", " \n", " Balanced Accuracy\n", - " 0.999829\n", - " 0.744150\n", + " 1.000000\n", + " 0.744658\n", " \n", " \n", " F1 score\n", - " 0.999829\n", - " 0.609492\n", + " 1.000000\n", + " 0.609723\n", " \n", " \n", " MCC\n", - " 0.999775\n", - " 0.485152\n", + " 1.000000\n", + " 0.484844\n", " \n", " \n", " Precision\n", " 1.000000\n", - " 0.603761\n", + " 0.601599\n", " \n", " \n", " Recall\n", - " 0.999658\n", - " 0.615332\n", + " 1.000000\n", + " 0.618070\n", " \n", " \n", " ROC AUC\n", - " 0.999829\n", - " 0.744150\n", + " 1.000000\n", + " 0.744658\n", " \n", " \n", " Statistical Parity\n", - " 0.194640\n", - " 0.184112\n", + " 0.194578\n", + " 0.192595\n", " \n", " \n", " Predictive Parity\n", " 0.000000\n", - " 0.115583\n", + " 0.088080\n", " \n", " \n", " Equal Opportunity\n", - " 0.000930\n", - " 0.063914\n", + " 0.000000\n", + " 0.061808\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.000930\n", - " 0.063914\n", + " 0.000000\n", + " 0.061808\n", " \n", " \n", " Equalized Odds\n", - " 0.000465\n", - " 0.081155\n", + " 0.000000\n", + " 0.085363\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.000025\n", - " 0.112489\n", + " 0.000000\n", + " 0.099167\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.000062\n", - " 0.121499\n", + " 0.000000\n", + " 0.129501\n", " \n", " \n", " Treatment Equality\n", " 0.000000\n", - " 0.232591\n", + " 0.114719\n", " \n", " \n", "\n", @@ -1305,21 +1303,21 @@ ], "text/plain": [ " train test\n", - "Accuracy 0.999918 0.811318\n", - "Balanced Accuracy 0.999829 0.744150\n", - "F1 score 0.999829 0.609492\n", - "MCC 0.999775 0.485152\n", - "Precision 1.000000 0.603761\n", - "Recall 0.999658 0.615332\n", - "ROC AUC 0.999829 0.744150\n", - "Statistical Parity 0.194640 0.184112\n", - "Predictive Parity 0.000000 0.115583\n", - "Equal Opportunity 0.000930 0.063914\n", - "Average Group Difference in False Negative Rate 0.000930 0.063914\n", - "Equalized Odds 0.000465 0.081155\n", - "Conditional Use Accuracy 0.000025 0.112489\n", - "Average Group Difference in Accuracy 0.000062 0.121499\n", - "Treatment Equality 0.000000 0.232591" + "Accuracy 1.000000 0.810663\n", + "Balanced Accuracy 1.000000 0.744658\n", + "F1 score 1.000000 0.609723\n", + "MCC 1.000000 0.484844\n", + "Precision 1.000000 0.601599\n", + "Recall 1.000000 0.618070\n", + "ROC AUC 1.000000 0.744658\n", + "Statistical Parity 0.194578 0.192595\n", + "Predictive Parity 0.000000 0.088080\n", + "Equal Opportunity 0.000000 0.061808\n", + "Average Group Difference in False Negative Rate 0.000000 0.061808\n", + "Equalized Odds 0.000000 0.085363\n", + "Conditional Use Accuracy 0.000000 0.099167\n", + "Average Group Difference in Accuracy 0.000000 0.129501\n", + "Treatment Equality 0.000000 0.114719" ] }, "execution_count": 11, @@ -1380,43 +1378,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.177003\n", - " 0.141355\n", + " 0.184390\n", + " 0.166026\n", " \n", " \n", " Predictive Parity\n", - " 0.007289\n", - " 0.083214\n", + " 0.019392\n", + " 0.061594\n", " \n", " \n", " Equal Opportunity\n", - " 0.090675\n", - " 0.002777\n", + " 0.106631\n", + " 0.012080\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.090675\n", - " 0.002777\n", + " 0.106631\n", + " 0.012080\n", " \n", " \n", " Equalized Odds\n", - " 0.079664\n", - " 0.022729\n", + " 0.092660\n", + " 0.039273\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.050883\n", - " 0.096031\n", + " 0.057711\n", + " 0.081734\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.103941\n", - " 0.099758\n", + " 0.111285\n", + " 0.105621\n", " \n", " \n", " Treatment Equality\n", - " 0.165954\n", - " 0.228167\n", + " 0.256477\n", + " 0.186913\n", " \n", " \n", "\n", @@ -1424,14 +1422,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.177003 0.141355\n", - "Predictive Parity 0.007289 0.083214\n", - "Equal Opportunity 0.090675 0.002777\n", - "Average Group Difference in False Negative Rate 0.090675 0.002777\n", - "Equalized Odds 0.079664 0.022729\n", - "Conditional Use Accuracy 0.050883 0.096031\n", - "Average Group Difference in Accuracy 0.103941 0.099758\n", - "Treatment Equality 0.165954 0.228167" + "Statistical Parity 0.184390 0.166026\n", + "Predictive Parity 0.019392 0.061594\n", + "Equal Opportunity 0.106631 0.012080\n", + "Average Group Difference in False Negative Rate 0.106631 0.012080\n", + "Equalized Odds 0.092660 0.039273\n", + "Conditional Use Accuracy 0.057711 0.081734\n", + "Average Group Difference in Accuracy 0.111285 0.105621\n", + "Treatment Equality 0.256477 0.186913" ] }, "execution_count": 12, @@ -1483,43 +1481,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.177476\n", - " 0.143325\n", + " 0.184497\n", + " 0.167118\n", " \n", " \n", " Predictive Parity\n", - " 0.010084\n", - " 0.070287\n", + " 0.025649\n", + " 0.054314\n", " \n", " \n", " Equal Opportunity\n", - " 0.099217\n", - " 0.013713\n", + " 0.109656\n", + " 0.016784\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.099217\n", - " 0.013713\n", + " 0.109656\n", + " 0.016784\n", " \n", " \n", " Equalized Odds\n", - " 0.084680\n", - " 0.029714\n", + " 0.094767\n", + " 0.043454\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.052987\n", - " 0.090258\n", + " 0.061651\n", + " 0.079540\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.105741\n", - " 0.103289\n", + " 0.113465\n", + " 0.110246\n", " \n", " \n", " Treatment Equality\n", - " 0.172701\n", - " 0.155497\n", + " 0.267356\n", + " 0.137744\n", " \n", " \n", "\n", @@ -1527,14 +1525,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.177476 0.143325\n", - "Predictive Parity 0.010084 0.070287\n", - "Equal Opportunity 0.099217 0.013713\n", - "Average Group Difference in False Negative Rate 0.099217 0.013713\n", - "Equalized Odds 0.084680 0.029714\n", - "Conditional Use Accuracy 0.052987 0.090258\n", - "Average Group Difference in Accuracy 0.105741 0.103289\n", - "Treatment Equality 0.172701 0.155497" + "Statistical Parity 0.184497 0.167118\n", + "Predictive Parity 0.025649 0.054314\n", + "Equal Opportunity 0.109656 0.016784\n", + "Average Group Difference in False Negative Rate 0.109656 0.016784\n", + "Equalized Odds 0.094767 0.043454\n", + "Conditional Use Accuracy 0.061651 0.079540\n", + "Average Group Difference in Accuracy 0.113465 0.110246\n", + "Treatment Equality 0.267356 0.137744" ] }, "execution_count": 13, @@ -1586,38 +1584,38 @@ " \n", " \n", " Accuracy\n", - " 0.860360\n", - " 0.860934\n", + " 0.854464\n", + " 0.854791\n", " \n", " \n", " Balanced Accuracy\n", - " 0.779087\n", - " 0.773247\n", + " 0.771340\n", + " 0.783518\n", " \n", " \n", " F1 score\n", - " 0.681130\n", - " 0.675583\n", + " 0.668037\n", + " 0.680713\n", " \n", " \n", " MCC\n", - " 0.596944\n", - " 0.595141\n", + " 0.579837\n", + " 0.588426\n", " \n", " \n", " Precision\n", - " 0.750928\n", - " 0.764706\n", + " 0.735500\n", + " 0.718358\n", " \n", " \n", " Recall\n", - " 0.623203\n", - " 0.605065\n", + " 0.611910\n", + " 0.646817\n", " \n", " \n", " ROC AUC\n", - " 0.908998\n", - " 0.895994\n", + " 0.903369\n", + " 0.889127\n", " \n", " \n", "\n", @@ -1625,13 +1623,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.860360 0.860934\n", - "Balanced Accuracy 0.779087 0.773247\n", - "F1 score 0.681130 0.675583\n", - "MCC 0.596944 0.595141\n", - "Precision 0.750928 0.764706\n", - "Recall 0.623203 0.605065\n", - "ROC AUC 0.908998 0.895994" + "Accuracy 0.854464 0.854791\n", + "Balanced Accuracy 0.771340 0.783518\n", + "F1 score 0.668037 0.680713\n", + "MCC 0.579837 0.588426\n", + "Precision 0.735500 0.718358\n", + "Recall 0.611910 0.646817\n", + "ROC AUC 0.903369 0.889127" ] }, "execution_count": 14, @@ -1683,38 +1681,38 @@ " \n", " \n", " Accuracy\n", - " 0.857178\n", - " 0.858570\n", + " 0.852756\n", + " 0.850708\n", " \n", " \n", " Balanced Accuracy\n", - " 0.773707\n", - " 0.767584\n", + " 0.767633\n", + " 0.776492\n", " \n", " \n", " F1 score\n", - " 0.672795\n", - " 0.667437\n", + " 0.662664\n", + " 0.670284\n", " \n", " \n", " MCC\n", - " 0.586992\n", - " 0.586832\n", + " 0.573967\n", + " 0.575758\n", " \n", " \n", " Precision\n", - " 0.744601\n", - " 0.763100\n", + " 0.733389\n", + " 0.710779\n", " \n", " \n", " Recall\n", - " 0.613621\n", - " 0.593087\n", + " 0.604381\n", + " 0.634155\n", " \n", " \n", " ROC AUC\n", - " 0.905340\n", - " 0.891552\n", + " 0.900784\n", + " 0.884691\n", " \n", " \n", "\n", @@ -1722,13 +1720,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.857178 0.858570\n", - "Balanced Accuracy 0.773707 0.767584\n", - "F1 score 0.672795 0.667437\n", - "MCC 0.586992 0.586832\n", - "Precision 0.744601 0.763100\n", - "Recall 0.613621 0.593087\n", - "ROC AUC 0.905340 0.891552" + "Accuracy 0.852756 0.850708\n", + "Balanced Accuracy 0.767633 0.776492\n", + "F1 score 0.662664 0.670284\n", + "MCC 0.573967 0.575758\n", + "Precision 0.733389 0.710779\n", + "Recall 0.604381 0.634155\n", + "ROC AUC 0.900784 0.884691" ] }, "execution_count": 15, @@ -2187,16 +2185,13 @@ " /* fitted */\n", " background-color: var(--sklearn-color-fitted-level-3);\n", "}\n", - "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x30d33eb30>,\n",
-       "                      estimator=RandomForestClassifier(),\n",
-       "                      nu=3.5460871351809455e-05)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x164916e30>,\n",
+       "                      estimator=RandomForestClassifier(), nu=0.0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ - "ExponentiatedGradient(constraints=,\n", - " estimator=RandomForestClassifier(),\n", - " nu=3.5460871351809455e-05)" + "ExponentiatedGradient(constraints=,\n", + " estimator=RandomForestClassifier(), nu=0.0)" ] }, "execution_count": 16, @@ -2205,8 +2200,8 @@ } ], "source": [ - "mitagator = ExponentiatedGradient(RandomForestClassifier(),TruePositiveRateParity())\n", - "mitagator.fit(X=train['data'],y=train['target'],sensitive_features=train['data']['sex'])" + "mitagator = ExponentiatedGradient(RandomForestClassifier(), TruePositiveRateParity())\n", + "mitagator.fit(X=train['data'], y=train['target'], sensitive_features=train['data']['sex'])" ] }, { @@ -2249,78 +2244,78 @@ " \n", " \n", " Accuracy\n", - " 0.999918\n", - " 0.855540\n", + " 1.000000\n", + " 0.853820\n", " \n", " \n", " Balanced Accuracy\n", - " 0.999888\n", - " 0.770050\n", + " 1.000000\n", + " 0.769271\n", " \n", " \n", " F1 score\n", - " 0.999829\n", - " 0.667546\n", + " 1.000000\n", + " 0.665292\n", " \n", " \n", " MCC\n", - " 0.999775\n", - " 0.581346\n", + " 1.000000\n", + " 0.577209\n", " \n", " \n", " Precision\n", - " 0.999829\n", - " 0.742869\n", + " 1.000000\n", + " 0.735794\n", " \n", " \n", " Recall\n", - " 0.999829\n", - " 0.606092\n", + " 1.000000\n", + " 0.607118\n", " \n", " \n", " ROC AUC\n", - " 0.999888\n", - " 0.770050\n", + " 1.000000\n", + " 0.769271\n", " \n", " \n", " Statistical Parity\n", - " 0.194762\n", - " 0.180079\n", + " 0.194578\n", + " 0.186343\n", " \n", " \n", " Predictive Parity\n", - " 0.000202\n", - " 0.011680\n", + " 0.000000\n", + " 0.022945\n", " \n", " \n", " Equal Opportunity\n", - " 0.001131\n", - " 0.122334\n", + " 0.000000\n", + " 0.120878\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.001131\n", - " 0.122334\n", + " 0.000000\n", + " 0.120878\n", " \n", " \n", " Equalized Odds\n", - " 0.000610\n", - " 0.096742\n", + " 0.000000\n", + " 0.100165\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.000170\n", - " 0.053005\n", + " 0.000000\n", + " 0.059111\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.000062\n", - " 0.104866\n", + " 0.000000\n", + " 0.111134\n", " \n", " \n", " Treatment Equality\n", - " 1.000000\n", - " 0.203247\n", + " 0.000000\n", + " 0.279414\n", " \n", " \n", "\n", @@ -2328,21 +2323,21 @@ ], "text/plain": [ " train test\n", - "Accuracy 0.999918 0.855540\n", - "Balanced Accuracy 0.999888 0.770050\n", - "F1 score 0.999829 0.667546\n", - "MCC 0.999775 0.581346\n", - "Precision 0.999829 0.742869\n", - "Recall 0.999829 0.606092\n", - "ROC AUC 0.999888 0.770050\n", - "Statistical Parity 0.194762 0.180079\n", - "Predictive Parity 0.000202 0.011680\n", - "Equal Opportunity 0.001131 0.122334\n", - "Average Group Difference in False Negative Rate 0.001131 0.122334\n", - "Equalized Odds 0.000610 0.096742\n", - "Conditional Use Accuracy 0.000170 0.053005\n", - "Average Group Difference in Accuracy 0.000062 0.104866\n", - "Treatment Equality 1.000000 0.203247" + "Accuracy 1.000000 0.853820\n", + "Balanced Accuracy 1.000000 0.769271\n", + "F1 score 1.000000 0.665292\n", + "MCC 1.000000 0.577209\n", + "Precision 1.000000 0.735794\n", + "Recall 1.000000 0.607118\n", + "ROC AUC 1.000000 0.769271\n", + "Statistical Parity 0.194578 0.186343\n", + "Predictive Parity 0.000000 0.022945\n", + "Equal Opportunity 0.000000 0.120878\n", + "Average Group Difference in False Negative Rate 0.000000 0.120878\n", + "Equalized Odds 0.000000 0.100165\n", + "Conditional Use Accuracy 0.000000 0.059111\n", + "Average Group Difference in Accuracy 0.000000 0.111134\n", + "Treatment Equality 0.000000 0.279414" ] }, "execution_count": 17, diff --git a/examples/high-dim_fairlearn_comparision.ipynb b/examples/high-dim_fairlearn_comparision.ipynb index 23d48ae..95ca804 100644 --- a/examples/high-dim_fairlearn_comparision.ipynb +++ b/examples/high-dim_fairlearn_comparision.ipynb @@ -58,13 +58,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "/Users/chris.russell/code/oxon-fair/src/oxonfair/utils/dataset_loader.py:202: SettingWithCopyWarning: \n", + "/Users/chris.russell/code/oxon-fair/src/oxonfair/utils/dataset_loader.py:216: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", " X[X.isnull()] = -1\n", - "/Users/chris.russell/code/oxon-fair/src/oxonfair/utils/dataset_loader.py:202: SettingWithCopyWarning: \n", + "/Users/chris.russell/code/oxon-fair/src/oxonfair/utils/dataset_loader.py:216: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame\n", "\n", "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", @@ -171,43 +171,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.016250\n", - " 0.014167\n", + " 0.025708\n", + " 0.084434\n", " \n", " \n", " Predictive Parity\n", - " 0.005435\n", - " 0.084615\n", + " 0.031401\n", + " 0.095238\n", " \n", " \n", " Equal Opportunity\n", - " 0.064935\n", - " 0.011255\n", + " 0.150649\n", + " 0.009524\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.064935\n", - " 0.011255\n", + " 0.150649\n", + " 0.009524\n", " \n", " \n", " Equalized Odds\n", - " 0.033288\n", - " 0.016807\n", + " 0.075635\n", + " 0.020452\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.009843\n", - " 0.044293\n", + " 0.054287\n", + " 0.070252\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.012500\n", - " 0.019583\n", + " 0.065920\n", + " 0.057193\n", " \n", " \n", " Treatment Equality\n", - " 0.050000\n", - " 0.245455\n", + " 0.111111\n", + " 0.234848\n", " \n", " \n", "\n", @@ -215,14 +215,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.016250 0.014167\n", - "Predictive Parity 0.005435 0.084615\n", - "Equal Opportunity 0.064935 0.011255\n", - "Average Group Difference in False Negative Rate 0.064935 0.011255\n", - "Equalized Odds 0.033288 0.016807\n", - "Conditional Use Accuracy 0.009843 0.044293\n", - "Average Group Difference in Accuracy 0.012500 0.019583\n", - "Treatment Equality 0.050000 0.245455" + "Statistical Parity 0.025708 0.084434\n", + "Predictive Parity 0.031401 0.095238\n", + "Equal Opportunity 0.150649 0.009524\n", + "Average Group Difference in False Negative Rate 0.150649 0.009524\n", + "Equalized Odds 0.075635 0.020452\n", + "Conditional Use Accuracy 0.054287 0.070252\n", + "Average Group Difference in Accuracy 0.065920 0.057193\n", + "Treatment Equality 0.111111 0.234848" ] }, "execution_count": 5, @@ -281,43 +281,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.059044\n", - " 0.064624\n", + " 0.041601\n", + " 0.101147\n", " \n", " \n", " Predictive Parity\n", - " 0.163399\n", - " 0.108065\n", + " 0.185464\n", + " 0.065831\n", " \n", " \n", " Equal Opportunity\n", - " 0.147059\n", - " 0.176471\n", + " 0.058824\n", + " 0.205882\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.147059\n", - " 0.176471\n", + " 0.058824\n", + " 0.205882\n", " \n", " \n", " Equalized Odds\n", - " 0.093486\n", - " 0.107781\n", + " 0.036109\n", + " 0.114259\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.098748\n", - " 0.075119\n", + " 0.113700\n", + " 0.038816\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.004747\n", - " 0.011326\n", + " 0.021453\n", + " 0.017707\n", " \n", " \n", " Treatment Equality\n", - " 0.405983\n", - " 0.550802\n", + " 0.215278\n", + " 0.212121\n", " \n", " \n", "\n", @@ -325,14 +325,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.059044 0.064624\n", - "Predictive Parity 0.163399 0.108065\n", - "Equal Opportunity 0.147059 0.176471\n", - "Average Group Difference in False Negative Rate 0.147059 0.176471\n", - "Equalized Odds 0.093486 0.107781\n", - "Conditional Use Accuracy 0.098748 0.075119\n", - "Average Group Difference in Accuracy 0.004747 0.011326\n", - "Treatment Equality 0.405983 0.550802" + "Statistical Parity 0.041601 0.101147\n", + "Predictive Parity 0.185464 0.065831\n", + "Equal Opportunity 0.058824 0.205882\n", + "Average Group Difference in False Negative Rate 0.058824 0.205882\n", + "Equalized Odds 0.036109 0.114259\n", + "Conditional Use Accuracy 0.113700 0.038816\n", + "Average Group Difference in Accuracy 0.021453 0.017707\n", + "Treatment Equality 0.215278 0.212121" ] }, "execution_count": 6, @@ -391,38 +391,38 @@ " \n", " \n", " Accuracy\n", - " 0.893548\n", - " 0.903226\n", + " 0.922353\n", + " 0.929412\n", " \n", " \n", " Balanced Accuracy\n", - " 0.789074\n", - " 0.826993\n", + " 0.775210\n", + " 0.821078\n", " \n", " \n", " F1 score\n", - " 0.713043\n", - " 0.758065\n", + " 0.697248\n", + " 0.750000\n", " \n", " \n", " MCC\n", - " 0.667074\n", - " 0.703429\n", + " 0.683479\n", + " 0.718412\n", " \n", " \n", " Precision\n", - " 0.872340\n", - " 0.839286\n", + " 0.926829\n", + " 0.865385\n", " \n", " \n", " Recall\n", - " 0.602941\n", - " 0.691176\n", + " 0.558824\n", + " 0.661765\n", " \n", " \n", " ROC AUC\n", - " 0.897302\n", - " 0.881745\n", + " 0.933844\n", + " 0.912300\n", " \n", " \n", "\n", @@ -430,13 +430,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.893548 0.903226\n", - "Balanced Accuracy 0.789074 0.826993\n", - "F1 score 0.713043 0.758065\n", - "MCC 0.667074 0.703429\n", - "Precision 0.872340 0.839286\n", - "Recall 0.602941 0.691176\n", - "ROC AUC 0.897302 0.881745" + "Accuracy 0.922353 0.929412\n", + "Balanced Accuracy 0.775210 0.821078\n", + "F1 score 0.697248 0.750000\n", + "MCC 0.683479 0.718412\n", + "Precision 0.926829 0.865385\n", + "Recall 0.558824 0.661765\n", + "ROC AUC 0.933844 0.912300" ] }, "execution_count": 7, @@ -495,38 +495,38 @@ " \n", " \n", " Accuracy\n", - " 0.877419\n", - " 0.874194\n", + " 0.905882\n", + " 0.903529\n", " \n", " \n", " Balanced Accuracy\n", - " 0.757596\n", - " 0.771390\n", + " 0.741597\n", + " 0.769958\n", " \n", " \n", " F1 score\n", - " 0.660714\n", - " 0.672269\n", + " 0.629630\n", + " 0.655462\n", " \n", " \n", " MCC\n", - " 0.610892\n", - " 0.605831\n", + " 0.606665\n", + " 0.609107\n", " \n", " \n", " Precision\n", - " 0.840909\n", - " 0.784314\n", + " 0.850000\n", + " 0.764706\n", " \n", " \n", " Recall\n", - " 0.544118\n", - " 0.588235\n", + " 0.500000\n", + " 0.573529\n", " \n", " \n", " ROC AUC\n", - " 0.898396\n", - " 0.853610\n", + " 0.900972\n", + " 0.862539\n", " \n", " \n", "\n", @@ -534,13 +534,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.877419 0.874194\n", - "Balanced Accuracy 0.757596 0.771390\n", - "F1 score 0.660714 0.672269\n", - "MCC 0.610892 0.605831\n", - "Precision 0.840909 0.784314\n", - "Recall 0.544118 0.588235\n", - "ROC AUC 0.898396 0.853610" + "Accuracy 0.905882 0.903529\n", + "Balanced Accuracy 0.741597 0.769958\n", + "F1 score 0.629630 0.655462\n", + "MCC 0.606665 0.609107\n", + "Precision 0.850000 0.764706\n", + "Recall 0.500000 0.573529\n", + "ROC AUC 0.900972 0.862539" ] }, "execution_count": 8, @@ -1006,7 +1006,7 @@ " /* fitted */\n", " background-color: var(--sklearn-color-fitted-level-3);\n", "}\n", - "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x3094d83a0>,\n",
+       "
ExponentiatedGradient(constraints=<fairlearn.reductions._moments.utility_parity.TruePositiveRateParity object at 0x1659d0130>,\n",
        "                      estimator=XGBClassifier(base_score=None, booster=None,\n",
        "                                              callbacks=None,\n",
        "                                              colsample_bylevel=None,\n",
@@ -1032,7 +1032,7 @@
        "                                              n_estimators=None, n_jobs=None,\n",
        "                                              num_parallel_tree=None,\n",
        "                                              random_state=None, ...),\n",
-       "                      nu=0.0)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ - "ExponentiatedGradient(constraints=,\n", + "ExponentiatedGradient(constraints=,\n", " estimator=XGBClassifier(base_score=None, booster=None,\n", " callbacks=None,\n", " colsample_bylevel=None,\n", @@ -1169,77 +1169,77 @@ " \n", " Accuracy\n", " 1.000000\n", - " 0.877419\n", + " 0.905882\n", " \n", " \n", " Balanced Accuracy\n", " 1.000000\n", - " 0.757596\n", + " 0.741597\n", " \n", " \n", " F1 score\n", " 1.000000\n", - " 0.660714\n", + " 0.629630\n", " \n", " \n", " MCC\n", " 1.000000\n", - " 0.610892\n", + " 0.606665\n", " \n", " \n", " Precision\n", " 1.000000\n", - " 0.840909\n", + " 0.850000\n", " \n", " \n", " Recall\n", " 1.000000\n", - " 0.544118\n", + " 0.500000\n", " \n", " \n", " ROC AUC\n", " 1.000000\n", - " 0.757596\n", + " 0.741597\n", " \n", " \n", " Statistical Parity\n", - " 0.006611\n", - " 0.059044\n", + " 0.088807\n", + " 0.041601\n", " \n", " \n", " Predictive Parity\n", " 0.000000\n", - " 0.163399\n", + " 0.185464\n", " \n", " \n", " Equal Opportunity\n", " 0.000000\n", - " 0.147059\n", + " 0.058824\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", " 0.000000\n", - " 0.147059\n", + " 0.058824\n", " \n", " \n", " Equalized Odds\n", " 0.000000\n", - " 0.093486\n", + " 0.036109\n", " \n", " \n", " Conditional Use Accuracy\n", " 0.000000\n", - " 0.098748\n", + " 0.113700\n", " \n", " \n", " Average Group Difference in Accuracy\n", " 0.000000\n", - " 0.004747\n", + " 0.021453\n", " \n", " \n", " Treatment Equality\n", " 0.000000\n", - " 0.405983\n", + " 0.215278\n", " \n", " \n", "\n", @@ -1247,21 +1247,21 @@ ], "text/plain": [ " train test\n", - "Accuracy 1.000000 0.877419\n", - "Balanced Accuracy 1.000000 0.757596\n", - "F1 score 1.000000 0.660714\n", - "MCC 1.000000 0.610892\n", - "Precision 1.000000 0.840909\n", - "Recall 1.000000 0.544118\n", - "ROC AUC 1.000000 0.757596\n", - "Statistical Parity 0.006611 0.059044\n", - "Predictive Parity 0.000000 0.163399\n", - "Equal Opportunity 0.000000 0.147059\n", - "Average Group Difference in False Negative Rate 0.000000 0.147059\n", - "Equalized Odds 0.000000 0.093486\n", - "Conditional Use Accuracy 0.000000 0.098748\n", - "Average Group Difference in Accuracy 0.000000 0.004747\n", - "Treatment Equality 0.000000 0.405983" + "Accuracy 1.000000 0.905882\n", + "Balanced Accuracy 1.000000 0.741597\n", + "F1 score 1.000000 0.629630\n", + "MCC 1.000000 0.606665\n", + "Precision 1.000000 0.850000\n", + "Recall 1.000000 0.500000\n", + "ROC AUC 1.000000 0.741597\n", + "Statistical Parity 0.088807 0.041601\n", + "Predictive Parity 0.000000 0.185464\n", + "Equal Opportunity 0.000000 0.058824\n", + "Average Group Difference in False Negative Rate 0.000000 0.058824\n", + "Equalized Odds 0.000000 0.036109\n", + "Conditional Use Accuracy 0.000000 0.113700\n", + "Average Group Difference in Accuracy 0.000000 0.021453\n", + "Treatment Equality 0.000000 0.215278" ] }, "execution_count": 10, @@ -1272,7 +1272,8 @@ "source": [ "def eval(train, classifier=mitagator):\n", " return pd.concat((performance.evaluate(train['target'], classifier.predict(train['data'])),\n", - " performance.evaluate_fairness(train['target'], classifier.predict(train['data']), train['groups'])),axis=0)\n", + " performance.evaluate_fairness(train['target'], classifier.predict(train['data']),\n", + " train['data'][train['groups']])),axis=0)\n", "\n", "out = pd.concat((eval(train), eval(test)), axis=1)\n", "out.columns = ['train', 'test']\n", @@ -1327,77 +1328,77 @@ " \n", " Accuracy\n", " 1.000000\n", - " 0.877419\n", + " 0.905882\n", " \n", " \n", " Balanced Accuracy\n", " 1.000000\n", - " 0.757596\n", + " 0.741597\n", " \n", " \n", " F1 score\n", " 1.000000\n", - " 0.660714\n", + " 0.629630\n", " \n", " \n", " MCC\n", " 1.000000\n", - " 0.610892\n", + " 0.606665\n", " \n", " \n", " Precision\n", " 1.000000\n", - " 0.840909\n", + " 0.850000\n", " \n", " \n", " Recall\n", " 1.000000\n", - " 0.544118\n", + " 0.500000\n", " \n", " \n", " ROC AUC\n", " 1.000000\n", - " 0.757596\n", + " 0.741597\n", " \n", " \n", " Statistical Parity\n", - " 0.006611\n", - " 0.059044\n", + " 0.088807\n", + " 0.041601\n", " \n", " \n", " Predictive Parity\n", " 0.000000\n", - " 0.163399\n", + " 0.185464\n", " \n", " \n", " Equal Opportunity\n", " 0.000000\n", - " 0.147059\n", + " 0.058824\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", " 0.000000\n", - " 0.147059\n", + " 0.058824\n", " \n", " \n", " Equalized Odds\n", " 0.000000\n", - " 0.093486\n", + " 0.036109\n", " \n", " \n", " Conditional Use Accuracy\n", " 0.000000\n", - " 0.098748\n", + " 0.113700\n", " \n", " \n", " Average Group Difference in Accuracy\n", " 0.000000\n", - " 0.004747\n", + " 0.021453\n", " \n", " \n", " Treatment Equality\n", " 0.000000\n", - " 0.405983\n", + " 0.215278\n", " \n", " \n", "\n", @@ -1405,21 +1406,21 @@ ], "text/plain": [ " train test\n", - "Accuracy 1.000000 0.877419\n", - "Balanced Accuracy 1.000000 0.757596\n", - "F1 score 1.000000 0.660714\n", - "MCC 1.000000 0.610892\n", - "Precision 1.000000 0.840909\n", - "Recall 1.000000 0.544118\n", - "ROC AUC 1.000000 0.757596\n", - "Statistical Parity 0.006611 0.059044\n", - "Predictive Parity 0.000000 0.163399\n", - "Equal Opportunity 0.000000 0.147059\n", - "Average Group Difference in False Negative Rate 0.000000 0.147059\n", - "Equalized Odds 0.000000 0.093486\n", - "Conditional Use Accuracy 0.000000 0.098748\n", - "Average Group Difference in Accuracy 0.000000 0.004747\n", - "Treatment Equality 0.000000 0.405983" + "Accuracy 1.000000 0.905882\n", + "Balanced Accuracy 1.000000 0.741597\n", + "F1 score 1.000000 0.629630\n", + "MCC 1.000000 0.606665\n", + "Precision 1.000000 0.850000\n", + "Recall 1.000000 0.500000\n", + "ROC AUC 1.000000 0.741597\n", + "Statistical Parity 0.088807 0.041601\n", + "Predictive Parity 0.000000 0.185464\n", + "Equal Opportunity 0.000000 0.058824\n", + "Average Group Difference in False Negative Rate 0.000000 0.058824\n", + "Equalized Odds 0.000000 0.036109\n", + "Conditional Use Accuracy 0.000000 0.113700\n", + "Average Group Difference in Accuracy 0.000000 0.021453\n", + "Treatment Equality 0.000000 0.215278" ] }, "execution_count": 11, diff --git a/examples/multi_group_fairlearn_comparision.ipynb b/examples/multi_group_fairlearn_comparision.ipynb index ed5d4aa..e9954e9 100644 --- a/examples/multi_group_fairlearn_comparision.ipynb +++ b/examples/multi_group_fairlearn_comparision.ipynb @@ -23,20 +23,12 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ "Training time of xgboost without fairness\n", - "0.635854082996957\n" + "0.681041999999934\n" ] } ], @@ -52,7 +44,9 @@ "import fairlearn\n", "import time\n", "import pandas as pd\n", - "train_data, val_data, test_data = dataset_loader.adult('race',train_proportion=0.7,test_proportion=0.3)\n", + "train_data, val_data, test_data = dataset_loader.adult('race',train_proportion=0.7,test_proportion=0.3, replace_groups={'a':'a'})\n", + "\n", + "#Replace groups here is a null op that ensures that groups is not a string, and we can modify it later.\n", "\n", "start=time.perf_counter()\n", "predictor = xgboost.XGBClassifier().fit(X=train_data['data'], y=train_data['target'])\n", @@ -86,7 +80,7 @@ }, { "data": { - "image/png": "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0iW+5YULF9566y19fX1LS8uQkJDy8nLhGqZOnSqVSqdPn95YB+7cuSMSiQ4ePOjl5WVgYNCzZ8/k5GS+GhUVZWVlZWBgMHr06AcPHvDzhZ9e09LShgwZYmZmJpVKPTw8hIMvEom2b98+evRoAwMDOzu7uLi4JoaC7kReu3btCCFnzpzp37+/oaFh+/bt3dzc7t69W2epnJycN954Y8aMGbW1tfUvV+7cudPKysrLy8vU1DQwMHDdunUymYzflZs3b7azs9PT0xOLxdra2sbGxuPGjXN1deUvBjZ2zNDTwZMnT/br18/AwMDV1TU7O7ux7dLW1pbL5a+99pqfn19ISEhCQkJFRUV8fPzAgQPbt29vamrq5+cnPOTu3bs3fvx4ExMTQ0PDfv36Xbx4sYlBa84QvdgOOnbsWJcuXfT19b28vO7cuSNcoYaHnOZ++OGHn3766bvvvvvggw9sbW179uy5bds2f3//Dz74oLy8PCoqaunSpb///js9r+U/o/z9998Nbun169eHDx9uZGQkk8mUSuXff/9N53t6en700Udz5swxMzMbMmTIM/r0Ev4TSGtKSEgghOTn53Mc9/XXX/v6+l68ePG1116j1ffee2/gwIF0esqUKcbGxh9++GFmZubhw4cNDAy2bdtGS9bW1uvXr+c4jr5ydu3aVVBQUFhYyHFcfHy8sbFxVFTUrVu3EhISbGxswsPD//3N/JfR09Pi4mKO42pra48fP66jo5OUlESrHh4eH3/8MZ3esWPHsWPHbt26lZycPGDAgGHDhtH59+7dMzExeeedd9LS0rKzs3fu3JmVlcVx3JQpU0aOHEmfQiqVbt68ucU7X1JSYmhoePXq1adPn8pkslOnTvEla2trExOTb7755saNGzNmzJBIJEOHDv3hhx+ys7NHjRrVrVu32tpajuP++OMPIyOj9evX37hx4/z587179546dSq/BmNj4zVr1ty8efPmzZt1npoQEhsby3FcTk4OIaRr165HjhzJzs4eO3astbV1dXU1x3EpKSkikWjlypXZ2dlffvll+/btpVIpXXzJkiU9e/ak0ydPnoyOjr5+/fr169enTZsmk8lKSkr4Z3n99df37dt38+bNkJAQIyOjBw8e1B8H4U4Uqq6ulkql8+bN+/PPP69fvx4VFXX37l3hs1+5cqVjx44LFy6k7Xft2iXsoZGR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", + "image/png": "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8ePHly9fXrx48eXLlw8ePHjjxg1/f3++GhoaGhsbGxMTc+7cubKyMj8/v5qaGloKDAzMyMiIj4+Pj4/PyMhQKpV0fk1Nja+vb3l5+blz52JiYg4cODB37twW2k0AAGCbiOO452gtEsXGxo4aNap+KS0trX///nfv3rWyslKr1ebm5tHR0QEBAYSQ/Px8S0vLY8eO+fj4ZGZmOjg4pKSkODs7E0JSUlJcXFyysrLs7e2PHz/u5+eXl5enUCgIITExMVOnTi0sLDQ2Nm6sPyUlJVKpVK1WN9GmOfAnbgEAWtcz389b7LsrtVotEonat29PCElPT6+urvb29qYlhULh6Oh44cIFQkhycrJUKqVZRQgZMGCAVCrlS46OjjSrCCE+Pj6VlZXp6el1NlRZWVki0FL9BwCAtqxl4urJkycLFy4MDAykqahSqXR1dTt06MA3kMlkKpWKliwsLITLWlhY8CWZTMbP79Chg66uLi0JrVy5UvoPS0vLFuk/AAC0cS0QV9XV1ePHj6+trd28eXNjbTiOE4lEdJqfeK4SLywsTP2PvLw8zfsPAABtn6ZxVV1dPW7cuJycnMTERP6Co1wur6qqKi4u5psVFhbSMye5XH7//n3hGoqKiviS8FyquLi4urpaeL5FicViYwEN+w8AAEzQKK5oVt28efPEiROmpqb8/L59++ro6CQmJtKHBQUFV69edXV1JYS4uLio1erU1FRaunjxolqt5ktXr14tKCigpYSEBLFY3LdvX016CAAArwbt5jQqKyv7888/6XROTk5GRoaJiYlCoRg7duzly5ePHDlSU1NDT4xMTEx0dXWlUum0adPmzp1rampqYmIyb948JyenwYMHE0K6des2dOjQ6dOnb926lRASFBTk5+dnb29PCPH29nZwcFAqlWvWrHn48OG8efOmT5+O8ycAACDNjKtLly55eXnR6Tlz5hBCpkyZEh4eHhcXRwjp1asX3/L06dOenp6EkPXr12tra48bN66iomLQoEFRUVFaWlq0zd69e0NCQuh9g/7+/vzPubS0tI4ePTpz5kw3Nzd9ff3AwMC1a9e20G4CAADbnu93V20NfncFAPBq+Pd+dwUAAPDyIK4AAIABiCsAAGAA4goAABiAuAIAAAYgrgAAgAGIKwAAYADiCgAAGIC4AgAABiCuAACAAYgrAABgAOIKAAAYgLgC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", "text/plain": [ "
" ] @@ -130,252 +124,7 @@ "shell.execute_reply": "2024-06-17T19:21:25.414759Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:214: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.pos_basis[i][\"+\", e, g] = 1\n", - "/opt/miniconda3/envs/ag/lib/python3.10/site-packages/fairlearn/reductions/_moments/utility_parity.py:215: FutureWarning: ChainedAssignmentError: behaviour will change in pandas 3.0!\n", - "You are setting values through chained assignment. Currently this works in certain cases, but when using Copy-on-Write (which will become the default behaviour in pandas 3.0) this will never work to update the original DataFrame or Series, because the intermediate object on which we are setting values will behave as a copy.\n", - "A typical example is when you are setting values in a column of a DataFrame, like:\n", - "\n", - "df[\"col\"][row_indexer] = value\n", - "\n", - "Use `df.loc[row_indexer, \"col\"] = values` instead, to perform the assignment in a single step and ensure this keeps updating the original `df`.\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - "\n", - " self.neg_basis[i][\"-\", e, g] = 1\n" - ] - } - ], + "outputs": [], "source": [ "for i,name in enumerate ((' Amer-Indian-Eskimo', ' Asian-Pac-Islander', ' Black', ' Other')):\n", " # This looks like a bug, why are we merging ' Other' with itself.\n", @@ -463,39 +212,39 @@ " \n", " \n", " 0\n", + " 0.871826\n", + " 0.020394\n", + " 43.286311\n", " 0.868482\n", - " 0.045112\n", - " 95.299039\n", - " 0.868687\n", - " 0.046261\n", - " 16.292495\n", + " 0.020783\n", + " 44.239217\n", " \n", " \n", " 1\n", - " 0.868073\n", - " 0.029650\n", - " 1.049697\n", - " 0.870461\n", - " 0.015604\n", - " 10.474953\n", + " 0.871622\n", + " 0.017975\n", + " 0.754434\n", + " 0.871826\n", + " 0.019802\n", + " 30.235781\n", " \n", " \n", " 2\n", - " 0.868209\n", - " 0.009898\n", - " 0.043179\n", - " 0.871280\n", - " 0.009638\n", - " 3.923120\n", + " 0.871417\n", + " 0.022778\n", + " 0.088691\n", + " 0.871417\n", + " 0.013146\n", + " 25.762889\n", " \n", " \n", " 3\n", - " 0.870461\n", - " 0.013591\n", - " 0.026398\n", - " 0.870598\n", - " 0.027901\n", - " 4.758493\n", + " 0.871622\n", + " 0.006771\n", + " 0.051017\n", + " 0.871485\n", + " 0.010087\n", + " 19.135028\n", " \n", " \n", "\n", @@ -503,16 +252,16 @@ ], "text/plain": [ " Accuracy Demographic Parity Time Accuracy Demographic Parity \\\n", - "0 0.868482 0.045112 95.299039 0.868687 0.046261 \n", - "1 0.868073 0.029650 1.049697 0.870461 0.015604 \n", - "2 0.868209 0.009898 0.043179 0.871280 0.009638 \n", - "3 0.870461 0.013591 0.026398 0.870598 0.027901 \n", + "0 0.871826 0.020394 43.286311 0.868482 0.020783 \n", + "1 0.871622 0.017975 0.754434 0.871826 0.019802 \n", + "2 0.871417 0.022778 0.088691 0.871417 0.013146 \n", + "3 0.871622 0.006771 0.051017 0.871485 0.010087 \n", "\n", " Time \n", - "0 16.292495 \n", - "1 10.474953 \n", - "2 3.923120 \n", - "3 4.758493 " + "0 44.239217 \n", + "1 30.235781 \n", + "2 25.762889 \n", + "3 19.135028 " ] }, "execution_count": 6, diff --git a/examples/quickstart_xgboost.ipynb b/examples/quickstart_xgboost.ipynb index 726dc0d..a4a3418 100644 --- a/examples/quickstart_xgboost.ipynb +++ b/examples/quickstart_xgboost.ipynb @@ -138,7 +138,7 @@ { "data": { "text/plain": [ - "array([1, 0, 1, ..., 0, 0, 0])" + "array([0, 0, 0, ..., 0, 0, 0])" ] }, "execution_count": 4, @@ -191,38 +191,38 @@ " \n", " \n", " Accuracy\n", - " 0.868315\n", - " 0.848743\n", + " 0.863156\n", + " 0.845222\n", " \n", " \n", " Balanced Accuracy\n", - " 0.797330\n", - " 0.768163\n", + " 0.789951\n", + " 0.759749\n", " \n", " \n", " F1 score\n", - " 0.706140\n", - " 0.660040\n", + " 0.694348\n", + " 0.648176\n", " \n", " \n", " MCC\n", - " 0.624184\n", - " 0.566166\n", + " 0.609134\n", + " 0.553450\n", " \n", " \n", " Precision\n", - " 0.757647\n", - " 0.714058\n", + " 0.745776\n", + " 0.710612\n", " \n", " \n", " Recall\n", - " 0.661191\n", - " 0.613621\n", + " 0.649555\n", + " 0.595825\n", " \n", " \n", " ROC AUC\n", - " 0.925353\n", - " 0.821574\n", + " 0.920422\n", + " 0.813340\n", " \n", " \n", "\n", @@ -230,13 +230,13 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.868315 0.848743\n", - "Balanced Accuracy 0.797330 0.768163\n", - "F1 score 0.706140 0.660040\n", - "MCC 0.624184 0.566166\n", - "Precision 0.757647 0.714058\n", - "Recall 0.661191 0.613621\n", - "ROC AUC 0.925353 0.821574" + "Accuracy 0.863156 0.845222\n", + "Balanced Accuracy 0.789951 0.759749\n", + "F1 score 0.694348 0.648176\n", + "MCC 0.609134 0.553450\n", + "Precision 0.745776 0.710612\n", + "Recall 0.649555 0.595825\n", + "ROC AUC 0.920422 0.813340" ] }, "execution_count": 5, @@ -289,43 +289,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.192654\n", - " 0.013454\n", + " 0.194998\n", + " 0.008199\n", " \n", " \n", " Predictive Parity\n", - " 0.023061\n", - " 0.363074\n", + " 0.030115\n", + " 0.359417\n", " \n", " \n", " Equal Opportunity\n", - " 0.107284\n", - " 0.265979\n", + " 0.114899\n", + " 0.281616\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.107284\n", - " 0.265979\n", + " 0.114899\n", + " 0.281616\n", " \n", " \n", " Equalized Odds\n", - " 0.091696\n", - " 0.166141\n", + " 0.098056\n", + " 0.173844\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.053394\n", - " 0.252662\n", + " 0.058129\n", + " 0.253697\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.100167\n", - " 0.042973\n", + " 0.104928\n", + " 0.048980\n", " \n", " \n", " Treatment Equality\n", - " 0.303553\n", - " 5.708978\n", + " 0.332490\n", + " 5.507195\n", " \n", " \n", "\n", @@ -333,14 +333,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.192654 0.013454\n", - "Predictive Parity 0.023061 0.363074\n", - "Equal Opportunity 0.107284 0.265979\n", - "Average Group Difference in False Negative Rate 0.107284 0.265979\n", - "Equalized Odds 0.091696 0.166141\n", - "Conditional Use Accuracy 0.053394 0.252662\n", - "Average Group Difference in Accuracy 0.100167 0.042973\n", - "Treatment Equality 0.303553 5.708978" + "Statistical Parity 0.194998 0.008199\n", + "Predictive Parity 0.030115 0.359417\n", + "Equal Opportunity 0.114899 0.281616\n", + "Average Group Difference in False Negative Rate 0.114899 0.281616\n", + "Equalized Odds 0.098056 0.173844\n", + "Conditional Use Accuracy 0.058129 0.253697\n", + "Average Group Difference in Accuracy 0.104928 0.048980\n", + "Treatment Equality 0.332490 5.507195" ] }, "execution_count": 6, @@ -419,116 +419,116 @@ " \n", " original\n", " Overall\n", - " 0.868315\n", - " 0.797330\n", - " 0.706140\n", - " 0.624184\n", - " 0.757647\n", - " 0.661191\n", - " 0.925353\n", + " 0.863156\n", + " 0.789951\n", + " 0.694348\n", + " 0.609134\n", + " 0.745776\n", + " 0.649555\n", + " 0.920422\n", " 2922.0\n", " 9289.0\n", " 0.239292\n", - " 0.208828\n", + " 0.208419\n", " \n", " \n", " 0\n", - " 0.935277\n", - " 0.775085\n", - " 0.657963\n", - " 0.632329\n", - " 0.777778\n", - " 0.570136\n", - " 0.941812\n", + " 0.933300\n", + " 0.766035\n", + " 0.643799\n", + " 0.618555\n", + " 0.772152\n", + " 0.552036\n", + " 0.938214\n", " 442.0\n", " 3606.0\n", " 0.109190\n", - " 0.080040\n", + " 0.078063\n", " \n", " \n", " 1\n", - " 0.835110\n", - " 0.790672\n", - " 0.713982\n", - " 0.600346\n", - " 0.754717\n", - " 0.677419\n", - " 0.907388\n", + " 0.828372\n", + " 0.782878\n", + " 0.702485\n", + " 0.584003\n", + " 0.742037\n", + " 0.666935\n", + " 0.900383\n", " 2480.0\n", " 5683.0\n", " 0.303810\n", - " 0.272694\n", + " 0.273061\n", " \n", " \n", " Maximum difference\n", - " 0.100167\n", - " 0.015587\n", - " 0.056019\n", - " 0.031983\n", - " 0.023061\n", - " 0.107284\n", - " 0.034423\n", + " 0.104928\n", + " 0.016844\n", + " 0.058685\n", + " 0.034551\n", + " 0.030115\n", + " 0.114899\n", + " 0.037831\n", " 2038.0\n", " 2077.0\n", " 0.194620\n", - " 0.192654\n", + " 0.194998\n", " \n", " \n", " updated\n", " Overall\n", - " 0.848743\n", - " 0.768163\n", - " 0.660040\n", - " 0.566166\n", - " 0.714058\n", - " 0.613621\n", - " 0.821574\n", + " 0.845222\n", + " 0.759749\n", + " 0.648176\n", + " 0.553450\n", + " 0.710612\n", + " 0.595825\n", + " 0.813340\n", " 2922.0\n", " 9289.0\n", " 0.239292\n", - " 0.205634\n", + " 0.200639\n", " \n", " \n", " 0\n", - " 0.877470\n", - " 0.860754\n", - " 0.599354\n", - " 0.566152\n", - " 0.466080\n", - " 0.839367\n", - " 0.941812\n", + " 0.877964\n", + " 0.859046\n", + " 0.599026\n", + " 0.565086\n", + " 0.467089\n", + " 0.834842\n", + " 0.938214\n", " 442.0\n", " 3606.0\n", " 0.109190\n", - " 0.196640\n", + " 0.195158\n", " \n", " \n", " 1\n", - " 0.834497\n", - " 0.760915\n", - " 0.677950\n", - " 0.589114\n", - " 0.829155\n", - " 0.573387\n", - " 0.907388\n", + " 0.828984\n", + " 0.751274\n", + " 0.662802\n", + " 0.574224\n", + " 0.826506\n", + " 0.553226\n", + " 0.900383\n", " 2480.0\n", " 5683.0\n", " 0.303810\n", - " 0.210094\n", + " 0.203357\n", " \n", " \n", " Maximum difference\n", - " 0.042973\n", - " 0.099839\n", - " 0.078596\n", - " 0.022962\n", - " 0.363074\n", - " 0.265979\n", - " 0.034423\n", + " 0.048980\n", + " 0.107772\n", + " 0.063776\n", + " 0.009138\n", + " 0.359417\n", + " 0.281616\n", + " 0.037831\n", " 2038.0\n", " 2077.0\n", " 0.194620\n", - " 0.013454\n", + " 0.008199\n", " \n", " \n", "\n", @@ -537,25 +537,25 @@ "text/plain": [ " Accuracy Balanced Accuracy F1 score MCC \\\n", " Groups \n", - "original Overall 0.868315 0.797330 0.706140 0.624184 \n", - " 0 0.935277 0.775085 0.657963 0.632329 \n", - " 1 0.835110 0.790672 0.713982 0.600346 \n", - " Maximum difference 0.100167 0.015587 0.056019 0.031983 \n", - "updated Overall 0.848743 0.768163 0.660040 0.566166 \n", - " 0 0.877470 0.860754 0.599354 0.566152 \n", - " 1 0.834497 0.760915 0.677950 0.589114 \n", - " Maximum difference 0.042973 0.099839 0.078596 0.022962 \n", + "original Overall 0.863156 0.789951 0.694348 0.609134 \n", + " 0 0.933300 0.766035 0.643799 0.618555 \n", + " 1 0.828372 0.782878 0.702485 0.584003 \n", + " Maximum difference 0.104928 0.016844 0.058685 0.034551 \n", + "updated Overall 0.845222 0.759749 0.648176 0.553450 \n", + " 0 0.877964 0.859046 0.599026 0.565086 \n", + " 1 0.828984 0.751274 0.662802 0.574224 \n", + " Maximum difference 0.048980 0.107772 0.063776 0.009138 \n", "\n", " Precision Recall ROC AUC Positive Count \\\n", " Groups \n", - "original Overall 0.757647 0.661191 0.925353 2922.0 \n", - " 0 0.777778 0.570136 0.941812 442.0 \n", - " 1 0.754717 0.677419 0.907388 2480.0 \n", - " Maximum difference 0.023061 0.107284 0.034423 2038.0 \n", - "updated Overall 0.714058 0.613621 0.821574 2922.0 \n", - " 0 0.466080 0.839367 0.941812 442.0 \n", - " 1 0.829155 0.573387 0.907388 2480.0 \n", - " Maximum difference 0.363074 0.265979 0.034423 2038.0 \n", + "original Overall 0.745776 0.649555 0.920422 2922.0 \n", + " 0 0.772152 0.552036 0.938214 442.0 \n", + " 1 0.742037 0.666935 0.900383 2480.0 \n", + " Maximum difference 0.030115 0.114899 0.037831 2038.0 \n", + "updated Overall 0.710612 0.595825 0.813340 2922.0 \n", + " 0 0.467089 0.834842 0.938214 442.0 \n", + " 1 0.826506 0.553226 0.900383 2480.0 \n", + " Maximum difference 0.359417 0.281616 0.037831 2038.0 \n", "\n", " Negative Count Positive Label Rate \\\n", " Groups \n", @@ -570,14 +570,14 @@ "\n", " Positive Prediction Rate \n", " Groups \n", - "original Overall 0.208828 \n", - " 0 0.080040 \n", - " 1 0.272694 \n", - " Maximum difference 0.192654 \n", - "updated Overall 0.205634 \n", - " 0 0.196640 \n", - " 1 0.210094 \n", - " Maximum difference 0.013454 " + "original Overall 0.208419 \n", + " 0 0.078063 \n", + " 1 0.273061 \n", + " Maximum difference 0.194998 \n", + "updated Overall 0.200639 \n", + " 0 0.195158 \n", + " 1 0.203357 \n", + " Maximum difference 0.008199 " ] }, "execution_count": 7, @@ -673,43 +673,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.103547\n", - " 0.049493\n", + " 0.125058\n", + " 0.073183\n", " \n", " \n", " Predictive Parity\n", - " 0.074152\n", - " 0.184299\n", + " 0.013161\n", + " 0.134499\n", " \n", " \n", " Equal Opportunity\n", - " 0.210605\n", - " 0.209524\n", + " 0.190932\n", + " 0.079689\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.210605\n", - " 0.209524\n", + " 0.190932\n", + " 0.079689\n", " \n", " \n", " Equalized Odds\n", - " 0.124660\n", - " 0.119844\n", + " 0.114792\n", + " 0.047310\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.060003\n", - " 0.128876\n", + " 0.035533\n", + " 0.101868\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.057328\n", - " 0.040328\n", + " 0.055388\n", + " 0.041906\n", " \n", " \n", " Treatment Equality\n", - " 0.284902\n", - " 2.099200\n", + " 0.220158\n", + " 1.118408\n", " \n", " \n", "\n", @@ -717,14 +717,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.103547 0.049493\n", - "Predictive Parity 0.074152 0.184299\n", - "Equal Opportunity 0.210605 0.209524\n", - "Average Group Difference in False Negative Rate 0.210605 0.209524\n", - "Equalized Odds 0.124660 0.119844\n", - "Conditional Use Accuracy 0.060003 0.128876\n", - "Average Group Difference in Accuracy 0.057328 0.040328\n", - "Treatment Equality 0.284902 2.099200" + "Statistical Parity 0.125058 0.073183\n", + "Predictive Parity 0.013161 0.134499\n", + "Equal Opportunity 0.190932 0.079689\n", + "Average Group Difference in False Negative Rate 0.190932 0.079689\n", + "Equalized Odds 0.114792 0.047310\n", + "Conditional Use Accuracy 0.035533 0.101868\n", + "Average Group Difference in Accuracy 0.055388 0.041906\n", + "Treatment Equality 0.220158 1.118408" ] }, "execution_count": 10, @@ -777,43 +777,43 @@ " \n", " \n", " Statistical Parity\n", - " 0.093956\n", - " 0.019959\n", + " 0.095165\n", + " 0.016903\n", " \n", " \n", " Predictive Parity\n", - " 0.191814\n", - " 0.133510\n", + " 0.106777\n", + " 0.142254\n", " \n", " \n", " Equal Opportunity\n", - " 0.145525\n", - " 0.191602\n", + " 0.191597\n", + " 0.177972\n", " \n", " \n", " Average Group Difference in False Negative Rate\n", - " 0.145525\n", - " 0.191602\n", + " 0.191597\n", + " 0.177972\n", " \n", " \n", " Equalized Odds\n", - " 0.093755\n", - " 0.107181\n", + " 0.118433\n", + " 0.099354\n", " \n", " \n", " Conditional Use Accuracy\n", - " 0.115694\n", - " 0.104046\n", + " 0.070180\n", + " 0.100921\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.054694\n", - " 0.047595\n", + " 0.053687\n", + " 0.048322\n", " \n", " \n", " Treatment Equality\n", - " 0.292782\n", - " 2.399059\n", + " 0.394770\n", + " 1.736889\n", " \n", " \n", "\n", @@ -821,14 +821,14 @@ ], "text/plain": [ " original updated\n", - "Statistical Parity 0.093956 0.019959\n", - "Predictive Parity 0.191814 0.133510\n", - "Equal Opportunity 0.145525 0.191602\n", - "Average Group Difference in False Negative Rate 0.145525 0.191602\n", - "Equalized Odds 0.093755 0.107181\n", - "Conditional Use Accuracy 0.115694 0.104046\n", - "Average Group Difference in Accuracy 0.054694 0.047595\n", - "Treatment Equality 0.292782 2.399059" + "Statistical Parity 0.095165 0.016903\n", + "Predictive Parity 0.106777 0.142254\n", + "Equal Opportunity 0.191597 0.177972\n", + "Average Group Difference in False Negative Rate 0.191597 0.177972\n", + "Equalized Odds 0.118433 0.099354\n", + "Conditional Use Accuracy 0.070180 0.100921\n", + "Average Group Difference in Accuracy 0.053687 0.048322\n", + "Treatment Equality 0.394770 1.736889" ] }, "execution_count": 11, @@ -854,7 +854,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHFCAIAAACVbdGXAABR4ElEQVR4nO3deVgTV78H8JMESNhXgaAIuFSgiAsIAqIVBVGL22vFutKCW7WCS6vUBVQUty5WCypFcZdq61qKoqi1LlVR3KAoiIIaREABQbYk94+5TtMkhLAEGPx+nvvcJzNzZvKbKe98PZMzMyyxWEwAAACYht3SBQAAADQEAgwAABgJAQYAAIyEAAMAAEZCgAEAACMhwAAAgJEQYAAAwEgIMAAAYCQEGAAAMBICDIAQQuLi4lgyFi5c2ORfVF5eHh4efv78edlvf/z4cVN9y/nz52V3Z+zYsU21feU1+a4B0NRaugCAVmTnzp22trb0pIWFRZN/RXl5+YoVKwghH330ET1z+PDhV65c4fP5Tftda9asGThwID1pbGzctNsHaFkIMIB/OTg4ODs7K2hQXV3NYrHU1Jr4fzjt2rVr165dw9YtLy/X0tKSu6hr1659+/ZtRF0ArRouIQIoQl2L27Nnz4IFC9q3b8/lcjMzMwkhO3bs6NGjB4/HMzIyGj16dHp6Or1KQECAjo5OZmbmsGHDdHR0LC0tFyxYUFlZSQh5/PgxFVQrVqygLusFBAQQedfZzpw5M2jQID09PS0tLQ8Pj7Nnz9KLwsPDWSzWzZs3x44da2ho2Llz5/ru1F9//TVo0CBdXV0tLS13d/fff/9dauOSjaVqs7a2/vjjjxMTE3v37q2pqWlra7tjxw7J9levXvXw8ODxeBYWFqGhodXV1fUtD0BJCDCAfwmFwhoJ9PzQ0NCcnJytW7eeOHHC1NQ0MjIyMDDwww8//O233zZt2nTnzh03N7eHDx/S7aurq0eMGDFo0KBjx459/vnn33///bp16wghfD4/MTGREBIYGHjlypUrV64sW7ZMtoy9e/f6+Pjo6ent2rXrl19+MTIyGjJkiGSGEULGjBnTpUuXQ4cObd26tbbdEYlEsrtz4cIFLy+v4uLi2NjYAwcO6Orq+vn5xcfHK3+Ubt++vWDBgnnz5h07dszR0TEwMPDPP/+kFqWlpQ0aNOj169dxcXFbt269detWRESE8lsGqB8xAIjFO3fulP1fR3V19blz5wgh/fv3p1u+evVKU1Nz2LBh9JycnBwulzthwgRqcurUqYSQX375hW4wbNiwbt26UZ9fvnxJCAkLC5P99uzsbLFYXFZWZmRk5OfnRy8VCoU9evRwcXGhJsPCwgghy5cvV7A7VNlSHj58KBaL+/bta2pqWlpaSrWsqalxcHDo0KGDSCSiN15bbWKx2MrKisfjPXnyhJp8+/atkZHRjBkzqEl/f39NTc28vDx649RvivTqAE0IPTCAf+3evfu6BPq3rv/97390mytXrrx9+5a69EextLT08vKS7CGxWCw/Pz960tHR8cmTJ0rWcPny5aKioqlTp9I9J5FI5Ovre/369bKyMrqZZEm1WbduneTuWFpalpWV/f3332PHjtXR0aHacDicyZMnP336NCMjQ8kKe/bs2bFjR+ozj8f74IMP6L07d+7coEGDzMzM6I37+/sruVmA+sIgDoB/2dnZyR3EITk+sLCwUGoOIcTCwiIpKYme1NLS4vF49CSXy62oqFCyhhcvXhBC5A55Lyoq0tbWli2pNp06dZLanZcvX4rFYtniybv9UobUaEYul/v27Vvqc2Fhobm5ueRSqUmAJoQAA6ib5LgG6vQtEAgkGzx//tzExKRJvovazubNm2UHENI9G6mSlGdoaMhms2WLp7+Xyt3Kykoul0stLSgoUH77xsbGeXl5knOkJgGaEC4hAtSPm5ubpqbm3r176TlPnz5NTk4eNGiQMqtTwUB3WWR5eHgYGBikpaU5y9DQ0Ghk8dra2q6urr/99htdgEgk2rt3b4cOHT744ANCiLW1NSHkzp079ConTpxQfvsDBw48e/Ys1YkkhAiFwnoNDwGoF/TAAOrHwMBg2bJl33zzzZQpUz799NPCwsIVK1bweDxq+EOddHV1raysjh07NmjQICMjIxMTEyozaDo6Ops3b546dWpRUdHYsWNNTU1fvnx5+/btly9fRkdHN77+yMhIb2/vgQMHLly4UENDIyoq6t69ewcOHKC6dMOGDTMyMgoMDFy5cqWamlpcXFxubq7yG1+6dOnx48e9vLyWL1+upaX1008/Sf5uB9C00AMDqLfQ0NCff/759u3bo0aNmjNnzocffnj58uWuXbsquXpsbKyWltaIESP69OkTHh4u22DSpEnnzp178+bNjBkzBg8eHBwcfPPmTSV7eHUaMGBAcnKytrZ2QEDA+PHji4uLjx8/Tg+10NPTS0xM1NXVnTRp0syZMx0cHJYsWaL8xh0cHM6cOaOnpzd16tTp06c7OjrKvU8AoEmw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", + "image/png": "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O378uI2NTZcuXegEkl4//Vkikaxfv75nz558Pr9bt27Sldc9Subm5lOmTJk6deqhQ4carer48eOOjo58Pv/8+fPMKcTw8PCdO3cePnyY7tKdPXvW3d19wYIFzIZKSkr4fP7p06eb8s8Q4H8QYPBWc3d379Onz6+//koIoShqzJgxhYWFSUlJaWlp/fr1GzZs2PPnz+mWOTk5v//+e3Jy8t69e7dv3z5mzJhHjx6dO3du/fr1oaGhly9fptcwfvz458+fnzt3LiUlJScnx9vbm148ISFhzZo169evT0tL69atW0xMjHQZp06dyszMTElJOXbsGCGkurp69erVN2/ePHToUG5uro+Pj3TjJUuWbNq06erVq8bGxmPHjqVfP08Iqays3LRp065du/7444/8/Px6u03BwcHr169fvnx5RkbGnj17FHmhnbq6Or0J+VV9+eWXkZGRmZmZ0q+CW7x48aRJk+g0FYlErq6ufn5+e/bsqaqqYg6LmZnZ0KFDGy0DoB7t+yxhgLZU75Pgvb29bWxsKIo6deqUtrb2mzdvmFk9evT44YcfKIoKCwvT0NAoKyujp3t6elpaWorFYvprr169IiMjKYo6ceIEj8fLz8+np9+9e5cQcuXKFYqinJ2d58+fz6x54MCBffr0YaoyMTGpqqqqt+YrV64QQuh305w5c4YQsm/fPnpWSUmJurp6YmIiRVE7duwghGRnZ9Ozvv/+exMTE5m9Lisr4/P5sbGxih+lP//808DAoO5bPOpWdejQIWZuWFiY9N5JH/M3b97o6+vTNVMU9cEHH4SHh8uvB6Ah6IHB2476+0XvaWlpr169MjAw6PK33NzcnJwcupmlpaWWlhb92cTExNbWlnnZoImJCX0+LTMz09zcnHlTpa2tra6ubmZmJiEkKyvLycmJ2aj0Z0JI7969pd/ieOPGjXHjxllYWGhpaX344YeEkPz8fGaui4sL/UFfX79Xr170+gkhGhoazCuehUIhc4qPkZmZWVVVNWzYsEaPybFjx7p06SIQCFxcXAYPHhwVFdVoVQq+xZTP50+bNm379u2EkPT09Js3b8r05AAUp9LeBQC0s8zMTCsrK0KIRCIRCoVnz56VnssMf2BePE0IoUfoSX+lhzIyWciQniI9i/r/1xhpamoynysqKjw8PDw8PHbv3m1kZJSfn+/p6SlncAezWpmSqDpvSlJXV29oJTKGDh0aExOjqqpqZmZGr7bRqqR3QT4/P78PPvjg0aNH27dvHzZsWN03yQEoCD0weKudPn369u3b//rXvwgh/fr1KywsVFFR6SnF0NBQ8bXZ2trm5+cXFBTQXzMyMkpLS21sbAghvXr1ok+70a5du9bQSv7666/i4uJ169a5ublZW1vX7UjR19sIIS9evLh37561tbWC5b377rvq6urMAHc5NDU1e/bsaWFhwYRio1U1RE1NTSwWS0/p3bu3o6NjbGzsnj17Pv30UwXXA1AXAgzeLlVVVYWFhY8fP75+/fratWvHjRv30UcfzZgxgxAyfPhwFxeX8ePHHz9+PC8v7+LFi6GhoXKSpq7hw4fb29tPnTr1+vXrV65cmTFjxpAhQ+hza1988UVcXNzOnTvv378fERFx69Ytmb4ao1u3bmpqalFRUQ8ePDhy5Mjq1atlGqxaterUqVN37tzx8fExNDRU/C4rgUCwdOnSL7/88qeffsrJybl8+XJcXJyCyzZaVUMsLS1v3bqVlZVVXFzMjDfx8/Nbt26dWCz++OOPFVwPQF0IMHi7JCcnC4VCS0vLkSNHnjlz5rvvvjt8+DCPxyOEcDicpKSkwYMHf/rpp++9997kyZPz8vIUGafH4HA4hw4d0tPTGzx48PDhw7t3756YmEjPmjp1anBw8OLFi/v160cP4RMIBPWuxMjIKD4+fv/+/ba2tuvWrdu0aZNMg3Xr1gUEBDg4OIhEoiNHjkhfPGvU8uXLFy1atGLFChsbG29vb8U7Uo1W1ZDZs2f36tXL0dHRyMgoNTWVnvjJJ5+oqKhMmTKloYMAoIh6TpQDgLKNGDHC1NR0165dTVrq7NmzQ4cOffHiRVNvTO5oCgoKLC0tr1692q9fv/auBVgMgzgA2kJlZeXWrVs9PT15PN7evXtPnjyZkpLS3kW1g5qaGpFItGzZsgEDBiC9oIUQYABtgT4/GRERUVVV1atXr19++WX48OHtXVQ7SE1NHTp06HvvvXfgwIH2rgVYD6cQAQCAlTCIAwAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABY6b8MK1cgMzkzswAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -882,7 +882,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAHFCAIAAACVbdGXAABW5klEQVR4nO3deVgTV9sG8BMCIezIHhQBtQoUUQFFQLQu4L71a4t1b3FrtYJLq7yooKK41LYWC1aK4K51X0pRBLVuVEVwg6IgCmoQAWWVLZnvj2mnaQIhYAKM3r/rvXplZs7MPIO8uTkzZ2Y4FEURAAAAtlFr7QIAAACaAwEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQZACCGxsbEcGYsXL1b6jiorK0NCQs6fPy+790ePHilrL+fPn5c9nI8++khZ21ec0g8NgKHe2gUAtCExMTF2dnbMpKWlpdJ3UVlZuXLlSkLIBx98wMwcOXLk1atXBQKBcve1du3agQMHMpPGxsbK3T5A60KAAfzL0dHR1dVVToPa2loOh6OuruT/45iampqamjZv3crKSm1t7XoXvffee3379n2DugDaNJxCBJCHPhe3a9euRYsWtW/fXlNTMysrixCyffv2Hj168Pl8IyOj8ePHZ2RkMKtMnz5dV1c3KytrxIgRurq6VlZWixYtqq6uJoQ8evSIDqqVK1fSp/WmT59O6jvPdvbs2cGDB+vr62tra3t6eiYmJjKLQkJCOBzOzZs3P/roo3bt2nXu3LmpB3Xp0qXBgwfr6elpa2t7eHj89ttvUhuXbCxVm42NzahRo+Lj452dnbW0tOzs7LZv3y7ZPjk52dPTk8/nW1paBgYG1tbWNrU8AAUhwAD+JRKJ6iQw8wMDA3Nzc7du3Xry5EkzM7OwsDA/P7/333//yJEjmzdvvn37tru7+4MHD5j2tbW1Y8aMGTx48PHjxz///PPvv/9+/fr1hBCBQBAfH08I8fPzu3r16tWrV5cvXy5bxu7du318fPT19Xfs2PHrr78aGRkNHTpUMsMIIR9++GGXLl0OHjy4devWhg5HLBbLHs6FCxcGDRpUUlISHR29b98+PT290aNHHzhwQPGf0q1btxYtWrRgwYLjx487OTn5+fn98ccf9KL09PTBgwe/evUqNjZ269atqampoaGhim8ZoGkoAKComJgY2f931NbWnjt3jhDSv39/puXLly+1tLRGjBjBzMnNzdXU1Jw4cSI9OW3aNELIr7/+yjQYMWJEt27d6M8vXrwghAQHB8vuPScnh6KoiooKIyOj0aNHM0tFIlGPHj369OlDTwYHBxNCVqxYIedw6LKlPHjwgKKovn37mpmZlZWV0S3r6uocHR07dOggFouZjTdUG0VR1tbWfD7/8ePH9OTr16+NjIxmz55NT/r6+mppaeXn5zMbp68pMqsDKBF6YAD/2rlz53UJzLWu//u//2PaXL169fXr1/SpP5qVldWgQYMke0gcDmf06NHMpJOT0+PHjxWs4cqVK8XFxdOmTWN6TmKxeNiwYdevX6+oqGCaSZbUkPXr10sejpWVVUVFxZ9//vnRRx/p6urSbbhc7pQpU548eZKZmalghT179uzYsSP9mc/nd+3alTm6c+fODR482NzcnNm4r6+vgpsFaCoM4gD4l729fb2DOCTHBxYVFUnNIYRYWlomJCQwk9ra2nw+n5nU1NSsqqpSsIbnz58TQuod8l5cXKyjoyNbUkM6deokdTgvXrygKEq2ePLPcSlCajSjpqbm69ev6c9FRUUWFhaSS6UmAZQIAQbQOMlxDfTXt1AolGzw7NkzExMTpeyL3k54eLjsAEKmZyNVkuLatWunpqYmWzyzXzp3q6urNTU16aWFhYWKb9/Y2Dg/P19yjtQkgBLhFCJA07i7u2tpae3evZuZ8+TJk6SkpMGDByuyOh0MTJdFlqenp6GhYXp6uqsMHo/3hsXr6Oi4ubkdOXKEKUAsFu/evbtDhw5du3YlhNjY2BBCbt++zaxy8uRJxbc/cODAxMREuhNJCBGJRE0aHgLQJOiBATSNoaHh8uXL//e//02dOvXTTz8tKipauXIln8+nhz80Sk9Pz9ra+vjx44MHDzYyMjIxMaEzg6GrqxseHj5t2rTi4uKPPvrIzMzsxYsXt27devHiRWRk5JvXHxYW5u3tPXDgwMWLF/N4vIiIiLt37+7bt4/u0o0YMcLIyMjPz2/VqlXq6uqxsbF5eXmKb3zZsmUnTpwYNGjQihUrtLW1f/rpJ8nrdgDKhR4YQJMFBgb+8ssvt27dGjdu3Lx5895///0rV6689957Cq4eHR2tra09ZsyY3r17h4SEyDaYPHnyuXPnysvLZ8+ePWTIEH9//5s3byrYw2vUgAEDkpKSdHR0pk+fPmHChJKSkhMnTjBDLfT19ePj4/X09CZPnjxnzhxHR8egoCDFN+7o6Hj27Fl9ff1p06bNmjXLycmp3vsEAJSCQ1FUa9cAAADQZOiBAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABY6W27kVksFj979kxPT695D9oBAIA2gqKosrIyS0tLNbX6+1pvW4A9e/bMysqqtasAAADlyMvL69ChQ72L3rYA09PTI4Tk5eXp6+u3di0AANB8paWlVlZW9Ld6vd62AKPPHOrr6yPAAADeAnKuB2EQBwAAsBICDAAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACw0tv2JA4AABCJqWs5xQVlVWZ6/D62Rly1t/Ph5ggwAGCNmjrxrquPHhdXWhtpT3G34anjHFI94u8KV55MF5ZU0ZMCA37waIdhjoLWrUoVOBRFtXYNylRaWmpgYFBSUoJnIQK8ZcLi0qMu5oj/+cZS45CZXraBIxxatag2J/6u8IvdNyW/1unOV+RkZ9ZlWKPf5/j7BYD1RGLqanbR8bSnV7OLROLW+ZO0uLzG57vzPVee8fnufHF5jdK3HxaX/vMfOZIHJ6bIz3/khMWlK31f7CUSUytPpkv9BtCTK0+mt/TvRu1r8se3pPa16vaAU4gA9WOuIpjoaBIOKSyvbvRywusa0dq49EdFlTbG2v8b4aDF47ZAnfF3hcHH7z0vq6YnzfU0V459v4X/1u4dmvDin9B69brWOTTBVJd3fZm3srZfUyeOuphT76KoizmLfOxwLpF2LaeYOXMoiSJEWFJ1LafYvbNxy1WTfoIkrSaGHYnTJyraAwIMoB5SVxEYci4nzNx5PSG9gP588QHZlZzr7WAWNbW3skqq97J8/F3hnN03JZs9L6ues/vmgiFdbUy0W+YCvmR6MV6U1/QOTVBWhu26+qihzoOYIruuPvLz6qSUHbFdQVk96aXgUuW7d/Tv/yLAAFRENhhkryIw8kuqvth9U/ZygmR6MRLSC2buvK6UDKv3sry3g8XCX2/V2/77s/fpDxb6/JAxKryAX1xeI5tetBflNcXlNUa6vDffy+PiymYvfaeY6fGbvVQ5ygvI1Z+IuI4QQrITCSEk6yw5HUQIIWrqxH0e0TVV4t4QYPBOkw2G5SPtV/+W0dC1AooQDiErT6Z7O1gwPZvXNSLZ9KIlpBe8rhEpci5Rzrhn2UClc/SrQZ0ra0TyN5tfWjVn982tKruAP2HbFflLzyz84M33Ym2k3eyl75Q+tkYCA35+SZXULzCHEAsDfh9bI5VXUJZPkiOJqJpw1P4ePiIWkeQIQokJV5M4/p9yAwwnjuHdRQeD5HnC/JKqL/em1nsVgcFcTmDmrJU7jkD+UqaSfuuTPo1K9t+f9mlUcr/1SfF3hfQiOZfltzVwWUhW4JE7KrqAX1Amb7yG/KWKm+Ju09B5UDUOmeJuo5S9vAW4apzg0Q7kn5GHNPpz8GiHlrgbTOBEZl8gJl0JIYQS/ftfk65k9gUicFLu3hBg8I6SEwyKkLyc8KhI3iks+UtJAzn6xe6bdIbJuSxfVStWsNqXlbXJD4sUbNwkZnryzhDKX6o4nrraTC/behfN9LLFCA5JwxwFkZOdLQz+PVtoYcBv0TH0ZvbE74z0TL8zxMxe6bvCKUR4RzUUDAqSvJxgY6x98UGDLW2M5Z3gaihHmROVyrrwfjW7yLOLiVI2JWn/LA/n0AQ5S5W1I/p+L9wHpohhjgJvB4vWfBLH4yuEkvjrihKTx1eJ3Qil7wcBBvVQ/Dk0rf7EmmY/mqHZwSB7OeF/Ixx2Jec21P5/cr9hGx33LP/CO6cJvUaVnEI00uWZ6vLqHcdhqstTyggORuAIh0U+dngShyK4apwWHTEvJeMEIYR0dCfeq8mZZSQvmWScQICBatFplJCefyztWXHF319JcgaOt/odSFKPZlgTl6H4n+SNjsiqNxvqvZygxeN6O5jVO47D28FM/giORsc9j3KylHNZfpSToKEbpKS4d1J+94t2fZm37Eh65d4HxuCpq2HEPAsIehFTe+LxFVHjks/iyJVwoq6SAZB4lBQ71NvRaXbvp6E7iuq986mh59DI3oFEU92ANyn0oxlk58/ur1CGicRUv/VJssFACDHW4YWMeX9tXEZD94HVe35GdiS9IveBXc0u+jQquaGl+2b2de9sTF8kIxKBKvmPIpXi9TLU1khZ5q3S/nFxec2EbVcKymrM9Hj7Z3kot+8F76ZGv88RYCxQ7z1AhBDJmUY6GqFjHUc4WcquLhVXCen59W6toTufyD9/7F9aMoj5BhSJqe4hp+sdw63D494OGarqc4k1dWK75b/X+62txiF/rR6uyMkl2WBg0OPp2+loyj6Jo94fIJ3ZzXgSR0M5KvUzl/94VuY8amV13aGbT2X30mJ/VQAoEQKs1cjpHjWpO1Xvozkb+jeT7XxIffEZamu8qqyVbEBvTXa+LLo3QH++eP/FlO3XGmq56/M+Xl2Vc7dHQz+W6IsPV/+W0dBay0faT/e0lVpRWf1OpT8pVX4Hi2mmYIc7/q4w5MS9/NK/z+ta6GuGjGnpJ0sBKEWj3+e4BqZk9LfMmfT8QylPyqrq6JmSfy8r0p1i2jd1qPfPf+T06NBuhNPf31ay37ayKUU1MF+W5NWawzefyGl5+OYTJsAkv3ZdrNulPH6p+IlQ2Z/Vl94GLrbaYjGV+DBDjf/vnViUSJOq/fcaz8UHL365lCO54pgeghO3hLI/4WGOgkF25n3DzhZX/OcnUO8Ny42OGGxev5Me9yx5pBb1XXdU8LJ8649AA2gp6IEpU0N/zhNCOIRETnYmMmfq5IwUiJzsbKDFk3OBpF7GOrxrQUPoDke/9UlvMlJcimQPbNbO62caePYEIcTV2nCKu42ZHv9lRfXq3/69kqTGIcxJP/nJTepLXzWNQp0u3za00/KsxZIZJp9kF0eRq1D0Z8VbNkOrj+cEaGvQA2s5ch6gRwihCFl6+DZfQ12R7hTzR/03w+yaWkZRRQ39zOk3vM9JktTAcZGYMtPTlNP+xuNXNx6nyc6XvGSVX1IlOwaEedKgt4OFbF+HcKvlFcmtphrvRv5N8RutJJeq9EmprTzuGYCFEGDKUe/JJSmvXteR13UKbpC+Dai4XN5XdkPob1Jl3QArOXBcJKa2JGXFXM559VrhrGiA/OTW42sose/YUAGK3GglubT1n5QKABIQYMqhxO6OJCMdXr33AMlHf5Mq/n3KIcRAW6OkspbUlyvM9Zj4u8KlR+4ocrXsTdC5cjVbJc89ktXojVaSNyy3/pNSAUAC7mNXDhW9aMfCQKuhR3M2RPDPNyn9bdvohRS6wboPu0s9P81IR8PP02bfzL6Xlgyi02vO7puqTi8JTb40y+M256KRmR5f8eeftv6TUgFAAnpgyqH000fMH/VcNY7sELUJvTveevIy6a8Xsmsx36T0t+0Xu29y/js+W2rQvOSAt4ZGr9EnSOUXrMHl1IqUNiDIvZPJ4ZtPm9T1rGni3iW7TQqOA2xSSwBQNYxCVA45j3WQJZsosjPJf28DYoaoPSqs2Hctl7nLh8Mh1H/H9cnet1TvixCbNOBN/ug75WJu4E1Iz5e6O0qN/1THNryhFStyvhJXtVd8L6S5N1o1qSUANBtGIbYQprsjpw391bx8pMPq36T/fif/HU0u+0c9PUQt/q7wh7MPJDOSTi8/T5shDhb1fpM2dFdQkwa8qeIEqZzkpjuRsn0dE13e62bty1iH95FLe8n7wN7kRqsmtQQA1UEPTJnk3wdG/vmTv3kPNmzovi7Z5zwpnbJ6YE26D4wm+WMxNy4be3x0QxvXfh5UUKwn+9tspKORHDiEp66GbhMAu+BRUi2N/pbML626/OBFQvrzkvoextE8Kr2LVr4m3RNtqKXBDLIXGPCXj3Rop8Nr3pM4ZD0ufVxRWyEWU3eflb6sqG6no+loqa+mxtHR0MnI5SnyQCYAYAucQmxpzMml8b3aK/dPfpXeRSsffYK03mfPy/pporOaGqeho5ZN2SadjrPWt6Y/OMo8atHakWB4BcA7BQHWTIqEk3KvlLTuXbTDHAURE53n7bsp57Ud9MnMvp2NW+vsHB4DCPBOUfl9YBEREba2tnw+38XF5eLFi/W22bNnT48ePbS1tQUCwWeffVZU9O9NrK9evZo7d65AIODz+fb29nFxcaouWBHxd4X91id9GpXsvz/t06jkfuuT4u8KVb3Thu7r4kjc+6VSI5wEWz7t1dDSNnI7FP1Hw9ie7d1bL0cBoGWoNsAOHDgQEBAQFBSUmprq5eU1fPjw3FzpN69funRp6tSpfn5+9+7dO3jw4PXr12fMmEEvqqmp8fb2fvTo0aFDhzIzM6Oiotq3V3SctOrQzzyUvCBEP8FP1RnWFu6iHeFkuXWys8Cgnt6ehQEfV5sAoCWpdhCHm5ubs7NzZGQkPWlvbz9u3LiwsDDJNt9++21kZGR2djY9GR4evmHDhry8PELI1q1bN27c+Ndff2loaCi4R1UP4mjFoYA0+S82bBnM6VMTXU1CkcKKapyvAwCla81BHDU1NSkpKUuXLmXm+Pj4XLlyRaqZh4dHUFBQXFzc8OHDCwoKDh06NHLkSHrRiRMn3N3d586de/z4cVNT04kTJy5ZsoTLlX7LbXV1dXX13zf2lpaWquyACGn4mYfMk2FVfXtQW7jMg7ugAKAtUGGAFRYWikQic3NzZo65uXl+fr5UMw8Pjz179vj6+lZVVdXV1Y0ZMyY8/O+nLTx8+DApKWnSpElxcXEPHjyYO3duXV3dihUrpLYQFha2cuVK1R2IpFYcCshAfgAAkBYYxMHh/Ns/oChKcpKWnp4+f/78FStWpKSkxMfH5+TkzJkzh14kFovNzMy2bdvm4uIyYcKEoKAg5mykpMDAwJJ/0OceVUf+YL/CsmqRnFF6AACgPCrsgZmYmHC5XMkuV0FBgWSHjBYWFubp6fn1118TQpycnHR0dLy8vEJDQwUCgUAg0NDQYM4Z2tvb5+fn19TU8Hg8yS1oampqasp7v6ISNfRCDdrq3zJ+uZSDe48AAFqACntgPB7PxcUlISGBmZOQkODh4SHVrLKyUk3t3zLouKKHlnh6emZlZYnFYnrR/fv3BQKBVHq1sHqHAkpqmRGJAACg2lOICxcu/OWXX7Zv356RkbFgwYLc3Fz69GBgYODUqVPpNqNHjz5y5EhkZOTDhw8vX748f/78Pn36WFpaEkK++OKLoqIif3//+/fv//bbb2vXrp07d65KC1YE/ZBZi/qGkpN/nmO08mQ6ziUCAKiUap/E4evrW1RUtGrVKqFQ6OjoGBcXZ21tTQgRCoXMDWHTp08vKyvbsmXLokWLDA0NBw0atH79enqRlZXVmTNnFixY4OTk1L59e39//yVLlqi0YAXRQwFjL+es/i1DdmmLjUgEAHiX4WG+zXc87an//rSGlm6e0HNsz9a/7RoAgKUa/T5X+SjEt1jrPpwQAOAdhwBrvlZ/OCEAwLsMAdZ8beHhhAAA7ywE2BuRHZGIZ9oCALQMvA/sTbWFhxMCALyDEGBKgIcTAgC0PJxCBAAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsJLKAywiIsLW1pbP57u4uFy8eLHeNnv27OnRo4e2trZAIPjss8+KioqkGuzfv5/D4YwbN07V1QIAAFuoNsAOHDgQEBAQFBSUmprq5eU1fPjw3NxcqTaXLl2aOnWqn5/fvXv3Dh48eP369RkzZkg2ePz48eLFi728vFRaKgAAsItqA+y7777z8/ObMWOGvb39Dz/8YGVlFRkZKdUmOTnZxsZm/vz5tra2/fr1mz179o0bN5ilIpFo0qRJK1eu7NSpk0pLBQAAdlFhgNXU1KSkpPj4+DBzfHx8rly5ItXMw8PjyZMncXFxFEU9f/780KFDI0eOZJauWrXK1NTUz89Pzo6qq6tLJSj3KAAAoG1SYYAVFhaKRCJzc3Nmjrm5eX5+vlQzDw+PPXv2+Pr68ng8CwsLQ0PD8PBwetHly5ejo6OjoqLk7ygsLMzgH1ZWVso9CgAAaJtUPoiDw+EwnymKkpykpaenz58/f8WKFSkpKfHx8Tk5OXPmzCGElJWVTZ48OSoqysTERP4uAgMDS/6Rl5en9EMAAIA2SF11mzYxMeFyuZJdroKCAskOGS0sLMzT0/Prr78mhDg5Oeno6Hh5eYWGhj5//vzRo0ejR4+mm4nFYkKIurp6ZmZm586dJbegqampqampugMBAIA2SIU9MB6P5+LikpCQwMxJSEjw8PCQalZZWamm9m8ZXC6XEEJRlJ2d3Z07d9L+MWbMmIEDB6alpeEkIQAAEJX2wAghCxcunDJliqurq7u7+7Zt23Jzc+nTg4GBgU+fPt25cychZPTo0TNnzoyMjBw6dKhQKAwICOjTp4+lpSUhxNHRkdmUoaGh1BwAAHiXqTbAfH19i4qKVq1aJRQKHR0d4+LirK2tCSFCoZC5IWz69OllZWVbtmxZtGiRoaHhoEGD1q9fr9KqAADgLcChKKq1a1Cm0tJSAwODkpISfX391q4FAACar9HvczwLEQAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFhJoQCzsbFZtWpVbm6uqqsBAABQkEIBtmjRouPHj3fq1Mnb23v//v3V1dWqLgsAAEA+hQLsq6++SklJSUlJcXBwmD9/vkAgmDdv3s2bN1VdHAAAQEM4FEU1aYXa2tqIiIglS5bU1tY6Ojr6+/t/9tlnHA5HRfU1VWlpqYGBQUlJib6+fmvXAgAAzdfo97m64tuqra09evRoTExMQkJC3759/fz8nj17FhQUdPbs2b179yqpYAAAAIUoFGA3b96MiYnZt28fl8udMmXK999/b2dnRy/y8fHp37+/KisEAACoh0IB1rt3b29v78jIyHHjxmloaEgucnBwmDBhgmpqAwAAaJBCAfbw4UNra+t6F+no6MTExCi1JAAAgMYpNAqxoKDgzz//lJzz559/3rhxQzUlAQAANE6hAJs7d25eXp7knKdPn86dO1c1JQEAADROoQBLT093dnaWnNOrV6/09HRF1o2IiLC1teXz+S4uLhcvXqy3zZ49e3r06KGtrS0QCD777LOioiJ6flRUlJeXV7t27dq1azdkyJBr164pskcAAHgXKBRgmpqaz58/l5wjFArV1Ru/fnbgwIGAgICgoKDU1FQvL6/hw4fLPo/q0qVLU6dO9fPzu3fv3sGDB69fvz5jxgx60fnz5z/99NNz585dvXq1Y8eOPj4+T58+Vey4AADgbUcpwNfXd8CAAa9evaInX758OWDAgI8//rjRFfv06TNnzhxm0s7ObunSpVJtNm7c2KlTJ2byxx9/7NChg+ym6urq9PT0duzYIX+PJSUlhJCSkpJGawMAgLas0e9zhXpgmzZtysvLs7a2Hjhw4MCBA21tbfPz8zdt2iR/rZqampSUFB8fH2aOj4/PlStXpJp5eHg8efIkLi6Ooqjnz58fOnRo5MiRslurrKysra01MjKSXVRdXV0qQZEjAgAAtlMowNq3b3/79u0NGzY4ODi4uLhs3rz5zp07VlZW8tcqLCwUiUTm5ubMHHNz8/z8fKlmHh4ee/bs8fX15fF4FhYWhoaG4eHhsltbunRp+/bthwwZIrsoLCzM4B+NVgUAAG8HRR8lpaOjM2vWrGbsQPIxiRRFyT41MT09ff78+StWrBg6dKhQKPz666/nzJkTHR0t2WbDhg379u07f/48n8+X3UVgYODChQvpz6WlpcgwAIB3QROehZienp6bm1tTU8PMGTNmjJz2JiYmXC5XsstVUFAg2SGjhYWFeXp6fv3114QQJycnHR0dLy+v0NBQgUBAN/j222/Xrl179uxZJyenenekqampqamp+IEAAMBbQNEncYwfP/7OnTsczt9Pr6c7UiKRSM5aPB7PxcUlISFh/Pjx9JyEhISxY8dKNausrJQc0Mjlcgkh1D/PyN+4cWNoaOjp06ddXV0VPSYAAHgHKHQNzN/f39bW9vnz59ra2vfu3fvjjz9cXV3Pnz/f6IoLFy785Zdftm/fnpGRsWDBgtzc3Dlz5hBCAgMDp06dSrcZPXr0kSNHIiMjHz58ePny5fnz5/fp08fS0pIQsmHDhmXLlm3fvt3GxiY/Pz8/P7+8vLz5xwoAAG8TRcYyGhsb37p1i6IofX39v/76i6KoxMTEnj17KrLuTz/9ZG1tzePxnJ2dL1y4QM+cNm3agAEDmDY//vijg4ODlpaWQCCYNGnSkydP6PmyD2AMDg6WvzsMowcAeDs0+n2u0Ast27Vrl5KS0qlTp86dO//yyy8DBw7Mzs7u3r17ZWWlKjL1TeCFlgAAbwflvNDS0dHx9u3bnTp1cnNz27BhA4/H27ZtW6dOnZRaKgAAQBMoFGDLli2rqKgghISGho4aNcrLy8vY2PjAgQMqrg0AAKBBCp1ClFJcXNyuXTvZO7raApxCBAB4OzT6fd74KMS6ujp1dfW7d+8yc4yMjNpmegEAwLuj8QBTV1e3traWf8sXAABAC1PoPrBly5YFBgYWFxeruhoAAAAFKTSI48cff8zKyrK0tLS2ttbR0WHm37x5U2WFAQAAyKNQgI0bN07FZQAAADRNc0YhtmUYhQgA8HZQwihEAACANkihU4hqamr1jpvH0EQAAGgtCgXY0aNHmc+1tbWpqak7duxYuXKlyqoCAABoRDOvge3du/fAgQPHjx9XekFvCNfAAADeDqq6Bubm5nb27Nk3KAwAAOCNNCfAXr9+HR4e3qFDB6VXAwAAoCCFroFJPrqXoqiysjJtbe3du3ersjAAAAB5FAqw77//ngkwNTU1U1NTNze3du3aqbIwAAAAeRQKsOnTp6u4DAAAgKZR6BpYTEzMwYMHJeccPHhwx44dqikJAACgcQoF2Lp160xMTCTnmJmZrV27VjUlAQAANE6hAHv8+LGtra3kHGtr69zcXNWUBAAA0DiFAszMzOz27duSc27dumVsbKyakgAAABqnUIBNmDBh/vz5586dE4lEIpEoKSnJ399/woQJqi4OAACgIQqNQgwNDX38+PHgwYPV1dUJIWKxeOrUqbgGBgAAragJz0J88OBBWlqalpZW9+7dra2tVVpWs+FZiAAAb4dGv88V6oHR3nvvvffee09JhQEAALwRha6BffTRR+vWrZOcs3Hjxo8//lg1JQEAADROoQC7cOHCyJEjJecMGzbsjz/+UE1JAAAAjVMowMrLy3k8nuQcDQ2N0tJS1ZQEAADQOIUCzNHR8cCBA5Jz9u/f7+DgoJqSAAAAGqfQII7ly5f/3//9X3Z29qBBgwghiYmJe/fuPXTokIprAwAAaJBCATZmzJhjx46tXbv20KFDWlpaPXr0SEpKwjh1AABoRU24D4z26tWrPXv2REdH37p1SyQSqaisZsN9YAAAb4dGv88VugZGS0pKmjx5sqWl5ZYtW0aMGHHjxg0lFQkAANBkjZ9CfPLkSWxs7Pbt2ysqKj755JPa2trDhw9jBAcAALSuRnpgI0aMcHBwSE9PDw8Pf/bsWXh4eMuUBQAAIF8jPbAzZ87Mnz//iy++wEOkAACgTWmkB3bx4sWysjJXV1c3N7ctW7a8ePGiZcoCAACQr5EAc3d3j4qKEgqFs2fP3r9/f/v27cVicUJCQllZWcvUBwAAUK+mDaPPzMyMjo7etWvXq1evvL29T5w4obrKmgfD6AEA3g7KHEZPCOnWrduGDRuePHmyb98+ZZQHAADQTE2+kbmNQw8MAODtoOQeGAAAQBuBAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBgAArIQAAwAAVlJ5gEVERNja2vL5fBcXl4sXL9bbZs+ePT169NDW1hYIBJ999llRURGziH77s6ampoODw9GjR1VdLQAAsIVqA+zAgQMBAQFBQUGpqaleXl7Dhw/Pzc2VanPp0qWpU6f6+fndu3fv4MGD169fnzFjBr3o6tWrvr6+U6ZMuXXr1pQpUz755JM///xTpQUDAABbqPZhvm5ubs7OzpGRkfSkvb39uHHjwsLCJNt8++23kZGR2dnZ9GR4ePiGDRvy8vIIIb6+vqWlpb///ju9aNiwYe3atZP/IHw8zBcA4O3Qmg/zrampSUlJ8fHxYeb4+PhcuXJFqpmHh8eTJ0/i4uIoinr+/PmhQ4dGjhxJL7p69ark6kOHDpVdnRBSXV1dKkEFhwIAAG2OCgOssLBQJBKZm5szc8zNzfPz86WaeXh47Nmzx9fXl8fjWVhYGBoahoeH04vy8/MbXZ0QEhYWZvAPKysrFRwKAAC0OSofxMHhcJjPFEVJTtLS09Pnz5+/YsWKlJSU+Pj4nJycOXPmKL46ISQwMLDkH/S5RwAAeOupq27TJiYmXC5Xss9UUFAg2aOihYWFeXp6fv3114QQJycnHR0dLy+v0NBQgUBgYWHR6OqEEE1NTU1NTdUcBAAAtFEq7IHxeDwXF5eEhARmTkJCgoeHh1SzyspKNbV/y+ByuYQQemiJu7u75OpnzpyRXR0AAN5NKuyBEUIWLlw4ZcoUV1dXd3f3bdu25ebm0qcHAwMDnz59unPnTkLI6NGjZ86cGRkZOXToUKFQGBAQ0KdPH0tLS0KIv79///79169fP3bs2OPHj589e/bSpUsqLRgAANhCtQHm6+tbVFS0atUqoVDo6OgYFxdnbW1NCBEKhcwNYdOnTy8rK9uyZcuiRYsMDQ0HDRq0fv16epGHh8f+/fuXLVu2fPnyzp07HzhwwM3NTaUFAwAAW6j2PrCWh/vAAADeDq15HxgAAIDqIMAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBgAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKKg+wiIgIW1tbPp/v4uJy8eJF2QbTp0/n/Nf777/PLP3hhx+6deumpaVlZWW1YMGCqqoqVRcMAACsoNoAO3DgQEBAQFBQUGpqqpeX1/Dhw3Nzc6XabN68WfiPvLw8IyOjjz/+mF60Z8+epUuXBgcHZ2RkREdHHzhwIDAwUKUFAwAAW3AoilLd1t3c3JydnSMjI+lJe3v7cePGhYWFNdT+2LFjH374YU5OjrW1NSFk3rx5GRkZiYmJ9NJFixZdu3at3m4co7S01MDAoKSkRF9fX3nHAQAALa3R73MV9sBqampSUlJ8fHyYOT4+PleuXJGzSnR09JAhQ+j0IoT069cvJSXl2rVrhJCHDx/GxcWNHDlSdQUDAACLqKtu04WFhSKRyNzcnJljbm6en5/fUHuhUPj777/v3buXmTNhwoQXL17069ePoqi6urovvvhi6dKlsitWV1dXV1fTn0tLS5V3BACgWiKRqLa2trWrgNbH4/HU1JrcoVJhgNE4HA7zmaIoyUkpsbGxhoaG48aNY+acP39+zZo1ERERbm5uWVlZ/v7+AoFg+fLlUiuGhYWtXLlS2YUDgApRFJWfn//q1avWLgTaBDU1NVtbWx6P16S1VBhgJiYmXC5XsstVUFAg2SGTRFHU9u3bp0yZInkAy5cvnzJlyowZMwgh3bt3r6iomDVrVlBQkFRQBwYGLly4kP5cWlpqZWWl/IMBAKWi08vMzExbW1vO37XwLhCLxc+ePRMKhR07dmzSL4MKA4zH47m4uCQkJIwfP56ek5CQMHbs2HobX7hwISsry8/PT3JmZWWlZFZxuVyKomRHnWhqampqaiq1dgBQIZFIRKeXsbFxa9cCbYKpqemzZ8/q6uo0NDQUX0u1pxAXLlw4ZcoUV1dXd3f3bdu25ebmzpkzhxASGBj49OnTnTt3Mi2jo6Pd3NwcHR0lVx89evR3333Xq1cv+hTi8uXLx4wZw+VyVVozAKgafd1LW1u7tQuBtoI+9yYSidpQgPn6+hYVFa1atUooFDo6OsbFxdEjDIVCoeQNYSUlJYcPH968ebPU6suWLeNwOMuWLXv69Kmpqeno0aPXrFmj0oIBoMXgzCEwmvfLoNr7wFoe7gMDaPuqqqpycnLoZ/S0di3QJtT7K9Ga94EBAAAtJCSkZ8+erV3F2wYBBgDvNNnHsWZlZb35ZjkczrFjx5jJxYsXMw8VAmVR+X1gAADKIhJT13KKC8qqzPT4fWyNuGrKuYo2bNiwmJgYZtLU1JT5XFNT09Sbk+qlq6urq6vbpFVqa2ubNKLhHYQeGACwQ/xdYb/1SZ9GJfvvT/s0Krnf+qT4u0KlbFlTU9NCwuDBg+fNm7dw4UITExNvb29CyIULF/r06aOpqSkQCJYuXVpXV0ev+MEHH8yfP/+bb74xMjKysLAICQmh59vY2BBCxo8fz+Fw6M9SpxBjYmLs7e35fL6dnV1ERAQ989GjRxwO59dff/3ggw/4fP7u3buVcnRvMQQYALBA/F3hF7tvCkv+faFSfknVF7tvKivDpOzYsUNdXf3y5cs///zz06dPR4wY0bt371u3bkVGRkZHR4eGhkq21NHR+fPPPzds2LBq1aqEhARCyPXr1wkhMTExQqGQ/iwpKioqKChozZo1GRkZa9euXb58+Y4dO5ilS5YsmT9/fkZGxtChQ1VxaG8TnEIEgLZOJKZWnkyXGjBNEcIhZOXJdG8Hizc8l3jq1Cnm/N7w4cMJIV26dNmwYQM9JygoyMrKasuWLRwOx87O7tmzZ0uWLFmxYgX9mAUnJ6fg4GBCyHvvvbdly5bExERvb2/6JKShoaGFhYXs7lavXr1p06YPP/yQEGJra5uenv7zzz9PmzaNXhoQEEAvgkYhwACgrbuWUyzZ92JQhAhLqq7lFLt3fqMnegwcOJB565OOjs6nn37q6urKLM3IyHB3d2duVPL09CwvL3/y5EnHjh0JIU5OTkxLgUBQUFAgf18vXrzIy8vz8/ObOXMmPaeurs7AwIBpILlrkA8BBgBtXUGZvFexy1+qCB0dnS5dukjNYT5LPYWcvneWmSM5zoLD4YjFYvn7ohtERUW5ubkxMyUfMCS5a5APAQYAbZ2Znrz7neUvfXMODg6HDx9mYuzKlSt6enrt27eXv5aGhoZIJJKdb25u3r59+4cPH06aNEkl5b5LMIgDANq6PrZGAgO+7GUuDiECA34fWyOV7v3LL7/My8v76quv/vrrr+PHjwcHBy9cuLDRl1fZ2NgkJibm5+e/fPlSalFISEhYWNjmzZvv379/586dmJiY7777TmXlv80QYADQ1nHVOMGjHQghkhlGfw4e7aCsu8Ea0r59+7i4uGvXrvXo0WPOnDl+fn7Lli1rdK1NmzYlJCRYWVn16tVLatGMGTN++eWX2NjY7t27DxgwIDY21tbWVjW1v+XwLEQAaGnNexZi/F3hypPpzGgOgQE/eLTDMEeBamqEFtW8ZyHiGhgAsMMwR4G3g4UqnsQBLIUAAwDW4Kpx3nDEPLxNcA0MAABYCQEGAACshAADAABWQoABAAArIcAAAICVEGAAAMBKCDAAgCagXzuZlpYmv1lsbKyhoaGq96IsHA7n2LFjLb/fN4QAA4B3Hf1+E0tLSx6PZ21t7e/vX1RU1FBjKysroVDo6Ogof5u+vr73799XdqUqp8jRTZ8+fdy4cS1VkTwIMAB4pz18+NDV1fX+/fv79u3LysraunVrYmKiu7t7cXGxbOOamhoul2thYaGu3shTILS0tMzMzFRTskJqa2ubsZaCR9cMNTU1St8mAgwAWKX2NfnjW1L7Wlnbmzt3Lo/HO3PmzIABAzp27Dh8+PCzZ88+ffo0KCiIbmBjYxMaGjp9+nQDA4OZM2dKnWQ7ceLEe++9p6WlNXDgwB07dnA4nFevXpH/nkIMCQnp2bPnrl27bGxsDAwMJkyYUFZWRi+Kj4/v16+foaGhsbHxqFGjsrOzGy3YxsZm9erVEydO1NXVtbS0DA8PZxZxOJytW7eOHTtWR0cnNDSUEHLy5EkXFxc+n9+pU6eVK1fW1dXRLR88eNC/f38+n+/g4JCQkMBsQero7t27N3LkSH19fT09PS8vr+zs7JCQkB07dhw/fpzD4XA4nPPnzxNC7ty5M2jQIC0tLWNj41mzZpWXl9Or0321sLAwS0vLrl27NvnfpjEIMABglfQTJGk1yTiplI0VFxefPn36yy+/1NLSYmZaWFhMmjTpwIEDzLPON27c6OjomJKSsnz5csnVHz169NFHH40bNy4tLW327NlM5snKzs4+duzYqVOnTp06deHChXXr1tHzKyoqFi5ceP369cTERDU1tfHjxzf6Sky6Hicnp5s3bwYGBi5YsEAygYKDg8eOHXvnzp3PP//89OnTkydPnj9/fnp6+s8//xwbG7tmzRpCiFgs/vDDD7lcbnJy8tatW5csWVLvXp4+fUqHXFJSUkpKyueff15XV7d48eJPPvlk2LBhQqFQKBR6eHhUVlYOGzasXbt2169fP3jw4NmzZ+fNm8dsJDExMSMjIyEh4dSpU40eV5NRb5eSkhJCSElJSWsXAgANev36dXp6+uvXr5uz8h5fKlif2jtBKZUkJycTQo4ePSo1n35B1/PnzymKsra2HjduHLMoJyeHEJKamkpR1JIlSxwdHZlFdIC9fPmSoqiYmBgDAwN6fnBwsLa2dmlpKT359ddfu7m5yRZTUFBACLlz547UXqRYW1sPGzaMmfT19R0+fDj9mRASEBDALPLy8lq7di0zuWvXLoFAQFHU6dOnuVxuXl4ePf/3339nfgiS+w0MDLS1ta2pqZEqYNq0aWPHjmUmt23b1q5du/Lycnryt99+U1NTy8/Pp1uam5tXV1fLHoWUen8lGv0+x8N8AaDNKy8gV38i4jpCCMlOJISQrLPkdBAhhKipE/d5RNdUuTukw4B+BTMhxNXVtd5mmZmZvXv3Zib79OnT0AZtbGz09PTozwKBgM4qQkh2dvby5cuTk5MLCwvpvldubm6jI0Tc3d0lP//www/MpGSpKSkp169fp3tdhBCRSFRVVVVZWZmRkdGxY8cOHTrIbk1SWlqal5eXhoaG/GIyMjJ69Oiho6NDT3p6eorF4szMTHNzc0JI9+7deTye/C00GwIMANq8snySHElE1YSj9vebLMUikhxBKDHhahLH/2t2gHXp0oXD4aSnp0sNq/vrr7/atWtnYmJCTzLfzlIoimJCjvwTe/WSjAEOh8OcJxw9erSVlVVUVJSlpaVYLHZ0dGzGYAfJGiRLFYvFK1eu/PDDDyUb8/l8qTolV5ckeVpVDqkfgtQ2G/rRKQWugQFAmydwIrMvEJOuhBBCif79r0lXMvsCETg1e8PGxsbe3t4RERGvX/87KiQ/P3/Pnj2+vr4NfbMz7Ozsrl+/zkzeuHGjSXsvKirKyMhYtmzZ4MGD7e3tX758qeCK9JlP5rOdnV29zZydnTMzM7v8l5qamoODQ25u7rNnz+hmV69erXd1Jyenixcvyo5m5PF4IpGImXRwcEhLS6uoqKAnL1++rKampoohG7IQYADABmb2xO+M9Ey/M8TM/g03vGXLlurq6qFDh/7xxx95eXnx8fHe3t7t27dnzrzJMXv27L/++mvJkiX379//9ddfY2NjScMdGlnt2rUzNjbetm1bVlZWUlLSwoULFVzx8uXLGzZsuH///k8//XTw4EF/f/96m61YsWLnzp0hISH37t3LyMg4cODAsmXLCCFDhgzp1q3b1KlTb926dfHixYbGnsybN6+0tHTChAk3btx48ODBrl27MjMzCSE2Nja3b9/OzMwsLCysra2dNGkSn8+fNm3a3bt3z50799VXX02ZMoU+f6hqCDAAYInHVwglMUKPEpPH9XcdmuS99967ceNG586dfX19O3fuPGvWrIEDB169etXIyKjRdW1tbQ8dOnTkyBEnJ6fIyEg6CTQ1NRXctZqa2v79+1NSUhwdHRcsWLBx40YFV1y0aFFKSkqvXr1Wr169adOmoUOH1tts6NChp06dSkhI6N27d9++fb/77jtra2t6v0ePHq2uru7Tp8+MGTMaimpjY+OkpKTy8vIBAwa4uLhERUXRJ0JnzpzZrVs3V1dXU1PTy5cva2trnz59uri4uHfv3h999NHgwYO3bNmi4IG8IY6ck7ZsVFpaamBgUFJSoq+v39q1AED9qqqqcnJybG1t+Xx+E1Y7Opvc2k86uhPv1eTMMpKXTHp8SsZvVVmZTbZmzZqtW7fm5eWpdC82NjYBAQEBAQEq3UsLq/dXotHvcwziAACWEPQipvbE4yuixiWfxZEr4US9KfmnGhEREb179zY2Nr58+fLGjRslb4ECVUOAAQBL9J3z72c1LukX0GqVSHjw4EFoaGhxcXHHjh0XLVoUGBjY2hW9QxBgAADN9/3333///fctucdHjx615O7aMgziAAAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAEAJ6LcPq2jjUi9KVjUOh3Ps2LGW329TIcAA4J32wQcfSD2W6dixY4o/kLdJ2ngeyLKyshIKhfLfT6bS5JYPAQYA8PaTfSuKIrhcroWFhbq68h950YzXnslCgAEACzwufZxelC77v8elj1W635CQkJ49e/78889WVlba2toff/zxq1ev6EUikWjhwoWGhobGxsbffPON5IPR4+Pj+/XrRy8aNWpUdnY2Pd/W1pYQ0qtXLw6H88EHH9AzY2Ji7O3t+Xy+nZ1dREQEs5Fr16716tWLz+e7urqmpqY2VKGNjc3q1asnTpyoq6traWkZHh7OLOJwOFu3bh07dqyOjk5oaCgh5OTJky4uLnw+v1OnTitXrqyrq6NbPnjwoH///nw+38HBISEhgdmCVJfx3r17I0eO1NfX19PT8/Lyys7ODgkJ2bFjx/HjxzkcDofDOX/+PCHkzp07gwYN0tLSMjY2njVrVnl5Ob063VcLCwuztLRUygvD8CgpAGjrHpc+HnV0VENLT40/Za1vrbq9Z2Vl/frrrydPniwtLfXz85s7d+6ePXsIIZs2bdq+fXt0dLSDg8OmTZuOHj06aNAgepWKioqFCxd27969oqJixYoV48ePT0tLU1NTu3btWp8+fc6ePfv+++/zeDxCSFRUVHBw8JYtW3r16pWamjpz5kwdHZ1p06ZVVFSMGjVq0KBBu3fvzsnJaeiNX7SNGzf+73//CwkJOX369IIFC+zs7Ly9velFwcHBYWFh33//PZfLPX369OTJk3/88Uc6e2bNmkU3EIvFH374oYmJSXJycmlpaUPPuX/69Gn//v0/+OCDpKQkfX39y5cv19XVLV68OCMjo7S0NCYmhhBiZGRUWVk5bNiwvn37Xr9+vaCgYMaMGfPmzaPflEYISUxM1NfXT0hIUM6LUKi3S0lJCSGkpKSk2VuoE4mvZBUeS31yJauwTiRWYm0AQHv9+nV6evrr168VbH+v8J5jrGND/7tXeO9NihkwYIC/v7/knKNHjzLfjcHBwVwuNy8vj578/fff1dTUhEIhRVECgWDdunX0/Nra2g4dOowdO1Z2+wUFBYSQO3fuUBSVk5NDCElNTWWWWllZ7d27l5lcvXq1u7s7RVE///yzkZFRRUUFPT8yMlJqRYa1tfWwYcOYSV9f3+HDh9OfCSEBAQHMIi8vr7Vr1zKTu3btEggEFEWdPn1a6hgJIUePHpUqODAw0NbWtqamRqqAadOmSR74tm3b2rVrV15eTk/+9ttvampq+fn5dEtzc/Pq6mrZo6j3V6LR73P0wP4j/q5w5cl0YUkVPSkw4AePdhjmKGjdqgCgFXXs2LFDhw70Z3d3d7FYnJmZqaWlJRQK3d3d6fnq6uqurq7UP72K7Ozs5cuXJycnFxYWisViQkhubq7sUIgXL17k5eX5+fnNnDmTnlNXV2dgYEAIycjI6NGjh7a2NrNfORVKLnV3d//hhx+YSVdXV+ZzSkrK9evXmddXikSiqqqqysrKjIwMqWOsdy9paWleXl70Oy3loCvX0dGhJz09PemfGP2O5u7du9NdT6VAgP0r/q7wi903Jbu1+SVVX+y+GTnZGRkG8LbS19en/9JnvHr1qqE3KNKjExsdozh69GgrK6uoqChLS0uxWOzo6FjvmAU626Kiotzc3JiZXC6XEEK9wRk2yfKYIKF3t3Llyg8//FCyMZ/Pl9pXQ0enpaWlyN4pipLdAjNHsp43h0EcfxOJqZUn06V+ZejJlSfTReK36r3VAMCws7O7ceOG5Jzr169369aNmczNzX327Bn9+erVq2pqal27djUwMBAIBMnJyfT8urq6lJQU+nNRUVFGRsayZcsGDx5sb2//8uVLZlN050MkEtGT5ubm7du3f/jwYRcJ9EAPBweHW7duvX79mm7J7KhekkuTk5Pt7Ozqbebs7JyZmdnlv9TU1BwcHKSOsd7VnZycLl68KDuakcfjMUdEV56WllZRUUFPXr58mf6Jyam/2RBgf7uWU8ycOZREESIsqbqWU9zyJQFAC/jyyy+zs7Pnzp1769at+/fv//TTT9HR0V9//TXTgM/nT5s27datWxcvXpw/f/4nn3xiYWFBCPH391+3bt3Ro0f/+uuvL7/8khmd2K5dO2Nj423btmVlZSUlJS1cuJDZlJmZmZaWVnx8/PPnz+luX0hISFhY2ObNm+/fv3/nzp2YmJjvvvuOEDJx4kQ1NTU/P7/09PS4uLhvv/1WziFcvnx5w4YNdPEHDx5saMTHihUrdu7cGRIScu/evYyMjAMHDixbtowQMmTIkG7duk2dOpU+xqCgoHpXnzdvXmlp6YQJE27cuPHgwYNdu3ZlZmYSQmxsbG7fvp2ZmVlYWFhbWztp0iT6J3b37t1z58599dVXU6ZMoc8fKh0C7G8FZfWkl4JLAYC9bGxsLl68mJ2d7ePj07t379jY2NjY2I8//php0KVLlw8//HDEiBE+Pj6Ojo7MSPdFixZNnTp1+vTp7u7uenp648ePp+erqant378/JSXF0dFxwYIFGzduZDalrq7+448//vzzz5aWlmPHjiWEzJgx45dffomNje3evfuAAQNiY2PpHpiuru7JkyfT09N79eoVFBS0fv16OYewaNGilJSUXr16rV69etOmTUOHDq232dChQ0+dOpWQkNC7d+++fft+99131tbWdMFHjx6trq7u06fPjBkzmItkUoyNjZOSksrLywcMGODi4hIVFUVfD5s5c2a3bt1cXV1NTU0vX76sra19+vTp4uLi3r17f/TRR4MHD96yZYvC/xpNw3mTM62KiIiI2Lhxo1AofP/993/44QcvLy+pBtOnT9+xY4fkHAcHh3v37tGfX716FRQUdOTIkZcvX9ra2m7atGnEiBFydldaWmpgYFBSUtLQKeyGXM0u+jSqwU76vpl93TsbN2mDANCQqqqqnJwcW1tbPp+vSPv0onTfU74NLT0w6oCDsYPyqvuPkJCQY8eOteVnZ9jY2AQEBDQ09p0t6v2VaPT7XLU9sAMHDgQEBAQFBaWmpnp5eQ0fPjw3N1eqzebNm4X/yMvLMzIyYv72qamp8fb2fvTo0aFDhzIzM6Oiotq3b6+iUvvYGgkM+LLXLjmECAz4fWyNVLRfAGiUjoa8K//yl8JbTLWjEL/77js/P78ZM2YQQn744YfTp09HRkaGhYVJtjEwMKCHjRJCjh079vLly88++4ye3L59e3Fx8ZUrV+iOKt3bVRGuGid4tMMXu29y/hm7QQih8yx4tANXTSUPRgMARVjrW58af6qitkJ2kY6GjkrvYoa2TIWnEGtqarS1tQ8ePMicGvb3909LS7tw4UJDq4wePbq6uvrMmTP05IgRI4yMjLS1tY8fP25qajpx4sQlS5bQY0wlVVdXV1dX059LS0utrKyacQqRhvvAAFpAU08hwluveacQVdgDKywsFIlEkoNPzM3N8/PzG2ovFAp///33vXv3MnMePnyYlJQ0adKkuLi4Bw8ezJ07t66ubsWKFVIrhoWFrVy5Uik1D3MUeDtYXMspLiirMtPj97E1Qt8LAKBtUvmNzJJ3tNV7gxsjNjbW0NBQ8rH8YrHYzMxs27ZtXC7XxcXl2bNnGzdulA2wwMBAZqAq3QN7k4K5ahyM1wAAaPtUGGAmJiZcLleyy1VQUNDQ3QAURW3fvn3KlCmSTxkRCAQaGhrMOUN7e/v8/PyamhqpJ5Foampqamqq4AgAQIVUPQQaWKR5vwwqHIXI4/FcXFwkn8yfkJDg4eFRb+MLFy5kZWX5+flJzvT09MzKyqKftkIIuX//vkAgUOJztACgVdDDsiorK1u7EGgr6EdtyQ5xkE+1pxAXLlw4ZcoUV1dXd3f3bdu25ebmzpkzhxASGBj49OnTnTt3Mi2jo6Pd3NykHnb5xRdfhIeH+/v7f/XVVw8ePFi7du38+fNVWjAAtAAul2toaEg/pl1bW1tFrz8GthCLxS9evNDW1m7qmzNVG2C+vr5FRUWrVq2iX0odFxdHD4UXCoWSN4SVlJQcPnx48+bNUqtbWVmdOXNmwYIFTk5O7du39/f3X7JkiUoLBoCWQT+Nic4wADU1tY4dOzb1TxmVP4mjhTX7SRwA0PJEIlHzXnUPbxkej6emJn1JqzWH0QMAyMflcpt62QOAgYf5AgAAKyHAAACAlRBgAADASm/bNTB6TEppaWlrFwIAAG+E/iaXM9LwbQuwsrIyQsgbPk0KAADaiLKyMuaNJVLetmH0YrH42bNnenp6bfDWSPo5jXl5eW1/iD9KVREWVcuiUgmrqkWpiqMoqqyszNLSUnaEPe1t64Gpqal16NChtauQR19fv+3/4tJQqoqwqFoWlUpYVS1KVVBDfS8aBnEAAAArIcAAAICVEGAtR1NTMzg4mBVvfkGpKsKiallUKmFVtShVid62QRwAAPCOQA8MAABYCQEGAACshAADAABWQoABAAArIcCUIyIiwtbWls/nu7i4XLx4sd42Fy5ccHFx4fP5nTp12rp1KzP/yJEjrq6uhoaGOjo6PXv23LVrV5stlbF//34OhzNu3DiVlkrerNrY2FjOf1VVVbXNUgkhr169mjt3rkAg4PP59vb2cXFxqiv1Dav94IMPpH6wI0eObJulEkJ++OGHbt26aWlpWVlZLViwoM3+DtTW1q5atapz5858Pr9Hjx7x8fGqq1PBaoVC4cSJE7t166amphYQECC19PDhww4ODpqamg4ODkePHlV1tfWj4I3t379fQ0MjKioqPT3d399fR0fn8ePHUm0ePnyora3t7++fnp4eFRWloaFx6NAhetG5c+eOHDmSnp6elZX1ww8/cLnc+Pj4tlkq7dGjR+3bt/fy8ho7dqyK6lRKtTExMfr6+kIJbbbU6upqV1fXESNGXLp06dGjRxcvXkxLS2uz1RYVFTE/0rt373K53JiYmLZZ6u7duzU1Nffs2ZOTk3P69GmBQBAQENA2S/3mm28sLS1/++237OzsiIgIPp9/8+ZNFZWqYLU5OTnz58/fsWNHz549/f39JRdduXKFy+WuXbs2IyNj7dq16urqycnJqqu2IQgwJejTp8+cOXOYSTs7u6VLl0q1+eabb+zs7JjJ2bNn9+3bt96t9erVa9myZaqok1JGqXV1dZ6enr/88su0adNUHWBvWG1MTIyBgYFKK2S8YamRkZGdOnWqqalpgVIppf7Gfv/993p6euXl5W2z1Llz5w4aNIhZtHDhwn79+rXNUgUCwZYtW5hFY8eOnTRpkopKVbBaxoABA6QC7JNPPhk2bBgzOXTo0AkTJqigzEbgFOKbqqmpSUlJ8fHxYeb4+PhcuXJFqtnVq1cl2wwdOvTGjRu1tbWSbSiKSkxMzMzM7N+/f5stddWqVaampn5+fqqoUOnVlpeXW1tbd+jQYdSoUampqW221BMnTri7u8+dO9fc3NzR0XHt2rUikajNVispOjp6woQJOjo6bbPUfv36paSkXLt2jRDy8OHDuLg4FZ3tfPNSq6ur+Xw+s0hLS+vSpUuqKFXxauWQPZAmra4sCLA3VVhYKBKJzM3NmTnm5ub5+flSzfLz86Xa1NXVFRYW0pMlJSW6uro8Hm/kyJHh4eHe3t5ts9TLly9HR0dHRUWpojylV2tnZxcbG3vixIl9+/bx+XxPT88HDx60zVIfPnx46NAhkUgUFxe3bNmyTZs2rVmzRhWlKqVaxrVr1+7evTtjxow2W+qECRNWr17dr18/DQ2Nzp07Dxw4cOnSpW2z1KFDh3733XcPHjwQi8UJCQnHjx8XCoWqKFXxauWQPZAmra4sb9vT6FuL5NtbKIqq92UuUm0k5+jp6aWlpZWXlycmJi5cuLBTp04ffPBBWyu1rKxs8uTJUVFRJiYmKqqt0Uqa9IPt27dv37596fmenp7Ozs7h4eE//vhjGyxVLBabmZlt27aNy+W6uLg8e/Zs48aNK1asUFGpb1gtIzo62tHRsU+fPiors54ymlTq+fPn16xZExER4ebmlpWV5e/vLxAIli9f3gZL3bx588yZM+3s7DgcTufOnT/77LOYmBgV1al4tapbXSkQYG/KxMSEy+VK/vVRUFAg+bcJzcLCQqqNurq6sbExPammptalSxdCSM+ePTMyMsLCwlQRYG9Y6r179x49ejR69Gh6vlgsJoSoq6tnZmZ27ty5rVUr1UxNTa13794q6oG9eakCgUBDQ4PL5dKL7O3t8/Pza2pqeDxeG6yWVllZuX///lWrVim9QiWWunz58ilTptB9xO7du1dUVMyaNSsoKKih90u1YqmmpqbHjh2rqqoqKiqytLRcunSpra2tcotsarVyyB5Ik1ZXFpxCfFM8Hs/FxSUhIYGZk5CQ4OHhIdXM3d1dss2ZM2dcXV01NDRkN0hRVHV1dRss1c7O7s6dO2n/GDNmzMCBA9PS0lT0/mvl/mApikpLSxMIBG2zVE9Pz6ysLPpvAkLI/fv3BQKBKtJLKdXSfv311+rq6smTJ6uiSGWVWllZKZlVXC6XvvjfBkul8fn89u3b19XVHT58eOzYsUqvs0nVyiF7IE1aXWlacMDIW4sekBodHZ2enh4QEKCjo/Po0SOKopYuXTplyhS6DT18dsGCBenp6dHR0ZLDZ9euXXvmzJns7OyMjIxNmzapq6tHRUW1zVIltcAoxDesNiQkJD4+Pjs7OzU19bPPPlNXV//zzz/bZqm5ubm6urrz5s3LzMw8deqUmZlZaGioikp982pp/fr18/X1VV2RSik1ODhYT09v3759Dx8+PHPmTOfOnT/55JO2WWpycvLhw4ezs7P/+OOPQYMG2dravnz5UkWlKlgtRVGpqampqakuLi4TJ05MTU29d+8ePf/y5ctcLnfdunUZGRnr1q3DMHp2++mnn6ytrXk8nrOz84ULF+iZ06ZNGzBgANPm/PnzvXr14vF4NjY2kZGRzPygoKAuXbrw+fx27dq5u7vv37+/zZYqqQUC7A2rDQgI6NixI4/HMzU1pQdZtdlSKYq6cuWKm5ubpqZmp06d1qxZU1dX15arzczMpP/uVmmRb15qbW1tSEgIfXewlZXVl19+qdJUeJNSz58/b29vr6mpaWxsPGXKlKdPn6quTsWrlerwWFtbM4sOHjzYrVs3+tzM4cOHVV1tvfA6FQAAYCVcAwMAAFZCgAEAACshwAAAgJUQYAAAwEoIMAAAYCUEGAAAsBICDAAAWAkBBvA2iI2NNTQ0rHfR9OnTW+Dd2ZJCQkJ69uzZknuEdxMCDN4h06dP53A4HA5HQ0PD3Nzc29t7+/btzBMI31abN2+OjY1VvL3kT6lTp06LFy+uqKho0h4XL16cmJjIbK2F4xPeHQgweLcMGzZMKBQ+evTo999/HzhwoL+//6hRo+rq6lq7rr/V1NQofZsGBgYNdc4aQv+UHj58GBoaGhERsXjxYgVXpCiqrq5OV1dX9oUAAEqHAIN3i6ampoWFRfv27Z2dnf/3v/8dP378999/ZzooJSUls2bNMjMz09fXHzRo0K1bt+j59Dmx7du3d+zYUVdX94svvhCJRBs2bLCwsDAzM5N8+WRubu7YsWN1dXX19fU/+eST58+fM4tCQ0PNzMz09PRmzJixdOlS5iQb3UcJCwuztLTs2rUrIWT37t2urq56enoWFhYTJ04sKCigW54/f57D4fz22289evTg8/lubm537tyRPLrTp0/b29vr6urSCSS5ffqzWCxev359ly5dNDU1O3bs2NBrM+mfkpWV1cSJEydNmnTs2LFGqzp9+rSrq6umpubFixeZU4ghISE7duw4fvw43aU7f/78oEGD5s2bx+yoqKhIU1MzKSmpKf+GAH9DgME7bdCgQT169Dhy5AghhKKokSNH5ufnx8XFpaSkODs7Dx48uLi4mG6ZnZ39+++/x8fH79u3b/v27SNHjnzy5MmFCxfWr1+/bNmy5ORkegvjxo0rLi6+cOFCQkJCdna2r68vvfqePXvWrFmzfv36lJSUjh07RkZGSpaRmJiYkZGRkJBw6tQpQkhNTc3q1atv3bp17NixnJyc6dOnSzb++uuvv/322+vXr5uZmY0ZM4Z+IT0hpLKy8ttvv921a9cff/yRm5tbb7cpMDBw/fr1y5cvT09P37t3ryLvcNLS0qJ3Ib+qb775JiwsLCMjw8nJiZm5ePHiTz75hE5ToVDo4eExY8aMvXv3Mi8M2rNnj6Wl5cCBAxstA6AerfIIYYBWUe8T9H19fe3t7SmKSkxM1NfXr6qqYhZ17tz5559/pigqODhYW1u7tLSUnj906FAbGxuRSERPduvWLSwsjKKoM2fOcLnc3Nxcev69e/cIIdeuXaMoys3Nbe7cucyWPT09e/TowVRlbm5eXV1db83Xrl0jhJSVlVEUde7cOUII876CoqIiLS2tAwcOUBRFv703KyuLXvTTTz+Zm5tLHXVpaammpmajL+uR/Cn9+eefxsbGsq8gka3q2LFjzNLg4GDJo5P8mVdVVRkZGdE1UxTVs2fPkJAQ+fUANAQ9MHjXUf+8DT0lJaW8vNzY2Fj3Hzk5OdnZ2XQzGxsbPT09+rO5ubmDgwPzpkRzc3P6fFpGRoaVlRXzhk8HBwdDQ8OMjAxCSGZmZp8+fZidSn4mhHTv3l3y9ZWpqaljx461trbW09Oj382dm5vLLHV3d6c/GBkZdevWjd4+IURbW5t5NbZAIGBO8TEyMjKqq6sHDx7c6M/k1KlTurq6fD7f3d29f//+4eHhjVbl6ura6GYJIZqampMnT96+fTshJC0t7datW1I9OQDFqbd2AQCtLCMjg353u1gsFggE58+fl1zKDH+QfG0uPUJPcpIeyshkIUNyjuQi6r+vMdLR0WE+V1RU+Pj4+Pj47N6929TUNDc3d+jQoXIGdzCblSqJknlTkpaWVkMbkTJw4MDIyEgNDQ1LS0t6s41WJXkI8s2YMaNnz55PnjzZvn374MGDra2tFVwRQAp6YPBOS0pKunPnzv/93/8RQpydnfPz89XV1btIMDExUXxrDg4Oubm5eXl59GR6enpJSYm9vT0hpFu3bvRpN9qNGzca2shff/1VWFi4bt06Ly8vOzs72Y4Ufb2NEPLy5cv79+/b2dkpWN57772npaXFDHCXQ0dHp0uXLtbW1kwoNlpVQ3g8nkgkkpzTvXt3V1fXqKiovXv3fv755wpuB0AWAgzeLdXV1fn5+U+fPr158+batWvHjh07atSoqVOnEkKGDBni7u4+bty406dPP3r06MqVK8uWLZOTNLKGDBni5OQ0adKkmzdvXrt2berUqQMGDKDPrX311VfR0dE7dux48OBBaGjo7du3pfpqDPot0uHh4Q8fPjxx4sTq1aulGqxatSoxMfHu3bvTp083MTFR/C4rPp+/ZMmSb775ZufOndnZ2cnJydHR0Qqu22hVDbGxsbl9+3ZmZmZhYSEz3mTGjBnr1q0TiUTjx49XcDsAshBg8G6Jj48XCAQ2NjbDhg07d+7cjz/+ePz4cS6XSwjhcDhxcXH9+/f//PPPu3btOmHChEePHikyTo/B4XCOHTvWrl27/v37DxkypFOnTgcOHKAXTZo0KTAwcPHixc7OzvQQPj6fX+9GTE1NY2NjDx486ODgsG7dum+//Vaqwbp16/z9/V1cXIRC4YkTJyQvnjVq+fLlixYtWrFihb29va+vr+IdqUarasjMmTO7devm6upqamp6+fJleuann36qrq4+ceLEhn4IAIqo50Q5AKiat7e3hYXFrl27mrTW+fPnBw4c+PLly6bemNzW5OXl2djYXL9+3dnZubVrARbDIA6AllBZWbl169ahQ4dyudx9+/adPXs2ISGhtYtqBbW1tUKhcOnSpX379kV6wRtCgAG0BPr8ZGhoaHV1dbdu3Q4fPjxkyJDWLqoVXL58eeDAgV27dj106FBr1wKsh1OIAADAShjEAQAArIQAAwAAVkKAAQAAKyHAAACAlRBgAADASggwAABgJQQYAACwEgIMAABYCQEGAACs9P+0Im2e9es8nAAAAABJRU5ErkJggg==", + "image/png": "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f//+J0+enD59ukePHhMmTGizztRLlp5SFHX79u3bt2/b2dlNmjTp9u3bDx8+pMsTExO5XO66detSU1PXrVvX/qfRN7mn7eRLCQHWSrZu3WpiYsLj8fr373/x4kW6cOrUqYMHD2bqXLhwoV+/fjwez9TUNCIigik3MTGR+rUjJCSkdZvfCM3pqaR2HmBUs3t65coVBwcHPp9vbm6+Zs2aqqqq1mx8YzWns5WVlaGhoT169BAIBMbGxl988cVff/3Vus1vBFl6KvXv0cTEhFl18OBBCwsL+ozC4cOHW7ftjdOcnraTLyW8TgUAAFgJ18AAAICVEGAAAMBKCDAAAGAlBBgAALASAgwAAFgJAQYAAKyEAAMAAFZCgAF0BLt27dLS0qp1lY+PTyu/2zo0NLRv376teUTonBBg0In4+PhwOBwOh6OkpGRgYODm5hYdHc08kLCj+uGHH3bt2iV7fcmfkrm5+aJFi0pLSxt1xEWLFp09e5bZWyvHJ3QeCDDoXEaMGCESibKysn7//fchQ4b4+/t//PHHVVVVbd2uv1VUVLT4PjU1NesanNWF/ik9efJk9erV4eHhixYtknFDiqKqqqrU1NQkX6QAICcIMOhc+Hy+oaFh165d+/fv/3//93/Hjx///fffmQFKUVHRrFmz9PX1NTQ0XF1d7969S5fT58Sio6O7d++upqY2d+5csVi8YcMGQ0NDfX39NWvWMPvPzs4eO3asmpqahobGhAkTXrx4waxavXq1vr6+urr6jBkzlixZwpxko8coYWFhRkZGvXr1IoTs3bvX3t5eXV3d0NBw0qRJ+fn5dM0LFy5wOJzffvutT58+AoHAwcHh/v37kr07deqUlZWVmpoanUCS+6c/V1dXr1+//r333uPz+d27d5dsec2fkrGx8aRJkyZPnnzs2LEGW3Xq1Cl7e3s+n3/p0iXmFGJoaGhMTMzx48fpId2FCxdcXV3nz5/PHKigoIDP5587d64xf4YAf0OAQafm6urap0+fI0eOEEIoiho9enReXl5cXFxycnL//v2HDh1aWFhI18zIyPj999/j4+P3798fHR09evToZ8+eXbx4cf369UuXLr169Sq9h3HjxhUWFl68eDEhISEjI8PT05PefN++fWvWrFm/fn1ycnL37t0jIiIkm3H27NnU1NSEhISTJ08SQioqKlatWnX37t1jx45l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", "text/plain": [ "
" ] @@ -962,200 +962,200 @@ " \n", " original\n", " Overall\n", - " 0.867988\n", - " 0.795825\n", - " 0.704437\n", - " 0.622647\n", - " 0.758689\n", - " 0.657426\n", - " 0.923695\n", + " 0.874212\n", + " 0.800385\n", + " 0.714816\n", + " 0.638670\n", + " 0.781250\n", + " 0.658795\n", + " 0.926794\n", " 2922.0\n", " 9289.0\n", " 0.239292\n", - " 0.207354\n", + " 0.201785\n", " \n", " \n", " 0\n", - " 0.892308\n", - " 0.589364\n", - " 0.300000\n", - " 0.340009\n", - " 0.750000\n", - " 0.187500\n", - " 0.877741\n", + " 0.863158\n", + " 0.618671\n", + " 0.380952\n", + " 0.397779\n", + " 0.800000\n", + " 0.250000\n", + " 0.879747\n", " 16.0\n", - " 114.0\n", - " 0.123077\n", - " 0.030769\n", + " 79.0\n", + " 0.168421\n", + " 0.052632\n", " \n", " \n", " 1\n", - " 0.831978\n", - " 0.754766\n", - " 0.655556\n", - " 0.553843\n", - " 0.746835\n", - " 0.584158\n", - " 0.908711\n", - " 101.0\n", - " 268.0\n", - " 0.273713\n", - " 0.214092\n", + " 0.837838\n", + " 0.805269\n", + " 0.750000\n", + " 0.634899\n", + " 0.810811\n", + " 0.697674\n", + " 0.919554\n", + " 129.0\n", + " 241.0\n", + " 0.348649\n", + " 0.300000\n", " \n", " \n", " 2\n", - " 0.929614\n", - " 0.767418\n", - " 0.658333\n", - " 0.635246\n", - " 0.814433\n", - " 0.552448\n", - " 0.947019\n", - " 143.0\n", - " 1022.0\n", - " 0.122747\n", - " 0.083262\n", + " 0.939138\n", + " 0.792021\n", + " 0.686957\n", + " 0.661844\n", + " 0.797980\n", + " 0.603053\n", + " 0.960479\n", + " 131.0\n", + " 1052.0\n", + " 0.110735\n", + " 0.083686\n", " \n", " \n", " 3\n", - " 0.941176\n", - " 0.815747\n", - " 0.750000\n", - " 0.730769\n", - " 0.900000\n", - " 0.642857\n", - " 0.956169\n", - " 14.0\n", - " 88.0\n", - " 0.137255\n", - " 0.098039\n", + " 0.937500\n", + " 0.797591\n", + " 0.695652\n", + " 0.668558\n", + " 0.800000\n", + " 0.615385\n", + " 0.973582\n", + " 13.0\n", + " 99.0\n", + " 0.116071\n", + " 0.089286\n", " \n", " \n", " 4\n", - " 0.861369\n", - " 0.797787\n", - " 0.709820\n", - " 0.621215\n", - " 0.756191\n", - " 0.668807\n", - " 0.921111\n", - " 2648.0\n", - " 7797.0\n", - " 0.253518\n", - " 0.224222\n", + " 0.867572\n", + " 0.799523\n", + " 0.715928\n", + " 0.633844\n", + " 0.778919\n", + " 0.662362\n", + " 0.922501\n", + " 2633.0\n", + " 7818.0\n", + " 0.251938\n", + " 0.214238\n", " \n", " \n", " Maximum difference\n", - " 0.109198\n", - " 0.226383\n", - " 0.450000\n", - " 0.390761\n", - " 0.153165\n", - " 0.481307\n", - " 0.078428\n", - " 2634.0\n", - " 7709.0\n", - " 0.150966\n", - " 0.193453\n", + " 0.101300\n", + " 0.186598\n", + " 0.369048\n", + " 0.270780\n", + " 0.031892\n", + " 0.447674\n", + " 0.093835\n", + " 2620.0\n", + " 7739.0\n", + " 0.237913\n", + " 0.247368\n", " \n", " \n", " updated\n", " Overall\n", - " 0.864057\n", - " 0.769549\n", - " 0.674382\n", - " 0.601041\n", - " 0.789982\n", - " 0.588296\n", - " 0.900496\n", + " 0.872001\n", + " 0.792246\n", + " 0.705039\n", + " 0.629830\n", + " 0.785865\n", + " 0.639288\n", + " 0.907573\n", " 2922.0\n", " 9289.0\n", " 0.239292\n", - " 0.178200\n", + " 0.194661\n", " \n", " \n", " 0\n", - " 0.869231\n", - " 0.683662\n", - " 0.451613\n", - " 0.377718\n", - " 0.466667\n", - " 0.437500\n", - " 0.877741\n", + " 0.884211\n", + " 0.780854\n", + " 0.645161\n", + " 0.576493\n", + " 0.666667\n", + " 0.625000\n", + " 0.879747\n", " 16.0\n", - " 114.0\n", - " 0.123077\n", - " 0.115385\n", + " 79.0\n", + " 0.168421\n", + " 0.157895\n", " \n", " \n", " 1\n", - " 0.826558\n", - " 0.726356\n", - " 0.614458\n", - " 0.529854\n", - " 0.784615\n", - " 0.504950\n", - " 0.908711\n", - " 101.0\n", - " 268.0\n", - " 0.273713\n", - " 0.176152\n", + " 0.837838\n", + " 0.794461\n", + " 0.736842\n", + " 0.633956\n", + " 0.848485\n", + " 0.651163\n", + " 0.919554\n", + " 129.0\n", + " 241.0\n", + " 0.348649\n", + " 0.267568\n", " \n", " \n", " 2\n", - " 0.915880\n", - " 0.828757\n", - " 0.675497\n", - " 0.628493\n", - " 0.641509\n", - " 0.713287\n", - " 0.947019\n", - " 143.0\n", - " 1022.0\n", - " 0.122747\n", - " 0.136481\n", + " 0.913779\n", + " 0.864642\n", + " 0.673077\n", + " 0.635721\n", + " 0.580110\n", + " 0.801527\n", + " 0.960479\n", + " 131.0\n", + " 1052.0\n", + " 0.110735\n", + " 0.153001\n", " \n", " \n", " 3\n", - " 0.882353\n", - " 0.871753\n", + " 0.919643\n", + " 0.787490\n", + " 0.640000\n", + " 0.595459\n", " 0.666667\n", - " 0.622062\n", - " 0.545455\n", - " 0.857143\n", - " 0.956169\n", - " 14.0\n", - " 88.0\n", - " 0.137255\n", - " 0.215686\n", + " 0.615385\n", + " 0.973582\n", + " 13.0\n", + " 99.0\n", + " 0.116071\n", + " 0.107143\n", " \n", " \n", " 4\n", - " 0.859359\n", - " 0.768508\n", - " 0.678063\n", - " 0.603743\n", - " 0.807833\n", - " 0.584215\n", - " 0.921111\n", - " 2648.0\n", - " 7797.0\n", - " 0.253518\n", - " 0.183341\n", + " 0.867860\n", + " 0.789262\n", + " 0.706358\n", + " 0.630176\n", + " 0.802415\n", + " 0.630839\n", + " 0.922501\n", + " 2633.0\n", + " 7818.0\n", + " 0.251938\n", + " 0.198067\n", " \n", " \n", " Maximum difference\n", - " 0.089322\n", - " 0.188091\n", - " 0.226450\n", - " 0.250775\n", - " 0.341166\n", - " 0.419643\n", - " 0.078428\n", - " 2634.0\n", - " 7709.0\n", - " 0.150966\n", - " 0.100302\n", + " 0.081805\n", + " 0.083787\n", + " 0.096842\n", + " 0.059228\n", + " 0.268374\n", + " 0.186142\n", + " 0.093835\n", + " 2620.0\n", + " 7739.0\n", + " 0.237913\n", + " 0.160425\n", " \n", " \n", "\n", @@ -1164,71 +1164,71 @@ "text/plain": [ " Accuracy Balanced Accuracy F1 score MCC \\\n", " Groups \n", - "original Overall 0.867988 0.795825 0.704437 0.622647 \n", - " 0 0.892308 0.589364 0.300000 0.340009 \n", - " 1 0.831978 0.754766 0.655556 0.553843 \n", - " 2 0.929614 0.767418 0.658333 0.635246 \n", - " 3 0.941176 0.815747 0.750000 0.730769 \n", - " 4 0.861369 0.797787 0.709820 0.621215 \n", - " Maximum difference 0.109198 0.226383 0.450000 0.390761 \n", - "updated Overall 0.864057 0.769549 0.674382 0.601041 \n", - " 0 0.869231 0.683662 0.451613 0.377718 \n", - " 1 0.826558 0.726356 0.614458 0.529854 \n", - " 2 0.915880 0.828757 0.675497 0.628493 \n", - " 3 0.882353 0.871753 0.666667 0.622062 \n", - " 4 0.859359 0.768508 0.678063 0.603743 \n", - " Maximum difference 0.089322 0.188091 0.226450 0.250775 \n", + "original Overall 0.874212 0.800385 0.714816 0.638670 \n", + " 0 0.863158 0.618671 0.380952 0.397779 \n", + " 1 0.837838 0.805269 0.750000 0.634899 \n", + " 2 0.939138 0.792021 0.686957 0.661844 \n", + " 3 0.937500 0.797591 0.695652 0.668558 \n", + " 4 0.867572 0.799523 0.715928 0.633844 \n", + " Maximum difference 0.101300 0.186598 0.369048 0.270780 \n", + "updated Overall 0.872001 0.792246 0.705039 0.629830 \n", + " 0 0.884211 0.780854 0.645161 0.576493 \n", + " 1 0.837838 0.794461 0.736842 0.633956 \n", + " 2 0.913779 0.864642 0.673077 0.635721 \n", + " 3 0.919643 0.787490 0.640000 0.595459 \n", + " 4 0.867860 0.789262 0.706358 0.630176 \n", + " Maximum difference 0.081805 0.083787 0.096842 0.059228 \n", "\n", " Precision Recall ROC AUC Positive Count \\\n", " Groups \n", - "original Overall 0.758689 0.657426 0.923695 2922.0 \n", - " 0 0.750000 0.187500 0.877741 16.0 \n", - " 1 0.746835 0.584158 0.908711 101.0 \n", - " 2 0.814433 0.552448 0.947019 143.0 \n", - " 3 0.900000 0.642857 0.956169 14.0 \n", - " 4 0.756191 0.668807 0.921111 2648.0 \n", - " Maximum difference 0.153165 0.481307 0.078428 2634.0 \n", - "updated Overall 0.789982 0.588296 0.900496 2922.0 \n", - " 0 0.466667 0.437500 0.877741 16.0 \n", - " 1 0.784615 0.504950 0.908711 101.0 \n", - " 2 0.641509 0.713287 0.947019 143.0 \n", - " 3 0.545455 0.857143 0.956169 14.0 \n", - " 4 0.807833 0.584215 0.921111 2648.0 \n", - " Maximum difference 0.341166 0.419643 0.078428 2634.0 \n", + "original Overall 0.781250 0.658795 0.926794 2922.0 \n", + " 0 0.800000 0.250000 0.879747 16.0 \n", + " 1 0.810811 0.697674 0.919554 129.0 \n", + " 2 0.797980 0.603053 0.960479 131.0 \n", + " 3 0.800000 0.615385 0.973582 13.0 \n", + " 4 0.778919 0.662362 0.922501 2633.0 \n", + " Maximum difference 0.031892 0.447674 0.093835 2620.0 \n", + "updated Overall 0.785865 0.639288 0.907573 2922.0 \n", + " 0 0.666667 0.625000 0.879747 16.0 \n", + " 1 0.848485 0.651163 0.919554 129.0 \n", + " 2 0.580110 0.801527 0.960479 131.0 \n", + " 3 0.666667 0.615385 0.973582 13.0 \n", + " 4 0.802415 0.630839 0.922501 2633.0 \n", + " Maximum difference 0.268374 0.186142 0.093835 2620.0 \n", "\n", " Negative Count Positive Label Rate \\\n", " Groups \n", "original Overall 9289.0 0.239292 \n", - " 0 114.0 0.123077 \n", - " 1 268.0 0.273713 \n", - " 2 1022.0 0.122747 \n", - " 3 88.0 0.137255 \n", - " 4 7797.0 0.253518 \n", - " Maximum difference 7709.0 0.150966 \n", + " 0 79.0 0.168421 \n", + " 1 241.0 0.348649 \n", + " 2 1052.0 0.110735 \n", + " 3 99.0 0.116071 \n", + " 4 7818.0 0.251938 \n", + " Maximum difference 7739.0 0.237913 \n", "updated Overall 9289.0 0.239292 \n", - " 0 114.0 0.123077 \n", - " 1 268.0 0.273713 \n", - " 2 1022.0 0.122747 \n", - " 3 88.0 0.137255 \n", - " 4 7797.0 0.253518 \n", - " Maximum difference 7709.0 0.150966 \n", + " 0 79.0 0.168421 \n", + " 1 241.0 0.348649 \n", + " 2 1052.0 0.110735 \n", + " 3 99.0 0.116071 \n", + " 4 7818.0 0.251938 \n", + " Maximum difference 7739.0 0.237913 \n", "\n", " Positive Prediction Rate \n", " Groups \n", - "original Overall 0.207354 \n", - " 0 0.030769 \n", - " 1 0.214092 \n", - " 2 0.083262 \n", - " 3 0.098039 \n", - " 4 0.224222 \n", - " Maximum difference 0.193453 \n", - "updated Overall 0.178200 \n", - " 0 0.115385 \n", - " 1 0.176152 \n", - " 2 0.136481 \n", - " 3 0.215686 \n", - " 4 0.183341 \n", - " Maximum difference 0.100302 " + "original Overall 0.201785 \n", + " 0 0.052632 \n", + " 1 0.300000 \n", + " 2 0.083686 \n", + " 3 0.089286 \n", + " 4 0.214238 \n", + " Maximum difference 0.247368 \n", + "updated Overall 0.194661 \n", + " 0 0.157895 \n", + " 1 0.267568 \n", + " 2 0.153001 \n", + " 3 0.107143 \n", + " 4 0.198067 \n", + " Maximum difference 0.160425 " ] }, "execution_count": 14, @@ -1308,200 +1308,200 @@ " \n", " original\n", " Overall\n", - " 0.866749\n", - " 0.790909\n", - " 0.698648\n", - " 0.617308\n", - " 0.761405\n", - " 0.645448\n", - " 0.920445\n", + " 0.873464\n", + " 0.800249\n", + " 0.713942\n", + " 0.636936\n", + " 0.777733\n", + " 0.659822\n", + " 0.928441\n", " 2922.0\n", " 9288.0\n", " 0.239312\n", - " 0.202867\n", + " 0.203030\n", " \n", " \n", " 0\n", - " 0.883929\n", - " 0.658163\n", - " 0.434783\n", - " 0.384833\n", - " 0.555556\n", - " 0.357143\n", - " 0.948251\n", - " 14.0\n", - " 98.0\n", - " 0.125000\n", - " 0.080357\n", + " 0.888889\n", + " 0.615909\n", + " 0.363636\n", + " 0.362441\n", + " 0.666667\n", + " 0.250000\n", + " 0.900000\n", + " 16.0\n", + " 110.0\n", + " 0.126984\n", + " 0.047619\n", " \n", " \n", " 1\n", - " 0.836412\n", - " 0.756772\n", - " 0.651685\n", - " 0.551016\n", - " 0.725000\n", - " 0.591837\n", - " 0.893093\n", - " 98.0\n", - " 281.0\n", - " 0.258575\n", - " 0.211082\n", + " 0.831978\n", + " 0.759259\n", + " 0.621951\n", + " 0.514021\n", + " 0.614458\n", + " 0.629630\n", + " 0.879630\n", + " 81.0\n", + " 288.0\n", + " 0.219512\n", + " 0.224932\n", " \n", " \n", " 2\n", - " 0.931217\n", - " 0.751402\n", - " 0.628571\n", - " 0.608799\n", - " 0.795181\n", - " 0.519685\n", - " 0.953139\n", - " 127.0\n", - " 1007.0\n", - " 0.111993\n", - " 0.073192\n", + " 0.927920\n", + " 0.785367\n", + " 0.678967\n", + " 0.647838\n", + " 0.793103\n", + " 0.593548\n", + " 0.947179\n", + " 155.0\n", + " 1052.0\n", + " 0.128418\n", + " 0.096106\n", " \n", " \n", " 3\n", - " 0.937500\n", - " 0.730769\n", - " 0.631579\n", - " 0.656551\n", - " 1.000000\n", - " 0.461538\n", - " 0.963481\n", + " 0.936170\n", + " 0.833808\n", + " 0.750000\n", + " 0.716978\n", + " 0.818182\n", + " 0.692308\n", + " 0.951567\n", " 13.0\n", - " 99.0\n", - " 0.116071\n", - " 0.053571\n", + " 81.0\n", + " 0.138298\n", + " 0.117021\n", " \n", " \n", " 4\n", - " 0.859926\n", - " 0.792788\n", - " 0.704770\n", - " 0.616571\n", - " 0.761635\n", - " 0.655805\n", - " 0.916189\n", - " 2670.0\n", - " 7803.0\n", - " 0.254941\n", - " 0.219517\n", + " 0.867870\n", + " 0.801810\n", + " 0.720325\n", + " 0.638056\n", + " 0.783031\n", + " 0.666918\n", + " 0.926850\n", + " 2657.0\n", + " 7757.0\n", + " 0.255137\n", + " 0.217304\n", " \n", " \n", " Maximum difference\n", - " 0.101088\n", - " 0.134625\n", - " 0.269987\n", - " 0.271718\n", - " 0.444444\n", - " 0.298662\n", - " 0.070388\n", - " 2657.0\n", - " 7705.0\n", - " 0.146582\n", - " 0.165945\n", + " 0.104192\n", + " 0.217899\n", + " 0.386364\n", + " 0.354537\n", + " 0.203724\n", + " 0.442308\n", + " 0.071937\n", + " 2644.0\n", + " 7676.0\n", + " 0.128153\n", + " 0.177313\n", " \n", " \n", " updated\n", " Overall\n", - " 0.864537\n", - " 0.770221\n", - " 0.675559\n", - " 0.602537\n", - " 0.791360\n", - " 0.589322\n", - " 0.894418\n", + " 0.872072\n", + " 0.791593\n", + " 0.704502\n", + " 0.629731\n", + " 0.787648\n", + " 0.637235\n", + " 0.908668\n", " 2922.0\n", " 9288.0\n", " 0.239312\n", - " 0.178215\n", + " 0.193612\n", " \n", " \n", " 0\n", - " 0.910714\n", - " 0.887755\n", - " 0.705882\n", - " 0.669662\n", - " 0.600000\n", - " 0.857143\n", - " 0.948251\n", - " 14.0\n", - " 98.0\n", - " 0.125000\n", - " 0.178571\n", + " 0.880952\n", + " 0.798295\n", + " 0.594595\n", + " 0.533002\n", + " 0.523810\n", + " 0.687500\n", + " 0.900000\n", + " 16.0\n", + " 110.0\n", + " 0.126984\n", + " 0.166667\n", " \n", " \n", " 1\n", - " 0.828496\n", - " 0.724853\n", - " 0.606061\n", - " 0.516155\n", - " 0.746269\n", - " 0.510204\n", - " 0.893093\n", - " 98.0\n", - " 281.0\n", - " 0.258575\n", - " 0.176781\n", + " 0.845528\n", + " 0.736883\n", + " 0.606897\n", + " 0.517919\n", + " 0.687500\n", + " 0.543210\n", + " 0.879630\n", + " 81.0\n", + " 288.0\n", + " 0.219512\n", + " 0.173442\n", " \n", " \n", " 2\n", - " 0.921517\n", - " 0.845714\n", - " 0.681004\n", - " 0.640009\n", - " 0.625000\n", - " 0.748031\n", - " 0.953139\n", - " 127.0\n", - " 1007.0\n", - " 0.111993\n", - " 0.134039\n", + " 0.907208\n", + " 0.844999\n", + " 0.678161\n", + " 0.629830\n", + " 0.611399\n", + " 0.761290\n", + " 0.947179\n", + " 155.0\n", + " 1052.0\n", + " 0.128418\n", + " 0.159901\n", " \n", " \n", " 3\n", - " 0.901786\n", - " 0.877622\n", - " 0.666667\n", - " 0.631638\n", - " 0.550000\n", - " 0.846154\n", - " 0.963481\n", + " 0.946809\n", + " 0.936847\n", + " 0.827586\n", + " 0.802539\n", + " 0.750000\n", + " 0.923077\n", + " 0.951567\n", " 13.0\n", - " 99.0\n", - " 0.116071\n", - " 0.178571\n", + " 81.0\n", + " 0.138298\n", + " 0.170213\n", " \n", " \n", " 4\n", - " 0.858780\n", - " 0.767751\n", - " 0.677567\n", - " 0.603533\n", - " 0.810642\n", - " 0.582022\n", - " 0.916189\n", - " 2670.0\n", - " 7803.0\n", - " 0.254941\n", - " 0.183042\n", + " 0.868158\n", + " 0.790250\n", + " 0.709541\n", + " 0.634121\n", + " 0.810145\n", + " 0.631163\n", + " 0.926850\n", + " 2657.0\n", + " 7757.0\n", + " 0.255137\n", + " 0.198771\n", " \n", " \n", " Maximum difference\n", - " 0.093021\n", - " 0.162902\n", - " 0.099822\n", - " 0.153507\n", - " 0.260642\n", - " 0.346939\n", - " 0.070388\n", - " 2657.0\n", - " 7705.0\n", - " 0.146582\n", - " 0.049003\n", + " 0.101280\n", + " 0.199964\n", + " 0.232992\n", + " 0.284620\n", + " 0.286335\n", + " 0.379867\n", + " 0.071937\n", + " 2644.0\n", + " 7676.0\n", + " 0.128153\n", + " 0.038870\n", " \n", " \n", "\n", @@ -1510,71 +1510,71 @@ "text/plain": [ " Accuracy Balanced Accuracy F1 score MCC \\\n", " Groups \n", - "original Overall 0.866749 0.790909 0.698648 0.617308 \n", - " 0 0.883929 0.658163 0.434783 0.384833 \n", - " 1 0.836412 0.756772 0.651685 0.551016 \n", - " 2 0.931217 0.751402 0.628571 0.608799 \n", - " 3 0.937500 0.730769 0.631579 0.656551 \n", - " 4 0.859926 0.792788 0.704770 0.616571 \n", - " Maximum difference 0.101088 0.134625 0.269987 0.271718 \n", - "updated Overall 0.864537 0.770221 0.675559 0.602537 \n", - " 0 0.910714 0.887755 0.705882 0.669662 \n", - " 1 0.828496 0.724853 0.606061 0.516155 \n", - " 2 0.921517 0.845714 0.681004 0.640009 \n", - " 3 0.901786 0.877622 0.666667 0.631638 \n", - " 4 0.858780 0.767751 0.677567 0.603533 \n", - " Maximum difference 0.093021 0.162902 0.099822 0.153507 \n", + "original Overall 0.873464 0.800249 0.713942 0.636936 \n", + " 0 0.888889 0.615909 0.363636 0.362441 \n", + " 1 0.831978 0.759259 0.621951 0.514021 \n", + " 2 0.927920 0.785367 0.678967 0.647838 \n", + " 3 0.936170 0.833808 0.750000 0.716978 \n", + " 4 0.867870 0.801810 0.720325 0.638056 \n", + " Maximum difference 0.104192 0.217899 0.386364 0.354537 \n", + "updated Overall 0.872072 0.791593 0.704502 0.629731 \n", + " 0 0.880952 0.798295 0.594595 0.533002 \n", + " 1 0.845528 0.736883 0.606897 0.517919 \n", + " 2 0.907208 0.844999 0.678161 0.629830 \n", + " 3 0.946809 0.936847 0.827586 0.802539 \n", + " 4 0.868158 0.790250 0.709541 0.634121 \n", + " Maximum difference 0.101280 0.199964 0.232992 0.284620 \n", "\n", " Precision Recall ROC AUC Positive Count \\\n", " Groups \n", - "original Overall 0.761405 0.645448 0.920445 2922.0 \n", - " 0 0.555556 0.357143 0.948251 14.0 \n", - " 1 0.725000 0.591837 0.893093 98.0 \n", - " 2 0.795181 0.519685 0.953139 127.0 \n", - " 3 1.000000 0.461538 0.963481 13.0 \n", - " 4 0.761635 0.655805 0.916189 2670.0 \n", - " Maximum difference 0.444444 0.298662 0.070388 2657.0 \n", - "updated Overall 0.791360 0.589322 0.894418 2922.0 \n", - " 0 0.600000 0.857143 0.948251 14.0 \n", - " 1 0.746269 0.510204 0.893093 98.0 \n", - " 2 0.625000 0.748031 0.953139 127.0 \n", - " 3 0.550000 0.846154 0.963481 13.0 \n", - " 4 0.810642 0.582022 0.916189 2670.0 \n", - " Maximum difference 0.260642 0.346939 0.070388 2657.0 \n", + "original Overall 0.777733 0.659822 0.928441 2922.0 \n", + " 0 0.666667 0.250000 0.900000 16.0 \n", + " 1 0.614458 0.629630 0.879630 81.0 \n", + " 2 0.793103 0.593548 0.947179 155.0 \n", + " 3 0.818182 0.692308 0.951567 13.0 \n", + " 4 0.783031 0.666918 0.926850 2657.0 \n", + " Maximum difference 0.203724 0.442308 0.071937 2644.0 \n", + "updated Overall 0.787648 0.637235 0.908668 2922.0 \n", + " 0 0.523810 0.687500 0.900000 16.0 \n", + " 1 0.687500 0.543210 0.879630 81.0 \n", + " 2 0.611399 0.761290 0.947179 155.0 \n", + " 3 0.750000 0.923077 0.951567 13.0 \n", + " 4 0.810145 0.631163 0.926850 2657.0 \n", + " Maximum difference 0.286335 0.379867 0.071937 2644.0 \n", "\n", " Negative Count Positive Label Rate \\\n", " Groups \n", "original Overall 9288.0 0.239312 \n", - " 0 98.0 0.125000 \n", - " 1 281.0 0.258575 \n", - " 2 1007.0 0.111993 \n", - " 3 99.0 0.116071 \n", - " 4 7803.0 0.254941 \n", - " Maximum difference 7705.0 0.146582 \n", + " 0 110.0 0.126984 \n", + " 1 288.0 0.219512 \n", + " 2 1052.0 0.128418 \n", + " 3 81.0 0.138298 \n", + " 4 7757.0 0.255137 \n", + " Maximum difference 7676.0 0.128153 \n", "updated Overall 9288.0 0.239312 \n", - " 0 98.0 0.125000 \n", - " 1 281.0 0.258575 \n", - " 2 1007.0 0.111993 \n", - " 3 99.0 0.116071 \n", - " 4 7803.0 0.254941 \n", - " Maximum difference 7705.0 0.146582 \n", + " 0 110.0 0.126984 \n", + " 1 288.0 0.219512 \n", + " 2 1052.0 0.128418 \n", + " 3 81.0 0.138298 \n", + " 4 7757.0 0.255137 \n", + " Maximum difference 7676.0 0.128153 \n", "\n", " Positive Prediction Rate \n", " Groups \n", - "original Overall 0.202867 \n", - " 0 0.080357 \n", - " 1 0.211082 \n", - " 2 0.073192 \n", - " 3 0.053571 \n", - " 4 0.219517 \n", - " Maximum difference 0.165945 \n", - "updated Overall 0.178215 \n", - " 0 0.178571 \n", - " 1 0.176781 \n", - " 2 0.134039 \n", - " 3 0.178571 \n", - " 4 0.183042 \n", - " Maximum difference 0.049003 " + "original Overall 0.203030 \n", + " 0 0.047619 \n", + " 1 0.224932 \n", + " 2 0.096106 \n", + " 3 0.117021 \n", + " 4 0.217304 \n", + " Maximum difference 0.177313 \n", + "updated Overall 0.193612 \n", + " 0 0.166667 \n", + " 1 0.173442 \n", + " 2 0.159901 \n", + " 3 0.170213 \n", + " 4 0.198771 \n", + " Maximum difference 0.038870 " ] }, "execution_count": 15, @@ -1767,73 +1767,73 @@ " \n", " \n", " Demographic Parity\n", - " 0.134287\n", - " 0.016033\n", - " 0.657983\n", - " 0.650000\n", + " 0.170373\n", + " 0.063117\n", + " 0.671849\n", + " 0.663866\n", " \n", " \n", " Disparate Impact\n", - " 0.706830\n", - " 0.981370\n", - " 0.657983\n", - " 0.647479\n", + " 0.651723\n", + " 0.892211\n", + " 0.671849\n", + " 0.663866\n", " \n", " \n", " Average Group Difference in Conditional Acceptance Rate\n", - " 0.197906\n", - " 0.008440\n", - " 0.657983\n", - " 0.655462\n", + " 0.392026\n", + " 0.071445\n", + " 0.671849\n", + " 0.673950\n", " \n", " \n", " Average Group Difference in Conditional Rejectance Rate\n", - " 0.046598\n", - " 0.016439\n", - " 0.657983\n", - " 0.655462\n", + " 0.111950\n", + " 0.034648\n", + " 0.671849\n", + " 0.674790\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.015688\n", - " 0.021157\n", - " 0.657983\n", - " 0.654622\n", + " 0.022351\n", + " 0.025632\n", + " 0.671849\n", + " 0.667647\n", " \n", " \n", " Average Group Difference in Recall\n", - " 0.141640\n", - " 0.058647\n", - " 0.657983\n", - " 0.652101\n", + " 0.177895\n", + " 0.069213\n", + " 0.671849\n", + " 0.671008\n", " \n", " \n", " Average Group Difference in Acceptance Rate\n", - " 0.087016\n", - " 0.076756\n", - " 0.657983\n", - " 0.660504\n", + " 0.040866\n", + " 0.055503\n", + " 0.671849\n", + " 0.670168\n", " \n", " \n", " Average Group Difference in Specificity\n", - " 0.091102\n", - " 0.053444\n", - " 0.657983\n", - " 0.658824\n", + " 0.121835\n", + " 0.057111\n", + " 0.671849\n", + " 0.674370\n", " \n", " \n", " Average Group Difference in Rejection Rate\n", - " 0.052209\n", - " 0.035084\n", - " 0.657983\n", - " 0.660924\n", + " 0.050291\n", + " 0.038554\n", + " 0.671849\n", + " 0.668487\n", " \n", " \n", " Treatment Equality\n", - " 0.185564\n", - " 0.055206\n", - " 0.657983\n", - " 0.655462\n", + " 0.360054\n", + " 0.052966\n", + " 0.671849\n", + " 0.673950\n", " \n", " \n", "\n", @@ -1841,52 +1841,52 @@ ], "text/plain": [ " Measure (original) \\\n", - "Demographic Parity 0.134287 \n", - "Disparate Impact 0.706830 \n", - "Average Group Difference in Conditional Accepta... 0.197906 \n", - "Average Group Difference in Conditional Rejecta... 0.046598 \n", - "Average Group Difference in Accuracy 0.015688 \n", - "Average Group Difference in Recall 0.141640 \n", - "Average Group Difference in Acceptance Rate 0.087016 \n", - "Average Group Difference in Specificity 0.091102 \n", - "Average Group Difference in Rejection Rate 0.052209 \n", - "Treatment Equality 0.185564 \n", + "Demographic Parity 0.170373 \n", + "Disparate Impact 0.651723 \n", + "Average Group Difference in Conditional Accepta... 0.392026 \n", + "Average Group Difference in Conditional Rejecta... 0.111950 \n", + "Average Group Difference in Accuracy 0.022351 \n", + "Average Group Difference in Recall 0.177895 \n", + "Average Group Difference in Acceptance Rate 0.040866 \n", + "Average Group Difference in Specificity 0.121835 \n", + "Average Group Difference in Rejection Rate 0.050291 \n", + "Treatment Equality 0.360054 \n", "\n", " Measure (updated) \\\n", - "Demographic Parity 0.016033 \n", - "Disparate Impact 0.981370 \n", - "Average Group Difference in Conditional Accepta... 0.008440 \n", - "Average Group Difference in Conditional Rejecta... 0.016439 \n", - "Average Group Difference in Accuracy 0.021157 \n", - "Average Group Difference in Recall 0.058647 \n", - "Average Group Difference in Acceptance Rate 0.076756 \n", - "Average Group Difference in Specificity 0.053444 \n", - "Average Group Difference in Rejection Rate 0.035084 \n", - "Treatment Equality 0.055206 \n", + "Demographic Parity 0.063117 \n", + "Disparate Impact 0.892211 \n", + "Average Group Difference in Conditional Accepta... 0.071445 \n", + "Average Group Difference in Conditional Rejecta... 0.034648 \n", + "Average Group Difference in Accuracy 0.025632 \n", + "Average Group Difference in Recall 0.069213 \n", + "Average Group Difference in Acceptance Rate 0.055503 \n", + "Average Group Difference in Specificity 0.057111 \n", + "Average Group Difference in Rejection Rate 0.038554 \n", + "Treatment Equality 0.052966 \n", "\n", " Accuracy (original) \\\n", - "Demographic Parity 0.657983 \n", - "Disparate Impact 0.657983 \n", - "Average Group Difference in Conditional Accepta... 0.657983 \n", - "Average Group Difference in Conditional Rejecta... 0.657983 \n", - "Average Group Difference in Accuracy 0.657983 \n", - "Average Group Difference in Recall 0.657983 \n", - "Average Group Difference in Acceptance Rate 0.657983 \n", - "Average Group Difference in Specificity 0.657983 \n", - "Average Group Difference in Rejection Rate 0.657983 \n", - "Treatment Equality 0.657983 \n", + "Demographic Parity 0.671849 \n", + "Disparate Impact 0.671849 \n", + "Average Group Difference in Conditional Accepta... 0.671849 \n", + "Average Group Difference in Conditional Rejecta... 0.671849 \n", + "Average Group Difference in Accuracy 0.671849 \n", + "Average Group Difference in Recall 0.671849 \n", + "Average Group Difference in Acceptance Rate 0.671849 \n", + "Average Group Difference in Specificity 0.671849 \n", + "Average Group Difference in Rejection Rate 0.671849 \n", + "Treatment Equality 0.671849 \n", "\n", " Accuracy (updated) \n", - "Demographic Parity 0.650000 \n", - "Disparate Impact 0.647479 \n", - "Average Group Difference in Conditional Accepta... 0.655462 \n", - "Average Group Difference in Conditional Rejecta... 0.655462 \n", - "Average Group Difference in Accuracy 0.654622 \n", - "Average Group Difference in Recall 0.652101 \n", - "Average Group Difference in Acceptance Rate 0.660504 \n", - "Average Group Difference in Specificity 0.658824 \n", - "Average Group Difference in Rejection Rate 0.660924 \n", - "Treatment Equality 0.655462 " + "Demographic Parity 0.663866 \n", + "Disparate Impact 0.663866 \n", + "Average Group Difference in Conditional Accepta... 0.673950 \n", + "Average Group Difference in Conditional Rejecta... 0.674790 \n", + "Average Group Difference in Accuracy 0.667647 \n", + "Average Group Difference in Recall 0.671008 \n", + "Average Group Difference in Acceptance Rate 0.670168 \n", + "Average Group Difference in Specificity 0.674370 \n", + "Average Group Difference in Rejection Rate 0.668487 \n", + "Treatment Equality 0.673950 " ] }, "execution_count": 21, @@ -1948,73 +1948,73 @@ " \n", " \n", " Demographic Parity\n", - " 0.153068\n", - " 0.102293\n", - " 0.663866\n", - " 0.621429\n", + " 0.142173\n", + " 0.107317\n", + " 0.653361\n", + " 0.624370\n", " \n", " \n", " Disparate Impact\n", - " 0.697450\n", - " 0.686713\n", - " 0.663866\n", - " 0.611765\n", + " 0.682094\n", + " 0.731433\n", + " 0.653361\n", + " 0.618487\n", " \n", " \n", " Average Group Difference in Conditional Acceptance Rate\n", - " 0.266809\n", - " 0.155159\n", - " 0.663866\n", - " 0.647059\n", + " 0.287004\n", + " 0.163108\n", + " 0.653361\n", + " 0.643697\n", " \n", " \n", " Average Group Difference in Conditional Rejectance Rate\n", - " 0.098374\n", - " 0.038179\n", - " 0.663866\n", - " 0.661765\n", + " 0.068234\n", + " 0.063120\n", + " 0.653361\n", + " 0.649580\n", " \n", " \n", " Average Group Difference in Accuracy\n", - " 0.005545\n", - " 0.019626\n", - " 0.663866\n", - " 0.661345\n", + " 0.028167\n", + " 0.026010\n", + " 0.653361\n", + " 0.650000\n", " \n", " \n", " Average Group Difference in Recall\n", - " 0.157070\n", - " 0.118976\n", - " 0.663866\n", - " 0.628571\n", + " 0.143907\n", + " 0.130195\n", + " 0.653361\n", + " 0.628992\n", " \n", " \n", " Average Group Difference in Acceptance Rate\n", - " 0.078017\n", - " 0.084274\n", - " 0.663866\n", - " 0.657983\n", + " 0.059639\n", + " 0.061339\n", + " 0.653361\n", + " 0.660924\n", " \n", " \n", " Average Group Difference in Specificity\n", - " 0.107762\n", - " 0.089286\n", - " 0.663866\n", - " 0.649160\n", + " 0.103289\n", + " 0.089840\n", + " 0.653361\n", + " 0.645378\n", " \n", " \n", " Average Group Difference in Rejection Rate\n", - " 0.043247\n", - " 0.041363\n", - " 0.663866\n", - " 0.660504\n", + " 0.073389\n", + " 0.062303\n", + " 0.653361\n", + " 0.655882\n", " \n", " \n", " Treatment Equality\n", - " 0.318437\n", - " 0.143180\n", - " 0.663866\n", - " 0.646639\n", + " 0.237167\n", + " 0.160742\n", + " 0.653361\n", + " 0.646218\n", " \n", " \n", "\n", @@ -2022,52 +2022,52 @@ ], "text/plain": [ " Measure (original) \\\n", - "Demographic Parity 0.153068 \n", - "Disparate Impact 0.697450 \n", - "Average Group Difference in Conditional Accepta... 0.266809 \n", - "Average Group Difference in Conditional Rejecta... 0.098374 \n", - "Average Group Difference in Accuracy 0.005545 \n", - "Average Group Difference in Recall 0.157070 \n", - "Average Group Difference in Acceptance Rate 0.078017 \n", - "Average Group Difference in Specificity 0.107762 \n", - "Average Group Difference in Rejection Rate 0.043247 \n", - "Treatment Equality 0.318437 \n", + "Demographic Parity 0.142173 \n", + "Disparate Impact 0.682094 \n", + "Average Group Difference in Conditional Accepta... 0.287004 \n", + "Average Group Difference in Conditional Rejecta... 0.068234 \n", + "Average Group Difference in Accuracy 0.028167 \n", + "Average Group Difference in Recall 0.143907 \n", + "Average Group Difference in Acceptance Rate 0.059639 \n", + "Average Group Difference in Specificity 0.103289 \n", + "Average Group Difference in Rejection Rate 0.073389 \n", + "Treatment Equality 0.237167 \n", "\n", " Measure (updated) \\\n", - "Demographic Parity 0.102293 \n", - "Disparate Impact 0.686713 \n", - "Average Group Difference in Conditional Accepta... 0.155159 \n", - "Average Group Difference in Conditional Rejecta... 0.038179 \n", - "Average Group Difference in Accuracy 0.019626 \n", - "Average Group Difference in Recall 0.118976 \n", - "Average Group Difference in Acceptance Rate 0.084274 \n", - "Average Group Difference in Specificity 0.089286 \n", - "Average Group Difference in Rejection Rate 0.041363 \n", - "Treatment Equality 0.143180 \n", + "Demographic Parity 0.107317 \n", + "Disparate Impact 0.731433 \n", + "Average Group Difference in Conditional Accepta... 0.163108 \n", + "Average Group Difference in Conditional Rejecta... 0.063120 \n", + "Average Group Difference in Accuracy 0.026010 \n", + "Average Group Difference in Recall 0.130195 \n", + "Average Group Difference in Acceptance Rate 0.061339 \n", + "Average Group Difference in Specificity 0.089840 \n", + "Average Group Difference in Rejection Rate 0.062303 \n", + "Treatment Equality 0.160742 \n", "\n", " Accuracy (original) \\\n", - "Demographic Parity 0.663866 \n", - "Disparate Impact 0.663866 \n", - "Average Group Difference in Conditional Accepta... 0.663866 \n", - "Average Group Difference in Conditional Rejecta... 0.663866 \n", - "Average Group Difference in Accuracy 0.663866 \n", - "Average Group Difference in Recall 0.663866 \n", - "Average Group Difference in Acceptance Rate 0.663866 \n", - "Average Group Difference in Specificity 0.663866 \n", - "Average Group Difference in Rejection Rate 0.663866 \n", - "Treatment Equality 0.663866 \n", + "Demographic Parity 0.653361 \n", + "Disparate Impact 0.653361 \n", + "Average Group Difference in Conditional Accepta... 0.653361 \n", + "Average Group Difference in Conditional Rejecta... 0.653361 \n", + "Average Group Difference in Accuracy 0.653361 \n", + "Average Group Difference in Recall 0.653361 \n", + "Average Group Difference in Acceptance Rate 0.653361 \n", + "Average Group Difference in Specificity 0.653361 \n", + "Average Group Difference in Rejection Rate 0.653361 \n", + "Treatment Equality 0.653361 \n", "\n", " Accuracy (updated) \n", - "Demographic Parity 0.621429 \n", - "Disparate Impact 0.611765 \n", - "Average Group Difference in Conditional Accepta... 0.647059 \n", - "Average Group Difference in Conditional Rejecta... 0.661765 \n", - "Average Group Difference in Accuracy 0.661345 \n", - "Average Group Difference in Recall 0.628571 \n", - "Average Group Difference in Acceptance Rate 0.657983 \n", - "Average Group Difference in Specificity 0.649160 \n", - "Average Group Difference in Rejection Rate 0.660504 \n", - "Treatment Equality 0.646639 " + "Demographic Parity 0.624370 \n", + "Disparate Impact 0.618487 \n", + "Average Group Difference in Conditional Accepta... 0.643697 \n", + "Average Group Difference in Conditional Rejecta... 0.649580 \n", + "Average Group Difference in Accuracy 0.650000 \n", + "Average Group Difference in Recall 0.628992 \n", + "Average Group Difference in Acceptance Rate 0.660924 \n", + "Average Group Difference in Specificity 0.645378 \n", + "Average Group Difference in Rejection Rate 0.655882 \n", + "Treatment Equality 0.646218 " ] }, "execution_count": 22, @@ -2150,144 +2150,144 @@ " \n", " original\n", " Overall\n", - " 0.663866\n", - " 0.655245\n", - " 0.603568\n", - " 0.315750\n", - " 0.644444\n", - " 0.567568\n", - " 0.705639\n", + " 0.653361\n", + " 0.642428\n", + " 0.580153\n", + " 0.292805\n", + " 0.639013\n", + " 0.531221\n", + " 0.700889\n", " 1073.0\n", " 1307.0\n", " 0.450840\n", - " 0.397059\n", + " 0.374790\n", " \n", " \n", " African-American\n", - " 0.661198\n", - " 0.661083\n", - " 0.668805\n", - " 0.322081\n", - " 0.672581\n", - " 0.665072\n", - " 0.704855\n", + " 0.641509\n", + " 0.642416\n", + " 0.636741\n", + " 0.285145\n", + " 0.664931\n", + " 0.610845\n", + " 0.701756\n", " 627.0\n", " 592.0\n", " 0.514356\n", - " 0.508614\n", + " 0.472518\n", " \n", " \n", " Caucasian\n", - " 0.665432\n", - " 0.624102\n", - " 0.502752\n", - " 0.270386\n", - " 0.606195\n", - " 0.429467\n", - " 0.683915\n", + " 0.658025\n", + " 0.611952\n", + " 0.476371\n", + " 0.249640\n", + " 0.600000\n", + " 0.394984\n", + " 0.673311\n", " 319.0\n", " 491.0\n", " 0.393827\n", - " 0.279012\n", + " 0.259259\n", " \n", " \n", " Other\n", - " 0.669516\n", - " 0.618321\n", - " 0.486726\n", - " 0.252697\n", - " 0.555556\n", - " 0.433071\n", - " 0.703881\n", + " 0.683761\n", + " 0.639711\n", + " 0.523605\n", + " 0.292449\n", + " 0.575472\n", + " 0.480315\n", + " 0.688607\n", " 127.0\n", " 224.0\n", " 0.361823\n", - " 0.282051\n", + " 0.301994\n", " \n", " \n", " Maximum difference\n", - " 0.008318\n", - " 0.042762\n", - " 0.182079\n", - " 0.069384\n", - " 0.117025\n", - " 0.235605\n", - " 0.020940\n", + " 0.042251\n", + " 0.030463\n", + " 0.160371\n", + " 0.042809\n", + " 0.089459\n", + " 0.215861\n", + " 0.028445\n", " 500.0\n", " 368.0\n", " 0.152533\n", - " 0.229601\n", + " 0.213259\n", " \n", " \n", " updated\n", " Overall\n", - " 0.646639\n", - " 0.629716\n", - " 0.538673\n", - " 0.277867\n", - " 0.654667\n", - " 0.457596\n", - " 0.692327\n", + " 0.646218\n", + " 0.632754\n", + " 0.558237\n", + " 0.276979\n", + " 0.638655\n", + " 0.495806\n", + " 0.688616\n", " 1073.0\n", " 1307.0\n", " 0.450840\n", - " 0.315126\n", + " 0.350000\n", " \n", " \n", " African-American\n", - " 0.639869\n", - " 0.642660\n", - " 0.609083\n", - " 0.290279\n", - " 0.689516\n", - " 0.545455\n", - " 0.690321\n", + " 0.634947\n", + " 0.636885\n", + " 0.616048\n", + " 0.275896\n", + " 0.671053\n", + " 0.569378\n", + " 0.693082\n", " 627.0\n", " 592.0\n", " 0.514356\n", - " 0.406891\n", + " 0.436423\n", " \n", " \n", " Caucasian\n", - " 0.644444\n", - " 0.590868\n", - " 0.428571\n", - " 0.211519\n", - " 0.583784\n", - " 0.338558\n", - " 0.667708\n", + " 0.654321\n", + " 0.605603\n", + " 0.461538\n", + " 0.238911\n", + " 0.597015\n", + " 0.376176\n", + " 0.655683\n", " 319.0\n", " 491.0\n", " 0.393827\n", - " 0.228395\n", + " 0.248148\n", " \n", " \n", " Other\n", - " 0.675214\n", - " 0.598917\n", - " 0.418367\n", - " 0.239210\n", - " 0.594203\n", - " 0.322835\n", - " 0.705884\n", + " 0.666667\n", + " 0.616089\n", + " 0.484581\n", + " 0.247178\n", + " 0.550000\n", + " 0.433071\n", + " 0.673703\n", " 127.0\n", " 224.0\n", " 0.361823\n", - " 0.196581\n", + " 0.284900\n", " \n", " \n", " Maximum difference\n", - " 0.035345\n", - " 0.051792\n", - " 0.190715\n", - " 0.078760\n", - " 0.105732\n", - " 0.222620\n", - " 0.038176\n", + " 0.031720\n", + " 0.031282\n", + " 0.154510\n", + " 0.036986\n", + " 0.121053\n", + " 0.193202\n", + " 0.037399\n", " 500.0\n", " 368.0\n", " 0.152533\n", - " 0.210310\n", + " 0.188275\n", " \n", " \n", "\n", @@ -2296,29 +2296,29 @@ "text/plain": [ " Accuracy Balanced Accuracy F1 score MCC \\\n", " Groups \n", - "original Overall 0.663866 0.655245 0.603568 0.315750 \n", - " African-American 0.661198 0.661083 0.668805 0.322081 \n", - " Caucasian 0.665432 0.624102 0.502752 0.270386 \n", - " Other 0.669516 0.618321 0.486726 0.252697 \n", - " Maximum difference 0.008318 0.042762 0.182079 0.069384 \n", - "updated Overall 0.646639 0.629716 0.538673 0.277867 \n", - " African-American 0.639869 0.642660 0.609083 0.290279 \n", - " Caucasian 0.644444 0.590868 0.428571 0.211519 \n", - " Other 0.675214 0.598917 0.418367 0.239210 \n", - " Maximum difference 0.035345 0.051792 0.190715 0.078760 \n", + "original Overall 0.653361 0.642428 0.580153 0.292805 \n", + " African-American 0.641509 0.642416 0.636741 0.285145 \n", + " Caucasian 0.658025 0.611952 0.476371 0.249640 \n", + " Other 0.683761 0.639711 0.523605 0.292449 \n", + " Maximum difference 0.042251 0.030463 0.160371 0.042809 \n", + "updated Overall 0.646218 0.632754 0.558237 0.276979 \n", + " African-American 0.634947 0.636885 0.616048 0.275896 \n", + " Caucasian 0.654321 0.605603 0.461538 0.238911 \n", + " Other 0.666667 0.616089 0.484581 0.247178 \n", + " Maximum difference 0.031720 0.031282 0.154510 0.036986 \n", "\n", " Precision Recall ROC AUC Positive Count \\\n", " Groups \n", - "original Overall 0.644444 0.567568 0.705639 1073.0 \n", - " African-American 0.672581 0.665072 0.704855 627.0 \n", - " Caucasian 0.606195 0.429467 0.683915 319.0 \n", - " Other 0.555556 0.433071 0.703881 127.0 \n", - " Maximum difference 0.117025 0.235605 0.020940 500.0 \n", - "updated Overall 0.654667 0.457596 0.692327 1073.0 \n", - " African-American 0.689516 0.545455 0.690321 627.0 \n", - " Caucasian 0.583784 0.338558 0.667708 319.0 \n", - " Other 0.594203 0.322835 0.705884 127.0 \n", - " Maximum difference 0.105732 0.222620 0.038176 500.0 \n", + "original Overall 0.639013 0.531221 0.700889 1073.0 \n", + " African-American 0.664931 0.610845 0.701756 627.0 \n", + " Caucasian 0.600000 0.394984 0.673311 319.0 \n", + " Other 0.575472 0.480315 0.688607 127.0 \n", + " Maximum difference 0.089459 0.215861 0.028445 500.0 \n", + "updated Overall 0.638655 0.495806 0.688616 1073.0 \n", + " African-American 0.671053 0.569378 0.693082 627.0 \n", + " Caucasian 0.597015 0.376176 0.655683 319.0 \n", + " Other 0.550000 0.433071 0.673703 127.0 \n", + " Maximum difference 0.121053 0.193202 0.037399 500.0 \n", "\n", " Negative Count Positive Label Rate \\\n", " Groups \n", @@ -2335,16 +2335,16 @@ "\n", " Positive Prediction Rate \n", " Groups \n", - "original Overall 0.397059 \n", - " African-American 0.508614 \n", - " Caucasian 0.279012 \n", - " Other 0.282051 \n", - " Maximum difference 0.229601 \n", - "updated Overall 0.315126 \n", - " African-American 0.406891 \n", - " Caucasian 0.228395 \n", - " Other 0.196581 \n", - " Maximum difference 0.210310 " + "original Overall 0.374790 \n", + " African-American 0.472518 \n", + " Caucasian 0.259259 \n", + " Other 0.301994 \n", + " Maximum difference 0.213259 \n", + "updated Overall 0.350000 \n", + " African-American 0.436423 \n", + " Caucasian 0.248148 \n", + " Other 0.284900 \n", + " Maximum difference 0.188275 " ] }, "execution_count": 23, @@ -2414,13 +2414,13 @@ " \n", " \n", " Accuracy\n", - " 0.736455\n", - " 0.681856\n", + " 0.738975\n", + " 0.693406\n", " \n", " \n", " Average Group Difference in Conditional Positive Prediction Rate\n", - " 0.136081\n", - " 0.019586\n", + " 0.137529\n", + " 0.019887\n", " \n", " \n", "\n", @@ -2428,8 +2428,8 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.736455 0.681856\n", - "Average Group Difference in Conditional Positiv... 0.136081 0.019586" + "Accuracy 0.738975 0.693406\n", + "Average Group Difference in Conditional Positiv... 0.137529 0.019887" ] }, "execution_count": 25, @@ -2481,13 +2481,13 @@ " \n", " \n", " Accuracy\n", - " 0.663866\n", - " 0.619328\n", + " 0.653361\n", + " 0.626471\n", " \n", " \n", " Average Group Difference in Conditional Positive Prediction Rate\n", - " 0.151770\n", - " 0.111426\n", + " 0.136923\n", + " 0.100760\n", " \n", " \n", "\n", @@ -2495,8 +2495,8 @@ ], "text/plain": [ " original updated\n", - "Accuracy 0.663866 0.619328\n", - "Average Group Difference in Conditional Positiv... 0.151770 0.111426" + "Accuracy 0.653361 0.626471\n", + "Average Group Difference in Conditional Positiv... 0.136923 0.100760" ] }, "execution_count": 26, @@ -2525,7 +2525,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.1.-1" + "version": "3.10.13" } }, "nbformat": 4,