diff --git a/shapash/explainer/consistency.py b/shapash/explainer/consistency.py
index bd053f11..ac3bfa4a 100644
--- a/shapash/explainer/consistency.py
+++ b/shapash/explainer/consistency.py
@@ -16,8 +16,8 @@
class Consistency:
"""Consistency class"""
- def __init__(self):
- self._palette_name = list(colors_loading().keys())[0]
+ def __init__(self, palette_name="default"):
+ self._palette_name = palette_name
self._style_dict = define_style(select_palette(colors_loading(), self._palette_name))
def tuning_colorscale(self, values):
@@ -454,7 +454,15 @@ def plot_examples(self, method_1, method_2, l2, index, backend_name_1, backend_n
return fig
def pairwise_consistency_plot(
- self, methods, selection=None, max_features=10, max_points=100, file_name=None, auto_open=False
+ self,
+ methods,
+ selection=None,
+ max_features=10,
+ max_points=100,
+ file_name=None,
+ auto_open=False,
+ width=1000,
+ height="auto",
):
"""The Pairwise_Consistency_plot compares the difference of 2 explainability methods across each feature and each data point,
and plots the distribution of those differences.
@@ -480,6 +488,10 @@ def pairwise_consistency_plot(
Specify the save path of html files. If it is not provided, no file will be saved.
auto_open: bool
open automatically the plot, by default False
+ height : str or int, optional
+ Height of the figure. Default is 'auto'.
+ width : int, optional
+ Width of the figure. Default is 1000.
Returns
@@ -520,11 +532,15 @@ def pairwise_consistency_plot(
mean_contributions = np.mean(np.abs(pd.concat(weights)), axis=0)
top_features = np.flip(mean_contributions.sort_values(ascending=False)[:max_features].keys())
- fig = self.plot_pairwise_consistency(weights, x, top_features, methods, file_name, auto_open)
+ fig = self.plot_pairwise_consistency(
+ weights, x, top_features, methods, file_name, auto_open, width=width, height=height
+ )
return fig
- def plot_pairwise_consistency(self, weights, x, top_features, methods, file_name, auto_open):
+ def plot_pairwise_consistency(
+ self, weights, x, top_features, methods, file_name, auto_open, width=1000, height="auto"
+ ):
"""Plot the main graph displaying distances between methods across each feature and data point
Parameters
@@ -541,6 +557,10 @@ def plot_pairwise_consistency(self, weights, x, top_features, methods, file_name
Specify the save path of html files. If it is not provided, no file will be saved.
auto_open: bool
open automatically the plot
+ height : str or int, optional
+ Height of the figure. Default is 'auto'.
+ width : int, optional
+ Width of the figure. Default is 1000.
Returns
-------
@@ -555,8 +575,7 @@ def plot_pairwise_consistency(self, weights, x, top_features, methods, file_name
x = encoder.transform(x)
xaxis_title = (
- "Difference of contributions between the 2 methods"
- + f"
{methods[0]} - {methods[1]}"
+ "
Difference of contributions between the 2 methods" + f"
{methods[0]} - {methods[1]}"
)
yaxis_title = (
"Top features
(Ordered by mean of absolute contributions)"
@@ -647,11 +666,15 @@ def plot_pairwise_consistency(self, weights, x, top_features, methods, file_name
yaxis_title=yaxis_title,
file_name=file_name,
auto_open=auto_open,
+ height=height,
+ width=width,
)
return fig
- def _update_pairwise_consistency_fig(self, fig, top_features, xaxis_title, yaxis_title, file_name, auto_open):
+ def _update_pairwise_consistency_fig(
+ self, fig, top_features, xaxis_title, yaxis_title, file_name, auto_open, height="auto", width=1000
+ ):
"""Function used for the pairwise_consistency_plot to update the layout of the plotly figure.
Parameters
@@ -668,11 +691,19 @@ def _update_pairwise_consistency_fig(self, fig, top_features, xaxis_title, yaxis
Specify the save path of html files. If it is not provided, no file will be saved.
auto_open: bool
open automatically the plot
+ height : str or int, optional
+ Height of the figure. Default is 'auto'.
+ width : int, optional
+ Width of the figure. Default is 1000.
+
+ Returns
+ -------
+ None
"""
- height = max(500, 40 * len(top_features))
- title = "Pairwise comparison of Consistency:"
- title += "\
-
How are differences in contributions distributed across features?"
+ if height == "auto":
+ height = max(500, 40 * len(top_features) + 300)
+ title = "
Pairwise comparison of Consistency:"
+ title += "
How are differences in contributions distributed across features?"
dict_t = self._style_dict["dict_title_stability"] | {"text": title, "y": adjust_title_height(height)}
dict_xaxis = self._style_dict["dict_xaxis"] | {"text": xaxis_title}
dict_yaxis = self._style_dict["dict_yaxis"] | {"text": yaxis_title}
@@ -681,12 +712,15 @@ def _update_pairwise_consistency_fig(self, fig, top_features, xaxis_title, yaxis
fig.layout.yaxis2.update(showticklabels=False)
fig.update_layout(
template="none",
+ autosize=False,
title=dict_t,
xaxis_title=dict_xaxis,
yaxis_title=dict_yaxis,
yaxis=dict(range=[-0.7, len(top_features) - 0.3]),
yaxis2=dict(range=[-0.7, len(top_features) - 0.3]),
height=height,
+ width=width,
+ margin={"l": 150, "r": 20, "t": 95, "b": 70},
)
fig.update_yaxes(automargin=True, zeroline=False)
diff --git a/shapash/explainer/smart_plotter.py b/shapash/explainer/smart_plotter.py
index 5c568b71..f135edb6 100644
--- a/shapash/explainer/smart_plotter.py
+++ b/shapash/explainer/smart_plotter.py
@@ -1428,7 +1428,7 @@ def correlations_plot(
return fig
- def local_neighbors_plot(self, index, max_features=10, file_name=None, auto_open=False):
+ def local_neighbors_plot(self, index, max_features=10, file_name=None, auto_open=False, height="auto", width=900):
"""
The Local_neighbors_plot has the main objective of increasing confidence \
in interpreting the contribution values of a selected instance.
@@ -1450,6 +1450,7 @@ def local_neighbors_plot(self, index, max_features=10, file_name=None, auto_open
* For classification:
.. math::
distance = |output_{allFeatures} - output_{currentFeatures}|
+
Parameters
----------
index: int
@@ -1460,6 +1461,11 @@ def local_neighbors_plot(self, index, max_features=10, file_name=None, auto_open
Specify the save path of html files. If it is not provided, no file will be saved, by default None
auto_open: bool, optional
open automatically the plot, by default False
+ height : str or int, optional
+ Height of the figure. Default is 'auto'.
+ width : int, optional
+ Width of the figure. Default is 900.
+
Returns
-------
fig
@@ -1512,15 +1518,18 @@ def ordinal(n):
]
)
- height = max(500, 11 * g_df.shape[0] * g_df.shape[1])
- title = f"Comparing local explanations in a neighborhood - Id: {index}"
- title += "
How similar are explanations for closeby neighbours?"
+ if height == "auto":
+ height = max(500, 11 * g_df.shape[0] * g_df.shape[1])
+ title = f"
Comparing local explanations in a neighborhood - Id: {index}"
+ title += "
How similar are explanations for closeby neighbours?"
dict_t = self._style_dict["dict_title_stability"] | {"text": title, "y": adjust_title_height(height)}
dict_xaxis = self._style_dict["dict_xaxis"] | {"text": "Normalized contribution values"}
dict_yaxis = self._style_dict["dict_yaxis"] | {"text": ""}
fig.update_layout(
template="none",
+ autosize=False,
+ width=width,
title=dict_t,
xaxis_title=dict_xaxis,
yaxis_title=dict_yaxis,
@@ -1529,6 +1538,7 @@ def ordinal(n):
height=height,
legend={"traceorder": "reversed"},
xaxis={"side": "bottom"},
+ margin={"l": 150, "r": 20, "t": 95, "b": 70},
)
fig.update_yaxes(automargin=True)
@@ -1548,6 +1558,8 @@ def stability_plot(
distribution="none",
file_name=None,
auto_open=False,
+ height="auto",
+ width=900,
):
"""
The Stability_plot has the main objective of increasing confidence in contribution values, \
@@ -1588,6 +1600,11 @@ def stability_plot(
Specify the save path of html files. If it is not provided, no file will be saved, by default None
auto_open: bool, optional
open automatically the plot, by default False
+ height: int or 'auto'
+ Plotly figure - layout height
+ width: int
+ Plotly figure - layout width
+
Returns
-------
If single instance:
@@ -1641,6 +1658,8 @@ def stability_plot(
auto_open,
self._style_dict["init_contrib_colorscale"],
self._style_dict,
+ height=height,
+ width=width,
)
# Plot 2 : Show distribution of variability
@@ -1665,12 +1684,23 @@ def stability_plot(
auto_open,
self._style_dict["init_contrib_colorscale"],
self._style_dict,
+ height=height,
+ width=width,
)
return fig
def compacity_plot(
- self, selection=None, max_points=2000, force=False, approx=0.9, nb_features=5, file_name=None, auto_open=False
+ self,
+ selection=None,
+ max_points=2000,
+ force=False,
+ approx=0.9,
+ nb_features=5,
+ file_name=None,
+ auto_open=False,
+ height=600,
+ width=900,
):
"""
The Compacity_plot has the main objective of determining if a small subset of features
@@ -1705,6 +1735,10 @@ def compacity_plot(
Specify the save path of html files. If it is not provided, no file will be saved, by default None
auto_open: bool, optional
open automatically the plot, by default False
+ height: int, optional
+ height of the plot, by default 600
+ width: int, optional
+ width of the plot, by default 900
"""
# Sampling
if selection is None:
@@ -1735,7 +1769,15 @@ def compacity_plot(
# Plot generation
fig = plot_compacity(
- features_needed, distance_reached, self._style_dict, approx, nb_features, file_name, auto_open
+ features_needed,
+ distance_reached,
+ self._style_dict,
+ approx,
+ nb_features,
+ file_name,
+ auto_open,
+ height,
+ width,
)
return fig
diff --git a/shapash/plots/plot_compacity.py b/shapash/plots/plot_compacity.py
index f5e3a9d2..7ad34f91 100644
--- a/shapash/plots/plot_compacity.py
+++ b/shapash/plots/plot_compacity.py
@@ -6,7 +6,15 @@
def plot_compacity(
- features_needed, distance_reached, style_dict, approx=0.9, nb_features=5, file_name=None, auto_open=False
+ features_needed,
+ distance_reached,
+ style_dict,
+ approx=0.9,
+ nb_features=5,
+ file_name=None,
+ auto_open=False,
+ height=600,
+ width=900,
):
"""
The Compacity_plot has the main objective of determining if a small subset of features \
@@ -39,6 +47,10 @@ def plot_compacity(
Specify the save path of html files. If it is not provided, no file will be saved, by default None
auto_open: bool, optional
open automatically the plot, by default False
+ height: int, optional
+ height of the plot, by default 600
+ width: int, optional
+ width of the plot, by default 900
"""
# Make plots
@@ -102,19 +114,19 @@ def plot_compacity(
title = style_dict["dict_yaxis"] | {"text": "Cumulative distribution over
dataset's instances (%)"}
fig.update_yaxes(title=title, row=1, col=2)
- title = "Compacity of explanations:"
- title += (
- "
How many variables are enough to produce accurate explanations?"
- )
+ title = "
Compacity of explanations:"
+ title += "
How many variables are enough to produce accurate explanations?"
dict_t = style_dict["dict_title_stability"] | {"text": title, "y": adjust_title_height()}
fig.update_layout(
template="none",
+ autosize=False,
+ height=height,
+ width=width,
title=dict_t,
- title_y=0.8,
hovermode="closest",
- margin={"t": 150},
showlegend=False,
+ margin={"l": 150, "r": 20, "t": 150, "b": 70},
)
if file_name is not None:
diff --git a/shapash/plots/plot_stability.py b/shapash/plots/plot_stability.py
index 16dac1ff..0d482135 100644
--- a/shapash/plots/plot_stability.py
+++ b/shapash/plots/plot_stability.py
@@ -7,7 +7,17 @@
def plot_stability_distribution(
- variability, plot_type, mean_amplitude, dataset, column_names, file_name, auto_open, init_colorscale, style_dict
+ variability,
+ plot_type,
+ mean_amplitude,
+ dataset,
+ column_names,
+ file_name,
+ auto_open,
+ init_colorscale,
+ style_dict,
+ height="auto",
+ width=900,
):
"""
Generates and displays a stability distribution plot for feature variability using either a boxplot or violin plot.
@@ -43,6 +53,10 @@ def plot_stability_distribution(
style_dict : dict
A dictionary specifying the various style options such as font size, color, and other aesthetic parameters
for the plot.
+ height: int or 'auto'
+ Plotly figure - layout height
+ width: int
+ Plotly figure - layout width
Returns
-------
@@ -70,7 +84,10 @@ def plot_stability_distribution(
color_list = mean_amplitude_normalized.tolist()
color_list.sort()
color_list = [next(pair[1] for pair in col_scale if x <= pair[0]) for x in color_list]
- height_value = max(500, 40 * dataset.shape[1] if dataset.shape[1] < 100 else 13 * dataset.shape[1])
+ if height == "auto":
+ height_value = max(500, 40 * dataset.shape[1] if dataset.shape[1] < 100 else 13 * dataset.shape[1])
+ else:
+ height_value = height
xaxis_title = "Normalized local contribution value variability"
yaxis_title = ""
@@ -134,12 +151,15 @@ def plot_stability_distribution(
file_name=file_name,
auto_open=auto_open,
height=height_value,
+ width=width,
)
return fig
-def _update_stability_fig(fig, x_barlen, y_bar, style_dict, xaxis_title, yaxis_title, file_name, auto_open, height=500):
+def _update_stability_fig(
+ fig, x_barlen, y_bar, style_dict, xaxis_title, yaxis_title, file_name, auto_open, height=500, width=900
+):
"""
Function used for the `plot_stability_distribution` and `plot_amplitude_vs_stability`
to update the layout of the plotly figure.
@@ -169,8 +189,8 @@ def _update_stability_fig(fig, x_barlen, y_bar, style_dict, xaxis_title, yaxis_t
-------
go.Figure
"""
- title = "Importance & Local Stability of explanations:"
- title += "
How similar are explanations for closeby neighbours?"
+ title = "
Importance & Local Stability of explanations:"
+ title += "
How similar are explanations for closeby neighbours?"
dict_t = style_dict["dict_title_stability"] | {"text": title, "y": adjust_title_height(height)}
dict_xaxis = style_dict["dict_xaxis"] | {"text": xaxis_title}
@@ -200,12 +220,15 @@ def _update_stability_fig(fig, x_barlen, y_bar, style_dict, xaxis_title, yaxis_t
fig.update_layout(
template="none",
+ autosize=False,
title=dict_t,
xaxis_title=dict_xaxis,
yaxis_title=dict_yaxis,
coloraxis_showscale=False,
hovermode="closest",
height=height,
+ width=width,
+ margin={"l": 150, "r": 20, "t": 95, "b": 70},
)
fig.update_yaxes(automargin=True)
@@ -216,7 +239,15 @@ def _update_stability_fig(fig, x_barlen, y_bar, style_dict, xaxis_title, yaxis_t
def plot_amplitude_vs_stability(
- mean_variability, mean_amplitude, column_names, file_name, auto_open, col_scale, style_dict
+ mean_variability,
+ mean_amplitude,
+ column_names,
+ file_name,
+ auto_open,
+ col_scale,
+ style_dict,
+ height="auto",
+ width=900,
):
"""
Generates and displays a scatter plot showing the relationship between feature variability and importance.
@@ -247,6 +278,10 @@ def plot_amplitude_vs_stability(
style_dict : dict
A dictionary specifying various style options such as font size, axis formatting, and other aesthetic
properties for the plot.
+ height: int
+ Plotly figure - layout height
+ width: int
+ Plotly figure - layout width
Returns
-------
@@ -262,6 +297,8 @@ def plot_amplitude_vs_stability(
- The function can optionally save the plot as an HTML file for further exploration.
"""
+ if height == "auto":
+ height = 500
xaxis_title = (
"Variability of the Normalized Local Contribution Values"
+ "
(standard deviation / mean)"
@@ -301,5 +338,7 @@ def plot_amplitude_vs_stability(
yaxis_title=yaxis_title,
file_name=file_name,
auto_open=auto_open,
+ height=height,
+ width=width,
)
return fig
diff --git a/tutorial/explainability_quality/tuto-quality01-Builing-confidence-explainability.ipynb b/tutorial/explainability_quality/tuto-quality01-Builing-confidence-explainability.ipynb
index 95cda81b..1dad7fae 100644
--- a/tutorial/explainability_quality/tuto-quality01-Builing-confidence-explainability.ipynb
+++ b/tutorial/explainability_quality/tuto-quality01-Builing-confidence-explainability.ipynb
@@ -28,7 +28,6 @@
"outputs": [],
"source": [
"import pandas as pd\n",
- "from category_encoders import OrdinalEncoder\n",
"from sklearn.ensemble import ExtraTreesClassifier\n",
"from sklearn.model_selection import train_test_split"
]
@@ -207,7 +206,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "Load Titanic data"
+ "Encode Titanic data"
]
},
{
@@ -241,11 +240,13 @@
"metadata": {},
"outputs": [],
"source": [
+ "n=200\n",
+ "\n",
"Xtrain, Xtest, ytrain, ytest = train_test_split(X_df, y_df, train_size=0.75, random_state=7)\n",
"\n",
"# Subsample\n",
- "Xtrain = Xtrain[:50].reset_index(drop=True)\n",
- "ytrain = ytrain[:50].reset_index(drop=True)"
+ "Xtrain = Xtrain[:n].reset_index(drop=True)\n",
+ "ytrain = ytrain[:n].reset_index(drop=True)"
]
},
{
@@ -254,7 +255,7 @@
"metadata": {},
"outputs": [],
"source": [
- "clf = ExtraTreesClassifier(n_estimators=200).fit(Xtrain, ytrain)"
+ "clf = ExtraTreesClassifier(n_estimators=200).fit(Xtrain, ytrain.iloc[:,0])"
]
},
{
@@ -272,248 +273,153 @@
"cell_type": "markdown",
"metadata": {},
"source": [
- "#### First, we need to instantiate and compile the Consistency object"
+ "#### Use pre-computed contributions\n",
+ "\n",
+ "First calculate contributions beforehand and use those ones in the metric using the _contributions_ argument.\n",
+ "\n",
+ "The provided contributions must be given in a dictionary format, where the key is the method name, and the value is a pandas DataFrame with the contributions.\n",
+ "\n",
+ "Let's for example calculate contributions separately:"
]
},
{
- "cell_type": "code",
- "execution_count": 7,
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [],
"source": [
- "from shapash.explainer.consistency import Consistency"
+ "#### Then, we need to instantiate and compile the Consistency object"
]
},
{
"cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "tags": []
- },
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "WARNING:root:No train set passed. We recommend to pass the x_train parameter in order to avoid errors.\n",
- " 27%|██▋ | 54/200 [00:00<00:00, 266.79it/s]"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Backend: Shap TreeExplainer\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "100%|██████████| 200/200 [00:00<00:00, 277.31it/s]\n",
- " 0%| | 0/8 [00:00, ?it/s]"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Backend: ACV\n"
- ]
- },
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- " 38%|███▊ | 3/8 [00:05<00:09, 1.95s/it]\n",
- "WARNING:root:No train set passed. We recommend to pass the x_train parameter in order to avoid errors.\n"
- ]
- },
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Backend: LIME\n"
- ]
- }
- ],
- "source": [
- "cns = Consistency()\n",
- "cns.compile(x=Xtrain, # Dataset for which we need explanations\n",
- " model=clf, # Model to explain\n",
- " preprocessing=encoder, # Optional\n",
- " )"
- ]
- },
- {
- "cell_type": "markdown",
+ "execution_count": 7,
"metadata": {},
+ "outputs": [],
"source": [
- "#### We can now display the consistency plot:"
+ "from shapash.explainer.consistency import Consistency\n",
+ "import shap"
]
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
- "image/png": "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1fEceOCB8Q5J9nFK6CISk0AgwE8//ZSr3fv77xdSr1490tPT6NDhWIYNG0rjxo1yqqFTU8uxbdu/cY686O3YsYOtW7dSunQpatSozkkn9eCttyZSvXq1eIcm+zAldBGJ6O+//96t13mZMmVzep2PGHE7rVq1TPiq88JYs2YNVapUoWfPHtSuXYsmTZrgeVmcfPLJ8Q5N9mFK6CLC9u3bWbBgQa7S98qVq3KqzjMzM3jiiceoXbt2vEMtEf7+ez21a9ciM3MwgwcPYf78OaSk6KcxJL6U0EWKyUcfTeW6664nOzubzMxMrrnmqlyfjx07nuHDh1OrlkuSF110AUOGZDJ37jyGDh3Gxo0bSUkpxXXXXUPfvn2KLK5AIMCKFStyJe8FC76nbt26pKen0b59O6688goaN25U4Eek7isaN27E66+/Rs2aNTjggAOYPv0LOnfuFO+wZB+no1WkGGRnZ3PVVVczadI7HHzwwXTo0JkePbrTuHGjXOP16dOb//u/h3INK1duf5577lnq16/PypUrad++I926deWggw4qVCzr16/PVXWeleVRunTpnKrz2267lVatWqpTVwGkpKTk3COfmTmY0aPHKKFL3CmhixSDrKwsDj/8cOrVqwdA3759mDz5vd0SeiRHHnlkzv+1atWiWrVqrF27NqaEvmPHjt2qzn///Q9atDiatLQ0Bg0ayKOPPszBBx+sp6cVkTPPPIM777ybv//+m0qVKsU7HNmHKaGLFIM//ljJIYcckvP+4INrk5WVtdt4b7/9Ll9++TVHHlmf++67J9c04C4MduzYzuGHH77btJGqzufPX8Bhhx1GenoaxxzTlssvv4wmTRqr6rwYValSheOP78brr7/BhRdeEO9wZB+mo1wkTrp3P4kzzuhLamoqL7zwIueffxHvvz855/OVK1dx3nkXMHLkM6SkpLB+/Xo877uQXuffYYzJqTq/5ZabadWqJRUqVIjjWu2bMjMzGD78FiV0iSsldJFiULt2LX777bec97///kdO57egKlWq5Pw/ZEgmw4ffkvN+3bp1dO/eg/bt2/P88y9y0UWX8Ntvv3P00c1JS0tjwID+PPnkU1SvXkVV5yVA586dWL9+PbNnz6FlyxbxDkf2UUroIsXAWsuPPy5nxYoV1K5dmwkTJvLSSy/kGmflylXUqlWTQCDAqFGjqVatKtdffyOzZs1i1qwsqlWrSnZ2Nm3atObSSy+hSZPGlClTJmf6ZH1oSyJKSUlh8OCBjBkzRgld4kYJXaQYlC5dmoceeoBevU4nOzubjIzBNGnSmDvuuJOGDRtStWpV7r33PubOncfWrVsxxtCu3TFUrVqFY49tj+d9R/XqNZgzZy5z5swlLS0tVzKXkmfQoIG0a3csd999F/vvv3+8w5F9kAkEAvGOISGkpaUFpk//NN5hRJUIJbZEiBGKLs6dO3eyYMH3IbeMZfHrr7/RvHkz0tLSSE93f4ceemiBq84TYVvuazH26nU6/fufxVlnnVkk8wu1r23L4lK+fAUvEAikxTuO4qCEHoUx5gLgAoA6derY5cuXxzmi6FJSUti1a1e8w4gqEWKEwsUZCAT49ddf+fbbb5k5cybffvstc+bMoU6dOrRu3ZrWrVuTnp5Os2bNiqS0nQjbcl+LccKECTzzzDNMmzatSOYXal/blsWldOnSSuj7OpXQi0YixAixxblhwwa++252rt/53rVrV06pOy0tDWtbUbFixbjFGG/7Wozbtm2jQYPGfPrptIi3Gu6JfW1bFpdkLqGrDV0kBjt37uT77xfmqjr/+edfcqrO+/Xry/3330udOnXU63wflpqayplnnsHYseO49dZb8p9ApAgpoYuECVadf/XVFznJe+7ceRx8cG3S0tJIS7NceOH5HHXUUeqoJrvJzMzgtNN6M3z4TTk/IyuyNyihyz5v48aNu1WdZ2dnk5ZmSU9P4/rrr8PaVoV+lrrsW5o2bcLBB9dm6tRpnHTSifEOR/YhSuiyT9m5cyeLFi3OSdyzZmWxYsUKmjU7irS0NPr06c29995NgwaN2b59S7zDlQSVmZnB6NFjlNBlr1JCl6T2+++/53rW+Zw5c6lVq2bOLWPnnXcORx11FGXLls01ndrBZU/06dOb4cNvYfXqP6lRo3q8w5F9hBJ6HFSvXos//1zJypUrueaa6xg/fmy8Q0oKmzZt2q3qfMeO7TnJ+5prriYtzeoXsaTYVahQgZ49e/DKK68ydOgV8Q5H9hFK6HFUq1YtJfNCys7O3q3q/KeffuKoo5qSlpbG6aefxt1330ndunVV2pa4yMzM4LLLLufKKy/XPih7hRJ6HP3888/06XMGWVkzGTt2PJMnT2bz5n/58ccfufLKy9m+fQevvPIqqallefPNCVSuXJnly5czbNjVrF27jnLl9ueJJx6nYcMG8V6VYvfHH3+QleXllL5nz55DjRrVc0rf55wzhGbNmu1WdS4SL8cc05ZAIMDMmd/Stm2beIcj+wAl9BJk4cKFfP31l2zduo3mzVtwxx238803X3LddTfw8suvcNlll3LZZVfy2GMPU79+fWbNmsXQoVfl+snNZLB58+bdqs63bduKta7X+bBhQ0lLs1SuXDneoYrkyRjD4MGDGT16jBK67BVK6CVIx44dOfDAAznwwAOpUKEC3bufDEDTpk1ZsGABmzZtYubMmQwalJkzzfbt2+IVbpHIzs5m8eIluarOly9fTtOmTUhLS6NXr1O5884R1KtXT9WWknAGDOiPtencf/+9HHjggfEOR5KcEnoJkpr6X3VxSkoKZcum5vyfnb2TXbt2UbFiRWbM+CpeIe6xlStX5jywZdasLGbPnk316tVyqs6HDMmgWbNmpKamxjtUkT1Ws2YNOnQ4lokT32TIkMz8JxDZA0roCaRChQrUrXsYb775Fr17n04gEGD+/AU0b94s3qFFtHnzZubMmZur6vzff//F2lakp6cxdOgVpKVZqlSpEu9QRYpNZuZg7r//QSV0KXZK6AnmxRef58orh3HffQ+wc+cO+vbtUyIS+q5du1i8eEmu5P3jjz/SpElj0tPT6NmzB7fffiuNGx+lB7bIPuX444/n8suHsmjRYho3bhTvcCSJ6dfWYrSv/dramjVrGTVqFNdee03Ez1etWp2r3Xv27NlUrVol1298N2/efLeq80T4NSZIjDgVY9HYGzHeeuvtbNu2jXvvvbvQ89C2LBr6tTXZp8yePZv+/QcxaNAAAP7999/dqs43bdqY0+v8iisuIy0tjapVVXUuEklGxiC6dj2BESNu062VUmyU0CWX8eNf5rrrbqBfv36sWbOWdu06sGzZMho3bkR6ehrdu5/MLbcMp379+up1LhKjI444gkaNGjJlyvucdlqveIcjSUoJXXKMGHEH9933AAccUJ7ly3/k+OO7MXBgf5o3b85+++0X7/BEElpGhrsnXQldiktKvAOQojV5/mq6PjqTpiOm0/XRmUyevzrmaYcOvZKRI59l8OBBrFy5invvvZ9Jk95TMhcpAqed1ousrCx+++23eIciSUol9CTyz5Yd3DJ5GVt37AJg5T/buGXyMgB6NquR7/QVKlRg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L08//SQfffQ+P/74I6+//gadO3fhpZdGsXHjRgCWLFnK+vXradPmv6S9fft2zjprIAMGnMXpp58WpzWQWBljyMjIYPToMfEORUoIJXSRJFK6dGkeeugBevU6nT59+nHJJRfx449LOeywwxgzZiyNGjXlwgsv5uGHH6Fv394YY3KmnTjxTb766ivGjXs557a2uXPnxXFtJD8DBvRn0qTJbNiwId6hSAmg29ZipNvWikYixAiJEWdhYly9+k9eeeXVnLbXwYMHM3DgAGrUqF5iYtzbEiFGyDvOAQMG0a1bV8455+w4RJVbImxL3bYmIkmhRo3qDB16BZ43i6efdveet2qVxllnDeD999/X08cSUEbGYFW7C6CELrJPMsbQtm0bnn76SRYv/p6TTz6JBx54iEaNmnLrrbfrxz8SyPHHd+OPP1by/fcL4x2KxJkSusg+7sADDyQzM4NPPpnGpEnvsH37drp2PYGTTurOyy+/wr//luwq1H1dqVKlGDRogErpooQuIv9p3LgR99xzF0uXLuLiiy9iwoSJNGzYmCuvHMZ3332ne55LqIyMwbz22uts27Yt3qFIHCmhi8huypYtS69ep/LmmxOYMeNrDj64NhkZQ2jbtj1PPfU069ati3eIEqJevXo0adKE996bEu9QJI6U0EUkqoMPPpjrrruWefPmcP/995KV5dGsWQsyM4fw8cef5DxHXuIrM1Od4/Z1SugiEpOUlBQ6derIiy8+z/ffz6N9+/bcfPOtNG3anLvvvodff/013iHu03r1OpXvvvuOX375Jd6hSJwooYtIgVWqVIkLLjifr7/+gldeGc/atWtp374Dp556GhMnvqm23DjYf//96devL+PGjY93KBInerBMFMaYC4ALAOrUqWOXL18e54iiS0lJKfHVn4kQIyRGnCUtxi1btvD222/z4osvMn/+fAYMGMC5555L06ZN4x1aVCVtO+Ylljhnz55N3759WbZsWVx+WCcRtmXp0qWT9sEySugx0pPiikYixAiJEWdJjvGnn35i7NhxjB//CjVqVCczM4N+/fpSoUKFeIe2m5K8HUPFGme7dh24447b6dq1y16IKrdE2JZ6UpyISAHUq1ePW265mR9//JGbbvofn3zyKY0aNeX88y/kyy+/0u1vxSgzczBjxqhz3L5ICV1Eik2pUqU48cQTGD9+LHPnzqZZs2YMHTqMFi1a8dBDD7Nq1ep4h5h0zjijH1OnfqxbC/dBSugisldUq1aVK664jFmzZvLcc8+yfPly0tLSOeOMs3jvvSl6jnwRqVSpEieeeAKvvfZ6vEORvUwJXUT2KmMMrVu35sknH2fx4oX07NmThx9+hIYNm3DzzbeybNmyeIeY8DIzMxg9eqyaNvYxSugiEjcHHHAAGRmDmDbtI6ZMmcyuXbs44YSTOeGEkxg3bjybN2+Od4gJqWPHDmzevInZs2fHOxTZi5TQRaREaNiwAXfddQdLly7i8ssv4+2336Fhw8ZcfvmVZGVlqbRZACkpKWRkDGbUKHWO25cooYtIiVKmTBlOOaUnEya8zqxZM6lTpw5nn30urVsfwxNPPMnatersFYtBgwby5ptv6tfy9iFK6CJSYtWqVYtrr72aefPm8H//9yBz5szl6KNbMnhwJlOnTiM7OzveIZZYtWvXpnXr1rz11tvxDkX2EiV0ESnxjDF06HAszz8/koUL59OpU0duv/0OmjRpxp133sXPP/8c7xBLpMzMDMaMGRvvMGQvUUIXkYRSsWJFzjvvXL788nPeeOM11q9fT4cOnejZsxdvvDGBrVu3xjvEEuPkk09iyZKl/PDDD/EORfYCJXQRSVjNmzfjwQcfYOnSxf7Ph46lYcPGXHPNtcybNz/e4cVd2bJl6d//LMaMGRfvUGQvUEIXkYS333770a9fXyZPfofp0z/joIMOol+/Mzn22E4899zzrF+/Pt4hxk1mZgbjx7+sB/fsA5TQRSSpHHbYYQwffhMLF87n1ltvZvr0L2jSpBnnnns+06d/sc/d/taoUUPq1j2Mjz6aGu9QpJgpoYtIUipVqhTHH9+NsWNHM2/eHFq2bMHVV19L8+YteOCBh1i5cmW8Q9xrMjIyGDVqdLzDkGKmhC4iSa9q1SpcdtmlfPvtN7z00gv88ssvpKe3oW/fM3jnnXfYsWNHvEMsVn36nM5XX33NypWr4h2KFCMldBHZZxhjSEtL4/HHH2XJkkWcdlovHn74YRo0aMxNN93MkiVL4x1isTjggAPo1etUXn75lXiHIsVICV1E9knly5dn0KCBfPbZZ3z00fukpKRw8sk96NbtBMaMGcemTZviHWKRyswczNix+sGWZKaELiL7vCOPPJI77ridJUsWMmzYUCZPnkyjRk249NLL+fbbb5MiCbZu3ZpSpUrx9dffxDsUKSZK6CIivjJlytCjR3def/1VZs36lsMPP5zzz7+Q9PQ2PPbYE6xZszbeIRaaMYaMjAxGj9YPtiQrJXQRkQhq1arJ1VcPY86c73j00UdYsGABLVq0YuDAwXz44UcJ+Rz5/v3P4r33prBhw4Z4hyLFQAldRCQKYwzt27dj5MhnWLRoAV27duHuu++hceOjGDHiDlasWBHvEGNWvXo1OnfuxIQJE+MdihQDJXQRkRhVqFCBc845m88//5Q335zAxo2b6NTpOLp3P4XXXns9IZ4j734nXfekJyMldBGRQjjqqKY88MB9LF26mHPPPZvx41+mQYNGXHXV1cyZMzfe4eWpW7eurFq1mgULvo93KFLElNBFRPZAamoqffr05t133+bLL6dTtWpV+vcfSLt2HXj22ZH8/fff8Q4xl1KlSjFo0AB1jktCSugiIkWkTp06/O9/N/L99/O4447b+frrr2natDlnn30un332Obt27Yp3iAAMHjyI119/nW3btsU7FClCSugiIkUsJSWFrl27MHr0KObPn0N6ehrXX38jzZu34L777uf333+Pa3z16tWjadOjmDz5vbjGIUVLCV1EpBhVqVKFSy65mBkzvmLMmFH88cdK2rQ5ht69+/LOO++yffv2uMQ1ZIi7J33Xrl089NDDcYlBipYSuojIXmCMoVWrVjz66MMsXbqYvn378PTTz9CgQWNuvPEmFi9estdi+euvv+jRoztz5sxh9uw5PP74E3tt2VJ8lNBFRPaycuXKMWBAfz74YAoff/wRZcuWpWfPU+nSpRujR49h48aNxbr8ESPu4PzzL+T0009j9Ogx1KhRo1iXJ3uHErqISBwdccQR3H77rSxe/D3XXns177//AY0aNeXiiy9lxoyZ+T5H/swz+9O+fUfS0lrz4osvAfDRR1Np164Dbdq0o3v3U9i1axeNGx/F+vXrAbjvvnuZNu1jZsyYydtvv0P16tWLezVlLygd7wBERARKly7NySefzMknn8yqVat5+eVXuOiii0lJSSEjI4Ozzz6HihUP2G26p59+ksqVK7NlyxY6dOhMjx49uOyyK/joo/epW7cuf/31FykpKfTo0Z13351MRsYg5s2bR3p6Go0aNeTZZ58DEv/HZ0QldBGREqdmzRpcddVQZs/2eOKJx1m0aBFNmjShf/+BfPDBB+zcuTNn3KeffoamTZvTseNx/P7777z00ku0b9+OunXrAlC5cmUA+vbtw8SJ7pGvb7wxkb59+/Dggw9w1llnUr9+/b2+jlL0VEIXESmhjDG0a3cM7dodw7ZtO3n55XHce+/9XH75UAYOHECjRo349NPPSE9PA6By5Uo0b96cJUuW7javNm1as3z5ctasWcvkye9x/fXXYozh+edH7u3VkmKiErqISAKoUKECZ589hM8++4R33nmLLVu2MGzYVSxZspQuXY5j2bIf+OabGWzZsoWvvvo650dj/vrrL8BdHJxyyinccMONNGzYgCpVqsRxbaQ4KKGLiCSYJk0ac99997B06SIOOeRgrrnmWhYsWIAxhtdfn8Djjz9K//6DaNOmHRkZZ+dM17dvb1599TX69Okdx+iluKjKXUQkQa1cuYoqVaqyY8cOVq5cyYYNG/n442mMGvUC33zz5W7jt2rVis2b9VvoyUoJXUQkQbnS+VVUq1aNGjVqULlyJVJSVPG6r1JCFxFJUOXKlaNz507xDkNKCF3KiYiIJAGV0KMwxlwAXADuZxFTU8vFOaLoUlJSFGMRSYQ4FWPRSIQYYe/E+c+WHazeuJ0d2bsoUyqFGgeWpeL+ZWKePlG2ZbJSQo8iEAiMBEYCpKWlBbZt+zfOEUWXmloOxVg0EiFOxVg0EiFGKP44J89fzS2Tl7F1x3+/2b5fmRRG9DySns1ie9Z7omzLZKUqdxER4eFPVuRK5gBbd+zi4U9WxCcgKTAldBERYdU/2wo0XEoeJXQREaFmxdQCDZeSRwldREQY1qUu+5XJnRL2K5PCsC514xOQFJg6xYmISE7Ht4c/WcGqf7ZRs2Iqw7rUjblDnMSfErqIiAAuqSuBJy5VuYuIiCQBJXQREZEkoIQuIiKSBJTQRUREkoASuoiISBJQQhcREUkCSugiIiJJQAldREQkCSihi4iIJAEldBERkSSghC4iIpIElNBFRESSgBK6iIhIElBCFxERSQJK6CIiIklACV1ERCQJKKGLiIgkASV0ERGRJKCELiIikgSU0EVERJKAErqIiEgSUEIXERFJAkroIiIiSUAJXUREJAkooYuIiCQBJXQREZEkoIQuIiKSBJTQRUREkoASuoiISBJQQhcREUkCSugiIiJJQAldREQkCSihi4iIJIHS8Q6gJDPGXABcAFCnTh1SU8vFOaLoUlJSFGMRSYQ4FWPRSIQYITHiTIQYk5kSehSBQGAkMBIgLS0tsG3bv3GOKLrU1HIoxqKRCHEqxqKRCDFCYsSZCDEmM1W5i4iIJAEldBERkSSghC4iIpIElNBFRESSgBK6iIhIElBCFxERSQJK6CIiIklACV1ERCQJKKGLiIgkASV0ERGRJKCELiIikgSU0EVERJKAErqIiEgSUEIXERFJAkroIiIiSUAJXUREJAkooYuIiCQBJXQREZEkoIQuIiKSBJTQRUREkoASuoiISBJQQhcREUkCSugiIiJJQAldREQkCSihi4iIJAEldBERkSSghC4iIpIElNBFRESSgBK6iIhIElBCFxERSQJK6CIiIklACV1ERCQJKKGLiIgkASV0ERGRJKCELiIikgSU0EVERJKAErqIiEgSUEIXERFJAkroIiIiSaB0vAMoyYwxFwAXANSpU4fU1HJxjii6lJQUxVhEEiFOxVg0EiFGSIw4EyHGZKaEHkUgEBgJjARIS0sLbNv2b5wjii41tRyKsWgkQpyKsWgkQoyQGHEmQozJTFXuIiIiSUAJXUREJAkooYuIiCQBJXQREZEkoIQuIiKSBJTQRUREkoASuoiISBJQQhcREUkCSugiIiJJQAldREQkCSihi4iIJAEldBERkSSghC4iIpIElNBFRESSgBK6iIhIElBCFxERSQJK6CIiIklACV1ERCQJKKGLiIgkASV0ERGRJKCELiIikgSU0EVERJKACQQC8Y4hIRhjNgJL4h1HPqoCa+MdRD4SIUZIjDgVY9FIhBghMeJMhBgbBgKBA+MdRHEoHe8AEsiSQCCQFu8gojHGZCnGopEIcSrGopEIMUJixJkoMcY7huKiKncREZEkoIQuIiKSBJTQYzcy3gHEQDEWnUSIUzEWjUSIERIjTsUYR+oUJyIikgRUQhcREUkCSugiIiJJQAldREQkCSihi4iIJAEldBERkSTw/8ODhEnTtKUiAAAAAElFTkSuQmCC",
+ "application/vnd.jupyter.widget-view+json": {
+ "model_id": "c5bf988ead634b97ba9f4fa597832722",
+ "version_major": 2,
+ "version_minor": 0
+ },
"text/plain": [
- "