diff --git a/docs/README.md b/docs/README.md
index b225dde73..0f8b9e3fc 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,6 +1,6 @@
# OpenML AutoML Benchmark
-The OpenML AutoML Benchmark provides a framework for evaluating and comparing open-source AutoML systems. The system is *extensible* because you can [add your own](https://github.com/openml/automlbenchmark/blob/master/docs/extending.md) AutoML frameworks and datasets. For a thorough explanation of the benchmark, and evaluation of results, you can read our [paper](https://openml.github.io/automlbenchmark/paper.html) which was accepted at the [2019 ICML AutoML Workshop](https://sites.google.com/view/automl2019icml/).
+The OpenML AutoML Benchmark provides a framework for evaluating and comparing open-source AutoML systems. The system is *extensible* because you can [add your own](https://github.com/openml/automlbenchmark/blob/master/docs/extending.md) AutoML frameworks and datasets. For a thorough explanation of the benchmark, and evaluation of results, refer to our preprint [AMLB: an AutoML Benchmark](https://arxiv.org/pdf/2207.12560.pdf).
_**NOTE:**_ _This benchmarking framework currently features binary and multiclass classification; extending to regression is a work in progress. Please file an issue with any concerns/questions._
@@ -28,7 +28,7 @@ This toolkit aims to address these problems by setting up standardized environme
Documentation:
### Features:
-* Curated suites of [benchmarking datasets](https://openml.github.io/automlbenchmark/benchmark_datasets.html) from [OpenML](https://www.openml.org/s/218/data).
+* Curated suites of [benchmarking datasets](https://github.com/openml/automlbenchmark/blob/master/docs/benchmark_datasets.md) from [OpenML](https://www.openml.org/s/218/data).
* Includes code to benchmark a number of [popular AutoML systems](https://openml.github.io/automlbenchmark/automl_overview.html) on regression and classification tasks.
* [New AutoML systems can be added](./HOWTO.md#add-an-automl-framework)
* Experiments can be run in Docker or Singularity containers
diff --git a/reports/CleanResults.ipynb b/reports/CleanResults.ipynb
new file mode 100644
index 000000000..c957be9fc
--- /dev/null
+++ b/reports/CleanResults.ipynb
@@ -0,0 +1,298 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "d3d4b7a3",
+ "metadata": {},
+ "source": [
+ "Given the raw result files generate a final cleaned version of results:\n",
+ " - Only the latest results; \n",
+ " - not any jobs which failed because of the benchmark framework and were redone, or\n",
+ " - frameworks which were later excluded because issues were identified with the integration itself.\n",
+ " - Transfer `RandomForest` results from 1 hour to 4 hour if 1 hour jobs ran to completion.\n",
+ " - Impute `TunedRandomForest` results with random forest results of the same budget.\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "7954b9cd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "def filter_results(results):\n",
+ " results = results.sort_values(by=\"utc\", na_position=\"first\")\n",
+ " # There was a mistake in the old KDDCup09-Upselling task, so it was replaced with a new task.\n",
+ " results = results[results[\"id\"] != \"openml.org/t/360947\"]\n",
+ " # Use only the latest results (earlier failures don't count, only justified reruns are done)\n",
+ " results = results.drop_duplicates([\"framework\", \"task\", \"fold\"], keep=\"last\")\n",
+ " results = results[~results[\"framework\"].isin([\"autoxgboost\", \"GAMA\", \"MLPlanWEKA\"])]\n",
+ " return results\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "b9dfccc2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Pick the results to\n",
+ "ttype = \"regression\"\n",
+ "ttype = \"classification\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "550aaf17",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "one = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/{}_1h8c.csv\".format(ttype))\n",
+ "one = filter_results(one)\n",
+ "four = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/{}_4h8c.csv\".format(ttype))\n",
+ "four = filter_results(four)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a7fc8cc4",
+ "metadata": {},
+ "source": [
+ "\n",
+ "First a sanity check that 1H RF has results for every job (even if it is not a full forest)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "a229de00",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "rf = one[one.framework == \"RandomForest\"]\n",
+ "assert len(rf) == (330 if ttype == \"regression\" else 710)\n",
+ "assert rf[\"info\"].isna().all()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "05f43033",
+ "metadata": {},
+ "source": [
+ "Impute one hour Tuned Random Forest with Random Forest:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "f1a98a6e",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Original dataset with 8519 entries of which 272 had missing results.\n",
+ "The new dataset with 8519 entries of which 252 are missing results because 20 results were imputed.\n"
+ ]
+ }
+ ],
+ "source": [
+ "def impute_trf_with_rf(results):\n",
+ " rf = results[results.framework == \"RandomForest\"]\n",
+ " trf = results[results.framework == \"TunedRandomForest\"]\n",
+ " missing_results = trf[~trf[\"info\"].isna()][[\"task\", \"fold\"]].itertuples(index=False, name=None)\n",
+ "\n",
+ " imputation_values = rf.set_index([\"task\", \"fold\"]).loc[missing_results].reset_index().copy()\n",
+ " imputation_values[\"framework\"] = \"TunedRandomForest\"\n",
+ "\n",
+ " trf_success = trf[trf[\"info\"].isna()]\n",
+ " trf_imputed = pd.concat([trf_success, imputation_values])\n",
+ "\n",
+ " no_trf = results[results.framework != \"TunedRandomForest\"]\n",
+ " imputed = pd.concat([no_trf, trf_imputed])\n",
+ " print(f\"Original dataset with {len(results)} entries of which {sum(~results['info'].isna())} had missing results.\")\n",
+ " print(f\"The new dataset with {len(imputed)} entries of which {sum(~imputed['info'].isna())} are missing results because {len(imputation_values)} results were imputed.\")\n",
+ " return imputed\n",
+ "\n",
+ "one_imputed = impute_trf_with_rf(one) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "79cacc03",
+ "metadata": {},
+ "source": [
+ "Impute four hour Random Forest with complete one hour Random Forest:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "7bde3af8",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Original dataset had 8570 entries of which 50 were 4H RF.\n",
+ "The new dataset has 9230 entries of which 710 are 4H RF.\n"
+ ]
+ }
+ ],
+ "source": [
+ "rf_one = one[one.framework == \"RandomForest\"]\n",
+ "keep = rf_one[(rf_one[\"models_count\"] == 2000.0) & (~rf_one[\"result\"].isna())].copy()\n",
+ "keep[\"constraint\"] = \"4h8c_gp3\"\n",
+ "four_added = pd.concat([four, keep])\n",
+ "print(f\"Original dataset had {len(four):6d} entries of which {len(four[four.framework == 'RandomForest']):6d} were 4H RF.\")\n",
+ "print(f\"The new dataset has {len(four_added):6d} entries of which {len(four_added[four_added.framework == 'RandomForest']):6d} are 4H RF.\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bf74eb01",
+ "metadata": {},
+ "source": [
+ "Above file is useful to avoid running 4H RF experiments which would grow the same (sized) forests as the 1H budget ones. This result file was also used to `--resume` from to automatically find the remaining 4H RF experiments."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9ceb0e57",
+ "metadata": {},
+ "source": [
+ "After completing all RF results, we can use them to impute the `TunedRandomForest` where it otherwise failed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "b5fcdcf6",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Original dataset with 9230 entries of which 451 had missing results.\n",
+ "The new dataset with 9230 entries of which 427 are missing results because 24 results were imputed.\n"
+ ]
+ }
+ ],
+ "source": [
+ "four_imputed = impute_trf_with_rf(four_added) "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "15b8d68b",
+ "metadata": {},
+ "source": [
+ "We only need to perform the `constantpredictor` baseline once, since the result is deterministic regardless of time budget. We performed the set of experiments with a four hour time budget and transfer the to one hour:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "d410ddc3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "constants = four_imputed[four_imputed.framework == \"constantpredictor\"].copy()\n",
+ "constants[\"constraint\"] = \"1h8c_gp3\"\n",
+ "one_imputed = pd.concat([one_imputed, constants])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "ee5a7991",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# The constantpredictor experiments were ran without the gp3 SSD, but we can rename the result.\n",
+ "four_imputed.loc[four_imputed.framework == \"constantpredictor\", \"constraint\"] = \"4h8c_gp3\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "80869c02",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final = pd.concat([one_imputed, four_imputed])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "76860af9",
+ "metadata": {},
+ "source": [
+ "A few sanity checks:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "22acb1bf",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "if ttype == \"classification\":\n",
+ " jobs = 71 * 10 * 13 * 2 - 1 # tasks * folds * frameworks * time budgets - known failures\n",
+ "else:\n",
+ " jobs = 33 * 10 * 12 * 2 # autosklearn2 does not support regression\n",
+ "\n",
+ "assert len(final) == jobs\n",
+ "assert len(final) == len(final.drop_duplicates([\"framework\", \"task\", \"fold\", \"constraint\"]))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "2cf9a9ce",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "final.to_csv(f\"{ttype}_all_cleaned.csv\", index=False)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1b503d5f",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/reports/ErrorInspection.ipynb b/reports/ErrorInspection.ipynb
new file mode 100644
index 000000000..a016b7600
--- /dev/null
+++ b/reports/ErrorInspection.ipynb
@@ -0,0 +1,12549 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "6179787d",
+ "metadata": {},
+ "source": [
+ "# Error Inspection\n",
+ "In this notebook we look at the errors encountered while executing the benchmark.\n",
+ "We do this for each task (regression, classification) and each budget (1h, 4h (when its run)).\n",
+ "In particular, we look at which evaluations have no result recorded (and why) and which evaluations have an error recorded (and why) to determine whether the issue is caused by us (and thus warrants a redo) or by the AutoML framework (in which case no further action is required)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4b297678",
+ "metadata": {},
+ "source": [
+ "### Setup"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "205655d2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import itertools\n",
+ "import re\n",
+ "\n",
+ "import pandas as pd\n",
+ "#import seaborn as sns"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "409fa0ce",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "n_regression_jobs = 330\n",
+ "n_classification_jobs = 710\n",
+ "\n",
+ "def missing_jobs_for(framework, results, all_jobs):\n",
+ " fw = results[results[\"framework\"] == framework]\n",
+ " completed = set(fw[[\"task\", \"fold\"]].itertuples(index=False, name=None))\n",
+ " return all_jobs - completed"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "328050eb",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def is_timeout_error(info: str) -> bool:\n",
+ " \"\"\" Test if the INFO message indicates it is a framework timeout. \"\"\"\n",
+ " return re.match(r\"TimeoutError: Interrupting thread MainThread \\[ident=\\d+\\] after \\d+s timeout.\", info) is not None\n",
+ "\n",
+ "def is_memory_error(info: str) -> bool:\n",
+ " \"\"\" Test for (one of the) error message that points to a memory issue. \"\"\"\n",
+ " return re.match(r\"NoResultError: could not allocate \\d+ bytes\", info) is not None\n",
+ "\n",
+ "def errors_for_framework(framework, results):\n",
+ " error_dataframe = results[~results[\"info\"].isna()][[\"framework\", \"task\", \"fold\", \"info\"]]\n",
+ " fw = error_dataframe[error_dataframe[\"framework\"] == framework]\n",
+ " timeout_errors = len(fw[fw[\"info\"].apply(is_timeout_error)])\n",
+ " if timeout_errors > 0:\n",
+ " print(\"Of the errors below,\", timeout_errors, \"are timeout errors.\")\n",
+ " memory_errors = len(fw[fw[\"info\"].apply(is_memory_error)])\n",
+ " if memory_errors > 0:\n",
+ " print(\"Of the errors below,\", memory_errors, \"are memory errors.\")\n",
+ " return error_dataframe[error_dataframe[\"framework\"] == framework].groupby([\"framework\", \"task\"]).count()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8f7f53a3",
+ "metadata": {},
+ "source": [
+ "The raw documents we load contain *all* experiments run for the task type and budget.\n",
+ "Some of those experiments failed to produce a result, e.g. due to CPU inactivity or due a bug in the benchmarking framework.\n",
+ "When we find that we failed to produce a result because of a non-framework error, we run it again.\n",
+ "So, in the raw file, you can find two (or more) entries for a `(framework, task, fold)`-tuple, but only one should have a valid result.\n",
+ "Before we investigate incomplete results, we must first make sure we don't investigate results which have already been superseded by a valid result:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "6154b2ce",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def filter_for_latest_results(results):\n",
+ " results = results.sort_values(by=\"utc\", na_position=\"first\")\n",
+ " # There was a mistake in the old KDDCup09-Upselling task, so it was replaced with a new task.\n",
+ " results = results[results[\"id\"] != \"openml.org/t/360947\"]\n",
+ " # Use only the latest results (earlier failures don't count, only justified reruns are done)\n",
+ " results = results.drop_duplicates([\"framework\", \"task\", \"fold\"], keep=\"last\")\n",
+ " return results"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c0900014",
+ "metadata": {},
+ "source": [
+ "**Table of Content**:\n",
+ "\n",
+ "*Subsections marked with an asterisk (*\\**) are included for completeness, but the frameworks reported no failure for the given benchmark.*\n",
+ "\n",
+ "[0. Setup](#Setup)\n",
+ "\n",
+ "[1. Regression 1H8C](#1.-Regression-1h8c)\n",
+ "\n",
+ "- [1.1 Missing Results](#1.1-Missing-Results)\n",
+ "\n",
+ "- [1.2 Failed Results](#1.2-Failed-Results)\n",
+ "\n",
+ " - [1.2.1 AutoGluon\\*](#1.2.1-AutoGluon)\n",
+ "\n",
+ " - [1.2.2 auto-sklearn](#1.2.2-Autosklearn)\n",
+ "\n",
+ " - [1.2.3 autoxgboost](#1.2.3-Autoxgboost)\n",
+ "\n",
+ " - [1.2.4 FLAML\\*](#1.2.4-FLAML)\n",
+ " \n",
+ " - [1.2.5 GAMA\\*](#1.2.5-GAMA)\n",
+ "\n",
+ " - [1.2.6 H2O\\*](#1.2.6-H2O)\n",
+ "\n",
+ " - [1.2.7 LightAutoML](#1.2.7-LightAutoML)\n",
+ "\n",
+ " - [1.2.8 mljar-supervised](#1.2.8-MLJar)\n",
+ "\n",
+ " - [1.2.9 ML-Plan](#1.2.9-MLPlan)\n",
+ "\n",
+ " - [1.2.10 mlr3automl](#1.2.10-MLR3AutoML)\n",
+ "\n",
+ " - [1.2.11 TPOT](#1.2.11-TPOT)\n",
+ "\n",
+ " - [1.2.12 RandomForest\\*](#1.2.12-RandomForest)\n",
+ "\n",
+ " - [1.2.13 TunedRandomForest\\*](#1.2.13-TunedRandomForest)\n",
+ "\n",
+ "[2. Classification 1H8C](#2.-Classification-1h8c)\n",
+ "\n",
+ "- [2.1 Missing Results](#2.1-Missing-Results)\n",
+ "\n",
+ "- [2.2 Failed Results](#2.2-Failed-Results)\n",
+ "\n",
+ " - [2.2.1 AutoGluon\\*](#2.2.1-AutoGluon)\n",
+ "\n",
+ " - [2.2.2 auto-sklearn](#2.2.2-Autosklearn)\n",
+ "\n",
+ " - [2.2.3 autoxgboost](#2.2.3-Autoxgboost)\n",
+ "\n",
+ " - [2.2.4 FLAML](#2.2.4-FLAML)\n",
+ " \n",
+ " - [2.2.5 GAMA](#2.2.5-GAMA)\n",
+ "\n",
+ " - [2.2.6 H2O](#2.2.6-H2O)\n",
+ "\n",
+ " - [2.2.7 LightAutoML](#2.2.7-LightAutoML)\n",
+ "\n",
+ " - [2.2.8 mljar-supervised](#2.2.8-MLJar)\n",
+ "\n",
+ " - [2.2.9 ML-Plan](#2.2.9-MLPlan)\n",
+ "\n",
+ " - [2.2.10 mlr3automl](#2.2.10-MLR3AutoML)\n",
+ "\n",
+ " - [2.2.11 TPOT](#2.2.11-TPOT)\n",
+ "\n",
+ " - [2.2.12 RandomForest\\*](#2.2.12-RandomForest)\n",
+ "\n",
+ " - [2.2.13 TunedRandomForest](#2.2.13-TunedRandomForest)\n",
+ "\n",
+ "[3. Regression 4H8C](#3.-Regression-4h8c)\n",
+ "\n",
+ "[4. Classification 4H8C](#4.-Classification-4h8c)\n",
+ "\n",
+ "[5. Remarks](#5.-Remarks)\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "41b39f97",
+ "metadata": {},
+ "source": [
+ "# 1. Regression 1h8c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "d19500bd",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " duration \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " mae \n",
+ " r2 \n",
+ " rmse \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2606 \n",
+ " openml.org/t/359946 \n",
+ " pol \n",
+ " H2OAutoML \n",
+ " 1h8c_gp3 \n",
+ " 9 \n",
+ " regression \n",
+ " -3.32883 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 3.34.0.1 \n",
+ " ... \n",
+ " 3610.6 \n",
+ " 3599.6 \n",
+ " 0.3 \n",
+ " 394.0 \n",
+ " 1831556068 \n",
+ " NaN \n",
+ " 1.46114 \n",
+ " 0.993800 \n",
+ " 3.32883 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 3771 \n",
+ " openml.org/t/359948 \n",
+ " SAT11-HAND-runtime-regression \n",
+ " AutoGluon_benchmark \n",
+ " 1h8c_gp3 \n",
+ " 9 \n",
+ " regression \n",
+ " -813.37600 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.3.1 \n",
+ " ... \n",
+ " 3199.2 \n",
+ " 3184.7 \n",
+ " 11.7 \n",
+ " 22.0 \n",
+ " 1680684272 \n",
+ " NaN \n",
+ " 375.42800 \n",
+ " 0.865693 \n",
+ " 813.37600 \n",
+ " 14.0 \n",
+ " \n",
+ " \n",
+ " 421 \n",
+ " openml.org/t/359942 \n",
+ " colleges \n",
+ " MLPlanWEKA \n",
+ " 1h8c_gp3 \n",
+ " 2 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.2.4 \n",
+ " ... \n",
+ " 111.9 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 1144218747 \n",
+ " NoResultError: Command 'java -jar -Xmx29790M /... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
3 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework \\\n",
+ "2606 openml.org/t/359946 pol H2OAutoML \n",
+ "3771 openml.org/t/359948 SAT11-HAND-runtime-regression AutoGluon_benchmark \n",
+ "421 openml.org/t/359942 colleges MLPlanWEKA \n",
+ "\n",
+ " constraint fold type result metric mode version \\\n",
+ "2606 1h8c_gp3 9 regression -3.32883 neg_rmse aws.docker 3.34.0.1 \n",
+ "3771 1h8c_gp3 9 regression -813.37600 neg_rmse aws.docker 0.3.1 \n",
+ "421 1h8c_gp3 2 regression NaN neg_rmse aws.docker 0.2.4 \n",
+ "\n",
+ " ... duration training_duration predict_duration models_count \\\n",
+ "2606 ... 3610.6 3599.6 0.3 394.0 \n",
+ "3771 ... 3199.2 3184.7 11.7 22.0 \n",
+ "421 ... 111.9 NaN NaN NaN \n",
+ "\n",
+ " seed info \\\n",
+ "2606 1831556068 NaN \n",
+ "3771 1680684272 NaN \n",
+ "421 1144218747 NoResultError: Command 'java -jar -Xmx29790M /... \n",
+ "\n",
+ " mae r2 rmse models_ensemble_count \n",
+ "2606 1.46114 0.993800 3.32883 NaN \n",
+ "3771 375.42800 0.865693 813.37600 14.0 \n",
+ "421 NaN NaN NaN NaN \n",
+ "\n",
+ "[3 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/latest/regression_1h8c.csv\")\n",
+ "regression_jobs = set(itertools.product(regression[\"task\"].unique(), regression[\"fold\"].unique()))\n",
+ "regression.sample(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "307c6235",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "regression = filter_for_latest_results(regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cc7b0df2",
+ "metadata": {},
+ "source": [
+ "## 1.1 Missing Results\n",
+ "Missing results are those experiments which have no entry in the file at all."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "5002fb7a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "framework\n",
+ "AutoGluon_benchmark 0\n",
+ "GAMA 0\n",
+ "GAMA_benchmark 0\n",
+ "H2OAutoML 0\n",
+ "MLPlanWEKA 2\n",
+ "RandomForest 0\n",
+ "TPOT 0\n",
+ "TunedRandomForest 0\n",
+ "autosklearn 0\n",
+ "autoxgboost 0\n",
+ "flaml 0\n",
+ "lightautoml 0\n",
+ "mljarsupervised_benchmark 0\n",
+ "mlr3automl 0\n",
+ "Name: fold, dtype: int64"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_by_framework = (n_regression_jobs - regression.groupby(\"framework\").count()[\"fold\"])\n",
+ "missing_by_framework"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "75b20c2d",
+ "metadata": {},
+ "source": [
+ "AutoGluon_benchmark 1\n",
+ "GAMA_benchmark 0\n",
+ "H2OAutoML 0\n",
+ "TPOT 2\n",
+ "TunedRandomForest 0\n",
+ "autosklearn 0\n",
+ "flaml 0\n",
+ "lightautoml 0\n",
+ "mljarsupervised_benchmark 264\n",
+ "mlr3automl 0\n",
+ "Name: fold, dtype: int6"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "c61bad8b",
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "TypeError",
+ "evalue": "missing_jobs_for() missing 2 required positional arguments: 'results' and 'all_jobs'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)",
+ "\u001b[1;32m~\\AppData\\Local\\Temp/ipykernel_19024/4108717938.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mmissing_jobs_for\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"MLPlanWEKA\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
+ "\u001b[1;31mTypeError\u001b[0m: missing_jobs_for() missing 2 required positional arguments: 'results' and 'all_jobs'"
+ ]
+ }
+ ],
+ "source": [
+ "missing_jobs_for(\"MLPlanWEKA\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fbf7196a",
+ "metadata": {},
+ "source": [
+ "Both are missing (from `mlplanweka.openml_s_269.1h8c_gp3.aws.20211203T113617`), the log says:\n",
+ "```\n",
+ "[WARNING] [amlb.runners.aws:16:38:54.716] WARN: Instance i-0325b7e530bcae84f (aws.openml_s_269.1h8c_gp3.airlines_depdelay_10m.8.mlplanweka) has no CPU activity in the last 30 minutes.\n",
+ "[WARNING] [amlb.runners.aws:19:02:54.769] WARN: Instance i-073e67b9ffe73d515 (aws.openml_s_269.1h8c_gp3.nyc-taxi-green-dec-2016.7.mlplanweka) has no CPU activity in the last 30 minutes.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dca5cf1d",
+ "metadata": {},
+ "source": [
+ "## 1.2 Failed Results\n",
+ "The `info` field is only populated for errors jobs that failed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "31d04339",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "regression_errors = regression[~regression[\"info\"].isna()][[\"framework\", \"task\", \"fold\", \"info\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "835ec1fe",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " MLPlanWEKA \n",
+ " 12 \n",
+ " 10 \n",
+ " 61 \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " 3 \n",
+ " 5 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " 2 \n",
+ " 10 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " autosklearn \n",
+ " 1 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " autoxgboost \n",
+ " 5 \n",
+ " 10 \n",
+ " 23 \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " 1 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " 1 \n",
+ " 8 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " task fold info\n",
+ "framework \n",
+ "MLPlanWEKA 12 10 61\n",
+ "TPOT 3 5 2\n",
+ "TunedRandomForest 2 10 1\n",
+ "autosklearn 1 1 1\n",
+ "autoxgboost 5 10 23\n",
+ "lightautoml 1 1 1\n",
+ "mljarsupervised_benchmark 1 8 1"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors.groupby([\"framework\"]).nunique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a2ff049e",
+ "metadata": {},
+ "source": [
+ "### 1.2.1 AutoGluon\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6b328801",
+ "metadata": {},
+ "source": [
+ "### 1.2.2 Autosklearn\n",
+ "**Failures**: 1\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "e66f0168",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1342 \n",
+ " autosklearn \n",
+ " OnlineNewsPopularity \n",
+ " 7 \n",
+ " NoResultError: Input contains infinity or a va... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1342 autosklearn OnlineNewsPopularity 7 \n",
+ "\n",
+ " info \n",
+ "1342 NoResultError: Input contains infinity or a va... "
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autosklearn\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "d8556ab1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([\"NoResultError: Input contains infinity or a value too large for dtype('float32').\"],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autosklearn\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))][\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b9219e61",
+ "metadata": {},
+ "source": [
+ "We find it's part of some validation during `predict` :\n",
+ "``` \n",
+ "Traceback (most recent call last):\n",
+ " File \"/bench/frameworks/shared/callee.py\", line 70, in call_run\n",
+ " result = run_fn(ds, config)\n",
+ " File \"/bench/frameworks/autosklearn/exec.py\", line 138, in run\n",
+ " predictions = auto_sklearn.predict(X_test)\n",
+ " File \"/bench/frameworks/autosklearn/venv/lib/python3.7/site-packages/autosklearn/estimators.py\", line 1108, in predict\n",
+ " return super().predict(X, batch_size=batch_size, n_jobs=n_jobs)\n",
+ " File \"/bench/frameworks/autosklearn/venv/lib/python3.7/site-packages/autosklearn/estimators.py\", line 485, in predict\n",
+ " return self.automl_.predict(X, batch_size=batch_size, n_jobs=n_jobs)\n",
+ " File \"/bench/frameworks/autosklearn/venv/lib/python3.7/site-packages/autosklearn/automl.py\", line 1430, in predict\n",
+ " for identifier in self.ensemble_.get_selected_model_identifiers()\n",
+ "``` "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07b84ed1",
+ "metadata": {},
+ "source": [
+ "### 1.2.3 Autoxgboost\n",
+ "**Failures**: 29\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "A mix of timeout errors and resource errors during execution."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "79067464",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 18 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " autoxgboost \n",
+ " Airlines_DepDelay_10M \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " Brazilian_houses \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " Yolanda \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " house_sales \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " pol \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "autoxgboost Airlines_DepDelay_10M 10 10\n",
+ " Brazilian_houses 4 4\n",
+ " Yolanda 10 10\n",
+ " house_sales 1 1\n",
+ " pol 4 4"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autoxgboost\", regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "19884494",
+ "metadata": {},
+ "source": [
+ "The following errors were not timeout related:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "4ed8f1ab",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1913 \n",
+ " autoxgboost \n",
+ " Brazilian_houses \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2297 \n",
+ " autoxgboost \n",
+ " Brazilian_houses \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2252 \n",
+ " autoxgboost \n",
+ " Airlines_DepDelay_10M \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2326 \n",
+ " autoxgboost \n",
+ " Brazilian_houses \n",
+ " 2 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2266 \n",
+ " autoxgboost \n",
+ " house_sales \n",
+ " 4 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2339 \n",
+ " autoxgboost \n",
+ " Brazilian_houses \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2274 \n",
+ " autoxgboost \n",
+ " pol \n",
+ " 6 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2318 \n",
+ " autoxgboost \n",
+ " pol \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 4113 \n",
+ " autoxgboost \n",
+ " pol \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 4083 \n",
+ " autoxgboost \n",
+ " pol \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 4120 \n",
+ " autoxgboost \n",
+ " Yolanda \n",
+ " 2 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1913 autoxgboost Brazilian_houses 0 \n",
+ "2297 autoxgboost Brazilian_houses 1 \n",
+ "2252 autoxgboost Airlines_DepDelay_10M 8 \n",
+ "2326 autoxgboost Brazilian_houses 2 \n",
+ "2266 autoxgboost house_sales 4 \n",
+ "2339 autoxgboost Brazilian_houses 8 \n",
+ "2274 autoxgboost pol 6 \n",
+ "2318 autoxgboost pol 3 \n",
+ "4113 autoxgboost pol 9 \n",
+ "4083 autoxgboost pol 5 \n",
+ "4120 autoxgboost Yolanda 2 \n",
+ "\n",
+ " info \n",
+ "1913 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2297 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2252 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2326 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2266 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2339 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2274 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2318 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "4113 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "4083 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "4120 CalledProcessError: Command 'Rscript --vanilla... "
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autoxgboost\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "f58d64e1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/autoxgboost/lib\\'); source(\\'/bench/frameworks/autoxgboost/exec.R\\'); run(\\'/input/org/openml/www/datasets/42688/dataset_tr…',\n",
+ " 'CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/autoxgboost/lib\\'); source(\\'/bench/frameworks/autoxgboost/exec.R\\'); run(\\'/input/org/openml/www/datasets/42728/dataset_tr…',\n",
+ " 'CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/autoxgboost/lib\\'); source(\\'/bench/frameworks/autoxgboost/exec.R\\'); run(\\'/input/org/openml/www/datasets/42731/dataset_tr…',\n",
+ " 'CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/autoxgboost/lib\\'); source(\\'/bench/frameworks/autoxgboost/exec.R\\'); run(\\'/input/org/openml/www/datasets/201/dataset_trai…',\n",
+ " 'CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/autoxgboost/lib\\'); source(\\'/bench/frameworks/autoxgboost/exec.R\\'); run(\\'/input/org/openml/www/datasets/42705/dataset_tr…'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autoxgboost\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))][\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0d747275",
+ "metadata": {},
+ "source": [
+ "The truncated error messages are not very informative (there was some error while running the R script). We find:\n",
+ "\n",
+ " - `Airlines_DepDelay_10M.8` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): ran out of memory, exit status 1.\n",
+ " - `brazilian_houses.0` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211116T234105`): `killed` with exit status 137.\n",
+ " - `brazilian_houses.1` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): `killed` with exit status 137.\n",
+ " - `brazilian_houses.2` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): ran out of memory, exit status 1.\n",
+ " - `brazilian_houses.8` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): ran out of memory, exit status 1.\n",
+ " - `house_sales.4`(`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): ran out of memory, exit status 1.\n",
+ " - `pol.3` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T105955`): `killed` with exit status 137.\n",
+ " - `pol.5` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T141648`): `killed` with exit status 137.\n",
+ " - `pol.6` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T141648`): ran out of memory, exit status 1.\n",
+ " - `pol.9` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T141648`): `killed` with exit status 137.\n",
+ " - `Yolanda.2` (`autoxgboost.openml_s_269.1h8c_gp3.aws.20211117T141648`): ran out of memory, exit status 1.\n",
+ " \n",
+ "E.g. `brazilian_houses.0` was `killed`:\n",
+ "```\n",
+ "[mbo] 37: eta=0.193; gamma=9.22; max_depth=3; colsample_bytree=0.996; colsample_bylevel=0.671; lambda=0.00411; alpha=238; subsample=0.597 : y = 4.56e+05 : 0.2 secs : infill_cb\n",
+ "[mbo] 38: eta=0.197; gamma=0.0468; max_depth=20; colsample_bytree=0.674; colsample_bylevel=0.736; lambda=312; alpha=49.1; subsample=0.985 : y = 6.44e+05 : 58.6 secs : infill_cb\n",
+ "Killed\n",
+ "\n",
+ "[ERROR] [amlb.benchmark:00:17:44.754] Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42688/data\n",
+ "set_train_0.arff', '/input/org/openml/www/datasets/42688/dataset_test_0.arff', target.index = 13, 'regression', '/output/predictions/Brazilian_houses/0/predictions.csv', 8, time.budget = 3600, meta_results_file=\n",
+ "'/output/meta_results.csv')\"' returned non-zero exit status 137.\n",
+ "Traceback (most recent call last):\n",
+ " File \"/bench/amlb/benchmark.py\", line 542, in run\n",
+ " meta_result = self.benchmark.framework_module.run(self._dataset, task_config)\n",
+ " File \"/bench/frameworks/autoxgboost/__init__.py\", line 10, in run\n",
+ " return run(*args, **kwargs)\n",
+ " File \"/bench/frameworks/autoxgboost/exec.py\", line 36, in run\n",
+ " ), _live_output_=True)\n",
+ " File \"/bench/amlb/utils/process.py\", line 245, in run_cmd\n",
+ " raise e\n",
+ " File \"/bench/amlb/utils/process.py\", line 232, in run_cmd\n",
+ " preexec_fn=params.preexec_fn)\n",
+ " File \"/bench/amlb/utils/process.py\", line 77, in run_subprocess\n",
+ " raise subprocess.CalledProcessError(retcode, process.args, output=stdout, stderr=stderr)\n",
+ "subprocess.CalledProcessError: Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42688/dataset_train_0.arff', '/input/org/openml/www/datasets/42688/dataset_test_0.arff', target.index = 13, 'regression', '/output/predictions/Brazilian_houses/0/predictions.csv', 8, time.budget = 3600, meta_results_file='/output/meta_results.csv')\"' returned non-zero exit status 137.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "88029b54",
+ "metadata": {},
+ "source": [
+ "### 1.2.4 FLAML\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fefebce3",
+ "metadata": {},
+ "source": [
+ "### 1.2.5 GAMA\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "06d612bb",
+ "metadata": {},
+ "source": [
+ "### 1.2.6 H2O\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "271b6c8a",
+ "metadata": {},
+ "source": [
+ "### 1.2.7 LightAutoML\n",
+ "\n",
+ "**Failures**: 1\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Looks like an error caused by an edge case in the AutoML system."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "ec80ca36",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "lightautoml Santander_transaction_value 1 1"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"lightautoml\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "23366f3c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4247 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 5 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "4247 lightautoml Santander_transaction_value 5 \n",
+ "\n",
+ " info \n",
+ "4247 NoResultError: Pipeline finished with 0 models... "
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"lightautoml\") & ~(regression_errors[\"info\"]).isnull()]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ce3b7886",
+ "metadata": {},
+ "source": [
+ "Seems to fail after a model crashes with `Input contains NaN, infinity or a value too large for dtype('float32').`, well before 3600s. Looks like an error caused by an edge case in the AutoML system:\n",
+ "```\n",
+ "===== Start working with fold 0 for Lvl_0_Pipe_0_Mod_0_LinearL2 =====\n",
+ "\n",
+ "Linear model: C = 1e-05 score = -102768654963623.77\n",
+ "...\n",
+ "ERROR:frameworks.shared.callee:Pipeline finished with 0 models for some reason.\n",
+ "Probably one or more models failed\n",
+ "Traceback (most recent call last):\n",
+ " File \"/bench/frameworks/shared/callee.py\", line 70, in call_run\n",
+ " result = run_fn(ds, config)\n",
+ " File \"/bench/frameworks/lightautoml/exec.py\", line 38, in run\n",
+ " automl.fit_predict(train_data=df_train, roles={'target': label})\n",
+ " File \"/bench/frameworks/lightautoml/venv/lib/python3.7/site-packages/lightautoml/addons/utilization/utilization.py\", line 275, in fit_predict\n",
+ " valid_data, valid_features)\n",
+ " File \"/bench/frameworks/lightautoml/venv/lib/python3.7/site-packages/lightautoml/automl/presets/tabular_presets.py\", line 413, in fit_predict\n",
+ " oof_pred = super().fit_predict(train, roles=roles, cv_iter=cv_iter, valid_data=valid_data)\n",
+ " File \"/bench/frameworks/lightautoml/venv/lib/python3.7/site-packages/lightautoml/automl/presets/base.py\", line 173, in fit_predict\n",
+ " result = super().fit_predict(train_data, roles, train_features, cv_iter, valid_data, valid_features)\n",
+ " File \"/bench/frameworks/lightautoml/venv/lib/python3.7/site-packages/lightautoml/automl/base.py\", line 189, in fit_predict\n",
+ " pipe_pred = ml_pipe.fit_predict(train_valid)\n",
+ " File \"/bench/frameworks/lightautoml/venv/lib/python3.7/site-packages/lightautoml/pipelines/ml/base.py\", line 129, in fit_predict\n",
+ " assert len(predictions) > 0, 'Pipeline finished with 0 models for some reason.\\nProbably one or more models failed'\n",
+ "AssertionError: Pipeline finished with 0 models for some reason.\n",
+ "Probably one or more models failed\n",
+ "WARNING:amlb.utils.process:Terminating process psutil.Process(pid=79, name='python', status='sleeping', started='20:15:09').\n",
+ "...\n",
+ "Input contains NaN, infinity or a value too large for dtype('float32').\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c7071960",
+ "metadata": {},
+ "source": [
+ "## 1.2.8 MLJar\n",
+ "**Failures**: 8\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "One error type, raised by the framework itself, on one task but not every fold."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "bc40d0b3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 8 \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mljarsupervised_benchmark QSAR-TID-11 8 8"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mljarsupervised_benchmark\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "2cf1e922",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['NoResultError: Object of type float32 is not JSON serializable'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[regression_errors[\"framework\"] == \"mljarsupervised_benchmark\"][\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c8993c46",
+ "metadata": {},
+ "source": [
+ "All errors for the task were identical. We do see that two folds for the same task carried out to completion:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "8f36cf38",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " duration \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " mae \n",
+ " r2 \n",
+ " rmse \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3461 \n",
+ " openml.org/t/360932 \n",
+ " QSAR-TID-11 \n",
+ " mljarsupervised_benchmark \n",
+ " 1h8c_gp3 \n",
+ " 3 \n",
+ " regression \n",
+ " -0.750082 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.11.0 \n",
+ " ... \n",
+ " 3737.2 \n",
+ " 3615.5 \n",
+ " 111.1 \n",
+ " 59.0 \n",
+ " 1044029151 \n",
+ " NaN \n",
+ " 0.527794 \n",
+ " 0.750313 \n",
+ " 0.750082 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 3581 \n",
+ " openml.org/t/360932 \n",
+ " QSAR-TID-11 \n",
+ " mljarsupervised_benchmark \n",
+ " 1h8c_gp3 \n",
+ " 6 \n",
+ " regression \n",
+ " -0.677109 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.11.0 \n",
+ " ... \n",
+ " 3735.3 \n",
+ " 3617.4 \n",
+ " 107.2 \n",
+ " 50.0 \n",
+ " 1044029154 \n",
+ " NaN \n",
+ " 0.485104 \n",
+ " 0.808629 \n",
+ " 0.677109 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
2 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework constraint \\\n",
+ "3461 openml.org/t/360932 QSAR-TID-11 mljarsupervised_benchmark 1h8c_gp3 \n",
+ "3581 openml.org/t/360932 QSAR-TID-11 mljarsupervised_benchmark 1h8c_gp3 \n",
+ "\n",
+ " fold type result metric mode version ... duration \\\n",
+ "3461 3 regression -0.750082 neg_rmse aws.docker 0.11.0 ... 3737.2 \n",
+ "3581 6 regression -0.677109 neg_rmse aws.docker 0.11.0 ... 3735.3 \n",
+ "\n",
+ " training_duration predict_duration models_count seed info \\\n",
+ "3461 3615.5 111.1 59.0 1044029151 NaN \n",
+ "3581 3617.4 107.2 50.0 1044029154 NaN \n",
+ "\n",
+ " mae r2 rmse models_ensemble_count \n",
+ "3461 0.527794 0.750313 0.750082 NaN \n",
+ "3581 0.485104 0.808629 0.677109 NaN \n",
+ "\n",
+ "[2 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression[(regression.framework == \"mljarsupervised_benchmark\") & (regression[\"info\"].isnull()) & (regression[\"task\"] == \"QSAR-TID-11\")]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2d59c801",
+ "metadata": {},
+ "source": [
+ "Seems like the error was indeed raised by mljar during the `fit` call:\n",
+ "```\n",
+ "13_Xgboost rmse 0.785149 trained in 56.99 seconds\n",
+ "There was an error during 13_Xgboost training.\n",
+ "Please check /output/results/QSAR-TID-11/1/errors.md for details.\n",
+ "\n",
+ "[DEBUG] [amlb.utils.process:22:43:45.161] 2021-11-12 22:12:23,338 exec.py INFO\n",
+ "**** mljar-supervised [v0.11.0] ****\n",
+ "\n",
+ "2021-11-12 22:43:44,308 frameworks.shared.callee ERROR Object of type float32 is not JSON serializable\n",
+ "Traceback (most recent call last):\n",
+ " File \"/bench/frameworks/shared/callee.py\", line 70, in call_run\n",
+ " result = run_fn(ds, config)\n",
+ " File \"/bench/frameworks/mljarsupervised/exec.py\", line 57, in run\n",
+ " automl.fit(X_train, y_train)\n",
+ " File \"/bench/frameworks/mljarsupervised/venv/lib/python3.7/site-packages/supervised/automl.py\", line 337, in fit\n",
+ " return self._fit(X, y, sample_weight, cv)\n",
+ " File \"/bench/frameworks/mljarsupervised/venv/lib/python3.7/site-packages/supervised/base_automl.py\", line 1117, in _fit\n",
+ " raise e\n",
+ " File \"/bench/frameworks/mljarsupervised/venv/lib/python3.7/site-packages/supervised/base_automl.py\", line 1103, in _fit\n",
+ " self.save_progress(step, generated_params)\n",
+ " File \"/bench/frameworks/mljarsupervised/venv/lib/python3.7/site-packages/supervised/base_automl.py\", line 649, in save_progress\n",
+ " fout.write(json.dumps(state, indent=4))\n",
+ " File \"/usr/lib/python3.7/json/__init__.py\", line 238, in dumps\n",
+ " **kw).encode(obj)\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 201, in encode\n",
+ " chunks = list(chunks)\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 431, in _iterencode\n",
+ " yield from _iterencode_dict(o, _current_indent_level)\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 405, in _iterencode_dict\n",
+ " yield from chunks\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 405, in _iterencode_dict\n",
+ " yield from chunks\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 325, in _iterencode_list\n",
+ " yield from chunks\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 405, in _iterencode_dict\n",
+ " yield from chunks\n",
+ " File \"/usr/lib/python3.7/json/encoder.py\", line 438, in _iterencode\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "05abc880",
+ "metadata": {},
+ "source": [
+ "### 1.2.9 MLPlan\n",
+ "Experiments suspended."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "83affde5",
+ "metadata": {},
+ "source": [
+ "### 1.2.10 MLR3AutoML\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "00a6acd9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mlr3automl\", regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "93fe9b30",
+ "metadata": {},
+ "source": [
+ "### 1.2.11 TPOT\n",
+ "**Failures**: 5\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Other errors are weird, but ultimately most likely framework errors."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "2792f884",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 1 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " Yolanda \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TPOT Airlines_DepDelay_10M 3 3\n",
+ " Buzzinsocialmedia_Twitter 1 1\n",
+ " Yolanda 1 1"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TPOT\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "73c5b682",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1798 \n",
+ " TPOT \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 0 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 2049 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 4 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 2147 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 7 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 2142 \n",
+ " TPOT \n",
+ " Yolanda \n",
+ " 2 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1798 TPOT Buzzinsocialmedia_Twitter 0 \n",
+ "2049 TPOT Airlines_DepDelay_10M 4 \n",
+ "2147 TPOT Airlines_DepDelay_10M 7 \n",
+ "2142 TPOT Yolanda 2 \n",
+ "\n",
+ " info \n",
+ "1798 NoResultError: A pipeline has not yet been opt... \n",
+ "2049 NoResultError: A pipeline has not yet been opt... \n",
+ "2147 NoResultError: A pipeline has not yet been opt... \n",
+ "2142 NoResultError: A pipeline has not yet been opt... "
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"TPOT\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "22e03504",
+ "metadata": {},
+ "source": [
+ "`Yolanda.2` points to excessive memory usage, though seems near instant? Job exited prematurely (2200sec).\n",
+ "Same for `Airlines.4` (260sec):"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8e292216",
+ "metadata": {},
+ "source": [
+ "```\n",
+ "[INFO] [amlb.print:20:30:21.667] INFO:__main__:\n",
+ "[INFO] [amlb.print:20:31:24.979] **** TPOT [v0.11.7]****\n",
+ "[INFO] [amlb.print:20:31:24.981]\n",
+ "[INFO] [amlb.print:20:31:24.981] INFO:__main__:Running TPOT with a maximum time of 3600s on 8 cores, optimizing neg_mean_squared_error.\n",
+ "[INFO] [amlb.print:20:31:24.981] ERROR:frameworks.shared.callee:A pipeline has not yet been optimized. Please call fit() first.\n",
+ "[INFO] [amlb.print:20:31:30.007] Traceback (most recent call last):\n",
+ "[INFO] [amlb.print:20:31:30.007] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 828, in fit\n",
+ "[INFO] [amlb.print:20:31:30.007] log_file=self.log_file_,\n",
+ "[INFO] [amlb.print:20:31:30.007] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/gp_deap.py\", line 228, in eaMuPlusLambda\n",
+ "[INFO] [amlb.print:20:31:30.007] population[:] = toolbox.evaluate(population)\n",
+ "[INFO] [amlb.print:20:31:30.007] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 1572, in _evaluate_individuals\n",
+ "[INFO] [amlb.print:20:31:30.007] chunk_idx : chunk_idx + chunk_size\n",
+ "[INFO] [amlb.print:20:31:30.007] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/parallel.py\", line 1056, in __call__\n",
+ "[INFO] [amlb.print:20:31:30.007] self.retrieve()\n",
+ "[INFO] [amlb.print:20:31:30.008] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/parallel.py\", line 935, in retrieve\n",
+ "[INFO] [amlb.print:20:31:30.008] self._output.extend(job.get(timeout=self.timeout))\n",
+ "[INFO] [amlb.print:20:31:30.008] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/_parallel_backends.py\", line 542, in wrap_future_result\n",
+ "[INFO] [amlb.print:20:31:30.008] return future.result(timeout=timeout)\n",
+ "[INFO] [amlb.print:20:31:30.008] File \"/usr/lib/python3.7/concurrent/futures/_base.py\", line 435, in result\n",
+ "[INFO] [amlb.print:20:31:30.008] return self.__get_result()\n",
+ "[INFO] [amlb.print:20:31:30.008] File \"/usr/lib/python3.7/concurrent/futures/_base.py\", line 384, in __get_result\n",
+ "[INFO] [amlb.print:20:31:30.008] raise self._exception\n",
+ "[INFO] [amlb.print:20:31:30.008] joblib.externals.loky.process_executor.TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault w\n",
+ "hile calling the function or by an excessive memory usage causing the Operating System to kill the worker.\n",
+ "[INFO] [amlb.print:20:31:30.008]\n",
+ "[INFO] [amlb.print:20:31:30.009] The exit codes of the workers are {SIGKILL(-9)}\n",
+ "[INFO] [amlb.print:20:31:30.009]\n",
+ "[INFO] [amlb.print:20:31:30.009] During handling of the above exception, another exception occurred:\n",
+ "[INFO] [amlb.print:20:31:30.009]\n",
+ "[INFO] [amlb.print:20:31:30.009] Traceback (most recent call last):\n",
+ "[INFO] [amlb.print:20:31:30.009] File \"/bench/frameworks/shared/callee.py\", line 70, in call_run\n",
+ "[INFO] [amlb.print:20:31:30.009] result = run_fn(ds, config)\n",
+ "[INFO] [amlb.print:20:31:30.009] File \"/bench/frameworks/TPOT/exec.py\", line 63, in run\n",
+ "[INFO] [amlb.print:20:31:30.009] tpot.fit(X_train, y_train)\n",
+ "[INFO] [amlb.print:20:31:30.009] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 863, in fit\n",
+ "[INFO] [amlb.print:20:31:30.009] raise e\n",
+ "[INFO] [amlb.print:20:31:30.009] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 854, in fit\n",
+ "[INFO] [amlb.print:20:31:30.009] self._update_top_pipeline()\n",
+ "[INFO] [amlb.print:20:31:30.009] File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 962, in _update_top_pipeline\n",
+ "[INFO] [amlb.print:20:31:30.010] \"A pipeline has not yet been optimized. Please call fit() first.\"\n",
+ "[INFO] [amlb.print:20:31:30.010] RuntimeError: A pipeline has not yet been optimized. Please call fit() first.\n",
+ "[INFO] [amlb.print:20:31:30.010] WARNING:amlb.utils.process:Terminating process psutil.Process(pid=157, name='python', status='sleeping', started='20:30:29').\n",
+ "[INFO] [amlb.print:20:31:30.010] WARNING:amlb.utils.process:Killing process psutil.Process(pid=157, name='python', status='sleeping', started='20:30:29').\n",
+ "[INFO] [amlb.print:20:31:31.045]\n",
+ "[INFO] [amlb.print:20:31:31.045]\n",
+ "[INFO] [amlb.print:20:31:31.045]\n",
+ "[DEBUG] [amlb.utils.process:20:31:31.046] INFO:__main__:\n",
+ "**** TPOT [v0.11.7]****\n",
+ "\n",
+ "INFO:__main__:Running TPOT with a maximum time of 3600s on 8 cores, optimizing neg_mean_squared_error.\n",
+ "ERROR:frameworks.shared.callee:A pipeline has not yet been optimized. Please call fit() first.\n",
+ "Traceback (most recent call last):\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 828, in fit\n",
+ " log_file=self.log_file_,\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/gp_deap.py\", line 228, in eaMuPlusLambda\n",
+ " population[:] = toolbox.evaluate(population)\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/tpot/base.py\", line 1572, in _evaluate_individuals\n",
+ " chunk_idx : chunk_idx + chunk_size\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/parallel.py\", line 1056, in __call__\n",
+ " self.retrieve()\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/parallel.py\", line 935, in retrieve\n",
+ " self._output.extend(job.get(timeout=self.timeout))\n",
+ " File \"/bench/frameworks/TPOT/venv/lib/python3.7/site-packages/joblib/_parallel_backends.py\", line 542, in wrap_future_result\n",
+ " return future.result(timeout=timeout)\n",
+ " File \"/usr/lib/python3.7/concurrent/futures/_base.py\", line 435, in result\n",
+ " return self.__get_result()\n",
+ " File \"/usr/lib/python3.7/concurrent/futures/_base.py\", line 384, in __get_result\n",
+ " raise self._exception\n",
+ "joblib.externals.loky.process_executor.TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a519cccd",
+ "metadata": {},
+ "source": [
+ "No open issue on TPOT issue tracker ([`TerminatedWorkerError`](https://github.com/EpistasisLab/tpot/issues?q=is%3Aissue+is%3Aopen+TerminatedWorkerError+)). It looks like joblib subprocesses are terminated unexpectedly and TPOT does not account for this possibility, which may lead to it trying to simply finish search and do a best fit but it can't since nothing had finished evaluation. But that's of course just a guess based on the stack trace."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c4aa54a8",
+ "metadata": {},
+ "source": [
+ "### 1.2.12 RandomForest\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "edc9ff7d",
+ "metadata": {},
+ "source": [
+ "### 1.2.13 TunedRandomForest\n",
+ "\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "54ccf33e",
+ "metadata": {},
+ "source": [
+ "# 2. Classification 1h8c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "bb734448",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " acc \n",
+ " balacc \n",
+ " logloss \n",
+ " auc \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6696 \n",
+ " openml.org/t/359987 \n",
+ " shuttle \n",
+ " RandomForest \n",
+ " 1h8c_gp3 \n",
+ " 3 \n",
+ " multiclass \n",
+ " -0.000628 \n",
+ " neg_logloss \n",
+ " aws.docker \n",
+ " 0.24.2 \n",
+ " ... \n",
+ " 10.0 \n",
+ " 0.7 \n",
+ " 2000.0 \n",
+ " 815597336 \n",
+ " NaN \n",
+ " 0.999828 \n",
+ " 0.857143 \n",
+ " 0.000628 \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 7275 \n",
+ " openml.org/t/3945 \n",
+ " KDDCup09_appetency \n",
+ " mljarsupervised_benchmark \n",
+ " 1h8c_gp3 \n",
+ " 7 \n",
+ " binary \n",
+ " 0.852260 \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.11.0 \n",
+ " ... \n",
+ " 3647.2 \n",
+ " 451.6 \n",
+ " 40.0 \n",
+ " 1835214307 \n",
+ " NaN \n",
+ " 0.981400 \n",
+ " 0.527174 \n",
+ " 0.072323 \n",
+ " 0.852260 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 6754 \n",
+ " openml.org/t/168868 \n",
+ " APSFailure \n",
+ " RandomForest \n",
+ " 1h8c_gp3 \n",
+ " 9 \n",
+ " binary \n",
+ " 0.992451 \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.24.2 \n",
+ " ... \n",
+ " 277.8 \n",
+ " 0.8 \n",
+ " 2000.0 \n",
+ " 815597342 \n",
+ " NaN \n",
+ " 0.995132 \n",
+ " 0.894391 \n",
+ " 0.021782 \n",
+ " 0.992451 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
3 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework \\\n",
+ "6696 openml.org/t/359987 shuttle RandomForest \n",
+ "7275 openml.org/t/3945 KDDCup09_appetency mljarsupervised_benchmark \n",
+ "6754 openml.org/t/168868 APSFailure RandomForest \n",
+ "\n",
+ " constraint fold type result metric mode version \\\n",
+ "6696 1h8c_gp3 3 multiclass -0.000628 neg_logloss aws.docker 0.24.2 \n",
+ "7275 1h8c_gp3 7 binary 0.852260 auc aws.docker 0.11.0 \n",
+ "6754 1h8c_gp3 9 binary 0.992451 auc aws.docker 0.24.2 \n",
+ "\n",
+ " ... training_duration predict_duration models_count seed info \\\n",
+ "6696 ... 10.0 0.7 2000.0 815597336 NaN \n",
+ "7275 ... 3647.2 451.6 40.0 1835214307 NaN \n",
+ "6754 ... 277.8 0.8 2000.0 815597342 NaN \n",
+ "\n",
+ " acc balacc logloss auc models_ensemble_count \n",
+ "6696 0.999828 0.857143 0.000628 NaN NaN \n",
+ "7275 0.981400 0.527174 0.072323 0.852260 NaN \n",
+ "6754 0.995132 0.894391 0.021782 0.992451 NaN \n",
+ "\n",
+ "[3 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "classification = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/latest/classification_1h8c.csv\")\n",
+ "classification_jobs = set(itertools.product(classification[\"task\"].unique(), classification[\"fold\"].unique()))\n",
+ "classification.sample(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "5e0722fe",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "classification = filter_for_latest_results(classification)\n",
+ "grouped_by_fw_task = classification.groupby([\"framework\", \"task\"]).count()[\"fold\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e0a403c5",
+ "metadata": {},
+ "source": [
+ "## 2.1 Missing Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "c23364ed",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "framework\n",
+ "AutoGluon_benchmark 0\n",
+ "GAMA_benchmark 0\n",
+ "H2OAutoML 0\n",
+ "MLPlanWEKA 24\n",
+ "RandomForest 0\n",
+ "TPOT 0\n",
+ "TunedRandomForest 0\n",
+ "autosklearn 0\n",
+ "autosklearn2 0\n",
+ "autoxgboost 10\n",
+ "flaml 0\n",
+ "lightautoml 0\n",
+ "mljarsupervised_benchmark 1\n",
+ "mlr3automl 0\n",
+ "Name: fold, dtype: int64"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_by_framework = (n_classification_jobs - classification.groupby(\"framework\").count()[\"fold\"])\n",
+ "missing_by_framework"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "59cd91ba",
+ "metadata": {},
+ "source": [
+ "Why are results missing?\n",
+ "\n",
+ " - **autoxgboost (10):** Forgot to run upselling. **redo**\n",
+ " - **mljar (1):** Results not uploaded to bucket **?**\n",
+ " \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "04cdf202",
+ "metadata": {},
+ "source": [
+ "### autosklearn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "52347a00",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"autosklearn\"][grouped_by_fw_task[\"autosklearn\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0c896182",
+ "metadata": {},
+ "source": [
+ "### autosklearn 2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "9e75e9e6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"autosklearn2\"][grouped_by_fw_task[\"autosklearn2\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1d286fea",
+ "metadata": {},
+ "source": [
+ "Reran some `Upselling` folds as they were terminated by our CPU monitor.\n",
+ "```\n",
+ "0 0 days 01:31:39\n",
+ "6 0 days 01:05:56\n",
+ "9 0 days 00:55:38\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9507c75d",
+ "metadata": {},
+ "source": [
+ "### autoxgboost"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 108,
+ "id": "debd8a73",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 108,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"autoxgboost\"][grouped_by_fw_task[\"autoxgboost\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "50f55288",
+ "metadata": {},
+ "source": [
+ "Forgot to run `Upselling`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "edce295c",
+ "metadata": {},
+ "source": [
+ "### GAMA"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "97ebf56f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"GAMA_benchmark\"][grouped_by_fw_task[\"GAMA_benchmark\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2043d53b",
+ "metadata": {},
+ "source": [
+ "Reran some `Upselling` folds as they were terminated by our CPU monitor.\n",
+ "Old message: `Upselling` failed on folds `0, 1, 2, 4, 5, 8` because it was terminated with idle CPU activity for 30 minutes, less than 3600 seconds after surrendering control to GAMA. The latest termination was at ~4300 seconds, while control is surrendered to GAMA about ~1500 seconds in, which means it is well within the 3600 second budget. While the CPU inactivity is most likely caused by a bug in GAMA, it should be unrelated to its ability to terminate \"successfully\". I fully expect it to terminate `train` within 3600 seconds and to try to produce predictions (which will either work or fail quickly).\n",
+ "\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "954c7f5e",
+ "metadata": {},
+ "source": [
+ "### MLJar"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 110,
+ "id": "4ddd6124",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "task\n",
+ "dionis 9\n",
+ "Name: fold, dtype: int64"
+ ]
+ },
+ "execution_count": 110,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"mljarsupervised_benchmark\"][grouped_by_fw_task[\"mljarsupervised_benchmark\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "261927a8",
+ "metadata": {},
+ "source": [
+ "Exceeded the time limit three times (terminated after 7500sec). Memory usage 100%."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "83a1fa02",
+ "metadata": {},
+ "source": [
+ "### MLPlanWEKA\n",
+ "To be revisited after consultation with the authors."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2171ae8e",
+ "metadata": {},
+ "source": [
+ "### TPOT\n",
+ "Instances aborted due to CPU inactivity *after* the time budget is expired."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "e7c0fe39",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"TPOT\"][grouped_by_fw_task[\"TPOT\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fe2aa9c7",
+ "metadata": {},
+ "source": [
+ "Reran some jobs as they were terminated by our CPU monitor."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "25095a8e",
+ "metadata": {},
+ "source": [
+ "Let's first look at the problems, `amazon-commerce-reviews.5`:\n",
+ "```\n",
+ "[INFO] [amlb.runners.aws:21:34:42.691] [2021-11-26T20:34:42] checking job aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.TPOT on instance i-0c81d19d8ed8dc27b: running [16].\n",
+ "[WARNING] [amlb.runners.aws:21:34:43.650] WARN: Instance i-0c81d19d8ed8dc27b (aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.tpot) has no CPU activity in the last 30 minutes.\n",
+ "[ERROR] [amlb.runners.aws:21:35:13.085] Job aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.TPOT failed with: Aborting instance i-0c81d19d8ed8dc27b for job aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.TPOT.\n",
+ " 'aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.TPOT.',\n",
+ "[INFO] [amlb.job:21:35:13.107] Job `aws.openml_s_271.1h8c_gp3.amazon-commerce-reviews.5.TPOT` executed in 6876.356 seconds.\n",
+ "```\n",
+ "Seems like it was already exceeding runtime by a large margin but then froze."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a6524e71",
+ "metadata": {},
+ "source": [
+ "`kddcup99.7` is another case of inactivity after exceeding the time limit:\n",
+ "```\n",
+ "pieternwo@openml:/openml_db/automlbenchmark/classification_1h8c/tpot.openml_s_271.1h8c_gp3.aws.20211126T183739$ cat logs/runbenchmark.20211126T183739.log | grep kddcup99.7\n",
+ "[WARNING] [amlb.runners.aws:05:13:34.476] WARN: Instance i-0d8be38b159e7c5a4 (aws.openml_s_271.1h8c_gp3.kddcup99.7.tpot) has no CPU activity in the last 30 minutes.\n",
+ "[INFO] [amlb.runners.aws:05:13:18.737] [2021-11-27T04:13:18] checking job aws.openml_s_271.1h8c_gp3.KDDCup99.7.TPOT on instance i-0d8be38b159e7c5a4: running [16].\n",
+ "[ERROR] [amlb.runners.aws:05:13:48.961] Job aws.openml_s_271.1h8c_gp3.KDDCup99.7.TPOT failed with: Aborting instance i-0d8be38b159e7c5a4 for job aws.openml_s_271.1h8c_gp3.KDDCup99.7.TPOT.\n",
+ " 'aws.openml_s_271.1h8c_gp3.KDDCup99.7.TPOT.',\n",
+ "[INFO] [amlb.job:05:13:48.979] Job `aws.openml_s_271.1h8c_gp3.KDDCup99.7.TPOT` executed in 5044.440 seconds.\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5ce9c6d5",
+ "metadata": {},
+ "source": [
+ "## 2.2 Failed Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "0c91590e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "classification_errors = classification[~classification[\"info\"].isna()][[\"framework\", \"task\", \"fold\", \"info\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d88d3464",
+ "metadata": {},
+ "source": [
+ "### 2.2.1 AutoGluon"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "093a4790",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"AutoGluon_benchmark\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c81c765d",
+ "metadata": {},
+ "source": [
+ "### 2.2.2 Autosklearn\n",
+ "**Failures**: 1\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "91d49320",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " autosklearn \n",
+ " KDDCup09-Upselling \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "autosklearn KDDCup09-Upselling 1 1"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autosklearn\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "b8fbc5ba",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3567 \n",
+ " autosklearn \n",
+ " KDDCup09-Upselling \n",
+ " 4 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold info\n",
+ "3567 autosklearn KDDCup09-Upselling 4 NoResultError: "
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "askl = classification_errors[(classification_errors[\"framework\"] == \"autosklearn\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "askl"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ade0d6a6",
+ "metadata": {},
+ "source": [
+ "Memory Error"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3170e098",
+ "metadata": {},
+ "source": [
+ "### Autosklearn 2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "d07a0b4f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autosklearn2\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec90d91b",
+ "metadata": {},
+ "source": [
+ "### 2.2.3 AutoXGBoost\n",
+ "\n",
+ "**Failures**: 98\n",
+ "\n",
+ "**Reruns required**: 20 ? \n",
+ "\n",
+ "A lot of memory errors, some errors that arise due numerical issues (?) and two datasets affected by what seems like a bug in data loading and/or processing train/test sets. Asked Janek to look into this."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "7fe85ec5",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 67 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " autoxgboost \n",
+ " Click_prediction_small \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " Fashion-MNIST \n",
+ " 8 \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 8 \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " albert \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " covertype \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " helena \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " okcupid-stem \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " porto-seguro \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " robert \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " sf-police-incidents \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "autoxgboost Click_prediction_small 1 1\n",
+ " Fashion-MNIST 8 8\n",
+ " KDDCup09_appetency 8 8\n",
+ " KDDCup99 10 10\n",
+ " albert 10 10\n",
+ " covertype 10 10\n",
+ " dionis 10 10\n",
+ " helena 10 10\n",
+ " okcupid-stem 10 10\n",
+ " porto-seguro 1 1\n",
+ " robert 10 10\n",
+ " sf-police-incidents 10 10"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autoxgboost\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "id": "838ad5ba",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2234 \n",
+ " autoxgboost \n",
+ " Click_prediction_small \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2469 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2235 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2625 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2461 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 4 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2546 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2591 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 6 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2294 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 7 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2454 \n",
+ " autoxgboost \n",
+ " KDDCup09_appetency \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2540 \n",
+ " autoxgboost \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2775 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2588 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2612 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 2 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2823 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2233 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 4 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2716 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2793 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 6 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2549 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 7 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2748 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2371 \n",
+ " autoxgboost \n",
+ " okcupid-stem \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2611 \n",
+ " autoxgboost \n",
+ " porto-seguro \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2574 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2314 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2430 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 2 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2662 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2819 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 4 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2440 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2689 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 6 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2211 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 7 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2446 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2163 \n",
+ " autoxgboost \n",
+ " sf-police-incidents \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "2234 autoxgboost Click_prediction_small 8 \n",
+ "2469 autoxgboost KDDCup09_appetency 0 \n",
+ "2235 autoxgboost KDDCup09_appetency 1 \n",
+ "2625 autoxgboost KDDCup09_appetency 3 \n",
+ "2461 autoxgboost KDDCup09_appetency 4 \n",
+ "2546 autoxgboost KDDCup09_appetency 5 \n",
+ "2591 autoxgboost KDDCup09_appetency 6 \n",
+ "2294 autoxgboost KDDCup09_appetency 7 \n",
+ "2454 autoxgboost KDDCup09_appetency 9 \n",
+ "2540 autoxgboost KDDCup99 9 \n",
+ "2775 autoxgboost okcupid-stem 0 \n",
+ "2588 autoxgboost okcupid-stem 1 \n",
+ "2612 autoxgboost okcupid-stem 2 \n",
+ "2823 autoxgboost okcupid-stem 3 \n",
+ "2233 autoxgboost okcupid-stem 4 \n",
+ "2716 autoxgboost okcupid-stem 5 \n",
+ "2793 autoxgboost okcupid-stem 6 \n",
+ "2549 autoxgboost okcupid-stem 7 \n",
+ "2748 autoxgboost okcupid-stem 8 \n",
+ "2371 autoxgboost okcupid-stem 9 \n",
+ "2611 autoxgboost porto-seguro 5 \n",
+ "2574 autoxgboost sf-police-incidents 0 \n",
+ "2314 autoxgboost sf-police-incidents 1 \n",
+ "2430 autoxgboost sf-police-incidents 2 \n",
+ "2662 autoxgboost sf-police-incidents 3 \n",
+ "2819 autoxgboost sf-police-incidents 4 \n",
+ "2440 autoxgboost sf-police-incidents 5 \n",
+ "2689 autoxgboost sf-police-incidents 6 \n",
+ "2211 autoxgboost sf-police-incidents 7 \n",
+ "2446 autoxgboost sf-police-incidents 8 \n",
+ "2163 autoxgboost sf-police-incidents 9 \n",
+ "\n",
+ " info \n",
+ "2234 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2469 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2235 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2625 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2461 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2546 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2591 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2294 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2454 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2540 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2775 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2588 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2612 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2823 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2233 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2716 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2793 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2549 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2748 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2371 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2611 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2574 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2314 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2430 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2662 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2819 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2440 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2689 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2211 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2446 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2163 CalledProcessError: Command 'Rscript --vanilla... "
+ ]
+ },
+ "execution_count": 119,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "axgb = classification_errors[(classification_errors[\"framework\"] == \"autoxgboost\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "axgb"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7c4ae2c7",
+ "metadata": {},
+ "source": [
+ "In the regression we saw that it encountered similar errors (exit code 1 and 137), both of which seemed to stem from memory issues. For this reason, I will only sample one result per dataset:\n",
+ " - `Click-prediction.8`: Not a clear sign of memory issues:\n",
+ " ```\n",
+ " Error in chol.default(R) :\n",
+ " the leading minor of order 1 is not positive definite\n",
+ "Calls: run ... km1Nugget.init -> apply -> FUN -> chol -> chol.default\n",
+ "In addition: Warning message:\n",
+ "In runif(n = ninit, min = 1/2 * angle.init, max = min(3/2 * angle.init, :\n",
+ " NAs produced\n",
+ "Timing stopped at: 258.6 27.09 267\n",
+ "Execution halted\n",
+ "[ERROR] [amlb.benchmark:17:19:47.879] Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42733/dataset_train_8.arff', '/input/org/openml/www/datasets/42733/dataset_test_8.arff', target.index = 1, 'classification', '/output/predictions/Click_prediction_small/8/predictions.csv', 8, time.budget = 3600, meta_results_file='/output/meta_results.csv')\"' returned non-zero exit status 1.\n",
+ " ```\n",
+ " - `KDDCup09-Appetency.0`: Same error.\n",
+ " - `KDDCup09-Appetency.1`: Another internal error.\n",
+ " ```\n",
+ " Error in chol.default(R) :\n",
+ " the leading minor of order 1 is not positive definite\n",
+ "Calls: run ... km1Nugget.init -> apply -> FUN -> chol -> chol.default\n",
+ "In addition: Warning message:\n",
+ "In runif(n = ninit, min = 1/2 * angle.init, max = min(3/2 * angle.init, :\n",
+ " NAs produced\n",
+ "Timing stopped at: 258.6 27.09 267\n",
+ "Execution halted\n",
+ "[ERROR] [amlb.benchmark:17:19:47.879] Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42733/dataset_train_8.arff', '/input/org/openml/www/datasets/42733/dataset_test_8.arff', target.index = 1, 'classification', '/output/predictions/Click_prediction_small/8/predictions.csv', 8, time.budget = 3600, meta_results_file='/output/meta_results.csv')\"' returned non-zero exit status 1.\n",
+ " ```\n",
+ " - `KDDCup09-Appetency.3`: positive definite.\n",
+ " - Skipping remainder of `KDDCup09-Appetency`.\n",
+ " - `KDDCup99.9`: Internal error.\n",
+ " ```\n",
+ " Parse with reader=readr : /input/org/openml/www/datasets/42746/dataset_train_9.arff\n",
+ "Loading required package: readr\n",
+ "header: 0.034000; preproc: 1.847000; data: 14.380000; postproc: 0.761000; total: 17.022000\n",
+ "Warning in makeTask(type = type, data = data, weights = weights, blocking = blocking, :\n",
+ " Empty factor levels were dropped for columns: service\n",
+ "Error in assertPropertiesOk(present.properties, allowed.properties, whichfun, :\n",
+ " Data returned by CPO trafo has property missings that impact.encode.classif did not declare in .properties.needed.\n",
+ "Calls: run ... checkOutputProperties -> assertPropertiesOk -> stopf\n",
+ "Timing stopped at: 106.1 7.325 113.4\n",
+ "Execution halted\n",
+ "[ERROR] [amlb.benchmark:16:26:03.447] Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42746/data\n",
+ "set_train_9.arff', '/input/org/openml/www/datasets/42746/dataset_test_9.arff', target.index = 42, 'classification', '/output/predictions/KDDCup99/9/predictions.csv', 8, time.budget = 3600, meta_results_file='/ou\n",
+ "tput/meta_results.csv')\"' returned non-zero exit status 1.\n",
+ " ```\n",
+ " - `okcupid-stem.0`: Internal error, since it seems a data issue (same as `sf-police-incidents`), skipping the remainder `okcupid`.\n",
+ " - `portoseguro.5`: positive definite.\n",
+ " - `sf-police-incidents.0`: Looks like the same data issue as `okcupid` and \n",
+ " ```\n",
+ " Error in names(x) <- value :\n",
+ " 'names' attribute [9] must be the same length as the vector [1]\n",
+ "Calls: run -> -> colnames<-\n",
+ "In addition: Warning message:\n",
+ "One or more parsing issues, see `problems()` for details\n",
+ "Execution halted\n",
+ "[ERROR] [amlb.benchmark:16:04:13.220] Command 'Rscript --vanilla -e \".libPaths('/bench/frameworks/autoxgboost/lib'); source('/bench/frameworks/autoxgboost/exec.R'); run('/input/org/openml/www/datasets/42732/data\n",
+ "set_train_0.arff', '/input/org/openml/www/datasets/42732/dataset_test_0.arff', target.index = 9, 'classification', '/output/predictions/sf-police-incidents/0/predictions.csv', 8, time.budget = 3600, meta_results\n",
+ "_file='/output/meta_results.csv')\"' returned non-zero exit status 1.\n",
+ " ```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "06ebde54",
+ "metadata": {},
+ "source": [
+ "### 2.2.4 FLAML\n",
+ "\n",
+ "**Failures**: 18\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Framework errors (memory)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "1dd8387c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " guillermo \n",
+ " 6 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " riccardo \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "flaml KDDCup09-Upselling 10 10\n",
+ " dionis 1 1\n",
+ " guillermo 6 6\n",
+ " riccardo 1 1"
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"flaml\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "495931a5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2140 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 0 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2135 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 1 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2136 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 2 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2138 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2137 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 4 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2139 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 5 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2142 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 6 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2134 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2141 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 8 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 2133 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 9 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7850 \n",
+ " flaml \n",
+ " dionis \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 8248 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 8195 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 8413 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 8393 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7959 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 7 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7752 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 8211 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 4 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "2140 flaml KDDCup09-Upselling 0 \n",
+ "2135 flaml KDDCup09-Upselling 1 \n",
+ "2136 flaml KDDCup09-Upselling 2 \n",
+ "2138 flaml KDDCup09-Upselling 3 \n",
+ "2137 flaml KDDCup09-Upselling 4 \n",
+ "2139 flaml KDDCup09-Upselling 5 \n",
+ "2142 flaml KDDCup09-Upselling 6 \n",
+ "2134 flaml KDDCup09-Upselling 7 \n",
+ "2141 flaml KDDCup09-Upselling 8 \n",
+ "2133 flaml KDDCup09-Upselling 9 \n",
+ "7850 flaml dionis 5 \n",
+ "8248 flaml guillermo 0 \n",
+ "8195 flaml guillermo 3 \n",
+ "8413 flaml guillermo 4 \n",
+ "8393 flaml guillermo 5 \n",
+ "7959 flaml guillermo 7 \n",
+ "7752 flaml guillermo 8 \n",
+ "8211 flaml riccardo 4 \n",
+ "\n",
+ " info \n",
+ "2140 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2135 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2136 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2138 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2137 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2139 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2142 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2134 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2141 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "2133 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7850 CalledProcessError: Command '/bench/frameworks... \n",
+ "8248 CalledProcessError: Command '/bench/frameworks... \n",
+ "8195 CalledProcessError: Command '/bench/frameworks... \n",
+ "8413 CalledProcessError: Command '/bench/frameworks... \n",
+ "8393 CalledProcessError: Command '/bench/frameworks... \n",
+ "7959 NoResultError: std::bad_alloc \n",
+ "7752 CalledProcessError: Command '/bench/frameworks... \n",
+ "8211 NoResultError: std::bad_alloc "
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "flaml = classification_errors[(classification_errors[\"framework\"] == \"flaml\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "flaml"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 45,
+ "id": "2bb93312",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13237) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13251) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13236) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13242) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13238) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13235) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13229) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13231) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13228) and data type int64',\n",
+ " \"CalledProcessError: Command '/bench/frameworks/flaml/venv/bin/python -W ignore /bench/frameworks/flaml/exec.py' returned non-zero exit status 137.\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/flaml/venv/bin/python -W ignore /bench/frameworks/flaml/exec.py' returned non-zero exit status 139.\",\n",
+ " 'NoResultError: std::bad_alloc'], dtype=object)"
+ ]
+ },
+ "execution_count": 45,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "flaml[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1277ccdb",
+ "metadata": {},
+ "source": [
+ " - `dionis.5`: `killed` and exit code 137.\n",
+ " - `guillermo`: `killed` (137) and `segfault` (139)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d9a353fd",
+ "metadata": {},
+ "source": [
+ "### 2.2.5 GAMA\n",
+ "**Failures**: 37\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Errors due to a bug processing target labels (helena, wine, yeast) and memory (KDDCup). "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "id": "4bfce102",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " helena \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "GAMA_benchmark KDDCup09-Upselling 10 10\n",
+ " KDDCup99 10 10\n",
+ " helena 7 7\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"GAMA_benchmark\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 116,
+ "id": "271396b3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 4995 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4994 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4997 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4996 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3702 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4247 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3765 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 2 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3635 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3749 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: The least populated class in y ... \n",
+ " \n",
+ " \n",
+ " 4075 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " NoResultError: The least populated class in y ... \n",
+ " \n",
+ " \n",
+ " 3936 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4045 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3753 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3837 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3623 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 1 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3660 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 2 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3878 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 3 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 4208 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 4 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 3919 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 5 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 4175 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 7 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3949 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 9 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 3926 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3900 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 4 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4069 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3803 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3630 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3859 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4287 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 4296 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3802 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3684 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "4995 GAMA_benchmark KDDCup09-Upselling 3 \n",
+ "4994 GAMA_benchmark KDDCup09-Upselling 6 \n",
+ "4997 GAMA_benchmark KDDCup09-Upselling 7 \n",
+ "4996 GAMA_benchmark KDDCup09-Upselling 9 \n",
+ "3702 GAMA_benchmark KDDCup99 0 \n",
+ "4247 GAMA_benchmark KDDCup99 1 \n",
+ "3765 GAMA_benchmark KDDCup99 2 \n",
+ "3635 GAMA_benchmark KDDCup99 3 \n",
+ "3749 GAMA_benchmark KDDCup99 4 \n",
+ "4075 GAMA_benchmark KDDCup99 5 \n",
+ "3936 GAMA_benchmark KDDCup99 6 \n",
+ "4045 GAMA_benchmark KDDCup99 7 \n",
+ "3753 GAMA_benchmark KDDCup99 8 \n",
+ "3837 GAMA_benchmark KDDCup99 9 \n",
+ "3623 GAMA_benchmark helena 1 \n",
+ "3660 GAMA_benchmark helena 2 \n",
+ "3878 GAMA_benchmark helena 3 \n",
+ "4208 GAMA_benchmark helena 4 \n",
+ "3919 GAMA_benchmark helena 5 \n",
+ "4175 GAMA_benchmark helena 7 \n",
+ "3949 GAMA_benchmark helena 9 \n",
+ "3926 GAMA_benchmark wine-quality-white 3 \n",
+ "3900 GAMA_benchmark wine-quality-white 4 \n",
+ "4069 GAMA_benchmark wine-quality-white 5 \n",
+ "3803 GAMA_benchmark wine-quality-white 6 \n",
+ "3630 GAMA_benchmark wine-quality-white 7 \n",
+ "3859 GAMA_benchmark yeast 0 \n",
+ "4287 GAMA_benchmark yeast 1 \n",
+ "4296 GAMA_benchmark yeast 2 \n",
+ "3802 GAMA_benchmark yeast 3 \n",
+ "3684 GAMA_benchmark yeast 9 \n",
+ "\n",
+ " info \n",
+ "4995 NoResultError: 'NoneType' object is not iterable \n",
+ "4994 NoResultError: 'NoneType' object is not iterable \n",
+ "4997 NoResultError: 'NoneType' object is not iterable \n",
+ "4996 NoResultError: 'NoneType' object is not iterable \n",
+ "3702 NoResultError: 'NoneType' object is not iterable \n",
+ "4247 NoResultError: 'NoneType' object is not iterable \n",
+ "3765 NoResultError: 'NoneType' object is not iterable \n",
+ "3635 NoResultError: 'NoneType' object is not iterable \n",
+ "3749 NoResultError: The least populated class in y ... \n",
+ "4075 NoResultError: The least populated class in y ... \n",
+ "3936 NoResultError: 'NoneType' object is not iterable \n",
+ "4045 NoResultError: 'NoneType' object is not iterable \n",
+ "3753 NoResultError: 'NoneType' object is not iterable \n",
+ "3837 NoResultError: 'NoneType' object is not iterable \n",
+ "3623 NoResultError: \n",
+ "3660 NoResultError: \n",
+ "3878 NoResultError: \n",
+ "4208 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "3919 NoResultError: \n",
+ "4175 NoResultError: \n",
+ "3949 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "3926 NoResultError: 'NoneType' object is not iterable \n",
+ "3900 NoResultError: 'NoneType' object is not iterable \n",
+ "4069 NoResultError: 'NoneType' object is not iterable \n",
+ "3803 NoResultError: 'NoneType' object is not iterable \n",
+ "3630 NoResultError: 'NoneType' object is not iterable \n",
+ "3859 NoResultError: 'NoneType' object is not iterable \n",
+ "4287 NoResultError: 'NoneType' object is not iterable \n",
+ "4296 NoResultError: 'NoneType' object is not iterable \n",
+ "3802 NoResultError: 'NoneType' object is not iterable \n",
+ "3684 NoResultError: 'NoneType' object is not iterable "
+ ]
+ },
+ "execution_count": 116,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gama = classification_errors[(classification_errors[\"framework\"] == \"GAMA_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "gama"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ca79bed6",
+ "metadata": {},
+ "source": [
+ "Most results are `NoResultError: 'NoneType' object is not iterable.` which normally points to an error during the ensembling process (though previously it did not occur this often). Let's have a closer look to verify:\n",
+ " - `KDDCup99.0`: Unable to evaluate pipelines due to timeout, memory, and a mismatch in predicted vs actual labels. \n",
+ " - `helena.1`: The cache was also saved. Was able to store some pipelines. A `MemoryError` occurred while retrieving an evaluation from a subprocess.\n",
+ " - `wine-quality-white.3`: No results due to the label mismatch error.\n",
+ " - `yeast`: No results due to label mismatch error."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a34b9778",
+ "metadata": {},
+ "source": [
+ "### 2.2.6 H2O\n",
+ "All timeout errors"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "id": "5262fae3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 9 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " H2OAutoML \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "H2OAutoML KDDCup99 10 10"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"H2OAutoML\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 130,
+ "id": "ac7a58eb",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 9043 \n",
+ " H2OAutoML \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "9043 H2OAutoML KDDCup99 4 \n",
+ "\n",
+ " info \n",
+ "9043 NoResultError: Interrupting thread MainThread ... "
+ ]
+ },
+ "execution_count": 130,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "h2o = classification_errors[(classification_errors[\"framework\"] == \"H2OAutoML\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "h2o"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "id": "d1e0a7f8",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'NoResultError: Interrupting thread MainThread [ident=139723361433408] after 7200s timeout.'"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "h2o.iloc[0][\"info\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b911309a",
+ "metadata": {},
+ "source": [
+ "### 2.2.7 LightAutoML\n",
+ "\n",
+ "**Failures**: 43\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Seem to be framework errors, mostly memory issues, and some of the label mismatch errors. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 48,
+ "id": "dc93f58d",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 2 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 6 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " bank-marketing \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " nomao \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "lightautoml APSFailure 5 5\n",
+ " KDDCup09_appetency 6 6\n",
+ " KDDCup99 10 10\n",
+ " bank-marketing 1 1\n",
+ " dionis 10 10\n",
+ " nomao 1 1\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 48,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"lightautoml\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 121,
+ "id": "408d3565",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 543 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 379 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 670 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 138 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 13 \n",
+ " lightautoml \n",
+ " KDDCup09_appetency \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 430 \n",
+ " lightautoml \n",
+ " KDDCup09_appetency \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 577 \n",
+ " lightautoml \n",
+ " KDDCup09_appetency \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 408 \n",
+ " lightautoml \n",
+ " KDDCup09_appetency \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 91 \n",
+ " lightautoml \n",
+ " KDDCup09_appetency \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 467 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 593 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 2 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 50 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 3 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 597 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 603 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 334 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 6 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 31 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 653 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 627 \n",
+ " lightautoml \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 645 \n",
+ " lightautoml \n",
+ " bank-marketing \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 30 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 0 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 74 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 1 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 134 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 2 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 492 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 3 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 216 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 4 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 451 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 5 \n",
+ " NoResultError: Unable to allocate 2.12 GiB for... \n",
+ " \n",
+ " \n",
+ " 409 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 6 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 523 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 7 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 58 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 8 \n",
+ " NoResultError: Unable to allocate 2.12 GiB for... \n",
+ " \n",
+ " \n",
+ " 455 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 9 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 147 \n",
+ " lightautoml \n",
+ " nomao \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 369 \n",
+ " lightautoml \n",
+ " wine-quality-white \n",
+ " 3 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 433 \n",
+ " lightautoml \n",
+ " wine-quality-white \n",
+ " 4 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 137 \n",
+ " lightautoml \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 686 \n",
+ " lightautoml \n",
+ " wine-quality-white \n",
+ " 6 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 642 \n",
+ " lightautoml \n",
+ " wine-quality-white \n",
+ " 7 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 204 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 185 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 306 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 163 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 97 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "543 lightautoml APSFailure 2 \n",
+ "379 lightautoml APSFailure 3 \n",
+ "670 lightautoml APSFailure 7 \n",
+ "138 lightautoml APSFailure 9 \n",
+ "13 lightautoml KDDCup09_appetency 0 \n",
+ "430 lightautoml KDDCup09_appetency 1 \n",
+ "577 lightautoml KDDCup09_appetency 3 \n",
+ "408 lightautoml KDDCup09_appetency 4 \n",
+ "91 lightautoml KDDCup09_appetency 5 \n",
+ "0 lightautoml KDDCup99 0 \n",
+ "467 lightautoml KDDCup99 1 \n",
+ "593 lightautoml KDDCup99 2 \n",
+ "50 lightautoml KDDCup99 3 \n",
+ "597 lightautoml KDDCup99 4 \n",
+ "603 lightautoml KDDCup99 5 \n",
+ "334 lightautoml KDDCup99 6 \n",
+ "31 lightautoml KDDCup99 7 \n",
+ "653 lightautoml KDDCup99 8 \n",
+ "627 lightautoml KDDCup99 9 \n",
+ "645 lightautoml bank-marketing 7 \n",
+ "30 lightautoml dionis 0 \n",
+ "74 lightautoml dionis 1 \n",
+ "134 lightautoml dionis 2 \n",
+ "492 lightautoml dionis 3 \n",
+ "216 lightautoml dionis 4 \n",
+ "451 lightautoml dionis 5 \n",
+ "409 lightautoml dionis 6 \n",
+ "523 lightautoml dionis 7 \n",
+ "58 lightautoml dionis 8 \n",
+ "455 lightautoml dionis 9 \n",
+ "147 lightautoml nomao 6 \n",
+ "369 lightautoml wine-quality-white 3 \n",
+ "433 lightautoml wine-quality-white 4 \n",
+ "137 lightautoml wine-quality-white 5 \n",
+ "686 lightautoml wine-quality-white 6 \n",
+ "642 lightautoml wine-quality-white 7 \n",
+ "204 lightautoml yeast 0 \n",
+ "185 lightautoml yeast 1 \n",
+ "306 lightautoml yeast 2 \n",
+ "163 lightautoml yeast 3 \n",
+ "97 lightautoml yeast 9 \n",
+ "\n",
+ " info \n",
+ "543 CalledProcessError: Command '/bench/frameworks... \n",
+ "379 CalledProcessError: Command '/bench/frameworks... \n",
+ "670 CalledProcessError: Command '/bench/frameworks... \n",
+ "138 CalledProcessError: Command '/bench/frameworks... \n",
+ "13 CalledProcessError: Command '/bench/frameworks... \n",
+ "430 CalledProcessError: Command '/bench/frameworks... \n",
+ "577 CalledProcessError: Command '/bench/frameworks... \n",
+ "408 CalledProcessError: Command '/bench/frameworks... \n",
+ "91 CalledProcessError: Command '/bench/frameworks... \n",
+ "0 NoResultError: Pipeline finished with 0 models... \n",
+ "467 NoResultError: Pipeline finished with 0 models... \n",
+ "593 NoResultError: Pipeline finished with 0 models... \n",
+ "50 NoResultError: Pipeline finished with 0 models... \n",
+ "597 NoResultError: Pipeline finished with 0 models... \n",
+ "603 NoResultError: Pipeline finished with 0 models... \n",
+ "334 NoResultError: Pipeline finished with 0 models... \n",
+ "31 NoResultError: Pipeline finished with 0 models... \n",
+ "653 NoResultError: Pipeline finished with 0 models... \n",
+ "627 NoResultError: Pipeline finished with 0 models... \n",
+ "645 CalledProcessError: Command '/bench/frameworks... \n",
+ "30 NoResultError: A worker process managed by the... \n",
+ "74 NoResultError: A worker process managed by the... \n",
+ "134 NoResultError: A worker process managed by the... \n",
+ "492 NoResultError: A worker process managed by the... \n",
+ "216 NoResultError: A worker process managed by the... \n",
+ "451 NoResultError: Unable to allocate 2.12 GiB for... \n",
+ "409 NoResultError: A worker process managed by the... \n",
+ "523 NoResultError: A worker process managed by the... \n",
+ "58 NoResultError: Unable to allocate 2.12 GiB for... \n",
+ "455 NoResultError: A worker process managed by the... \n",
+ "147 CalledProcessError: Command '/bench/frameworks... \n",
+ "369 NoResultError: Pipeline finished with 0 models... \n",
+ "433 NoResultError: Pipeline finished with 0 models... \n",
+ "137 NoResultError: Pipeline finished with 0 models... \n",
+ "686 NoResultError: Pipeline finished with 0 models... \n",
+ "642 NoResultError: Pipeline finished with 0 models... \n",
+ "204 NoResultError: Pipeline finished with 0 models... \n",
+ "185 NoResultError: Pipeline finished with 0 models... \n",
+ "306 NoResultError: Pipeline finished with 0 models... \n",
+ "163 NoResultError: Pipeline finished with 0 models... \n",
+ "97 NoResultError: Pipeline finished with 0 models... "
+ ]
+ },
+ "execution_count": 121,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lama = classification_errors[(classification_errors[\"framework\"] == \"lightautoml\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "lama"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "id": "9c5c007c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([\"CalledProcessError: Command '/bench/frameworks/lightautoml/venv/bin/python -W ignore /bench/frameworks/lightautoml/exec.py' returned non-zero exit status 139.\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/lightautoml/venv/bin/python -W ignore /bench/frameworks/lightautoml/exec.py' returned non-zero exit status 134.\",\n",
+ " 'NoResultError: Pipeline finished with 0 models for some reason.\\nProbably one or more models failed',\n",
+ " 'NoResultError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing th…',\n",
+ " 'NoResultError: Unable to allocate 2.12 GiB for an array with shape (100000, 355, 8) and data type float64'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lama[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3fefc294",
+ "metadata": {},
+ "source": [
+ "In more detail:\n",
+ " - `APSFailure`: Exit status 139 through `Segmentation fault (core dumped)`.\n",
+ " - `KDDCup09_Appetency`: 0 and 5 had a `segfault`, 1, 3 and 4 had the following error:\n",
+ " ```\n",
+ " FAIL (2021-11-21T14:02:02.126543Z): This should be unreachable\n",
+ " catboost/private/libs/algo/tensor_search_helpers.cpp:99\n",
+ " GetSplit() failed\n",
+ "??+0 (0x7F50DA105759)\n",
+ "...\n",
+ "??+0 (0x7F517B36A6DB)\n",
+ "clone+63 (0x7F517A49F71F)\n",
+ "Aborted (core dumped)\n",
+ "[ERROR] [amlb.benchmark:14:02:02.324] Command '/bench/frameworks/lightautoml/venv/bin/python -W ignore /bench/frameworks/lightautoml/exec.py' returned non-zero exit status 134.\n",
+ " ```\n",
+ " - `KDDCup99`:\n",
+ " ```\n",
+ " [DEBUG] [amlb.utils.process:18:35:27.299] Model Lvl_0_Pipe_0_Mod_0_LinearL2 failed during ml_algo.fit_predict call.\n",
+ "y_true and y_pred contain different number of classes 22, 23. Please provide the true labels explicitly through the labels argument. Classes found in y_true: [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]\n",
+ "Traceback (most recent call last):\n",
+ " ``` \n",
+ " - `bank-marketing.7`: segfault.\n",
+ " - `dionis`: Message points to memory issues:\n",
+ " ```\n",
+ " joblib.externals.loky.process_executor.TerminatedWorkerError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing the Operating System to kill the worker.\n",
+ "The exit codes of the workers are {SIGKILL(-9)}\n",
+ " ```\n",
+ " - `nomao.6`: segfault.\n",
+ " - `wine-quality-white`: `y_true and y_pred contain different number of classes 6, 7.`\n",
+ " - `yeast`: `y_true and y_pred contain different number of classes 9, 10.`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cfa94f54",
+ "metadata": {},
+ "source": [
+ "### 2.2.8 MLJar\n",
+ "\n",
+ "**Failures**: 80\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Framework errors, mostly `catboost` errors."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "id": "8c4f6684",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " Internet-Advertisements \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " PhishingWebsites \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " Satellite \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " adult \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " bank-marketing \n",
+ " 6 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " blood-transfusion-service-center \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " cnae-9 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " credit-g \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " nomao \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " ozone-level-8hr \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " phoneme \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " qsar-biodeg \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " wilt \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mljarsupervised_benchmark APSFailure 1 1\n",
+ " Internet-Advertisements 2 2\n",
+ " KDDCup09_appetency 2 2\n",
+ " PhishingWebsites 5 5\n",
+ " Satellite 2 2\n",
+ " adult 10 10\n",
+ " bank-marketing 6 6\n",
+ " blood-transfusion-service-center 10 10\n",
+ " cnae-9 1 1\n",
+ " credit-g 10 10\n",
+ " dionis 7 7\n",
+ " nomao 5 5\n",
+ " ozone-level-8hr 3 3\n",
+ " phoneme 7 7\n",
+ " qsar-biodeg 5 5\n",
+ " wilt 4 4"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mljarsupervised_benchmark\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 125,
+ "id": "5381fa22",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6676 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 3 \n",
+ " NoResultError: \"['Ensemble_prediction_0_for_ne... \n",
+ " \n",
+ " \n",
+ " 7779 \n",
+ " mljarsupervised_benchmark \n",
+ " Internet-Advertisements \n",
+ " 0 \n",
+ " NoResultError: \"['Ensemble_prediction_0_for_ad... \n",
+ " \n",
+ " \n",
+ " 6815 \n",
+ " mljarsupervised_benchmark \n",
+ " Internet-Advertisements \n",
+ " 8 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6814 \n",
+ " mljarsupervised_benchmark \n",
+ " KDDCup09_appetency \n",
+ " 1 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6554 \n",
+ " mljarsupervised_benchmark \n",
+ " KDDCup09_appetency \n",
+ " 5 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 6673 \n",
+ " mljarsupervised_benchmark \n",
+ " qsar-biodeg \n",
+ " 8 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6429 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 0 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6432 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 5 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6818 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 8 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6821 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 9 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
80 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "6676 mljarsupervised_benchmark APSFailure 3 \n",
+ "7779 mljarsupervised_benchmark Internet-Advertisements 0 \n",
+ "6815 mljarsupervised_benchmark Internet-Advertisements 8 \n",
+ "6814 mljarsupervised_benchmark KDDCup09_appetency 1 \n",
+ "6554 mljarsupervised_benchmark KDDCup09_appetency 5 \n",
+ "... ... ... ... \n",
+ "6673 mljarsupervised_benchmark qsar-biodeg 8 \n",
+ "6429 mljarsupervised_benchmark wilt 0 \n",
+ "6432 mljarsupervised_benchmark wilt 5 \n",
+ "6818 mljarsupervised_benchmark wilt 8 \n",
+ "6821 mljarsupervised_benchmark wilt 9 \n",
+ "\n",
+ " info \n",
+ "6676 NoResultError: \"['Ensemble_prediction_0_for_ne... \n",
+ "7779 NoResultError: \"['Ensemble_prediction_0_for_ad... \n",
+ "6815 NoResultError: catboost/libs/data/model_datase... \n",
+ "6814 NoResultError: catboost/libs/data/model_datase... \n",
+ "6554 NoResultError: catboost/libs/data/model_datase... \n",
+ "... ... \n",
+ "6673 NoResultError: catboost/libs/data/model_datase... \n",
+ "6429 NoResultError: catboost/libs/data/model_datase... \n",
+ "6432 NoResultError: catboost/libs/data/model_datase... \n",
+ "6818 NoResultError: catboost/libs/data/model_datase... \n",
+ "6821 NoResultError: catboost/libs/data/model_datase... \n",
+ "\n",
+ "[80 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 125,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mljar = classification_errors[(classification_errors[\"framework\"] == \"mljarsupervised_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "mljar"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fd4b2d1b",
+ "metadata": {},
+ "source": [
+ "### 2.2.9 MLPlan\n",
+ "\n",
+ "To be redone"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "072c54ea",
+ "metadata": {},
+ "source": [
+ "### 2.2.10 MLR3AutoML\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f0546317",
+ "metadata": {},
+ "source": [
+ "**Failures**: 13\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 50,
+ "id": "2a610113",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mlr3automl \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mlr3automl KDDCup09-Upselling 3 3\n",
+ " KDDCup99 10 10"
+ ]
+ },
+ "execution_count": 50,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mlr3automl\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "5d8562b6",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3085 \n",
+ " mlr3automl \n",
+ " KDDCup09-Upselling \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3119 \n",
+ " mlr3automl \n",
+ " KDDCup09-Upselling \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2987 \n",
+ " mlr3automl \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3211 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3429 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3394 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 2 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3014 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 3 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2974 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2892 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3128 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 6 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2936 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 3529 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ " 2973 \n",
+ " mlr3automl \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " CalledProcessError: Command 'Rscript --vanilla... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "3085 mlr3automl KDDCup09-Upselling 0 \n",
+ "3119 mlr3automl KDDCup09-Upselling 1 \n",
+ "2987 mlr3automl KDDCup09-Upselling 3 \n",
+ "3211 mlr3automl KDDCup99 0 \n",
+ "3429 mlr3automl KDDCup99 1 \n",
+ "3394 mlr3automl KDDCup99 2 \n",
+ "3014 mlr3automl KDDCup99 3 \n",
+ "2974 mlr3automl KDDCup99 4 \n",
+ "2892 mlr3automl KDDCup99 5 \n",
+ "3128 mlr3automl KDDCup99 6 \n",
+ "2936 mlr3automl KDDCup99 7 \n",
+ "3529 mlr3automl KDDCup99 8 \n",
+ "2973 mlr3automl KDDCup99 9 \n",
+ "\n",
+ " info \n",
+ "3085 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3119 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2987 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3211 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3429 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3394 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3014 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2974 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2892 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3128 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2936 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "3529 CalledProcessError: Command 'Rscript --vanilla... \n",
+ "2973 CalledProcessError: Command 'Rscript --vanilla... "
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mlr = classification_errors[(classification_errors[\"framework\"] == \"mlr3automl\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "mlr"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "310d2620",
+ "metadata": {},
+ "source": [
+ " - `KDDCup99`: \n",
+ " \n",
+ " `0, 9`: `system call failed: Cannot allocate memory`\n",
+ " \n",
+ " `1, 2, 3, 4, 5, 6, 7, 8`: \n",
+ " ```\n",
+ " Error: Failed to retrieve the result of MulticoreFuture (future_mapply-1) from the forked worker (on localhost; PID 611). Post-mortem diagnostic: No process exists with this PID, i.e. the forked localhost worker is no longer alive. Detected a non-exportable reference (‘externalptr’) in one of the globals () used in the future expression\n",
+ "In addition: Warning message:\n",
+ "In mccollect(jobs = jobs, wait = TRUE) :\n",
+ " 1 parallel job did not deliver a result\n",
+ "Timing stopped at: 2473 188.3 2370\n",
+ "Execution halted\n",
+ " ```\n",
+ " - `KDDCup09-Upselling`:\n",
+ " \n",
+ " `0, 1, 3`: `system call failed: Cannot allocate memory` (when trying to fork)\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c72f8ba3",
+ "metadata": {},
+ "source": [
+ "### 2.2.11 TPOT\n",
+ "\n",
+ "**Failures**: 50\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 51,
+ "id": "7f67c178",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 27 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " amazon-commerce-reviews \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " arcene \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " christine \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " philippine \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " sf-police-incidents \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TPOT KDDCup09-Upselling 10 10\n",
+ " KDDCup09_appetency 1 1\n",
+ " KDDCup99 10 10\n",
+ " amazon-commerce-reviews 3 3\n",
+ " arcene 4 4\n",
+ " christine 2 2\n",
+ " dionis 9 9\n",
+ " philippine 1 1\n",
+ " sf-police-incidents 1 1\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 51,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TPOT\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "id": "262c495c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 756 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 819 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 853 \n",
+ " TPOT \n",
+ " amazon-commerce-reviews \n",
+ " 2 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1129 \n",
+ " TPOT \n",
+ " amazon-commerce-reviews \n",
+ " 8 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1324 \n",
+ " TPOT \n",
+ " amazon-commerce-reviews \n",
+ " 9 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 8477 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 1 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 831 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 4 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 8476 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 8 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 974 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 9 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1259 \n",
+ " TPOT \n",
+ " christine \n",
+ " 3 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1121 \n",
+ " TPOT \n",
+ " christine \n",
+ " 6 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 944 \n",
+ " TPOT \n",
+ " dionis \n",
+ " 0 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 988 \n",
+ " TPOT \n",
+ " dionis \n",
+ " 4 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1383 \n",
+ " TPOT \n",
+ " dionis \n",
+ " 9 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1142 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 3 \n",
+ " NoResultError: 'LinearSVC' object has no attri... \n",
+ " \n",
+ " \n",
+ " 1024 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 4 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 1183 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 767 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 6 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 1170 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 7 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 851 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: Expected n_neighbors <= n_sampl... \n",
+ " \n",
+ " \n",
+ " 991 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 1046 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 1238 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: 'LinearSVC' object has no attri... \n",
+ " \n",
+ " \n",
+ " 1063 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: Expected n_neighbors <= n_sampl... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "756 TPOT KDDCup99 0 \n",
+ "819 TPOT KDDCup99 1 \n",
+ "853 TPOT amazon-commerce-reviews 2 \n",
+ "1129 TPOT amazon-commerce-reviews 8 \n",
+ "1324 TPOT amazon-commerce-reviews 9 \n",
+ "8477 TPOT arcene 1 \n",
+ "831 TPOT arcene 4 \n",
+ "8476 TPOT arcene 8 \n",
+ "974 TPOT arcene 9 \n",
+ "1259 TPOT christine 3 \n",
+ "1121 TPOT christine 6 \n",
+ "944 TPOT dionis 0 \n",
+ "988 TPOT dionis 4 \n",
+ "1383 TPOT dionis 9 \n",
+ "1142 TPOT wine-quality-white 3 \n",
+ "1024 TPOT wine-quality-white 4 \n",
+ "1183 TPOT wine-quality-white 5 \n",
+ "767 TPOT wine-quality-white 6 \n",
+ "1170 TPOT wine-quality-white 7 \n",
+ "851 TPOT yeast 0 \n",
+ "991 TPOT yeast 1 \n",
+ "1046 TPOT yeast 2 \n",
+ "1238 TPOT yeast 3 \n",
+ "1063 TPOT yeast 9 \n",
+ "\n",
+ " info \n",
+ "756 NoResultError: y_true and y_pred contain diffe... \n",
+ "819 NoResultError: y_true and y_pred contain diffe... \n",
+ "853 NoResultError: A pipeline has not yet been opt... \n",
+ "1129 NoResultError: A pipeline has not yet been opt... \n",
+ "1324 NoResultError: A pipeline has not yet been opt... \n",
+ "8477 NoResultError: A pipeline has not yet been opt... \n",
+ "831 NoResultError: A pipeline has not yet been opt... \n",
+ "8476 NoResultError: A pipeline has not yet been opt... \n",
+ "974 NoResultError: A pipeline has not yet been opt... \n",
+ "1259 NoResultError: A pipeline has not yet been opt... \n",
+ "1121 NoResultError: A pipeline has not yet been opt... \n",
+ "944 NoResultError: A pipeline has not yet been opt... \n",
+ "988 NoResultError: A pipeline has not yet been opt... \n",
+ "1383 NoResultError: A pipeline has not yet been opt... \n",
+ "1142 NoResultError: 'LinearSVC' object has no attri... \n",
+ "1024 NoResultError: y_true and y_pred contain diffe... \n",
+ "1183 NoResultError: y_true and y_pred contain diffe... \n",
+ "767 NoResultError: y_true and y_pred contain diffe... \n",
+ "1170 NoResultError: y_true and y_pred contain diffe... \n",
+ "851 NoResultError: Expected n_neighbors <= n_sampl... \n",
+ "991 NoResultError: y_true and y_pred contain diffe... \n",
+ "1046 NoResultError: y_true and y_pred contain diffe... \n",
+ "1238 NoResultError: 'LinearSVC' object has no attri... \n",
+ "1063 NoResultError: Expected n_neighbors <= n_sampl... "
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "tpot = classification_errors[(classification_errors[\"framework\"] == \"TPOT\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "tpot"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fee246c5",
+ "metadata": {},
+ "source": [
+ " - `Amazon commerce`: memory error while forking the process as part of joblib backend.\n",
+ " - Other datasets have shared errors (not checked explicitly)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5b836e4f",
+ "metadata": {},
+ "source": [
+ "### 2.2.12 RandomForest\n",
+ "\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 53,
+ "id": "ca754042",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 53,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"RandomForest\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "96b19409",
+ "metadata": {},
+ "source": [
+ "### 2.2.13 TunedRandomForest\n",
+ "\n",
+ "**Failures**: 20\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Memory issues, will impute with RandomForest."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 54,
+ "id": "5a8654f1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TunedRandomForest KDDCup99 10 10\n",
+ " dionis 10 10"
+ ]
+ },
+ "execution_count": 54,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TunedRandomForest\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "58250f3c",
+ "metadata": {},
+ "source": [
+ "# 3. Regression 4h8c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "e1c89f32",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " duration \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " mae \n",
+ " r2 \n",
+ " rmse \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 387 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 4 \n",
+ " regression \n",
+ " -8.51322 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 16075.6 \n",
+ " 15995.1 \n",
+ " 40.4 \n",
+ " 18.0 \n",
+ " 148140843 \n",
+ " NaN \n",
+ " 5.91050 \n",
+ " 0.384188 \n",
+ " 8.51322 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 280 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 5 \n",
+ " regression \n",
+ " -8.65369 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 16739.2 \n",
+ " 16671.8 \n",
+ " 28.4 \n",
+ " 16.0 \n",
+ " 148140844 \n",
+ " NaN \n",
+ " 5.99619 \n",
+ " 0.386168 \n",
+ " 8.65369 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 349 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 6 \n",
+ " regression \n",
+ " -8.51598 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 16906.3 \n",
+ " 16804.8 \n",
+ " 63.5 \n",
+ " 21.0 \n",
+ " 148140845 \n",
+ " NaN \n",
+ " 5.92490 \n",
+ " 0.395716 \n",
+ " 8.51598 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 473 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 9 \n",
+ " regression \n",
+ " -8.55864 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 17192.8 \n",
+ " 17093.5 \n",
+ " 60.3 \n",
+ " 18.0 \n",
+ " 148140848 \n",
+ " NaN \n",
+ " 5.96088 \n",
+ " 0.385477 \n",
+ " 8.55864 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 302 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 1 \n",
+ " regression \n",
+ " -8.51820 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 17396.5 \n",
+ " 17296.5 \n",
+ " 61.7 \n",
+ " 21.0 \n",
+ " 148140840 \n",
+ " NaN \n",
+ " 5.91997 \n",
+ " 0.394144 \n",
+ " 8.51820 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 537 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 0 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 18038.7 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 148140839 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 375 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 2 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 18038.7 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 148140841 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 383 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 3 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 18041.6 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 148140842 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 585 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 8 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 18048.2 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 148140847 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 493 \n",
+ " openml.org/t/317614 \n",
+ " Yolanda \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 7 \n",
+ " regression \n",
+ " NaN \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " 18049.2 \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 148140846 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
10 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework constraint fold type \\\n",
+ "387 openml.org/t/317614 Yolanda flaml 4h8c_gp3 4 regression \n",
+ "280 openml.org/t/317614 Yolanda flaml 4h8c_gp3 5 regression \n",
+ "349 openml.org/t/317614 Yolanda flaml 4h8c_gp3 6 regression \n",
+ "473 openml.org/t/317614 Yolanda flaml 4h8c_gp3 9 regression \n",
+ "302 openml.org/t/317614 Yolanda flaml 4h8c_gp3 1 regression \n",
+ "537 openml.org/t/317614 Yolanda flaml 4h8c_gp3 0 regression \n",
+ "375 openml.org/t/317614 Yolanda flaml 4h8c_gp3 2 regression \n",
+ "383 openml.org/t/317614 Yolanda flaml 4h8c_gp3 3 regression \n",
+ "585 openml.org/t/317614 Yolanda flaml 4h8c_gp3 8 regression \n",
+ "493 openml.org/t/317614 Yolanda flaml 4h8c_gp3 7 regression \n",
+ "\n",
+ " result metric mode version ... duration training_duration \\\n",
+ "387 -8.51322 neg_rmse aws.docker 0.6.2 ... 16075.6 15995.1 \n",
+ "280 -8.65369 neg_rmse aws.docker 0.6.2 ... 16739.2 16671.8 \n",
+ "349 -8.51598 neg_rmse aws.docker 0.6.2 ... 16906.3 16804.8 \n",
+ "473 -8.55864 neg_rmse aws.docker 0.6.2 ... 17192.8 17093.5 \n",
+ "302 -8.51820 neg_rmse aws.docker 0.6.2 ... 17396.5 17296.5 \n",
+ "537 NaN neg_rmse aws.docker 0.6.2 ... 18038.7 NaN \n",
+ "375 NaN neg_rmse aws.docker 0.6.2 ... 18038.7 NaN \n",
+ "383 NaN neg_rmse aws.docker 0.6.2 ... 18041.6 NaN \n",
+ "585 NaN neg_rmse aws.docker 0.6.2 ... 18048.2 NaN \n",
+ "493 NaN neg_rmse aws.docker 0.6.2 ... 18049.2 NaN \n",
+ "\n",
+ " predict_duration models_count seed \\\n",
+ "387 40.4 18.0 148140843 \n",
+ "280 28.4 16.0 148140844 \n",
+ "349 63.5 21.0 148140845 \n",
+ "473 60.3 18.0 148140848 \n",
+ "302 61.7 21.0 148140840 \n",
+ "537 NaN NaN 148140839 \n",
+ "375 NaN NaN 148140841 \n",
+ "383 NaN NaN 148140842 \n",
+ "585 NaN NaN 148140847 \n",
+ "493 NaN NaN 148140846 \n",
+ "\n",
+ " info mae r2 \\\n",
+ "387 NaN 5.91050 0.384188 \n",
+ "280 NaN 5.99619 0.386168 \n",
+ "349 NaN 5.92490 0.395716 \n",
+ "473 NaN 5.96088 0.385477 \n",
+ "302 NaN 5.91997 0.394144 \n",
+ "537 NoResultError: Interrupting thread MainThread ... NaN NaN \n",
+ "375 NoResultError: Interrupting thread MainThread ... NaN NaN \n",
+ "383 NoResultError: Interrupting thread MainThread ... NaN NaN \n",
+ "585 CalledProcessError: Command '/bench/frameworks... NaN NaN \n",
+ "493 CalledProcessError: Command '/bench/frameworks... NaN NaN \n",
+ "\n",
+ " rmse models_ensemble_count \n",
+ "387 8.51322 NaN \n",
+ "280 8.65369 NaN \n",
+ "349 8.51598 NaN \n",
+ "473 8.55864 NaN \n",
+ "302 8.51820 NaN \n",
+ "537 NaN NaN \n",
+ "375 NaN NaN \n",
+ "383 NaN NaN \n",
+ "585 NaN NaN \n",
+ "493 NaN NaN \n",
+ "\n",
+ "[10 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression[(regression.framework == \"flaml\") & (regression.task == \"Yolanda\")]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "0e1d98ab",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " duration \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " mae \n",
+ " r2 \n",
+ " rmse \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 615 \n",
+ " openml.org/t/167210 \n",
+ " Moneyball \n",
+ " autosklearn \n",
+ " 4h8c_gp3 \n",
+ " 4 \n",
+ " regression \n",
+ " -21.708200 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.14.0 \n",
+ " ... \n",
+ " 14443.7 \n",
+ " 14398.9 \n",
+ " 0.02 \n",
+ " 5.0 \n",
+ " 776481210 \n",
+ " NaN \n",
+ " 17.39040 \n",
+ " 0.948567 \n",
+ " 21.708200 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 3033 \n",
+ " openml.org/t/360932 \n",
+ " QSAR-TID-11 \n",
+ " GAMA_benchmark \n",
+ " 4h8c_gp3 \n",
+ " 8 \n",
+ " regression \n",
+ " -0.700791 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 21.0.1 \n",
+ " ... \n",
+ " 10120.5 \n",
+ " 10090.6 \n",
+ " 2.50 \n",
+ " 50.0 \n",
+ " 792051154 \n",
+ " NaN \n",
+ " 0.52203 \n",
+ " 0.780872 \n",
+ " 0.700791 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2556 \n",
+ " openml.org/t/233212 \n",
+ " Allstate_Claims_Severity \n",
+ " lightautoml \n",
+ " 4h8c_gp3 \n",
+ " 4 \n",
+ " regression \n",
+ " -1836.260000 \n",
+ " neg_rmse \n",
+ " aws.docker \n",
+ " 0.2.16 \n",
+ " ... \n",
+ " 13531.8 \n",
+ " 13472.1 \n",
+ " 23.40 \n",
+ " 1.0 \n",
+ " 881698434 \n",
+ " NaN \n",
+ " 1164.87000 \n",
+ " 0.587300 \n",
+ " 1836.260000 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
3 rows × 23 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework \\\n",
+ "615 openml.org/t/167210 Moneyball autosklearn \n",
+ "3033 openml.org/t/360932 QSAR-TID-11 GAMA_benchmark \n",
+ "2556 openml.org/t/233212 Allstate_Claims_Severity lightautoml \n",
+ "\n",
+ " constraint fold type result metric mode version \\\n",
+ "615 4h8c_gp3 4 regression -21.708200 neg_rmse aws.docker 0.14.0 \n",
+ "3033 4h8c_gp3 8 regression -0.700791 neg_rmse aws.docker 21.0.1 \n",
+ "2556 4h8c_gp3 4 regression -1836.260000 neg_rmse aws.docker 0.2.16 \n",
+ "\n",
+ " ... duration training_duration predict_duration models_count \\\n",
+ "615 ... 14443.7 14398.9 0.02 5.0 \n",
+ "3033 ... 10120.5 10090.6 2.50 50.0 \n",
+ "2556 ... 13531.8 13472.1 23.40 1.0 \n",
+ "\n",
+ " seed info mae r2 rmse \\\n",
+ "615 776481210 NaN 17.39040 0.948567 21.708200 \n",
+ "3033 792051154 NaN 0.52203 0.780872 0.700791 \n",
+ "2556 881698434 NaN 1164.87000 0.587300 1836.260000 \n",
+ "\n",
+ " models_ensemble_count \n",
+ "615 NaN \n",
+ "3033 NaN \n",
+ "2556 NaN \n",
+ "\n",
+ "[3 rows x 23 columns]"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/latest/regression_4h8c.csv\")\n",
+ "regression_jobs = set(itertools.product(regression[\"task\"].unique(), regression[\"fold\"].unique()))\n",
+ "regression.sample(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "deed74ff",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "regression = filter_for_latest_results(regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9179e711",
+ "metadata": {},
+ "source": [
+ "## 3.1 Missing Results\n",
+ "Missing results are those experiments which have no entry in the file at all."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "9483852b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "framework\n",
+ "AutoGluon_benchmark 0\n",
+ "GAMA_benchmark 0\n",
+ "H2OAutoML 0\n",
+ "RandomForest 300\n",
+ "TPOT 0\n",
+ "TunedRandomForest 0\n",
+ "autosklearn 0\n",
+ "constantpredictor 0\n",
+ "flaml 0\n",
+ "lightautoml 0\n",
+ "mljarsupervised_benchmark 0\n",
+ "mlr3automl 0\n",
+ "Name: fold, dtype: int64"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_by_framework = (n_regression_jobs - regression.groupby(\"framework\").count()[\"fold\"])\n",
+ "missing_by_framework"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1eeed2da",
+ "metadata": {},
+ "source": [
+ "## 3.2 Failed Results\n",
+ "The `info` field is only populated for errors jobs that failed."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "56192f2d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "regression_errors = regression[~regression[\"info\"].isna()][[\"framework\", \"task\", \"fold\", \"info\"]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "8a61f3f5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " GAMA_benchmark \n",
+ " 2 \n",
+ " 6 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " 2 \n",
+ " 5 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " 2 \n",
+ " 10 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " autosklearn \n",
+ " 1 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " flaml \n",
+ " 6 \n",
+ " 5 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " 1 \n",
+ " 5 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " 2 \n",
+ " 6 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " task fold info\n",
+ "framework \n",
+ "GAMA_benchmark 2 6 2\n",
+ "TPOT 2 5 2\n",
+ "TunedRandomForest 2 10 1\n",
+ "autosklearn 1 1 1\n",
+ "flaml 6 5 7\n",
+ "lightautoml 1 5 1\n",
+ "mljarsupervised_benchmark 2 6 2"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors.groupby([\"framework\"]).nunique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5117fe1d",
+ "metadata": {},
+ "source": [
+ "### 3.2.1 AutoGluon\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9638de6e",
+ "metadata": {},
+ "source": [
+ "### 3.2.2 Autosklearn\n",
+ "**Failures**: 1\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "a1e52c5b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 793 \n",
+ " autosklearn \n",
+ " OnlineNewsPopularity \n",
+ " 7 \n",
+ " NoResultError: Input contains infinity or a va... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "793 autosklearn OnlineNewsPopularity 7 \n",
+ "\n",
+ " info \n",
+ "793 NoResultError: Input contains infinity or a va... "
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autosklearn\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "7d5638de",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([\"NoResultError: Input contains infinity or a value too large for dtype('float32').\"],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"autosklearn\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))][\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2810b4db",
+ "metadata": {},
+ "source": [
+ "Curiously the same as 1H. The error is generated when checking `X` during `predict`. Manually downloading the task and checking the input does verify that the entirety of the test (and train) datasets can be coerced into `float32` so I am confident that it's an auto-sklearn issue."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6fc6453c",
+ "metadata": {},
+ "source": [
+ "### 3.2.3 Autoxgboost\n",
+ "**Failures**: ?\n",
+ "\n",
+ "**Reruns required**: ?\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3bfcbf0",
+ "metadata": {},
+ "source": [
+ "### 3.2.4 FLAML\n",
+ "**Failures**: 10\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "7e5de34e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 371 \n",
+ " flaml \n",
+ " Airlines_DepDelay_10M \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 341 \n",
+ " flaml \n",
+ " diamonds \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 537 \n",
+ " flaml \n",
+ " Yolanda \n",
+ " 0 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 375 \n",
+ " flaml \n",
+ " Yolanda \n",
+ " 2 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 383 \n",
+ " flaml \n",
+ " Yolanda \n",
+ " 3 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 585 \n",
+ " flaml \n",
+ " Yolanda \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 493 \n",
+ " flaml \n",
+ " Yolanda \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 457 \n",
+ " flaml \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 359 \n",
+ " flaml \n",
+ " OnlineNewsPopularity \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 381 \n",
+ " flaml \n",
+ " black_friday \n",
+ " 0 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "371 flaml Airlines_DepDelay_10M 0 \n",
+ "341 flaml diamonds 2 \n",
+ "537 flaml Yolanda 0 \n",
+ "375 flaml Yolanda 2 \n",
+ "383 flaml Yolanda 3 \n",
+ "585 flaml Yolanda 8 \n",
+ "493 flaml Yolanda 7 \n",
+ "457 flaml nyc-taxi-green-dec-2016 7 \n",
+ "359 flaml OnlineNewsPopularity 3 \n",
+ "381 flaml black_friday 0 \n",
+ "\n",
+ " info \n",
+ "371 CalledProcessError: Command '/bench/frameworks... \n",
+ "341 CalledProcessError: Command '/bench/frameworks... \n",
+ "537 NoResultError: Interrupting thread MainThread ... \n",
+ "375 NoResultError: Interrupting thread MainThread ... \n",
+ "383 NoResultError: Interrupting thread MainThread ... \n",
+ "585 CalledProcessError: Command '/bench/frameworks... \n",
+ "493 CalledProcessError: Command '/bench/frameworks... \n",
+ "457 CalledProcessError: Command '/bench/frameworks... \n",
+ "359 CalledProcessError: Command '/bench/frameworks... \n",
+ "381 NoResultError: std::bad_alloc "
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"flaml\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "cb68f5b3",
+ "metadata": {},
+ "source": [
+ " - `airlines.0`: memory: `Killed` with exit `137`.\n",
+ " - `diamonds.2`: memory: `Killed` with exit `137`.\n",
+ " - `black friday.0`: `bad_alloc` reported by subprocess.\n",
+ " - `yolanda` `0, 2, 3`: Timeout.\n",
+ " - `yolanda` `7, 8`:\n",
+ " ```\n",
+ " [flaml.automl: 12-06 14:30:18] {1380} WARNING - Time taken to find the best model is 90% of the provided time budget and not all estimators' hyperparameter search converged. Consider increasing the time budget.\n",
+ "Terminated\n",
+ " ```\n",
+ " - `nyc-taxi-green-dec-2016.7`: `Segmentation fault (core dumped)` (exit 139)\n",
+ " - `onlinenewspopularity.3`: memory: `Killed` with exit `137`."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "13012a1a",
+ "metadata": {},
+ "source": [
+ "### 3.2.5 GAMA\n",
+ "**Failures**: 7\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "d27456cd",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2885 \n",
+ " GAMA_benchmark \n",
+ " black_friday \n",
+ " 3 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 2899 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 1 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2965 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 6 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2953 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 2 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2824 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 3 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2974 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 7 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2853 \n",
+ " GAMA_benchmark \n",
+ " nyc-taxi-green-dec-2016 \n",
+ " 4 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "2885 GAMA_benchmark black_friday 3 \n",
+ "2899 GAMA_benchmark nyc-taxi-green-dec-2016 1 \n",
+ "2965 GAMA_benchmark nyc-taxi-green-dec-2016 6 \n",
+ "2953 GAMA_benchmark nyc-taxi-green-dec-2016 2 \n",
+ "2824 GAMA_benchmark nyc-taxi-green-dec-2016 3 \n",
+ "2974 GAMA_benchmark nyc-taxi-green-dec-2016 7 \n",
+ "2853 GAMA_benchmark nyc-taxi-green-dec-2016 4 \n",
+ "\n",
+ " info \n",
+ "2885 NoResultError: \n",
+ "2899 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2965 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2953 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2824 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2974 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2853 NoResultError: "
+ ]
+ },
+ "execution_count": 34,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"GAMA_benchmark\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "77364a6a",
+ "metadata": {},
+ "source": [
+ "- `blackfriday.3`: `MemoryError` while communicating with evaluation process (`completed_future=self._output.get(block=False)`)\n",
+ "- `nyc.4`: idem."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "07affbb4",
+ "metadata": {},
+ "source": [
+ "### 3.2.6 H2O\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "2717769d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [framework, task, fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"h2oautoml\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1c27d3a4",
+ "metadata": {},
+ "source": [
+ "### 3.2.7 LightAutoML\n",
+ "\n",
+ "**Failures**: 5\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "4a81e624",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "lightautoml Santander_transaction_value 5 5"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"lightautoml\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "6e04522c",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1125 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 0 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 2702 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 8 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 2795 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 6 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 2704 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 3 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 2724 \n",
+ " lightautoml \n",
+ " Santander_transaction_value \n",
+ " 2 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1125 lightautoml Santander_transaction_value 0 \n",
+ "2702 lightautoml Santander_transaction_value 8 \n",
+ "2795 lightautoml Santander_transaction_value 6 \n",
+ "2704 lightautoml Santander_transaction_value 3 \n",
+ "2724 lightautoml Santander_transaction_value 2 \n",
+ "\n",
+ " info \n",
+ "1125 NoResultError: Pipeline finished with 0 models... \n",
+ "2702 NoResultError: Pipeline finished with 0 models... \n",
+ "2795 NoResultError: Pipeline finished with 0 models... \n",
+ "2704 NoResultError: Pipeline finished with 0 models... \n",
+ "2724 NoResultError: Pipeline finished with 0 models... "
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"lightautoml\") & ~(regression_errors[\"info\"]).isnull()]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "3c2a3ee6",
+ "metadata": {},
+ "source": [
+ "`3, 6`: No clear reason why pipeline finished with 0 models in log, stopped prematurely"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ca5cc0f9",
+ "metadata": {},
+ "source": [
+ "## 3.2.8 MLJar\n",
+ "**Failures**: 6\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 38,
+ "id": "35da463e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " Airlines_DepDelay_10M \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " QSAR-TID-11 \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mljarsupervised_benchmark Airlines_DepDelay_10M 1 1\n",
+ " QSAR-TID-11 5 5"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mljarsupervised_benchmark\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "7a25d00e",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['NoResultError: Object of type float32 is not JSON serializable',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139655222089536] after 18000s timeout.'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[regression_errors[\"framework\"] == \"mljarsupervised_benchmark\"][\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 40,
+ "id": "a091f3a7",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2168 \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 0 \n",
+ " NoResultError: Object of type float32 is not J... \n",
+ " \n",
+ " \n",
+ " 3311 \n",
+ " mljarsupervised_benchmark \n",
+ " Airlines_DepDelay_10M \n",
+ " 6 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 3201 \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 7 \n",
+ " NoResultError: Object of type float32 is not J... \n",
+ " \n",
+ " \n",
+ " 3178 \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 5 \n",
+ " NoResultError: Object of type float32 is not J... \n",
+ " \n",
+ " \n",
+ " 3366 \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 9 \n",
+ " NoResultError: Object of type float32 is not J... \n",
+ " \n",
+ " \n",
+ " 3179 \n",
+ " mljarsupervised_benchmark \n",
+ " QSAR-TID-11 \n",
+ " 4 \n",
+ " NoResultError: Object of type float32 is not J... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "2168 mljarsupervised_benchmark QSAR-TID-11 0 \n",
+ "3311 mljarsupervised_benchmark Airlines_DepDelay_10M 6 \n",
+ "3201 mljarsupervised_benchmark QSAR-TID-11 7 \n",
+ "3178 mljarsupervised_benchmark QSAR-TID-11 5 \n",
+ "3366 mljarsupervised_benchmark QSAR-TID-11 9 \n",
+ "3179 mljarsupervised_benchmark QSAR-TID-11 4 \n",
+ "\n",
+ " info \n",
+ "2168 NoResultError: Object of type float32 is not J... \n",
+ "3311 NoResultError: Interrupting thread MainThread ... \n",
+ "3201 NoResultError: Object of type float32 is not J... \n",
+ "3178 NoResultError: Object of type float32 is not J... \n",
+ "3366 NoResultError: Object of type float32 is not J... \n",
+ "3179 NoResultError: Object of type float32 is not J... "
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"mljarsupervised_benchmark\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f6dbe5e4",
+ "metadata": {},
+ "source": [
+ "The `NoResultError` was a timeout interrupt during serialization of data, but *after* the `predict` call was already interrupted by a timeout, meaning no results would be had anyway (18000s)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "dc360ccd",
+ "metadata": {},
+ "source": [
+ "### 3.2.9 MLPlan\n",
+ "Experiments suspended."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8c9b361e",
+ "metadata": {},
+ "source": [
+ "### 3.2.10 MLR3AutoML"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec0139f2",
+ "metadata": {},
+ "source": [
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: -\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 41,
+ "id": "c5e1f223",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 41,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mlr3automl\", regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0024ab4d",
+ "metadata": {},
+ "source": [
+ "### 3.2.11 TPOT\n",
+ "**Failures**: 5\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "id": "41c34dd5",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " tecator \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TPOT Airlines_DepDelay_10M 4 4\n",
+ " tecator 1 1"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TPOT\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 43,
+ "id": "7b3889e2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2488 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 0 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1990 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 4 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1945 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 6 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 1977 \n",
+ " TPOT \n",
+ " Airlines_DepDelay_10M \n",
+ " 5 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 2047 \n",
+ " TPOT \n",
+ " tecator \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "2488 TPOT Airlines_DepDelay_10M 0 \n",
+ "1990 TPOT Airlines_DepDelay_10M 4 \n",
+ "1945 TPOT Airlines_DepDelay_10M 6 \n",
+ "1977 TPOT Airlines_DepDelay_10M 5 \n",
+ "2047 TPOT tecator 3 \n",
+ "\n",
+ " info \n",
+ "2488 NoResultError: A pipeline has not yet been opt... \n",
+ "1990 NoResultError: A pipeline has not yet been opt... \n",
+ "1945 NoResultError: A pipeline has not yet been opt... \n",
+ "1977 NoResultError: A pipeline has not yet been opt... \n",
+ "2047 CalledProcessError: Command '/bench/frameworks... "
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"TPOT\") & (~regression_errors[\"info\"].isnull()) & (~regression_errors[\"info\"].apply(is_timeout_error))]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ab9ca41f",
+ "metadata": {},
+ "source": [
+ "`tecator` has a ` Segmentation fault (core dumped)` after ~2.5 hours."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6754e0b2",
+ "metadata": {},
+ "source": [
+ "### 1.2.12 RandomForest\n",
+ "No failures."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 44,
+ "id": "43f2c4de",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 44,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"RandomForest\", regression)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4c6e8725",
+ "metadata": {},
+ "source": [
+ "### 3.2.13 TunedRandomForest\n",
+ "\n",
+ "**Failures**: 5\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 39,
+ "id": "dfc16689",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TunedRandomForest Airlines_DepDelay_10M 10 10\n",
+ " Buzzinsocialmedia_Twitter 4 4"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TunedRandomForest\", regression)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "id": "ad1559a5",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1564 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1584 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1602 \n",
+ " TunedRandomForest \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1420 \n",
+ " TunedRandomForest \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1426 \n",
+ " TunedRandomForest \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1548 \n",
+ " TunedRandomForest \n",
+ " Buzzinsocialmedia_Twitter \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1465 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1435 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1316 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1303 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1325 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1416 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1373 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1371 \n",
+ " TunedRandomForest \n",
+ " Airlines_DepDelay_10M \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1564 TunedRandomForest Airlines_DepDelay_10M 1 \n",
+ "1584 TunedRandomForest Airlines_DepDelay_10M 0 \n",
+ "1602 TunedRandomForest Buzzinsocialmedia_Twitter 1 \n",
+ "1420 TunedRandomForest Buzzinsocialmedia_Twitter 2 \n",
+ "1426 TunedRandomForest Buzzinsocialmedia_Twitter 8 \n",
+ "1548 TunedRandomForest Buzzinsocialmedia_Twitter 9 \n",
+ "1465 TunedRandomForest Airlines_DepDelay_10M 9 \n",
+ "1435 TunedRandomForest Airlines_DepDelay_10M 2 \n",
+ "1316 TunedRandomForest Airlines_DepDelay_10M 3 \n",
+ "1303 TunedRandomForest Airlines_DepDelay_10M 4 \n",
+ "1325 TunedRandomForest Airlines_DepDelay_10M 6 \n",
+ "1416 TunedRandomForest Airlines_DepDelay_10M 5 \n",
+ "1373 TunedRandomForest Airlines_DepDelay_10M 8 \n",
+ "1371 TunedRandomForest Airlines_DepDelay_10M 7 \n",
+ "\n",
+ " info \n",
+ "1564 CalledProcessError: Command '/bench/frameworks... \n",
+ "1584 CalledProcessError: Command '/bench/frameworks... \n",
+ "1602 CalledProcessError: Command '/bench/frameworks... \n",
+ "1420 CalledProcessError: Command '/bench/frameworks... \n",
+ "1426 CalledProcessError: Command '/bench/frameworks... \n",
+ "1548 CalledProcessError: Command '/bench/frameworks... \n",
+ "1465 CalledProcessError: Command '/bench/frameworks... \n",
+ "1435 CalledProcessError: Command '/bench/frameworks... \n",
+ "1316 CalledProcessError: Command '/bench/frameworks... \n",
+ "1303 CalledProcessError: Command '/bench/frameworks... \n",
+ "1325 CalledProcessError: Command '/bench/frameworks... \n",
+ "1416 CalledProcessError: Command '/bench/frameworks... \n",
+ "1373 CalledProcessError: Command '/bench/frameworks... \n",
+ "1371 CalledProcessError: Command '/bench/frameworks... "
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "regression_errors[(regression_errors[\"framework\"] == \"TunedRandomForest\") & ~(regression_errors[\"info\"]).isnull()]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c9838640",
+ "metadata": {},
+ "source": [
+ "`airlines` and `buzz.1` killed with `137`, `buzz` actually managed to stop evaluations prematurely for multiple `max_features` because of memory constraints, but ultimately failed.\n",
+ "Assuming other folds have the same type of errors, and should be imputed with `RandomForest` performance.\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "42aa7c5e",
+ "metadata": {},
+ "source": [
+ "# 4. Classification 4h8c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "c5f3c4da",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " acc \n",
+ " auc \n",
+ " balacc \n",
+ " logloss \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3907 \n",
+ " openml.org/t/360114 \n",
+ " Higgs \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 5 \n",
+ " binary \n",
+ " NaN \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 1697533426 \n",
+ " UnicodeDecodeError: 'utf-8' codec can't decode... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 8270 \n",
+ " openml.org/t/360114 \n",
+ " Higgs \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 4 \n",
+ " binary \n",
+ " NaN \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 1632365474 \n",
+ " UnicodeDecodeError: 'utf-8' codec can't decode... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 8315 \n",
+ " openml.org/t/360114 \n",
+ " Higgs \n",
+ " flaml \n",
+ " 4h8c_gp3 \n",
+ " 5 \n",
+ " binary \n",
+ " NaN \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.6.2 \n",
+ " ... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " 1632365475 \n",
+ " UnicodeDecodeError: 'utf-8' codec can't decode... \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
3 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework constraint fold type result \\\n",
+ "3907 openml.org/t/360114 Higgs flaml 4h8c_gp3 5 binary NaN \n",
+ "8270 openml.org/t/360114 Higgs flaml 4h8c_gp3 4 binary NaN \n",
+ "8315 openml.org/t/360114 Higgs flaml 4h8c_gp3 5 binary NaN \n",
+ "\n",
+ " metric mode version ... training_duration predict_duration \\\n",
+ "3907 auc aws.docker 0.6.2 ... NaN NaN \n",
+ "8270 auc aws.docker 0.6.2 ... NaN NaN \n",
+ "8315 auc aws.docker 0.6.2 ... NaN NaN \n",
+ "\n",
+ " models_count seed \\\n",
+ "3907 NaN 1697533426 \n",
+ "8270 NaN 1632365474 \n",
+ "8315 NaN 1632365475 \n",
+ "\n",
+ " info acc auc balacc \\\n",
+ "3907 UnicodeDecodeError: 'utf-8' codec can't decode... NaN NaN NaN \n",
+ "8270 UnicodeDecodeError: 'utf-8' codec can't decode... NaN NaN NaN \n",
+ "8315 UnicodeDecodeError: 'utf-8' codec can't decode... NaN NaN NaN \n",
+ "\n",
+ " logloss models_ensemble_count \n",
+ "3907 NaN NaN \n",
+ "8270 NaN NaN \n",
+ "8315 NaN NaN \n",
+ "\n",
+ "[3 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "classification[classification[\"info\"].apply(lambda s: isinstance(s, str) and \"UnicodeDecodeError\" in s)]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "e6fd35f1",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " framework \n",
+ " constraint \n",
+ " fold \n",
+ " type \n",
+ " result \n",
+ " metric \n",
+ " mode \n",
+ " version \n",
+ " ... \n",
+ " training_duration \n",
+ " predict_duration \n",
+ " models_count \n",
+ " seed \n",
+ " info \n",
+ " acc \n",
+ " auc \n",
+ " balacc \n",
+ " logloss \n",
+ " models_ensemble_count \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2665 \n",
+ " openml.org/t/359953 \n",
+ " micro-mass \n",
+ " H2OAutoML \n",
+ " 4h8c_gp3 \n",
+ " 4 \n",
+ " multiclass \n",
+ " -0.421218 \n",
+ " neg_logloss \n",
+ " aws.docker \n",
+ " 3.34.0.1 \n",
+ " ... \n",
+ " 14525.3000 \n",
+ " 0.20000 \n",
+ " 277.0 \n",
+ " 825036435 \n",
+ " NaN \n",
+ " 0.912281 \n",
+ " NaN \n",
+ " 0.891667 \n",
+ " 0.421218 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 6416 \n",
+ " openml.org/t/359957 \n",
+ " cnae-9 \n",
+ " constantpredictor \n",
+ " 4h8c \n",
+ " 6 \n",
+ " multiclass \n",
+ " -2.197220 \n",
+ " neg_logloss \n",
+ " local \n",
+ " 0.24.2 \n",
+ " ... \n",
+ " 0.0004 \n",
+ " 0.00005 \n",
+ " 1.0 \n",
+ " 1435978 \n",
+ " NaN \n",
+ " 0.111111 \n",
+ " NaN \n",
+ " 0.111111 \n",
+ " 2.197220 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 3067 \n",
+ " openml.org/t/359975 \n",
+ " Satellite \n",
+ " AutoGluon_benchmark \n",
+ " 4h8c_gp3 \n",
+ " 1 \n",
+ " binary \n",
+ " 0.998012 \n",
+ " auc \n",
+ " aws.docker \n",
+ " 0.3.1 \n",
+ " ... \n",
+ " 6428.7000 \n",
+ " 29.00000 \n",
+ " 26.0 \n",
+ " 1129160200 \n",
+ " NaN \n",
+ " 0.996078 \n",
+ " 0.998012 \n",
+ " 0.857143 \n",
+ " 0.017399 \n",
+ " 3.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
3 rows × 24 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " id task framework constraint fold \\\n",
+ "2665 openml.org/t/359953 micro-mass H2OAutoML 4h8c_gp3 4 \n",
+ "6416 openml.org/t/359957 cnae-9 constantpredictor 4h8c 6 \n",
+ "3067 openml.org/t/359975 Satellite AutoGluon_benchmark 4h8c_gp3 1 \n",
+ "\n",
+ " type result metric mode version ... \\\n",
+ "2665 multiclass -0.421218 neg_logloss aws.docker 3.34.0.1 ... \n",
+ "6416 multiclass -2.197220 neg_logloss local 0.24.2 ... \n",
+ "3067 binary 0.998012 auc aws.docker 0.3.1 ... \n",
+ "\n",
+ " training_duration predict_duration models_count seed info \\\n",
+ "2665 14525.3000 0.20000 277.0 825036435 NaN \n",
+ "6416 0.0004 0.00005 1.0 1435978 NaN \n",
+ "3067 6428.7000 29.00000 26.0 1129160200 NaN \n",
+ "\n",
+ " acc auc balacc logloss models_ensemble_count \n",
+ "2665 0.912281 NaN 0.891667 0.421218 NaN \n",
+ "6416 0.111111 NaN 0.111111 2.197220 NaN \n",
+ "3067 0.996078 0.998012 0.857143 0.017399 3.0 \n",
+ "\n",
+ "[3 rows x 24 columns]"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "classification = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/latest/classification_4h8c.csv\")\n",
+ "classification_jobs = set(itertools.product(classification[\"task\"].unique(), classification[\"fold\"].unique()))\n",
+ "classification.sample(3)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "d77838c4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "classification = filter_for_latest_results(classification)\n",
+ "grouped_by_fw_task = classification.groupby([\"framework\", \"task\"]).count()[\"fold\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "da41ae02",
+ "metadata": {},
+ "source": [
+ "## 4.1 Missing Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "23818871",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "framework\n",
+ "AutoGluon_benchmark 0\n",
+ "GAMA_benchmark 0\n",
+ "H2OAutoML 0\n",
+ "RandomForest 0\n",
+ "TPOT 0\n",
+ "TunedRandomForest 0\n",
+ "autosklearn 0\n",
+ "autosklearn2 0\n",
+ "flaml 0\n",
+ "lightautoml 0\n",
+ "mljarsupervised_benchmark 0\n",
+ "mlr3automl 0\n",
+ "Name: fold, dtype: int64"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "missing_by_framework = (n_classification_jobs - classification.groupby(\"framework\").count()[\"fold\"])\n",
+ "missing_by_framework"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f95c092a",
+ "metadata": {},
+ "source": [
+ "### autosklearn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "e94da5c9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"autosklearn\"][grouped_by_fw_task[\"autosklearn\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b5b8108f",
+ "metadata": {},
+ "source": [
+ "### autosklearn2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "82708cdc",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"autosklearn2\"][grouped_by_fw_task[\"autosklearn2\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fac04bde",
+ "metadata": {},
+ "source": [
+ "Redid a task because disk was full (best I can tell, the AWS disk, meaning it is a framework failure)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "de746745",
+ "metadata": {},
+ "source": [
+ "### FLAML"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "59adcb60",
+ "metadata": {},
+ "source": [
+ "Redid `guillermo.4` because of a connection issue."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "250a0ed4",
+ "metadata": {},
+ "source": [
+ "### H2O"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 62,
+ "id": "b559d2ba",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Series([], Name: fold, dtype: int64)"
+ ]
+ },
+ "execution_count": 62,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "grouped_by_fw_task[\"H2OAutoML\"][grouped_by_fw_task[\"H2OAutoML\"] != 10]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "37f6bfbd",
+ "metadata": {},
+ "source": [
+ "`shuttle.9` failed due to a connection error when retrieving the docker image. **redone**\n",
+ "\n",
+ "`volket.1` was aborted due to CPU inactivity. **redone**\n",
+ "\n",
+ "problem redoing because of log4j"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "e8e2fba7",
+ "metadata": {},
+ "source": [
+ "### MLJar"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "31a1394e",
+ "metadata": {},
+ "source": [
+ "I don't understand why `dionis.0` failed - there is some activity: `[i-0d9c2f1c57abba452]>[17390.980453] cloud-init[1754]: Job local.openml_s_271.4h8c_gp3.dionis.0.mljarsupervised_benchmark executed in 17185.877 seconds` but afterwards the instance doesn't terminate and files are not transferred.\n",
+ "\n",
+ "`click_predictions_small.1` also never terminates but there seems to be a kernel panic while transfering results.\n",
+ "\n",
+ "Redid both successfully."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "eef63151",
+ "metadata": {},
+ "source": [
+ "### mlr3automl"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "35a86e2b",
+ "metadata": {},
+ "source": [
+ "Redid `albert.7` connection issue during setup."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "26e057be",
+ "metadata": {},
+ "source": [
+ "## 4.2 Failed Results"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "id": "325dadc7",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "classification_errors = classification[~classification[\"info\"].isna()][[\"framework\", \"task\", \"fold\", \"info\"]]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b014aec3",
+ "metadata": {},
+ "source": [
+ "### 4.2.1 AutoGluon\n",
+ "**Failures**: 3\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Subprocesses killed while training lightgbm/nn (based on error code due to memory)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "30e9cf97",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " AutoGluon_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "AutoGluon_benchmark KDDCup09-Upselling 2 2\n",
+ " KDDCup99 1 1"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"AutoGluon_benchmark\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "58c15e54",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1607 \n",
+ " AutoGluon_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1311 \n",
+ " AutoGluon_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 1241 \n",
+ " AutoGluon_benchmark \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "1607 AutoGluon_benchmark KDDCup09-Upselling 5 \n",
+ "1311 AutoGluon_benchmark KDDCup09-Upselling 7 \n",
+ "1241 AutoGluon_benchmark KDDCup99 8 \n",
+ "\n",
+ " info \n",
+ "1607 CalledProcessError: Command '/bench/frameworks... \n",
+ "1311 CalledProcessError: Command '/bench/frameworks... \n",
+ "1241 CalledProcessError: Command '/bench/frameworks... "
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "classification_errors[(classification_errors[\"framework\"] == \"AutoGluon_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "6f224a2c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([\"CalledProcessError: Command '/bench/frameworks/AutoGluon/venv/bin/python -W ignore /bench/frameworks/AutoGluon/exec.py' returned non-zero exit status 137.\"],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "classification_errors[(classification_errors[\"framework\"] == \"AutoGluon_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "56706225",
+ "metadata": {},
+ "source": [
+ "### 2.2.2 Autosklearn\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "b248c44c",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 5 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " autosklearn \n",
+ " KDDCup09-Upselling \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "autosklearn KDDCup09-Upselling 5 5"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autosklearn\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d6505256",
+ "metadata": {},
+ "source": [
+ "### Autosklearn 2\n",
+ "**Failures**: 10\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "75042df4",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 10 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " autosklearn2 \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "autosklearn2 KDDCup09-Upselling 10 10"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"autosklearn2\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "28d14d9e",
+ "metadata": {},
+ "source": [
+ "### 4.2.3 AutoXGBoost\n",
+ "\n",
+ "**Failures**: ?\n",
+ "\n",
+ "**Reruns required**: 20 ?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "5caa563f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#errors_for_framework(\"autoxgboost\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "a77c7a10",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#axgb = classification_errors[(classification_errors[\"framework\"] == \"autoxgboost\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "#axgb"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "db87b807",
+ "metadata": {},
+ "source": [
+ "### 4.2.4 FLAML\n",
+ "\n",
+ "**Failures**: 59\n",
+ "\n",
+ "**Reruns required**: 1\n",
+ "\n",
+ "Redo decoding errors (`Higgs.4-5`)\n",
+ "`NoResultError: Interrupting` means that the initial search/predict was interrupted due to time constraints, and then the next level interrupt is issued during serialization. They have both been redone once but one of them again had the same error.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "e2dc5b19",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 1 are timeout errors.\n",
+ "Of the errors below, 1 are memory errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " flaml \n",
+ " Fashion-MNIST \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " Higgs \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " MiniBooNE \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " airlines \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " covertype \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " guillermo \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " riccardo \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " robert \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " sf-police-incidents \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "flaml Fashion-MNIST 2 2\n",
+ " Higgs 7 7\n",
+ " KDDCup09-Upselling 10 10\n",
+ " KDDCup99 4 4\n",
+ " MiniBooNE 5 5\n",
+ " airlines 1 1\n",
+ " covertype 2 2\n",
+ " dionis 10 10\n",
+ " guillermo 10 10\n",
+ " riccardo 5 5\n",
+ " robert 1 1\n",
+ " sf-police-incidents 3 3"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"flaml\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "65704a3f",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 7475 \n",
+ " flaml \n",
+ " Fashion-MNIST \n",
+ " 5 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 7581 \n",
+ " flaml \n",
+ " Fashion-MNIST \n",
+ " 8 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 6075 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 6064 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 1 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 7467 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 2 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 3906 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 3907 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 5 \n",
+ " UnicodeDecodeError: 'utf-8' codec can't decode... \n",
+ " \n",
+ " \n",
+ " 7674 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7250 \n",
+ " flaml \n",
+ " Higgs \n",
+ " 9 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 6033 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 0 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 6014 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 1 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7445 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 2 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7584 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7370 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 4 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7628 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 5 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7604 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 6 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7342 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7738 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 8 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7620 \n",
+ " flaml \n",
+ " KDDCup09-Upselling \n",
+ " 9 \n",
+ " NoResultError: Unable to allocate 4.44 GiB for... \n",
+ " \n",
+ " \n",
+ " 7673 \n",
+ " flaml \n",
+ " KDDCup99 \n",
+ " 2 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 7631 \n",
+ " flaml \n",
+ " KDDCup99 \n",
+ " 3 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ " 7469 \n",
+ " flaml \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7587 \n",
+ " flaml \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7314 \n",
+ " flaml \n",
+ " MiniBooNE \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7300 \n",
+ " flaml \n",
+ " MiniBooNE \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7448 \n",
+ " flaml \n",
+ " MiniBooNE \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7465 \n",
+ " flaml \n",
+ " MiniBooNE \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7580 \n",
+ " flaml \n",
+ " MiniBooNE \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7395 \n",
+ " flaml \n",
+ " airlines \n",
+ " 9 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7576 \n",
+ " flaml \n",
+ " covertype \n",
+ " 4 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7777 \n",
+ " flaml \n",
+ " covertype \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 6094 \n",
+ " flaml \n",
+ " dionis \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 5985 \n",
+ " flaml \n",
+ " dionis \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7609 \n",
+ " flaml \n",
+ " dionis \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7646 \n",
+ " flaml \n",
+ " dionis \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7637 \n",
+ " flaml \n",
+ " dionis \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7402 \n",
+ " flaml \n",
+ " dionis \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7621 \n",
+ " flaml \n",
+ " dionis \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7619 \n",
+ " flaml \n",
+ " dionis \n",
+ " 7 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7299 \n",
+ " flaml \n",
+ " dionis \n",
+ " 8 \n",
+ " NoResultError: could not allocate 186113720 bytes \n",
+ " \n",
+ " \n",
+ " 7744 \n",
+ " flaml \n",
+ " dionis \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 5991 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 0 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 6048 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7480 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7802 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7720 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7324 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 6 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7374 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 7 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7709 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 8 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 7296 \n",
+ " flaml \n",
+ " guillermo \n",
+ " 9 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 5981 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 0 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7365 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 2 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7302 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 3 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7700 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 4 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7294 \n",
+ " flaml \n",
+ " riccardo \n",
+ " 8 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 6054 \n",
+ " flaml \n",
+ " sf-police-incidents \n",
+ " 0 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7341 \n",
+ " flaml \n",
+ " sf-police-incidents \n",
+ " 6 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ " 7597 \n",
+ " flaml \n",
+ " sf-police-incidents \n",
+ " 9 \n",
+ " NoResultError: std::bad_alloc \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "7475 flaml Fashion-MNIST 5 \n",
+ "7581 flaml Fashion-MNIST 8 \n",
+ "6075 flaml Higgs 0 \n",
+ "6064 flaml Higgs 1 \n",
+ "7467 flaml Higgs 2 \n",
+ "3906 flaml Higgs 4 \n",
+ "3907 flaml Higgs 5 \n",
+ "7674 flaml Higgs 6 \n",
+ "7250 flaml Higgs 9 \n",
+ "6033 flaml KDDCup09-Upselling 0 \n",
+ "6014 flaml KDDCup09-Upselling 1 \n",
+ "7445 flaml KDDCup09-Upselling 2 \n",
+ "7584 flaml KDDCup09-Upselling 3 \n",
+ "7370 flaml KDDCup09-Upselling 4 \n",
+ "7628 flaml KDDCup09-Upselling 5 \n",
+ "7604 flaml KDDCup09-Upselling 6 \n",
+ "7342 flaml KDDCup09-Upselling 7 \n",
+ "7738 flaml KDDCup09-Upselling 8 \n",
+ "7620 flaml KDDCup09-Upselling 9 \n",
+ "7673 flaml KDDCup99 2 \n",
+ "7631 flaml KDDCup99 3 \n",
+ "7469 flaml KDDCup99 5 \n",
+ "7587 flaml KDDCup99 7 \n",
+ "7314 flaml MiniBooNE 2 \n",
+ "7300 flaml MiniBooNE 3 \n",
+ "7448 flaml MiniBooNE 6 \n",
+ "7465 flaml MiniBooNE 7 \n",
+ "7580 flaml MiniBooNE 9 \n",
+ "7395 flaml airlines 9 \n",
+ "7576 flaml covertype 4 \n",
+ "7777 flaml covertype 9 \n",
+ "6094 flaml dionis 0 \n",
+ "5985 flaml dionis 1 \n",
+ "7609 flaml dionis 2 \n",
+ "7646 flaml dionis 3 \n",
+ "7637 flaml dionis 4 \n",
+ "7402 flaml dionis 5 \n",
+ "7621 flaml dionis 6 \n",
+ "7619 flaml dionis 7 \n",
+ "7299 flaml dionis 8 \n",
+ "7744 flaml dionis 9 \n",
+ "5991 flaml guillermo 0 \n",
+ "6048 flaml guillermo 1 \n",
+ "7480 flaml guillermo 2 \n",
+ "7802 flaml guillermo 3 \n",
+ "0 flaml guillermo 4 \n",
+ "7720 flaml guillermo 5 \n",
+ "7324 flaml guillermo 6 \n",
+ "7374 flaml guillermo 7 \n",
+ "7709 flaml guillermo 8 \n",
+ "7296 flaml guillermo 9 \n",
+ "5981 flaml riccardo 0 \n",
+ "7365 flaml riccardo 2 \n",
+ "7302 flaml riccardo 3 \n",
+ "7700 flaml riccardo 4 \n",
+ "7294 flaml riccardo 8 \n",
+ "6054 flaml sf-police-incidents 0 \n",
+ "7341 flaml sf-police-incidents 6 \n",
+ "7597 flaml sf-police-incidents 9 \n",
+ "\n",
+ " info \n",
+ "7475 NoResultError: Interrupting thread MainThread ... \n",
+ "7581 NoResultError: Interrupting thread MainThread ... \n",
+ "6075 CalledProcessError: Command '/bench/frameworks... \n",
+ "6064 NoResultError: Interrupting thread MainThread ... \n",
+ "7467 NoResultError: Interrupting thread MainThread ... \n",
+ "3906 CalledProcessError: Command '/bench/frameworks... \n",
+ "3907 UnicodeDecodeError: 'utf-8' codec can't decode... \n",
+ "7674 CalledProcessError: Command '/bench/frameworks... \n",
+ "7250 NoResultError: Interrupting thread MainThread ... \n",
+ "6033 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "6014 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7445 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7584 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7370 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7628 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7604 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7342 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7738 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7620 NoResultError: Unable to allocate 4.44 GiB for... \n",
+ "7673 NoResultError: Interrupting thread MainThread ... \n",
+ "7631 NoResultError: Interrupting thread MainThread ... \n",
+ "7469 CalledProcessError: Command '/bench/frameworks... \n",
+ "7587 CalledProcessError: Command '/bench/frameworks... \n",
+ "7314 CalledProcessError: Command '/bench/frameworks... \n",
+ "7300 CalledProcessError: Command '/bench/frameworks... \n",
+ "7448 CalledProcessError: Command '/bench/frameworks... \n",
+ "7465 CalledProcessError: Command '/bench/frameworks... \n",
+ "7580 CalledProcessError: Command '/bench/frameworks... \n",
+ "7395 NoResultError: std::bad_alloc \n",
+ "7576 NoResultError: std::bad_alloc \n",
+ "7777 CalledProcessError: Command '/bench/frameworks... \n",
+ "6094 CalledProcessError: Command '/bench/frameworks... \n",
+ "5985 CalledProcessError: Command '/bench/frameworks... \n",
+ "7609 CalledProcessError: Command '/bench/frameworks... \n",
+ "7646 CalledProcessError: Command '/bench/frameworks... \n",
+ "7637 CalledProcessError: Command '/bench/frameworks... \n",
+ "7402 CalledProcessError: Command '/bench/frameworks... \n",
+ "7621 CalledProcessError: Command '/bench/frameworks... \n",
+ "7619 CalledProcessError: Command '/bench/frameworks... \n",
+ "7299 NoResultError: could not allocate 186113720 bytes \n",
+ "7744 CalledProcessError: Command '/bench/frameworks... \n",
+ "5991 CalledProcessError: Command '/bench/frameworks... \n",
+ "6048 CalledProcessError: Command '/bench/frameworks... \n",
+ "7480 CalledProcessError: Command '/bench/frameworks... \n",
+ "7802 CalledProcessError: Command '/bench/frameworks... \n",
+ "0 CalledProcessError: Command '/bench/frameworks... \n",
+ "7720 CalledProcessError: Command '/bench/frameworks... \n",
+ "7324 CalledProcessError: Command '/bench/frameworks... \n",
+ "7374 NoResultError: std::bad_alloc \n",
+ "7709 CalledProcessError: Command '/bench/frameworks... \n",
+ "7296 CalledProcessError: Command '/bench/frameworks... \n",
+ "5981 NoResultError: std::bad_alloc \n",
+ "7365 NoResultError: std::bad_alloc \n",
+ "7302 NoResultError: std::bad_alloc \n",
+ "7700 NoResultError: std::bad_alloc \n",
+ "7294 NoResultError: std::bad_alloc \n",
+ "6054 NoResultError: std::bad_alloc \n",
+ "7341 NoResultError: std::bad_alloc \n",
+ "7597 NoResultError: std::bad_alloc "
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "flaml = classification_errors[(classification_errors[\"framework\"] == \"flaml\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "flaml"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "70fcd16d",
+ "metadata": {},
+ "source": [
+ "`upselling.3` fails in automl."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "9287b831",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['NoResultError: Interrupting thread MainThread [ident=140291176265536] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139641969686336] after 18000s timeout.',\n",
+ " \"CalledProcessError: Command '/bench/frameworks/flaml/venv/bin/python -W ignore /bench/frameworks/flaml/exec.py' returned non-zero exit status 139.\",\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140128358463296] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140282879719232] after 18000s timeout.',\n",
+ " \"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 63: invalid start byte\",\n",
+ " \"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xab in position 64: invalid start byte\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/flaml/venv/bin/python -W ignore /bench/frameworks/flaml/exec.py' returned non-zero exit status 137.\",\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139877913315136] after 18000s timeout.',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13237) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13251) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13236) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13242) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13238) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13235) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13229) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13231) and data type int64',\n",
+ " 'NoResultError: Unable to allocate 4.44 GiB for an array with shape (45000, 13228) and data type int64',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139941071427392] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140179970418496] after 18000s timeout.',\n",
+ " 'NoResultError: std::bad_alloc',\n",
+ " 'NoResultError: could not allocate 186113720 bytes'], dtype=object)"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "flaml[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "43d3c90b",
+ "metadata": {},
+ "source": [
+ "### 4.2.5 GAMA\n",
+ "**Failures**: 54\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "I did not inspect the logs, based on the error messages here I am fairly confident that they are all GAMA failures."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "11c6ecbf",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " GAMA_benchmark \n",
+ " Higgs \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " airlines \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " covertype \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " helena \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " numerai28_6 \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "GAMA_benchmark Higgs 1 1\n",
+ " KDDCup09-Upselling 10 10\n",
+ " KDDCup99 10 10\n",
+ " airlines 10 10\n",
+ " covertype 4 4\n",
+ " helena 9 9\n",
+ " numerai28_6 1 1\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"GAMA_benchmark\", classification_errors)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "5416f833",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 3464 \n",
+ " GAMA_benchmark \n",
+ " Higgs \n",
+ " 1 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 3445 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 0 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1796 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 2 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1823 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1583 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 4 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2043 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 5 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2070 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1566 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2124 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 8 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1724 \n",
+ " GAMA_benchmark \n",
+ " KDDCup09-Upselling \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3471 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3420 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 1 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1665 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 2 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1668 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1611 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: The least populated class in y ... \n",
+ " \n",
+ " \n",
+ " 2056 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " NoResultError: The least populated class in y ... \n",
+ " \n",
+ " \n",
+ " 1908 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2001 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1985 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1876 \n",
+ " GAMA_benchmark \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3497 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 0 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 3466 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 1 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1898 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 2 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1961 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 3 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1602 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 4 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1797 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 5 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1682 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 6 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1812 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 7 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1853 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 8 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1756 \n",
+ " GAMA_benchmark \n",
+ " airlines \n",
+ " 9 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3504 \n",
+ " GAMA_benchmark \n",
+ " covertype \n",
+ " 0 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3467 \n",
+ " GAMA_benchmark \n",
+ " covertype \n",
+ " 1 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 2009 \n",
+ " GAMA_benchmark \n",
+ " covertype \n",
+ " 6 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1786 \n",
+ " GAMA_benchmark \n",
+ " covertype \n",
+ " 7 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 3409 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 0 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 3457 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 1 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 2080 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 2 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1896 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 3 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1859 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 4 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1941 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 6 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1882 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 7 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1892 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 8 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1770 \n",
+ " GAMA_benchmark \n",
+ " helena \n",
+ " 9 \n",
+ " NoResultError: \n",
+ " \n",
+ " \n",
+ " 1847 \n",
+ " GAMA_benchmark \n",
+ " numerai28_6 \n",
+ " 2 \n",
+ " NoResultError: [Errno 12] Cannot allocate memory \n",
+ " \n",
+ " \n",
+ " 1794 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1653 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 4 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2040 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1692 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 6 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1641 \n",
+ " GAMA_benchmark \n",
+ " wine-quality-white \n",
+ " 7 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3407 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 3426 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1620 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 2090 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ " 1799 \n",
+ " GAMA_benchmark \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: 'NoneType' object is not iterable \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "3464 GAMA_benchmark Higgs 1 \n",
+ "3445 GAMA_benchmark KDDCup09-Upselling 0 \n",
+ "1796 GAMA_benchmark KDDCup09-Upselling 2 \n",
+ "1823 GAMA_benchmark KDDCup09-Upselling 3 \n",
+ "1583 GAMA_benchmark KDDCup09-Upselling 4 \n",
+ "2043 GAMA_benchmark KDDCup09-Upselling 5 \n",
+ "2070 GAMA_benchmark KDDCup09-Upselling 6 \n",
+ "1566 GAMA_benchmark KDDCup09-Upselling 7 \n",
+ "2124 GAMA_benchmark KDDCup09-Upselling 8 \n",
+ "1724 GAMA_benchmark KDDCup09-Upselling 9 \n",
+ "3471 GAMA_benchmark KDDCup99 0 \n",
+ "3420 GAMA_benchmark KDDCup99 1 \n",
+ "1665 GAMA_benchmark KDDCup99 2 \n",
+ "1668 GAMA_benchmark KDDCup99 3 \n",
+ "1611 GAMA_benchmark KDDCup99 4 \n",
+ "2056 GAMA_benchmark KDDCup99 5 \n",
+ "1908 GAMA_benchmark KDDCup99 6 \n",
+ "2001 GAMA_benchmark KDDCup99 7 \n",
+ "1985 GAMA_benchmark KDDCup99 8 \n",
+ "1876 GAMA_benchmark KDDCup99 9 \n",
+ "3497 GAMA_benchmark airlines 0 \n",
+ "3466 GAMA_benchmark airlines 1 \n",
+ "1898 GAMA_benchmark airlines 2 \n",
+ "1961 GAMA_benchmark airlines 3 \n",
+ "1602 GAMA_benchmark airlines 4 \n",
+ "1797 GAMA_benchmark airlines 5 \n",
+ "1682 GAMA_benchmark airlines 6 \n",
+ "1812 GAMA_benchmark airlines 7 \n",
+ "1853 GAMA_benchmark airlines 8 \n",
+ "1756 GAMA_benchmark airlines 9 \n",
+ "3504 GAMA_benchmark covertype 0 \n",
+ "3467 GAMA_benchmark covertype 1 \n",
+ "2009 GAMA_benchmark covertype 6 \n",
+ "1786 GAMA_benchmark covertype 7 \n",
+ "3409 GAMA_benchmark helena 0 \n",
+ "3457 GAMA_benchmark helena 1 \n",
+ "2080 GAMA_benchmark helena 2 \n",
+ "1896 GAMA_benchmark helena 3 \n",
+ "1859 GAMA_benchmark helena 4 \n",
+ "1941 GAMA_benchmark helena 6 \n",
+ "1882 GAMA_benchmark helena 7 \n",
+ "1892 GAMA_benchmark helena 8 \n",
+ "1770 GAMA_benchmark helena 9 \n",
+ "1847 GAMA_benchmark numerai28_6 2 \n",
+ "1794 GAMA_benchmark wine-quality-white 3 \n",
+ "1653 GAMA_benchmark wine-quality-white 4 \n",
+ "2040 GAMA_benchmark wine-quality-white 5 \n",
+ "1692 GAMA_benchmark wine-quality-white 6 \n",
+ "1641 GAMA_benchmark wine-quality-white 7 \n",
+ "3407 GAMA_benchmark yeast 0 \n",
+ "3426 GAMA_benchmark yeast 1 \n",
+ "1620 GAMA_benchmark yeast 2 \n",
+ "2090 GAMA_benchmark yeast 3 \n",
+ "1799 GAMA_benchmark yeast 9 \n",
+ "\n",
+ " info \n",
+ "3464 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "3445 NoResultError: 'NoneType' object is not iterable \n",
+ "1796 NoResultError: 'NoneType' object is not iterable \n",
+ "1823 NoResultError: 'NoneType' object is not iterable \n",
+ "1583 NoResultError: 'NoneType' object is not iterable \n",
+ "2043 NoResultError: 'NoneType' object is not iterable \n",
+ "2070 NoResultError: 'NoneType' object is not iterable \n",
+ "1566 NoResultError: 'NoneType' object is not iterable \n",
+ "2124 NoResultError: 'NoneType' object is not iterable \n",
+ "1724 NoResultError: 'NoneType' object is not iterable \n",
+ "3471 NoResultError: 'NoneType' object is not iterable \n",
+ "3420 NoResultError: 'NoneType' object is not iterable \n",
+ "1665 NoResultError: 'NoneType' object is not iterable \n",
+ "1668 NoResultError: 'NoneType' object is not iterable \n",
+ "1611 NoResultError: The least populated class in y ... \n",
+ "2056 NoResultError: The least populated class in y ... \n",
+ "1908 NoResultError: 'NoneType' object is not iterable \n",
+ "2001 NoResultError: 'NoneType' object is not iterable \n",
+ "1985 NoResultError: 'NoneType' object is not iterable \n",
+ "1876 NoResultError: 'NoneType' object is not iterable \n",
+ "3497 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "3466 NoResultError: \n",
+ "1898 NoResultError: \n",
+ "1961 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1602 NoResultError: \n",
+ "1797 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1682 NoResultError: \n",
+ "1812 NoResultError: \n",
+ "1853 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1756 NoResultError: \n",
+ "3504 NoResultError: \n",
+ "3467 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "2009 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1786 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "3409 NoResultError: \n",
+ "3457 NoResultError: \n",
+ "2080 NoResultError: \n",
+ "1896 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1859 NoResultError: \n",
+ "1941 NoResultError: \n",
+ "1882 NoResultError: \n",
+ "1892 NoResultError: \n",
+ "1770 NoResultError: \n",
+ "1847 NoResultError: [Errno 12] Cannot allocate memory \n",
+ "1794 NoResultError: 'NoneType' object is not iterable \n",
+ "1653 NoResultError: 'NoneType' object is not iterable \n",
+ "2040 NoResultError: 'NoneType' object is not iterable \n",
+ "1692 NoResultError: 'NoneType' object is not iterable \n",
+ "1641 NoResultError: 'NoneType' object is not iterable \n",
+ "3407 NoResultError: 'NoneType' object is not iterable \n",
+ "3426 NoResultError: 'NoneType' object is not iterable \n",
+ "1620 NoResultError: 'NoneType' object is not iterable \n",
+ "2090 NoResultError: 'NoneType' object is not iterable \n",
+ "1799 NoResultError: 'NoneType' object is not iterable "
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "gama = classification_errors[(classification_errors[\"framework\"] == \"GAMA_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "gama"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4ba7c3b4",
+ "metadata": {},
+ "source": [
+ "These look like GAMA errors to me (mostly memory)."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1b2886f3",
+ "metadata": {},
+ "source": [
+ "### 4.2.6 H2O\n",
+ "**Failures**: 10\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "All timeout errors"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "04e9d458",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 9 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " H2OAutoML \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "H2OAutoML KDDCup99 10 10"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"H2OAutoML\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 130,
+ "id": "563c1010",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 9043 \n",
+ " H2OAutoML \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: Interrupting thread MainThread ... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "9043 H2OAutoML KDDCup99 4 \n",
+ "\n",
+ " info \n",
+ "9043 NoResultError: Interrupting thread MainThread ... "
+ ]
+ },
+ "execution_count": 130,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "h2o = classification_errors[(classification_errors[\"framework\"] == \"H2OAutoML\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "h2o"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 71,
+ "id": "136ef08a",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "'NoResultError: Interrupting thread MainThread [ident=139723361433408] after 7200s timeout.'"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "h2o.iloc[0][\"info\"]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "43088a06",
+ "metadata": {},
+ "source": [
+ "Timeout not captured by regex, the second interrupt happened during saving of results."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "92a358ef",
+ "metadata": {},
+ "source": [
+ "### 4.2.7 LightAutoML\n",
+ "\n",
+ "**Failures**: 71\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Seem to be memory errors."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "e16066e0",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 2 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " KDDCup09-Upselling \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " bank-marketing \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " nomao \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " porto-seguro \n",
+ " 3 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "lightautoml APSFailure 9 9\n",
+ " KDDCup09-Upselling 7 7\n",
+ " KDDCup09_appetency 9 9\n",
+ " KDDCup99 10 10\n",
+ " bank-marketing 9 9\n",
+ " dionis 10 10\n",
+ " nomao 4 4\n",
+ " porto-seguro 3 3\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"lightautoml\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "e8c53507",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 5270 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 1 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 90 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 2 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 254 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 3 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 394 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 4 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " 147 \n",
+ " lightautoml \n",
+ " APSFailure \n",
+ " 5 \n",
+ " CalledProcessError: Command '/bench/frameworks... \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 5370 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 5265 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 294 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 355 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ " 439 \n",
+ " lightautoml \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: Pipeline finished with 0 models... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
69 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "5270 lightautoml APSFailure 1 \n",
+ "90 lightautoml APSFailure 2 \n",
+ "254 lightautoml APSFailure 3 \n",
+ "394 lightautoml APSFailure 4 \n",
+ "147 lightautoml APSFailure 5 \n",
+ "... ... ... ... \n",
+ "5370 lightautoml yeast 0 \n",
+ "5265 lightautoml yeast 1 \n",
+ "294 lightautoml yeast 2 \n",
+ "355 lightautoml yeast 3 \n",
+ "439 lightautoml yeast 9 \n",
+ "\n",
+ " info \n",
+ "5270 CalledProcessError: Command '/bench/frameworks... \n",
+ "90 CalledProcessError: Command '/bench/frameworks... \n",
+ "254 CalledProcessError: Command '/bench/frameworks... \n",
+ "394 CalledProcessError: Command '/bench/frameworks... \n",
+ "147 CalledProcessError: Command '/bench/frameworks... \n",
+ "... ... \n",
+ "5370 NoResultError: Pipeline finished with 0 models... \n",
+ "5265 NoResultError: Pipeline finished with 0 models... \n",
+ "294 NoResultError: Pipeline finished with 0 models... \n",
+ "355 NoResultError: Pipeline finished with 0 models... \n",
+ "439 NoResultError: Pipeline finished with 0 models... \n",
+ "\n",
+ "[69 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lama = classification_errors[(classification_errors[\"framework\"] == \"lightautoml\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "lama"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "c8a03d14",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array([\"CalledProcessError: Command '/bench/frameworks/lightautoml/venv/bin/python -W ignore /bench/frameworks/lightautoml/exec.py' returned non-zero exit status 139.\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/lightautoml/venv/bin/python -W ignore /bench/frameworks/lightautoml/exec.py' returned non-zero exit status 134.\",\n",
+ " 'NoResultError: Pipeline finished with 0 models for some reason.\\nProbably one or more models failed',\n",
+ " 'NoResultError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing th…',\n",
+ " 'NoResultError: Unable to allocate 2.12 GiB for an array with shape (100000, 355, 8) and data type float64'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lama[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "dc9d6f5b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 5372 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 0 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 85 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 4 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 212 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 5 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 424 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 6 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 59 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 7 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 438 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 8 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ " 5226 \n",
+ " lightautoml \n",
+ " dionis \n",
+ " 9 \n",
+ " NoResultError: A worker process managed by the... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "5372 lightautoml dionis 0 \n",
+ "85 lightautoml dionis 4 \n",
+ "212 lightautoml dionis 5 \n",
+ "424 lightautoml dionis 6 \n",
+ "59 lightautoml dionis 7 \n",
+ "438 lightautoml dionis 8 \n",
+ "5226 lightautoml dionis 9 \n",
+ "\n",
+ " info \n",
+ "5372 NoResultError: A worker process managed by the... \n",
+ "85 NoResultError: A worker process managed by the... \n",
+ "212 NoResultError: A worker process managed by the... \n",
+ "424 NoResultError: A worker process managed by the... \n",
+ "59 NoResultError: A worker process managed by the... \n",
+ "438 NoResultError: A worker process managed by the... \n",
+ "5226 NoResultError: A worker process managed by the... "
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "lama[lama[\"info\"] == 'NoResultError: A worker process managed by the executor was unexpectedly terminated. This could be caused by a segmentation fault while calling the function or by an excessive memory usage causing th…']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2254bb50",
+ "metadata": {},
+ "source": [
+ "Thrown from within lightautoml."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "93433454",
+ "metadata": {},
+ "source": [
+ "### 4.2.8 MLJar\n",
+ "\n",
+ "**Failures**: 140\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "83339baf",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 2 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 6 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " Click_prediction_small \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " Internet-Advertisements \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " KDDCup09_appetency \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " PhishingWebsites \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " Satellite \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " adult \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " bank-marketing \n",
+ " 6 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " blood-transfusion-service-center \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " credit-g \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " helena \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " kr-vs-kp \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " nomao \n",
+ " 7 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " ozone-level-8hr \n",
+ " 8 \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ " phoneme \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " qsar-biodeg \n",
+ " 9 \n",
+ " 9 \n",
+ " \n",
+ " \n",
+ " wilt \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mljarsupervised_benchmark APSFailure 6 6\n",
+ " Click_prediction_small 10 10\n",
+ " Internet-Advertisements 9 9\n",
+ " KDDCup09_appetency 5 5\n",
+ " PhishingWebsites 10 10\n",
+ " Satellite 7 7\n",
+ " adult 10 10\n",
+ " bank-marketing 6 6\n",
+ " blood-transfusion-service-center 10 10\n",
+ " credit-g 10 10\n",
+ " dionis 10 10\n",
+ " helena 1 1\n",
+ " kr-vs-kp 7 7\n",
+ " nomao 7 7\n",
+ " ozone-level-8hr 8 8\n",
+ " phoneme 10 10\n",
+ " qsar-biodeg 9 9\n",
+ " wilt 5 5"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mljarsupervised_benchmark\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "e1cd7e9c",
+ "metadata": {
+ "scrolled": false
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 6747 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 0 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 6785 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 1 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 4354 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 3 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 3983 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 5 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 4003 \n",
+ " mljarsupervised_benchmark \n",
+ " APSFailure \n",
+ " 7 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 4063 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 2 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 4071 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 3 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 4318 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 7 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 4179 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 8 \n",
+ " NoResultError: catboost/libs/data/model_datase... \n",
+ " \n",
+ " \n",
+ " 3918 \n",
+ " mljarsupervised_benchmark \n",
+ " wilt \n",
+ " 9 \n",
+ " NoResultError: \"['Ensemble_prediction_0_for_1_... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
138 rows × 4 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "6747 mljarsupervised_benchmark APSFailure 0 \n",
+ "6785 mljarsupervised_benchmark APSFailure 1 \n",
+ "4354 mljarsupervised_benchmark APSFailure 3 \n",
+ "3983 mljarsupervised_benchmark APSFailure 5 \n",
+ "4003 mljarsupervised_benchmark APSFailure 7 \n",
+ "... ... ... ... \n",
+ "4063 mljarsupervised_benchmark wilt 2 \n",
+ "4071 mljarsupervised_benchmark wilt 3 \n",
+ "4318 mljarsupervised_benchmark wilt 7 \n",
+ "4179 mljarsupervised_benchmark wilt 8 \n",
+ "3918 mljarsupervised_benchmark wilt 9 \n",
+ "\n",
+ " info \n",
+ "6747 NoResultError: catboost/libs/data/model_datase... \n",
+ "6785 NoResultError: catboost/libs/data/model_datase... \n",
+ "4354 NoResultError: catboost/libs/data/model_datase... \n",
+ "3983 NoResultError: catboost/libs/data/model_datase... \n",
+ "4003 NoResultError: catboost/libs/data/model_datase... \n",
+ "... ... \n",
+ "4063 NoResultError: catboost/libs/data/model_datase... \n",
+ "4071 NoResultError: catboost/libs/data/model_datase... \n",
+ "4318 NoResultError: catboost/libs/data/model_datase... \n",
+ "4179 NoResultError: catboost/libs/data/model_datase... \n",
+ "3918 NoResultError: \"['Ensemble_prediction_0_for_1_... \n",
+ "\n",
+ "[138 rows x 4 columns]"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mljar = classification_errors[(classification_errors[\"framework\"] == \"mljarsupervised_benchmark\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "mljar"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "40055504",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 169 should be feature with name Ensemble_prediction_0_for_neg_1_for_pos (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_neg_1_for_pos\\', \\'59_CatBoost_prediction_0_for_neg_1_for_pos\\', \\'62_CatBoost_prediction_0_for_neg_1_for_pos\\', \\'59_CatBoost_BoostOnErrors_prediction_0_for_neg…',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139842026686272] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140364635006784] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139789014480704] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140604626982720] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139934569097024] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=139699174479680] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140679259940672] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140336713783104] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140483658614592] after 18000s timeout.',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140324161185600] after 18000s timeout.',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 1558 should be feature with name Ensemble_prediction_0_for_ad_1_for_noad (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_ad_1_for_noad\\', \\'72_CatBoost_prediction_0_for_ad_1_for_noad\\', \\'75_Xgboost_prediction_0_for_ad_1_for_noad\\', \\'76_Xgboost_prediction_0_for_ad_1_for_noad\\', \\'70…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_ad_1_for_noad\\', \\'36_CatBoost_prediction_0_for_ad_1_for_noad\\', \\'10_Xgboost_categorical_mix_GoldenFeatures_prediction_0_for_ad_1_for_noad\\', \\'10_Xgboost_Golde…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_ad_1_for_noad\\', \\'33_CatBoost_KMeansFeatures_prediction_0_for_ad_1_for_noad\\', \\'28_CatBoost_KMeansFeatures_prediction_0_for_ad_1_for_noad\\', \\'28_CatBoost_pred…',\n",
+ " 'NoResultError: Interrupting thread MainThread [ident=140366874363712] after 18000s timeout.',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 10 should be feature with name Ensemble_prediction_0_for_ad_1_for_noad (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_-1_1_for_1\\', \\'71_CatBoost_GoldenFeatures_prediction_0_for_-1_1_for_1\\', \\'63_CatBoost_prediction_0_for_-1_1_for_1\\', \\'30_CatBoost_KMeansFeatures_prediction_0_…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 207 should be feature with name Ensemble_prediction_0_for_-1_1_for_1 (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_-1_1_for_1\\', \\'72_CatBoost_prediction_0_for_-1_1_for_1\\', \\'64_CatBoost_prediction_0_for_-1_1_for_1\\', \\'32_CatBoost_KMeansFeatures_SelectedFeatures_prediction_…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 30 should be feature with name Ensemble_prediction_0_for_-1_1_for_1 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 29 should be feature with name Ensemble_prediction_0_for_-1_1_for_1 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 36 should be feature with name Ensemble_prediction_0_for_Anomaly_1_for_Normal (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_Anomaly_1_for_Normal\\', \\'50_ExtraTrees_prediction_0_for_Anomaly_1_for_Normal\\', \\'106_ExtraTrees_prediction_0_for_Anomaly_1_for_Normal\\', \\'108_ExtraTrees_predi…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_Anomaly_1_for_Normal\\', \\'72_ExtraTrees_SelectedFeatures_BoostOnErrors_prediction_0_for_Anomaly_1_for_Normal\\', \\'72_ExtraTrees_SelectedFeatures_prediction_0_f…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_Anomaly_1_for_Normal\\', \\'97_ExtraTrees_prediction_0_for_Anomaly_1_for_Normal\\', \\'98_ExtraTrees_prediction_0_for_Anomaly_1_for_Normal\\', \\'97_ExtraTrees_BoostOn…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_Anomaly_1_for_Normal\\', \\'54_ExtraTrees_KMeansFeatures_prediction_0_for_Anomaly_1_for_Normal\\', \\'72_ExtraTrees_prediction_0_for_Anomaly_1_for_Normal\\', \\'54_Ext…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 14 should be feature with name Ensemble_prediction_0_for_<=50K_1_for_>50K (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 13 should be feature with name Ensemble_prediction_0_for_<=50K_1_for_>50K (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 14 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 13 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 16 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 15 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 4 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 5 should be feature with name 96_ExtraTrees_GoldenFeatures_SelectedFeatures_prediction_0_for_1_1_for_2 (found 96_Extr…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'111_ExtraTrees_BoostOnErrors_prediction_0_for_1_1_for_2\\', \\'111_ExtraTrees_prediction_0_for_1_1_for_2\\', \\'113_ExtraTrees_prediction_0_for_1_1_fo…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 21 should be feature with name 38_CatBoost_prediction_0_for_bad_1_for_good (found 38_CatBoost_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 20 should be feature with name Ensemble_prediction_0_for_bad_1_for_good (found Ensemble_prediction).',\n",
+ " \"CalledProcessError: Command '/bench/frameworks/mljarsupervised/venv/bin/python -W ignore /bench/frameworks/mljarsupervised/exec.py' returned non-zero exit status 143.\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/mljarsupervised/venv/bin/python -W ignore /bench/frameworks/mljarsupervised/exec.py' returned non-zero exit status 139.\",\n",
+ " \"CalledProcessError: Command '/bench/frameworks/mljarsupervised/venv/bin/python -W ignore /bench/frameworks/mljarsupervised/exec.py' returned non-zero exit status 137.\",\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 36 should be feature with name Ensemble_prediction_0_for_nowin_1_for_won (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 51 should be feature with name 78_CatBoost_prediction_0_for_nowin_1_for_won (found 78_CatBoost_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 118 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 44 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'76_CatBoost_prediction_0_for_1_1_for_2\\', \\'76_CatBoost_BoostOnErrors_prediction_0_for_1_1_for_2\\', \\'101_CatBoost_prediction_0_for_1_1_for_2\\', \\'7…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 72 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'75_RandomForest_SelectedFeatures_prediction_0_for_1_1_for_2\\', \\'47_RandomForest_KMeansFeatures_prediction_0_for_1_1_for_2\\', \\'75_RandomForest_Se…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'100_CatBoost_GoldenFeatures_SelectedFeatures_prediction_0_for_1_1_for_2\\', \\'56_ExtraTrees_GoldenFeatures_SelectedFeatures_prediction_0_for_1_1_…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 78 should be feature with name 100_RandomForest_GoldenFeatures_prediction_0_for_1_1_for_2 (found 100_RandomForest_Gol…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 76 should be feature with name 105_CatBoost_SelectedFeatures_BoostOnErrors_prediction_0_for_1_1_for_2 (found 105_CatB…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 5 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'79_LightGBM_prediction_0_for_1_1_for_2\\', \\'97_CatBoost_prediction_0_for_1_1_for_2\\', \\'76_CatBoost_prediction_0_for_1_1_for_2\\', \\'77_CatBoost_pred…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'77_CatBoost_prediction_0_for_1_1_for_2\\', \\'34_CatBoost_prediction_0_for_1_1_for_2\\', \\'36_CatBoost_prediction_0_for_1_1_for_2\\', \\'36_CatBoost_KMea…',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 41 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 19 should be feature with name Ensemble_prediction_0_for_1_1_for_2 (found Ensemble_prediction).',\n",
+ " 'NoResultError: catboost/libs/data/model_dataset_compatibility.cpp:81: At position 42 should be feature with name 74_ExtraTrees_prediction_0_for_1_1_for_2 (found 74_ExtraTrees_prediction).',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'104_CatBoost_GoldenFeatures_SelectedFeatures_prediction_0_for_1_1_for_2\\', \\'79_CatBoost_GoldenFeatures_SelectedFeatures_prediction_0_for_1_1_fo…',\n",
+ " 'NoResultError: \"[\\'Ensemble_prediction_0_for_1_1_for_2\\', \\'57_NeuralNetwork_prediction_0_for_1_1_for_2\\', \\'76_NeuralNetwork_GoldenFeatures_prediction_0_for_1_1_for_2\\', \\'106_NeuralNetwork_GoldenFeatures_…'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mljar[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f12bc9da",
+ "metadata": {},
+ "source": [
+ "### 4.2.9 MLPlan\n",
+ "\n",
+ "To be redone"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "107fb53e",
+ "metadata": {},
+ "source": [
+ "### 4.2.10 MLR3AutoML\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "29d3f77d",
+ "metadata": {},
+ "source": [
+ "**Failures**: 20\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Based on a sample, seem to be framework issues (children dying because of memory issues)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "a8bdc5c8",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " mlr3automl \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "mlr3automl KDDCup09-Upselling 10 10\n",
+ " KDDCup99 10 10"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"mlr3automl\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "156ec767",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/mlr3automl/lib\\'); source(\\'/bench/frameworks/mlr3automl/exec.R\\'); run(\\'/input/org/openml/www/datasets/43072/dataset_trai…',\n",
+ " 'CalledProcessError: Command \\'Rscript --vanilla -e \".libPaths(\\'/bench/frameworks/mlr3automl/lib\\'); source(\\'/bench/frameworks/mlr3automl/exec.R\\'); run(\\'/input/org/openml/www/datasets/42746/dataset_trai…'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mlr[\"info\"].unique()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0aafc7c3",
+ "metadata": {},
+ "source": [
+ "`Kddcup99.3`, `Kddcup99.6`, :\n",
+ "```\n",
+ "INFO [01:30:11.965] [bbotk] Starting to optimize 22 parameter(s) with '' and ' [any=TRUE]'\n",
+ "INFO [01:30:12.072] [bbotk] Evaluating 9 configuration(s)\n",
+ "INFO [01:30:14.042] [mlr3] Running benchmark with 9 resampling iterations\n",
+ "\n",
+ "[ERROR] [amlb.utils.process:01:31:25.541]\n",
+ "Attaching package: ‘mlr3extralearners’\n",
+ "\n",
+ "The following objects are masked from ‘package:mlr3’:\n",
+ "\n",
+ " lrn, lrns\n",
+ "\n",
+ "Loading required package: paradox\n",
+ "Error: Failed to retrieve the result of MulticoreFuture (future_mapply-2) from the forked worker (on localhost; PID 636). Post-mortem diagnostic: No process exists with this PID, i.e. the forked localhost worker is no longer alive. Detected a non-exportable reference (‘externalptr’) in one of the globals () used in the future expression\n",
+ "In addition: Warning message:\n",
+ "In mccollect(jobs = jobs, wait = TRUE) :\n",
+ " 1 parallel job did not deliver a result\n",
+ "Timing stopped at: 3342 216.6 3200\n",
+ "Execution halted\n",
+ "```\n",
+ "\n",
+ "`kddcup09-upselling`: `Error in mcfork(detached): unable to fork, possible reason: Cannot allocate memory`"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1a9546ca",
+ "metadata": {},
+ "source": [
+ "### 4.2.11 TPOT\n",
+ "\n",
+ "**Failures**: 53\n",
+ "\n",
+ "**Reruns required**: 0\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "f7e16f25",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 29 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " APSFailure \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " Bioresponse \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " KDDCup09-Upselling \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " amazon-commerce-reviews \n",
+ " 2 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " arcene \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " christine \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " gina \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " philippine \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " sf-police-incidents \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " volkert \n",
+ " 1 \n",
+ " 1 \n",
+ " \n",
+ " \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " yeast \n",
+ " 5 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TPOT APSFailure 1 1\n",
+ " Bioresponse 1 1\n",
+ " KDDCup09-Upselling 10 10\n",
+ " KDDCup99 10 10\n",
+ " amazon-commerce-reviews 2 2\n",
+ " arcene 4 4\n",
+ " christine 1 1\n",
+ " dionis 10 10\n",
+ " gina 1 1\n",
+ " philippine 1 1\n",
+ " sf-police-incidents 1 1\n",
+ " volkert 1 1\n",
+ " wine-quality-white 5 5\n",
+ " yeast 5 5"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TPOT\", classification)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "bb363c8c",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 512 \n",
+ " TPOT \n",
+ " Bioresponse \n",
+ " 0 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 604 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 0 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5452 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 4 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5937 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 5 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5729 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 6 \n",
+ " NoResultError: 'LinearSVC' object has no attri... \n",
+ " \n",
+ " \n",
+ " 5581 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 7 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5830 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 8 \n",
+ " NoResultError: probability estimates are not a... \n",
+ " \n",
+ " \n",
+ " 5777 \n",
+ " TPOT \n",
+ " KDDCup99 \n",
+ " 9 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 635 \n",
+ " TPOT \n",
+ " amazon-commerce-reviews \n",
+ " 0 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5923 \n",
+ " TPOT \n",
+ " amazon-commerce-reviews \n",
+ " 7 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5429 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 6 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5872 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 7 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5823 \n",
+ " TPOT \n",
+ " arcene \n",
+ " 9 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5519 \n",
+ " TPOT \n",
+ " christine \n",
+ " 5 \n",
+ " NoResultError: A pipeline has not yet been opt... \n",
+ " \n",
+ " \n",
+ " 5462 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 3 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5791 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 4 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5741 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 5 \n",
+ " NoResultError: 'LinearSVC' object has no attri... \n",
+ " \n",
+ " \n",
+ " 5478 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 6 \n",
+ " NoResultError: probability estimates are not a... \n",
+ " \n",
+ " \n",
+ " 5523 \n",
+ " TPOT \n",
+ " wine-quality-white \n",
+ " 7 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 596 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 0 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 594 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 1 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5526 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 2 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5716 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 3 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ " 5744 \n",
+ " TPOT \n",
+ " yeast \n",
+ " 9 \n",
+ " NoResultError: y_true and y_pred contain diffe... \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task fold \\\n",
+ "512 TPOT Bioresponse 0 \n",
+ "604 TPOT KDDCup99 0 \n",
+ "5452 TPOT KDDCup99 4 \n",
+ "5937 TPOT KDDCup99 5 \n",
+ "5729 TPOT KDDCup99 6 \n",
+ "5581 TPOT KDDCup99 7 \n",
+ "5830 TPOT KDDCup99 8 \n",
+ "5777 TPOT KDDCup99 9 \n",
+ "635 TPOT amazon-commerce-reviews 0 \n",
+ "5923 TPOT amazon-commerce-reviews 7 \n",
+ "5429 TPOT arcene 6 \n",
+ "5872 TPOT arcene 7 \n",
+ "5823 TPOT arcene 9 \n",
+ "5519 TPOT christine 5 \n",
+ "5462 TPOT wine-quality-white 3 \n",
+ "5791 TPOT wine-quality-white 4 \n",
+ "5741 TPOT wine-quality-white 5 \n",
+ "5478 TPOT wine-quality-white 6 \n",
+ "5523 TPOT wine-quality-white 7 \n",
+ "596 TPOT yeast 0 \n",
+ "594 TPOT yeast 1 \n",
+ "5526 TPOT yeast 2 \n",
+ "5716 TPOT yeast 3 \n",
+ "5744 TPOT yeast 9 \n",
+ "\n",
+ " info \n",
+ "512 NoResultError: A pipeline has not yet been opt... \n",
+ "604 NoResultError: y_true and y_pred contain diffe... \n",
+ "5452 NoResultError: A pipeline has not yet been opt... \n",
+ "5937 NoResultError: A pipeline has not yet been opt... \n",
+ "5729 NoResultError: 'LinearSVC' object has no attri... \n",
+ "5581 NoResultError: A pipeline has not yet been opt... \n",
+ "5830 NoResultError: probability estimates are not a... \n",
+ "5777 NoResultError: y_true and y_pred contain diffe... \n",
+ "635 NoResultError: A pipeline has not yet been opt... \n",
+ "5923 NoResultError: A pipeline has not yet been opt... \n",
+ "5429 NoResultError: A pipeline has not yet been opt... \n",
+ "5872 NoResultError: A pipeline has not yet been opt... \n",
+ "5823 NoResultError: A pipeline has not yet been opt... \n",
+ "5519 NoResultError: A pipeline has not yet been opt... \n",
+ "5462 NoResultError: y_true and y_pred contain diffe... \n",
+ "5791 NoResultError: y_true and y_pred contain diffe... \n",
+ "5741 NoResultError: 'LinearSVC' object has no attri... \n",
+ "5478 NoResultError: probability estimates are not a... \n",
+ "5523 NoResultError: y_true and y_pred contain diffe... \n",
+ "596 NoResultError: y_true and y_pred contain diffe... \n",
+ "594 NoResultError: y_true and y_pred contain diffe... \n",
+ "5526 NoResultError: y_true and y_pred contain diffe... \n",
+ "5716 NoResultError: y_true and y_pred contain diffe... \n",
+ "5744 NoResultError: y_true and y_pred contain diffe... "
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "tpot = classification_errors[(classification_errors[\"framework\"] == \"TPOT\") & (~classification_errors[\"info\"].isnull()) & (~classification_errors[\"info\"].apply(is_timeout_error))].sort_values(by=[\"task\", \"fold\"])\n",
+ "tpot"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "47f3f680",
+ "metadata": {},
+ "source": [
+ " - `Amazon commerce`: memory error while forking the process as part of joblib backend.\n",
+ " - `AttributeError: 'LinearSVC' object has no attribute 'predict_proba'` was internal to `fit` - it was **not** during our `predict` fallback."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "0fad9fc0",
+ "metadata": {},
+ "source": [
+ "### 4.2.12 RandomForest\n",
+ "\n",
+ "**Failures**: 0\n",
+ "\n",
+ "**Reruns required**: 0"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 35,
+ "id": "c2558c8f",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "Empty DataFrame\n",
+ "Columns: [fold, info]\n",
+ "Index: []"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"RandomForest\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "34540068",
+ "metadata": {},
+ "source": [
+ "### 4.2.13 TunedRandomForest\n",
+ "\n",
+ "**Failures**: 24\n",
+ "\n",
+ "**Reruns required**: 0\n",
+ "\n",
+ "Memory issues, will impute with RandomForest."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "faf5aeac",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Of the errors below, 3 are timeout errors.\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " fold \n",
+ " info \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " KDDCup09-Upselling \n",
+ " 4 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " KDDCup99 \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ " dionis \n",
+ " 10 \n",
+ " 10 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " fold info\n",
+ "framework task \n",
+ "TunedRandomForest KDDCup09-Upselling 4 4\n",
+ " KDDCup99 10 10\n",
+ " dionis 10 10"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "errors_for_framework(\"TunedRandomForest\", classification)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bdd6a527",
+ "metadata": {},
+ "source": [
+ "# 5. Remarks\n",
+ "To keep a clear overview, this notebook is formatted in a somewhat destructive manner - it relies on an unversioned results file, and the cells get updated based on the latest information. When a bug is identified which requires runs to be re-evaluated, this information is only stored as long as the new results are not in yet. This version control could of course be achieved through Github, but it would require a non-public repository or our results would be leaked prematurely. Instead simple file sharing and renaming is used to preserve the history, to some extent. It is always possible to deduce which jobs have been rerun, as *all* results are included in the final result files. We hope this is still a satisfactory middle-ground: for any jobs that have missing results, it is immediately clear why. Motivation for reran jobs can still be found (although with more effort).\n",
+ "\n",
+ "For results of future work we will consider a private repository from the start which we will publicize on publication, to make the process (even) more transparent."
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.8.3"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/reports/Result Visualization.ipynb b/reports/Result Visualization.ipynb
new file mode 100644
index 000000000..2bbe6ad02
--- /dev/null
+++ b/reports/Result Visualization.ipynb
@@ -0,0 +1,1990 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "878ccb33",
+ "metadata": {},
+ "source": [
+ "# AMLB Visualizations\n",
+ "This notebook contains code to generate several figures from the paper \"AMLB: an AutoML Benchmark\" by Gijsbers et al. (2022). As input, it assumes \"cleaned logs\" which are available at `http://openml-test.win.tue.nl/amlb/*_cleaned.csv` and the `CleanResults` notebook shows how they are constructed from the raw results. This notebook contains code to generate:\n",
+ "\n",
+ " - [Figure 2: CD plots with Nimenyi post-hoc test after imputing missing values with the constant predictor baseline.](#CD-Plots)\n",
+ " - [Figure 3: Boxplots of framework performance across tasks after scaling the performance values from random forest (-1) to best observed (0)](#Scaled-Results)\n",
+ " - [Figure 8: Time spent during search.](#Training-Duration)\n",
+ " - [latex code for tables 4-9 in the appendix](#Tables)\n",
+ " \n",
+ "The `orange` dependency for CD plots can be problematic with (some?) Windows setups, but it is possible to install only a few of `orange`'s dependencies to make it work.\n",
+ "\n",
+ "*The notebook's code is pretty messy/terrible. PRs to clean it up are welcome, but must be able to produce identical plots.*\n",
+ "\n",
+ "This notebook will be replaced with the official publication of the AMLB paper (or earlier). To install this notebook, install the following dependencies:\n",
+ "\n",
+ "```\n",
+ "jupyterlab\n",
+ "Orange3==3.30.0\n",
+ "seaborn\n",
+ "pandas<3\n",
+ "numpy\n",
+ "```\n",
+ "For orange, depending on the platform, it may be easier to install a more recent version, and then downgrade with `python -m pip install \"Orange3==3.30.0\" --no-deps` (we only use the `CD_plot` function, which is no longer present in modern releases, and `Orange3` doesn't need _all_ dependencies installed for that function to function).\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "8a2ac2a5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import math\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "import seaborn\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "23314681",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "#classification = pd.read_csv(r\"classification_cleaned.csv\")\n",
+ "classification = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/classification_cleaned.csv\")\n",
+ "classification.name = \"classification\"\n",
+ "#regression = pd.read_csv(r\"regression_cleaned.csv\")\n",
+ "regression = pd.read_csv(r\"http://openml-test.win.tue.nl/amlb/regression_cleaned.csv\")\n",
+ "regression.name = \"regression\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "b323d6c3",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "metric_by_type = {\n",
+ " \"auc\": \"Binary Classification\",\n",
+ " \"neg_logloss\": \"Multiclass Classification\",\n",
+ " \"neg_rmse\": \"Regression\",\n",
+ " \"all\": \"All Tasks\",\n",
+ "}\n",
+ "\n",
+ "budgets = {\n",
+ " \"1h8c_gp3\": \"1 hour\",\n",
+ " \"4h8c_gp3\": \"4 hours\",\n",
+ "}\n",
+ "\n",
+ "baselines = [\"constantpredictor\", \"RandomForest\", \"TunedRandomForest\"]\n",
+ "ignore = [\"mlr3automl\"]\n",
+ "\n",
+ "def get_results(metric, budget):\n",
+ " r = None\n",
+ " metric = dict(logloss=\"neg_logloss\", rmse=\"neg_rmse\").get(metric, metric)\n",
+ " # A bit complicated for a simple two filters, but this preserves more information if only requesting one take type.\n",
+ " for results in [classification, regression]:\n",
+ " if metric in results.metric.unique():\n",
+ " if budget in results.constraint.unique():\n",
+ " r = results[(results[\"constraint\"] == budget) & (results[\"metric\"] == metric)]\n",
+ " elif budget == \"all\": \n",
+ " r = results[(results[\"metric\"] == metric)]\n",
+ " else:\n",
+ " raise ValueError(f\"{budget} must be in the results or 'all'.\")\n",
+ " if metric == \"all\":\n",
+ " shared_columns = [\"framework\", \"task\", \"constraint\", \"fold\", \"result\", \"predict_duration\", \"training_duration\", \"metric\", \"info\"]\n",
+ " combined = pd.concat([classification[shared_columns], regression[shared_columns]], ignore_index=True)\n",
+ " if budget in combined.constraint.unique():\n",
+ " r = combined[(combined[\"constraint\"] == budget)]\n",
+ " elif budget == \"all\": \n",
+ " r = combined\n",
+ " else:\n",
+ " print(combined.constraint.unique())\n",
+ " raise ValueError(f\"{budget} must be in the results or 'all'.\")\n",
+ " if r is None:\n",
+ " raise RuntimeError(f\"No results found for {metric}.\")\n",
+ " r = r.copy()\n",
+ " r[\"framework\"] = r[\"framework\"].str.replace(\"_benchmark\", \"(B)\")\n",
+ " return r\n",
+ "\n",
+ "def impute_values(results, strategy, inplace=False):\n",
+ " \"\"\" Impute missing values of `results` with one of `strategy`:\n",
+ " - a baseline (i.e., RandomForest, TunedRandomForest or constantpredictor)\n",
+ " - worst: worst that any AutoML framework found for that fold\n",
+ " - max(worst, framework): the best between worst and framework\n",
+ " - min(worst, framework): the worst between worst and framework\n",
+ " \"\"\"\n",
+ " if not inplace:\n",
+ " results = results.copy()\n",
+ " \n",
+ " # I know this is ugly :) \n",
+ " min_or_max = min if \"min(\" in strategy else (max if \"max(\" in strategy else None)\n",
+ " \n",
+ " if \"worst\" in strategy:\n",
+ " worst_results = get_extreme_result_per_job(results)\n",
+ " if \",\" in strategy:\n",
+ " new_strategy = strategy.split(', ')[-1][:-1]\n",
+ " if new_strategy not in results.framework.unique():\n",
+ " raise ValueError(f\"{strategy} is invalid, can not find '{new_strategy}' as reference framework.\")\n",
+ " strategy = new_strategy\n",
+ " \n",
+ " lookup_table = results.set_index([\"framework\", \"task\", \"fold\", \"constraint\"])\n",
+ " for index, row in results.iterrows():\n",
+ " if np.isnan(row[\"result\"]):\n",
+ " task, fold, constraint = row[[\"task\", \"fold\", \"constraint\"]]\n",
+ " if strategy in results.framework.unique():\n",
+ " value = lookup_table.loc[(strategy, task, fold, constraint)].result\n",
+ " if min_or_max or strategy == \"worst\":\n",
+ " worst = worst_results.loc[(task, fold, constraint)].result\n",
+ " if min_or_max:\n",
+ " value = min_or_max(worst, value)\n",
+ " else:\n",
+ " value = worst\n",
+ " results.loc[index, \"result\"] = value\n",
+ " return results\n",
+ "\n",
+ "def get_extreme_result_per_job(results, method=min, with_baseline=False):\n",
+ " \"\"\" Finds the best/worst result of an AutoML framework for each (fold, task) excluding failures. \"\"\" \n",
+ " if not with_baseline:\n",
+ " results = results[~results.framework.isin(baselines)]\n",
+ " worst = results.groupby([\"task\", \"fold\", \"constraint\"]).agg({\"result\": method})\n",
+ " return worst"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "31ca80ce",
+ "metadata": {},
+ "source": [
+ "# CD Plots\n",
+ "Figure 2 in the paper."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "c0850d44",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import Orange\n",
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "from scipy.stats import friedmanchisquare"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "15be610b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def calculcate_average_rank(results, rank_kwargs=None):\n",
+ " if rank_kwargs is None:\n",
+ " rank_kwargs = {}\n",
+ " \n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ " agg[\"rank\"] = agg.groupby(\"task\").result.rank(ascending=False, **rank_kwargs)\n",
+ " return agg.groupby(\"framework\", as_index=False)[\"rank\"].mean()\n",
+ "\n",
+ "def calculcate_rank_per_task(results, rank_kwargs=None):\n",
+ " if rank_kwargs is None:\n",
+ " rank_kwargs = {}\n",
+ " \n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ " agg[\"rank\"] = agg.groupby(\"task\").result.rank(ascending=False, **rank_kwargs)\n",
+ " return agg"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "76b26aa5",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_cd(results, filename=None):\n",
+ " ranks = calculcate_rank_per_task(results, rank_kwargs=dict(method=\"average\", na_option=\"bottom\"))\n",
+ " r, p = friedmanchisquare(*[ranks[ranks.framework == fw][\"rank\"] for fw in ranks.framework.unique()])\n",
+ " if p >= 0.05:\n",
+ " # Given the number of results we don't really expect this to happen.\n",
+ " raise RuntimeError(\"Ranks are not statistically significantly different.\")\n",
+ " rank_stats = calculcate_average_rank(results, rank_kwargs=dict(method=\"average\", na_option=\"bottom\"))\n",
+ " n_tasks = results.task.nunique()\n",
+ " critical_difference = Orange.evaluation.compute_CD(rank_stats[\"rank\"], n_tasks)\n",
+ " Orange.evaluation.graph_ranks(\n",
+ " rank_stats[\"rank\"],\n",
+ " rank_stats[\"framework\"],\n",
+ " cd=critical_difference,\n",
+ " width=6,\n",
+ " textspace=1.5,\n",
+ " filename=filename\n",
+ " )"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "42cab154",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating cd-binary-1h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating cd-multiclass-1h8c_gp3-constantpredictor.pdf\n",
+ "generating cd-regression-1h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating cd-binary-4h8c_gp3-constantpredictor.pdf\n",
+ "generating cd-multiclass-4h8c_gp3-constantpredictor.pdf\n",
+ "generating cd-regression-4h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:13: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4152975659.py:5: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " agg = results.groupby([\"framework\", \"task\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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sCwRqQ0PyxIRFT9eUEFERESkQVjcEREREWkQFndEREREGoTFHREREZEGYXFHREREpEFY3BEREX0gwsPDoVAokJaWVuDzssrb2xsBAQFqG/9V67lXr16YNWvWW4114cIFVKhQQa33YGdxVwYcPHgQrq6ub33z4Y8//hhbt25VU1ZERPS+PD09kZqaCjMzs5JOpURt27Yt373a1S0uLg579uzByJEjpTZvb28oFArpYWNjg65du+LatWtSnxo1auDjjz/GTz/9pLbcWNy9p1u3bmHUqFGoUqUK9PX1YWNjgyZNmmDlypXIysqS9Z09ezaUSiXmz5+fb5zg4GAoFAq4urrmm/bnn39CoVDAyckp37THjx/D0tIS5cqVQ3Z2doE5jh8/Ht9//z2USqUs1vOHsbEx6tevj23btsnm+/777zFx4sRC36iYiIiKl66uLmxtbaFQKN55jJycnCLMqGgVNjdLS0uYmJioORu5n3/+GV27doWxsbGsfdCgQUhNTcXNmzfx119/4fr16+jZs6esT79+/bBy5Urk5uaqJTcWd+/hypUrqFu3Lvbt24dZs2bhzJkzOH78OMaPH49du3bhwIEDsv5r167F+PHjsXbt2gLHMzIywp07d3D8+HFZe2BgoHST55dt3boVNWvWRPXq1bFjx458048ePYqkpCR06dJF1m5qaorU1FSkpqbizJkz8PX1Rbdu3ZCQkCD1adu2LdLT07F3797CrA4iInpL3t7eGDFiBAICAmBhYQEbGxusWbMGmZmZ6NevH0xMTFClSpVXfg6/fLjw3r176N69O8qXLw9DQ0O4ublh48aN+WIOHz4cAQEBKFeuHHx9fSGEwLRp01CxYkXo6enB3t5etkdKoVDk28aYm5sjODgYAJCcnAyFQoFNmzbB09MT+vr6qFWrFiIiImTznD9/Hm3btoWxsTFsbGzQq1cv3L1797W59ejRA35+frJxnj59inLlymHdunXSfC8ell2xYgVcXFyknS5ffPGFNE2lUmH27NmoVKkSDAwM4O7uji1btsjG37NnD6pWrQoDAwM0b94cycnJsul5eXnYsmULOnTokO81MTQ0hK2tLezs7PDxxx9j+PDhOH36tKxPq1atcP/+/Xzrp6iwuHsPQ4cOhba2NmJiYtCtWze4urqicuXK6NixI3bv3i170SMiIvD48WNMnz4djx49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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAEdCAYAAABwhHFwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABULklEQVR4nO3dd1gU1/s28HtZei8SSqQIIgIiYg2gYkHRGKLGKFFUsCQxYq9JjCUaY48lmhgNQkwsJLHE2LBCrAgqiBFRUcQo6tcuWFD2vH/4Mj9HEEFZ0OX+XNdeOmfOnOeZAXaenbKjEEIIEBEREZFG0arsBIiIiIio/LHIIyIiItJALPKIiIiINBCLPCIiIiINxCKPiIiISAOxyCMiIiLSQCzyiIiIiDQQizwiIiIiDcQij4iIiEgDscgjIiIi0kAs8oiIiIg0EIs8IiIiIg3EIo+IiIhIA7HIIyIiItJALPKIiIiINBCLPCIiIiINxCKP6CmXL1/G4MGD4eLiAj09PTg4OCAkJAQ7d+4EADg7O0OhUEChUMDAwADOzs7o1q0bdu3aVcmZExERybHII/r/srKy0KBBA+zatQuzZs1CWloatm7dipYtWyIyMlLqN3nyZOTk5CAjIwPLly+Hubk5goKCMHXq1ErMnoiISE67shMgel0MHDgQCoUChw4dgpGRkdTu5eWFvn37StMmJiawtbUFADg6OqJ58+aws7PDhAkT8OGHH8Ld3b3CcyciInoWj+QRAbhx4wa2bt2KyMhIWYFXyNzcvMTlhw4dCiEE/vrrLzVlSEREVDYs8ogAnDlzBkII1K5d+6WWt7S0xFtvvYWsrKzyTYyIiOglscgjAiCEKJcxFApFOWRDRET06ljkEQFwc3ODQqHAyZMnX2r569ev43//+x9q1KhRzpkRERG9HBZ5RHhyujU4OBiLFi1CXl5ekfm3bt0qcfn58+dDS0sLnTp1Uk+CREREZcQij+j/W7RoEQoKCtC4cWOsWbMGp0+fRnp6OhYsWAA/Pz+p3927d3H58mVcuHAB//zzDz755BN88803mDp1KmrWrFmJa0BERPR/FKI8LkYi0hA5OTmYOnUqNm7ciJycHFhbW6NBgwYYPnw4WrRoAWdnZ5w/fx4AoKurC1tbW7zzzjsYMGAAWrZsWcnZExER/R8WeUREREQaiKdriYiIiDQQizwiIiIiDcQij14LxT1lgl4OtyUREQEs8ug1UVBQUNkpaAxuSyIiAljkEREREWkkFnlEREREGohFHhEREZEG4vfk0WtBoVBAT0+vstPQCA8fPgT/rImISLuyEyACAD09PTx48KCy09AI+vr6lZ0CERG9Bni6loiIiEgDscgjIiIi0kAs8oiIiIg0EIs8ei0olcrKTkFjcFsSERHAu2uJiIiINBKP5BERERFpIBZ5RERERBqIRR4RERGRBmKRR0RERKSBWOQRERERaSAWeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHlWaf/75ByEhIbC3t4dCocD69evVHnPatGlo1KgRTExM8NZbb6FTp07IyMhQe1wA+PHHH1G3bl2YmprC1NQUfn5+2LJlS4XELjR9+nQoFAoMGzZM7bEmTZoEhUIhe9WuXVvtcS9evIiePXvCysoKBgYG8Pb2RnJystrjOjs7F1lfhUKByMhItcUsKCjA+PHjUaNGDRgYGMDV1RVTpkxBRTyt8u7duxg2bBicnJxgYGAAf39/JCUllXucF71PCCEwYcIE2NnZwcDAAEFBQTh9+rTa465duxZt27aFlZUVFAoFUlJSXjkmUXljkUeVJi8vDz4+Pli0aFGFxUxISEBkZCQOHjyI7du349GjR2jbti3y8vLUHrt69eqYPn06Dh8+jOTkZLRq1QodO3bEv//+q/bYAJCUlISffvoJdevWrZB4AODl5YWcnBzptXfvXrXGu3nzJgICAqCjo4MtW7bgxIkTmDNnDiwsLNQaF3iyfZ9e1+3btwMAunbtqraYM2bMwI8//oiFCxciPT0dM2bMwMyZM/H999+rLWah/v37Y/v27fj111+RlpaGtm3bIigoCBcvXizXOC96n5g5cyYWLFiAxYsXIzExEUZGRggODsaDBw/UGjcvLw9NmzbFjBkzXikOkVoJotcAALFu3boKj3v16lUBQCQkJFR4bCGEsLCwED///LPa49y9e1e4ubmJ7du3i8DAQDF06FC1x5w4caLw8fFRe5ynjR07VjRt2rRCYz7P0KFDhaurq1CpVGqL0aFDB9G3b19Z2wcffCDCwsLUFlMIIe7duyeUSqXYuHGjrL1+/fpi3Lhxaov77PuESqUStra2YtasWVLbrVu3hJ6enli1apXa4j7t3LlzAoA4evRoucUj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5058/PHHL9xGREREVLmq7JG806dPo3v37nBxcYGpqSmcnZ0BANnZ2S89Znp6OrS1tdGkSROpzcrKCu7u7khPTwcADBkyBN988w0CAgIwceJEHDt2rMg4bdq0Qc2aNREbG/vcAg8AUlNTsXv3bhgbG0uv2rVrA4B0Sra069mwYcMi43t5eUGpVErTdnZ2uHr1aim3BhEREVWmKnskLyQkBE5OTli6dCns7e2hUqlQp04d5OfnS6dPhRBS//K6Fq1///4IDg7Gpk2bsG3bNkybNg1z5szB4MGDpT4dOnTAmjVrcOLECemIX3Fyc3MREhKCGTNmFJlnZ2f3wvV8mpGRUZExdHR0ZNMKhaJUp7OfHbegoKBMy1DVYWFhUdkpEBFprCpZ5F2/fh0ZGRlYunQpmjVrBgDYu3evNN/a2hoAkJOTI+2Env1uOl1d3SLFi4eHBx4/fozExETpdG1hLE9PT6mfg4MDBgwYgAEDBuCLL77A0qVLZUXe9OnTYWxsjNatWyM+Pl627NPq16+PNWvWwNnZGdraRX+UL1rPipCXl1eh8YiIiOiJKnm61sLCAlZWVliyZAnOnDmDXbt2YcSIEdL8mjVrwsHBAZMmTcLp06exadMmzJkzRzaGs7MzcnNzsXPnTly7dg337t2Dm5sbOnbsiI8//hh79+5FamoqevbsibfffhsdO3YE8OTat7i4OJw7dw5HjhzB7t274eHhUSTH2bNnIywsDK1atcLJkyeLXY/IyEjcuHED3bt3R1JSEjIzMxEXF4c+ffqgoKDghetJREREmqtKFnlaWlpYvXo1Dh8+jDp16mD48OGYNWuWNF9HRwerVq3CyZMnUbduXcyYMQPffPONbAx/f38MGDAAoaGhsLa2xsyZMwEA0dHRaNCgAd577z34+flBCIHNmzdLpz4LCgoQGRkJDw8PtGvXDrVq1cIPP/xQbJ5z585Ft27d0KpVK5w6darIfHt7e+zbtw8FBQVo27YtvL29MWzYMJibm0NLS+uF60lERESaSyGevvCMiIiIiDRClTySR0RERKTpWOQRERERaSAWeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHhEREZEGYpFHREREpIFY5BERERFpIBZ5RERERBqIRR4RERGRBmKRR0RERKSBWOQRERERaSAWeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHhEREZEGYpFHREREpIFY5BERERFpIBZ5RERERBqIRR4RERGRBmKRR0RERKSB/h8ttvQDG/5rQgAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAEdCAYAAABwhHFwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUuUlEQVR4nO3deVxO6f8/8Nfd3b4vmhZSJKkku0lGlogxBmNoyL6PEGOdMWgYYx/LYAyTGjOWzFjG2LLWEFIoGSki+Zgw9sqSuq/fH36dr6Ok6C5ur+fjcT8e3de5ruv9PqflvDvLfRRCCAEiIiIi0ihaFZ0AEREREZU9FnlEREREGohFHhEREZEGYpFHREREpIFY5BERERFpIBZ5RERERBqIRR4RERGRBmKRR0RERKSBWOQRERERaSAWeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHhEREZEGYpFHREREpIFY5BEBuHbtGkaOHInq1atDT08PDg4O6NixI/bv3w8AcHJygkKhgEKhgIGBAZycnNC9e3ccOHCggjMnIiIqGos8euelp6ejQYMGOHDgAObNm4ekpCTs3r0bLVu2RFBQkNRv+vTpyMzMREpKCtasWQNzc3P4+flh5syZFZg9ERFR0bQrOgGiijZ8+HAoFAocP34cRkZGUruHhwcGDBggvTcxMYGtrS0AoGrVqmjevDns7OwwdepUfPrpp3B1dS333ImIiF6ER/LonXb79m3s3r0bQUFBsgKvgLm5ebHjg4ODIYTAn3/+qaYMiYiIXg2LPHqnXbhwAUII1KpV65XGW1pa4r333kN6enrZJkZERPSaWOTRO00IUSZzKBSKMsiGiIio7LDIo3eai4sLFAoFzp0790rjb926hf/++w/VqlUr48yIiIheD4s8eqdZWlrC398fy5YtQ05OTqHld+/eLXb84sWLoaWlhc6dO6snQSIiolfEIo/eecuWLUN+fj4aN26MTZs24fz580hOTsaSJUvg7e0t9cvKysK1a9dw5coV/P333xgyZAi+/fZbzJw5EzVq1KjANSAiIipMIcrioiSit1xmZiZmzpyJ7du3IzMzE9bW1mjQoAHGjBmDFi1awMnJCZcvXwYA6OrqwtbWFu+//z6GDRuGli1bVnD2REREhbHIIyIiItJAPF1LREREpIFY5BERERFp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rHHjxjh06FCx44mIiOjNwSLvNV24cAFCCLi6usraK1WqBGNjYxgbG2PixIkAgPv37+OPP/5Ar169AAC9evXCxo0bkZ2dXWjeevXqoXr16vjjjz8ghEB4eDgGDBhQZA6rV69G+/btYWFhAUtLS/j7+yMsLEzW5/Lly7C3ty809t69e1Keurq6+Pzzz7Fy5Uo4OzvL+tnb2+PKlSu8Lo+IiOgtoV3RCWiq48ePQ6VSITAwULoRYv369XB2doaXlxcAoG7dunB0dERERAQGDhxYaI4BAwYgLCwMVatWRU5ODj788EMsXbpU1qfg6NvixYultl69emHcuHGYOnUqtLSe1vEPHz4sdKoWAExMTHDy5EkAwIMHD7Bv3z4MGzYMVlZWstPMBgYGUKlUePz4MQwMDEq8HYyMjEp9Ny9RAQsLi4pOgYjorcUi7zXVqFEDCoVCdqMCAFSvXh0AZAVRaGgo/vnnH2hr/99mV6lUWL16dZFFXmBgICZMmICQkBD07t1bNq5AZGQkrl69ioCAAFl7fn4+9u/fjzZt2gB4emTxzp07hcZraWmhRo0a0vs6depgz549mDNnjqzIu337NoyMjEpV4AFATk5OqfoTERFR2eDp2tdkZWWFNm3aYOnSpcUWNElJSYiPj0dUVBQSEhKkV1RUFI4ePYpz584VGmNpaYmPP/4Y0dHRLzxVGxoais8++0w2Z0JCAj777DPZ9X716tXD2bNnS7ROSqUSDx8+lLWdOXMG9erVK9F4IiIiqng8klcGli9fDh8fHzRs2BAhISGoU6cOtLS0EBcXh3PnzqFBgwYIDQ1F48aN0bx580LjGzVqhNDQ0Bd+bt7y5cthZWVVaNl///2Hv/76C9u2bUPt2rVly/r06YMuXbrg9u3b0nV6BTdVPEsIgWvXrgF4ekp37969iIyMxNSpU2X9Dh06hLZt25ZquxAREVHF4ZG8MuDs7IxTp07Bz88PX375Jby8vNCwYUP88MMPGDduHKZNm4bffvut0GfUFejatSvWrFmDJ0+eFFpmYGBQZIEHAGvWrIGRkRFat25daFnr1q1hYGCA3377DcDTU7///PNPodPK9+/fh52dHezs7ODm5oYFCxZg+vTpmDx5stTn6tWrOHLkCPr371/ibUJEREQVSyGEEBWdBJWP8ePH4/79+/jpp59KNW7ixIm4c+cOVq5cqabMiIiIqKzxSN47ZPLkyXB0dCz1x6C89957mDFjhpqyIiIiInXgkTwiIiIiDcQjeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHhEREZEGYpFHREREpIFY5BERERFpIBZ5RERERBqIRR4RERGRBmKRR0RERKSBWOQRERERaSAWeUREREQaiEUeERERkQZikUdERESkgVjkEREREWkgFnlEREREGohFHhEREZEGYpFHREREpIFY5BERERFpIBZ5RERERBqIRR4RERGRBvp/5dbCVp/8vP4AAAAASUVORK5CYII=",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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9NJx33//PWbOnIlFixYhPT0dKSkpCAsLw48//ggA+PHHHxEREYHTp08jPT0df/zxB2xtbWFubg7gyf50z549uHLlCm7duqW29SsvLO6KsGrVKty/fx8zZ86EnZ2d9Pj000+lPlZWVjhy5AhatWqFIUOGwMXFBd27d4eLiwsSEhJQrVo15OXl4ffff5eunXhe165dsXr1ajx+/Bh+fn6YOHEixo0bh8aNG+PevXuyU8EAMGbMGCiVStSqVQvW1tbIyspC5cqVsW3bNsTHx8PT0xNDhw7FwIED8d13371w/UxNTWFqavrSbRATE4P69evLHt9//30JtiIREb0ObW1tDB8+HHPmzMHo0aPRoEED+Pn5oWXLlrC1tS3xh8xraWkhKioKDx48QJMmTTBo0CBMnz5d1sfQ0FD6lIfGjRvjs88+w4cffojFixeX4poVNnLkSHz11VcYPXo06tSpgx07dmDz5s1wdXV96bhBgwbh119/RVhYGOrUqQMfHx+Eh4ejatWqAAATExPMmTMHjRo1QuPGjZGZmYlt27ZJBz3mz5+PXbt2wcHBQSM/DkwhintXABHRc/T19V/4SfovW1acvq8aX5L51e1dypWINB+P3BERERFpEBZ3RERERBqExR0RERGRBmFxR0RERKRBWNwRERERaRAWd0REREQahMUdERERkQZhcUdERESkQVjcEREREWkQFncVwJ49e+Du7l7iL0l+//33sWHDBjVlRURUsSkUipc+pkyZgszMTFmblZUV2rZti+PHj8vm+vfff9G9e3dYW1tDT08PNWrUwKRJk3D//n0AT75S8lXxYmJiymErkDqwuHtDV65cQVBQEKpXrw59fX3Y2NigWbNm+Pnnn6U/qqdmzpwJpVKJuXPnFponPDwcCoUC7u7uhZb98ccfUCgUcHZ2LrTswYMHsLS0RKVKlfDo0aMicxw3bhy+++47KJVKWaynD2NjYzRs2BAbN26Ujfvuu+8wYcIEqFSq4m4OIiIqpuzsbOmxcOFCmJqaytrGjBkj9d29ezeys7MRHR2NnJwctG/fHrdv3wYAHDlyBE2bNkVeXh62bt2K9PR0TJ8+HeHh4WjTpg3y8vLg7e0tm7t79+5o166drM3b27uctgSVNhZ3b+DcuXOoX78+du7ciRkzZuD48eM4fPgwxo0bhy1btmD37t2y/itXrsS4ceOw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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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aHTv3r3KYtetWxe2trbYt2+fVHbr1i3Ex8dXyVxXohcdT9dStcnLy1M7qpORkYGkpCRYWlqiTp06GokZGhqKtWvX4rfffoOJiYk0b8fMzAwGBgYaiVns008/RdeuXVGnTh3cvn0ba9euRUxMDKKjozUW08TEpNR8QyMjI1hZWWl8HuK4ceMQEBAAR0dHXLx4EVOmTIFSqUTfvn01FnPMmDHw8fHBV199hT59+uDo0aNYsWIFVqxYobGYJalUKkRERCA4OBja2pr/eA0ICMDMmTNRp04deHh44MSJE/j6668xePBgjceOjo6GEAJubm44d+4cxo8fjwYNGmDQoEGVGudpnxNhYWGYMWMGXF1dUbduXUyaNAn29vbo0aOHRuNev34dWVlZuHjxIgBIXy5sbW15FJFeHNV9eS/VXAcOHBAASr2Cg4M1FrOseABERESExmIWGzx4sHB0dBS6urrC2tpavPHGG2L37t0aj/uoqrqFSmBgoLCzsxO6urri1VdfFYGBgeLcuXMaj/v777+LRo0aCT09PdGgQQOxYsUKjccsFh0dLQCItLS0Kol369YtMXr0aFGnTh2hr68vnJ2dxeeffy7u37+v8dhRUVHC2dlZ6OrqCltbWxEaGipyc3MrPc7TPidUKpWYNGmSsLGxEXp6euKNN96olO3/tLgRERFlLp8yZcpzxyaqLAohquDW6ERERERUpTgnj4iIiEiGmOQRERERyRCTPCIiIiIZYpJHREREJENM8oiIiIhkiEkeERERkQwxySMiIiKSISZ59EIwMjJiXMZlXMZlXKJKxCSPXghFRUWMy7iMy7iMS1SJmOQRERERyRCTPHrp1bRTNozLuIz78sYlqkpM8uilV9NO2TAu4zLuyxuXqCophBCiujtBpFAooKen90zr3r9/X/brlqyv6biPq1PeuGXVe1rZk9quyHgfrfuy/H6ftu7zbPvniVvedl+kbVVZ6z5te3DXSS8D7eruABGAavvA1NfXx71796oldkVUZT+fN1Z51y9Zr7LG97L8PivqWbZpdcSXk5o4ZpIfnq4lIiIikiEmeUREREQyxCSPiIiISIaY5BERERHJEJM8IiIiIhlikkdEREQkQ0zyiIiIiGSISR4RERGRDDHJIyIiIpIhJnlEREREMsQkj4iIiEiGmOQRERERyRCTPCIiIiIZYpJHREREJENM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kiVLsHnz5gr119jYGEOGDMH48eOxf/9+nDx5EiEhIWrTiVxdXdG9e3e8//77OHjwIJKTk9G/f3+8+uqrpU6nVqaxY8di3759mD59Os6cOYMff/wRS5culS6qfJyJEyfi0KFD0oUtZ8+exW+//SZdeLFt2zYsWbIESUlJuHDhAlavXg2VSiWdonZyckJ8fDwyMzNx9erVch/1ZJL3GEqlElu2bEFeXh5atmyJoUOHSt9MKnI6xMfHB8OGDUNgYCCsra0xd+5cWFtbIzIyEr/88gsaNmyI2bNnY/78+WrrWVpa4ueff8aOHTvg6emJdevWlbohZq9evdClSxd06NAB1tbWWLduHRQKBX777TdYWFigbdu28PPzg7OzM6Kiop57mxARUdVyd3fHsmXL8O2338LLywtHjx59akJRloiICAwcOBBjx46Fm5sbevTogYSEBOlI2WuvvYaVK1di8eLF8PLywu7du6UDG08zZswYbN++HUePHsXbb7+NMWPGYMSIEWjSpAkOHTqESZMmVbi/8+bNw+uvv46AgAD4+fmhTZs2aN68eakxNW/eHG+99Ra8vb0hhMCOHTtKnY6tTM2aNcOGDRuwfv16NGrUCJMnT8a0adOeeneMxo0bIzY2FmfOnMHrr7+Opk2bYvLkybC3twfwcM7fpk2b0LFjR7i7u2P58uVYt24dPDw8AADjxo2DUqlEw4YNpSle5aEQj57sp8eKi4tDmzZtcO7cObWJnET0P/r6+rh3716F6pV3ncqK/bKR67iISLM4J+8JNm/eDGNjY7i6uuLcuXMYPXo0fH19meARERHRC49J3hPcvn0bEydORFZWFmrVqgU/P78y77pNRERE9KLh6VoiqlQ8XVv55DouItIsXnhBREREJENM8oiIiIhkiEkeERERkQwxySMiIiKSISZ5RERERDLEJI+IiIhIhmpskhcSEoIePXqUKo+JiYFCoUBubi5iYmLQvXt32NnZwcjICE2aNMGaNWtKrXP9+nWEhYXB0dERurq6sLe3x+DBgx/72JFZs2ZBqVRi3rx5z9T39u3bIywsrMLrhYSEQKFQYNiwYaWWhYaGQqFQqD2a5XHbiIiIKo9CoXjia+rUqcjMzFQrs7KyQufOnXHixAm1tv7++2/06dMH1tbW0NPTQ/369TF58mTcuXMHwP/2cU96xcTEVMNWIE2osUle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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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JI+IiIhIAzHJIyIiItJATPKIiIiINBCTPCIiIiINpF3VHSCqDu7cuYPU1NQSl6lUKuzfv7+Se1Q+pfWx6LJn1Sssf/rfknh5ecHMzKziOk9EVE0phBCiqjtBpOn279+Pt956q6q78VrYt28fWrVqVWHt6evr4+HDhxXW3quoKrdRk/evJm8bVQ+criUiIiLSQEzyiIiIiDQQz8kjqgReXl7Yt29ficvatWuHP//8s5J7VD6l9bHosmfVKyx/+t+SeHl5VVzHiYiqMZ6TR1TFXofzfkrrY9Flz6pXWP70v5Xhddi/L4vn5KmHJm8bVQ+criUiIiLSQEzyiIiIiDQQkzwiIiIiDcQkj4iIiEgD8epaIgLw4k/lqOgnXlQ0Pl2DiKorXl1LVMVelSv4quNTOSr66RpVhVfXqocmbxtVD5yuJSIiItJATPKIiIiINBDPySMiAC/+VI6KfuJFRePTNYiouuI5eURV7HU474dPvHi18Zw89dDkbaPqgdO1RERERBqISR4RERGRBmKSR0RERKSBmOQRERERaSBeXUtEr70XfVqHpuBTPYioJEzyiOi1l5qaWurTOqrDkzyetY2a8lQPIio/TtcSERERaSAmeUREREQaiNO1RPTae9GndWgKPtWDiErCJ14QVbHX4a76fOLFq41PvFAPTd42qh44XUtERESkgZjkEREREWkgJnlEREREGohJHhEREZEG4tW1RESvgVf1qR582gbRq4tJHhHRa+BVfqoHn7ZB9GridC0RERGRBmKSR0RERKSBOF1LRPQaeFWf6sGnbRC9uvjEC6Iq9jrcVZ9PvHi18YkX6qHJ20bVA6driYiIiDQQkzwiIiIiDcQkj4iIiEgDMckjIiIi0kC8upaIiEr1qj5tQ934NA963THJIyKiUr3KT9tQNz7Ng15nnK4lIiIi0kBM8oiIiIg0EKdriYioVK/q0zbUjU/zoNcdn3hBVMVeh7vq84kXrzY+8UI9NHnbqHrgdC0RERGRBmKSR0RERKSBmOQRERERaSAmeUREREQaiEkeERERkQZikkdERESkgZjkEREREWkgJnlEREREGohJHhEREZEGYpJHREREGm3atGlo1KiR9L5fv37o2rVrlfWnsjDJq2Rt2rRBeHh4lcROT0+Hra0t7t27V671PvroIyxcuFBNvSIioqqmzmOTs7MzFi9erJa2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jbScj6OnojiSVwF0dHSknwvPmVOpVM+sn5ubi8DAQAQGBmLt2rWwtrbGxYsXERgYiLy8PACAlpZWsT/Wx48fq6XPhf0uqay07SgLIyMjFBQUvFQb9PqwsLCo6i4UY2FhAX19/aruBlVDSqUSubm5FdpmdHQ0PDw8YGVlJTtvu169egCefNFv3LhxsfXS0tKkOlR9MMl7Bjc3N2RlZeHq1avSt6QjR46Uux1dXd1iSc6pU6dw48YNzJkzRxpxS0pKktWxtrbGvXv3kJubCyMjIwAodj++ktp2d3dHVlYWsrKypLZPnjyJ27dvw8PDo9z9f1kV/QFHVF5FryQket05ODjAxcWlWHmjRo1Qv359LFq0CB999JFsViYlJQV79uzB7NmzK7Or9ArgdO0ztG/fHi4uLggNDcXff/+NhIQETJo0CcD/j9aVhbOzM3JycrB3715cv34d9+/fh6OjI3R1dfH111/j3Llz2LJlC2bMmCFbr2XLljA0NMTnn3+OjIwMrFu3Trp6tmjb58+fR3JyMq5fv45Hjx4hICAAXl5eCAkJwbFjx3D48GH07dsX/v7+aNas2UvvFyIievUoFApERETg5MmT6NatGw4fPoyLFy/il19+QVBQEHx8fKQb/1P1wSTvGZRKJTZv3oycnBw0b94cgwYNkq6uLc/Uj6+vL4YMGYLg4GBYW1tj3rx5sLa2RlRUFH755Rd4eHhgzpw5WLBggWw9S0tL/PTTT9i+fTu8vLywfv166fYrhbp164aOHTuibdu2sLa2xvr166FQKPD777/DwsICrVu3RkBAAOrUqYPo6OiX3idERPTq8vX1xaFDh6BUKtGpUyfUrVsXn332GUJDQ7F7927o6elVdRepkikEz9Iss4SEBLRq1Qpnz54tcbiciEqmr6+Phw8fFvuXiIjUh+fklWLTpk0wNjaGq6srzp49i5EjR8LPz48JHhEREb3ymOSV4t69exg/fjwuXryIGjVqICAgAAsXLqzqbhERERE9F6driUjtOF1LRFT5eOEFERERkQZikkdERESkgZjkEREREWkgJnlEREREGohJHhEREZEGYpL3ComLi4NCocDt27dLXJ6ZmQmFQlHsGbZERERET2OS94KioqJgbm5e1d0gIiKqVHv37oW7uzsKCgrKtd6bb76JjRs3qqlXVBImeVTM48ePq7oLRETV0pUr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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "for constraint, time_budget in budgets.items():\n",
+ " data = get_results(\"all\", constraint)\n",
+ " data[\"framework\"] = data[\"framework\"].str.replace(\"_benchmark\", \"(B)\")\n",
+ " # We exclude autosklearn2 because the metadataset overlaps with the benchmark,\n",
+ " # and mlr3automl because we identified issues with the integration.\n",
+ " data = data[~data[\"framework\"].isin([\"mlr3automl\", \"autosklearn2\"])]\n",
+ " data = impute_values(data, \"constantpredictor\")\n",
+ " \n",
+ " for ttype, metric in [(\"binary\", \"auc\"), (\"multiclass\", \"neg_logloss\"), (\"regression\", \"neg_rmse\")]:\n",
+ " results = data[data.metric.isin([metric])]\n",
+ " filename = f\"cd-{ttype}-{constraint}-constantpredictor.pdf\"\n",
+ " print(\"generating\", filename)\n",
+ " plot_cd(results, filename=filename)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a387ef5a",
+ "metadata": {},
+ "source": [
+ "# Scaled Results\n",
+ "Figure 3 in the paper."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "c4ee8f4f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def add_rescale(data, lower):\n",
+ " lookup = data.set_index([\"framework\", \"task\", \"constraint\"]).sort_index()\n",
+ " oracle = data.groupby([\"task\", \"constraint\"]).max().sort_index()\n",
+ " \n",
+ " for index, row in data.sort_values([\"task\"]).iterrows():\n",
+ " task, constraint = row[\"task\"], row[\"constraint\"]\n",
+ " lb = lookup.loc[(lower, task, constraint)].result\n",
+ " ub = oracle.loc[(task, constraint)].result\n",
+ " if lb == ub:\n",
+ " data.loc[index, \"rescaled\"] = float(\"nan\")\n",
+ " else:\n",
+ " v = -((row[\"result\"] - lb) / (ub - lb)) + 1\n",
+ " data.loc[index, \"rescaled\"] = v\n",
+ " return data\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "83c2a206-705a-4688-be03-d28611fca9d8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def box_plot(data, metric=None, hlines=None, ylog=\"auto\", title=\"\", ylim=None, figsize=(16, 9), with_framework_names=True, exclude=[\"RandomForest\"], add_counts=None):\n",
+ " if add_counts and (add_counts != \"outliers\" and not isinstance(add_counts, dict)):\n",
+ " raise ValueError(\"`add_counts` must be 'outliers' or a dictionary mapping each framework to a number.\")\n",
+ " if isinstance(add_counts, dict) and [f in add_counts for f in exclude]:\n",
+ " raise ValueError(\"`add_counts` may not contain a framework listed in `exclude`\")\n",
+ " \n",
+ " fig, ax = plt.subplots(1, 1, figsize=figsize)\n",
+ " \n",
+ " color_map = {\n",
+ " \"AutoGluon(B)\": '#fe9900',\n",
+ " \"autosklearn\": '#009f81', \n",
+ " \"autosklearn2\": '#00fccf',\n",
+ " \"flaml\": '#ff5aaf',\n",
+ " \"GAMA(B)\": '#8400cd',\n",
+ " \"H2OAutoML\": '#ffcb15',\n",
+ " \"lightautoml\": '#00c2f9',\n",
+ " \"mljarsupervised(B)\": '#ffb2fd', # \n",
+ " \"RandomForest\": \"#e20134\",\n",
+ " \"TPOT\": '#9f0162',\n",
+ " \"TunedRandomForest\": '#a40122',\n",
+ " }\n",
+ " color_map = {k: v for k, v in color_map.items() if k not in exclude}\n",
+ " \n",
+ " def framework_order(s):\n",
+ " order = {framework: i for i, framework in enumerate(color_map.keys())}\n",
+ " return s.apply(order.get)\n",
+ " \n",
+ " if metric is None:\n",
+ " metric = data.metric.unique()[0]\n",
+ " if metric.startswith(\"neg_\"):\n",
+ " metric = metric[len(\"neg_\"):]\n",
+ " data[metric] = -data[\"result\"]\n",
+ " \n",
+ " # Add dummy data to ensure each framework is always shown\n",
+ " # specifically, to avoid altering the order for regression where autosklearn 2 is missing.\n",
+ " for framework in color_map:\n",
+ " if framework not in data[\"framework\"].unique():\n",
+ " data = pd.concat([\n",
+ " data,\n",
+ " pd.DataFrame({\"framework\": [framework]})\n",
+ " ], ignore_index=True)\n",
+ " \n",
+ " \n",
+ " seaborn.boxplot(\n",
+ " data=data.sort_values(by=\"framework\", key=framework_order),\n",
+ " x=\"framework\",\n",
+ " y=metric,\n",
+ " hue=\"constraint\" if data.constraint.nunique() > 1 else None,\n",
+ " palette=color_map if data.constraint.nunique() == 1 else None,\n",
+ " ax=ax,\n",
+ " fliersize=1,\n",
+ " )\n",
+ " \n",
+ " hlines = hlines or {}\n",
+ " for y, color in hlines.items():\n",
+ " ax.axhline(y, color=color)\n",
+ " \n",
+ " if (ylog == \"auto\" and metric in [\"logloss\", \"rmse\", \"rescaled\"]) or (not isinstance(ylog, str) and ylog):\n",
+ " ax.set_yscale(\"log\")\n",
+ " \n",
+ " ax.set_ylabel(metric, size='xx-large')\n",
+ " ax.set_xlabel(\"\")\n",
+ " ax.tick_params(axis='both', which = 'both', labelsize = 18)\n",
+ " \n",
+ " # Dirty hack for displaying outliers, we overlap minor and major tick labels, where\n",
+ " # minor labels are used to display the number of outliers, and major tick labels may\n",
+ " # be used to display the framework names.\n",
+ " if title:\n",
+ " ax.set_title(title, fontsize=18)\n",
+ " \n",
+ " if with_framework_names: \n",
+ " # There will be minor tick labels displayed for outliers,\n",
+ " # to avoid rendering on top of each other, we offset the label location\n",
+ " # with a dirty hack of using leading spaces :-) \n",
+ " if add_counts: \n",
+ " frameworks = [f\" {framework}\" for framework in color_map.keys()]\n",
+ " else:\n",
+ " frameworks = color_map.keys()\n",
+ " ax.tick_params(axis=\"x\", which=\"major\", rotation=-90)\n",
+ " ax.set_xticks(*zip(*enumerate(frameworks)))\n",
+ " else:\n",
+ " ax.set_xticks(ticks=range(len(color_map.keys())), labels=[\"\"] * len(color_map.keys()))\n",
+ "\n",
+ " \n",
+ " if ylim: \n",
+ " ax.set_ylim(ylim)\n",
+ " if add_counts != \"outliers\":\n",
+ " print(\"Warning! Ylim is set but outliers are not reported.\")\n",
+ " \n",
+ " counts = []\n",
+ " if add_counts:\n",
+ " if add_counts == \"outliers\":\n",
+ " add_counts = {}\n",
+ " for framework in color_map:\n",
+ " if framework in data[\"framework\"].unique():\n",
+ " framework_outliers = data[(data[\"framework\"] == framework) & (data[metric] < ylim[0])]\n",
+ " add_counts[framework] = f\"{len(framework_outliers)}\"\n",
+ " else:\n",
+ " add_counts[framework] = \"-\"\n",
+ " \n",
+ " # We need to offset the minor tick labels, otherwise they won't render.\n",
+ " ax.set_xticks(\n",
+ " ticks=[i-0.01 for i in range(len(add_counts))],\n",
+ " labels=[f\"[{add_counts[f]}]\" for f in color_map], \n",
+ " minor=True\n",
+ " )\n",
+ " \n",
+ " return fig, ax"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "e90143ad",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-binary-classification-1h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-multiclass-classification-1h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-regression-1h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-binary-classification-4h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-multiclass-classification-4h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating box-rescaled-regression-4h8c_gp3-constantpredictor.pdf\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/4084997569.py:15: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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HJIkoV27diXun5uba3RAsC1Qq9XIyckp9nxoaCi+++47uLi4lLp/Tk6Owf5FA4HT0tIsGygREVEVV/TZadKQXWGifv36CQcHB7FixQqD55OSkoSLi4twcHAQa9asMbpvYmKikCRJNG7c2NTqKlVgYKAICAgQ7u7uAoAAILp37y5Onjxp0v7z58+X9+ODDz744IMPPsx/JCQklPn5a/LdSevXr8fEiROh0Wiwbt06DBw4EDdv3sTUqVOxb98+uLi4ICEhAX5+fsX2jYiIwIgRIzB06FBs27bNlOqM1j9hwgRF+wLA3r170a9fvzLL3b17F9988w2WLFmClJQUvPnmm1i0aFGp+zzcE6PT6fDgwQP4+vqWuLq3Odq2bYtLly4hISHBru5+SktLQ/369e0uboBtbg1s88rHNq98bPPihBBIT09HnTp14OBQ+tBdky8njRkzBp988gliY2PxzDPPGGyTJAkvv/yy0QQGADZv3gxJktC5c2dTq7OamjVrYubMmejSpQs6duyIxYsXo3379hg0aFCJ+7i4uBS75OTt7V1hMapUKgCARqOxq5O+iD3GzTavfGzzysc2r3xsc+O8vLxMKmfy3UkqlQp79+5F7969IYQweIwZMwZLly41ut/ly5exY8cOADBrgOyoUaOQlJSk+FF0h5Sp2rdvLydda9asURx3RfjnP/9p7RCqHbZ55WObVz62eeVjm5vH5MtJ+i5evIhz584BKOwKCw4OLrHs1atXcf78eTg5OaFPnz7KI7WC5557Dps2bULTpk3x22+/WTscmb1OpmevcQP2G7u9xg3Yb+z2Gjdgv7Hba9yA/cZuK3GbfDlJX5MmTdCkSROTygYFBSEoKEhJNVZXNK+Np6enlSMx5OLigvnz55d515Stsde4AfuN3V7jBuw3dnuNG7Df2O01bsB+Y7eVuBX1xNi7goICODg4lDroNjIyUr50NmfOHCxbtqwSIyQiIqKymDwmpipJSEhAmzZtsHr1aly+fNngXvSEhAS89957eOqppyCEQI0aNTB9+nQrRktERETGVMuemKtXrxqM43F2doZGo4FWq0VmZqb8fHBwMLZt24Y2bdpYI0wiIiIqRbXsialTpw4iIiIwdepUtGvXDn5+fkhLS4NOp0ODBg0wePBgrF27FufPn6+wBCYoKAiSJBk8fvzxR4vW4e3tXayOqKgo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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjEAAAI3CAYAAABqNgrpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAC7a0lEQVR4nOzdeVxU1fsH8M+dYRn2XRBR1HLXXBN3xF1TczdNccHKMrM0NctUrDRzadMyd5DcUNMyLXNDTXNBLc2lTEUURFH2Heb5/cFv7peRAYZhZu5ceN6v17yyuefO/TAMM8+ce+45AhERGGOMMcZkRiF1AMYYY4wxQ3ARwxhjjDFZ4iKGMcYYY7LERQxjjDHGZImLGMYYY4zJEhcxjDHGGJMlLmIYY4wxJktcxDDGGGNMlriIYYwxxpgscRHDGJOl8ePHQxAEjB8/XuoostK1a1cIgoAFCxZIHYWxCuMihrFyWLBgAQRBKHaztbWFr68vevfujXXr1iEvL0/qqEym8vPzcfjwYSxduhQvvfQS6tevD4VCwQUbYzpYSR2AMbny9vYW/52Wlob4+HjEx8fj4MGD+O6773Dw4EG4ublJmLByq169Oho0aIDq1atLHcWo7t27hx49ekgdgzFZ4J4Yxgz04MED8ZaRkYGYmBi88sorAIDz58/jrbfekjhh5bZ48WJcv34dixcvljqK0Tk5OaFTp06YNm0awsLC0KJFC6kjMWaRuCeGMSOpVasW1qxZg//++w9HjhzBjh078O2338LR0VHqaExGatWqhZSUFAiCIN63YcMGCRMxZrm4J4YxI+vTpw8AIDc3F//++6/ONmlpafj000/Rvn17uLu7w9bWFjVr1sRLL72E06dPl/r4iYmJeOedd1C3bl2oVCpUr14dw4cPx4ULFwBAHKdz7Ngxrf2OHTsmbgOAixcv4uWXX4afnx+sra3RtWtXrfa5ubn45ptvEBQUBE9PT9jY2MDHxwcvvvgiDhw4UGK+rKwsLFu2DO3bt4ebmxusra3h5eWFxo0bY9y4cdi1a1exffLz87FmzRp07doVnp6esLa2hoeHBxo0aICRI0di/fr1xfbRZ2DvsWPHMHz4cNSoUQO2trbw9PRE9+7dsXHjRhQUFOjcRzPuSfN8HD58GC+88AK8vLygUqnQqFEjhIaGIjs7u8TjVoRm/Is5EBHWrl2LgIAAODs7w8nJCe3bt0dERESZ++7evRv9+/eHt7c3bGxs4O3tjf79++OHH34ocR99BhU//fyXtH9eXh6WL1+ONm3awNXVVedrnlUBxBjT2/z58wkAlfans2TJErHNuXPnim2/ePEi+fn5iW2USiU5OTmJ/y8IAi1atEjnY9+4cYN8fX3Ftra2tuTs7EwAyMbGhn788Udx29GjR7X2PXr0qLht586dZG1tTQDI2dmZVCoVBQYGim3v3LlDTZo00crk4uIi/j8Amjx5crF8qamp1Lx5c639XF1dycrKSrzP399fa5/8/Hzq2bOn1mO7uLiQra2t1n1PGzduHAGgcePG6Xyu3nnnnWI5lEqleF+3bt0oNTW12H6a33FgYCB99tlnJAiCuL8gCOL+QUFBlJ+fr/PYxhYYGFjqz2rIY82dO5defPFFAkBWVlbi60hzmzdvns79c3JyaOTIkWI7hUJBbm5upFAoxPtGjRpFubm5JR57/vz5JeYr+vyXtP/s2bOpQ4cOYnY3NzcSBKHYa55VflzEMFYO+hQx3bp1Ez84ExMTtbbFxcVRtWrVCAANGTKEzp8/L77ZJyQk0Icffih+4P/www9a++bm5lKzZs0IAHl6etLu3bvFD9Fr165Rt27dyM3NTa8ixtHRkfr160fXrl0Tt//zzz9ERJSenk4NGzYkANS1a1c6duwYZWdnExFRcnIyrVixghwdHQkAffHFF1rH+OijjwgAubu7065du8T9CgoK6P79+xQeHk6vvPKK1j6bN28mAKRSqWjdunWUlpZGRERqtZoSEhJo9+7dNGzYsGLPc2lFzNdffy3+rK+++irFx8eLP9vnn38uPscjR44stq/md+zq6koKhYLmzJlDjx49IiKilJQUmjdvnvjY69evL7a/KZiiiHFzcyMXFxfatGkTZWZmEhFRbGwsDRgwQCxONK+JombMmCG+vj/88ENKSkoiIqInT57Q+++/Lz43s2fPLvHYFS1iHB0dydHRkTZu3ChmT0xMpMePH5f/CWGyxkUMY+VQWhETExNDr7zyirh94MCBxdpMnDiRANDo0aNLPMaKFSsIADVv3lzrfs2HvSAIdPz48WL7ZWVlicVHWUVM27ZtS+xFWLhwofghouvbNBHR7t27xWIqLy9PvL9v374EoMSeJF1ef/11sdgoj5KKmMzMTHJ3dxd7BHT56quvxOfi/PnzWtuK/o5L+rAdMmQIAaAePXqUK7OhTFHEAKAjR44U256dnS329n388cda2+7duycWgHPmzNH5+NOnTycAZG1tTXFxcTqPXdEiBgD9+OOPZf+wrNLjMTGMGcjHx0e8OTg4wN/fH2vXrgUANGzYEN98841W++zsbGzZsgUAMHv27BIfNzg4GADw559/IiEhQbw/MjISANClSxd07ty52H4qlQozZ87UK/vMmTOhVCp1btOMP5k+fTqsra11thk0aBCcnZ2RmJiI6Oho8X5XV1cAQHx8vF45iu7z4MEDvfcpzW+//YYnT54AQIljL9544w3x0mzN7+Rptra2ePfdd3Vue/HFFwEAf/31VwXTSqdjx44ICgoqdr+trS169+4NoPjPt2vXLuTn50OlUuG9997T+bhz586Fra0t8vLysHPnTuMHB9CkSRMMGDDAJI/N5IWLGMYMlJCQIN4yMzPF+4ODg3Hx4kXUqFFDq310dLQ4GLRXr15aRVDRW5MmTcR9YmJixH9rBu4GBgaWmEnXYEhdOnbsqPP++/fvi8cMCQkpMWP16tWRnp5eLGP//v0BACtXrsSoUaOwZ88eJCYmlpqlX79+EAQBP/74I/r27YutW7ciLi5Or59Dl/PnzwMAatasifr16+tso1Qq0a1bN632T2vSpEmJV5b5+voCgFgsyVFAQECJ20r6+TTP1fPPPw9nZ2ed+7q5uaFNmzZa7Y2tpNcvq3q4iGHMQFR4OhZqtRpxcXFYvXo1XF1dER4ejpUrVxZrX/SDuWgBpOumUbQ4evToEYD/fcDo8nThVJJq1arpvL9oxsTExFIzqtXqYhlHjx6NadOmQRAEbNu2DYMHD4aXlxfq1auHKVOmaPXaaHTq1AlLliyBjY0NfvnlF4wePRo1atRAzZo1MWHCBBw9elSvn0nj4cOHAMp+Lvz8/LTaP83JyanEfa2sCmenyM/PL1c2S6LPz/f0zNPGem4rqqTXL6t6uIhhrIIEQUD16tXx2muv4YcffoAgCJg1axaOHDmi1a7oJb1ZWVliEVTaTVfPijEuvy3pVFLRjNeuXdMr49OXOH/xxRe4ceMGFi1ahL59+8LV1RU3b97EN998gzZt2uDtt98udtyZM2fi9u3b+PzzzzFo0CBUq1YN9+7dw6ZNm9CtWzcMHz6cl3JgopJev6zq4SKGMSPq2rUrxo4dCyLC1KlTtYoCHx8f8d9FT8Hoy8vLCwBKPdVy//79cj9uURXNqPHss89izpw52L9/Px4/fozTp09j0KBBAIAvv/wSP/74Y7F9fH198fbbb+OHH35AQkIC/vrrL0yaNAkAsHPnTnz77bd6HVvzLf3evXulttNs52/1+qvoc6vp4Sltjp2UlJSKRGRVDBcxjBnZvHnzoFQqcfXqVYSFhYn3P//887CxsQEA/PTTT+V+3FatWgFAqRN6VXSyr9q1a4unCgzJqItCoUC7du2wc+dO1KpVC0Dh4NuyNGvWDGvXrhXHP+izDwBxPMa9e/fwzz//6GxTUFAgnqZ6/vnn9XpcBq2xLiUVG8nJyVpjZ4rSrCUWGxtb4jHOnDljjKisiuAihjEje+aZZzBy5EgAwEcffSSeBnFwcMDo0aMBAEuWLMHdu3dLfZynB1UOGzYMAHD8+HH8/vvvxdrn5ORg2bJlFc6vWf9p/fr1uHjxYrky5uTklNhWqVSKRZxC8b+3ntL2AQA7O7ti+5SmZ8+e8PDwAFDy1Unfffed2KM1atQovR6XAUOHDoWVlRWys7OxZMkSnW0WLVqEnJwcWFtbY+jQoVrbmjdvDgD49ddfkZGRUWzfI0eOlDljNWNFcRHDmAnMmTMHgiDgzp07WlPmL1q0CL6+vkhMTET79u2xefNmpKWlidsfPXqEXbt2YfDgwcU+XEeOHIkmTZqAiDBkyBDs3btXPF1148YN9O/f3yiXKc+YMQPNmjVDdnY2goKCsHLlSjx+/FjcnpycjAMHDiA4OLjYpd4BAQF46623cOzYMa0Pqbi4OEydOhU3b94EUHhFksagQYMwceJEHDhwAMnJyeL9T548wccff4zDhw8DAF544QW98tvZ2YnFy9atWzF58mRxsHRmZia++uorcVzOyJEj0bp1a/2emHLQLO9Q2pIIpUlJSUFiYqJ40xTCOTk5Wveb+9RLjRo1MG3aNADAp59+ivnz54u/s+TkZHz44YdYunQpgMJL9J9eYXzEiBFQKBR4/PgxRo0aJZ52ysrKQlhYGAYPHgx3d3fz/UBM/sw5KQ1jcqfPjL0amind/fz8xJlriYiuXr1K9evX15q23d3dnRwcHLSmfdc1kdq1a9fIx8dHa9kBzXIAtra29NNPP4nbTp8+rbVv0cnuynL//n1q165dsWn7n56a/tlnn9Xaz9/fv9g+T/9c77zzjtY+RScwAwqXQXj6OMOGDaOCggKt/cq77ICbm5vW8gdBQUFlLjtQkrKeS802Qyene/o5KelWWsayHtvQCedycnJoxIgRWq9ffZcdICKtGY+BwiUmNL+XQYMG0dy5c8uc7K607Kxq4Z4Yxkzkgw8+AFA4NuO7774T72/UqBH++usvfPfdd+jVqxc8PT2RmpoKIsKzzz6L4cOHY82aNdixY0exx2zYsCH++usvvPXWW6hduzaICCqVCiNGjMAff/yhNX+GZhI5Q/j6+uLkyZPYunUrBg4ciOrVqyMzMxO5ubmoXbs2BgwYgC+++ALHjx/X2m/btm0IDQ1F9+7dUadOHeTm5iIvLw/+/v4YOXIkDh8+jBUrVmjt8/XXX2PJkiXo168f6tWrByJCVlYWfH19MXDgQOzatQuRkZF6n07SWLFiBY4cOYKhQ4fC29sb6enpcHJyQlBQEDZs2IDffvut1MuMDVV0cHW7du2M/vhSs7Gxwfbt27Fz50707dsXHh4eSEtLg4eHB/r27Yvdu3djy5YtJU6UGBoais2bN6Ndu3ZwcHBAQUEBWrRogdWrV2P37t185RErF4GISOoQUktLS8Py5cuxa9cu3L59G0qlEvXr18dLL72EqVOniufxGbN0v/32G3r16gWVSoXU1NQSP0iY6URERGDs2LGoW7curl+/zr8DxkzISuoAUouJiUHXrl1x584dAIC9vT1ycnJw/vx5nD9/Ht9//z0OHz4sjqpnzFIRkTjYslu3bvzhKRHN/EALFizg3wFjJlalTyfl5+djwIABuHPnDqpXr47ffvsNGRkZyMzMxLZt2+Dk5ISLFy9izJgxUkdlDABw9OhRvP322zh//jyysrIAFBYv0dHRGDBgAA4fPixOtsekcfToUTRp0gQvv/yy1FEYq/Sq9Omk9evXi5NpnTp1Cu3bt9favnXrVvGS2EOHDqF79+5mz8hYUXv27MHgwYPF/3dzc0NWVpY4eZggCFi2bBmmT58uVUTGGDObKl3EdOnSBSdOnEBQUFCxKeKBwm+4zzzzDG7fvo3g4GCticsYk8KDBw+wbt06HD58GLdu3cKjR49ARPD19UXnzp3x5ptvihOSMcZYZVdli5jMzEw4OTlBrVbjs88+w8yZM3W2e+ONN/Dtt9/Cx8cH8fHxZk7JGGOMsZIYZWBvfn4+oqOjERsbi8zMTAQHBxvjYU3q2rVr4iq8TZs2LbGdZtuDBw/w5MkTnoiJMcYYsxAVLmKWLFmCpUuXIikpSbyvaBGTnJyMDh06IDc3F8ePH4evr29FD2kURRfRK21Z+aLb4uLidBYxOTk5WlOnq9VqPHnyBB4eHkZZcZgxxhirKogIaWlp8PX1LXN+qAoVMS+//DK2bdsGAKhTpw5iY2ORn5+v1cbV1RWBgYFYs2YNtm3bZjEDDotO9W5vb19iu6Lbiu5T1OLFixEaGmq8cIwxxlgVFxsbCz8/v1LbGFzEbNu2DVu3bkX16tWxe/duBAQEoHr16nj48GGxti+//DK+++47HDp0yGKKGGOaM2eO1s+VkpKCWrVqITY2Fs7OzsjMzESvXr0AAJ8PToWNsvgwJCIgr8D42ayVgK7OoNwCAe/84AwAOHjwYKmFXFmISLw6piRZWVkYOHAgAODHH38UF/UriUql4l6sUsj1OdcnNyDf7HLNDcg3u1xzA5aZXV9r1qxBeHg4goOD8eqrrxr1sVNTU1GzZk29ZtQ2uIhZv349BEHAF198gYCAgFLbtmnTBgqFAleuXDH0cEZX9MnJzMwssV3RbSU9oba2trC1tS12v7OzM5ydnWFtbS1Ope3rKkBlLf2LMDsPYiYXF5cy/3jK4uLiUur2rKws8Xje3t4VPh6T73NeVm5AvtnlmhuQb3a55gYsN7s+rl27BqVSiWvXrsHZ2dkkx9CnYDO4iLl48SIEQRCryNKoVCq4uLjg0aNHhh7O6IqOzbl//z6ee+45ne2KroNiKeN5GGPGo++3Zn1oJiB8+t8VZUnfwBkDCse+XrlyRfILeQwuYjSLqenqgdAlNzfXohb2atSoERQKBdRqNa5cuYK+ffvqbKfpPfLx8eErkxirhLKzs9GhQwejP64xJ8c8deqUrL6ls8ovMDAQZ86ckTqG4UWMl5cX4uLikJaWVuZ5q3///RcZGRmoX7++oYczOnt7e3Ts2BEnTpzAL7/8onOeGCLCr7/+CgDimJaqhL+hmh8/54wxpj+Di5iOHTsiMjISkZGRmDhxYqltly5dCkEQEBQUZOjhTGLcuHE4ceIEjh49ijNnzhQb2xMZGYlbt24BgNG6zLLzBQCGzy9IBOT8/wVgtla6B+3qn6OMNvwN1ez4OZdW+HwBqgosWk9EyMkr/LettX7n9EuSnQsEh1bJuUgZ05vBRczUqVOxY8cOzJ07F23bttU5YVxOTg4WLlyIdevWQaFQ4M0336xQWGMbN24cvvzyS1y+fBlDhw5FWFgYunfvDrVajV27duGVV14BAPTt29doHwITt5Q92IsxJg2VDaCyqUgvkwA7/c6w66HyFjDc48iMpUI9MTNnzsTSpUsREBCAHj16iPOoTJ8+HXfv3sWxY8fESfAWLlyIJk2aGCe1kVhZWeHHH39EUFAQ7ty5gx49esDe3h5qtVr8A2vZsiW+//57iZNKL25oIMiqAmOaiCAUFM6QTEqF4V1IAIT8AvjuijI8i0xsbz8DKqW1wfsTEXLUhd0CtgrrivUKFORh5OnlBu/PTMPSi4GSCgHucWTGUqHJ7pYsWQJfX198+OGH+Omnn8T7v/zyS2iWZHJwcMDixYstrhdGo3bt2vjrr7+wbNky7N69G7dv34a1tTWaNGmCUaNGYerUqbCxqUD/Mgr/kE+dOmWUvFlZWeIf6uHDh43yR6ZSqcpsQ1bKihUxAMjwz+MqSaW0hp2yYq89exitW4BZIEsvBrgQYKZW4WUHpk2bhvHjx2PXrl04deoU4uPjoVar4e3tjfbt22P48OEWf1WPk5MTQkNDTTbrriAIJvlDtrOz4zcIxpis7Zv/E1Q2ZX+RKgkRITuvsDdKZV2xU0DZudnoHzrA4P2Z+RllAUgXFxdMnDixzAG+jDHGTCN55lqQTQV63oiAvNzCf1vbGHzKV8jNgevSV/Rur7JRwc62Yl/G7FWGzzjO5M0oRQyruPJMU63r3yXhwWnMXOQ6PqOyIBtboAI9GgCAChYTQGUejswskcFFzJMnT7Bv3z64ublhwIDSu99+/PFHJCcnY+DAgXB1dTX0kJWaIee29Tlvzeekmbnw+AzGmLmVvsZ1KcLDwzFhwgRcuHChzLbHjx/HhAkTEBERYejhGGOMVRKaCz8AICs3C1k5FnLLzdKZkVkug3tifvjhBwDASy+9VGbbiRMnYsWKFdi9e7fFXqUkNX2vYCraZa9P97g+Vx4xZmy9Hs2Gkgy/sopAKEDh5eFKWEOAYaeBCoRcHPRaYnAOZhpFTzsOCC17/T0pZGdnw96ex9pYOoOLmP/++w8qlQoNGjQos23jxo2hUqlw8+ZNQw9X6ZXnCib+w2KWTkk2sELFLg+3Nsbl4fxlmrFKzeAiJjExEY6Ojnq3t7e3x8OHDw09HGOMsUqiaA/xT/N/hJ2NZYxVysrNEnuGSurF5gHslsXgIsbNzQ2PHj1CamoqnJ2dS22bkpKC5ORkeHh4GHo4xhhjT9Eat5GbI12QoorkKGlcSdEPWTsbuwpfYm0KJRUCPIDdshhcxLRu3RoHDhzA5s2bMWXKlFLbbt68GWq1Gi1atDD0cIwxxp5StEfArRxzs5gLjyupvKKiojBr1ix89tlnCAwMlCyHwUXM2LFjsX//fsyePRv169dHz549dbY7ePAg3nvvPQiCgLFjxxoclP2Ppbx4GGOsKhsa3whWZPBFvoUD2IXC3iolCQYPYM8X1NhV/ZrBOQwRHh6O3NxchIeHy7OIGTlyJNatW4fDhw+jb9++6NOnD/r27YtatWoBAGJiYrB//34cPHgQarUaXbt2xZgxY4wWvCqzlBcPM76i3e/ZBbkSJtFWNEtlu/RU6znPtZyfrWiWkp7zouM2kmauBSoyY6+x5OaIvUKV/epIK1JUqIgBAGvLecmVS3BwMK5cuYLg4GBJc1Roxt5du3Zh9OjR2L9/P/bv348DBw5obdf84fXt2xdbtmypyKFYEZby4mHGV/T0wMjTKyRMUrLKdoqg6HMeHApY4iVNJT3nWuM2jDFjr5FVpQGmVU1gYCDOnDkjdYyKFTHOzs7Yt28fDhw4gPDwcPzxxx9ISEgAAHh7e6Ndu3YIDg5G3759jRKWFbKUFw9jjDEmJaOsndS3b18uVBgzgqLd79vbT4dKWbG5VowluyBX7BmqbKcIiv484fMBlY1l9B5k59L/9wxVvuecMWPhBSAZsyBFu99VShvYWUgRU1RlO0Wg9ZzbCBZTxBQqPLVV2Z5zxoylYiOSGGOMMcYkUuGemOTkZOzbtw9XrlxBUlIS8vLySmwrCALWr19f0UMyxhhjTEKWMtVHhYqYr776CnPmzBFH95d16SUXMYwxxpj8WcpUHwYXMdu2bcPbb78NAPDy8kLv3r1Ro0YNHoDGWBVV9EtMPixjjpuiOSrb/DaMSclSpvowuIj58ssvAQDDhw9HWFgYFy+VUNE3fSG/QMIk2opm4Q8my1F0vpXfqi2RMIlu+sxvk50LVGSeGCJCzv+fUbe1rtiA3GzLqAMZ08lSpvowuIi5cuUKBEHAypUruYCppIp+KPnuipIwSckq28RrTFrBocYuirnIZsyUDC5irKys4OLiAi8vL2PmYYzJVNEvMz0fzoYVpL88PB+5Yq8Qf9lirPIxuIhp0aIFTp48idTUVDg7OxszEyuDuUaFF33TjxsaCLJSmuxY5SHkF4g9Q/zBZDmKnjqxgo1FFDFFlXRqR6VS4dSpU0Y5RlZWFrp37w4AOHz4MOzs7IzyuPw6Z0w3g4uY6dOnIyoqCqtWrcKcOXOMmYmVwVyjwou+6ZOV0mKKmKJ4EjBWUYIgGK3YKMrOzs4kj1sSITenYieviIC8/x+IY20DGPi3JeTmVCQFY+VicBEzYMAALFy4EPPnz4cgCJg2bZpZ/2CrMksZFc4Ysxyu/79yNGNVicFFTLdu3QAADg4O+OCDD/DRRx+hcePGcHJyKnEfQRBw+PBhQw/J/p+ljApnjLGKys7NLrtRKYgI2XmFj6GyVlXwirCKZWHmZ3ARc+zYMa3/z8rKQnR0dKn7cNe/cVjKTInMtLILSp79Wh9EhBx14WPYKqwr9uZewSzMNCx9PI8+Y3n6hw6o8HFY1WVwEbNx40Zj5mDlYCkzJTLTGnl6udQRmIWrLON5GDOUwUXMuHHjjJmDlQOPiWGMyZml9yABfEWYXFR4AUhmfjwmpvLiN3dWFci5B0lreQ1BbdJj6atojqo2izkXMYxZEDm/uTNWFRSdyXxX9WsSJtGtqs1ibpQiJjs7G5cuXUJcXBwyMjJKrQT5FAhjjDHGjKFCRUxGRgbee+89bNq0CZmZmXrtw0UMY4wxuSp6OnVofCNYkULCNIXyBbXYK1TVTvcaXMRkZ2ejW7duOH/+PJRKJZ577jn8+eefsLGxQdu2bZGQkICbN2+CiODu7o5mzZoZMzdjjDFmdlrLa5DCIoqYoqraVCYGP/vffPMNzp07h/r16+Pff//FxYsXAQDu7u44fvw4bty4gdu3b2PUqFFITk5Gjx49cPToUaMFZ4wxxljVZnBPTGRkJARBwLJly+Dv76+zTa1atfD999/DysoK8+bNQ6tWrdC3b1+DwzLGGGOMaRjcE3P9+nUIgoBevXpp3Z+XV3xmz48//hhEhK+++srQw7EioqKiEBAQgKioKKmjMMYYY5Kp0JgYNzc3WFtbi/fZ2dkhLS2tWNuaNWvC1dUVFy5cMPRwrAgpZuwV8gsq9gBEEAoK5zIgpcLgFXKNkoUxxlilYHARU716dSQkJBS77/bt27h9+zbq1Kkj3p+Xl4e0tDQolUrDkzKRFDP2+u7iXh/GGGOWxeDTSXXq1EF2djZiY2PF+55//nkAwPfff6/VNiIiAgUFBahZs6ahh2NFaGbs5XWTGGOMVWUG98QEBgbi2LFjOHz4MMaPHw8ACAkJwfbt27Fw4ULEx8ejRYsWuHz5Mr777jsIgoARI0YYKzczA54CnzHGmCUzuIgZNWoUfvrpJ0RHR4tFTI8ePfDmm29i5cqVWL16tdiWiNC+fXvMnTu3woGZ+fAU+IwxVrUQkdbSCmW1UalUZc5No08bQxlcxNSrVw/nzp0rdv9XX32Ffv36ITIyEvfu3YOLiwt69uyJ8ePHaw0CZoxVXgVCLlCBdegIhAIUXumohDUEGPYGWCDkGh6iktDnQwko7C3V9e+SmPKDiUknOzsbHTp0MOpjnjp1ymRfXE2yAGSfPn3Qp08fUzw0Y0wGDnotkToC+3+GfChpTv2WxpQfTIzpi1exZowxxhgA/cZClneMoynHLnIRwxgzCksfCF5VB4Hr+3sxZJwDq3zKOxZS6jGOFS5irl69it27d+PKlStISkrSOWOvhiAIOHz4cEUPyRizQDwQ3DKV5/dib29v4jSMGZfBRYxarca0adPw7bffgohAVPYoPh4ExhhjjDFjMbiIWbp0KVatWgUA6NatG7p37w5vb2+elZcxxhhjZmFwEbNu3ToIgoCPP/4Yc+bMMWYmxhhjTK/Lw/nScP3oe6m9Psr7nOvLkN+NwUXMvXv3oFQq8c477xj6EIwxxliJynt5OF8aXjJTzP8C6Pec68uQ343Bayf5+PjA3t6eR6gzxhhjTBIG98T0798f33zzDa5cuYKmTZsaMxNjjDGm1+XhfGl4+Y2MV8OqQjNqAwX//zQrCQbOp10oXwC2Vze4P8XwIuaDDz7Anj17MHnyZBw4cABOTk4Gh2CMMcaepu/l4XxpePlYEWBdgSIGQIWWFTEmg4sYHx8fHDlyBGPHjkWdOnXw+uuvo2nTpqhevXqp+3Xp0sXQQzLGGGPMAEWnQcm3oHHNRbPoM1XL0yo02Z0gCKhRowbOnj2LRYsW6dU+Pz+/IodkjDHGLEK+oK7Q/gRCgVD4wa0kweCFTvXJUfTKpIqcvjGl7OzscveqGVzEXL9+HV26dMHjx48BALa2tvD09OR5YhhjjFUJu6pfkzpClWdwEfP+++8jMTERDRo0wNq1a9GxY8cqee09Y4wxZumKDmiu6MBeYyo6sNeQQdcGFzEnT56EIAjYuXMnmjRpYujDSCYzMxNRUVGIjo7GhQsXEB0djbt37wIA5s+fjwULFkgbkDHGmMWR60KnRTsZjDKw1wQM6QgxuIjJycmBk5OTLAsYADh79iz69esndQzGGGMywgudWhaDi5gmTZogOjoa2dnZsr3u3s3NDa1atRJv77zzDh48eCB1LMbKxNOxmx8/54xZHoOLmKlTp+Lll1/GunXr8Oabbxozk1l07twZT5480brvvffekygNY+XD07GbHz/njFkeg4uYUaNG4c8//8S7776L5ORkvPPOO3BwcDBmNpPiq6gYY4xVRRWdJ8bYM/ZWhMFFTLdu3QAUnsebP38+PvnkE9SuXbvUye4EQcDhw4cNPSRj7P/xdOzmx885qywsdZ4YQxhcxBw7dkzr/3NycnDjxg3cuHGjxH2q2rnfnNwC5OQWSB3DIuTmqqFQ2hT5Nz8vFaV5Pkvj4Gir9+Pl5lVs4i5jstTXS2V+zpn5mfN1XvRYlkrzHJTnc1MgQ+b5BRAWFmbIbhg3bpxB+5lD7dq1ERMTU+5LrHNycpCTkyP+f2pqKmrWrInJMw/D1lY+p9gYY4wxqeXkZGD10u5ISUmBs7NzqW0N7omx5GLE3BYvXozQ0FCpYzDGGGNVisE9Ma1atYIgCIiMjETdunWNnauYTZs2YcKECQbvf+DAAfTp06fUNsbuiXn46EmZVWRVkZ2VjW7dC8dRHTl8BCo7HgvASsavF2l0C+qG7JxsqGxVOHL0iNRxKj25vs5NnTs1NRXVvNxN2xNz9epV2NjYmKWAsXS2trawtS1+HtzWRglbG74KCgDUBQqoC3IBADY2Cn5eWKn49SKN0aNHYN26dRg9OpifczOQ6+vc1LnL83gGFzE1atTAw4cPDd293EaNGoX+/fsbvL+Li4sR0zDGWOUzZcoUTJkyReoYjOnN4CKmd+/e+O6773DmzBkEBAQYM5NOJfV2MMYYY6xqMvhi8blz58LDwwOTJ09GYmKiMTMxxhhjjJXJ4J6Ymzdv4pNPPsGMGTPQoEEDBAcHo3379vDy8ip1NtwuXboYekjGGGOMMZHBRUzXrl3FyeuICF999RW++uqrUvcRBAH5+fmGHtLokpKSUFDwv0l11OrCiacyMzO1epdUKhUcHR3Nno8xxhhjJTO4iKlVq5bsZ+Bt2bIlYmJiit2/dOlSLF26VPz/cePGYdOmTWZMxhhjjLGyGFzE3Llzx4gxGGOMMcbKx+AipjLgQowxxhiTrypdxDDGGGPsf4quxF6SrKwsnf8uiT4ruhvKKEVMeno69u/fjwsXLuDRo0cAAC8vL7Rq1Qr9+vXjQbGMMcaYDGRnZ6NDhw56t+/evXuZbU6dOgU7O7uKxCpRhYoYIsLixYuxZMkSpKen62zj6OiIOXPmYPbs2bIfCMwYY4yVRZ/eDMCyejTkqkJFzPjx4xEREQEigkqlQuvWreHn5wcAuHfvHqKjo5GWloYPPvgA165dQ1hYmFFCM8sit+5HxhgzpfL2ZgDS92hoqFQqnDp1qtQ2Rd/z9XmvVqlMt7ClwUXM7t27sXnzZgiCIPa0PL3aZGpqKj799FMsWbIEERERGDRoEAYPHlzh0MyyyK37kTHGmG6CIOj13mtvb2+GNGUzuIhZs2YNBEHAxx9/jDlz5uhs4+zsjEWLFsHR0RFz587FmjVruIhhjDFWqenTmwFYVo+GXAlERIbs6OXlhZSUFCQnJ5dZkWVkZMDV1RWurq7iwN/KLDU1FS4uLkhJSSnWO1UZ6XM6yZA/Vj6dVHVlZWWJvXvcK8dY1VKez1CDe2LS0tLg5OSkV5eSg4MDnJ2dkZaWZujhmAWTW/cjY4yxysHgVayrVauG5ORkxMXFldn2/v37SE5OhpeXl6GHY4wxxhjTYnARo1mNevr06SjrjNT06dMBFC4ayRhjjDFmDAYXMe+++y4EQUBkZCS6du2KX375BZmZmeL2x48fY+fOnXj++eexc+dOKBQKzJgxwyihGWOMMcYMHhPTokULfPPNN3jjjTdw8uRJvPDCCxAEAS4uLsjJyRHnAiEiKBQKrFq1Ci1atDBWbsYYY4xVcQb3xADAq6++iuPHj4unidRqNZKSkpCZmSmeYurWrRtOnDiBV199tcJhGWOMMcY0Krx2UocOHXD48GEkJSXh4sWLWmsntWzZEm5ubhUOyRhjjDH2NL2KmG7dusHDwwORkZHifXfv3oVSqUSNGjUAAG5ubujWrZtpUjLGGGOMPUWv00nHjh3D77//rnVf7dq10bZtW5OEYoxVTkSErKwsvW4a+rQ1cM5O9pSoqCgEBAQgKipK6iiM6UWvnhgrKyvk5uYWu5/fOBhj5SHnhfGqgvDwcOTm5iI8PByBgYFSx2GsTHr1xPj4+CApKQm3bt0ydR7GGGMSCQ4Oho2NDYKDg6WOwphe9OqJ6dWrFzZs2ICAgAAEBQXB0dERAJCSkoKJEyfqfTBBELB+/XrDkjLGZI8XxrNsgYGBOHPmjNQxGNObXgtAJiQkICgoCNevX6/YwQQBBQUFFXoMOahqC0AyxhhjxmL0BSC9vb1x+fJl/Prrr/j777+RlZWFBQsWwNHRkWfhZYwxxpgk9OqJ0UWhUMDHx0evBSCrGu6JYYwxxgxj9J4YXcaNGwdXV1dDd2eMMcYYqxCDi5hLly5BEATcunULdevWNWYmxhhjjLEyGVzEXLt2DTY2NlzAMMYYY0wSBi8AWaNGDZ7sjjHGGGOSMbiI6d27NzIzM3lOAcYYY4xJwuAiZu7cufDw8MDkyZORmJhozEyMMcYYY2UyeEzMzZs38cknn2DGjBlo0KABgoOD0b59e3h5eUGpVJa4X5cuXQw9JGOMMcaYqELzxGimAieiMqcFBwpn7M3PzzfkcLLC88QwxhhjhjHLPDG1atXSq3BhjDHGGDMFg4uYO3fuGDEGY4wxxlj5GDywlzHGTCkqKgoBAQGIioqSOgpjzEJxEcMYs0jh4eHIzc1FeHi41FEYYxbK4NNJGkSEH374Ab/99htiY2ORlZWFw4cPi9szMjIQHR0NQRDQuXPnih6OMVZFBAcH48qVKwgODpY6CmPMQhl8dRIA/PvvvxgyZAiuXr0qzt4rCAIKCgrENgUFBWjYsCFu3bqFqKgodOrUqeKpLRxfncQYY4wZpjyfoQafTkpKSkKPHj3w999/o1mzZli4cKHOgymVSrz++usgIuzatcvQwzHGGGOMaTG4iFm+fDliY2PRu3dvnD9/HnPnzoWdnZ3OtgMHDgQAnDp1ytDDMcYYY4xpMbiI2bt3LwRBwPLly2FlVfrQmmeffRY2Nja4efOmoYdjjDHGGNNicBFz+/ZtqFQqNG7cWK/2Tk5OSEtLM/RwjDHGGGNaDC5iBEGAWq3Wq21+fj5SU1N5kCtjjDHGjMbgIqZOnTrIzc3FrVu3ymx7+PBh5OXloVGjRoYejjHGGGNMi8FFzAsvvAAiwueff15qu4yMDMycOROCIODFF1809HCMMcYYY1oMLmJmzJgBNzc3fPPNN5g7dy4eP36stT0tLQ2RkZFo06YNrly5Al9fX7z++usVDszki6eRZ4wxZkwVmuzu5MmTGDBgAFJTU6FQKEBEICK4uLggNTVV/H93d3f8+uuvaN26tTGzWyye7E63kJAQXLhwAa1atcL69euljsMYY8wCmWWyOwDo1KkT/vzzT4waNQpKpRJqtRpEhOTkZKjVaiiVSowcORLR0dFVpoBhJQsODoaNjQ1PI88YY8woKtQTU1RWVhaio6MRHx8PtVoNb29vtGnTBo6OjsZ4eFnhnhjGGGPMMOX5DDVoAciCggLcuHEDqampcHV1RYMGDWBnZ1cl1kVijDHGmGUo1+mk7OxsTJ8+HW5ubmjWrBk6duyIJk2awMPDAx9++CHy8/NNlZMxxhhjTIvePTFqtRq9e/fGyZMn8fQZqOTkZCxatAh///03du/ebfSQjDHGGGNP07snZtOmTThx4gSICN26dcPatWuxf/9+rF69Gm3btgURYe/evdi3b58p8zLGGGOMAShHT8zWrVshCAImTZqE7777TmvbK6+8gkGDBuGnn37C9u3b0b9/f6MHZYwxxhgrSu+emL/++gsAEBoaWmybIAhYsGCBVjvGGGOMMVPSu4hJSkqCs7MzfHx8dG7XrIuUlJRknGSMMcYYY6XQu4jJz8+HnZ1didtVKpXYjjHGqipeXoMx86nQjL2MlQe/ubOqIDw8HLm5uQgPD5c6CmOVXrkmu8vKyirzD7OsNjzlfNVV9M09MDBQ6jiMmURwcDCuXLnC73WMmYHeyw4oFAoIglCxgwlClTjdxMsO6BYVFYVZs2bhs88+4yKGMcbA74u6mGwBSM2q1Ibe1Gp1hX4wY3r8+DE2btyIMWPGoHHjxnBwcICtrS38/PwwaNAg/PDDD1JHrHQCAwNx5swZ/kNljLH/x6cfK6ZcM/ZWJj4+Plq9QiqVCtbW1rh//z7u37+PvXv3om/fvti5cyfs7e0lTMoYY6yy4tOPFVNlB/bm5+ejbdu2+Oabb/Dff/8hKysL6enpuH37NkJCQgAABw4cwGuvvSZxUsYYY5UV91BXTJUtYo4cOYIzZ87g9ddfR926dcX7a9eujXXr1onFS0REBGJjY6WKyRhjZsNXEDK5qbJFTFBQUKnbNb0xAHD+/HlTx2GMMcnx+AwmN1W2iCmLZvI+ACgoKJAwCWOMmUdwcDBsbGx4fAaTjXLNE1OVHDt2TPx3s2bNpAvCGGNmohmfwZhccBGjQ3JyMhYvXgwA6Ny5Mxo0aFBq+5ycHOTk5Ij/n5qaatJ8jDHGGOPTScWo1WqMHTsW8fHxUKlUWLlyZZn7LF68GC4uLuKtZs2aZkjKGGOMVW2yKWI2bdoEQRAMvv3yyy96HWfatGnYt28fAGDVqlV47rnnytxnzpw5SElJEW98NRNjjDFmenw6qYh3331X7Hn5/PPPMXHiRL32s7W1ha2trSmjMcYYY+wpeq+dJLWcnBykpaUZvL+Liwusra1L3D5r1iwsXboUALBs2TLMmDHD4GPx2kmMMcaYYcrzGSqbnhhT9nbMnDkTy5YtAwB89tlnFSpgGGOMMWYeehUxRWe0rQhBEPDff/8Z5bGM5d1338Xy5csBFBYwM2fOlDgRY4wxxvShVxFz586dUrcLgoCSzkoV3SYIQvnSmVjRAqaip5AYY4wxZl56FTFHjx7Vef9///2HGTNmIDs7GyNHjkRgYCBq1KgBAIiLi0NUVBS2b98OlUqF5cuXG61HxxhmzZolFjArVqzAO++8I3EixhhjjJWHwQN779+/j1atWsHFxQUHDhzAM888o7PdrVu30LdvX6SmpiI6Ohq+vr4VCmwMd+/ehb+/PwBAoVDAy8ur1Pbvvvsu3n33Xb0fnwf2MsYYY4Ypz2eowfPEhIaGIjExERs3biyxgAEKx9Ns2LABCQkJCA0NNfRwRqVWq7X+nZCQUOotPT1dwrSVB6+QyxhjzJgM7ompVauWOLmbPpydneHq6oq7d+8acjhZ4Z4Y3UJCQnDhwgW0atUK69evlzoOY4wxC2SWnphHjx4hPz9fr7ZEhIKCAjx69MjQw7FKgFfIZYwxZkwGFzHVq1dHdnY2fv755zLb7t+/H1lZWahevbqhh2OVgGaF3MDAQKmjMMYYqwQMLmKGDBkCIsLEiRNx/PjxEtudPHkSEydOhCAIGDp0qKGHY4wxxhjTYvCYmNTUVLRu3Rr//fcfBEFAu3btEBgYKF59FBcXh+PHj+P06dMgItSrVw/nzp2rEmNEeEwMY4wxZpjyfIZWaO2kBw8eIDg4GIcOHSp8sKcms9M8dM+ePREWFgYfHx9DDyUrXMQwxhhjhjHb2kk+Pj44ePAgTp48iZ07d+LChQvi4F0vLy+0atUKw4cPR8eOHStyGMYYY4yxYmSzirWccE8MY4wxZhizXGLNGGOMWQKeSLPqqtDpJI2EhAQcO3YMsbGxyMzMxLx584zxsIwxxliZwsPDkZubi/DwcJ7CoYqpUE9MdnY2Xn/9ddSqVQujR4/G7Nmziy0tkJycDDc3N1hZWeHmzZsVCssYqzr42zXTF0+kWXUZXMTk5+ejX79+WLNmDaytrREUFARbW9ti7VxdXfHKK69ArVZj+/btFQrLGKs6in67Zqw0PJFm1WVwEbN+/XocO3YM9erVw+XLl3Ho0CG4uLjobDty5EgAwJEjRww9HGOsiuFv14yxshg8Jmbz5s0QBAFff/016tSpU2rb5s2bQ6lU4urVq4YejjFWxWi+XTPGWEkM7on5+++/oVQqERQUVGZbKysruLi44MmTJ4YejjHGGGNMi8FFTHZ2Nuzs7GBlpV9nTlZWFlQqlaGHY4wxxhjTUqFVrNPT0/XqXfnzzz+RlZUFf39/Qw/HGGOMMabF4CKma9euAIBNmzaV2XbBggUQBAE9e/Y09HCMMcYYY1oMLmJmzJgBQRCwcOFCcQHIp8XHx2PMmDHYu3cvbGxsMG3aNIODMsYYY4wVZXAR06RJE3zxxRdITU1F79690bx5cyQnJwMAhgwZgjZt2sDf3x9bt26FIAhYvXo1atWqZazcjDHGGKviKrwA5J49e/D222/j7t27OrfXrFkTK1euxIABAypyGFnhBSAZY4wxw5TnM9Qoq1ir1WocO3YMp06dQnx8PNRqNby9vdG+fXt0795d7yuYKgsuYhhjjDHDmL2IYdq4iGGMMcYMU57P0AotAMkYY4wxJhUuYhhjjDEmS3oNVunWrZtRDiYIAg4fPmyUx2KMMcZY1aZXEXPs2DGjHEwQBKM8DmOMMcaYXkXMxo0bTZ2DMcYYq3KioqIwa9YsfPbZZwgMDJQ6juzoVcSMGzfO1DkYY4yxKic8PBy5ubkIDw/nIsYAPLCXMcYYk0hwcDBsbGwQHBwsdRRZ4nliTIDniWGMMcYMU57PUKNNpfvgwQPExcUhIyMDpdVFXbp0MdYhGWOMMVaFVaiIUavV+Pzzz/HNN9/gzp07ZbYXBAH5+fkVOSRjjDHGGIAKFDFqtRovvvgi9u/fDyKCq6srkpOToVAo4Ovri8TERGRnZwMAHBwc4OnpabTQjDHGGGMGD+zduHEjfv75Z/j4+ODEiRN48uQJAKBatWq4e/cu0tPTcezYMXTq1AkFBQUIDQ3F7du3jRacMcYYY1WbwUVMREQEBEHA0qVL0bFjx+IPrFCgS5cuOHr0KAIDAzFp0iT88ccfFQrLGGOMMaZhcBFz+fJlAMDgwYO17i8oKND6f6VSic8//xz5+flYtmyZoYdjjDHGGNNicBGTnp4OV1dX2NnZifepVCqkpaUVa9uwYUM4Ozvj1KlThh6OMcYYY0yLwUWMt7c3cnNzte7z8vJCTk4O4uLitO5Xq9XIysoSx80wxhhjjFWUwUVMrVq1kJmZiYcPH4r3tWrVCgCwZ88erbb79u1DXl4evL29DT0cY4wxxpgWg4sYzWDeqKgo8b7Ro0eDiDB79mwsXboUv/32G1asWIFx48ZBEAQMGDCg4okZY4wxxlCBZQcuXryIXr16oXfv3oiIiBDvHzJkCPbs2QNBEMT7iAjPPvss/vjjD7i7u1c8tYXjZQcYY4wxw5TnM9ToaycVFBRgzZo12LlzJ+7duwcXFxf07NkT7777Ltzc3Ix5KIvFRQxjjDFmGEmLGMZFDGOMMWao8nyGGjwmhjHGGGNMSgYXMQUFBbh7926xy6l1iYuLw927d6FWqw09HGOMMcaYFoOLmO3bt6NOnTqYN29emW1nzJiBOnXqYNeuXYYejjHGGGNMS4WKGAAICQkps+3kyZNBRNi2bZuhh2OMMcYY02JwEXPlyhVYWVmhbdu2Zbbt2LEjrKys8Ndffxl6OMYYY4wxLQYXMXFxcXB2doZSqSyzrZWVFVxcXPQaP8MYY4wxpg+Dixh7e3ukpqYiPz+/zLZ5eXlITU2FjY2NoYdjjDHGGNNicBHTsGFD5Ofn45dffimz7S+//IK8vDzUr1/f0MMxxhhjjGkxuIgZPHgwiAjvvPMOHjx4UGK7+Ph4vP322xAEAYMGDTL0cIwxxhhjWgyesTczMxNNmjTB3bt34enpiZkzZ6Jv376oVasWACAmJgb79+/H8uXL8ejRI9SsWRN///03HB0djfoDWCKesZcxxhgzjNmWHbh69Sr69OmDe/fuaS34WBQRoUaNGjhw4ACaNm1q6KFkhYsYxhhjzDBmW3agcePG+PPPP/Huu++iWrVqICKtm7e3N2bOnIk///yzyhQwjDHGGDMPoy4AGRMTg4SEBACAt7c3/P39jfXQssI9MYwxxphhyvMZamXMA/v7+1fZwoUxxhhj5sWrWDPGGGNMloxexHz99ddo2bIlHBwc4ObmhqCgIOzdu9fYh6mwCxcuIDQ0FAMHDkTDhg3h4eEBa2treHh4oGPHjvjkk0/w5MkTqWMyxhhjrAR6j4k5d+4cevfuDTc3N1y7dk3n7LsvvfQSIiMjARRelSQeRBCwaNEizJ4920ixK+7NN9/EqlWrxP9XqVSwtrZGWlqaeJ+npyd+/PFHtG/fvlyPzWNiGGOMMcOY5OqkI0eOIDk5Gf369dNZwGzZsgU7duwAEaFatWp49dVX8c4776BOnTogInz44Ye4du1a+X8aE2nbti2WLl2K06dPIykpCVlZWUhNTUVaWhrCwsLg5eWFxMREDBo0CCkpKVLHZYwxxthT9O6J6d+/Pw4cOIDffvsN3bp1K7Y9ICAA586dQ61atRAdHQ0PDw8AQFZWFjp16oRLly7hnXfewbJly4z7E5jIwYMH0bt3bwBAREQEXn75Zb335Z4YxhhjzDAm6Ym5desWBEFAQEBAsW2JiYk4d+4cBEHAvHnzxAIGAOzs7LBgwQIQEaKiosrxY0irXbt24r/v3bsnYRLGGGOM6aJ3EfPgwQM4OzvDwcGh2LZTp04BKBz7MmDAgGLbu3fvDqCwEJKLEydOiP9+5plnJEzCGGOMMV30nicmIyMDVla6m587dw4A8Oyzz8LLy6vYdnt7e7i4uGgNmrVEOTk5iI+Px759+zBv3jwAhT+TrsKMMcYYY9LSu4jx8PBAQkICHj58iGrVqmlt++OPPyAIAtq0aVPi/rm5uToHBFsClUqFnJycYvd37NgRW7Zsga2tban75+TkaO2vGQicmppq3KCMMcZYJaf57NRryC7pqU+fPqRQKGj58uVa9z969IhsbW1JoVDQmjVrdO4bHx9PgiBQ/fr19T2cWfn7+5O3tzc5ODgQAAJAQUFBdO7cOb32nz9/vrgf3/jGN77xjW98q/gtNja2zM9fva9O2rRpEyZOnAhnZ2ds3LgRL7zwAu7fv48pU6bgl19+ga2tLWJjY+Hp6Vls38jISIwcORKDBw/Grl279DmczuNPmDDBoH0B4MCBA+jTp0+Z7R4+fIjNmzfjk08+QXJyMubOnYuFCxeWus/TPTFqtRpPnjyBh4dHiat7V0Tr1q1x8+ZNxMbGyurqp9TUVNSsWVN2uQF+zqXAz7n58XNufvycF0dESEtLg6+vLxSK0ofu6n06aezYsVi1ahWio6MxbNgwrW2CIODNN9/UWcAAwLZt2yAIAjp16qTv4SRTrVo1zJgxA507d0b79u3x0UcfoW3btujfv3+J+9ja2hY75eTq6mqyjEqlEgDg7Owsqxe9hhxz83Nufvycmx8/5+bHz7luLi4uerXT++okpVKJAwcOoGfPniAirdvYsWOxePFinfvdunULP/74IwBUaIDsqFGj8OjRI4Nvmiuk9NW2bVux6FqzZo3BuU3hlVdekTpClcPPufnxc25+/JybHz/nFaP36aSibty4gcuXLwMo7AqrU6dOiW3v3LmDv//+G9bW1ujVq5fhSSUwevRobN26FY0aNcLVq1eljiOS62R6cs0NyDe7XHMD8s0u19yAfLPLNTcg3+yWklvv00lFNWjQAA0aNNCrbe3atVG7dm1DDiM5zbw2Tk5OEifRZmtri/nz55d51ZSlkWtuQL7Z5ZobkG92ueYG5JtdrrkB+Wa3lNwG9cTIXUFBARQKRamDbg8fPiyeOps1axaWLFlixoSMMcYYK4veY2Iqk9jYWLRs2RLfffcdbt26pXUtemxsLD799FO8+OKLICK4u7vjnXfekTAtY4wxxnSpkj0xd+7c0RrHY2NjA2dnZ2RlZSEjI0O8v06dOti1axdatmwpRUzGGGOMlaJK9sT4+voiMjISU6ZMQZs2beDp6YnU1FSo1WrUqlULAwYMwLp16/D333+bpICpXbs2BEHQuu3Zs8eox2jRokWxY2zatKnCj2uO7K6ursWOcezYsQo/rlyzyzU3IN/scs0NyDc7vy+WTq7Puale5xpVsoixsbHBsGHDsHLlSpw7dw73799HTk4OMjMzERMTgx9//BEhISGws7MzaQ5nZ2d4e3vD29sbKpVKa9vNmzexfPlyDBgwAP7+/rC1tYWDgwPq16+PkJAQREdHl/rYnp6e4mOXNVmQsbNr/Pfff3jttddQp04dqFQqeHl5oXfv3mVOeKh5XG9vb6PnBuSbXa65gdKzP3jwADt27MB7772Hnj17ipNE6vtmx8+5bnLNXlnfF/l1bprXud7LDjDj8ff3JwC0ceNGndtPnjxZbPplJycnsrGxEf9foVDQhx9+aJTjGTO7xs8//0z29vZiXmdnZ1IoFOL/T5gwgdRqdZnH07Q/evRolc0u19z6Zi9t2Y7yZuDnXL7ZK/v7Ir/Ojfs616iSPTGWLi8vD0qlEoMGDUJkZCQSExORmpqKzMxMnD17Fp06dYJarcZHH32E9evXSx23mNu3b2PEiBHIzMxEx44dcePGDaSkpCAlJUVcHXzjxo1YunSpxEmLk2t2ueYGCmf8rlmzJl588UUsXLgQa9eulTqSXuT8nMsxu9zfF/l1biJGK4eY3sqqfmNjY+mff/4pcf+cnBx67rnnCAA988wzFT5eeejzWGPGjCEA5OPjQ0lJScW2v/rqq2I1/+TJk1KPBzN/Q7XE7HLNTaRf9vz8fK3/v337tiy+ocr5ObfE7JX9fZFf59wTU2X4+fmhXr16JW63sbHBmDFjABSep0xKSjJXtDJlZGSI50hff/11nWtIzZkzB0DhjI/GHkRWEXLNLtfcGpq1Y+REzs+5XLPL+X0R4Ne5qXARI1NFB18VFBRImETbyZMnkZWVBQDo27evzja1a9dGo0aNAAAHDx40W7ayyDW7XHPLmZyfczlnL4ulvi/KlRxeK1zEyJRmNHv16tXh4eEhbZgirly5Iv67adOmJbbTbPv7779Nnklfcs0u19xyJufnXM7Zy2Kp74tyJYfXChcxMnT69Gmx227SpEmlLp9gbnFxcQAANze3Ui9Rr1GjhlZ7SyDX7HLNLWdyfs7lnL00lvy+KFdyeK1wESMzjx49wqhRo6BWq1GvXj3MmjVL6kha0tLSAAD29valttNs17S3BHLNLtfccibn51zO2Uti6e+LciWH1woXMTKSnp6OgQMHIiYmBk5OToiMjISjo6PUsRhjTDL8vli1cREjExkZGXjhhRfwxx9/wNHREfv370fz5s2ljlWMk5MTACAzM7PUdprtmvaWQK7Z5ZpbzuT8nMs5+9Pk8r4oV3J4rXARIwOaP9Tjx4/DwcEBP//8Mzp16iR1LJ18fX0BAElJSeKodl3u37+v1d4SyDW7XHPLmZyfczlnL0pO74tyJYfXChcxFk7zhxoVFQV7e3v8/PPP6NKli9SxSlR0BHvRke1P02xr0qSJyTPpS67Z5ZpbzuT8nMs5u4bc3hflSg6vFS5iLFhGRgb69euHqKgoODg4YP/+/QgMDJQ6Vqk6deokjmL/5ZdfdLaJiYnBtWvXAAC9evUyW7ayyDW7XHPLmZyfczlnB+T5vihXcnitcBFjoTR/qJquUrn8oTo4OGDo0KEAgG+//RYpKSnF2ixZsgRA4fnTQYMGmTNeqeSaXa655UzOz7mcs8v1fVGu5PBa4SLGAmVmZqJ///44fvw4HB0dceDAAVl1lS5cuBAODg6Ij4/HgAED8O+//wIofANauHAhVq9eDQCYO3cu3NzcpIxajFyzyzU3AKjVaiQmJoq3otPFp6SkaG3LycmRMKk2OT/ncswu9/dFfp2bhpXZj8jKtHPnTnHmyfz8fAwfPrzU9rt370aHDh3MkEw/derUwY4dOzB8+HCcOHEC9evXh4uLC9LT08WpwCdMmICZM2dKnLQ4uWaXa24AuHv3LurUqaNz29Pf7DZu3Ijx48ebPpQe5PycyzG73N8X+XVuGlzEWCC1Wi3+Ozs7G9nZ2aW2z83NNXWkcuvXrx/++usvLFmyBL/99hvi4+Ph5uaGli1b4rXXXhO7KC2RXLPLNbecyfk5l1v2yvC+KFeW/FrhIsYCjR8/3mKq8Ip45plnsGbNGqljGESu2eWYu3bt2iAiqWMYTI7PuYacssv9fZFf56bBY2IYY4wxJktcxEhowoQJEAQBgiCIC5cZS4sWLcTHjomJMepjA6bN7urqKj62Kcg1u1xzA/LNLtfcgHyz8/uibnJ9zk39OufTSRLw8vIqdj5XpVIZ9Rienp7w9vbWuq+0VUj1ZY7s3t7exR7Txsamwo8r1+xyzQ3IN7tccwPyzc7vi6WT63Nuqte5hkByPknHGGOMsSqLTycxxhhjTJa4iGGMMcaYLHERY8FeffVV/PHHH1LHYJXUjh07EBYWJnUMxpiefH19oVDI72PblLl5TIwFUyqVICI0btwYEydORHBwMDw9PaWOVS43b97EwYMHkZKSgpo1a6Jfv35wd3eXOpZe5JxdH76+vnjw4IHWJGKW4sGDBzh69CiuXr2Kx48fAwA8PDzQuHFjBAUFwcfHR+KEjJmfJf/NlsaUubmIsWAeHh5ITk4GABARrK2tMWDAAEyaNAm9e/c22SVrxjJnzhwsXbpU64Xr7OyMjRs3YvDgweJ969atw/379zFt2jS4urpKkLQ4OWaPiooqV/uhQ4fiyZMnOHr0KBwcHNCwYUM4OjqaKJ1+bty4gblz52L37t0lTgwmCAIGDx6MTz75BA0aNDBzQm2hoaFGeZz58+cb5XHKY8KECUZ5HCLCpk2bjPJY+ggKCir3PkQkLlkgZ1zE6EDMYuXl5dHPP/9M48ePJzc3N1IoFCQIAgmCQDVr1qS5c+fSrVu3pI6pU0REBCkUClIoFOTp6UkdOnQgDw8PUigUpFKptHKHhoaSIAi0bt06CRP/j1yzF319GHKzsbGhN998kwoKCiTJv2fPHnJ0dCRBEMTnv6SbIAjk6OhIP/zwgyRZNSr6nGtuUmavyM+g2dfcufV5fRR9HUn1HBtb9erVZfmzmDI398TIRH5+Pvbt24ehQ4eCiCAIgvjfwMBAhISEYNiwYbC1tZU6KgCgffv2OHPmDIYMGYItW7bAxsYG2dnZGDhwIA4dOoTp06dj2bJlAICLFy+iTZs2GDZsGLZv3y5xcvlmt7KyKve05prXUNH/X7ZsGaZPn27seKU6e/YsAgMDkZOTA0dHR4wdOxYDBw5EixYtxFN4T548waVLl/DTTz8hPDwcGRkZsLa2RlRUFAICAsyaV8OQ51wXzUJ65hQSEmK0afA3bNhglMfRx8KFC0vdnpaWhrNnz+LkyZNwcXHBlClTYG1tjXnz5pkpoelwT4wOJimNmElkZGSI3yo2bNhAQUFBpFQqxfvc3NzojTfeoAsXLkgdlRwcHEgQBLp//77W/SdOnCCFQkGtW7cW78vLyyNra2tq1qyZuWPqJOfs5VH021FGRgYtX76cFAoFtWzZ0uxZGjVqRIIgUIsWLejOnTtltr9z5w61bNmSFAoFNWjQgNRqtRlSGkahUJCPj4/UMaqcU6dOkZeXF3Xv3p3y8/OljmMU3BNTHPfEyEhmZiacnJxARGJFe/fuXURERCAsLAw3b94Uv1k1b94cISEhGDNmjCRjNZycnGBlZYWkpCSt+3NycmBvbw9nZ2etbZ6eniAicRCnlOScvTx0fTuys7ODUqlEenq62XLs2bMHQ4cOhbu7O/766y9Ur15dr/0SEhLQrFkzJCYmYvfu3Rg0aJBpgxpIqVSiWrVqiI+PlzpKlfPDDz9g6NChWL58Od555x2p41R4DNXy5cuRnp5u9p4Yi85tktKImUTRnhhdTp8+TW+88YY4fkMQBFKpVGZOWahJkyZkY2NDubm5xba5urqSUqnUus/Ozk6yrE+Tc/by0PXtSIpvehMnTiRBEOjjjz8u976LFi0ihUJBEydONEEy4+CeGOnk5+eTSqWiFi1aSB2FiCo+hkqq8T2WnFt+F5yzErVr1w6rVq1CXFwcpk6dCkEQkJOTI0mWIUOGIC8vDz/88EOxbSqVSqsij4mJQU5OTrE1TaQi5+zl0bFjR3Tt2lXrPimueNPMhVT0qi99aXpfeD4lpotSqYS1tTVu3rwpdRQAEBdCNPTGuYvjBSArkdu3byM8PBzh4eG4ffu2pC/6mTNnYuvWrZg6dSrq16+PFi1aiNuezvXll1+CiNCxY0czp9RNztnLIzIysth9GzduLLYgnKklJCRAqVSicePG5d63UaNGUCqVSEhIMEGyys2QS6ypyOXU77//PuLj481+iXV5REdHIyMjw2Lm18rPz6/Q/ppTwOZm0blN0r/DTELX6aTU1FRat24ddenSReuSyRo1atD7779PN2/elCTrsWPHaOvWreTl5UW2trY0YcIE+v777+nw4cPk4eFBgiDQgQMH6M033xQvg/zjjz8kyfo0OWeXIxsbG/L09Cxx+/Xr10t9HXt6epK1tbUpohmFpZ5OKu8l1k+/9zRq1MhiL18uKCigI0eO0DPPPEOCINCgQYOkjmQUPLC3OB7YKyNFB/b+8ssvCAsLw549e5CVlQVBEGBlZYX+/ftj4sSJ6Nevn6Q9MZrZhssiCAKUSiVWrFiBN9980wzJyibX7IZMAqYLmXliMA8PDxQUFIgTOz5NqVTCy8urxG9y9vb2UKlUePLkiQlTGs5SB/Yaeom15nLqDz74QPyZzHmJdZ06dUrdnp+fj8TEROTk5EAQBDg4OODkyZN47rnnzJTQdPgS6+K4iJGR6OhotG3bVnzj0RQpDRs2FJcl8PLykjKiqKz5MxwcHODn54dOnTphypQpaN68uRnTlU6u2ZVKpVEeh4pc/WYOTZs2xdWrV5GSkgInJ6di20srAhITE+Ht7Y3GjRvj8uXL5ohbbpZaxMiVvnPzEBE6dOiAr776Cq1atTJDMtPjIqY4HhNj4a5cuYLIyEhERkbi+vXr4kApR0dHjBgxAiEhIWjXrp3UMYup6DlUKck1uxRT1xtDq1atcPXqVfz+++/o06dPufY9ceIEAKBly5amiFammJgYvdoVFBTgzp07JfaO+vv7GzNWpVZWr09aWhrOnTuHnTt3wtvbG7Vr1zZPsCoiPz8f//zzD5KSksp8rwwMDDR5Hu6JsWBNmjTBtWvXAPyv16VDhw4ICQnBiBEjYG9vL2U8xowiIiIC48aNQ79+/bBy5cpi2+vWrVtiT8aQIUOwZ88eREREYPTo0eaIq0XfU49lkds3azm4ffs2evToARcXF/z++++ws7OTOlKF1ahRA/Hx8ZK8Xu7fv485c+Zg165dyMrK0msfTU5T5uYixoJpTg94e3sjODgYISEhqFevnsSpGDOurKwsVK9eHampqSW28fb2LlbEXLt2Dc899xwcHBwQGxur81SUqRlj2QFzn77TJTMzEwcPHsSFCxfw6NEjAICXlxdatWqFXr16yfYL0+HDh9GrVy+EhoZi7ty5UsepsMjISGRlZSE4ONisx42Li0NAQADu379frrGWmuU0TJmbixgLNmjQIISEhOCFF16AQsFT+rDKa/HixaV+yOjqiZkxYwZOnz6NkSNHYtq0aaaOqFN4eLhRHsfcH0oaBQUF+Oyzz7BkyZISi0hnZ2e89957mDVrlizfhxwcHFC3bl2LHTMlB6+99hrWrVsHJycnvP/++xg6dChq1qwJGxsbqaNxEcNMKzU1FT/99BP+/PPPMs+hkoXNNyHX7EeOHMEvv/yClJQU1KxZE8OGDUPDhg2ljlWq3NzcUiess7GxscixX3IRERGBqVOnom/fvtiyZYt4/8iRIxEZGSl+u/b394evry+ICHFxcbh79y6Awtf3iBEjsG3bNknyV4SjoyMAmHUpjZLoO4aqLOYeQ1WrVi3cu3cP27dvx/Dhw8167DKZ5MJtxoho/fr15OTkJPm01IaQa/bRo0cXy2dlZUVff/21VrtPPvmExo8fTw8ePJAoKTMnzeti586d4n0bNmwQ5zl67bXXKCYmpth+d+7coVdffVVr4Vk5OXLkCCkUCvLw8JA6ChFVfPp+zc3cbG1tS1yKRWp8dZIM/Pvvv9ixY4fePQLmnOOjJL/++iteffVVEBFsbGzw/PPPo2bNmlCpVFJHK5Ncs3/99dfYtm0bBEFAkyZN0KxZM/z555+4du0a3n77bXTp0kWcK0OlUiEsLAytWrXC1KlTJc29ZcsWDB06FLa2tpLmqMwuXrwIAFrLTKxZswZEhJkzZ2LJkiU69/P398d3330HFxcXLF++HGvXrjVopl9zKigoQEJCAn799Ve89957ICL06NFD6lgAjLOsB0lw8sTLywtpaWmwtrY2+7HLwqeTLNyCBQvw8ccfQ61W6/UHQBYwSBAAevbsiSNHjiAgIACRkZGoUaOG1JH0JtfsLVu2xJ9//onXX38dq1atEu8fNWoUtm/fjsmTJ+Obb74BAFy9ehXNmjXDgAEDsGfPHokSF1IqlXB2dsbo0aMxadIkyS6XNkRUVBQUCgU6duxYrvEiqampSEpKglKphJ+fnwkTFvL09ER2drbWKRVnZ2dkZmbi0aNHcHNzK3X/pKQkeHl5wd7evtQB2OZQnudZEARUq1YNv//+O+rWrWvCVPopbQzVtGnTkJKSUuppaU0bc7/HT5w4EZs2bcK1a9fQoEEDsx67LFzEWLAtW7Zg7NixAApnNe3du7dePQLz5s0zR7xSubm5ISUlBdevX0f9+vWljlMucs1ub2+P7OxsPH78WOtDSTNJYtOmTfHnn38CKLz00c7ODs888wyuXr0qVWQA/7vCR/NW1KJFC0ycOBFjxoyBq6urpNnKornEeuTIkfj+++/1/oC9dOkSWrduDSLCvXv34Ovra9KcKpUKdnZ2SEpKEu9zdXWFUqnE48eP9XoMT09P5Ofnlzizsrnoe0WYnZ0dhgwZgkWLFpmlUKwofSaEk2qyu9u3b6NVq1bo0qUL9uzZI+ls8E/jIsaCdezYEadPn8aAAQOwbds2Wc1z4OjoCKVSiZSUFKmjlJtcs7u6ukKhUBSbfj8/Px8qlQoODg5aP5OXlxfy8vIk/1A6f/48duzYgZ07d4oDH4kIKpUKgwYNwqRJk9CtWzdJM5ak6DwxI0aMwJYtW/QuZHr37o3ffvsNq1atwuuvv27KmPDx8cHDhw/x4MEDVKtWDUDh+8vZs2eRlJQkDn4tSXp6Otzc3NC6dWvJVww/fvx4qdutra3h5uaGevXqGW0Wa3Ow5CIGKJxYcsiQIWjatCnef/99BAQEwNnZ2ew5ijHvEBxWHpqBpffu3ZM6Srk999xzZGtrS3l5eVJHKTe5Zm/VqhVZWVlRRkZGsW3u7u6kUCi07rOxsSE7OztzxdPL2bNnafr06eKAU81AyDp16lBoaCjFxsZKHVGLQqEgGxsbsrGxIUEQaMSIEVRQUKDXvhEREaRQKGj48OEmTknUu3dvEgSBFi9eLN63ceNGUigU9Omnn5a5/6effkoKhYLWrFljyphVmp+fHwmCUOrgWQ8PD1IqlWZMVciSByBzEWPBnJ2dydXVVeoYBlm6dCkJgkB79uyROkq5yTX7Z599RoIg0OrVq4tte3oV2atXr5JCoaBnn33WnBH1UnS19uDgYHJychL/X6lUUu/evWnHjh0WcaWEZoXqnTt3ioXMyJEj9Spk4uPjzfY72LRpEykUCrK1taWwsDDx/nHjxpFSqaSFCxdSenp6sf3S0tIoNDSUFAoFjR492uQ5q7LGjRuTIAh07do1nduTk5NJoVCQu7u7mZMRKZVKrS8W+tzMVcTw6SQL1q5dO1y4cAGpqakWf2XM0/Lz89G1a1fcuXMHv/32Gxo1aiR1JL3JNXteXh46deqEv//+G5GRkejbt6+47elu6ODgYERERCAkJARr166VKrJORVdrV6vVyMzMxK5du7B582YcOXJEHD/j6emJl19+GZMmTUKTJk0kyVp0ccedO3di9OjRyM/P13uMjJOTEwoKCpCZmWnSnAUFBejRoweOHz8OIoKfnx9atWoFV1dX7Nu3D0+ePIG9vT1at24tDmS/f/8+oqOjkZmZCTc3NwwcONCi5kOqbAYPHoy9e/fizTffxFdffVVsu2ZCyICAAJw6dcqs2co6hVeSLl26GDlJcVzEWLB169bhtddew4YNGzBu3Dip45RLWFgYMjMzMW/ePKSnp2PIkCEICAiAi4tLqftZws8p1+xhYWHIyMjAggULkJiYiK5du6JHjx7w8fHBjBkzkJKSgm+++QY///wzfv75Z9ja2iI6OhqNGzeWNPfTni5iirp37x6+//57hIeH4/r16wAKx888//zzOHPmjNmzPr1CdWRkJF5++WXk5+dj+PDh2LJlS6njMhwdHcVCzdTS09Mxffp0hIWFidM0EFG5Bmnq+p2YW1RUlNEeyxwLFOprzZo1eP311yEIAiZPnowpU6agdu3auHfvHjZv3ozPPvsMubm5CA0NxYcffih1XIvBRYyFGzZsGA4dOoTdu3db7OBGXYoOeBQEQe+5DaR+gwTkm13f3IIgwMHBAWFhYRg8eLA5I+qltCKmqHPnzmH16tXYtGmTZB+uTxcxgHYh8+KLL2Lr1q06e1KvX7+OJk2awN/fH7du3TJb5oSEBBw6dAh///03kpOTkZ2dXa79y1pF2tSMtegmIP3fbFFZWVl47rnn8N9//+ncLggCvLy88Pfff8PDw8PM6SwXT3ZnwUJDQ9G4cWNERUWhR48eaN++vV49AvPnzzdTwpLVrl1bkkmZjEGu2UvLrSlc/Pz80KlTJ0ycOBE+Pj5mTmg8UVFRCAsLw65du6SOUszw4cMhCAJefvll7N27F506dUJkZCTq1Kmj1e79998HEZl9OQVvb2+8/PLLZj2mMVnS5b3GZGdnh/3792PgwIH4559/im2vWbMmdu/ezQXMU7gnxoJpvnFo/mjl0iPAWEWU1BPz33//ITw8HOHh4YiJiRH/Ltq1a4eJEyciJCTE7Fl19cRo/PDDDxg1ahRyc3Nhb2+P1157DUFBQcjOzsaGDRvw66+/gohw+PBhBAUFmT07s0xqtRr79u3DH3/8gSdPnsDZ2RnPP/88XnzxRckWXDT0FJ45TtdxEWPBunfvblCPwJEjR0yQhjHzKFrEJCUlYceOHQgLCxMHM2pmYR0zZgxCQkIkXdyytCIGAA4fPozRo0cjMTGx2N+yIAiYMGEC1q1bZ46ospSSkgKFQgEnJyepo1Rphp7CM8cXai5imEU4ffo0cnNzLWqgnb7knN0Spaenw8XFRZzwLjs7G4IgQKlUonfv3ggJCcGAAQMsYiIzKysreHl5lVjEAMCDBw8wZ84cbNu2Dbm5uQAKB/S+/fbbWLBgQaU9PWIMSqUS7u7uePTokdRRTC4/P1+cqNLd3R1WVpYz2kPfWZKfVlBQYII02riIYRZBypkoK0rO2S2FWq1GVFQUduzYgd27d+PRo0fih/uzzz6LCRMmYPz48RY3jic8PBx2dnYYPnx4mW3T09Pxzz//QKlUolGjRpKdGtB4eoyOoYgId+7cMcpjPc3FxQVpaWl4+PAhPD09TXIMKf31119YvXo1Dh8+jH///VdrW/369dGtWze88cYbaNq0qUQJ9ZORkYGzZ89i0aJFuHDhAnbt2qW12KgpcRFTiezYsQNZWVmSX+qrkZycjF27duHKlStITU0t9UNeV/ZBgwbhxRdfNEfUYuSY3ZDVhS1h3o833ngDu3fvxsOHDwEUnmaxs7PDsGHDEBISgs6dO0uar7LS99t1WZdhm/LKsB49euDIkSPo2LEjXnnlFdSoUcPgHgpNT+m5c+fES9ql6j3NzMzEG2+8IS4IWdLzq/n9jB8/HqtWrZLF0jNDhgzBoUOHcOHCBTz77LMmPx4XMZWIJfUI/PPPP+jcubNB3cCay4Pnz58vyZVWcs1edCC4Pn/WmnZSv16KnhZ6/vnnERISglGjRpW5ng+rmNJWVAaAtLQ0nDlzBjt37oSdnR0WLlxY4tiU4OBgU0REVFQUevXqhby8vAo/luZ13rhxY3GOISle+9nZ2QgMDMS5c+cgCAIEQUDLli3RqlUr8cqjx48f4+LFi7h48SLUajWICG3btsWxY8csfuLTf//9Fw0bNsS4cePMcjm+5Zx0YzrdvHkTYWFhevUIaM6nFr3SYfz48ZL0zISGhiIxMRHu7u7o3LkzXF1dS/02t337dmRlZWH8+PHifS1atDB9UB3kmn38+PGlFi9paWk4f/487t69CxcXFwwaNMh84Urh5eWFl19+GSEhIRY38V5lpk/hMWXKFHz44Yfo3r07Nm/ejBMnTsDa2toM6QoFBgbi5MmT+Pzzz3Hq1CkkJCSI44oMpSkcpPLqq6/i/PnzEAQB48ePx7x58+Dv76+zbUxMDD766CNs3LgRZ8+exeTJkyXvOS1LvXr14OTkhEOHDpnngEZYuoCZyJkzZ8jOzo4EQSjXehVF/71gwQJJstesWZMEQaDr16/r1f7ptX2kJOfs+ti6dSs5ODjQ+PHjpY5CRCS7hTbLcubMGVq0aBGNGTOG+vbtS3379qUxY8bQ4sWL6cyZM1LHM8hPP/1ECoWCPvvsM6mjyNqFCxfE9+byLKa5du1a8X394sWLpgtoBHl5eWRjY0O2trZmOR73xFiwxYsXIycnB/Xq1UO/fv3K7BFYtmwZ0tPTtU5jmGtw1dM0A/EaNGggyfErQs7Z9fHSSy8hIyMDr7zyCgIDA7V6kKRgSVdhVMSRI0cwc+ZMXLx4sdR2rVq1wtKlS2U1N0zfvn1hbW2NiIgIzJw5U+o4shUWFgYAGDNmDF555RW995s0aRJOnDiBzZs3Y9OmTfjiiy9MlLDi9uzZg/z8fPj6+prleDwmxoL5+vri4cOHuHv3rl4vCEsaE6NUKlGrVi3cvn1br/ac3bxycnLg7OyMVq1a4fTp05JmiYmJMcrjlNQlbw5Lly7FnDlzoFarxS8aNjY2cHNzAwAkJSWJp0GICAqFAkuWLMGMGTMky1xeLi4uKCgoQHp6utRRZKt58+a4fPkyzp8/j1atWpVr3wsXLuD5559Hs2bNcOnSJdMENFBBQQHi4uKwd+9efPDBB0hLS8OkSZOwZs0akx+7cnwFqqQeP34MLy8vs1W0xlTec86WNFeGnLPry9bWFnZ2drh27ZrUUVC3bl2jLPMgVREZERGB9957D0Dh+J4pU6Zg6NChxVbWvnr1Knbv3o2VK1fi0aNHmDlzJnx8fGSxBMC///6L9PR0i5t0LiMjA6mpqfDy8pJFj979+/dhbW1d7gIGKOzBs7a2xr1790yQrHRlrcZelCAIqFGjBhYsWGC6QEWZ5aQVM4hCoaDatWvr3d6SxmZERUWV6/z/6dOnKSoqyoSJ9Cfn7Pr6559/SKFQkJubm9RRSKlU6j3mq7SxYFJITk4md3d3EgSBevToQY8fPy5zn8ePH1PPnj1JoVCQh4cHpaSkmCGp4R49ekQdOnQgQRCoW7duUschIqLo6Gjq3Lmz+Lu3s7Oj0aNH08OHD7Xa3bt3j+7cuUNqtVqipNpsbW3J3d3d4P3d3d3NNtakKH3/Rh0cHGjcuHEUFxdntmx8OsmCWVlZoWbNmnqf1qhRowbi4+NldVqDmd+tW7fw0ksv4fz58+jevTt+++03SfMcP3683PsQkbgI5J07dyS7VHzFihWYOXMmGjRogAsXLuh9+Wt2djbatGmDq1evYunSpZKcViprXqH8/HzExcXh9OnT4qzJ+/fvR+/evc2UULfr16+jbdu2SE9P1+oFJSI0bdoU0dHR4hVUwcHBiIiIwKFDh9CtWzepIotq1KiBBw8eICMjo9yXSmdnZ8PR0RHe3t64f/++iRLqVtbfqLW1Ndzd3VGvXr1y9doYg+X3v1Vht27dKlcX6dmzZ80yzXN5xcXFYdeuXTh//rw4oVm1atXQpk0bDB061KJPl8kpe1kDRfPz85GQkICbN29CEARYWVlh3rx5ZkpXsi5duujdNjY2Fps2bcKmTZtw+/ZtCIIAhUKBnj17mjBhyfbv3w8iwsKFC8v1oaRSqbBw4UIMHz4cv/zyiyRFTHh4eKnzChUtEJycnPDll19KXsAAhVMgZGRkwM/PDytWrEDz5s1x6dIlTJkyBVeuXMH69esxefJkAIWD2L///nvs2bPHIoqYhg0bIj4+Hvv378eQIUPKte+BAwdARGjUqJGJ0pWsPH+j5sY9Mcxk8vLy8P777+PLL79Efn4+gP+9MWpedlZWVnjrrbewePFis84/URY5Ztd3LSEiQu3atbFy5Ur069fPxKkqLicnBz/88AM2bNiAI0eOiINn69Wrh/HjxyM4OFiyYtLPzw/x8fFIT08v92yqWVlZcHR0RPXq1SUZ5xASElLqWCTNt+vnnnsO/fv3t5jxMN7e3nj06FGx1b/Dw8MxYcIE9OjRA7/++iuAwpm3PTw80LZtW8kHsAPA8uXLMWvWLDRq1AjR0dGwtbXVa7+cnBy0adMGf//9t2Q9d5aKixiZOHfuHLZt26azR2DkyJFo27atxAmLGzVqFLZv3w5BEKBSqdCmTRv4+fkBKBzgdu7cOWRnZ4OIMGLECGzbtk3ixP8jx+wLFy4sdXtaWhrOnTuHEydOYMqUKVi2bJnk6/eU5vz589i4cSO2bt2K5ORkCIIAR0dHDB8+HBMmTEDHjh2ljgg7OzvY29vj8ePHBu3v4eGBjIwMZGdnGzlZ5aVSqSAIAjIzM7V6ix4+fIjq1avDx8dH63SLi4sLnJ2dERsbK0VcLSkpKahbty6SkpLQo0cPbNu2De7u7qXu8+TJE4wePRq//fYbXF1dcevWLbi4uJgpccliYmLw4MEDKJVK+Pr6StcrbbbRN8wgKSkpNGzYMBIEQeekd5r7hw4dalEDBHfv3i1m/OCDDyg1NbVYm7S0NJo7dy4plUoSBIF27dolQdLi5JxdH6dOnSJPT0/q1asX5efnSx1Hy6NHj2jFihXUtGlTrdd7YGAgbdq0iTIyMqSOqKWiAy0rOtCzKvLz8yNnZ2ed2+zt7Yv9Ptzc3MjGxsYc0fSyefNm8b27WrVqtGDBArp8+bLW4GO1Wk1XrlyhhQsXkre3t/g+HxERIWFyovT0dAoNDSU/Pz8xk+ZWu3ZtWrhwodn/RrmIsWBqtZqCgoLEN/OaNWtScHAwvf/++/T+++/TuHHjqFatWuIfRNeuXamgoEDq2ERE9MILL5AgCDR//vwy2y5YsIAUCgX179/f9MH0IOfs+tq1axcpFAr66quvpI6iZebMmeKbYq1atWju3Ln033//SR2rRM899xwJgmDQLKoXL14khUJBzz33nPGDmcC0adNo3LhxUsegUaNGkSAIdPny5WLbqlWrpnWlWkZGhngVmCVZtmwZWVlZaRUBtra25OPjQz4+PmRra6v1xdXKyoo+//xzSTPHx8eLr/fSrhJs2LAh3blzx2y5uIixYBs3biSFQkG2tra0du3aEtutW7eOVCoVCYJA69evN2PCknl7e5NSqaTk5OQy26akpJCVlRV5e3ubIVnZ5JxdX/n5+aRSqahVq1ZSR9Eyc+ZM8TU/e/Zs+vfff6WOVKpp06aRIAgGLeEwYcIEEgSBpk2bZvxgJmApUzhER0eTjY0N9ezZs1hP4tMZw8LCxJ48SxMVFUVt27Yt87LlgIAAyadwUKvV4mX29vb2NHXqVDp48KA4VYOXlxf99NNP1K1bN1IoFNSkSRPKzc01SzYuYixYt27dSBAEWrlyZZltV61aRQqFwmLmcbCxsSlXN7mHh4fFdPnKOXt5ODk5ldgtL5VffvmFWrZsqXWqtGPHjrR+/XpKT0+XOl4x0dHR4ofNunXr9N5v/fr14twb0dHRJkxYuoiICOrUqRO5urpqPecl3Z5uI9XabBEREWRnZ0cdO3akY8eOiT3QRYuY6Oho8bTH6tWrJcmpj3PnztGSJUsoODiYXnjhBXrhhRcoODiYPvvsMzp37pzU8YiIaPv27aRQKMjV1ZUuXbqktU2hUJCPjw8RERUUFFD37t1JEARatWqVWbJxEWPBPDw8yNramjIzM8tsm5WVRdbW1uTp6WmGZGUrT29GcnKyRfVmyDm7vjQL0bm4uEgdRacLFy7QW2+9RR4eHuIHp6OjI40fP55OnDghdTwtY8eOFTNOnDiRbt++XWLbO3fuUEhIiFgESHl65vvvvy+2aGx5FphVKBSSFDG1a9em2rVrk5OTk/g82tnZUc2aNcUxappxJJpemMq2yKi5DRo0qMQv1EWLGCKiEydOkEKhoKCgILNk4yLGgpV30J9Usznq0r9/fxIEgebOnVtm27lz51rUuBI5Zy9LQUEBHTlyhJ599lkSBIH69esndaRS5ebmUmRkJPXr14+srKzED9J69erRJ598Qvfv35c6ImVmZlJAQIDWh3zr1q1p0qRJ9N5779F7771HkyZNojZt2ogfsgqFgtq3b09ZWVmS5e7SpQsJgkDDhw+nPXv20LFjxygqKkrn7fjx4+Th4UGCIGjdHxMTY/bc+s4e6+TkRDNmzKDs7GyzZzSVtm3bkr+/v9mP6+fnRwqFQueM1E8XMbm5uaRUKs32hZovsbZgmjko4uLi4O3tXWrbhw8fwtfXFz4+PpLMOfG0H3/8EYMHDwYR4d1338UHH3xQ7LLA5ORkfPzxx1ixYgUAYPfu3Rg0aJAEabXJNXudOnVK3Z6fn4/ExETk5ORAEATY29vj+PHjaNmypZkSVkx8fDzCwsKwceNG3Lx5E0Dh3D29evXChAkTMHz4cMmyZWdn480338TGjRsBoMT5VwRBgCAImDBhAlauXKn3PCGm4O7ujoyMDCQnJ+s1x42lLHQaHh5e4jZBEODg4AA/Pz+0aNHCoqcQMIRUvwM7OzvY2dnhyZMnxbYplUpUq1YN8fHx4n2a11ZOTo7pw5mlVGIGGTFiBAmCQJMmTSqz7aRJk8RvVZZizJgx4rdTlUpFnTp1opdeeoleeukl6tSpkzgYWaFQ0OjRo6WOq0WO2cuzBlHnzp3pwoULUkc22IkTJ2jixInk5OQk6dpJT7ty5QpNmTKFGjVqpPV8K5VKaty4MU2ZMoX+/vtvqWMSEZGVlRX5+fnp3d5SBvZWZVL9Duzt7Us89fx0T0xqamqx+0yJlx2wYG+++SZ27tyJ9evXIyUlBR999BEaNGig1eb69ev48MMPsWvXLgDAlClTpIiq06ZNm1CrVi0sX74cubm5OHXqlPgNVTNJlY2NDaZPn46PPvpIyqjFyDH7hg0bSt1ubW0NNzc3PPfccxa1XEJZPUilUalUyMjIMGKaimnSpAlWrlwJoHBVbc03V3d3d7OvKVMWtVoti5WfmfR8fHxw+/ZtpKSklDnRnuZ9KCAgwBzReMZeS/fee+9h6dKl4gdojRo1xJlj7927J85MKQgC3n33XSxZskSyrCVJSEjArl27cO7cuWKzDQ8bNqzMU2VSknN2udB3uYTSkEQLQL766quYOHEi2rVrZ/ZjV9QzzzwDX19fnDhxQq/27dq1w8OHD3Hr1i0TJ2Mlkep00qBBg/Djjz9i//796NOnj9a2oqeT9u7di+DgYKSlpelsawpcxMjA2rVrMXfuXCQmJurc7unpiY8++givvvqqmZMxVnFlLZegLykWs1QqlSAiNG7cGBMnTkRwcDA8PT3NnqMqiYmJMWg/f39/IycxP6mKmJUrV2LatGl4+eWXi41JUiqV4pIgqampEAQBkydPxqpVq8ySjYsYmcjNzcWhQ4d09gj07Nmz0g1gY0wOPDw8kJycDKCwN8ja2hoDBgzApEmT0Lt3b621fZhxGHpaTuoByQAQFhZWof3ffvttpKSkmP1nSUhIQGBgIKysrHDixAm4ubmJ24r2pHp6emLu3LmYOnWq2bJxEcNM4sGDB/juu++gUCgwe/bsYkVWSkoKzp49i+TkZAQEBKBWrVoSJS1OrtkN/YaqS2X41moO+fn5OHjwICIjI7F3716kpKSIp379/Pwwbtw4TJw4sULjfkzp7t27mDt3Ln755RekpKSgZs2aGDlyJObOnVvuVbnNxcrKqtTVt0tSUFBggjTlo+m5M5QgCJKdOi1JeHg47O3t4e/vj9atW5t/7JdZhg+zKmfdunUkCAL17du32LZDhw6Rl5eXOFGVUqmk0NBQCVLqJtfsZc22Wp6bOb3yyit0+vRpsx7TFPLy8uiHH37Qmi9G89+goCCKiIiwqDlL7t+/L17t8vSEdkFBQVoLEr744oskCAL98ccfEiYuFBMTU+Lt1q1b9Mcff9CKFSuoTp065OTkRFu2bJFkPhtdynMFYWkTDrL/4Z4YmXnw4AGOHj2Kq1ev4vHjxwAKu7QbN26MoKAg+Pj4SJyw0JgxY7BlyxaEh4djzJgx4v1ZWVmoU6eOOK+Nk5MT/vnnHxARDhw4gN69e0uYupBcsxv6DVUXc35rrUzjSjIzM+Hk5AQiwvr167F582YcP34cVDixKFxdXTFq1ChMmjRJ8vl5Xn31Vaxfvx5OTk6YO3cumjdvjkuXLiE0NBSZmZmIiIjA6NGjAQC7du3CiBEjLPbiAV0yMzPRs2dPXL58GZcuXULdunWljoS7d+8avK8gCGjTpg0ePXpkUT0xkpOsfGLlcv36dRo2bFip65soFAoaOnQoXb9+Xeq44mqn9+7d07o/IiKCFAoFNW3aVFyyXbPo3+DBg6WIWoxcs5f2DbW8N3Nyd3fX+pZpY2NDQ4cOpQMHDmj1BsiBZtXkot+WY2Ji6JNPPqH69etr/f22aNGCvv76a0pKSpIkq2Zdod27d2vd/9VXX5FCoaCBAweK9yUkJIjzC8mJZnmNV155ReooRmEJc/WcOXOGpk+fTl26dKGGDRtSw4YNqUuXLjR9+nQ6e/as2fNwESMDe/bsIUdHR73WONGsMfPDDz9ImtnLy4vs7e2L3a9ZubfoGhzx8fGkUCjKNfGWKck5uxzl5eXRzz//TOPHjyc3NzetD/qaNWvS3Llz6datW1LH1IuuIqao06dP0xtvvKG1JpRKpTJzykI2NjZkbW1dbCXo2NhYUigUVKtWLa37HR0dJZnyvqIcHR2pTp06UscwCimLmMePH4unFXV9FmnuHzx4MD158sRsufh0koU7e/YsAgMDkZOTA0dHR4wdOxYDBw5EixYt4O7uDgB48uQJLl26hJ9++gnh4eHIyMiAtbU1oqKizDbh0NNsbW3h5ORU7LLwhg0b4p9//sG1a9e0Ju5zcnJCbm6ueaapLoOcs8tdfn4+9u3bh6FDh4KIxIGMgiAgMDAQISEhGDZsmKTT9Zem6Omk0rr8c3NzMWvWLHz99deSDdT09fVFVlYWkpKSim2zs7ODIAjIzMwU7/P09ERGRgaysrLMGbPCnJ2dkZubi+zsbKmjVJhUl1hnZ2ejQ4cOuHTpEgRBQK1atRAYGIgaNWoAAO7fv49jx44hNjYWRIQWLVrg1KlTUKlUpg9ntnKJGaRRo0Zi1/OdO3fKbH/nzh1q2bIlKRQKatCggWTd8Z6enqRQKCgnJ0e8Ly4uTlzO/WnOzs7k7OxszoglknP2yqBob8aGDRsoKChIHBApCAK5ubnRG2+8YZHLJpTVE3Pr1i1asGAB1a1bV2vwrxQ036p19XJ5enpq5crOzi7x9W/J/v33X6pbty7Vrl1b6ihGIVVPzEcffUQKhYLs7OwoLCysxHabNm0iOzs7EgSBPvroI7Nk4yLGgmmudPD09KS4uDi993vw4IF4BY1Up5UCAwNJEATavn27eN/SpUuLnWsn+t9aG3Xr1jV3TJ3knL0ykNO4kqfpyp6amkrr1q2jLl26aF2xVKNGDXr//ffp5s2bkmQ9dOgQKRQKGjVqVLFtT39Y7tmzhxQKBbVr186cEdlTpCpiGjduTIIg0Nq1a8tsu3btWlIoFNS4cWMzJOMixqJNnDiRBEGgjz/+uNz7Llq0iBQKBU2cONEEycr29ddfi9/cPvnkE5o7dy7Z29uTIAgUERGh1fb3338nhUJBvXr1kiTr0+ScvTKQ07iSpxXN/uuvv9Lo0aPF145CoSAbGxsaMmQI7du3zyIGLX/66aekVCpp5MiRWj29RT8s4+LixB7hJUuWSBVVdOvWLRo/fjy98sorWr2lGv/99x+tWbOGPvvsMzp58qQECU1n+fLlkkzpYGdnRzY2Njqf76fl5OSQjY0N2dnZmSEZFzEWTVP9GrLq7dWrV81aDT8tJyeHmjZtqvWtWXNlT15enlbbN998kxQKBS1btkySrE+Tc/bKoKwiRiMnJ4emTZtmUXNnnD9/vtjrRvN3uGzZMnr48KHUEUVdu3alrl27koeHh5i3Xr161LlzZ7K1tSVBECggIIBUKhUpFApq0qQJpaenSx2bVq5cSQqFgkaMGFFs25YtW8TTGZrbhAkTJEhZuVSrVo3c3Nz0bu/u7k7VqlUzYaL/4SLGgnl4eJCVlZXB+1tbW5OHh4cRE5VPQkICjRkzhlxdXcnZ2ZmGDh2q87TYhQsXKCoqymJOCRDJO7vcyWlcCRHR5cuXad68eWJvhaZwcXZ2pkmTJlnsRH5FT22VdlMqlTR06FB69OiR1JGJiGjo0KEkCALt2rVL6/6kpCRydnYmQRCodevW1KdPH7KysiJBEGjbtm0Spa0cXnjhBRIEQa/pF+7evUsKhYL69etnhmR8dZJFs7W1hbOzMx49eqRz+40bN2BlZYVnnnlG53YvLy+kpKQgNzfXlDEZMypdV/ikpaVhx44dCA8Px8mTJ8UrlqpXry5O7V/S34EpNWnSBNeuXQMAcZ2kDh06ICQkBCNGjIC9vb3ZM+mrtIU3BUGAg4MD/Pz80KFDB/j5+ZkxWek0z3lCQgK8vLzE+9euXYvJkyejXbt2OHHiBBQKBZYvX45Zs2ahd+/e2L9/v4Sp5e3YsWPo0aMHBg8ejB07dpS4JpharcaIESOwZ88eHDx4EN26dTN9OLOUSswg7u7u5OLiUuJ2hUJB3t7eJW63s7MrVxcgY5ZATuNKNL0V1atXp9mzZ9M///wjaZ6qwN3dnZycnIrdP2rUKBIEgdavXy/el5SUVOb7JNPPt99+S7a2ttSlSxc6ePCg1viY7OxsOnjwIHXu3JlsbGzo22+/NVsu7omxYE2bNsXVq1eRkpICJyenYtuVSiWqVauG+Pj4YtsSExPh7e2Nxo0b4/Lly+aIy5hRREdHo23btuISCppvfQ0bNhSXJSj6DVxKgwYNQkhICF544QXzL3xXRdna2sLBwQFPnjzRur927dq4e/cubt26hdq1a4v3u7i4ICsri3ukK0CzgGliYiIyMjIAFC5z4uHhAQB4/Pgx8vPzAQD29vYl/n0SEe7cuWPUbFZGfTRmVK1atcLVq1fx+++/o0+fPuXa98SJEwAg2fosoaGhRnus+fPnG+2x9CHn7HJ15coVREZGIjIyEtevX4cgCBAEAY6OjhgxYgRCQkLQrl07qWMWs2fPHqkjVDnu7u5ISEhARkYGHBwcAAC3b99GbGwsvLy8tAoYoPAUh6YdM4xmEjvgf18qCgoK8PDhQ7GN5v6srKwS14gyRZ8JFzEWrFevXvj++++xatUqNGrUqFz7bt68GURU7uLHWBYuXGi0F6y5CwE5Z5ejp8eVCIIgm3EllUlmZiaSkpLEb9Ql8ff3N1Mi3Zo3b46DBw9i8+bNmDx5MgBg3bp1AICgoCCttklJScjMzJRkvFRlsmHDBqkjlIhPJ1mwrKwsVK9eHampqSW28fb2LnY66dq1a3juuefg4OCA2NhYnaeiTK179+46C4EnT57g8uXL6NChA6ytrfV6rCNHjhg7XqnknF2OlEolgMLXcnBwMEJCQlCvXj2JU5XPv//+ix07duDPP/8ssxAgIhw7dsx84UqRkZGBJUuWYOvWrfjvv//02kfqFZTDw8MxYcIEWFtbIzg4GFlZWdi6dSvUajX27NmDgQMHim0PHTqE3r17o3///ti7d6+EqZnJmG30DTOIZtK6km4+Pj7F9pk+fTq1b9+evvjiCwkSl+zJkyfUokULEgSBxo4dK3WccpFzdkv34osv0o8//kgFBQVSRzHI/PnzSalU6nW5stSXgxeVnJxMTZs21Tu35iY1tVpNgYGBxebj6dKlS7G2EyZMIIVCQatWrZIgKTMH7omxcLm5ufjjjz9K3G5jY2ORYwWelpSUhO7du4sLiBERZsyYgaVLl0odrUxyzs5Ma8uWLRg7diwAwMPDA71790bNmjXLXPhu3rx55ohXqpkzZ2LFihWwtrbGxIkTMXToUL2y16pVy0wJS5aVlYVFixZh3759UKvV6NmzJxYsWABHR0etdg8ePEBubi58fHxgY2MjUVpmUtLWUKwqSElJoTZt2pAgCOTv70+7du0iFxcXEgSBli9fLnW8Usk5OzO9Dh06kCAINHDgQMrMzJQ6Trk888wzJAgCffPNN1JHYcxg3BPDTCotLQ09e/bE2bNn4efnh2PHjqFu3bo4cuQI+vXrh7y8PERERGDUqFFSRy1Gztnl6vr16zh+/DiuXr2KR48e4fHjx1CpVPDy8oKvry8CAgLQqVMnODs7Sx0VAODs7Iz09HTExsaiRo0aUscpFzs7O+Tl5SE9Pb3M3hdWtWkusa4IMsHl1ZoHZswk0tLSxG+qNWrUKDYR2LZt20ipVJKtrS399ttvEqXUTc7Z5ebatWv09ttvk7e3t9aaN0WXFCh6UyqV1KFDB9q4cSNlZWVJmt3Z2ZlcXV0lzWAob29vngyT6UXfJSqkGAvGPTEWLCwszGiPNW7cOKM9lj4yMzPRu3dv/P7776hevTqOHj2K+vXrF2v35ZdfYvr06XBwcEBUVJRk89oUJefscvLHH3/ggw8+wNGjRwH8b56JatWqoU6dOnB3d4ebmxtycnLw5MkTPHr0CDdu3EBeXh6Awm92rq6umDp1KmbNmiXJXCDt2rXDhQsXkJqaKrvejJEjRyIyMhJ37961qGUF9CXXK8LkKCQkpNRpJ8LCwmBra4uXXnpJ5/bt27cjKyvLNFe2maQ0Ykah61uooTdzCwwMJEEQyMfHh65du1Zq21mzZlnU1OByzi4HMTExNHz4cPGbnZOTE40ZM4Z27NhR5gJzubm5dObMGVq2bBm1bt1a/Bvx8fGhtWvXmukn+J+1a9eSQqGgTZs2mf3YFXXx4kWytbWlkJAQqaOUm1yvCKusSrpSVqN69ercE1MVPfPMM0abdO3WrVtGeRx9KZVKeHh44NixY2jcuHGZ7cePH4/w8HDJ56AA5J1dDhYuXIjQ0FA0adIEs2bNwtChQ2FnZ2fQY127dg2rV6/G2rVrkZ2dLcnvYNiwYTh06BB2795tngXvjGjHjh0YP348hg8fjrlz58pifh45XxFWWZW2BA4A+Pr64sGDByb5++QihplEtWrVcPjwYTRr1kyv9gUFBejfvz8OHDhg4mRlk3N2Odi6dSusra0xbNgwoz1mfHw8Pv74Y6xatcpoj6mP0NBQFBQU4Ntvv8Xjx4/Rvn17BAQEwMXFpdT9LGEmZ13r4bi6upaanUw1OLMcOnbsiNOnT2PAgAHYtm2bwQUwM468vDxx8P2DBw90tqlevToSEhK4iGHy8eeff6J58+bl2iczM9MippiXc3ZmXkqlEkQkjufR9+3UEnrtrKysyt3TS0SSZ5fzFWGV0dWrV9GsWTMoFApkZWXBykp7NaOCggKoVCqoVCqkpaUZ/fi8dhIzifIWAQAspgiQc3ZmXl27djXJonbmYMnr4ZRGEAS4uLhwAWMhVqxYAaCwWDl58iS6du2qtf3333+HWq022eBx7olhjDEmG3K+IqwySU5OxvTp07Fp0yaoVCpkZ2ejadOm2LNnD+rWrQugcHXxQYMG4fLlyxg/frxJCmcuYmQgNTUVP/30k96XEm7atMl84UpgjMmRAGnOwcs5O2OV3bp16/Daa69hw4YNZp86ghUuw/LVV1/hiy++QEpKCry9vbF69WoMGTIERAQrKyvUq1cPgiDgn3/+QX5+PgRBwKlTpxAQEGD0PFzEWLgNGzbg7bffRnp6epltNev6SH3OGjDsfLsuUvw8cs4uRxMmTDDK42zcuNEoj2NKO3bsQFZWliw/fIcNG4bExESLmG9FzleEyVVCQgKWL1+O1atXIz09HYIgoGHDhoiMjETjxo0xffp0fPnllwD+NzZMM1ZswYIF+PDDD02Si4sYC/brr7/ihRdeABHB2toazz//vF6XElrCue7w8HCjPVZwcLDRHksfcs4uR5rBsRUlh4LRlJeaVkRKSgpSU1NLzdW2bVs8evQIt27dEj+cyrqayRTkfEWYXE2dOhXr169HdnY2BEGAs7Mz3nvvPbz99tuwtbUV2/3444/YsGEDbt26BaVSiSZNmiAkJARBQUEmy8ZFjAXr2bMnjhw5goCAAERGRvJANlYpKZVKCIJQ6urIMTExUCgUqFmzZrFtsbGxKCgokKwwuHnzJsLCwnDlypUyC4HTp08jNzcXgYGB4n3jx4+XrGfmk08+werVq3H//n292mt6ezXmz59v9uJAzleEyZVSqQQAODo64q233sK7775r9uK1JHx1kgU7f/68OMaFCxhWmXl5eZU6IaNSqYSnp6fONpreDSmcPXsWXbt2Fb+h6uv48eMACj+An76aw1xWrlwpTgCnb/aixYNU5HxFmFzZ29vj9ddfx3vvvQd3d3ep42jhIsaC5eXlwcnJSee6PYwx6S1evBg5OTmoV68e+vXrB1dX11I/5JctW4b09HSt3gupipjNmzeDiPDWW29hwoQJpWYXBAFt2rTBo0ePcPv2bfF+V1dXM6X9n8OHD5v9mFXdf//9h2rVqkkdQyc+nWTBmjdvjhs3biA9Pb3YBEJycuvWLWzYsAG///47Hjx4AKVSCV9fX3Ts2BHjx4+Hv7+/1BFLJOfsclHWlOVltZFynImvry8ePnyIu3fvwtfXV6/2ljImxsXFBbm5uUhPTxdPF5TGkrIzJjLJikzMKJYuXUqCINCePXukjmKwhQsXkrW1dbGF2jQLU1pZWdHcuXNJrVZLHbUYOWeXk7IWj9O08fLy0rmtWrVqki3wZ2NjU2b2oky5EF55KZVKqlWrlt7tLSk7M7+YmBgaO3YseXl5kY2NDT3zzDP0/vvvU2ZmpqS5uIixYHl5edSxY0eqUaMGXb16Veo45TZ//nyxAKhWrRqNHj2a5syZQwqFghwdHWno0KHk4OBAgiDQW2+9JXVcLXLOLjd2dnbk7Oxc4vbMzEyxgMzLy9Palp+fT0qlkhwdHU0dUyeFQkG1a9fWu70lFQJyzs7M6/79++Lv/+kvdEFBQVpf5F588UUSBIH++OMPs2Tj00kWLCwsDJmZmZg3bx7S09MxZMgQvS4ltIQ5KK5evYrnnnsOarUas2fPRmhoKGxsbABonxq4cuUKevbsiYSEBJw8eRIdOnSQOLm8s8uRv78/YmNjcevWLdSuXbvY9jNnzqBDhw4gIvzyyy/o1auXuO3gwYPo27cvGjVqhCtXrpgxdSErKyvUrFlTa5xIaWrUqIH4+HiLOCXTvXt3VKtWDVu3btWr/fDhw/H48WMcOXLExMn+x1iX5hKRRcxvI1evvvoq1q9fDycnJ8ydOxfNmzfHpUuXEBoaiszMTERERGD06NEAgF27dmHEiBF49913sWTJEtOHM0upxAxS9NRF0X+XdbMEb775JikUCgoODi627enTB6tXryaFQkEvv/yyOSOWSM7Z5Wjw4MEkCAJNmjSp2LaCggIaPHgw2dvbk7e3N9WrV49OnjxJ6enpdPLkSXr22WdJEAR6/fXXJUhe2MV+//59vdvfu3ePYmJiTJiocin6rV/Xrej7Y2n3W8r7olz5+fmRIAi0e/durfu/+uorUigUNHDgQPG+hIQEUigU1LlzZ7Nk454YC/bMM88YdClhaZeqmkvTpk1x9epVXL58GU2aNNHa9vQgzeTkZHh4eKBmzZoWMU2/nLPLkeabG/3/5cajRo2Cn58fYmJisHHjRpw7dw6jRo2Ci4sLvvvuu2J/E0qlEpcuXSr2u2Lld/v2bTx8+BAAUK1aNaMtwWGohQsX6rw/NzcX33zzDVJSUlCrVi0EBgaK01Dcv38fx44dQ2xsLJydnTFlyhTY2NiIl5Oz8rO1tQURISsrS2sQ+L179+Dv7y/+vWo4OTnBw8PDPO+JZimVWJXj7OxM9vb2OrfpGsjp7OxMKpXKHNHKJOfsctW9e/cSexvd3Nzoxo0blJSURM2aNdP6xq1SqWjDhg1SxyciorNnz9L06dOpS5cu1LBhQ2rYsCF16dKFpk+fTmfOnJE6Xonu3btHb7zxBnl4eBR77j08PGjy5MkUGxsrdUxRXl4edenShezs7CgsLKzEdps2bSI7Ozvq3Lkz5ebmmjFh5VO9enVydXXVuU2lUpGdnZ3WfR4eHmZ7T+QihpmEjY0NeXp66tz2dCGQn59P1tbW5OLiYqZ0pZNzdrlKT0+n0aNHFzstUL9+fa0BggUFBfTTTz/RsmXLaPXq1RZxaiYlJYWGDRtW5qmNoUOHUkpKitRxtURFRZGbm5vO3EXzu7m50bFjx6SOS0REn376KQmCQGvXri2z7dq1a0kQBFq8eLEZklVemsG6t27dKrbN09NT63RddnY2KRSKEoseY+PTScwkvL298eTJE2RnZxebg+LpUzLHjx9HUFAQ2rRpgzNnzkgRV4ucs8tdfHw8oqOjkZGRgTp16qBt27ZSRyoVEaF79+44duwYBEFAjRo1EBQUBD8/PwCFpzaOHj2Ke/fugYgQGBiIw4cPQ6FQSJy8cEG/Ro0aiadEX3vtNXTv3l0r++HDh/Htt98iKSkJLi4uuHbtGry9vSXN3bx5c1y/fh2pqala6/bokpubCycnJzRo0AB//fWXmRJWPocPH0avXr0wcuRIbNmyRWvb0/MH7d27F0OGDEHbtm1x+vRp04czS6nEjOKvv/6iDRs20Keffkqffvopbdiwgf766y+pY+nUqVMnEgSBLl26VGxb0d6M9PR0at26NQmCQEuWLDF3TJ3knJ2Z18aNG0mhUJCtrW2pPQPr1q0jlUpFgiDQ+vXrzZiwZDNnziSFQkFNmzalhISEEts9fPiQmjVrRoIg0LvvvmvGhLo5OjqSu7u73u3d3d3JwcHBhImqhk8//ZSUSiWNHDmS7ty5I95f9NL7uLg4atSokVnfE7mIkYF9+/ZRkyZNSrwaqVGjRvTTTz9JHVPL7NmzSRAECg0NLbZNM9fK1KlTqWbNmiQIAjVs2JDS09MlSFqcnLMz8+rWrRsJgkArV64ss+2qVatIoVBQt27dzJCsbJr3lFOnTpXZ9vTp06RQKKhJkyZmSFY6zekvfcbp3Lt3jxQKBbm5uZkhWeXVtWtX6tq1q9a4qXr16lHnzp3J1taWBEGggIAAUqlU4uvEXO+JXMRYuM8//1zrXLuNjQ35+vqSr68v2djYaJ23XrFihdRxRX/88QcpFAqqVatWsUF1mrya7G3atKG7d+9KlLQ4OWdn5uXh4UHW1tZ6zVqalZVF1tbWJY63MjcHB4dyTRLo5ORkET0avXr1IkEQaMSIEaXOlq1Wq2nEiBEkCAL17NnTjAkrn6ff90q6KZVKGjp0KD169Mhs2XhMjAW7dOkS2rRpA7VajS5dumDu3LkIDAyEtbU1gMIFIo8fP46PP/5YXBU3OjoaLVq0kDD1/5w+fRpEhObNm8PBwUG8v3v37rCzs4O/vz969+6NgQMHSphSNzlnt3Tff/89rK2tMXz4cKOtiBwbG4tFixbh22+/Ncrj6UulUsHBwQGPHz/Wq72HhwcyMjKQnZ1t4mRlc3JyAgCkpaXp1d7Z2RlqtRrp6emmjFWmX3/9Ff369RMvyX///ffRpUsXcULKnJwcnDhxQut9cf/+/ejTp4+UsWWtpEvdgcLFQR0cHODn54cOHTqIY6rMxmzlEiu34OBgUigUNHjw4DK/cQwZMoQEQaCxY8eaMSFj5RcaGkqCIFCTJk0oLCysQt3Oly5dosmTJ4td2uZWo0YNUigU9ODBgzLbJiQkkFKppBo1apghWdk0p5NOnjxZZtuTJ09azOkkosJlQYpe+WVtbU0+Pj7k4+Mjrnem6TnQdVqYVR5cxFgwf39/EgSBbt++XWbbmJgYUigU5O/vb/JcjFXE3bt36aWXXhI/hBwcHGjUqFG0bdu2Ml/rWVlZdPLkSVq0aBE1bdpU/KDy8/OTZL4YzekKXbMNP23SpEkkCAINHz7cDMnKNnv2bFIoFNSoUaNSZx2+d++eOFhz1qxZZkxYur179xabN6jorVmzZhY3VpAZH59OsmB2dnaws7PDkydP9Grv7u6OrKwsZGVlmTiZ/lJTU3Hy5EmkpKSgZs2aaN++fbHLli2VnLPLwblz5/D++++La/Fo3oq8vLxQp04duLu7i6/pJ0+eIDExETdu3EB+fj6Awm5sDw8PvPXWW3j33XehUqnM/jOcOHECXbt2BRFh2LBh+Oijj9CgQQOtNtevX8eHH36IXbt2AQCOHj2KwMBAs2d92sOHD9G4cWM8efIErq6ueO2119CjRw/xdMC9e/fw22+/YfXq1UhNTYWbmxuuXbuGatWqSZxc299//43z589rzTTcpk0bnsG5qpC2hmKlcXNzI1tb22Ir9+qSl5dHtra2FjUKf/Xq1eTo6Kh1JZW/v3+xqyH27t1LmzZtknxJ96LknF1ubty4QTNmzKDq1avrtTaOtbU1de3albZs2WIRM7FqejQ0Wf38/Khdu3bUrl07cc0Zzc9gST0ZRES///47eXl5lbo2m0KhIE9PT71OOzFmblzEWLAOHTqQIAgUERFRZtuIiAhSKBTUoUMHMyQr24EDB7RGrPv6+pK1tbV4uWPReSlmzZpFgiDQli1bJEz8P3LOLnc3btygNWvW0DvvvENjxoyhvn370uDBg+nVV1+lBQsW0K+//mqRl7OvWbOGqlWrVuKpjWrVqtF3330ndUyd4uLiaNq0aWIxU/Tm5eVFU6dOpbi4OKljMgnpu/iwFIsRcxFjwTQrhLq4uNDPP/9cYruffvqJXFxcSBAE+uKLL8yYsGTdunUjhUJBgYGB9PDhQyIiio+PFyeHmzdvntj21KlTJa4aLQU5Z2fSycnJoZ9//pkWLFhAb7zxBr3xxhu0YMEC2rdvH+Xk5EgdTy937tyhs2fP0tmzZ7UmNLNUycnJtHbtWho/fjz16dOHXnjhBXrllVdo06ZNlJaWJnW8SkOpVJZ5ebWuXlRz4DExFiwvLw9t27bFX3/9BSJCQECAznPWZ8+ehSAIaNasGc6ePSteaiglFxcXpKWl4caNG6hXr554/8GDB9G3b18EBATg1KlTAIDs7Gw4OjqiWbNmuHjxolSRRXLOzlhVER4ejrfffhvJyckACsdIFf04c3FxwbJlyxASEiJRwspDc6l6SdLS0nDmzBmsWbMGeXl5WLVqFXx9fdGlSxeTZ+MixsI9ePAAI0aMwO+//w4AePrXpZlno0OHDti5c6fk65poODg4QKlUIjU1Vev+jIwMODs7w83NDYmJieL97u7usLKyEgfnSUnO2RmrCtasWYPJkydDEARYW1ujdevW8Pf3x/bt22Fra4vGjRvj4sWLICJ8+umnmDVrltSRq4THjx+ja9euyM7OxsWLF+Ho6GjyY3IRIwNEhL1792LLli04d+5csVH4o0aNwuDBg402cZgx1K9fH/fu3UN6enqxxe5cXFyQmZmJvLw88T4nJyfk5eVZxCRgcs7OmL5iYmIM2s/f39/IScrn7t27aNCgAXJycjBq1CisWLFC/PJWdIHWQ4cOYejQocjIyMCff/7JVyuZiWZR3Dlz5uDjjz82+fG4iGEm8c477+DLL7/EgQMH0Lt3b61t1atXR0JCgrjqaUJCAnx9feHj44P79+9LEVeLnLMz8woNDTXK48yfP98oj1Mehq6krXntS2X27NlYtmwZ+vTpg59//llr29OrzC9ZsgTvv/8+QkJCsGbNGiniVkkODg6oVasWrl27ZvqDmWXkDaty4uPjydvbm5599tliC7UVXfWUiOijjz4ihUJBgwYNMndMneScnZlXaZcmW9pVHE8zZLCmQqGQJGtRLVu2JEEQ6MyZM8W2FV1lnqhwlmSFQkH16tUzZ8Qqz9HRkezs7MxyLCvTl0msKsrJycH69esxYcIEtGjRAlOnTkXPnj3h4/N/7d15XFVl/gfwz7n3siOXPUVCSMs0JXLJH1qKKaGWOqmoDC64To5UOpE1pmKYk1o4qbmNQ65Q6Zg5pYmKCY4rIJiaOomigiKL7Fy2e8/vD1/cEdmXuxz8vF8vX9PrnodzP4wCX57zPN+nPdRqNQDgypUr+Pnnn7Fs2TKIoog//elPBk79kJSzk365u7vXWKfWWMXFxcjOzm72x7fUjRs36r1eWFiI+Ph4rF69GmlpaYiIiEDv3r31lK5uN2/ehJmZGfr27dvgWGdnZ1haWnKWVI8SExNRUlICOzs7vbwfHycZse3btzfr46ZOndrKSZquKVPVgiDg/fffx6pVq3SYqPGknJ2M34kTJ7B161bs2bMHJSUlEEXR4I9o6lNRUYE333wT8fHxSE5Ohpubm0HzmJqaQqlUIisrq8a1xx8niaIIS0tLKBSKRh90Sc136dIljB8/HlevXsUbb7yBH3/8UefvySLGiMnl8mb9lmYM3xAVCkWD2S0tLeHt7Y13330Xb775pp6SNUzK2ck4paWlYfv27di2bRtSUlIgCAJkMhmGDh2KadOmYfz48YaOWK9r166he/fumD59OrZs2WLQLI6OjigsLERpaWmNzQyPFzFJSUno06cPevTogQsXLhgibpswePDgeq9XVlbi7t27uHnzJoCHhWZcXBxefvllnWfj4yQj1tBUdWFhofZcJQsLC6M606S+qeqqo9vt7OyMakdVFSlnJ+NRXl6Offv2YevWrTh69Cg0Gg0EQUCXLl0QFBSEoKAguLi4GDpmo3Tt2hU2NjY4fPiwoaOgc+fOiI+Px7Vr1/D888/XOU6j0WDBggUQRREjR47UY8K2p6E+MVUEQUCnTp3wj3/8Qy8FDMAixqilpKQ0OObGjRtYvnw5oqKisHz5cgQEBOghWcMMPeXcElLOToaXmJiIrVu34ptvvkFubq628B03bhymT5+OV155xdARm6ysrAzFxcVG0UbA29sb8fHxOHDgQK1FjEqlwurVq/HNN98gMTERHTp0wPz58w2QtO1oaPeciYkJ7O3t4enpCW9vbz2leoiPk9qIt99+G1u3bsWpU6eMYvEd0ZMmOjoaCxYswMWLF7WzdAMGDMD06dMxfvx4WFpaGjhh861fvx7vvvsuPDw8cP36dYNmOXbsGHx9fdG1a1dcvny52ozoo4/gBUGAq6sr9u/fDy8vLwOlJV3jTEwbsXjxYmzZsgUrV67E7t27DR2H6IkTExODS5cuwdTUFPPmzcOsWbPQuXNnQ8eqU2xsbL3XKysrcf/+fURHRyMqKgqiKBrFTO9rr72GXbt2QRRFFBQUQKlUaq+5u7vDwsICnTp1gp+fH2bOnCnp4pEaxpmYNsTe3h7m5ua4e/euoaNIemeVlLOT4SxYsADh4eEQRRGurq6YPHkypk+fbrSFTFM2DgiCgFdffRUHDx5kUUBGhUVMG1FaWop27dpBLpcbxXNrKe+sknJ2MpycnBxERkYiIiICly5d0v4beuWVVzBt2jRMmDDBqAqAxuzCAx5uU160aBFCQ0Mhl8v1kIyMlVqtxt69e/Hdd98hISGhxhE4EydOxNixY5vdDbo5WMS0ERs3bkRwcDDc3d0btSBY1zp37lznN0i1Wo2cnByoVCoAgJmZGdq3bw+g4QZc+iDl7GQczp8/j23btiEqKgq5ubkQRRHW1tbw9/fH9OnTMWDAAENHbFBxcTHi4+OxcuVKnDlzBrt27cIbb7xh6FhkIDdv3oS/vz/Onz8PADV2Z1Z9z+zduzf27NkDd3d3veRiEWPEGjqgrWpv/v79+7Fu3TpUVFRg/vz5CA8P11PCljl//jxWrFiBffv2ITw8HO+++66hIzWalLOT/pSXl2P//v34+uuvtdusRVHEc889h6CgIEydOhUdOnQwdMwGBQYGYv/+/Thz5gx69Ohh0CzNPa/KEOdTtRV5eXnw8vLC7du3IQgCXnnlFQwePBgdO3YEAKSnp+PYsWM4efIkRFGEm5sbkpOTYWtrq/twOjvQgFqsKWevyGQysWfPnmJubq6hYzfZjBkzRJlMJh47dszQUZpMytlJv9LS0sTly5eLXbp00Z65pFAoxBEjRhg6WoPu3LkjymQyMTAw0NBRmn1eFTVfSEiIKJPJRAcHBzE2NrbOcb/88ovo4OAgCoIghoSE6CUbZ2KMWGOfWXfp0gUBAQFYsGCBUT1zb6z09HS4ublh5MiR+OGHHwwdp0mknJ1arqEdPnWJi4vDtm3bkJqaavTHDlSxt7eHtbU1bt++bdAcQ4YMqfdxb2ZmJq5fvw6NRgMrKyv06dMHwMOt2dQ8Xbp0wY0bN/Cvf/0LY8aMqXfs999/D39/f71tx2cRY8Qa+mZhYmICOzs7mJub6ymR7hjTzqqmknJ2apnmLgJ/nLEXMSUlJbCxsYGJiYl2PZgxy87OxqpVqxAeHo758+fjiy++MHQkSbOwsADwcJ1UQ4t2q4pHAHr5t8I+MUbsSekcK4oiSkpKUFBQYOgoTSbl7NRyrXH0hBR+j1yxYgVEUcTTTz9t6CiN4ujoiFWrVsHExASfffYZvL29MXbsWEPHkiw7OzuoVKpG7TqSyWQwNzfXFj66xiKGDC41NRWBgYGS+Gb+OClnp5aT8o60hvohPdrs7sSJEwCk1wvpL3/5C1auXInNmzeziGmBgQMHYvfu3bhy5Qq6detW79irV6+ioKAAvr6+esnGx0lERE+gxj4Kq5ptmjBhAnbs2AGFQlq/+zo6OkIul+P+/fuGjiJZycnJ8Pb2Rr9+/XDo0KE6lzCoVCoMHz4cZ8+excmTJ9GrVy+dZ2MRIxFFRUU4deoUfvvtN2RlZSEnJwfm5uZwcnKCi4sL+vXrh+7duxs6plZztkGKooilS5e2fpgmknJ2osaqrx8S8L81d56enpg4cSJee+01PaZrHRUVFbCysoJarYZarTZ0HEn76aefMHXqVDg6OiIkJARDhgzRbrFOS0vDsWPHsGrVKuTk5GD79u16OzmcRYwRy8vLw/bt27WnsTb0Rejg4IDXX38ds2fPxqBBg/SUsnZS7nor5exE9D937tzBtm3bIIoilixZYug4ktWaHXhb+/skixgjdOvWLYSFheGbb75BaWmpdjpXJpPByckJ9vb2sLOzQ1lZGR48eIDs7GwUFhZqP14URXTt2hULFixAUFBQqyw+bKr6tkECQGFhIS5fvoyysjIolUrtKbPGsA1SytmJqLrMzExERUVh3rx5ho4iWY1t99EQXbQTYBFjRPLz87F8+XKsW7cO5eXlAID+/ftj1KhR6NevH/r06VNnH5jU1FScO3cOJ06cwJ49e5CVlQVRFOHp6Ynw8HAMGTJEn59Ko5SUlCA8PBxhYWH47LPPEBISYuhIjSbl7NR6PDw8WnwPURSRmpra8jCkVVpaiv3792PHjh04fPgw1Go1Z0pbIC4urtXuNXDgwFa7FwB27DUmYWFhokwmE5966ilx2bJlYmpqarPuo1arxZ9//lkcNWqUtrulMVu0aJEok8nEo0ePGjpKk0k5O7Vc1deXTCZr9h9j//qUktjYWHHGjBmiUqms9vfSvn17Q0cjHeFMjBHZuHEjiouLMXfu3FbbY5+YmIglS5bgwIEDrXI/XXjw4AGcnZ3h5+dn1DlrI+Xs1HJV66cCAgJgZmbW7Pt8/fXXrZiqcaZNm9Yq9xFFEdu2bWuVezXH77//jh07dmDXrl3a8+YEQYC5uTlGjx6NyZMnw8/PT68nK5P+sIgho+Dg4AC5XK492l1KpJydWqaqiMnKyoKDg4Oh4zRJVXZBEJq93qHqY/X9qObBgwf49ttvsXPnTpw9e1abRRAEDBw4EJMnT4a/vz+sra31mutJUlFRgQcPHgB42LXcxMTEIDmkteGf2qSioiLk5+cb7IugJaScnZ5sQUFBkmzSOHbsWBw4cADl5eXawqVr166YPHkyJk2aJJmuwlJUVFSEjRs34ttvv8Wvv/6q3TErl8vh6emJ8ePHY+7cuXotHlnEkMGFh4dDFMVWWSSpb1LOTk+2iIgIQ0dolh9++AGiKMLJyQkTJ07ElClT0Lt3b0PHavMuX76MUaNG4ebNm9odr1X/q9FokJycjKSkJGzevBk//vgjXnjhBb3kYhFDOtHQ6b6VlZW4e/cu9u/fj++//x4AMHHiRH1Ea5CUsxM9KSwtLWFjY4N27doZOkqbV1hYiOHDhyMtLQ2mpqYYN24chgwZAldXVwBAeno6YmJisGfPHqSmpmLYsGG4fPkybGxsdJ6Na2KMWHM6x9YmNDS0Ve7TFE1pGCcIAgYPHowDBw60aHFka5FydtIvKa+Jkarhw4fj6NGj0Gg02q/Tvn37YtKkSQgICICjo6OBE7Y9y5Ytw9KlS9GxY0ccOnSozu7wV65cgZ+fH9LS0rB06VK9NBhkEWPEmts59nGG6I/QUHMkhUIBe3t7eHp6IiAgAFOnTjVIU77aSDk76ReLGMPIyMhAZGQkduzYgUuXLgF4uEtKoVDAz88PU6ZMwahRo/iLRSvp3bs3kpKScPDgQQwbNqzesdHR0RgxYgS8vLyQmJio82wsYozYo7sHmssQOweInhQsYgzvwoUL2LlzJ6KiorSHPIqiCKVSibFjx2LKlCmt32DtCaNUKlFRUYHi4uJG/TyysrKCQqFAfn6+zrOxiDFicrkczs7OuHfvXrPGuLi4ICMjg0UMkY4oFApoNBoWMUZAo9Hg8OHD2LlzJ3744QeUlpZqZ1Td3NzYFbkFLC0tYWpqiry8vEaNt7W1RXl5OUpKSnQbDAC7/xARNdPq1avx5Zdfsh+JEZDJZBg2bBgiIyORkZGBiIgI+Pj4QCaT4fbt24aOJ2murq4oKCjAxYsXGxx78eJFFBYWahf96hp3JxERNdO7775r6AhUi3bt2iEoKAhBQUG4ffs2du7caehIkvb6668jJSUFb7/9Ng4fPgwrK6taxxUVFeHtt9+GKIoYOnSoXrJxJqYNqOtxER8jNY9cLodMJsP69eub9HFxcXHw8PDAs88+i+LiYh2lI6KmcHNzw8cff2zoGJL2/vvvw8zMDKdPn4anpyc2bdqElJQUlJWVoaysDCkpKdi0aRM8PT1x+vRpmJmZ4YMPPtBLNq6JMWLm5uawsLBAbm5urdfLy8thYWEBmUyGsrKyameDiKIIMzMzmJiY8AdqE8nlcgAP/z9cs2YN3nnnnUZ/rKenJy5duoRvv/0W48eP11VEIiK92rdvHwIDA1FWVlbn7k1BEGBmZoZdu3ZhzJgxesnFx0lGzMHBAffu3cP9+/fx1FNP1bh+9epVAIBarcbZs2fh7e2tvXbmzBmo1Wq4u7vrK26bUrUr7L333gOARhcy06ZNQ0hICI4cOcIihkgHGmpGWZdBgwYBAOLj47ULTqteo4a99dZbOHv2LBYvXowDBw7UmOmXyWQYPnw4li9fjp49e+otF2dijNiIESNw6NAhLFy4EJ9++mmN67Nnz8b27dthaWmJ5557Dt9//z06duyI9PR0vPXWW0hISMCUKVMMesKsFFXt+AoICMCaNWuaNCNz9epVvPDCC+jZsyeSk5N1H5boCdPc/llVP3S7d++u/QWQj9ybp7CwEOfPn9ceeuvs7IxevXoZpHsyixgjtnXrVsycOROiKGLKlCkIDAyEq6srbt26hS1btmDfvn0YOXIklEolIiMjIYoiHBwckJOTo73HyZMnq83QUMMe3bY+f/58rF27FqIoYu3atQgODm7w4y0sLGBiYoKCggI9pCV6sjTUjLIuVYcVvvDCC9VmsUnaWMQYscrKSvTt2xe//vprrV+0ZmZmiIuLQ/v27dGvXz9to6cqoaGhemn73NY83ntn3rx5WLduXaNnZGxtbaFSqVBWVqaPuERETyyuiTFiCoUCP//8M8aNG4fTp09Xu6ZUKrFt2zb07dsXwMPHGDt27MC1a9dgbW2N0aNH4//+7/8MEbvN+fLLLyGKIr766iu89957KC8vx/vvv1/r2MzMTBQWFsLZ2VnPKYmInjwsYoxc+/bt8Z///AdnzpxBQkICiouL4eHhgREjRlRrsGVjY9OoRx3UPGvWrIEgCFi3bh0++OADpKSkYO3atVAoqn8JffnllwAALy8v/YckItKBR3e+NoU+1hzxcRLRY+o7yiEkJAR///vfIYoiPD09sWzZMgwePBilpaWIiIjA4sWLUVlZia1bt2Lq1KkGSE/UtpWUlCA+Ph4A0L9/f5iYmNQYU1paisLCQjg5Oek7XpvUnHVI+jq3j0UM0WMaOrMqLCwMYWFhtX6BCoKAPn364NSpU9p+M0TUevbu3Qt/f3/07NkTFy5cqHbtzp07mDlzJmJiYqDRaPDMM89g48aN8PX1NVDatiEuLq7e64WFhTh37hy2bNmC0tJSrFmzBp06ddLLwZssYoge05iDN48cOYLg4GBcv3692uuvvvoq9u7dy8MAiXQkODgYGzZswOrVqzFv3rxq13r16oXk5ORqJy2bmpoiOTkZXbt21XPSJ09eXh6GDh2K+/fv48KFC7C3t9f5e/LYASNy4MABnDt3rlXvWVxcjJUrV7bqPdu6oKAgTJw4sd4xvr6++O2333Do0CF8/vnnWL16NU6cOIHjx4+zgCHSoarvkcOGDav2+pEjR3DhwgU4OTkhMTER9+7dg5+fH8rKyhAeHm6IqE8cW1tbbNq0CXfv3q21t5kucCbGiISFhWHp0qXw8/PDX//61xZNxeXk5OCf//wnwsPDkZ2dzaZORNQmuLq6IisrC6WlpdVmXObPn481a9Zg8eLF+OSTTwAAV65cQY8ePdClSxdcu3bNUJGfODY2NnB2dq4xU60L3J1kRN566y0cOnQIhw8fRnR0NDp16oSAgACMHj0aL730EkxNTev9+PT0dMTFxSEqKgrR0dGorKyElZUVFi9erKfPgIhIt7Kzs2FjY1OtgAEeNvYEgDfeeEP7Wrdu3WBiYoK0tDS9ZnySqdVqVFRU4O7du3p5P87EGKE9e/Zg0aJFuH79unZFuKmpKV588UV4eHjA3t4e9vb2UKlUePDgAbKzs5GUlKT9RyMIAhQKBSZPnoxly5ahQ4cOhvx0iIhajVKphEqlQnl5ufa14uJi2NvbQxAEFBYWVtux5ODggJKSEqhUKkPEfeLs3r0bAQEBePrpp5Gamqrz9+NMjBHy9/eHv78/jhw5gs2bN+PHH39ERUUFEhIStFsLH1X1G4kgCOjUqRNmzZqF6dOn13poJBGRlHXp0gVJSUk4deoU+vfvDwD48ccfUVlZWWPLdXl5OfLy8tCxY0dDxW0Tbt26Ve/1yspK3L9/H9HR0QgPD4coihg5cqResrGIMWK+vr7w9fVFcXExTp48idjYWFy5cgVZWVnIycmBubk5nJyc4OLiAm9vbwwaNIgr8ImoTfPz80NycjLmzJmDjRs3QqVS4a9//StEUcTo0aOrjU1JSQEAFjEt5OHh0eixgiCge/fuCA0N1WGiR96Pj5OIiEgqMjIy0K1bN+Tn51d73c7ODtevX4ednZ32tU8//RShoaH46KOPsHz5cn1HbTMa2+xOFEUEBwfj008/hY2NjR6SsYghIiKJOXXqFP74xz/izp07AICnnnoKUVFR8PHxqTZux44dSE1NxYQJEzhL3QK3b9+u93phYSESEhIQHh6OwsJC7N69W3uun66xiCEiIskRRRG//vorNBoNevbsWeMcM9K/iooKvPHGG0hKSkJiYiLc3Nx0/p4sYoiIiKhVXL16FS+88AJmz56NjRs36vz9WMQQEZGkVVZWIicnB3K5HPb29s0+dZlah52dHezs7HDjxg2dvxf/pomISHI0Gg127NiBV155BZaWlujQoQOcnZ1hZWUFHx8f7Ny5k53KDaC8vBwlJSX1nj3XmjgTQ0REklJUVIQxY8bg6NGjNTr3VhFFEQMHDsS+ffuq7Vgi3dqwYQPeeecduLq6NthfpjVwJRQREUlKYGAgjh49CplMhhEjRmDkyJFwd3fHsGHDYGtri08++QSbNm1CXFwc/vCHP+D48eN1FjvUsNjY2HqvP9rsLioqCqIowt/fXy/ZOBNDRESSER0djREjRsDExAQ//PBDtdOs5XI5nJ2dce/ePRQVFcHHxwfnz5/Hzp07ERgYaMDU0iaXyxvVJwZ42OxuwIABOHjwIKytrXWcjGtiiIhIQrZv3w5RFLF48eJqBczjrK2tsWzZMgiCgMjISD0mbHsEQaj3j4mJCZydnTF06FBs2bIFsbGxeilgAM7EEBGRhHh4eODWrVtIT0+vcbjtozMxAFBaWgorKys4OTkhIyPDEHFJxzgTQ0REknH//n3Y2NjUKGBqY25uDqVSidzcXD0kI0NgEUNERJIhimKj+8CoVCrk5+dDqVTqOBUZCosYIiKSDGdnZ+Tn56OkpKTBsXv37gUAvPTSS7qORQbCLdZERCQZ3bt3x507d3Du3LkaBz4+KikpCR988AFEUcS0adP0F7AN2r59e6vcZ+rUqa1yn0dxYS8REUnGqlWr8NFHH2HOnDlYv359tWtyuRwKhQJdu3bF5cuXAQCjRo3Cvn37DBG1zWjKFuv66KKDMosYIiKSjNTUVDz//POwsLDAjRs3qnXjlcvl2v82NTXFn//8Z6xcuZInXLeQQqFocREjiiKLGCIiorqEhYXB0tISnTp1wuDBg+Ho6GjoSG3C7du3670uCALc3d3h4OCAhISEGtf69OmDrKwsFjFERERkfB7v0fMoFxcXZGRk6KSI4e4kIiIikiQ+KCQiIkm6e/cu9u7di4SEBGRmZgJ4uAW7T58+GDduXKMa4pG08XESERFJSllZGT788EOsX78earUaALSnVFf9SFMoFAgODsaKFStgampqsKxPCkM9TuJMDBERSYZGo8GoUaNw5MgRCIIAS0tL9OnTBx07dgQApKenIyEhASqVCl9++SV+++03HDx4sNFdfkla+LdKRESSsWHDBhw9ehQymQyhoaHIzMzE8ePHERkZicjISBw/fhwZGRlYsmQJZDIZDh8+XKOfDLW+qpkwvb8vHycREZFU9O7dG0lJSfjb3/6Gjz76qN6xK1aswMcffwwvLy8kJibqKeGT6d///jfMzc3x+uuv17jWsWNH3Lt3j1usiYjoyWZtbY2ysjLk5ubC2tq63rFFRUWws7ODmZkZioqK9JSQHpeeng61Wg03N7dWvzeLGCIikgwHBwcAQE5Ojk7Gk7RwYS8REUnGiy++iNjYWGRnZzfYkTc7Oxv5+fl49dVX9ZSu7YuPj8e3335b67b2CRMm4OWXX9ZrHs7EEBGRZHz//ffw9/fHnDlz8NVXX9U7Njg4GBs3bsTu3bsxduxYPSVsmwoKCjBjxgzs3bsXQM2FvFWlxJgxY/D111/DxsZGL7lYxBARkaQsXLgQK1asQGBgIEJDQ9GlS5dq13///XcsXboU33zzDT788EN89tlnBkraNoiiiCFDhuD48eMQBAEdO3bE4MGD4erqCuDhmpdffvkFaWlpEEURgwYNQkxMjF62tbOIISIiyRg8eDAA4MKFC8jLywMAuLq6avvEpKWlIT09HQCgVCrh5eVV631EUcTx48d1HbdN2LZtG2bMmAETExN89dVXmDlzZq3jIiIiEBwcjLKyMvzzn//E9OnTdZ6NRQwREUmGXC6HKIot7ksiiqJOtvy2RUOGDMEvv/yCdevWYe7cufWO3bBhA9555x34+PggJiZG59lYxBARkWSEhYW12r2WLFnSavdqyxwdHVFQUID8/HxYWFjUO7a0tBQ2NjZQKpXIysrSeTYWMURERFQnc3NzWFlZNWlbe3FxMUpLS3WcjMcOEBERUT0cHR2Rl5eH+/fvNzg2MzMT+fn5DW5/by0sYoiIiKhOAwYMgCiKWLRoUYNjP/74Y2g0GvTv318PyVjEEBFRG1BRUYGMjAztjiVqPcHBwRAEARERERg/fjyuXbtWY8zVq1fh7++PiIgIAGhwAXBr4ZoYIiKSlIqKCsTExOD48eOIi4vDb7/9hoKCAu11hUKBDh06oF+/fhg4cCD8/Pzw7LPPGjCx9H300Uf4/PPPtU3tOnbsqO0T8+i2dkEQEBISgpUrV+olF4sYIiKShJs3b2Lz5s3YunWrdudLQ1utq37EDRw4EG+//TbGjRsHhYIn7jTHli1bsGjRImRnZ9d63dHREcuWLcPs2bP1lolFDBERGbXMzEwsWbIEERERUKvVEAQBVlZW6NOnD15++WU888wzsLe3h52dHcrKyvDgwQNkZWXhwoULOHfuHP773/9CFEWIoohnnnkGK1eu5DEEzVReXo6jR48iPj6+xtlJvr6+MDU11WseFjFERGS0/v3vf2PSpEkoLi5Gu3btMGbMGAQGBuK1115rdMO7rKwsfPfdd9i1axfi4+MhiiIGDBiAEydO6Dg96RqLGCIiMlphYWHYsGEDQkJCMHfu3AabrTXk/PnzWLp0KX766Sd27G0DWMQQEZHRunLlCtzd3VtcvDwuPj4effv2bdV7kv6xiCEiIqI6VR262RT6OmCTRQwRERHVSS6XNzjm0VJCEAS9HbDJfWZERERUp9DQ0DqvqdVqZGZm4uTJk7h8+TKsrKxaZe1SY3EmhoiIiFrs4MGDCAgIQI8ePRAbG6uXfjw8doCIiCRDLpdDJpO1+A+1vhEjRuCrr77C6dOnsWbNGr28J2diiIhIMuRyOURRbHSPmNroa73Gk6isrAw2Njbw9PREfHy8zt+PRQwREUmGXC6HpaUlPvjggzrHfPLJJ3WO+eKLL1BUVMQiRoccHR2hVquRm5ur8/diEUNERJIhl8vh7OyMe/fuNWuMi4sLMjIyWMToSG5uLpydnaFWq7k7iYiIiKRDEATExMTo7f1YxBAREVGj5OfnY8+ePTh58iQyMjIgl8vh4uKCAQMGYOzYsbC1tcXAgQP1loePk4iISDIUCgUcHBxw//79OsfI5XJYW1sjPz+/xjWlUomSkhJUVFToMmabtGPHDsybNw95eXkA/tfUropSqcQXX3yBGTNm6C0T95kREZFkWFlZIT8/H2q1utbr2dnZAIDCwsIaC0tzc3NRVFQEW1tbXcdsc/7xj38gKCgI+fn5MDU1hbe3NyZMmABBEGBubo5evXqhoKAAs2bNwqpVq/SWi0UMERFJhoeHB8rLyxEXF1fr9UfXY2zZsqXatc2bNwMAunXrpruAbdDt27fx3nvvAQAmTpyIW7du4eTJk4iKigLwcAYmISEB0dHRaNeuHRYuXIjLly/rJRuLGCIikgwfHx8IgoDg4GBcu3at2rWkpCR8+OGHcHNzQ69evbBw4ULMmjUL69evx6xZs/Dxxx9DFEWMHj3aQOmlaf369SgvL8fw4cMRGRmJp556qtZxQ4cOxcKFCyGKIpvdERERPe7KlSvw8vJCRUUFzMzM0KtXL7i6uuLWrVs4f/48Kisr8cknn6BDhw7405/+VONgQnd3d1y8eBGWlpYG/CykpVevXkhOTsaZM2fw8ssvV7v2+Hb2zMxMdOjQAZ07d8Z///tfnWdjEUNERJKydu1azJ8/H0DN05N9fHwQHR0NhUKBVatWYdWqVcjNzYVMJsPQoUOxefNmuLm5GSq6JNnZ2aG0tBQlJSU1OiXX1pOnXbt20Gg0KC4u1nk2FjFERCQ5R44cQXh4OBISElBcXAwPDw/88Y9/xIIFC2BqalptbE5ODiwtLfV2snJbY2pqCqVSiaysrBrXHi9iRFGEpaUlFAoFCgsLdZ6NfWKIiEhyfH194evr26ixDg4OOk7TttnY2KCgoKBRZ1YlJyejvLwczz33nF6ycWEvERER1alz586oqKiosZD6cRqNBgsWLIAoihg5cqResrGIISIiojp5e3sDAA4cOFDrdZVKhdWrV6Nfv36IiYlBhw4dtGuWdI1rYoiIyGgVFxfDyspKMvdti44dOwZfX1907doVly9frvZISS6XaxdXC4IAV1dX7N+/H15eXnrJxpkYIiIyWqtXr8aIESNw9uzZVrlfcXExVq5cCXd391a535Pgtddew65du7Bo0SIUFBRUu+bu7o7u3btj+PDh+Pvf/67dAq8vnIkhIiKjtW7dOsybNw+iKMLHxweTJ0/GuHHj0K5duybdJzExEbt27UJkZCSys7NhZ2eHnJwcHaUmfWERQ0RERi06OhoLFizApUuXIIoizM3NMWjQIPTr1w/9+vWDh4cH7O3tYW9vD5VKhQcPHiA7OxtJSUk4e/Ys4uLi8PvvvwN4uF14zpw5WLJkCezs7Az8mVFLsYghIiKjJ4oioqKisGHDBpw5c0b7WmMIggClUolJkyZh3rx5eOaZZ3QZtc3Jy8vD/v37IQgCJk6cWKMPj0ajQUpKCvLy8tCjRw+99uNhEUNERJJy8eJFREVFITY2FomJiaisrKx1XPv27TFw4EAMGzYMEyZMgLm5uZ6Ttg2RkZGYPHky+vfvj//85z/Vrv3666+YOHEirl69CuBht961a9di6tSpesnGIoaIiCRLpVLh999/R1ZWFnJycmBubg4nJye4uLigU6dOho7XJsycORNff/01Nm3ahNmzZ2tfr6ysxPPPP48bN27A1NQUpqam2qMGTp8+XeOcJV1gx14iIpIsCwsLeHp6GjpGm3b+/HkAqNEh+aeffsLNmzfRqVMnnDt3Dg4ODpg+fTp27tyJNWvWIDIyUufZuMWaiIiI6nTv3j2YmZnBw8Oj2uvR0dEQRRFz5syBk5MTZDIZQkNDATycidEHFjFERERUpwcPHsDa2rrG66dOnQIA+Pn5aV/z8PCAmZlZtVOtdYlrYoiIiKhO9vb2KCgoQHl5OWSyh3Mfubm5cHJygrm5OQoKCrSvA4CdnR0qKipQVFSk82yciSEiIqI6de3aFRqNBkeOHNG+9q9//QuiKKJ///7VChiVSoWCggI4OjrqJRsX9hIREVGdRo0ahXPnzmHWrFlYsWIFVCoVFi5cCFEUMWbMmGpjq7Za6+tYBxYxREREVKe5c+di48aNSEtLw6RJkwA8bCD49NNP1+gH89133wEAhg4dqpdsfJxEREREdbKxscHRo0cxYMAACIIAQRDw0ksv4eDBgzW68/r4+GDr1q2YNm2aXrJxYS8RERE1Sn5+PjQajdGcO8UihoiIiCSJj5OIiIio1bi4uFTbsaRLXNhLREREDUpJScGlS5dQUFAAjUZT5ziVSgUA2LZtGwRBAAB4eXnhxRdfbPVMfJxEREREdSooKMDYsWMRExPT7HuEhoZqjyRoTZyJISIiojqFhYXh2LFjEAQBNjY2sLW11c6w1ObOnTtQq9XVesXY2trqJBtnYoiIiKhO3bp1w7Vr1/Ddd9/B39+/wfEuLi7IyMio95FTa2ERQ0RERHWysrKCQqFAfn5+o8brs4jh7iQiIiKqU2lpKezt7Q0do1YsYoiIiEiSuLCXiIiI6hQaGtqkhbkhISEoKirSXaBHcE0MERERSRIfJxEREZEksYghIiIiSWIRQ0RERJLEIoaIiIgkiUUMERERSRKLGCIiIpIkFjFEREQkSSxiiIiISJL+HzWVZ6FwrLVFAAAAAElFTkSuQmCC",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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RERUPLvXTqpZsybWrFmD5cuX49SpU7h+/TqMRiPCwsLQvHlz+Pv7qxGnqpKTkzF27FhoNBosX7682HluiuPt7Q1vb2+VoiMiIiJbKPr0zsvLw/nz55GWlobg4GDUq1cPPj4+Dl0XacCAAXj++ecV7x8UFCT/PHXqVNy5cwcjR47Eo48+ivv371uUzcnJkX82bdNqtdBqtYrrJyIiInWVKInJysrCO++8gxUrViAjI0N+PigoCG+99RZmzJhhd6+GNWr2diQkJAAAli5diqVLlxZZNiAgAAAwZswYfPrpp6rUT0RERPazOeMwGo3o2rUrDh8+LK9YbZKSkoIPP/wQZ8+exU8//aR6kEREREQPsnlg7+rVq3Ho0CEIIdChQwcsX74cO3fuxFdffYWnnnoKQghs2bIF27dvd2S8qoiNjYUQwupjxowZclnTc+yFISIici0298SsXbsWkiRh2LBhBeZUGT58OHr06IFt27bhxx9/tGvsChEREZEtbO6JOX36NABg1qxZBbZJkoSZM2dalCMiIiJyJJuTmHv37iEwMBBVqlQpdLtpXaR79+6pExkRERFREWxOYgwGA3x8fKxu1+l0cjl3N3PmTHksDBEREbkmu2bsJSIiInKWEk3qotfrER0dbVcZrhRNREREaihREpOWloYhQ4ZY3S5JUpFlJEliEkNERESqKFESY+8YEY4xISIiIrWUaMZeIiIiIlfBgb1ERETklpjEEBERkVtiEkNERERuiUkMERERuSUmMUREROSWmMQQERGRW2ISQ0RERG6JSQwRERG5JSYxRERE5JaYxBAREQAgLi4OLVq0QFxcnLNDIbIJkxgiG/DNncqD6Oho5OTkIDo62tmhENnEprWTHnroIVUqkyQJ//zzjyrHIipN5m/ukZGRzg6HyCGioqIQHx+PqKgoZ4dCZBObkphLly4VuV2SJKsrVJtvkySpZNERuQi+uVN5EBkZiePHjzs7DCKb2ZTEHDhwoNDn//nnH0yYMAFZWVno168fIiMjUa1aNQBAUlIS4uLi8OOPP0Kn0+Hjjz9WrUeHqLTxzZ2IyPXYlMQU1n1+7do19O3bF6Ghodi1axcefvjhAmUGDx6M999/H926dcM777yDU6dO2R8xEREREewY2Dtr1izcvn0bq1atKjSBMXnooYfwzTffIDk5GbNmzVJaHREREZEFxUnM7t274e/vj1atWhVbtlWrVvD398euXbuUVkdERERkwabLSYW5desWPDxsy4GEEMjLy8OtW7eUVkdERERkQXFPTNWqVZGVlYUdO3YUW3bnzp3Q6/WoWrWq0uqIiIiILChOYnr16gUhBIYOHYqDBw9aLXf48GEMHToUkiTh5ZdfVlodERERkQXFl5OmT5+OLVu24J9//kH79u3x9NNPIzIyEuHh4QDyb7E+ePAgjh49CiEE6tSpg/fff1+1wImIiKh8U5zEBAYG4tChQ4iKisK+fftw9OhRHDt2zKKMaZK7zp0749tvv0VgYKB90RIRERH9j+IkBgCqVKmCPXv24PDhw9i4cSN+/fVXefBuaGgomjZtij59+th0BxMRERFRSdiVxJi0bt0arVu3VuNQRERERDbhKtZERETkllTpiUlOTkZsbCwSExORmZmJ6dOnq3FYIiIiIqvsSmKysrIwbtw4fPPNNzAYDPLz5klMSkoKIiIikJ6ejr/++guPPPKIPVUSERERAbDjcpLBYED37t2xbNkyeHl5oX379vD29i5QLjg4GMOHD4fRaMSPP/5oV7BEREREJoqTmJUrVyI2NhZ16tTBmTNnsG/fPgQFBRVatl+/fgCA/fv3K62OiIiIyILiJOa7776DJElYsmQJIiIiiiz7xBNPQKPR4M8//1RaHREREZEFxUnM2bNnodFo0L59+2LLenp6IigoCHfv3lVaHREREZEFxUlMVlYWfHx84Olp29hgvV4PnU6ntDoiIiIiC3atYn3//n2belf++OMP6PV61KpVS2l1RERERBYUJzHt2rUDAKxevbrYsjNnzoQkSejcubPS6oiIiIgsKE5iJkyYAEmSMHv2bOzbt6/QMtevX8e//vUvbNmyBVqtFmPGjFEcKBEREZE5xUlMgwYN8OmnnyItLQ1du3bFE088gZSUFABAr1690Lx5c9SqVQtr166FJEn46quvULNmTbXiJiIionLOrhl73377bVSvXh1jx47FmTNn5Oc3b94s/1yjRg18/vnneOGFF+ypioiIiMiC3Wsn9ejRAy+++CJiY2Nx5MgRXL9+HUajEWFhYWjZsiU6duxo8x1MRERERLZSJbvw8PBAhw4d0KFDBzUOR0RERFQsxWNiiIiIiJyJSQwRERG5JZsuJ6l1mUiSJMTExKhyLCIiIirfbEpiYmNjValMkiRV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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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/d///odr165h7ty56N69Ozw8PHD9+nV8/fXXaNasGd59991C5506dSpu3ryJL774An369EGlSpVw7949rF+/Hh07dsTAgQMrxFIOCxYswD///IMePXqgc+fOSEtL07tlZWWJ+2ZkZCAtLc0ql3rbmuJevzoeHh44dOgQjh49imnTpqFNmzaws7NDTEwM5syZg9q1a2PLli1WSsukwkUMY2XUoUMHDB8+HESECRMm6BUF/v7+4r8LdsEYytfXFwBK7Gox9RumqRl1nn32WUyfPh379u3D48ePceLECfTp0wcA8OWXX2LPnj2FjgkICMC7776LH374AfHx8bhw4YI4udv27dvxzTffGHRu3bf0e/fulbifbntp3+qt6ebNmwCAffv2wdXVtdBt3Lhx4r5BQUFwdXXFq6++arV8pj63uhaekgqv5ORkUyLq0bXyHTt2DElJSdi9ezcaNmwIjUaD0aNH67V6svKHixjGjDBz5kwolUpcvnwZGzZsEO8v2I+/d+/eMj9ukyZNAKDQJHYFlbTNEDVq1BC7CozJWBSFQoGWLVti+/btqFatGoD8AaKladiwIVatWiWO3zHkGABo1qwZgPwP0r///rvIffLy8sRuqhdffNGgx2WmP7eenp4AgLt37xZ7jpMnT5ojaiFqtRq9e/fGzp07AeQXUseOHbPIuZht4CKGMSM888wzGDx4MADgk08+EbtBnJ2dMXToUADA/PnzcefOnRIf5+lBlQMGDAAAHDlyBL///nuh/bOysrBo0SKT8+vWf1qzZg3OnTtXpowFuzueplQqxSJOofjv7aWkYwDA0dGx0DEl6dKlC7y9vQEUfwXNt99+K7ZoDRkyxKDHtYb169eX2HW3bt06cd+bN2+CiLBr1y6r5TP1uW3UqBEA4PTp00UWMleuXBGLDGPl5uaWONuw7vUEGP6aYvLEv13GjDR9+nQIgoBbt27pTZk/d+5cBAQE4NGjR2jVqhU2btyI1NRUcXtCQgJ27NiBvn37FvoAGDx4MIKCgkBE6NevH3bv3i12V127dg09e/Y0y2XKU6ZMQcOGDZGZmYmQkBAsW7YMjx8/FrcnJSVh//79CA0NLXSpd4sWLfDOO+8gKioK6enp4v2xsbGYMGECrl+/DiD/iiSdPn36YPTo0di/fz+SkpLE+588eYJPP/0UBw8eBAC8/PLLBuV3dHQU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xyskJiZG/LBZvXq1wcetWbNGnHsjJibGgglLtmnTJmrbti15eHjoPefF3Z7eR6q12TZt2kSOjo7Upk0bioqKElugCxYxMTExYrfHihUrJMlpiNOnT9P8+fMpNDSUXn75ZXr55ZcpNDSUFixYQKdPn5Y6HhERff/996RQKMjDw4POnz+vt02hUJC/vz8REeXl5VGnTp1IEARavny5VbJxEWPDvL29yd7enjIyMkrdV6PRkL29Pfn4+FghWenK0pqRlJRkU60Zcs5uKN1CdO7u7lJHKdLZs2fpnXfeIW9vb/GD08XFhUaOHElHjx6VOp6e4cOHixlHjx5NN2/eLHbfW7duUVhYmFgESNk989133xVaNLYsC8wqFApJipgaNWpQjRo1yNXVVXweHR0dqWrVquIYNd04El0rTHlbZNTa+vTpU+wX6oJFDBHR0aNHSaFQUEhIiFWycRFjw8o66E+q2RyL0rNnTxIEgWbMmFHqvjNmzLCpcSVyzl6avLw8OnToED377LMkCAL16NFD6kglys7OpsjISOrRowfZ2dmJH6S1a9emzz77jO7fvy91RMrIyKAWLVrofcg3bdqUxowZQx988AF98MEHNGbMGGrWrJn4IatQKKhVq1ak0Wgky92+fXsSBIEGDhxIu3btoqioKIqOji7yduTIEfL29iZBEPTuv337ttVzGzp7rKurK02ZMoUyMzOtntFSmjdvTtWrV7f6eQMDA0mhUBQ5I/XTRUx2djYplUqrfaHmS6xtmG4OitjYWPj5+ZW478OHDxEQEAB/f39J5px42p49e9C3b18QEd577z189NFHhS4LTEpKwqeffoolS5YAAHbu3Ik+ffpIkFafXLPXrFmzxO25ubl49OgRsrKyIAgCnJyccOTIEbzwwgtWSmiauLg4bNiwAevWrcP169cB5M/d07VrV4waNQoDBw6ULFtmZibefvttrFu3DgCKnX9FEAQIgoBRo0Zh2bJlBs8TYgleXl5IT09HUlKSQXPc2MpCpxEREcVuEwQBzs7OCAwMROPGjW16CgFjSPU7cHR0hKOjI548eVJom1KpRKVKlRAXFyfep3ttZWVlWT6cVUolZpRBgwaRIAg0ZsyYUvcdM2aM+K3KVgwbNkz8dqpWq6lt27b06quv0quvvkpt27YVByMrFAoaOnSo1HH1yDF7WdYgateuHZ09e1bq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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from matplotlib.backends.backend_pdf import PdfPages\n",
+ "\n",
+ "for constraint, time_budget in budgets.items():\n",
+ " data = get_results(\"all\", constraint)\n",
+ " data[\"framework\"] = data[\"framework\"].str.replace(\"_benchmark\", \"(B)\")\n",
+ " #data[\"framework\"] = data[\"framework\"].str.replace(\"autosklearn2\", \"[autosklearn2]\")\n",
+ " data = data[~data[\"framework\"].isin([\"mlr3automl\"])] # , \"autosklearn2\"])]\n",
+ " data = impute_values(data, \"constantpredictor\")\n",
+ " \n",
+ " for ttype, metric in [(\"binary classification\", \"auc\"), (\"multiclass classification\", \"neg_logloss\"), (\"regression\", \"neg_rmse\")]:\n",
+ " results = data[data.metric.isin([metric])]\n",
+ " filename = f\"box-rescaled-{ttype}-{constraint}-constantpredictor.pdf\".replace(\" \", \"-\")\n",
+ " print(\"generating\", filename)\n",
+ " \n",
+ " results = results.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n",
+ " results = add_rescale(results, lower=\"RandomForest\")\n",
+ " results = results[~results.framework.isin([\"RandomForest\", \"mlr3automl\", \"constantpredictor\"])]\n",
+ " results[\"rescaled\"] = -results[\"rescaled\"]\n",
+ "\n",
+ " fig, ax = box_plot(\n",
+ " results,\n",
+ " metric=\"rescaled\", \n",
+ " title=f\"{ttype.capitalize()}, {time_budget}\", \n",
+ " hlines={-1: \"#6f7cc8\"}, ylog=False, \n",
+ " ylim=[-3 if metric != \"auc\" or constraint !=\"4h8c_gp3\" else -7, 0],\n",
+ " figsize=(6, 3),\n",
+ " with_framework_names=ttype == \"regression\",\n",
+ " add_counts=\"outliers\"\n",
+ " )\n",
+ " ax.set_ylabel(\"Scaled Performance\")\n",
+ " \n",
+ "\n",
+ " with PdfPages(filename) as f:\n",
+ " f.savefig(fig, bbox_inches=\"tight\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8bb9eb98",
+ "metadata": {},
+ "source": [
+ "# Training Duration\n",
+ "Figure 8 in the paper."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "3f2c75b9",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/3831673817.py:9: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " timeout_counts = dict(data.groupby(\"framework\").sum()[\"timeout\"])\n",
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/3831673817.py:9: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " timeout_counts = dict(data.groupby(\"framework\").sum()[\"timeout\"])\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "generating train-duration-1h8c_gp3.pdf\n",
+ "generating train-duration-4h8c_gp3.pdf\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "data": {
+ "image/png": "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zhzZeXzFP+YsLCzg4OAAU1NT2fdjYmIi4uPj8ejRI+Tn5wMous1gZmaGadOmYebMmdDR0RE886VLl+Dm5gbGGLy9vbF48WI0adJEbszDhw/x/fff49ChQwCACxcuwNXVVfBsJb158wbNmzdHYmIijI2N8emnn6J79+6yWzHR0dE4c+YMNm3ahNTUVJiYmODBgweldi2qwr1798rcMa3qEwIU8XebMab0czJJ1VGxRWrM1NQUmZmZSE9Ph1hccReR/Px8GBgYQE9Pr8rFmaJt3rwZM2fOREZGhuwxW1tb7N27F506dZI99ueffyIpKQmDBw+Grq4u5VRj//zzD7Zs2YKAgADExsbKXSv+0VdybZdIJELnzp0xadIkeHt7y9YfKss333yDFStWyLJZW1vLFTEvX76UZRb00NxKXL16FQMGDEBCQkK5/aE4joOpqSmOHDmCzp07KzmheqlofVGxhQsXQk9PD19//XWpaytXrkR6ejoVW7WZqqbUiPpzdnZmHMex3bt3Vzp29+7djOd55uzsrIRkpZ08eVJu94mVlRXT0tKSbfWOjY2VjZ01axbjOI4FBARQTg3y6NEjtmXLFva///2PjRgxgvXq1YsNHDiQTZo0iS1YsICdOnWqVrTR2LJlC7O0tCz3lpelpSXbvHmzqmOyV69esS+//JJZWFiUymhhYcGmTp3KXr16peqYGqOs47qK1atXj24jvqW23YqlYovUWPHp6VKplJ04caLccceOHWNSqZRxHMd++eUXJSb8T9euXRnP88zV1ZW9efOGMcbY69evWfv27RnHcWzevHmysVevXmU8z7NRo0ZRTqISOTk57MSJE2zBggXs888/Z59//jlbsGABO378OMvJyVF1vFKePXvGQkJCWEhICHv27Jmq45QpOTmZbd26lY0ZM4b17NmT9enTh02cOJHt2LGDpaWlqTpepajYqh6RSFRp24eyjpgSCt1GJDWWl5eHjh074vbt22CMwcnJqcy1GyEhIeA4Dq1atUJISIhs27UySaVSpKWl4dGjR2jUqJHs8dOnT6NXr15wcnLC1atXAQDZ2dkwMDBAq1atEB4eTjkJUXP+/v6YPn06kpOTARTd4iz5q08qlWLlypUYP368ihJW7u3jukp6+/gZAlkrj/KkpaXh+vXr2LJlC/Ly8rBhwwZYWVnBxcVFkDxUbJF3EhMT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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "from matplotlib.backends.backend_pdf import PdfPages\n",
+ "\n",
+ "for constraint, time_budget in budgets.items():\n",
+ " data = get_results(\"all\", constraint)\n",
+ " data[\"framework\"] = data[\"framework\"].str.replace(\"_benchmark\", \"(B)\")\n",
+ " #data[\"framework\"] = data[\"framework\"].str.replace(\"autosklearn2\", \"[autosklearn2]\")\n",
+ " data = data[~data[\"framework\"].isin([\"mlr3automl\", \"constantpredictor\"])] # , \"autosklearn2\"])]\n",
+ " data[\"timeout\"] = data[\"info\"].apply(lambda msg: isinstance(msg, str) and \"Interrupting thread MainThread\" in msg)\n",
+ " timeout_counts = dict(data.groupby(\"framework\").sum()[\"timeout\"])\n",
+ " #data = data[~data.result.isna()]\n",
+ " # data = impute_values(data, \"constantpredictor\")\n",
+ " #data = data.groupby([\"framework\", \"task\", \"constraint\", \"metric\"], as_index=False).mean()\n",
+ " \n",
+ " #results = data[data.metric.isin([metric])]\n",
+ " filename = f\"train-duration-{constraint}.pdf\".replace(\" \", \"-\")\n",
+ " print(\"generating\", filename)\n",
+ "\n",
+ " time_limit = 3600 if constraint == \"1h8c_gp3\" else 3600*4\n",
+ " fig, ax = box_plot(\n",
+ " data,\n",
+ " metric=\"training_duration\", \n",
+ " title=f\"Training Duration {time_budget}\", \n",
+ " hlines={time_limit: \"grey\", (time_limit+3600): \"red\"},\n",
+ " ylog=False, \n",
+ " #ylim=[-3 if metric != \"auc\" or constraint !=\"4h8c_gp3\" else -7, 0],\n",
+ " figsize=(6, 3),\n",
+ " exclude=[],\n",
+ " add_counts=timeout_counts,\n",
+ " with_framework_names=True, # ttype == \"regression\",\n",
+ " )\n",
+ " ax.set_ylabel(\"Training Duration (s)\")\n",
+ "\n",
+ "\n",
+ " with PdfPages(filename) as f:\n",
+ " f.savefig(fig, bbox_inches=\"tight\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "38a9bc36",
+ "metadata": {},
+ "source": [
+ "# Tables\n",
+ "Generating tables 4-9 of the appendix."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "c3ddd5e6",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "metric = \"logloss\"\n",
+ "constraint = \"1h8c_gp3\"\n",
+ "map_for_caption = {\"auc\": \"binary classification (in AUC)\", \"1h8c_gp3\": \"one hour\", \"4h8c_gp3\": \"four hour\", \"logloss\": \"multiclass classification (log loss)\"}"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "1609830b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "array(['AutoGluon(B)', 'H2OAutoML', 'lightautoml', 'autosklearn',\n",
+ " 'mljarsupervised(B)', 'flaml', 'TPOT', 'autosklearn2', 'GAMA(B)'],\n",
+ " dtype=object)"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data = get_results(metric, constraint)\n",
+ "data = data[~data.framework.isin([\"constantpredictor\", \"mlr3automl\", \"RandomForest\", \"TunedRandomForest\"])]\n",
+ "data.framework.unique()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "id": "635bc52a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "summary = data.groupby([\"framework\", \"task\", \"id\"], as_index=False).agg({\"result\": [\"mean\", \"std\", \"count\"]})\n",
+ "summary[\"fails\"] = 10 - summary[(\"result\", \"count\")]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "960e2694",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def combine_as_separate(tuple_):\n",
+ " mean, std, fails = tuple_\n",
+ " if fails == 10:\n",
+ " return \"[10]\"\n",
+ " else:\n",
+ " return f\"{mean:.2f}\" + (f\"[{int(fails)}]\" if fails > 0 else \"\")\n",
+ " \n",
+ "def combine_as_supertext(tuple_):\n",
+ " mean, std, fails = tuple_\n",
+ " if fails == 10:\n",
+ " return \"-$\\hspace{0.4em}$\"\n",
+ " else:# if fails > 0:\n",
+ " backslash = \"\\hspace{0.4em}\"\n",
+ " return f\"{mean:.3f}({std:.3f})$^{{{int(fails) if int(fails) != 0 else backslash}}}$\""
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "7a22952d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "summary[\"display\"] = summary[[(\"result\", \"mean\"), (\"result\", \"std\"), (\"fails\", \"\")]].agg(combine_as_supertext, axis=1)\n",
+ "summary = summary[[(\"framework\", \"\"), (\"task\", \"\"), (\"id\", \"\"), (\"display\", \"\")]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "e93c2bb1",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "summary.columns = [\"framework\", \"task\", \"id\", \"display\"]\n",
+ "summary[\"id\"] = summary[\"id\"].apply(lambda s: s.split(\"/\")[-1])\n",
+ "summary[\"task\"] = summary[\"task\"].apply(lambda s: s if len(s) < 10 else (s[:8] + \"...\"))\n",
+ "summary.sort_values(\"framework\", inplace=True, key=lambda s: s.str.lower().sort_values())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "76c25b0d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tab = summary.pivot(index=[\"id\", \"task\"], columns=\"framework\", values=\"display\")\n",
+ "tab = tab[[c for c in sorted(tab.columns, key=lambda s: s.lower())]]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "aa4dec7d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " AutoGluon(B) \n",
+ " autosklearn \n",
+ " autosklearn2 \n",
+ " flaml \n",
+ " GAMA(B) \n",
+ " H2OAutoML \n",
+ " lightautoml \n",
+ " mljarsupervised(B) \n",
+ " TPOT \n",
+ " \n",
+ " \n",
+ " id \n",
+ " task \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 10090 \n",
+ " amazon-c... \n",
+ " -0.722(0.094)$^{\\hspace{0.4em}}$ \n",
+ " -0.852(0.164)$^{\\hspace{0.4em}}$ \n",
+ " -0.842(0.143)$^{\\hspace{0.4em}}$ \n",
+ " -1.122(0.179)$^{\\hspace{0.4em}}$ \n",
+ " -0.900(0.080)$^{\\hspace{0.4em}}$ \n",
+ " -1.196(0.209)$^{\\hspace{0.4em}}$ \n",
+ " -0.844(0.097)$^{\\hspace{0.4em}}$ \n",
+ " -1.211(0.163)$^{\\hspace{0.4em}}$ \n",
+ " -1.169(0.294)$^{3}$ \n",
+ " \n",
+ " \n",
+ " 168784 \n",
+ " steel-pl... \n",
+ " -0.465(0.041)$^{\\hspace{0.4em}}$ \n",
+ " -0.530(0.029)$^{\\hspace{0.4em}}$ \n",
+ " -0.472(0.031)$^{\\hspace{0.4em}}$ \n",
+ " -0.509(0.047)$^{\\hspace{0.4em}}$ \n",
+ " -0.486(0.033)$^{\\hspace{0.4em}}$ \n",
+ " -0.484(0.039)$^{\\hspace{0.4em}}$ \n",
+ " -0.488(0.027)$^{\\hspace{0.4em}}$ \n",
+ " -0.464(0.027)$^{\\hspace{0.4em}}$ \n",
+ " -0.511(0.041)$^{\\hspace{0.4em}}$ \n",
+ " \n",
+ " \n",
+ " 168909 \n",
+ " dilbert \n",
+ " -0.012(0.004)$^{\\hspace{0.4em}}$ \n",
+ " -0.033(0.012)$^{\\hspace{0.4em}}$ \n",
+ " -0.052(0.020)$^{\\hspace{0.4em}}$ \n",
+ " -0.024(0.010)$^{\\hspace{0.4em}}$ \n",
+ " -0.169(0.031)$^{\\hspace{0.4em}}$ \n",
+ " -0.044(0.007)$^{\\hspace{0.4em}}$ \n",
+ " -0.033(0.006)$^{\\hspace{0.4em}}$ \n",
+ " -0.028(0.010)$^{\\hspace{0.4em}}$ \n",
+ " -0.166(0.103)$^{\\hspace{0.4em}}$ \n",
+ " \n",
+ " \n",
+ " 168910 \n",
+ " fabert \n",
+ " -0.686(0.027)$^{\\hspace{0.4em}}$ \n",
+ " -0.744(0.029)$^{\\hspace{0.4em}}$ \n",
+ " -0.745(0.024)$^{\\hspace{0.4em}}$ \n",
+ " -0.766(0.025)$^{\\hspace{0.4em}}$ \n",
+ " -0.753(0.020)$^{\\hspace{0.4em}}$ \n",
+ " -0.729(0.031)$^{\\hspace{0.4em}}$ \n",
+ " -0.771(0.031)$^{\\hspace{0.4em}}$ \n",
+ " -0.758(0.032)$^{\\hspace{0.4em}}$ \n",
+ " -0.857(0.041)$^{\\hspace{0.4em}}$ \n",
+ " \n",
+ " \n",
+ " 189355 \n",
+ " dionis \n",
+ " -0.273(0.004)$^{\\hspace{0.4em}}$ \n",
+ " -1.138(0.273)$^{\\hspace{0.4em}}$ \n",
+ " -0.594(0.071)$^{\\hspace{0.4em}}$ \n",
+ " -0.374(0.004)$^{1}$ \n",
+ " -1.591(0.348)$^{\\hspace{0.4em}}$ \n",
+ " -3.351(0.120)$^{\\hspace{0.4em}}$ \n",
+ " -$\\hspace{0.4em}$ \n",
+ " -1.198(0.421)$^{8}$ \n",
+ " -17.230(nan)$^{9}$ \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "framework AutoGluon(B) \\\n",
+ "id task \n",
+ "10090 amazon-c... -0.722(0.094)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.465(0.041)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.012(0.004)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.686(0.027)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -0.273(0.004)$^{\\hspace{0.4em}}$ \n",
+ "\n",
+ "framework autosklearn \\\n",
+ "id task \n",
+ "10090 amazon-c... -0.852(0.164)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.530(0.029)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.033(0.012)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.744(0.029)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -1.138(0.273)$^{\\hspace{0.4em}}$ \n",
+ "\n",
+ "framework autosklearn2 \\\n",
+ "id task \n",
+ "10090 amazon-c... -0.842(0.143)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.472(0.031)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.052(0.020)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.745(0.024)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -0.594(0.071)$^{\\hspace{0.4em}}$ \n",
+ "\n",
+ "framework flaml \\\n",
+ "id task \n",
+ "10090 amazon-c... -1.122(0.179)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.509(0.047)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.024(0.010)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.766(0.025)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -0.374(0.004)$^{1}$ \n",
+ "\n",
+ "framework GAMA(B) \\\n",
+ "id task \n",
+ "10090 amazon-c... -0.900(0.080)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.486(0.033)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.169(0.031)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.753(0.020)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -1.591(0.348)$^{\\hspace{0.4em}}$ \n",
+ "\n",
+ "framework H2OAutoML \\\n",
+ "id task \n",
+ "10090 amazon-c... -1.196(0.209)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.484(0.039)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.044(0.007)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.729(0.031)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -3.351(0.120)$^{\\hspace{0.4em}}$ \n",
+ "\n",
+ "framework lightautoml \\\n",
+ "id task \n",
+ "10090 amazon-c... -0.844(0.097)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.488(0.027)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.033(0.006)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.771(0.031)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -$\\hspace{0.4em}$ \n",
+ "\n",
+ "framework mljarsupervised(B) \\\n",
+ "id task \n",
+ "10090 amazon-c... -1.211(0.163)$^{\\hspace{0.4em}}$ \n",
+ "168784 steel-pl... -0.464(0.027)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.028(0.010)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.758(0.032)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -1.198(0.421)$^{8}$ \n",
+ "\n",
+ "framework TPOT \n",
+ "id task \n",
+ "10090 amazon-c... -1.169(0.294)$^{3}$ \n",
+ "168784 steel-pl... -0.511(0.041)$^{\\hspace{0.4em}}$ \n",
+ "168909 dilbert -0.166(0.103)$^{\\hspace{0.4em}}$ \n",
+ "168910 fabert -0.857(0.041)$^{\\hspace{0.4em}}$ \n",
+ "189355 dionis -17.230(nan)$^{9}$ "
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "tab.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "58b6c028",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "tex = tab.style.to_latex().replace(\"_\", r\"\\_\")\n",
+ "\n",
+ "# the headers will be too wide to fit a page, we rotate them:\n",
+ "old_header, body = tex.splitlines()[:3], tex.splitlines()[3:]\n",
+ "new_header = [\n",
+ " r\"\\footnotesize\",\n",
+ " r\"\\begin{table}\",\n",
+ " r\"\\begin{tabular}{rl\" + \"r\" * len(tab.columns) + \"}\",\n",
+ " r\"\\toprule\",\n",
+ " \" & framework\" + \"\".join([f\"& \\\\rotatebox[origin=c]{{-90}}{{{framework}}}\" for framework in tab.columns]) + r\"\\\\\",\n",
+ " \" task id & task name \" + \"& \" * len(tab.columns) + r\"\\\\\",\n",
+ " r\"\\midrule\",\n",
+ "]\n",
+ "*body, footer = body\n",
+ "caption = f\"\\\\caption{{Results for {map_for_caption[metric]} on a {map_for_caption[constraint]} budget.}}\"\n",
+ "label = f\"\\\\label{{tab:{metric}-{constraint}}}\"\n",
+ "footer = [r\"\\bottomrule\", footer, caption, label, r\"\\end{table}\"]\n",
+ "\n",
+ "with open(\"mytable.tex\", \"w\") as fh:\n",
+ " fh.write(\"\\n\".join(new_header + body + footer))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "198cbc1a",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "map_for_caption = {\n",
+ " \"auc\": \"binary classification (in AUC)\", \"neg_logloss\": \"multiclass classification (in logloss)\", \"neg_rmse\": \"regression (in RMSE)\",\n",
+ " \"1h8c_gp3\": \"one hour\", \"4h8c_gp3\": \"four hour\"\n",
+ "}\n",
+ "\n",
+ "def generate_table_for(metric, constraint, filename=\"mytable.tex\", exclude=[\"constantpredictor\", \"mlr3automl\"]): # \"RandomForest\", \"TunedRandomForest\"\n",
+ " data = get_results(metric, constraint)\n",
+ " data = data[~data.framework.isin(exclude)]\n",
+ " if metric != \"auc\":\n",
+ " data[\"result\"] = -data[\"result\"]\n",
+ " \n",
+ " summary = data.groupby([\"framework\", \"task\", \"id\"], as_index=False).agg({\"result\": [\"mean\", \"std\", \"count\"]})\n",
+ " summary[\"fails\"] = 10 - summary[(\"result\", \"count\")]\n",
+ " \n",
+ " def combine_as_supertext(tuple_):\n",
+ " mean, std, fails = tuple_\n",
+ " if fails == 10:\n",
+ " return \"-\"\n",
+ " elif fails > 0:\n",
+ " return f\"${mean:.2f}^{{{int(fails)}}}$\"\n",
+ " else:\n",
+ " return f\"{mean:.2f}\"\n",
+ "\n",
+ " summary[\"display\"] = summary[[(\"result\", \"mean\"), (\"result\", \"std\"), (\"fails\", \"\")]].agg(combine_as_supertext, axis=1)\n",
+ " summary = summary[[(\"framework\", \"\"), (\"task\", \"\"), (\"id\", \"\"), (\"display\", \"\")]]\n",
+ " summary.columns = [\"framework\", \"task\", \"id\", \"display\"]\n",
+ " summary[\"id\"] = summary[\"id\"].apply(lambda s: s.split(\"/\")[-1])\n",
+ " summary[\"task\"] = summary[\"task\"].apply(lambda s: s if len(s) < 10 else (s[:8] + \"...\"))\n",
+ " summary.sort_values(\"framework\", inplace=True, key=lambda s: s.str.lower().sort_values())\n",
+ " \n",
+ " tab = summary.pivot(index=[\"id\", \"task\"], columns=\"framework\", values=\"display\")\n",
+ " tab = tab[[c for c in sorted(tab.columns, key=lambda s: s.lower())]]\n",
+ " \n",
+ " tex = tab.style.to_latex().replace(\"_\", r\"\\_\")\n",
+ "\n",
+ " # the headers will be too wide to fit a page, we rotate them:\n",
+ " old_header, body = tex.splitlines()[:3], tex.splitlines()[3:]\n",
+ " new_header = [\n",
+ " r\"\\footnotesize\",\n",
+ " r\"\\begin{table}\",\n",
+ " r\"\\begin{tabular}{rl\" + \"r\" * len(tab.columns) + \"}\",\n",
+ " r\"\\toprule\",\n",
+ " \" & framework\" + \"\".join([f\"& \\\\rotatebox[origin=c]{{-90}}{{{framework}}}\" for framework in tab.columns]) + r\"\\\\\",\n",
+ " \" task id & task name \" + \"& \" * len(tab.columns) + r\"\\\\\",\n",
+ " r\"\\midrule\",\n",
+ " ]\n",
+ " *body, footer = body\n",
+ " caption = f\"\\\\caption{{Results for {map_for_caption[metric]} on a {map_for_caption[constraint]} budget.}}\"\n",
+ " label = f\"\\\\label{{tab:{metric}-{constraint}}}\"\n",
+ " footer = [r\"\\bottomrule\", footer, caption, label, r\"\\end{table}\"]\n",
+ "\n",
+ " with open(filename, \"w\") as fh:\n",
+ " fh.write(\"\\n\".join(new_header + body + footer))\n",
+ "\n",
+ "# requires \\usepackage{makecell}\n",
+ "for metric in [\"auc\", \"neg_logloss\", \"neg_rmse\"]:\n",
+ " for constraint in [\"1h8c_gp3\", \"4h8c_gp3\"]:\n",
+ " generate_table_for(metric, constraint, f\"{metric}-{constraint}-table.tex\")\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "177fb24f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "map_for_caption = {\n",
+ " \"auc\": \"binary classification (in AUC)\", \"neg_logloss\": \"multiclass classification (in logloss)\", \"neg_rmse\": \"regression (in RMSE)\",\n",
+ " \"1h8c_gp3\": \"one hour\", \"4h8c_gp3\": \"four hour\"\n",
+ "}\n",
+ "\n",
+ "def generate_sideways_table_for(metric, constraint, filename=\"mytable.tex\", exclude=[\"constantpredictor\", \"mlr3automl\", \"RandomForest\", \"TunedRandomForest\"]): # \"RandomForest\", \"TunedRandomForest\"\n",
+ " data = get_results(metric, constraint)\n",
+ " data = data[~data.framework.isin(exclude)]\n",
+ " if metric != \"auc\":\n",
+ " data[\"result\"] = -data[\"result\"]\n",
+ " \n",
+ " summary = data.groupby([\"framework\", \"task\", \"id\"], as_index=False).agg({\"result\": [\"mean\", \"std\", \"count\"]})\n",
+ " summary[\"fails\"] = 10 - summary[(\"result\", \"count\")]\n",
+ " \n",
+ " def combine_as_supertext(tuple_):\n",
+ " fw, mean, std, fails = tuple_\n",
+ " std_text = f\"({std:.3f})\" if metric != \"neg_rmse\" else f\"({std:.2g})\"\n",
+ " if fails == 10:\n",
+ " return \"-$\\hspace{0.4em}$\"\n",
+ " else:# if fails > 0:\n",
+ " backslash = \"\\hspace{0.4em}\"\n",
+ " if metric != \"neg_rmse\":\n",
+ " return f\"{mean:.3f}{std_text}$^{{{int(fails) if int(fails) != 0 else backslash}}}$\"\n",
+ " else:\n",
+ " return f\"{mean:.2g}{std_text}$^{{{int(fails) if int(fails) != 0 else backslash}}}$\"\n",
+ " summary[\"display\"] = summary[[(\"framework\", \"\"), (\"result\", \"mean\"), (\"result\", \"std\"), (\"fails\", \"\")]].agg(combine_as_supertext, axis=1)\n",
+ " summary = summary[[(\"framework\", \"\"), (\"task\", \"\"), (\"id\", \"\"), (\"display\", \"\")]]\n",
+ " summary.columns = [\"framework\", \"task\", \"id\", \"display\"]\n",
+ " summary[\"id\"] = summary[\"id\"].apply(lambda s: s.split(\"/\")[-1])\n",
+ " summary[\"task\"] = summary[\"task\"].apply(lambda s: s.lower() if len(s) < 10 else (s.lower()[:8] + \"...\"))\n",
+ " summary.sort_values(\"framework\", inplace=True, key=lambda s: s.str.lower().sort_values())\n",
+ " \n",
+ " tab = summary.pivot(index=[\"id\", \"task\"], columns=\"framework\", values=\"display\")\n",
+ " tab = tab[[c for c in sorted(tab.columns, key=lambda s: s.lower())]]\n",
+ " \n",
+ " tex = tab.style.to_latex().replace(\"_\", r\"\\_\")\n",
+ "\n",
+ " # the headers will be too wide to fit a page, we rotate them:\n",
+ " old_header, body = tex.splitlines()[:3], tex.splitlines()[3:]\n",
+ " new_header = [\n",
+ " r\"\\footnotesize\",\n",
+ " r\"\\begin{landscape}\",\n",
+ " r\"\\begin{table}\",\n",
+ " r\"\\tiny\",\n",
+ " r\"\\begin{tabular}{rl\" + \"r\" * len(tab.columns) + \"}\",\n",
+ " r\"\\toprule\",\n",
+ " \" & framework\" + \"\".join([f\"& {framework}\\ \\ \" for framework in tab.columns]) + r\"\\\\\",\n",
+ " \" task id & task name \" + \"& \" * len(tab.columns) + r\"\\\\\",\n",
+ " r\"\\midrule\",\n",
+ " ]\n",
+ " *body, footer = body\n",
+ " caption = f\"\\\\caption{{Results for {map_for_caption[metric]} on a {map_for_caption[constraint]} budget, denoted as \\\\texttt{{mean}}(\\\\texttt{{std}})$^{{\\\\mbox{{\\\\texttt{{fails}}}}}}$.}}\"\n",
+ " label = f\"\\\\label{{tab:{metric}-{constraint}}}\"\n",
+ " footer = [r\"\\bottomrule\", footer, caption, label, r\"\\end{table}\", r\"\\end{landscape}\",]\n",
+ "\n",
+ " with open(filename, \"w\") as fh:\n",
+ " fh.write(\"\\n\".join(new_header + body + footer))\n",
+ "\n",
+ "# requires \\usepackage{makecell}\n",
+ "for metric in [\"auc\", \"neg_logloss\", \"neg_rmse\"]:\n",
+ " for constraint in [\"1h8c_gp3\", \"4h8c_gp3\"]:\n",
+ " generate_sideways_table_for(metric, constraint, f\"{metric}-{constraint}-table.tex\")\n",
+ " "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "872cb62c",
+ "metadata": {},
+ "source": [
+ "Unused code for win/loss tables, champions:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "56298410",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/2435835941.py:4: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " data = data.groupby([\"framework\", \"task\", \"constraint\"], as_index=False).mean()\n"
+ ]
+ }
+ ],
+ "source": [
+ "data = get_results(\"all\", budget=\"1h8c_gp3\")\n",
+ "data = impute_values(data, strategy=\"constantpredictor\")\n",
+ "data = data[~data.framework.isin([\"mlr3automl\", \"constantpredictor\"])]\n",
+ "data = data.groupby([\"framework\", \"task\", \"constraint\"], as_index=False).mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "49c53448",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " task \n",
+ " result \n",
+ " framework_other \n",
+ " task_other \n",
+ " result_other \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 104 \n",
+ " AutoGluon(B) \n",
+ " APSFailure \n",
+ " 0.992441 \n",
+ " GAMA(B) \n",
+ " APSFailure \n",
+ " 0.990140 \n",
+ " \n",
+ " \n",
+ " 208 \n",
+ " AutoGluon(B) \n",
+ " APSFailure \n",
+ " 0.992441 \n",
+ " H2OAutoML \n",
+ " APSFailure \n",
+ " 0.991928 \n",
+ " \n",
+ " \n",
+ " 312 \n",
+ " AutoGluon(B) \n",
+ " APSFailure \n",
+ " 0.992441 \n",
+ " RandomForest \n",
+ " APSFailure \n",
+ " 0.991563 \n",
+ " \n",
+ " \n",
+ " 416 \n",
+ " AutoGluon(B) \n",
+ " APSFailure \n",
+ " 0.992441 \n",
+ " TPOT \n",
+ " APSFailure \n",
+ " 0.990333 \n",
+ " \n",
+ " \n",
+ " 520 \n",
+ " AutoGluon(B) \n",
+ " APSFailure \n",
+ " 0.992441 \n",
+ " TunedRandomForest \n",
+ " APSFailure \n",
+ " 0.991732 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework task result framework_other task_other \\\n",
+ "104 AutoGluon(B) APSFailure 0.992441 GAMA(B) APSFailure \n",
+ "208 AutoGluon(B) APSFailure 0.992441 H2OAutoML APSFailure \n",
+ "312 AutoGluon(B) APSFailure 0.992441 RandomForest APSFailure \n",
+ "416 AutoGluon(B) APSFailure 0.992441 TPOT APSFailure \n",
+ "520 AutoGluon(B) APSFailure 0.992441 TunedRandomForest APSFailure \n",
+ "\n",
+ " result_other \n",
+ "104 0.990140 \n",
+ "208 0.991928 \n",
+ "312 0.991563 \n",
+ "416 0.990333 \n",
+ "520 0.991732 "
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "result = data[[\"framework\", \"task\", \"result\"]]\n",
+ "cross = result.join(result, how=\"cross\", rsuffix=\"_other\")\n",
+ "cross = cross[(cross[\"framework\"] != cross[\"framework_other\"]) & (cross[\"task\"] == cross[\"task_other\"])]\n",
+ "cross.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "597bc164",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def win_and_loss(data):\n",
+ " best_score = data[[\"result\", \"result_other\"]].max(axis=1)\n",
+ " return pd.Series(dict(\n",
+ " win= sum(data[\"result\"] - data[\"result_other\"] > best_score * 0.001),\n",
+ " loss= sum(data[\"result_other\"] - data[\"result\"] > best_score * 0.001),\n",
+ " tie= sum(abs(data[\"result\"] - data[\"result_other\"]) < best_score * 0.001)\n",
+ " ))\n",
+ "# cross.groupby([\"framework\", \"framework_other\"], as_index=False).apply(lambda df: sum(df[\"result\"] > df[\"result_other\"]))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "58ce5a61",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " framework_other \n",
+ " win \n",
+ " loss \n",
+ " tie \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 78 \n",
+ " autosklearn2 \n",
+ " lightautoml \n",
+ " 35 \n",
+ " 29 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " 89 \n",
+ " flaml \n",
+ " mljarsupervised(B) \n",
+ " 53 \n",
+ " 48 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " 26 \n",
+ " H2OAutoML \n",
+ " autosklearn2 \n",
+ " 28 \n",
+ " 29 \n",
+ " 16 \n",
+ " \n",
+ " \n",
+ " 59 \n",
+ " TunedRandomForest \n",
+ " mljarsupervised(B) \n",
+ " 26 \n",
+ " 75 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " 18 \n",
+ " GAMA(B) \n",
+ " lightautoml \n",
+ " 45 \n",
+ " 56 \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " framework framework_other win loss tie\n",
+ "78 autosklearn2 lightautoml 35 29 7\n",
+ "89 flaml mljarsupervised(B) 53 48 4\n",
+ "26 H2OAutoML autosklearn2 28 29 16\n",
+ "59 TunedRandomForest mljarsupervised(B) 26 75 3\n",
+ "18 GAMA(B) lightautoml 45 56 5"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "wins_and_losses = cross.groupby([\"framework\", \"framework_other\"], as_index=False).apply(win_and_loss)\n",
+ "wins_and_losses.sample(5)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "e6ad09d4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "wins_and_losses[\"wl_str\"] = wins_and_losses.apply(lambda r: f\"{r['win']}/{r['loss']}/{r['tie']}\", axis=1)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "aca651ad",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " framework_other \n",
+ " AutoGluon(B) \n",
+ " autosklearn \n",
+ " autosklearn2 \n",
+ " flaml \n",
+ " GAMA(B) \n",
+ " H2OAutoML \n",
+ " lightautoml \n",
+ " mljarsupervised(B) \n",
+ " RandomForest \n",
+ " TPOT \n",
+ " TunedRandomForest \n",
+ " \n",
+ " \n",
+ " framework \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " AutoGluon(B) \n",
+ " NaN \n",
+ " 78/21/7 \n",
+ " 49/11/11 \n",
+ " 72/26/9 \n",
+ " 75/19/10 \n",
+ " 73/21/12 \n",
+ " 72/23/9 \n",
+ " 69/29/6 \n",
+ " 93/7/4 \n",
+ " 87/11/6 \n",
+ " 91/8/5 \n",
+ " \n",
+ " \n",
+ " autosklearn \n",
+ " 21/78/7 \n",
+ " NaN \n",
+ " 20/41/12 \n",
+ " 37/63/7 \n",
+ " 57/41/7 \n",
+ " 33/60/13 \n",
+ " 38/64/7 \n",
+ " 42/58/4 \n",
+ " 78/20/7 \n",
+ " 73/29/4 \n",
+ " 73/25/6 \n",
+ " \n",
+ " \n",
+ " autosklearn2 \n",
+ " 11/49/11 \n",
+ " 41/20/12 \n",
+ " NaN \n",
+ " 33/32/9 \n",
+ " 45/19/7 \n",
+ " 29/28/16 \n",
+ " 35/29/7 \n",
+ " 31/36/4 \n",
+ " 60/7/4 \n",
+ " 59/7/5 \n",
+ " 58/8/5 \n",
+ " \n",
+ " \n",
+ " flaml \n",
+ " 26/72/9 \n",
+ " 63/37/7 \n",
+ " 32/33/9 \n",
+ " NaN \n",
+ " 54/42/8 \n",
+ " 51/48/11 \n",
+ " 47/55/4 \n",
+ " 53/48/4 \n",
+ " 90/12/3 \n",
+ " 76/24/5 \n",
+ " 86/16/3 \n",
+ " \n",
+ " \n",
+ " GAMA(B) \n",
+ " 19/75/10 \n",
+ " 41/57/7 \n",
+ " 19/45/7 \n",
+ " 42/54/8 \n",
+ " NaN \n",
+ " 35/64/6 \n",
+ " 45/56/5 \n",
+ " 45/56/6 \n",
+ " 74/25/5 \n",
+ " 79/22/6 \n",
+ " 73/26/6 \n",
+ " \n",
+ " \n",
+ " H2OAutoML \n",
+ " 21/73/12 \n",
+ " 60/33/13 \n",
+ " 28/29/16 \n",
+ " 48/51/11 \n",
+ " 64/35/6 \n",
+ " NaN \n",
+ " 51/51/7 \n",
+ " 44/55/6 \n",
+ " 88/11/5 \n",
+ " 84/20/3 \n",
+ " 87/15/3 \n",
+ " \n",
+ " \n",
+ " lightautoml \n",
+ " 23/72/9 \n",
+ " 64/38/7 \n",
+ " 29/35/7 \n",
+ " 55/47/4 \n",
+ " 56/45/5 \n",
+ " 51/51/7 \n",
+ " NaN \n",
+ " 47/52/7 \n",
+ " 81/17/8 \n",
+ " 75/28/4 \n",
+ " 78/21/5 \n",
+ " \n",
+ " \n",
+ " mljarsupervised(B) \n",
+ " 29/69/6 \n",
+ " 58/42/4 \n",
+ " 36/31/4 \n",
+ " 48/53/4 \n",
+ " 56/45/6 \n",
+ " 55/44/6 \n",
+ " 52/47/7 \n",
+ " NaN \n",
+ " 79/23/2 \n",
+ " 77/28/2 \n",
+ " 75/26/3 \n",
+ " \n",
+ " \n",
+ " RandomForest \n",
+ " 7/93/4 \n",
+ " 20/78/7 \n",
+ " 7/60/4 \n",
+ " 12/90/3 \n",
+ " 25/74/5 \n",
+ " 11/88/5 \n",
+ " 17/81/8 \n",
+ " 23/79/2 \n",
+ " NaN \n",
+ " 36/64/5 \n",
+ " 24/67/22 \n",
+ " \n",
+ " \n",
+ " TPOT \n",
+ " 11/87/6 \n",
+ " 29/73/4 \n",
+ " 7/59/5 \n",
+ " 24/76/5 \n",
+ " 22/79/6 \n",
+ " 20/84/3 \n",
+ " 28/75/4 \n",
+ " 28/77/2 \n",
+ " 64/36/5 \n",
+ " NaN \n",
+ " 58/44/2 \n",
+ " \n",
+ " \n",
+ " TunedRandomForest \n",
+ " 8/91/5 \n",
+ " 25/73/6 \n",
+ " 8/58/5 \n",
+ " 16/86/3 \n",
+ " 26/73/6 \n",
+ " 15/87/3 \n",
+ " 21/78/5 \n",
+ " 26/75/3 \n",
+ " 67/24/22 \n",
+ " 44/58/2 \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ "framework_other AutoGluon(B) autosklearn autosklearn2 flaml GAMA(B) \\\n",
+ "framework \n",
+ "AutoGluon(B) NaN 78/21/7 49/11/11 72/26/9 75/19/10 \n",
+ "autosklearn 21/78/7 NaN 20/41/12 37/63/7 57/41/7 \n",
+ "autosklearn2 11/49/11 41/20/12 NaN 33/32/9 45/19/7 \n",
+ "flaml 26/72/9 63/37/7 32/33/9 NaN 54/42/8 \n",
+ "GAMA(B) 19/75/10 41/57/7 19/45/7 42/54/8 NaN \n",
+ "H2OAutoML 21/73/12 60/33/13 28/29/16 48/51/11 64/35/6 \n",
+ "lightautoml 23/72/9 64/38/7 29/35/7 55/47/4 56/45/5 \n",
+ "mljarsupervised(B) 29/69/6 58/42/4 36/31/4 48/53/4 56/45/6 \n",
+ "RandomForest 7/93/4 20/78/7 7/60/4 12/90/3 25/74/5 \n",
+ "TPOT 11/87/6 29/73/4 7/59/5 24/76/5 22/79/6 \n",
+ "TunedRandomForest 8/91/5 25/73/6 8/58/5 16/86/3 26/73/6 \n",
+ "\n",
+ "framework_other H2OAutoML lightautoml mljarsupervised(B) RandomForest \\\n",
+ "framework \n",
+ "AutoGluon(B) 73/21/12 72/23/9 69/29/6 93/7/4 \n",
+ "autosklearn 33/60/13 38/64/7 42/58/4 78/20/7 \n",
+ "autosklearn2 29/28/16 35/29/7 31/36/4 60/7/4 \n",
+ "flaml 51/48/11 47/55/4 53/48/4 90/12/3 \n",
+ "GAMA(B) 35/64/6 45/56/5 45/56/6 74/25/5 \n",
+ "H2OAutoML NaN 51/51/7 44/55/6 88/11/5 \n",
+ "lightautoml 51/51/7 NaN 47/52/7 81/17/8 \n",
+ "mljarsupervised(B) 55/44/6 52/47/7 NaN 79/23/2 \n",
+ "RandomForest 11/88/5 17/81/8 23/79/2 NaN \n",
+ "TPOT 20/84/3 28/75/4 28/77/2 64/36/5 \n",
+ "TunedRandomForest 15/87/3 21/78/5 26/75/3 67/24/22 \n",
+ "\n",
+ "framework_other TPOT TunedRandomForest \n",
+ "framework \n",
+ "AutoGluon(B) 87/11/6 91/8/5 \n",
+ "autosklearn 73/29/4 73/25/6 \n",
+ "autosklearn2 59/7/5 58/8/5 \n",
+ "flaml 76/24/5 86/16/3 \n",
+ "GAMA(B) 79/22/6 73/26/6 \n",
+ "H2OAutoML 84/20/3 87/15/3 \n",
+ "lightautoml 75/28/4 78/21/5 \n",
+ "mljarsupervised(B) 77/28/2 75/26/3 \n",
+ "RandomForest 36/64/5 24/67/22 \n",
+ "TPOT NaN 58/44/2 \n",
+ "TunedRandomForest 44/58/2 NaN "
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "win_loss_table = wins_and_losses.pivot(index=\"framework\", columns=\"framework_other\", values=\"wl_str\")\n",
+ "framework_order = sorted(win_loss_table.columns, key=lambda s: s.lower())\n",
+ "win_loss_table[framework_order].loc[framework_order]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "62a82e83",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "table = win_loss_table[framework_order].loc[framework_order]\n",
+ "tex = table.style.to_latex().replace(\"_\", r\"\\_\").replace(\"nan\", \"-\")\n",
+ "\n",
+ "with open(\"win_loss_table.tex\", \"w\") as fh:\n",
+ " fh.write(tex)\n",
+ " #fh.write(\"\\n\".join(new_header + body + footer))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "98665176",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "table = win_loss_table[framework_order].loc[framework_order]\n",
+ "tex = table.style.to_latex().replace(\"_\", r\"\\_\").replace(\"nan\", \"-\")\n",
+ "\n",
+ "# # the headers will be too wide to fit a page, we rotate them:\n",
+ "old_header, body = tex.splitlines()[:3], tex.splitlines()[3:]\n",
+ "new_header = [\n",
+ " r\"\\footnotesize\",\n",
+ " r\"\\begin{landscape}\",\n",
+ " r\"\\begin{table}\",\n",
+ " r\"\\tiny\",\n",
+ " r\"\\begin{tabular}{r\" + \"r\" * len(table.columns) + \"}\",\n",
+ " r\"\\toprule\",\n",
+ " \" framework A\" + \"\".join([f\"& \\\\rotatebox[origin=c]{{-90}}{{{framework}}}\" for framework in table.columns]) + r\"\\\\\",\n",
+ " #\" & \\ \\ framework B\" + \"\".join([f\"& {framework}\\ \\ \" for framework in table.columns]) + r\"\\\\\",\n",
+ " \" framework B \" + \"& \" * len(table.columns) + r\"\\\\\",\n",
+ " r\"\\midrule\",\n",
+ "]\n",
+ "*body, footer = body\n",
+ "caption = f\"\\\\caption{{Results of direct comparison between frameworks on a one hour budget across all suites. Each cell denotes the wins, losses, and ties of the row-framework over the column-framework (e.g., AutoGluon(B) wins from autosklearn 78 times). A tie is recorded if the relative difference is smaller than 0.1 percent of the greater score. No statistical tests are used.}}\"\n",
+ "label = f\"\\\\label{{tab:head-to-head}}\"\n",
+ "footer = [r\"\\bottomrule\", footer, caption, label, r\"\\end{table}\", r\"\\end{landscape}\",]\n",
+ "\n",
+ "with open(\"win_loss_table.tex\", \"w\") as fh:\n",
+ " fh.write(\"\\n\".join(new_header + body + footer))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "f3d54cea",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/2435835941.py:4: FutureWarning: The default value of numeric_only in DataFrameGroupBy.mean is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " data = data.groupby([\"framework\", \"task\", \"constraint\"], as_index=False).mean()\n"
+ ]
+ }
+ ],
+ "source": [
+ "data = get_results(\"all\", budget=\"1h8c_gp3\")\n",
+ "data = impute_values(data, strategy=\"constantpredictor\")\n",
+ "data = data[~data.framework.isin([\"mlr3automl\", \"constantpredictor\"])]\n",
+ "data = data.groupby([\"framework\", \"task\", \"constraint\"], as_index=False).mean()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "id": "c7b87f88",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Find max per task to have a reference point for `champions'\n",
+ "max_per_task = data.groupby([\"task\"]).max()[\"result\"]\n",
+ "data[\"max_for_task\"] = data[\"task\"].apply(lambda t: max_per_task.loc[t])\n",
+ "data[\"is_champion\"] = abs(data[\"max_for_task\"] - data[\"result\"]) < abs(data[\"max_for_task\"] * 0.001)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "726c6a98",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/g5/g4mmsb1s43d9g0hs5lb90f140000gp/T/ipykernel_28483/3979392694.py:1: FutureWarning: The default value of numeric_only in DataFrameGroupBy.sum is deprecated. In a future version, numeric_only will default to False. Either specify numeric_only or select only columns which should be valid for the function.\n",
+ " data.groupby(\"framework\").sum()[\"is_champion\"]\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "framework\n",
+ "AutoGluon(B) 55\n",
+ "GAMA(B) 11\n",
+ "H2OAutoML 14\n",
+ "RandomForest 6\n",
+ "TPOT 5\n",
+ "TunedRandomForest 7\n",
+ "autosklearn 11\n",
+ "autosklearn2 10\n",
+ "flaml 14\n",
+ "lightautoml 16\n",
+ "mljarsupervised(B) 16\n",
+ "Name: is_champion, dtype: int64"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "data.groupby(\"framework\").sum()[\"is_champion\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "99fee359",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.9.16"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}