diff --git a/assignments/assignment_3/assign_3_template.ipynb b/assignments/assignment_3/assign_3_template.ipynb index 8cb2de0..abd847a 100644 --- a/assignments/assignment_3/assign_3_template.ipynb +++ b/assignments/assignment_3/assign_3_template.ipynb @@ -49,6 +49,7 @@ }, "outputs": [], "source": [ + "import datetime # timestamp for submission file\n", "from interpret.glassbox import ExplainableBoostingClassifier # interpret ebm class\n", "from interpret.perf import ROC # ROC measure for ebm\n", "import itertools # for cartesian product of parameters\n", @@ -1204,7 +1205,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "96994093", "metadata": {}, "outputs": [ @@ -2213,6 +2214,623 @@ "Grid search run 311/500:\n", "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 312/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 313/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 314/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 315/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 316/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 317/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 318/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 319/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 320/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 321/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 322/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 323/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 324/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 325/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 326/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 327/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 328/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 329/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 330/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 331/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 332/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 333/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 334/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 335/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 336/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 337/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 338/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 339/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 340/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 341/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 342/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 343/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 344/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 345/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 346/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 347/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 348/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 349/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 350/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 351/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 352/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 353/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 354/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 355/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 356/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 357/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 358/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 359/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 360/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 361/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 362/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 363/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 364/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 365/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 366/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 367/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 368/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 369/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 370/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 371/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 372/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 373/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 374/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 375/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 376/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 377/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 378/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 379/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 380/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 381/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 382/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 383/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 384/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 385/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 386/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 387/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 388/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 389/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 390/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 391/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 392/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 393/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 394/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 395/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 396/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 397/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 398/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 399/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 400/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 401/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 402/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 403/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 404/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 405/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 406/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 407/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 408/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 409/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 410/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 411/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 412/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 413/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 414/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 415/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 416/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 417/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 418/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 419/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 420/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 421/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 422/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 423/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 424/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 425/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 426/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 427/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 428/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 429/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 430/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 431/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 432/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 433/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 434/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 435/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 436/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 437/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 438/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 439/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 440/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 441/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 442/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 443/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 444/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 445/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 446/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 447/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 448/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 449/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 450/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 451/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 452/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 453/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 454/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 455/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 456/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 457/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 458/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 459/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 460/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 461/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 462/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 463/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 464/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 465/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 466/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 467/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 468/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 469/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 470/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 471/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 472/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 473/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 474/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 475/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 476/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 477/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 478/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 479/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 480/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 481/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 482/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 483/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 484/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 485/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 486/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 487/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 488/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 489/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 490/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 491/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 492/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 493/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---------- ----------\n", + "Grid search run 494/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 495/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n", + "---------- ----------\n", + "Grid search run 496/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n", + "---------- ----------\n", + "Grid search run 497/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 498/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 499/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n", + "---------- ----------\n", + "Grid search run 500/500:\n", + "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n", + "---------- ----------\n", + "EBM training completed in 21446.84 s.\n" + ] } ], "source": [ @@ -2239,10 +2857,313 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "id": "192a0792", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
max_binsmax_interaction_binsinteractionsouter_bagsinner_bagslearning_ratevalidation_sizemin_samples_leafmax_leavesfeaturesaucairearly_stopping_roundsn_jobsrandom_state
0512165400.0500.2513[property_value_std, debt_to_income_ratio_std,...0.8217210.718130100.04.012345.0
1128325800.0010.2525[term_360, income_std, loan_amount_std, no_int...0.7296830.860835100.04.012345.0
2512165400.0010.5013[term_360, debt_to_income_ratio_missing, prope...0.8159630.738584100.04.012345.0
3128645440.0500.5015[conforming, no_intro_rate_period_std, debt_to...0.8209920.721436100.04.012345.0
45126415400.0500.10103[conforming, term_360, loan_to_value_ratio_std...0.8255490.718586100.04.012345.0
................................................
495256325840.0100.50101[loan_to_value_ratio_std, term_360, debt_to_in...0.5000001.000000100.04.012345.0
4965123215840.0010.10103[property_value_std, debt_to_income_ratio_miss...0.8207740.727760100.04.012345.0
49725616151200.0500.2553[debt_to_income_ratio_missing, property_value_...0.8185440.719929100.04.012345.0
49812864101200.0010.50103[loan_amount_std, intro_rate_period_std, debt_...0.8203930.726190100.04.012345.0
4995123251240.0010.1053[no_intro_rate_period_std, loan_amount_std, co...0.6613440.993672100.04.012345.0
\n", + "

500 rows × 15 columns

\n", + "
" + ], + "text/plain": [ + " max_bins max_interaction_bins interactions outer_bags inner_bags \\\n", + "0 512 16 5 4 0 \n", + "1 128 32 5 8 0 \n", + "2 512 16 5 4 0 \n", + "3 128 64 5 4 4 \n", + "4 512 64 15 4 0 \n", + ".. ... ... ... ... ... \n", + "495 256 32 5 8 4 \n", + "496 512 32 15 8 4 \n", + "497 256 16 15 12 0 \n", + "498 128 64 10 12 0 \n", + "499 512 32 5 12 4 \n", + "\n", + " learning_rate validation_size min_samples_leaf max_leaves \\\n", + "0 0.050 0.25 1 3 \n", + "1 0.001 0.25 2 5 \n", + "2 0.001 0.50 1 3 \n", + "3 0.050 0.50 1 5 \n", + "4 0.050 0.10 10 3 \n", + ".. ... ... ... ... \n", + "495 0.010 0.50 10 1 \n", + "496 0.001 0.10 10 3 \n", + "497 0.050 0.25 5 3 \n", + "498 0.001 0.50 10 3 \n", + "499 0.001 0.10 5 3 \n", + "\n", + " features auc air \\\n", + "0 [property_value_std, debt_to_income_ratio_std,... 0.821721 0.718130 \n", + "1 [term_360, income_std, loan_amount_std, no_int... 0.729683 0.860835 \n", + "2 [term_360, debt_to_income_ratio_missing, prope... 0.815963 0.738584 \n", + "3 [conforming, no_intro_rate_period_std, debt_to... 0.820992 0.721436 \n", + "4 [conforming, term_360, loan_to_value_ratio_std... 0.825549 0.718586 \n", + ".. ... ... ... \n", + "495 [loan_to_value_ratio_std, term_360, debt_to_in... 0.500000 1.000000 \n", + "496 [property_value_std, debt_to_income_ratio_miss... 0.820774 0.727760 \n", + "497 [debt_to_income_ratio_missing, property_value_... 0.818544 0.719929 \n", + "498 [loan_amount_std, intro_rate_period_std, debt_... 0.820393 0.726190 \n", + "499 [no_intro_rate_period_std, loan_amount_std, co... 0.661344 0.993672 \n", + "\n", + " early_stopping_rounds n_jobs random_state \n", + "0 100.0 4.0 12345.0 \n", + "1 100.0 4.0 12345.0 \n", + "2 100.0 4.0 12345.0 \n", + "3 100.0 4.0 12345.0 \n", + "4 100.0 4.0 12345.0 \n", + ".. ... ... ... \n", + "495 100.0 4.0 12345.0 \n", + "496 100.0 4.0 12345.0 \n", + "497 100.0 4.0 12345.0 \n", + "498 100.0 4.0 12345.0 \n", + "499 100.0 4.0 12345.0 \n", + "\n", + "[500 rows x 15 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "ebm_grid_frame" ] @@ -2257,12 +3178,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "deca0f44", "metadata": { "scrolled": true }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAssAAAK9CAYAAADScyEHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAABwlElEQVR4nO3deXwV1f3/8fdNyEKCCUhCQjAQloiibCJEZFE0Ci641AVwYfkCtpSKmqI/cQFRK62tlBahtBpEKiLaUkuVojZlUUSDLFVckBACUkhIAklIAgkk8/sjzYVL7iQ3y71zl9fz8ZjHY3Jm5uRMhugn537mc2yGYRgCAAAAUEeQ1QMAAAAAvBXBMgAAAGCCYBkAAAAwQbAMAAAAmCBYBgAAAEwQLAMAAAAmCJYBAAAAEwTLAAAAgAmCZQAAAMAEwTIAwGW//vWv1a1bNwUHB6tfv35WDwcA3I5gGYDXWrx4sWw2m1JSUkzPsdls+tnPfmb/OicnRzabzb4FBQXp/PPP1w033KAtW7Z4YtjN9u2338pmsyk8PFxFRUVOz0lKStLNN9/s9NgXX3whm82mZcuW1Tm2c+dO3XfffUpMTFRYWJjOP/98paam6rXXXlNVVVW94/rwww/12GOPaciQIXrttdf0wgsvNPbWGmXixIkOz/LsLTw83H7ehg0b6hw///zzdcUVV2jFihV1+k1KSpLNZlNqaqrT7/vKK6/Y+/niiy/cdn8AfEMrqwcAAGZWrFihpKQkZWZmKisrSz169HD52nHjxunGG29UVVWVvv/+ey1evFgjRozQ1q1b1bt3bzeOuvneeOMNxcfH69ixY/rLX/6iKVOmtEi/r776qn7yk58oLi5O999/v5KTk3X8+HFlZGRo8uTJOnz4sJ544gnT6//9738rKChI6enpCg0NbZExNSQsLEyvvvpqnfbg4OA6bTNmzNDAgQMlSYWFhVq1apXuu+8+FRUVafr06Q7nhoeHa/369crNzVV8fLzDsRUrVig8PFwnT55swTsB4KsIlgF4pX379unTTz/V6tWr9eMf/1grVqzQnDlzXL7+sssu03333Wf/etiwYbrhhhv0hz/8QYsXL3bHkFuEYRh68803dc8992jfvn1asWJFiwTLn332mX7yk59o8ODBWrt2rc477zz7sYcfflhffPGFdu3aVW8fR44cUevWrVssUDYMQydPnlTr1q1Nz2nVqpXDc6zPsGHDdOedd9q/njZtmrp166Y333yzTrA8ZMgQbd26VatWrdJDDz1kbz948KA+/vhj3X777frrX//ayDsC4I9IwwDglVasWKF27drppptu0p133un04/TGGDZsmCRp79699Z5Xm8Lw+uuv1zn2wQcfyGaz6b333pMkHT9+XA8//LCSkpIUFhamDh066LrrrtP27dubPM7NmzcrJydHY8eO1dixY7Vp0yYdPHiwyf3Vmjt3rmw2m1asWOEQKNe6/PLLNXHiRNPrbTabXnvtNZWVldlTFGrTPE6fPq3nnntO3bt3V1hYmJKSkvTEE0+ooqLCoY/a1JEPPvhAl19+uVq3bq0//vGPzb43M6GhoWrXrp1atao7LxQeHq4f/ehHevPNNx3aV65cqXbt2mnkyJF1rsnNzdWkSZN0wQUXKCwsTB07dtStt96qnJwcd90CAC9AsAzAK61YsUI/+tGPFBoaqnHjxmnPnj3aunVrk/urDWjatWtX73mXX365unXrprfffrvOsVWrVjkEUj/5yU/0hz/8QXfccYcWL16smTNnqnXr1vr222+bPM4VK1aoe/fuGjhwoEaPHq2IiAitXLmyyf1JUnl5uTIyMjR8+HB17ty5SX38+c9/1rBhwxQWFqY///nP+vOf/6zhw4dLkqZMmaLZs2frsssu029/+1tdddVVmjdvnsaOHVunn927d2vcuHG67rrr9Lvf/c6llwQLCgrqbCUlJXXOO378uP34999/r2eeeUa7du3ShAkTnPZ7zz33KDMz0+EPqDfffFN33nmnQkJC6px/xx136G9/+5smTZqkxYsXa8aMGTp+/LgOHDjQ4D0A8GEGAHiZL774wpBkfPTRR4ZhGEZ1dbVxwQUXGA899FCdcyUZ06dPt3+9b98+Q5Ixd+5cIz8/38jNzTU+/vhjY+DAgYYk45133mnw+8+aNcsICQkxjh49am+rqKgw2rZta/zf//2fvS06OtrhezdXZWWl0b59e+PJJ5+0t91zzz1G375965zbpUsX46abbnLaz9atWw1JxmuvvWYYhmH85z//MSQ5/fk1xoQJE4zIyEiHtp07dxqSjClTpji0z5w505Bk/Pvf/3YYsyRj3bp1Ln8/SU63kSNH2s9bv36903OCgoKMX/ziF3X6rf3ZnT592oiPjzeee+45wzAM45tvvjEkGRs3bjRee+01Q5KxdetWwzAM49ixY4Yk49e//rVrPywAfoOZZQBeZ8WKFYqLi9OIESMk1aQAjBkzRm+99VaDFRtqzZkzR7GxsYqPj9ewYcP07bff6qWXXnLIaTUzZswYnTp1SqtXr7a3ffjhhyoqKtKYMWPsbW3bttXnn3+uQ4cONfIOnfvnP/+pwsJCjRs3zt42btw4/ec//9HXX3/d5H5rZ2GdpV8019q1ayVJaWlpDu0///nPJUnvv/++Q3vXrl2dpjiYCQ8P10cffVRn++Uvf1nn3NmzZ9uPr1q1SuPGjdOTTz6p3/3ud077Dg4O1t13322fuV+xYoUSExPtKTtnq83V3rBhg44dO+by+AH4PoJlAF6lqqpKb731lkaMGKF9+/YpKytLWVlZSklJUV5enjIyMlzq54EHHtBHH32kf/zjH3rkkUd04sQJlwPtvn376qKLLtKqVavsbatWrVJMTIyuueYae9uLL76oXbt2KTExUYMGDdIzzzyj7Ozsxt3wWd544w117dpVYWFh9vvu3r27IiIimpSzbbPZJElRUVGSatIUWtr+/fsVFBRUp1JJfHy82rZtq/379zu0d+3atVH9BwcHKzU1tc7mLH2jd+/e9uN333233njjDd188816/PHHlZ+f77T/e+65R998843+85//6M0339TYsWPtP7ezhYWF6Ve/+pX++c9/Ki4uTsOHD9eLL76o3NzcRt0PAN9DsAzAq/z73//W4cOH9dZbbyk5Odm+3X333ZLkctCYnJys1NRU3XzzzZo/f74eeeQRPf744y7XzR0zZozWr1+vgoICVVRUaM2aNbrjjjscXha7++67lZ2drYULFyohIUG//vWvdckll+if//xno++7pKRE//jHP7Rv3z6H++7Vq5fKy8v15ptvyjAM+/nh4eE6ceKE077Ky8vt50hSjx491KpVK3311VeNHpernAWYztRX+cIdrr32Wp08eVKZmZlOj6ekpKh79+56+OGHtW/fPt1zzz2mfT388MP6/vvvNW/ePIWHh+vpp5/WxRdfrB07drhr+AC8AMEyAK+yYsUKdejQQe+8806dbdy4cfrb3/5mGiTW58knn9R5552np556yqXzx4wZo9OnT+uvf/2r/vnPf6qkpMTpC2sdO3bUT3/6U7377rvat2+f2rdvr1/84heNHt/q1at18uRJ/eEPf6hz388//7z279+vzZs328/v0qWLvv/+e6d97d69236OJEVEROiaa67Rpk2b9MMPPzR6bPXp0qWLqqurtWfPHof2vLw8FRUV2cdgldOnT0uSSktLTc8ZN26cNmzYoIsvvrjBFw67d++un//85/rwww+1a9cuVVZW6qWXXmrJIQPwMtRZBuA1Tpw4odWrV+uuu+5ymluckJCglStXas2aNQ65w65o27atfvzjH+vFF1/Uzp07GwyKLr74YvXu3VurVq1SXFycOnbsaK/+INWki5SWlio6Otre1qFDByUkJDiUTKutztC5c2dFRESYfr833nhD3bp1009+8pM6xyoqKvTLX/5SK1as0NChQyVJN954oz788EO9++67uu222xzOffXVV9WhQwdddtll9vY5c+YoIyND999/v9577z21adPG4Xts27at3soRZm688UY98cQTWrBggUMZuPnz50uSbrrppkb119Jqy/z17dvX9JwpU6YoODi43pUiy8vLFRQU5LByYPfu3XXeeefVKZEHwL8QLAPwGmvWrNHx48d1yy23OD1+xRVXKDY2VitWrGh0sCxJDz30kBYsWKBf/vKXeuuttxo8f8yYMZo9e7bCw8M1efJkBQWd+TDu+PHjuuCCC3TnnXeqb9++atOmjf71r39p69atDjONL7/8subOnav169fr6quvdvp9Dh06pPXr12vGjBlOj4eFhWnkyJF655139Pvf/14hISF64IEHtHTpUt111136v//7P/Xv39++at2uXbu0fPlyh8VDrrzySi1atEg//elPddFFFzms4LdhwwatWbNGzz//vIs/yTP69u2rCRMm6E9/+pOKiop01VVXKTMzU6+//rpuu+02+0uaTXX69Gm98cYbTo/dfvvtioyMtH/98ccf21fdO3r0qNasWaONGzdq7Nixuuiii0y/R5cuXfTMM8/UO47vv/9e1157re6++2716tVLrVq10t/+9jfl5eU5/cQBgB+xuhwHANQaPXq0ER4ebpSVlZmeM3HiRCMkJMQoKCgwDMO8dJxZia+JEycawcHBRlZWVoPj2bNnj70M2SeffOJwrKKiwnj00UeNvn37Guedd54RGRlp9O3b11i8eLHDeXPmzDEkGevXrzf9Pi+99JIhycjIyDA9Z9myZYYk4+9//7u97dixY8YjjzxidO3a1QgJ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norXCJadIFj2UlVV0scf1+wPGyYFB1s7HgBewx//yPAHH+/J1/YDx5pdZ9kfF+tB8xEsW4hg2UuVlUlt2tTsl5ZKkfwHEwD8mT8u1oOW46l4zStylhctWqSkpCSFh4crJSVFmZmZpudeffXVstlsdbabbrrJfo5hGJo9e7Y6duyo1q1bKzU1VXv27PHErQCAX8jOL9X63UcovwZL+eNiPfA9lgfLq1atUlpamubMmaPt27erb9++GjlypI4cOeL0/NWrV+vw4cP2bdeuXQoODtZdd91lP+fFF1/U73//ey1ZskSff/65IiMjNXLkSJ08edJTtwUAPqmovFLj0zN1zUsbNem1rRrxmw0an57JinjwOH9crAe+yfJgef78+Zo6daomTZqkXr16acmSJYqIiNDSpUudnn/++ecrPj7evn300UeKiIiwB8uGYWjBggV66qmndOutt6pPnz5avny5Dh06pHfffdeDdwYAvsfZTN4nWfm6N/0zghN4VEN1tNf857/8m4RHWBosV1ZWatu2bUpNTbW3BQUFKTU1VVu2bHGpj/T0dI0dO1aR/8tf3bdvn3Jzcx36jI6OVkpKimmfFRUVKikpcdgAINCYzeRVG9Ku/5YwywyPaqiO9m8/2sO/SXiEpcFyQUGBqqqqFBcX59AeFxen3NzcBq/PzMzUrl27NGXKFHtb7XWN6XPevHmKjo62b4mJiY29FQDweQ3N5En154uS54yWZFZH+1zkMMPdLE/DaI709HT17t1bgwYNalY/s2bNUnFxsX374YcfWmiEAOA7GprJk5zni5LnDHdxtrDNuchhhrtZGizHxMQoODhYeXl5Du15eXmKj4+v99qysjK99dZbmjx5skN77XWN6TMsLExRUVEOG7xQSIj04os1Gyv4AS3O1Zk8ScopPBOYULEA7hIdEaLlkwdp/cyr9ch1yfWee/a/SaAlWRosh4aGasCAAcrIyLC3VVdXKyMjQ4MHD6732nfeeUcVFRW67777HNq7du2q+Ph4hz5LSkr0+eefN9gnvFxoqPToozVbaKjVowH8kiszeZKU1L7mPREqFsATusZEanSfhHrPqf03CbQ0y9Mw0tLS9Morr+j111/Xt99+q2nTpqmsrEyTJk2SJI0fP16zZs2qc116erpuu+02tW/f3qHdZrPp4Ycf1vPPP681a9boq6++0vjx45WQ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1K1bN9177706cOCA+27ETzXl+VRUVNRZmKl169b65JNPmtwn6nLHs6nF747nbdmyxeFZStLIkSPtz5LfG+s09GxqtcTvjd8HywUFBaqqqrKvCFgrLi5Oubm5DV6fmZmpXbt2acqUKQ7to0aN0vLly5WRkaFf/epX2rhxo2644QZVVVW16Pj9WVOezT333KNnn31WQ4cOVUhIiLp3766rr75aTzzxRJP7RF3ueDaSlJKSomXLlmndunX6wx/+oH379mnYsGE6fvy4W+/H3zTl+YwcOVLz58/Xnj17VF1drY8++kirV6/W4cOHm9wn6nLHs5H43bFKbm6u02dZUlKiEydO8HtjoYaejdRyvzd+Hyw3V3p6unr37q1BgwY5tI8dO1a33HKLevfurdtuu03vvfeetm7dqg0bNlgz0ACxYcMGvfDCC1q8eLG2b9+u1atX6/3339dzzz1n9dACnivP5oYbbtBdd92lPn36aOTIkVq7dq2Kior09ttvWzjywPC73/1OycnJuuiiixQaGqqf/exnmjRpkoKC+N+A1Vx5NvzuAI3XUr83fv9fyZiYGAUHBysvL8+hPS8vT/Hx8fVeW1ZWprfeekuTJ09u8Pt069ZNMTExysrKatZ4A0lTns3TTz+t+++/X1OmTFHv3r11++2364UXXtC8efNUXV3drOeNM9zxbJxp27atLrzwQn5vGqkpzyc2NlbvvvuuysrKtH//fn333Xdq06aNunXr1uQ+UZc7no0z/O54Rnx8vNNnGRUVpdatW/N7Y6GGno0zTf298ftgOTQ0VAMGDFBGRoa9rbq6WhkZGRo8eHC9177zzjuqqKjQfffd1+D3OXjwoAoLC9WxY8dmjzlQNOXZlJeX15kJCw4OliQZhtGs540z3PFsnCktLdXevXv5vWmk5vw7Dw8PV6dOnXT69Gn99a9/1a233trsPnGGO56NM/zueMbgwYMdnqUkffTRR/Znye+NdRp6Ns40+fem2a8I+oC33nrLCAsLM5YtW2Z88803xgMPPGC0bdvWyM3NNQzDMO6//37j8ccfr3Pd0KFDjTFjxtRpP378uDFz5kxjy5Ytxr59+4x//etfxmWXXWYkJycbJ0+edPv9+JPGPps5c+YY5513nrFy5UojOzvb+PDDD43u3bsbd999t8t9wjXueDY///nPjQ0bNhj79u0zNm/ebKSmphoxMTHGkSNHPH5/vq6xz+ezzz4z/vrXvxp79+41Nm3aZFxzzTVG165djWPHjrncJ1zjjmfD707LOH78uLFjxw5jx44dhiRj/vz5xo4dO4z9+/cbhmEYjz/+uHH//ffbz68tT/boo48a3377rbFo0SKnpeP4vWk+dzyblvq9CYhg2TAMY+HChUbnzp2N0NBQY9CgQcZnn31mP3bVVVcZEyZMcDj/u+++MyQZH374YZ2+ysvLjeuvv96IjY01QkJCjC5duhhTp07lF6OJGvNsTp06ZTzzzDNG9+7djfDwcCMxMdH46U9/6vA/lYb6hOta+tmMGTPG6NixoxEaGmp06tTJGDNmjJGVleXBO/IvjXk+GzZsMC6++GIjLCzMaN++vXH//fcb//3vfxvVJ1zX0s+G352WsX79ekNSna32eUyYMMG46qqr6lzTr18/IzQ01OjWrZvDmgu1+L1pPnc8m5b6vbEZhsnnowAAAECA8/ucZQAAAKCpCJYBAAAAEwTLAAAAgAmCZQAAAMAEwTIAAABggmAZAAAAMEGwDAAAAJggWAYAAABMECwDAAAAJgiWAcBPbNmyRcHBwbrpppsc2nNycmSz2bRz506Hr2u3888/X1dddZU+/vhjC0YNAN6NYBkA/ER6eroefPBBbdq0SYcOHWrw/H/96186fPiwNm3apISEBN18883Ky8vzwEgBwHcQLAOAHygtLdWqVas0bdo03XTTTVq2bFmD17Rv317x8fG69NJL9cQTT6ikpESff/65+wcLAD6EYBkA/MDbb7+tiy66SD179tR9992npUuXyjAMl649ceKEli9fLkkKDQ115zABwOe0snoAAIDmS09P13333SdJGjVqlIqLi7Vx40ZdffXVptdceeWVCgoKUnl5uQzD0IABA3Tttdd6aMQA4BuYWQYAH7d7925lZmZq3LhxkqRWrVppzJgxSk9Pr/e6VatWaceOHfrrX/+qHj16aNmyZQoJCfHEkAHAZzCzDAA+Lj09XadPn1ZCQoK9zTAMhYWF6eWXXza9LjExUcnJyUpOTtbp06d1++23a9euXQoLC/PEsAHAJzCzDAA+7PTp01q+fLleeukl7dy507795z//UUJCglauXOlSP3feeadatWqlxYsXu3nEAOBbCJYBwIe99957OnbsmCZPnqxLL73UYbvjjjsaTMWoZbPZNGPGDP3yl79UeXm5m0cNAL6DYBkAfFh6erpSU1MVHR1d59gdd9yhL774QiUlJS71NWHCBJ06dare1A0ACDQ2w9XaQgAAAECAYWYZAAAAMEGwDAAAAJggWAYAAABMECwDAAAAJgiWAQAAABMEywAAAIAJgmUAAADABMEyAAAAYIJgGQAAADBBsAwAAACYIFgGAAAATPx/gQY2R8qymNIAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "fig, ax = plt.subplots(figsize=(8,8))\n", "_ = ebm_grid_frame.plot(kind='scatter', x='air', y='auc', title='AIR vs. AUC for EBMs', ax=ax)\n", @@ -2283,10 +3215,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "363c0f63", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Best AUC: 0.7784 above 0.8 AIR (0.8145).\n", + "Remediated EBM retrained with AUC: 0.7784.\n" + ] + } + ], "source": [ "# extract new params dict from ebm_grid_frame\n", "rem_params = ebm_grid_frame.loc[ebm_grid_frame['air'] > 0.8].sort_values(by='auc', ascending=False).iloc[0, :].to_dict()\n", @@ -2322,10 +3263,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "8abd6d5f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Adverse impact ratio for Asian people vs. White people: 1.139\n", + "Adverse impact ratio for Black people vs. White people: 0.815\n", + "Adverse impact ratio for Females vs. Males: 0.954\n" + ] + } + ], "source": [ "# create a frame with remediated EBM predictions\n", "best_ebm_phat2 = pd.DataFrame(rem_ebm.predict_proba(valid[rem_x_names])[:, 1], columns=['phat']) \n", @@ -2360,10 +3311,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "972cef55", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "{'max_bins': 256,\n", + " 'max_interaction_bins': 32,\n", + " 'interactions': 15,\n", + " 'outer_bags': 8,\n", + " 'inner_bags': 4,\n", + " 'learning_rate': 0.001,\n", + " 'validation_size': 0.25,\n", + " 'min_samples_leaf': 5,\n", + " 'max_leaves': 5,\n", + " 'early_stopping_rounds': 100.0,\n", + " 'n_jobs': 4,\n", + " 'random_state': 12345}" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "rem_params" ] @@ -2378,14 +3351,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "f173ac4f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "['term_360',\n", + " 'debt_to_income_ratio_std',\n", + " 'no_intro_rate_period_std',\n", + " 'property_value_std',\n", + " 'income_std',\n", + " 'intro_rate_period_std',\n", + " 'debt_to_income_ratio_missing']" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "rem_x_names" ] }, + { + "cell_type": "markdown", + "id": "3aae893f", + "metadata": {}, + "source": [ + "#### Write submission file" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "fe28a2d8", + "metadata": {}, + "outputs": [], + "source": [ + "rem_ebm_submit = pd.DataFrame(rem_ebm.predict_proba(test[x_names])[:, 1], columns=['phat'])\n", + "rem_ebm_submit.to_csv('ph_rem_ebm_' + str(datetime.datetime.now().strftime(\"%Y_%m_%d_%H_%M_%S\") + '.csv'), \n", + " index=False)" + ] + }, { "cell_type": "markdown", "id": "35aaaa92", @@ -2396,10 +3406,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "id": "e978d190", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "All tasks completed in 22338.30 s.\n" + ] + } + ], "source": [ "toc = time.time() - tic\n", "print('All tasks completed in %.2f s.' % (toc))" diff --git a/assignments/final150.ipynb b/assignments/final150.ipynb deleted file mode 100644 index 000a1aa..0000000 --- a/assignments/final150.ipynb +++ /dev/null @@ -1,5388 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "37a0b94b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting interpret\n", - " Downloading interpret-0.4.2-py3-none-any.whl (1.4 kB)\n", - "Collecting interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2\n", - " Downloading interpret_core-0.4.2-py3-none-any.whl (11.6 MB)\n", - "\u001b[K |████████████████████████████████| 11.6 MB 6.5 MB/s eta 0:00:01\n", - "\u001b[?25hCollecting SALib>=1.3.3\n", - " Downloading salib-1.4.7-py3-none-any.whl (757 kB)\n", - "\u001b[K |████████████████████████████████| 757 kB 110.0 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: joblib>=0.11 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.1.0)\n", - "Requirement already satisfied: lime>=0.1.1.33 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.2.0.1)\n", - "Collecting skope-rules>=1.0.1\n", - " Downloading skope_rules-1.0.1-py3-none-any.whl (14 kB)\n", - "Collecting treeinterpreter>=0.2.2\n", - " Downloading treeinterpreter-0.2.3-py2.py3-none-any.whl (6.0 kB)\n", - "Requirement already satisfied: shap>=0.28.5 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.41.0)\n", - "Requirement already satisfied: dill>=0.2.5 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.3.6)\n", - "Requirement already satisfied: psutil>=5.6.2 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (5.9.5)\n", - "Requirement already satisfied: plotly>=3.8.1 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (5.6.0)\n", - "Requirement already satisfied: scipy>=0.18.1 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.7.3)\n", - "Requirement already satisfied: pandas>=0.19.2 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.4.2)\n", - "Requirement already satisfied: numpy<1.24.0,>=1.11.1 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.21.5)\n", - "Requirement already satisfied: scikit-learn>=0.18.1 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.0.2)\n", - "Requirement already satisfied: ipykernel>=4.10.0 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (6.9.1)\n", - "Requirement already satisfied: ipython>=5.5.0 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (8.2.0)\n", - "Collecting dash-cytoscape>=0.1.1\n", - " Downloading dash_cytoscape-0.3.0-py3-none-any.whl (3.6 MB)\n", - "\u001b[K |████████████████████████████████| 3.6 MB 123.6 MB/s eta 0:00:01\n", - "\u001b[?25hCollecting dash-core-components>=1.0.0\n", - " Downloading dash_core_components-2.0.0-py3-none-any.whl (3.8 kB)\n", - "Requirement already satisfied: requests>=2.19.0 in ./opt/anaconda3/lib/python3.9/site-packages (from interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.27.1)\n", - "Collecting dash-table>=4.1.0\n", - " Downloading dash_table-5.0.0-py3-none-any.whl (3.9 kB)\n", - "Collecting dash>=1.0.0\n", - " Downloading dash-2.10.2-py3-none-any.whl (10.3 MB)\n", - "\u001b[K |████████████████████████████████| 10.3 MB 170.0 MB/s eta 0:00:01\n", - "\u001b[?25hCollecting dash-html-components>=1.0.0\n", - " Downloading dash_html_components-2.0.0-py3-none-any.whl (4.1 kB)\n", - "Collecting gevent>=1.3.6\n", - " Downloading gevent-22.10.2-cp39-cp39-macosx_10_9_x86_64.whl (1.9 MB)\n", - "\u001b[K |████████████████████████████████| 1.9 MB 149.8 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: Flask<2.3.0,>=1.0.4 in ./opt/anaconda3/lib/python3.9/site-packages (from dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.1.2)\n", - "Requirement already satisfied: Werkzeug<2.3.0 in ./opt/anaconda3/lib/python3.9/site-packages (from dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.3)\n", - "Requirement already satisfied: click>=5.1 in ./opt/anaconda3/lib/python3.9/site-packages (from Flask<2.3.0,>=1.0.4->dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (8.0.4)\n", - "Requirement already satisfied: itsdangerous>=0.24 in ./opt/anaconda3/lib/python3.9/site-packages (from Flask<2.3.0,>=1.0.4->dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.1)\n", - "Requirement already satisfied: Jinja2>=2.10.1 in ./opt/anaconda3/lib/python3.9/site-packages (from Flask<2.3.0,>=1.0.4->dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.11.3)\n", - "Requirement already satisfied: zope.interface in ./opt/anaconda3/lib/python3.9/site-packages (from gevent>=1.3.6->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (5.4.0)\n", - "Requirement already satisfied: setuptools in ./opt/anaconda3/lib/python3.9/site-packages (from gevent>=1.3.6->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (67.8.0)\n", - "Collecting zope.event\n", - " Downloading zope.event-4.6-py2.py3-none-any.whl (6.8 kB)\n", - "Collecting greenlet>=2.0.0\n", - " Downloading greenlet-2.0.2.tar.gz (164 kB)\n", - "\u001b[K |████████████████████████████████| 164 kB 166.8 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: traitlets<6.0,>=5.1.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (5.1.1)\n", - "Requirement already satisfied: appnope in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.1.2)\n", - "Requirement already satisfied: nest-asyncio in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.5.5)\n", - "Requirement already satisfied: tornado<7.0,>=4.2 in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (6.1)\n", - "Requirement already satisfied: debugpy<2.0,>=1.0.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.5.1)\n", - "Requirement already satisfied: matplotlib-inline<0.2.0,>=0.1.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.1.2)\n", - "Requirement already satisfied: jupyter-client<8.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (6.1.12)\n", - "Requirement already satisfied: decorator in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (5.1.1)\n", - "Requirement already satisfied: prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (3.0.20)\n", - "Requirement already satisfied: jedi>=0.16 in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.18.1)\n", - "Requirement already satisfied: pygments>=2.4.0 in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.11.2)\n", - "Requirement already satisfied: stack-data in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.2.0)\n", - "Requirement already satisfied: backcall in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.2.0)\n", - "Requirement already satisfied: pexpect>4.3 in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (4.8.0)\n", - "Requirement already satisfied: pickleshare in ./opt/anaconda3/lib/python3.9/site-packages (from ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.7.5)\n", - "Requirement already satisfied: parso<0.9.0,>=0.8.0 in ./opt/anaconda3/lib/python3.9/site-packages (from jedi>=0.16->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.8.3)\n", - "Requirement already satisfied: MarkupSafe>=0.23 in ./opt/anaconda3/lib/python3.9/site-packages (from Jinja2>=2.10.1->Flask<2.3.0,>=1.0.4->dash>=1.0.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.1)\n", - "Requirement already satisfied: jupyter-core>=4.6.0 in ./opt/anaconda3/lib/python3.9/site-packages (from jupyter-client<8.0->ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (4.9.2)\n", - "Requirement already satisfied: python-dateutil>=2.1 in ./opt/anaconda3/lib/python3.9/site-packages (from jupyter-client<8.0->ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.8.2)\n", - "Requirement already satisfied: pyzmq>=13 in ./opt/anaconda3/lib/python3.9/site-packages (from jupyter-client<8.0->ipykernel>=4.10.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (22.3.0)\n", - "Requirement already satisfied: scikit-image>=0.12 in ./opt/anaconda3/lib/python3.9/site-packages (from lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.19.2)\n", - "Requirement already satisfied: matplotlib in ./opt/anaconda3/lib/python3.9/site-packages (from lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (3.5.1)\n", - "Requirement already satisfied: tqdm in ./opt/anaconda3/lib/python3.9/site-packages (from lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (4.64.0)\n", - "Requirement already satisfied: pytz>=2020.1 in ./opt/anaconda3/lib/python3.9/site-packages (from pandas>=0.19.2->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2021.3)\n", - "Requirement already satisfied: ptyprocess>=0.5 in ./opt/anaconda3/lib/python3.9/site-packages (from pexpect>4.3->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.7.0)\n", - "Requirement already satisfied: six in ./opt/anaconda3/lib/python3.9/site-packages (from plotly>=3.8.1->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.16.0)\n", - "Requirement already satisfied: tenacity>=6.2.0 in ./opt/anaconda3/lib/python3.9/site-packages (from plotly>=3.8.1->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (8.0.1)\n", - "Requirement already satisfied: wcwidth in ./opt/anaconda3/lib/python3.9/site-packages (from prompt-toolkit!=3.0.0,!=3.0.1,<3.1.0,>=2.0.0->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.2.5)\n", - "Requirement already satisfied: charset-normalizer~=2.0.0 in ./opt/anaconda3/lib/python3.9/site-packages (from requests>=2.19.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.4)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in ./opt/anaconda3/lib/python3.9/site-packages (from requests>=2.19.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.26.9)\n", - "Requirement already satisfied: certifi>=2017.4.17 in ./opt/anaconda3/lib/python3.9/site-packages (from requests>=2.19.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2021.10.8)\n", - "Requirement already satisfied: idna<4,>=2.5 in ./opt/anaconda3/lib/python3.9/site-packages (from requests>=2.19.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (3.3)\n", - "Collecting multiprocess\n", - " Downloading multiprocess-0.70.14-py39-none-any.whl (132 kB)\n", - "\u001b[K |████████████████████████████████| 132 kB 45.9 MB/s eta 0:00:01\n", - "\u001b[?25hRequirement already satisfied: fonttools>=4.22.0 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (4.25.0)\n", - "Requirement already satisfied: packaging>=20.0 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (21.3)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.3.2)\n", - "Requirement already satisfied: pyparsing>=2.2.1 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (3.0.4)\n", - "Requirement already satisfied: pillow>=6.2.0 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (9.0.1)\n", - "Requirement already satisfied: cycler>=0.10 in ./opt/anaconda3/lib/python3.9/site-packages (from matplotlib->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.11.0)\n", - "Requirement already satisfied: imageio>=2.4.1 in ./opt/anaconda3/lib/python3.9/site-packages (from scikit-image>=0.12->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.9.0)\n", - "Requirement already satisfied: networkx>=2.2 in ./opt/anaconda3/lib/python3.9/site-packages (from scikit-image>=0.12->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.7.1)\n", - "Requirement already satisfied: PyWavelets>=1.1.1 in ./opt/anaconda3/lib/python3.9/site-packages (from scikit-image>=0.12->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (1.3.0)\n", - "Requirement already satisfied: tifffile>=2019.7.26 in ./opt/anaconda3/lib/python3.9/site-packages (from scikit-image>=0.12->lime>=0.1.1.33->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2021.7.2)\n", - "Requirement already satisfied: threadpoolctl>=2.0.0 in ./opt/anaconda3/lib/python3.9/site-packages (from scikit-learn>=0.18.1->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.2.0)\n", - "Requirement already satisfied: cloudpickle in ./opt/anaconda3/lib/python3.9/site-packages (from shap>=0.28.5->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.0)\n", - "Requirement already satisfied: slicer==0.0.7 in ./opt/anaconda3/lib/python3.9/site-packages (from shap>=0.28.5->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.0.7)\n", - "Requirement already satisfied: numba in ./opt/anaconda3/lib/python3.9/site-packages (from shap>=0.28.5->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.55.1)\n", - "Requirement already satisfied: llvmlite<0.39,>=0.38.0rc1 in ./opt/anaconda3/lib/python3.9/site-packages (from numba->shap>=0.28.5->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.38.0)\n", - "Requirement already satisfied: executing in ./opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.8.3)\n", - "Requirement already satisfied: pure-eval in ./opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (0.2.2)\n", - "Requirement already satisfied: asttokens in ./opt/anaconda3/lib/python3.9/site-packages (from stack-data->ipython>=5.5.0->interpret-core[dash,debug,decisiontree,ebm,lime,linear,notebook,plotly,required,sensitivity,shap,skoperules,treeinterpreter]==0.4.2->interpret) (2.0.5)\n", - "Building wheels for collected packages: greenlet\n", - " Building wheel for greenlet (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for greenlet: filename=greenlet-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl size=190857 sha256=8d355fbc1017a6924888bb11356e46771dc1ddf43d70eb27a07da3a7d6b5b1b4\n", - " Stored in directory: /Users/mallikayadav/Library/Caches/pip/wheels/c4/e2/38/932349e5e893e6d464ea70f98f76a8d7b9ba73e62cc9db5579\n", - "Successfully built greenlet\n", - "Installing collected packages: dash-table, dash-html-components, dash-core-components, zope.event, multiprocess, greenlet, dash, treeinterpreter, skope-rules, SALib, interpret-core, gevent, dash-cytoscape, interpret\n", - " Attempting uninstall: greenlet\n", - " Found existing installation: greenlet 1.1.1\n", - " Uninstalling greenlet-1.1.1:\n", - " Successfully uninstalled greenlet-1.1.1\n", - "Successfully installed SALib-1.4.7 dash-2.10.2 dash-core-components-2.0.0 dash-cytoscape-0.3.0 dash-html-components-2.0.0 dash-table-5.0.0 gevent-22.10.2 greenlet-2.0.2 interpret-0.4.2 interpret-core-0.4.2 multiprocess-0.70.14 skope-rules-1.0.1 treeinterpreter-0.2.3 zope.event-4.6\n" - ] - } - ], - "source": [ - "!pip install interpret\n", - "from interpret.glassbox import ExplainableBoostingClassifier # interpret ebm class\n", - "from interpret.perf import ROC # ROC measure for ebm\n", - "import itertools # for cartesian product of parameters\n", - "import matplotlib.pyplot as plt # for plots\n", - "import numpy as np # for basic array manipulation \n", - "import pandas as pd # for dataframe manipulation\n", - "import random # to sample from lists\n", - "from sklearn.metrics import accuracy_score, f1_score # for selecting model cutoffs\n", - "import time # for timers\n", - "\n", - "# set numpy random seed for better reproducibility\n", - "SEED = 12345 \n", - "np.random.seed(SEED)\n", - "\n", - "# set number of threads\n", - "NTHREAD = 4" - ] - }, - { - "cell_type": "markdown", - "id": "f4c8e46e", - "metadata": {}, - "source": [ - "### Define utility functions" - ] - }, - { - "cell_type": "markdown", - "id": "9a1f486c", - "metadata": {}, - "source": [ - "#### Utility function to calculate confusion matrices by demographic group" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "4231a6a7", - "metadata": {}, - "outputs": [], - "source": [ - "def get_confusion_matrix(frame, y, yhat, by=None, level=None, cutoff=0.5, verbose=True):\n", - "\n", - " \"\"\" Creates confusion matrix from pandas dataframe of y and yhat values, can be sliced \n", - " by a variable and level.\n", - " \n", - " :param frame: Pandas dataframe of actual (y) and predicted (yhat) values.\n", - " :param y: Name of actual value column.\n", - " :param yhat: Name of predicted value column.\n", - " :param by: By variable to slice frame before creating confusion matrix, default None.\n", - " :param level: Value of by variable to slice frame before creating confusion matrix, default None.\n", - " :param cutoff: Cutoff threshold for confusion matrix, default 0.5. \n", - " :param verbose: Whether to print confusion matrix titles, default True. \n", - " :return: Confusion matrix as pandas dataframe. \n", - " \n", - " \"\"\"\n", - " \n", - " # determine levels of target (y) variable\n", - " # sort for consistency\n", - " level_list = list(frame[y].unique())\n", - " level_list.sort(reverse=True) \n", - "\n", - " # init confusion matrix\n", - " cm_frame = pd.DataFrame(columns=['actual: ' + str(i) for i in level_list], \n", - " index=['predicted: ' + str(i) for i in level_list])\n", - " \n", - " # don't destroy original data\n", - " frame_ = frame.copy(deep=True)\n", - " \n", - " # convert numeric predictions to binary decisions using cutoff\n", - " dname = 'd_' + str(y)\n", - " frame_[dname] = np.where(frame_[yhat] > cutoff , 1, 0)\n", - " \n", - " # slice frame\n", - " if (by is not None) & (level is not None):\n", - " frame_ = frame_[frame[by] == level]\n", - " \n", - " # calculate size of each confusion matrix value\n", - " for i, lev_i in enumerate(level_list):\n", - " for j, lev_j in enumerate(level_list):\n", - " cm_frame.iat[j, i] = frame_[(frame_[y] == lev_i) & (frame_[dname] == lev_j)].shape[0]\n", - " # i, j vs. j, i nasty little bug ... updated 8/30/19\n", - " \n", - " # output results\n", - " if verbose:\n", - " if by is None:\n", - " print('Confusion matrix:')\n", - " else:\n", - " print('Confusion matrix by ' + by + '=' + str(level))\n", - " \n", - " return cm_frame" - ] - }, - { - "cell_type": "markdown", - "id": "4ffdbdf9", - "metadata": {}, - "source": [ - "### Utility function to calculate AIR" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "1c84741a", - "metadata": {}, - "outputs": [], - "source": [ - "def air(cm_dict, reference_key, protected_key, verbose=True):\n", - "\n", - " \"\"\" Calculates the adverse impact ratio as a quotient between protected and \n", - " reference group acceptance rates: protected_prop/reference_prop. \n", - " Optionally prints intermediate values. ASSUMES 0 IS \"POSITIVE\" OUTCOME!\n", - "\n", - " :param cm_dict: Dictionary of demographic group confusion matrices. \n", - " :param reference_key: Name of reference group in cm_dict as a string.\n", - " :param protected_key: Name of protected group in cm_dict as a string.\n", - " :param verbose: Whether to print intermediate acceptance rates, default True. \n", - " :return: AIR.\n", - " \n", - " \"\"\"\n", - "\n", - " eps = 1e-20 # numeric stability and divide by 0 protection\n", - " \n", - " # reference group summary\n", - " reference_accepted = float(cm_dict[reference_key].iat[1,0] + cm_dict[reference_key].iat[1,1]) # predicted 0's\n", - " reference_total = float(cm_dict[reference_key].sum().sum())\n", - " reference_prop = reference_accepted/reference_total\n", - " if verbose:\n", - " print(reference_key.title() + ' proportion accepted: %.3f' % reference_prop)\n", - " \n", - " # protected group summary\n", - " protected_accepted = float(cm_dict[protected_key].iat[1,0] + cm_dict[protected_key].iat[1,1]) # predicted 0's\n", - " protected_total = float(cm_dict[protected_key].sum().sum())\n", - " protected_prop = protected_accepted/protected_total\n", - " if verbose:\n", - " print(protected_key.title() + ' proportion accepted: %.3f' % protected_prop)\n", - "\n", - " # return adverse impact ratio\n", - " if np.isclose(protected_accepted, 0.0):\n", - " return np.nan\n", - " else:\n", - " return ((protected_prop + eps)/(reference_prop + eps))" - ] - }, - { - "cell_type": "markdown", - "id": "1580f32b", - "metadata": {}, - "source": [ - "#### Utility function to select probability cutoff by F1" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "fd849162", - "metadata": {}, - "outputs": [], - "source": [ - "def get_max_f1_frame(frame, y, yhat, res=0.01, air_reference=None, air_protected=None, verbose=False): \n", - " \n", - " \"\"\" Utility function for finding max. F1. \n", - " Coupled to get_confusion_matrix() and air(). \n", - " Assumes 1 is the marker for class membership.\n", - " \n", - " :param frame: Pandas dataframe of actual (y) and predicted (yhat) values.\n", - " :param y: Known y values.\n", - " :param yhat: Model scores.\n", - " :param res: Resolution over which to search for max. F1, default 0.01.\n", - " :param air_reference: Reference group for AIR calculation, optional.\n", - " :param air_protected: Protected group for AIR calculation, optional.\n", - " :return: Pandas DataFrame of cutoffs to select from.\n", - " \n", - " \"\"\"\n", - " \n", - " do_air = all(v is not None for v in [air_reference, air_protected])\n", - " \n", - " # init frame to store f1 at different cutoffs\n", - " if do_air:\n", - " columns = ['cut', 'f1', 'acc', 'air']\n", - " else:\n", - " columns = ['cut', 'f1', 'acc']\n", - " f1_frame = pd.DataFrame(columns=['cut', 'f1', 'acc'])\n", - " \n", - " # copy known y and score values into a temporary frame\n", - " temp_df = frame[[y, yhat]].copy(deep=True)\n", - " \n", - " # find f1 at different cutoffs and store in acc_frame\n", - " for cut in np.arange(0, 1 + res, res):\n", - " temp_df['decision'] = np.where(temp_df.iloc[:, 1] > cut, 1, 0)\n", - " f1 = f1_score(temp_df.iloc[:, 0], temp_df['decision'])\n", - " acc = accuracy_score(temp_df.iloc[:, 0], temp_df['decision'])\n", - " row_dict = {'cut': cut, 'f1': f1, 'acc': acc}\n", - " if do_air:\n", - " # conditionally calculate AIR \n", - " cm_ref = get_confusion_matrix(frame, y, yhat, by=air_reference, level=1, cutoff=cut, verbose=verbose)\n", - " cm_pro = get_confusion_matrix(frame, y, yhat, by=air_protected, level=1, cutoff=cut, verbose=verbose)\n", - " air_ = air({air_reference: cm_ref, air_protected: cm_pro}, air_reference, air_protected, verbose=verbose)\n", - " row_dict['air'] = air_\n", - " \n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - " \n", - " del temp_df\n", - " \n", - " return f1_frame " - ] - }, - { - "cell_type": "markdown", - "id": "2c5a7c34", - "metadata": {}, - "source": [ - "#### Utility function for random grid search" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "fd9aa71d", - "metadata": {}, - "outputs": [], - "source": [ - "def ebm_grid(train, valid, x_names, y_name, gs_params=None, n_models=None, early_stopping_rounds=None, seed=None,\n", - " air_reference=None, air_protected=None, air_cut=None, verbose=False):\n", - " \n", - " \"\"\" Performs a random grid search over n_models and gs_params.\n", - " Optionally considers random feature sets and AIR.\n", - " Coupled to get_confusion_matrix() and air(). \n", - "\n", - " :param train: Training data as Pandas DataFrame.\n", - " :param valid: Validation data as Pandas DataFrame.\n", - " :param x_names: Names of input features.\n", - " :param y_name: Name of target feature.\n", - " :param gs_params: Dictionary of lists of potential EBM parameters over which to search. \n", - " :param n_models: Number of random models to evaluate.\n", - " :param early_stopping_rounds: EBM early stopping rounds.\n", - " :param seed: Random seed for better interpretability.\n", - " :param air_reference: Reference group for AIR calculation, optional.\n", - " :param air_protected: Protected group for AIR calculation, optional. \n", - " :param air_cut: Cutoff for AIR calculation, optional.\n", - " :param verbose: Whether to print intermediate acceptance rates, default False. \n", - " :return: Tuple: (Best EBM model, Pandas DataFrame of models to select from)\n", - "\n", - " \"\"\"\n", - " \n", - " # init returned frame\n", - " do_air = all(v is not None for v in [air_reference, air_protected])\n", - " if do_air: \n", - " columns = list(gs_params.keys()) + ['features', 'auc', 'air']\n", - " else:\n", - " columns = list(gs_params.keys()) + ['auc']\n", - " ebm_grid_frame = pd.DataFrame(columns=columns)\n", - " \n", - " # cartesian product of gs_params\n", - " keys, values = zip(*gs_params.items())\n", - " experiments = [dict(zip(keys, v)) for v in itertools.product(*values)]\n", - "\n", - " # preserve exact reproducibility for this function\n", - " np.random.seed(SEED) \n", - " \n", - " # select randomly from cartesian product space\n", - " selected_experiments = np.random.choice(len(experiments), n_models)\n", - "\n", - " # set global params for seed, etc.\n", - " params = {'n_jobs': NTHREAD,\n", - " 'early_stopping_rounds': early_stopping_rounds, \n", - " 'random_state': SEED}\n", - "\n", - " # init grid search loop\n", - " best_candidate = None\n", - " best_score = 0\n", - "\n", - " # grid search loop\n", - " for i, exp in enumerate(selected_experiments):\n", - "\n", - " params.update(experiments[exp]) # override global params with current grid run params\n", - "\n", - " print('Grid search run %d/%d:' % (int(i + 1), int(n_models)))\n", - " print('Training with parameters:', params)\n", - " \n", - " # train \n", - " ebm = ExplainableBoostingClassifier(**params)\n", - " \n", - " # conditionally select random features \n", - " features = x_names\n", - " if do_air:\n", - " n_features = random.randrange(len(x_names)) + 1\n", - " features = random.sample(x_names, n_features)\n", - " candidate = ebm.fit(train[features], train[y_name]) \n", - "\n", - " # calculate AUC\n", - " ebm_perf = ROC(ebm.predict_proba).explain_perf(valid[features], valid[y_name])\n", - " candidate_best_score = ebm_perf._internal_obj['overall']['auc']\n", - " \n", - " # compose values to add to ebm_grid_frame\n", - " row_dict = params.copy()\n", - " row_dict['auc'] = candidate_best_score\n", - " if do_air:\n", - " # collect random feature set\n", - " row_dict['features'] = features\n", - " # conditionally calculate AIR \n", - " valid_phat = valid.copy(deep=True)\n", - " valid_phat['phat'] = candidate.predict_proba(valid[features])[:, 1]\n", - " cm_ref = get_confusion_matrix(valid_phat, y_name, 'phat', by=air_reference, level=1, cutoff=air_cut, verbose=verbose)\n", - " cm_pro = get_confusion_matrix(valid_phat, y_name, 'phat', by=air_protected, level=1, cutoff=air_cut, verbose=verbose)\n", - " air_ = air({air_reference: cm_ref, air_protected: cm_pro}, air_reference, air_protected, verbose=verbose)\n", - " row_dict['air'] = air_\n", - " del valid_phat\n", - "\n", - " # append run to ebm_grid_frame\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n", - " \n", - " # determine if current model is better than previous best\n", - " if candidate_best_score > best_score:\n", - " best_score = candidate_best_score\n", - " best_ebm = candidate\n", - " print('Grid search new best score discovered at iteration %d/%d: %.4f.' %\n", - " (int(i + 1), int(n_models), candidate_best_score))\n", - "\n", - " print('---------- ----------')\n", - " \n", - " del row_dict\n", - " del ebm\n", - " \n", - " return best_ebm, ebm_grid_frame\n" - ] - }, - { - "cell_type": "markdown", - "id": "ff95a6c3", - "metadata": {}, - "source": [ - "#### Start global timer" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "b3cfd7d5", - "metadata": {}, - "outputs": [], - "source": [ - "tic = time.time()" - ] - }, - { - "cell_type": "markdown", - "id": "a49fa751", - "metadata": {}, - "source": [ - "#### Import data" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "01b16c35", - "metadata": {}, - "outputs": [], - "source": [ - "data = pd.read_csv('hmda_train_preprocessed.csv')\n", - "test = pd.read_csv('hmda_test_preprocessed.csv')" - ] - }, - { - "cell_type": "markdown", - "id": "7d62a054", - "metadata": {}, - "source": [ - "### Assign basic modeling roles" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "8fcd471b", - "metadata": {}, - "outputs": [], - "source": [ - "y_name = 'high_priced'\n", - "x_names = ['term_360', 'conforming', 'debt_to_income_ratio_missing', 'loan_amount_std', 'loan_to_value_ratio_std', 'no_intro_rate_period_std',\n", - " 'intro_rate_period_std', 'property_value_std', 'income_std', 'debt_to_income_ratio_std']" - ] - }, - { - "cell_type": "markdown", - "id": "f2341f44", - "metadata": {}, - "source": [ - "### Fit interpretable model" - ] - }, - { - "cell_type": "markdown", - "id": "c6a887e0", - "metadata": {}, - "source": [ - "### Split data into train and validation partitions" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "502c8f69", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train data rows = 112253, columns = 23\n", - "Validation data rows = 48085, columns = 23\n" - ] - } - ], - "source": [ - "np.random.seed(SEED) # preserve exact reproducibility for this cell\n", - "\n", - "split_ratio = 0.7 # 70%/30% train/test split\n", - "\n", - "# execute split\n", - "split = np.random.rand(len(data)) < split_ratio\n", - "train = data[split]\n", - "valid = data[~split]\n", - "\n", - "# summarize split\n", - "print('Train data rows = %d, columns = %d' % (train.shape[0], train.shape[1]))\n", - "print('Validation data rows = %d, columns = %d' % (valid.shape[0], valid.shape[1]))\n", - "\n", - "# benchmark - Train data rows = 112253, columns = 23\n", - "# benchmark - Validation data rows = 48085, columns = 23" - ] - }, - { - "cell_type": "markdown", - "id": "5cf1e85c", - "metadata": {}, - "source": [ - "### Explainable Boosting Machine" - ] - }, - { - "cell_type": "markdown", - "id": "d730305c", - "metadata": {}, - "source": [ - "#### Fit EBM with random grid search" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "0beac2a1", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search run 1/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 1/10: 0.8218.\n", - "---------- ----------\n", - "Grid search run 2/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 3/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 4/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 5/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 5/10: 0.8253.\n", - "---------- ----------\n", - "Grid search run 6/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 7/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 8/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 9/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 10/10:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n", - "---------- ----------\n", - "EBM training completed in 346.40 s.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - } - ], - "source": [ - "# dictionary of hyperparameter value lists for grid search\n", - "gs_params = {'max_bins': [128, 256, 512],\n", - " 'max_interaction_bins': [16, 32, 64],\n", - " 'interactions': [5, 10, 15],\n", - " 'outer_bags': [4, 8, 12], \n", - " 'inner_bags': [0, 4],\n", - " 'learning_rate': [0.001, 0.01, 0.05],\n", - " 'validation_size': [0.1, 0.25, 0.5],\n", - " 'min_samples_leaf': [1, 2, 5, 10],\n", - " 'max_leaves': [1, 3, 5]}\n", - "\n", - "# start local timer\n", - "ebm_tic = time.time()\n", - "\n", - "# EBM grid search\n", - "best_ebm, ebm_grid_frame = ebm_grid(train, valid, x_names, y_name, gs_params=gs_params, n_models=10, \n", - " early_stopping_rounds=100, seed=SEED)\n", - "\n", - "# end local timer\n", - "ebm_toc = time.time() - ebm_tic\n", - "print('EBM training completed in %.2f s.' % (ebm_toc))" - ] - }, - { - "cell_type": "markdown", - "id": "b80e0a69", - "metadata": {}, - "source": [ - "#### Basic AUC assessment" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "8ee8801f", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Validation AUC: 0.8253.\n" - ] - } - ], - "source": [ - "best_ebm_perf = ROC(best_ebm.predict_proba).explain_perf(valid[x_names], valid[y_name])\n", - "print('Validation AUC: %.4f.' % best_ebm_perf._internal_obj['overall']['auc'])" - ] - }, - { - "cell_type": "markdown", - "id": "acb42bb6", - "metadata": {}, - "source": [ - "#### Score validation data with model" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "0a8fbbc6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
row_idblackasianwhiteamindhipachispanicnon_hispanicmalefemale...debt_to_income_ratio_missingloan_amount_stdloan_to_value_ratio_stdno_intro_rate_period_stdintro_rate_period_stdproperty_value_stdincome_stddebt_to_income_ratio_stdhigh_pricedphat
00NaNNaNNaNNaNNaNNaNNaN1.00.0...0-0.5143930.3339220.244394-0.215304-0.535932-0.0403070.85460100.165646
160.00.01.00.00.00.01.00.01.0...0-0.4264480.3552490.244394-0.215304-0.474263-0.0209041.03741900.314594
280.00.01.00.00.00.01.0NaNNaN...00.2771090.1429950.244394-0.2153040.111598-0.0198650.03191600.022284
3100.00.01.00.00.00.01.0NaNNaN...0-0.382476-0.2404320.244394-0.215304-0.320089-0.0281810.94601000.015600
4110.00.01.00.00.01.00.0NaNNaN...00.101220-0.2665290.244394-0.2153040.1115980.016515-1.15640600.004888
\n", - "

5 rows × 24 columns

\n", - "
" - ], - "text/plain": [ - " row_id black asian white amind hipac hispanic non_hispanic male \\\n", - "0 0 NaN NaN NaN NaN NaN NaN NaN 1.0 \n", - "1 6 0.0 0.0 1.0 0.0 0.0 0.0 1.0 0.0 \n", - "2 8 0.0 0.0 1.0 0.0 0.0 0.0 1.0 NaN \n", - "3 10 0.0 0.0 1.0 0.0 0.0 0.0 1.0 NaN \n", - "4 11 0.0 0.0 1.0 0.0 0.0 1.0 0.0 NaN \n", - "\n", - " female ... debt_to_income_ratio_missing loan_amount_std \\\n", - "0 0.0 ... 0 -0.514393 \n", - "1 1.0 ... 0 -0.426448 \n", - "2 NaN ... 0 0.277109 \n", - "3 NaN ... 0 -0.382476 \n", - "4 NaN ... 0 0.101220 \n", - "\n", - " loan_to_value_ratio_std no_intro_rate_period_std intro_rate_period_std \\\n", - "0 0.333922 0.244394 -0.215304 \n", - "1 0.355249 0.244394 -0.215304 \n", - "2 0.142995 0.244394 -0.215304 \n", - "3 -0.240432 0.244394 -0.215304 \n", - "4 -0.266529 0.244394 -0.215304 \n", - "\n", - " property_value_std income_std debt_to_income_ratio_std high_priced \\\n", - "0 -0.535932 -0.040307 0.854601 0 \n", - "1 -0.474263 -0.020904 1.037419 0 \n", - "2 0.111598 -0.019865 0.031916 0 \n", - "3 -0.320089 -0.028181 0.946010 0 \n", - "4 0.111598 0.016515 -1.156406 0 \n", - "\n", - " phat \n", - "0 0.165646 \n", - "1 0.314594 \n", - "2 0.022284 \n", - "3 0.015600 \n", - "4 0.004888 \n", - "\n", - "[5 rows x 24 columns]" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "best_ebm_phat = pd.DataFrame(best_ebm.predict_proba(valid[x_names])[:, 1], columns=['phat']) \n", - "best_ebm_phat = pd.concat([valid.reset_index(drop=True), best_ebm_phat], axis=1)\n", - "best_ebm_phat.head()" - ] - }, - { - "cell_type": "markdown", - "id": "4661fcf7", - "metadata": {}, - "source": [ - "#### Investigate Best Model (EBM) for Discrimination" - ] - }, - { - "cell_type": "markdown", - "id": "8d325dda", - "metadata": {}, - "source": [ - "#### Find optimal cutoff based on F1" - ] - }, - { - "cell_type": "markdown", - "id": "3394273e", - "metadata": {}, - "source": [ - "#### Cutoffs are normally selected by maximizing a quality statistic or a business metric, and not by considering bias and discrimination." - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "id": "a4ebe98b", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " cut f1 acc\n", - "0 0.0 0.17386 0.095206\n", - "1 0.01 0.233938 0.384777\n", - "2 0.02 0.262541 0.479048\n", - "3 0.03 0.280733 0.530685\n", - "4 0.04 0.295953 0.569783\n", - ".. ... ... ...\n", - "96 0.96 0.0 0.904794\n", - "97 0.97 0.0 0.904794\n", - "98 0.98 0.0 0.904794\n", - "99 0.99 0.0 0.904794\n", - "100 1.0 0.0 0.904794\n", - "\n", - "[101 rows x 3 columns]\n", - "\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "ename": "TypeError", - "evalue": "reduction operation 'argmax' not allowed for this dtype", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "Input \u001b[0;32mIn [19]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[38;5;28mprint\u001b[39m()\n\u001b[1;32m 6\u001b[0m max_f1 \u001b[38;5;241m=\u001b[39m f1_frame[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mf1\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39mmax()\n\u001b[0;32m----> 7\u001b[0m best_cut \u001b[38;5;241m=\u001b[39m f1_frame\u001b[38;5;241m.\u001b[39mloc[\u001b[38;5;28mint\u001b[39m(\u001b[43mf1_frame\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mf1\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43midxmax\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcut\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;66;03m#idxmax() returns the index of the maximum value\u001b[39;00m\n\u001b[1;32m 8\u001b[0m acc \u001b[38;5;241m=\u001b[39m f1_frame\u001b[38;5;241m.\u001b[39mloc[\u001b[38;5;28mint\u001b[39m(f1_frame[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mf1\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m.\u001b[39midxmax()), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124macc\u001b[39m\u001b[38;5;124m'\u001b[39m]\n\u001b[1;32m 10\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBest EBM F1: \u001b[39m\u001b[38;5;132;01m%.4f\u001b[39;00m\u001b[38;5;124m achieved at cutoff: \u001b[39m\u001b[38;5;132;01m%.2f\u001b[39;00m\u001b[38;5;124m with accuracy: \u001b[39m\u001b[38;5;132;01m%.4f\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m'\u001b[39m \u001b[38;5;241m%\u001b[39m (max_f1, best_cut, acc))\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/series.py:2404\u001b[0m, in \u001b[0;36mSeries.idxmax\u001b[0;34m(self, axis, skipna, *args, **kwargs)\u001b[0m\n\u001b[1;32m 2339\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21midxmax\u001b[39m(\u001b[38;5;28mself\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m, skipna\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 2340\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[1;32m 2341\u001b[0m \u001b[38;5;124;03m Return the row label of the maximum value.\u001b[39;00m\n\u001b[1;32m 2342\u001b[0m \n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2402\u001b[0m \u001b[38;5;124;03m nan\u001b[39;00m\n\u001b[1;32m 2403\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m-> 2404\u001b[0m i \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43margmax\u001b[49m\u001b[43m(\u001b[49m\u001b[43maxis\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskipna\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2405\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 2406\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m np\u001b[38;5;241m.\u001b[39mnan\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/base.py:657\u001b[0m, in \u001b[0;36mIndexOpsMixin.argmax\u001b[0;34m(self, axis, skipna, *args, **kwargs)\u001b[0m\n\u001b[1;32m 653\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m delegate\u001b[38;5;241m.\u001b[39margmax()\n\u001b[1;32m 654\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 655\u001b[0m \u001b[38;5;66;03m# error: Incompatible return value type (got \"Union[int, ndarray]\", expected\u001b[39;00m\n\u001b[1;32m 656\u001b[0m \u001b[38;5;66;03m# \"int\")\u001b[39;00m\n\u001b[0;32m--> 657\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mnanops\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnanargmax\u001b[49m\u001b[43m(\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;66;43;03m# type: ignore[return-value]\u001b[39;49;00m\n\u001b[1;32m 658\u001b[0m \u001b[43m \u001b[49m\u001b[43mdelegate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mskipna\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mskipna\u001b[49m\n\u001b[1;32m 659\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/opt/anaconda3/lib/python3.9/site-packages/pandas/core/nanops.py:88\u001b[0m, in \u001b[0;36mdisallow.__call__.._f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28many\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcheck(obj) \u001b[38;5;28;01mfor\u001b[39;00m obj \u001b[38;5;129;01min\u001b[39;00m obj_iter):\n\u001b[1;32m 87\u001b[0m f_name \u001b[38;5;241m=\u001b[39m f\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnan\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m---> 88\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m(\n\u001b[1;32m 89\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mreduction operation \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mf_name\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m not allowed for this dtype\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 90\u001b[0m )\n\u001b[1;32m 91\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 92\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m np\u001b[38;5;241m.\u001b[39merrstate(invalid\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mignore\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", - "\u001b[0;31mTypeError\u001b[0m: reduction operation 'argmax' not allowed for this dtype" - ] - } - ], - "source": [ - "f1_frame = get_max_f1_frame(best_ebm_phat, y_name, 'phat')\n", - "\n", - "print(f1_frame)\n", - "print()\n", - "\n", - "max_f1 = f1_frame['f1'].max()\n", - "best_cut = f1_frame.loc[int(f1_frame['f1'].idxmax()), 'cut'] #idxmax() returns the index of the maximum value\n", - "acc = f1_frame.loc[int(f1_frame['f1'].idxmax()), 'acc']\n", - "\n", - "print('Best EBM F1: %.4f achieved at cutoff: %.2f with accuracy: %.4f.' % (max_f1, best_cut, acc))" - ] - }, - { - "cell_type": "code", - "execution_count": 44, - "id": "e8568c18", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - " cut f1 acc\n", - "0 0.0 0.17386 0.095206\n", - "1 0.01 0.233938 0.384777\n", - "2 0.02 0.262541 0.479048\n", - "3 0.03 0.280733 0.530685\n", - "4 0.04 0.295953 0.569783\n", - ".. ... ... ...\n", - "96 0.96 0.0 0.904794\n", - "97 0.97 0.0 0.904794\n", - "98 0.98 0.0 0.904794\n", - "99 0.99 0.0 0.904794\n", - "100 1.0 0.0 0.904794\n", - "\n", - "[101 rows x 3 columns]\n", - "\n", - "Best EBM F1: 0.3666 achieved at cutoff: 0.18 with accuracy: 0.7927.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n" - ] - } - ], - "source": [ - "f1_frame = get_max_f1_frame(best_ebm_phat, y_name, 'phat')\n", - "\n", - "print(f1_frame)\n", - "print()\n", - "\n", - "f1_frame['f1'] = f1_frame['f1'].astype(float) # Convert 'f1' column to a numeric type\n", - "\n", - "max_f1 = f1_frame['f1'].max()\n", - "best_cut = f1_frame.loc[int(f1_frame['f1'].idxmax()), 'cut']\n", - "acc = f1_frame.loc[int(f1_frame['f1'].idxmax()), 'acc']\n", - "\n", - "print('Best EBM F1: %.4f achieved at cutoff: %.2f with accuracy: %.4f.' % (max_f1, best_cut, acc))\n" - ] - }, - { - "cell_type": "markdown", - "id": "0192c6c8", - "metadata": {}, - "source": [ - "#### Find confusion matrices for demographic groups" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "id": "6904004b", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Confusion matrix by black=1\n", - " actual: 1 actual: 0\n", - "predicted: 1 470 911\n", - "predicted: 0 194 1617\n", - "\n", - "Confusion matrix by asian=1\n", - " actual: 1 actual: 0\n", - "predicted: 1 95 176\n", - "predicted: 0 53 2926\n", - "\n", - "Confusion matrix by white=1\n", - " actual: 1 actual: 0\n", - "predicted: 1 1965 6117\n", - "predicted: 0 1200 25243\n", - "\n", - "Confusion matrix by male=1\n", - " actual: 1 actual: 0\n", - "predicted: 1 1036 3122\n", - "predicted: 0 628 11046\n", - "\n", - "Confusion matrix by female=1\n", - " actual: 1 actual: 0\n", - "predicted: 1 847 2175\n", - "predicted: 0 393 6617\n", - "\n" - ] - } - ], - "source": [ - "demographic_group_names = ['black', 'asian', 'white', 'male', 'female']\n", - "cm_dict = {}\n", - "\n", - "for name in demographic_group_names:\n", - " cm_dict[name] = get_confusion_matrix(best_ebm_phat, y_name, 'phat', by=name, level=1, cutoff=best_cut)\n", - " print(cm_dict[name])\n", - " print()" - ] - }, - { - "cell_type": "markdown", - "id": "3f91812b", - "metadata": {}, - "source": [ - "#### Find AIR for Asian people" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "id": "e7819e3e", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "White proportion accepted: 0.766\n", - "Asian proportion accepted: 0.917\n", - "Adverse impact ratio for Asian people vs. White people: 1.197\n" - ] - } - ], - "source": [ - "print('Adverse impact ratio for Asian people vs. White people: %.3f' % air(cm_dict, 'white', 'asian'))" - ] - }, - { - "cell_type": "markdown", - "id": "d487eeed", - "metadata": {}, - "source": [ - "#### Find AIR for Black people" - ] - }, - { - "cell_type": "code", - "execution_count": 47, - "id": "fdf9add7", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "White proportion accepted: 0.766\n", - "Black proportion accepted: 0.567\n", - "Adverse impact ratio for Black people vs. White people: 0.741\n" - ] - } - ], - "source": [ - "print('Adverse impact ratio for Black people vs. White people: %.3f' % air(cm_dict, 'white', 'black'))" - ] - }, - { - "cell_type": "markdown", - "id": "bdf97b07", - "metadata": {}, - "source": [ - "#### Find AIR for Females" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "1b282195", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Male proportion accepted: 0.737\n", - "Female proportion accepted: 0.699\n", - "Adverse impact ratio for Females vs. Males: 0.948\n" - ] - } - ], - "source": [ - "print('Adverse impact ratio for Females vs. Males: %.3f' % air(cm_dict, 'male', 'female'))" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "560661f6", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# Adverse impact ratios\n", - "ratios = [1.197, 0.741, 0.948]\n", - "groups = ['Asian vs. White', 'Black vs. White', 'Females vs. Males']\n", - "\n", - "# Define light colors\n", - "colors = ['blue', 'orange', 'green']\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "# Plot bar chart\n", - "plt.figure(figsize=(10, 6))\n", - "plt.bar(groups, ratios, color=colors)\n", - "plt.xlabel('Demographic Groups')\n", - "plt.ylabel('Adverse Impact Ratio')\n", - "plt.title('Adverse Impact Ratios for Different Groups')\n", - "\n", - "# Display the values on top of each bar\n", - "for i, ratio in enumerate(ratios):\n", - " plt.text(i, ratio, f'{ratio:.3f}', ha='center', va='bottom')\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "52545aa7", - "metadata": {}, - "source": [ - "#### Attempt remediation of discovered discrimination" - ] - }, - { - "cell_type": "markdown", - "id": "624c187d", - "metadata": {}, - "source": [ - "#### Simplest remediation: Find cutoff with better Black vs. White AIR" - ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "63b58472", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n", - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/1002360894.py:42: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " f1_frame = f1_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
cutf1accair
220.220.3567940.8329420.816260
230.230.3501790.8411560.843019
240.240.3417090.8501610.864101
250.250.3301540.8583130.878680
260.260.3164660.8651550.887407
\n", - "
" - ], - "text/plain": [ - " cut f1 acc air\n", - "22 0.22 0.356794 0.832942 0.816260\n", - "23 0.23 0.350179 0.841156 0.843019\n", - "24 0.24 0.341709 0.850161 0.864101\n", - "25 0.25 0.330154 0.858313 0.878680\n", - "26 0.26 0.316466 0.865155 0.887407" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f1_frame = get_max_f1_frame(best_ebm_phat, y_name, 'phat', air_reference='white', air_protected='black')\n", - "# print highest quality cutoffs above four fifths rule cutoff\n", - "f1_frame[f1_frame['air'] > 0.8].sort_values(by='f1', ascending=False).head()" - ] - }, - { - "cell_type": "markdown", - "id": "5d123efe", - "metadata": {}, - "source": [ - "# Cutoffs in the 0.21-0.25range provide increased accuracy and less bias towards Black people." - ] - }, - { - "cell_type": "markdown", - "id": "ffc3fab6", - "metadata": {}, - "source": [ - "#### Check that other groups are not adversely impacted by change" - ] - }, - { - "cell_type": "code", - "execution_count": 50, - "id": "63ee4016", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adverse impact ratio for Asian people vs. White people: 1.128\n", - "Adverse impact ratio for Black people vs. White people: 0.816\n", - "Adverse impact ratio for Females vs. Males: 0.965\n" - ] - } - ], - "source": [ - "# calculate new confusion matrics for each group\n", - "rem_cm_dict = {}\n", - "for name in demographic_group_names:\n", - " rem_cm_dict[name] = get_confusion_matrix(best_ebm_phat, y_name, 'phat', by=name, level=1, cutoff=0.22, verbose=False)\n", - "\n", - "# calculate AIR for each group\n", - "print('Adverse impact ratio for Asian people vs. White people: %.3f' % air(rem_cm_dict, 'white', 'asian', verbose=False))\n", - "print('Adverse impact ratio for Black people vs. White people: %.3f' % air(rem_cm_dict, 'white', 'black', verbose=False))\n", - "print('Adverse impact ratio for Females vs. Males: %.3f' % air(rem_cm_dict, 'male', 'female', verbose=False))" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "35642808", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAGDCAYAAABjkcdfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA0CElEQVR4nO3dd9gkZZnv8e+PGZJIWBAQmEFAkAwjDsmjqAcXjGBABVEXQVlcUNeVw+pxza5hMYAE0RVBXQVcFVEXQQ+CrASJAxKFBXSGJDmqI8N9/qh6h56XN/QAPfXOO9/PdfXVFZ56+q7q6u67n3qqKlWFJEmSFq2lug5AkiRpSWQSJkmS1AGTMEmSpA6YhEmSJHXAJEySJKkDJmGSJEkdMAmTnoAkxyf5VNdxaGxJ9k7y86e4ziQ5Lsk9SS54Kuse53WvTPLi0WJI8q4ktyd5MMlqiyouSU+cSZjUI8lZ7Q/bsl3H8mQkWS9JJZnadSxDkrw4yZxxyhyfZG6bSNyd5BdJNumz/setc1V9p6p2ebKxD/MC4G+BaVW13ZOtrCfuB9vH7Ul+muRve8tV1eZVddZIMSRZGvgisEtVPb2q7nqycS3kOtyU5KXjlFkxyRfbsg8l+UOS7yd50ttQWlyZhEmtJOsBLwQK2K2D108SP5Pwb1X1dGAd4Gbg2I7jGe5ZwE1V9dDCLjhOUrxKu95bA78ATk6yT58xrAksB1y5sDG1cU15IsstRP3LAr8EtgReBawEbAqcCLxilGUmzB8IaVD8wpce8zbgfOB44O96ZyR5bpJLkjyQ5CSaH7yheVcneVXP+NQkdybZph3fIcm5Se5NctnQIaV23llJ/jXJOcDDwAZJ9klyQ/taNybZu6f8vu3r3ZPk9CTP6mfF2hamo5P8rG1tOSfJM5Mc1tZ1TZLn9pS/KckHk1zVzj8uyXLtvL9pW2ruaOf9NMm0nmVXbcvf0s7/UZIVgJ8Ba/e0+Kw9VsxV9Sfge8CMnrpfmeTSJPcnmZ3kYz2LnN0+39vWv2O7LX/ds/zzk1yY5L72+fk980bd7j1l9gO+DuzYvsbH2+nvTHJ923r34951a1u5DkxyHXDdWOvcrvdtVXU48DHgc0OJ+VBr0wgxnABc27Puv2zLb5KmJfHuJNcmeWNPTMcn+UqSU5M8BLwkydpJftC+rzcmeU9P+Y8l+V6Sb7Xb58okM9t53wbWBX7SxnPICKv1VmAa8JqquqKq5lXVQ1X1/ar62FjbarRtmxFaPtvP0zt63s9zkhzRvt/XJNm5p+y477c0cFXlw4ePKoDrgX8Angf8FViznb4M8HvgfcDSwB7t/E+18z8CfKennlcC17TD6wB30fzbX4rmENJdwOrt/LOAPwCbA1OBlYH7gY3b+WsBm7fDr2lj3LQt+y/AuaOsy3o0LXpT2/HjgTvbdVuOplXiRprEcwrwKeDMnuVvAq4ApgOrAuf0rO9qwOuBpwErAv8J/Khn2f8CTgL+pt1eL2qnvxiYM857cHzP66wAfBu4rGf+i2laU5YCtgJup/lhf9w6t9P2AX7dDq8K3EOTEEwF9mrHV2tfa8TtPkKM8+tsx/93u223AZYFjgDO7plfNC1bqwLLj/de9UzfoJ2+ac978tJRYhj+fq8AzAbe3q7rNm2Mm/ds5/uA/9Vuy6cBF9Psy8u0r30DsGtb/mPAn2n24ynAZ4Dzh+0vLx3jfT0ROL6Pz+AC22qsbTvK+30W8I6ebfQIj31u39Su86oL83778DHIhy1hEpDkBTSHeL5XVRcD/wO8uZ29A82X+GFV9deq+j5wYc/i3wV2S/K0dvzN7TSAtwCnVtWpVfVoVf0CuIgFD8EcX1VXVtUjND8ajwJbJFm+qm6tqqFDTH8PfKaqrm7LfhqY0W9rGHByVV1cVX8GTgb+XFXfqqp5NEnTc4eVP7KqZlfV3cC/0iQtVNVdVfWDqnq4qh5o572o3Y5rAS8HDqiqe9rt9as+4xtycJJ7gQdo+j69dWhGVZ1VVb9tt+XlwAlDr92HVwLXVdW3q+qRqjoBuAZ4dTt/tO0+nr2Bb1TVJVX1F+CDNK1U6/WU+UxV3V1N616/bmmfV12IZYa8iuZw5XHtul4C/IDmD8SQU6rqnKp6lCaxXb2qPlFVc6vqBuDfgT17yv+63Y/n0STHWy9EPM8AbhsaSTIjTcvw/UmuHVa2d1v1s23H8kce+9yeRNNi+Mp23hN9v6WnjEmY1Pg74OdVdWc7/l0eOyS5NnBzVfXe7f73QwNVdT1wNfDqNhHbjceSsGcBb2h/cO5tk4sX0PzzHjK7p66HaP6xHwDcmuS/8ljH9GcBh/fUczcQmta2ftzeM/ynEcafPqz87J7h39NsB5I8LclXk/w+yf00hwFXSdOvaDpwd1Xd02dMI/l8Va1C09LxJ2DjoRlJtk9yZnvI7D6a7fSMPutdm573rWe91hlnuy9UvVX1IE1rZ+/7Mnv4Qn0YWv7uJ7Dss4Dth+13ewPPHCWmZ9EcKu4t/39p+poNua1n+GFgufTfb+suevb5qprVvsevo2nh6tUbVz/bdiwjfW7XfpLvt/SUMQnTEi/J8sAbgRcluS3JbTSHMLZOsjVwK7BOkvQstu6wak6gaSnaHbiqTcyg+UH5dlWt0vNYoao+27Ns748EVXV6Vf0tzY/WNTQtEkN1/f2wupavqnOf9EYY2fSe4XV5rGXm/TSJ0fZVtRKwUzs9bYyrJlllhPpqhGmjqqo/AO+lSTyXbyd/F/gxML2qVgaOaV+3n/pvoUk2eq1L0/l/rO0+ngXqTdP/bbWhevuMbSSvpWnJGd5S1I/ZwK+G7StPr6p3jRLTbODGYeVXrKoRO82PYLz1OwPYpd02C1PXWNt26KSEp/WU700yYeTP7S3wpN5v6SljEiY1fa3mAZvRdAKfQdPv6r9p+kydR3OY8D1pOt2/Dhh+Wv2JwC7Au3isFQzgP2hayHZNMiXJcmku1TCNESRZM8lu7Y/NX4AH29igSTg+mGTztuzKSd7wpNZ8bAcmmZZkVZpWkZPa6SvStFDd28776NACVXUrTQf8o9N04F86yVCSdjuwWpKV+w2gPXx7C7B/z2vfXVV/TnNpgzf3FL+D5hDTBqNUdyrwnCRvbt/HN9G85z8dZ7uP57vA29tDbMvSHCb+TVXd1O969mpjOYhmu36wPVy4sH5Ks65vbd+DpZNsm2TTUcpfANyf5J+TLN/uq1sk2bbP17ud0bc7wLdo/syc3NY7Jc2JHjPHqXfUbVtVd9AkY29p69sXePaw5deg+dwu3X5WNgVOfZLvt/SUMQmTmsOOx1XVH6o5M+22qroNOJLmEM6jNIdN9qHpyP0m4Ie9FbTJx3nA83ksWaGqZtO0jv1fmiRhNvB/GP2ztxRNS9MtNIehXkRzsgBVdTLwOeDE9jDgFTT9rwblu8DPaTpo30DTeR/gMJpO03fSnE162rDl3kpz4sI1NC05/9jGfw1Ni+EN7SGvMc+O7HEocEj7I/wPwCeSPEDTifx7Q4Wq6mGa/mnntPXv0FtJNdfOehXN9r0LOAR4VXsIetTtPp6qOgP4ME2fq1tpEoE9x1xoZPemOVPxtzR9Bt9QVd94AvXQ9tXbpY3jFppDiZ/j8Yf+hsrPo+kbN4PmhI07ac7A7Ddh/gzwL+12P3iE+v8MvAS4iubEjftpWvi2pWmFHm09xtu276T5PN1Fc3LL8Fbh3wAbtevzr8Ae7X7whN9v6amUBQ+XS1JzOQSas8z+X9exSE9EmmusvaOqXtB1LNJobAmTJEnqgEmYJElSBzwcKUmS1AFbwiRJkjpgEiZJktSBxe4u9c94xjNqvfXW6zoMSZKkcV188cV3VtXqI81b7JKw9dZbj4suuqjrMCRJksaVZPjt0ubzcKQkSVIHTMIkSZI6YBImSZLUAZMwSZKkDpiEiX333Zc11liDLbbYYsT511xzDTvuuCPLLrssn//85+dPnz17Ni95yUvYdNNN2XzzzTn88MPnz5s1axY77LADM2bMYObMmVxwwQUDXw9JkhYnJmFin3324bTTTht1/qqrrsqXv/xlDj744AWmT506lS984QtcffXVnH/++Rx11FFcddVVABxyyCF89KMfZdasWXziE5/gkEMOGeg6SJK0uDEJEzvttBOrrrrqqPPXWGMNtt12W5ZeeukFpq+11lpss802AKy44opsuumm3HzzzQAk4f777wfgvvvuY+211x5Q9JIkLZ4Wu+uEaWK66aabuPTSS9l+++0BOOyww9h11105+OCDefTRRzn33HM7jlCSpInFljA9aQ8++CCvf/3rOeyww1hppZUA+MpXvsKXvvQlZs+ezZe+9CX222+/jqOUJGliMQnTk/LXv/6V17/+9ey999687nWvmz/9m9/85vzxN7zhDXbMlyRpGJMwPWFVxX777cemm27KP/3TPy0wb+211+ZXv/oVAL/85S/ZaKONughRkqQJK1XVdQwLZebMmeW9I59ae+21F2eddRZ33nkna665Jh//+Mf561//CsABBxzAbbfdxsyZM7n//vtZaqmlePrTn85VV13F5Zdfzgtf+EK23HJLllqqyec//elP84pXvIJf//rXvPe97+WRRx5hueWW4+ijj+Z5z3tel6spSdIil+Tiqpo54jyTMEmSpMEYKwnz7MhRJF1HoMXZYvbfRpLUAfuESZIkdcAkTJIkqQMmYZIkSR0wCZMkSeqASZgkSVIHTMIkSZI6YBImSZLUAZMwSZKkDpiESZIkdcAkTJIkqQMmYZIkSR0wCZMkSeqASZgkSVIHTMIkSZI6YBImSZLUAZMwSZKkDpiESZIkdcAkTJIkqQMmYZIkSR0wCZMkSeqASZgkSVIHTMIkSZI6YBImSZLUAZMwSZKkDpiESZIkdcAkTJIkqQMmYZIkSR0wCZMkSeqASZgkSVIHTMIkSZI6YBImSZLUgYElYUm+keSPSa4YZX6SfDnJ9UkuT7LNoGKRJEmaaAbZEnY88LIx5r8c2Kh97A98ZYCxSJIkTSgDS8Kq6mzg7jGK7A58qxrnA6skWWtQ8UiSJE0kXfYJWweY3TM+p532OEn2T3JRkovuuOOORRKcJEnSIHWZhGWEaTVSwar6WlXNrKqZq6+++oDDkiRp4jnttNPYeOON2XDDDfnsZz/7uPn33HMPr33ta9lqq63YbrvtuOKKx7pk33vvveyxxx5ssskmbLrpppx33nkAfOxjH2OdddZhxowZzJgxg1NPPXWRrY9gaoevPQeY3jM+Dbilo1gkSZqw5s2bx4EHHsgvfvELpk2bxrbbbstuu+3GZpttNr/Mpz/9aWbMmMHJJ5/MNddcw4EHHsgZZ5wBwHvf+15e9rKX8f3vf5+5c+fy8MMPz1/ufe97HwcffPAiXyd12xL2Y+Bt7VmSOwD3VdWtHcYjSdKEdMEFF7DhhhuywQYbsMwyy7DnnntyyimnLFDmqquuYueddwZgk0024aabbuL222/n/vvv5+yzz2a//fYDYJlllmGVVVZZ1KugEQzyEhUnAOcBGyeZk2S/JAckOaAtcipwA3A98O/APwwqFkmSFmc333wz06c/dvBo2rRp3HzzzQuU2XrrrfnhD38INEnb73//e+bMmcMNN9zA6quvztvf/nae+9zn8o53vIOHHnpo/nJHHnkkW221Ffvuuy/33HPPolkhAYM9O3KvqlqrqpauqmlVdWxVHVNVx7Tzq6oOrKpnV9WWVXXRoGKRJGlxVvX4LtPJgl2rP/CBD3DPPfcwY8YMjjjiCJ773OcydepUHnnkES655BLe9a53cemll7LCCivM71P2rne9i//5n/9h1qxZrLXWWrz//e9fJOujRpd9wiRJUh+mTZvG7NmPXVBgzpw5rL322guUWWmllTjuuOOAJmlbf/31WX/99Xn44YeZNm0a22+/PQB77LHH/CRszTXXnL/8O9/5Tl71qlcNelXUw9sWSZI0wW277bZcd9113HjjjcydO5cTTzyR3XbbbYEy9957L3PnzgXg61//OjvttBMrrbQSz3zmM5k+fTrXXnstAGecccb8Dv233vpYV+yTTz6ZLbbYYhGtkcCWMEmSJrypU6dy5JFHsuuuuzJv3jz23XdfNt98c4455hgADjjgAK6++mre9ra3MWXKFDbbbDOOPfbY+csfccQR7L333sydO5cNNthgfovZIYccwqxZs0jCeuutx1e/+tVO1m9JlZGOM09kM2fOrIsuGnz3sYx0FTOpT4vZx0qSNCBJLq6qmSPNsyVMkrRYysf9t6wnpz7a7T9m+4RJkiR1wCRMkiSpAyZhkiRJHTAJkyRJ6oBJmCRJUgdMwiRJkjpgEiZJktQBkzBJkqQOmIRJkiR1wCRMkiSpAyZhkiRJHTAJkyRJ6oBJmCRJUgdMwiRJkjpgEiZJktQBkzBJkqQOmIRJkiR1wCRMkiSpAyZhkiRJHTAJkyRJ6oBJmCRJUgdMwiRJkjpgEiZJktQBkzBJkqQOmIRJkiR1wCRMkiSpAyZhkiRJHTAJkyRJ6oBJmCRJUgdMwiRJkjpgEiZJktQBkzBJk85pp53GxhtvzIYbbshnP/vZx82/7777ePWrX83WW2/N5ptvznHHHTd/3r777ssaa6zBFlts8bjljjjiCDbeeGM233xzDjnkkIGug6TJzyRM0qQyb948DjzwQH72s59x1VVXccIJJ3DVVVctUOaoo45is80247LLLuOss87i/e9/P3PnzgVgn3324bTTTntcvWeeeSannHIKl19+OVdeeSUHH3zwIlkfSZOXSZikSeWCCy5gww03ZIMNNmCZZZZhzz335JRTTlmgTBIeeOABqooHH3yQVVddlalTpwKw0047seqqqz6u3q985St84AMfYNlllwVgjTXWGPzKSJrUTMIkTSo333wz06dPnz8+bdo0br755gXKHHTQQVx99dWsvfbabLnllhx++OEstdTYX4e/+93v+O///m+23357XvSiF3HhhRcOJH5JSw6TMEmTSlU9blqSBcZPP/10ZsyYwS233MKsWbM46KCDuP/++8es95FHHuGee+7h/PPP59BDD+WNb3zjiK8lSf0yCZM0qUybNo3Zs2fPH58zZw5rr732AmWOO+44Xve615GEDTfckPXXX59rrrlm3HqHltluu+1YaqmluPPOOweyDpKWDCZhkiaVbbfdluuuu44bb7yRuXPn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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Adverse impact ratios\n", - "ratios = [1.128, 0.816, 0.965]\n", - "groups = ['Asian vs. White', 'Black vs. White', 'Females vs. Males']\n", - "\n", - "# Define light colors\n", - "colors = ['blue', 'orange', 'green']\n", - "\n", - "\n", - "\n", - "# Plot bar chart\n", - "plt.figure(figsize=(10, 6))\n", - "plt.bar(groups, ratios, color=colors)\n", - "plt.xlabel('Demographic Groups')\n", - "plt.ylabel('Adverse Impact Ratio')\n", - "plt.title('Adverse Impact Ratios for Different Groups')\n", - "\n", - "# Display the values on top of each bar\n", - "for i, ratio in enumerate(ratios):\n", - " plt.text(i, ratio, f'{ratio:.3f}', ha='center', va='bottom')\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "id": "87df900f", - "metadata": {}, - "source": [ - "#### More sophisticated remdiation: Model selection via quality and fairness" - ] - }, - { - "cell_type": "code", - "execution_count": 85, - "id": "e181f886", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search run 1/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 1/150: 0.5730.\n", - "---------- ----------\n", - "Grid search run 2/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 2/150: 0.8175.\n", - "---------- ----------\n", - "Grid search run 3/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 4/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 5/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 6/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 7/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 8/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 9/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 10/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 11/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 12/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 13/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 14/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 15/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 16/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 17/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 18/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 19/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 20/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 21/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 22/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 23/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 23/150: 0.8181.\n", - "---------- ----------\n", - "Grid search run 24/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 25/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 26/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 27/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 28/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 28/150: 0.8212.\n", - "---------- ----------\n", - "Grid search run 29/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 30/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 30/150: 0.8222.\n", - "---------- ----------\n", - "Grid search run 31/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 32/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 33/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 34/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 35/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 36/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 37/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 38/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 39/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 40/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 41/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 42/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 43/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 44/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 45/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 46/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 47/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 48/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 49/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 50/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 50/150: 0.8227.\n", - "---------- ----------\n", - "Grid search run 51/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 52/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 53/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 54/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 55/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 56/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 57/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 58/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 59/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 60/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 61/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 62/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 63/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 64/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 65/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 66/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 66/150: 0.8233.\n", - "---------- ----------\n", - "Grid search run 67/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 68/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 69/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 70/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 71/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 72/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 73/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 74/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 74/150: 0.8236.\n", - "---------- ----------\n", - "Grid search run 75/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 76/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 77/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 78/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 79/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Grid search new best score discovered at iteration 79/150: 0.8251.\n", - "---------- ----------\n", - "Grid search run 80/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 81/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 82/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 83/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 84/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 85/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 86/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 87/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 88/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 89/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 90/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 91/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 92/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 93/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 94/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 95/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 96/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 97/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 98/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 99/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 100/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 101/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 102/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 103/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 104/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 105/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 106/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 107/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 108/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 109/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 110/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 111/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 112/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 113/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 114/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 115/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 116/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 117/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 16, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.25, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 118/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 119/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 120/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 121/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 122/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 123/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 124/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 125/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 126/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 127/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 128/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 129/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 130/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 131/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 132/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 133/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 134/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 135/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 136/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 137/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 138/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 5, 'outer_bags': 8, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.5, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 139/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 140/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 141/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 5, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.1, 'min_samples_leaf': 5, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 142/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.05, 'validation_size': 0.5, 'min_samples_leaf': 10, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 143/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.1, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 144/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 64, 'interactions': 10, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 145/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 128, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 4, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 1, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 146/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 4, 'inner_bags': 4, 'learning_rate': 0.001, 'validation_size': 0.25, 'min_samples_leaf': 1, 'max_leaves': 5}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 147/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 10, 'outer_bags': 8, 'inner_bags': 0, 'learning_rate': 0.01, 'validation_size': 0.1, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 148/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 16, 'interactions': 5, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 2, 'max_leaves': 3}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 149/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 512, 'max_interaction_bins': 32, 'interactions': 15, 'outer_bags': 4, 'inner_bags': 0, 'learning_rate': 0.05, 'validation_size': 0.25, 'min_samples_leaf': 10, 'max_leaves': 1}\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "---------- ----------\n", - "Grid search run 150/150:\n", - "Training with parameters: {'n_jobs': 4, 'early_stopping_rounds': 100, 'random_state': 12345, 'max_bins': 256, 'max_interaction_bins': 64, 'interactions': 15, 'outer_bags': 12, 'inner_bags': 0, 'learning_rate': 0.001, 'validation_size': 0.5, 'min_samples_leaf': 1, 'max_leaves': 3}\n", - "---------- ----------\n", - "EBM training completed in 4117.14 s.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/var/folders/s_/psmzh19x55n79gg5ssgdy5p00000gn/T/ipykernel_5042/74914493.py:89: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.\n", - " ebm_grid_frame = ebm_grid_frame.append(row_dict, ignore_index=True)\n" - ] - } - ], - "source": [ - "# start local timer\n", - "ebm2_tic = time.time()\n", - "\n", - "# new grid search that also considers AIR and fairness\n", - "best_ebm2, ebm_grid_frame = ebm_grid(train, best_ebm_phat, x_names, y_name, gs_params=gs_params, n_models=150, \n", - " early_stopping_rounds=100, seed=SEED, air_reference='white', air_protected='black', \n", - " air_cut=0.17)\n", - "\n", - "# end local timer\n", - "ebm2_toc = time.time() - ebm2_tic\n", - "print('EBM training completed in %.2f s.' % (ebm2_toc))" - ] - }, - { - "cell_type": "markdown", - "id": "65affc06", - "metadata": {}, - "source": [ - "#### Display grid search results as table" - ] - }, - { - "cell_type": "code", - "execution_count": 86, - "id": "7e6f5875", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
max_binsmax_interaction_binsinteractionsouter_bagsinner_bagslearning_ratevalidation_sizemin_samples_leafmax_leavesfeaturesaucairearly_stopping_roundsn_jobsrandom_state
0512165400.050.2513[no_intro_rate_period_std, conforming, term_36...0.5729571.004738100.04.012345.0
1128325800.0010.2525[debt_to_income_ratio_missing, conforming, loa...0.8175020.727533100.04.012345.0
2512165400.0010.513[property_value_std, loan_amount_std, term_360...0.7833670.795111100.04.012345.0
3128645440.050.515[conforming, debt_to_income_ratio_missing, int...0.8031040.765788100.04.012345.0
45126415400.050.1103[debt_to_income_ratio_missing, property_value_...0.802890.693465100.04.012345.0
................................................
1455123210440.0010.2515[property_value_std, debt_to_income_ratio_miss...0.7174330.926316100.04.012345.0
1465123210800.010.123[term_360, income_std, conforming, no_intro_ra...0.8236540.716449100.04.012345.0
147256165400.050.2523[property_value_std, term_360, debt_to_income_...0.7569590.813052100.04.012345.0
1485123215400.050.25101[loan_to_value_ratio_std, property_value_std]0.51.0100.04.012345.0
14925664151200.0010.513[intro_rate_period_std, term_360, debt_to_inco...0.5494891.00595100.04.012345.0
\n", - "

150 rows × 15 columns

\n", - "
" - ], - "text/plain": [ - " max_bins max_interaction_bins interactions outer_bags inner_bags \\\n", - "0 512 16 5 4 0 \n", - "1 128 32 5 8 0 \n", - "2 512 16 5 4 0 \n", - "3 128 64 5 4 4 \n", - "4 512 64 15 4 0 \n", - ".. ... ... ... ... ... \n", - "145 512 32 10 4 4 \n", - "146 512 32 10 8 0 \n", - "147 256 16 5 4 0 \n", - "148 512 32 15 4 0 \n", - "149 256 64 15 12 0 \n", - "\n", - " learning_rate validation_size min_samples_leaf max_leaves \\\n", - "0 0.05 0.25 1 3 \n", - "1 0.001 0.25 2 5 \n", - "2 0.001 0.5 1 3 \n", - "3 0.05 0.5 1 5 \n", - "4 0.05 0.1 10 3 \n", - ".. ... ... ... ... \n", - "145 0.001 0.25 1 5 \n", - "146 0.01 0.1 2 3 \n", - "147 0.05 0.25 2 3 \n", - "148 0.05 0.25 10 1 \n", - "149 0.001 0.5 1 3 \n", - "\n", - " features auc air \\\n", - "0 [no_intro_rate_period_std, conforming, term_36... 0.572957 1.004738 \n", - "1 [debt_to_income_ratio_missing, conforming, loa... 0.817502 0.727533 \n", - "2 [property_value_std, loan_amount_std, term_360... 0.783367 0.795111 \n", - "3 [conforming, debt_to_income_ratio_missing, int... 0.803104 0.765788 \n", - "4 [debt_to_income_ratio_missing, property_value_... 0.80289 0.693465 \n", - ".. ... ... ... \n", - "145 [property_value_std, debt_to_income_ratio_miss... 0.717433 0.926316 \n", - "146 [term_360, income_std, conforming, no_intro_ra... 0.823654 0.716449 \n", - "147 [property_value_std, term_360, debt_to_income_... 0.756959 0.813052 \n", - "148 [loan_to_value_ratio_std, property_value_std] 0.5 1.0 \n", - "149 [intro_rate_period_std, term_360, debt_to_inco... 0.549489 1.00595 \n", - "\n", - " early_stopping_rounds n_jobs random_state \n", - "0 100.0 4.0 12345.0 \n", - "1 100.0 4.0 12345.0 \n", - "2 100.0 4.0 12345.0 \n", - "3 100.0 4.0 12345.0 \n", - "4 100.0 4.0 12345.0 \n", - ".. ... ... ... \n", - "145 100.0 4.0 12345.0 \n", - "146 100.0 4.0 12345.0 \n", - "147 100.0 4.0 12345.0 \n", - "148 100.0 4.0 12345.0 \n", - "149 100.0 4.0 12345.0 \n", - "\n", - "[150 rows x 15 columns]" - ] - }, - "execution_count": 86, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ebm_grid_frame" - ] - }, - { - "cell_type": "markdown", - "id": "8bbcc149", - "metadata": {}, - "source": [ - "#### Display grid search results as plot" - ] - }, - { - "cell_type": "code", - "execution_count": 87, - "id": "479d0699", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(8,8))\n", - "_ = ebm_grid_frame.plot(kind='scatter', x='air', y='auc', title='AIR vs. AUC for EBMs', ax=ax)\n", - "_ = ax.axvline(x=0.8, color='r', linestyle='--')\n", - "_ = ax.set_ylim([0.4, 0.85])\n", - "_ = ax.set_xlim([0.75, 1.05])\n", - "_ = ax.set_xlabel('AIR')\n", - "_ = ax.set_ylabel('AUC')" - ] - }, - { - "cell_type": "markdown", - "id": "f8269300", - "metadata": {}, - "source": [ - "#### Retrain most accurate model above 0.8 AIR" - ] - }, - { - "cell_type": "code", - "execution_count": 88, - "id": "eb524bd0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Best AUC: 0.7806 above 0.8 AIR (0.8083).\n", - "Remediated EBM retrained with AUC: 0.7806.\n" - ] - } - ], - "source": [ - "# extract new params dict from ebm_grid_frame\n", - "rem_params = ebm_grid_frame.loc[ebm_grid_frame['air'] > 0.8].sort_values(by='auc', ascending=False).iloc[0, :].to_dict()\n", - "\n", - "# extract features from dict then delete from dict \n", - "rem_x_names = rem_params['features']\n", - "del rem_params['features']\n", - "\n", - "# record and delete other extraneous information\n", - "print('Best AUC: %.4f above 0.8 AIR (%.4f).' % (rem_params['auc'], rem_params['air']))\n", - "del rem_params['auc']\n", - "del rem_params['air']\n", - "\n", - "# reset some parameters to integers\n", - "rem_params['random_state'] = int(rem_params['random_state'])\n", - "rem_params['n_jobs'] = int(rem_params['n_jobs'])\n", - "\n", - "# retrain\n", - "rem_ebm = ExplainableBoostingClassifier(**rem_params)\n", - "rem_ebm.fit(train[rem_x_names], train[y_name]) \n", - "rem_ebm_perf = ROC(rem_ebm.predict_proba).explain_perf(valid[rem_x_names], valid[y_name])\n", - "rem_auc = rem_ebm_perf._internal_obj['overall']['auc']\n", - "print('Remediated EBM retrained with AUC: %.4f.' % rem_auc)" - ] - }, - { - "cell_type": "markdown", - "id": "44041927", - "metadata": {}, - "source": [ - "#### Check that other groups are not adversely impacted by change" - ] - }, - { - "cell_type": "code", - "execution_count": 89, - "id": "162e7d03", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Adverse impact ratio for Asian people vs. White people: 1.151\n", - "Adverse impact ratio for Black people vs. White people: 0.808\n", - "Adverse impact ratio for Females vs. Males: 0.958\n" - ] - } - ], - "source": [ - "# create a frame with remediated EBM predictions\n", - "best_ebm_phat2 = pd.DataFrame(rem_ebm.predict_proba(valid[rem_x_names])[:, 1], columns=['phat']) \n", - "best_ebm_phat2 = pd.concat([valid.reset_index(drop=True), best_ebm_phat2], axis=1)\n", - "\n", - "# calculate new confusion matrices for each group\n", - "rem_cm_dict2 = {}\n", - "for name in demographic_group_names:\n", - " rem_cm_dict2[name] = get_confusion_matrix(best_ebm_phat2, y_name, 'phat', by=name, level=1, cutoff=0.17, verbose=False)\n", - "\n", - "# calculate AIR for each group\n", - "print('Adverse impact ratio for Asian people vs. White people: %.3f' % air(rem_cm_dict2, 'white', 'asian', verbose=False))\n", - "print('Adverse impact ratio for Black people vs. White people: %.3f' % air(rem_cm_dict2, 'white', 'black', verbose=False))\n", - "print('Adverse impact ratio for Females vs. Males: %.3f' % air(rem_cm_dict2, 'male', 'female', verbose=False))" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "c1b882fe", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "# Adverse impact ratios\n", - "ratios = [1.151, 0.808, 0.958]\n", - "groups = ['Asian vs. White', 'Black vs. White', 'Females vs. Males']\n", - "\n", - "# Define light colors\n", - "colors = ['blue', 'orange', 'green']\n", - "\n", - "\n", - "\n", - "# Plot bar chart\n", - "plt.figure(figsize=(10, 6))\n", - "plt.bar(groups, ratios, color=colors)\n", - "plt.xlabel('Demographic Groups')\n", - "plt.ylabel('Adverse Impact Ratio')\n", - "plt.title('Adverse Impact Ratios for Different Groups')\n", - "\n", - "# Display the values on top of each bar\n", - "for i, ratio in enumerate(ratios):\n", - " plt.text(i, ratio, f'{ratio:.3f}', ha='center', va='bottom')\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 82, - "id": "cf99699e", - "metadata": {}, - "outputs": [], - "source": [ - "import datetime \n", - "best_ebm_submit = pd.DataFrame(best_ebm.predict_proba(test[x_names])[:, 1], columns=['phat'])\n", - "best_ebm_submit.to_csv('ph_best_ebm_' + str(datetime.datetime.now().strftime(\"%Y_%m_%d_%H_%M_%S\") + '.csv'), \n", - " index=False)" - ] - }, - { - "cell_type": "markdown", - "id": "ef07d56f", - "metadata": {}, - "source": [ - "#### Print best model parameters for later use" - ] - }, - { - "cell_type": "code", - "execution_count": 90, - "id": "d8fd1f10", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'max_bins': 128,\n", - " 'max_interaction_bins': 64,\n", - " 'interactions': 10,\n", - " 'outer_bags': 4,\n", - " 'inner_bags': 0,\n", - " 'learning_rate': 0.01,\n", - " 'validation_size': 0.5,\n", - " 'min_samples_leaf': 2,\n", - " 'max_leaves': 5,\n", - " 'early_stopping_rounds': 100.0,\n", - " 'n_jobs': 4,\n", - " 'random_state': 12345}" - ] - }, - "execution_count": 90, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rem_params" - ] - }, - { - "cell_type": "markdown", - "id": "50fb63f4", - "metadata": {}, - "source": [ - "##### Print best model features for later use" - ] - }, - { - "cell_type": "code", - "execution_count": 91, - "id": "bff5e277", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['debt_to_income_ratio_std',\n", - " 'term_360',\n", - " 'intro_rate_period_std',\n", - " 'property_value_std',\n", - " 'no_intro_rate_period_std',\n", - " 'income_std']" - ] - }, - "execution_count": 91, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rem_x_names" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "751ee03a", - "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.7.16" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -}